18362fd64SLinus Torvalds /* SPDX-License-Identifier: GPL-2.0-only */ 25ec47cdaSMasahiro Yamada /* 35ec47cdaSMasahiro Yamada * Definitions for DDR memories based on JEDEC specs 45ec47cdaSMasahiro Yamada * 55ec47cdaSMasahiro Yamada * Copyright (C) 2012 Texas Instruments, Inc. 65ec47cdaSMasahiro Yamada * 75ec47cdaSMasahiro Yamada * Aneesh V <aneesh@ti.com> 85ec47cdaSMasahiro Yamada */ 95ec47cdaSMasahiro Yamada #ifndef __JEDEC_DDR_H 105ec47cdaSMasahiro Yamada #define __JEDEC_DDR_H 115ec47cdaSMasahiro Yamada 125ec47cdaSMasahiro Yamada #include <linux/types.h> 135ec47cdaSMasahiro Yamada 145ec47cdaSMasahiro Yamada /* DDR Densities */ 155ec47cdaSMasahiro Yamada #define DDR_DENSITY_64Mb 1 165ec47cdaSMasahiro Yamada #define DDR_DENSITY_128Mb 2 175ec47cdaSMasahiro Yamada #define DDR_DENSITY_256Mb 3 185ec47cdaSMasahiro Yamada #define DDR_DENSITY_512Mb 4 195ec47cdaSMasahiro Yamada #define DDR_DENSITY_1Gb 5 205ec47cdaSMasahiro Yamada #define DDR_DENSITY_2Gb 6 215ec47cdaSMasahiro Yamada #define DDR_DENSITY_4Gb 7 225ec47cdaSMasahiro Yamada #define DDR_DENSITY_8Gb 8 235ec47cdaSMasahiro Yamada #define DDR_DENSITY_16Gb 9 245ec47cdaSMasahiro Yamada #define DDR_DENSITY_32Gb 10 255ec47cdaSMasahiro Yamada 265ec47cdaSMasahiro Yamada /* DDR type */ 275ec47cdaSMasahiro Yamada #define DDR_TYPE_DDR2 1 285ec47cdaSMasahiro Yamada #define DDR_TYPE_DDR3 2 295ec47cdaSMasahiro Yamada #define DDR_TYPE_LPDDR2_S4 3 305ec47cdaSMasahiro Yamada #define DDR_TYPE_LPDDR2_S2 4 315ec47cdaSMasahiro Yamada #define DDR_TYPE_LPDDR2_NVM 5 32976897ddSLukasz Luba #define DDR_TYPE_LPDDR3 6 335ec47cdaSMasahiro Yamada 345ec47cdaSMasahiro Yamada /* DDR IO width */ 355ec47cdaSMasahiro Yamada #define DDR_IO_WIDTH_4 1 365ec47cdaSMasahiro Yamada #define DDR_IO_WIDTH_8 2 375ec47cdaSMasahiro Yamada #define DDR_IO_WIDTH_16 3 385ec47cdaSMasahiro Yamada #define DDR_IO_WIDTH_32 4 395ec47cdaSMasahiro Yamada 405ec47cdaSMasahiro Yamada /* Number of Row bits */ 415ec47cdaSMasahiro Yamada #define R9 9 425ec47cdaSMasahiro Yamada #define R10 10 435ec47cdaSMasahiro Yamada #define R11 11 445ec47cdaSMasahiro Yamada #define R12 12 455ec47cdaSMasahiro Yamada #define R13 13 465ec47cdaSMasahiro Yamada #define R14 14 475ec47cdaSMasahiro Yamada #define R15 15 485ec47cdaSMasahiro Yamada #define R16 16 495ec47cdaSMasahiro Yamada 505ec47cdaSMasahiro Yamada /* Number of Column bits */ 515ec47cdaSMasahiro Yamada #define C7 7 525ec47cdaSMasahiro Yamada #define C8 8 535ec47cdaSMasahiro Yamada #define C9 9 545ec47cdaSMasahiro Yamada #define C10 10 555ec47cdaSMasahiro Yamada #define C11 11 565ec47cdaSMasahiro Yamada #define C12 12 575ec47cdaSMasahiro Yamada 585ec47cdaSMasahiro Yamada /* Number of Banks */ 595ec47cdaSMasahiro Yamada #define B1 0 605ec47cdaSMasahiro Yamada #define B2 1 615ec47cdaSMasahiro Yamada #define B4 2 625ec47cdaSMasahiro Yamada #define B8 3 635ec47cdaSMasahiro Yamada 645ec47cdaSMasahiro Yamada /* Refresh rate in nano-seconds */ 655ec47cdaSMasahiro Yamada #define T_REFI_15_6 15600 665ec47cdaSMasahiro Yamada #define T_REFI_7_8 7800 675ec47cdaSMasahiro Yamada #define T_REFI_3_9 3900 685ec47cdaSMasahiro Yamada 695ec47cdaSMasahiro Yamada /* tRFC values */ 705ec47cdaSMasahiro Yamada #define T_RFC_90 90000 715ec47cdaSMasahiro Yamada #define T_RFC_110 110000 725ec47cdaSMasahiro Yamada #define T_RFC_130 130000 735ec47cdaSMasahiro Yamada #define T_RFC_160 160000 745ec47cdaSMasahiro Yamada #define T_RFC_210 210000 755ec47cdaSMasahiro Yamada #define T_RFC_300 300000 765ec47cdaSMasahiro Yamada #define T_RFC_350 350000 775ec47cdaSMasahiro Yamada 785ec47cdaSMasahiro Yamada /* Mode register numbers */ 795ec47cdaSMasahiro Yamada #define DDR_MR0 0 805ec47cdaSMasahiro Yamada #define DDR_MR1 1 815ec47cdaSMasahiro Yamada #define DDR_MR2 2 825ec47cdaSMasahiro Yamada #define DDR_MR3 3 835ec47cdaSMasahiro Yamada #define DDR_MR4 4 845ec47cdaSMasahiro Yamada #define DDR_MR5 5 855ec47cdaSMasahiro Yamada #define DDR_MR6 6 865ec47cdaSMasahiro Yamada #define DDR_MR7 7 875ec47cdaSMasahiro Yamada #define DDR_MR8 8 885ec47cdaSMasahiro Yamada #define DDR_MR9 9 895ec47cdaSMasahiro Yamada #define DDR_MR10 10 905ec47cdaSMasahiro Yamada #define DDR_MR11 11 915ec47cdaSMasahiro Yamada #define DDR_MR16 16 925ec47cdaSMasahiro Yamada #define DDR_MR17 17 935ec47cdaSMasahiro Yamada #define DDR_MR18 18 945ec47cdaSMasahiro Yamada 955ec47cdaSMasahiro Yamada /* 965ec47cdaSMasahiro Yamada * LPDDR2 related defines 975ec47cdaSMasahiro Yamada */ 985ec47cdaSMasahiro Yamada 995ec47cdaSMasahiro Yamada /* MR4 register fields */ 1005ec47cdaSMasahiro Yamada #define MR4_SDRAM_REF_RATE_SHIFT 0 1015ec47cdaSMasahiro Yamada #define MR4_SDRAM_REF_RATE_MASK 7 1025ec47cdaSMasahiro Yamada #define MR4_TUF_SHIFT 7 1035ec47cdaSMasahiro Yamada #define MR4_TUF_MASK (1 << 7) 1045ec47cdaSMasahiro Yamada 1055ec47cdaSMasahiro Yamada /* MR4 SDRAM Refresh Rate field values */ 1065ec47cdaSMasahiro Yamada #define SDRAM_TEMP_NOMINAL 0x3 1075ec47cdaSMasahiro Yamada #define SDRAM_TEMP_RESERVED_4 0x4 1085ec47cdaSMasahiro Yamada #define SDRAM_TEMP_HIGH_DERATE_REFRESH 0x5 1095ec47cdaSMasahiro Yamada #define SDRAM_TEMP_HIGH_DERATE_REFRESH_AND_TIMINGS 0x6 1105ec47cdaSMasahiro Yamada #define SDRAM_TEMP_VERY_HIGH_SHUTDOWN 0x7 1115ec47cdaSMasahiro Yamada 1125ec47cdaSMasahiro Yamada #define NUM_DDR_ADDR_TABLE_ENTRIES 11 1135ec47cdaSMasahiro Yamada #define NUM_DDR_TIMING_TABLE_ENTRIES 4 1145ec47cdaSMasahiro Yamada 115*38322cf4SDmitry Osipenko #define LPDDR2_MANID_SAMSUNG 1 116*38322cf4SDmitry Osipenko #define LPDDR2_MANID_QIMONDA 2 117*38322cf4SDmitry Osipenko #define LPDDR2_MANID_ELPIDA 3 118*38322cf4SDmitry Osipenko #define LPDDR2_MANID_ETRON 4 119*38322cf4SDmitry Osipenko #define LPDDR2_MANID_NANYA 5 120*38322cf4SDmitry Osipenko #define LPDDR2_MANID_HYNIX 6 121*38322cf4SDmitry Osipenko #define LPDDR2_MANID_MOSEL 7 122*38322cf4SDmitry Osipenko #define LPDDR2_MANID_WINBOND 8 123*38322cf4SDmitry Osipenko #define LPDDR2_MANID_ESMT 9 124*38322cf4SDmitry Osipenko #define LPDDR2_MANID_SPANSION 11 125*38322cf4SDmitry Osipenko #define LPDDR2_MANID_SST 12 126*38322cf4SDmitry Osipenko #define LPDDR2_MANID_ZMOS 13 127*38322cf4SDmitry Osipenko #define LPDDR2_MANID_INTEL 14 128*38322cf4SDmitry Osipenko #define LPDDR2_MANID_NUMONYX 254 129*38322cf4SDmitry Osipenko #define LPDDR2_MANID_MICRON 255 130*38322cf4SDmitry Osipenko 131*38322cf4SDmitry Osipenko #define LPDDR2_TYPE_S4 0 132*38322cf4SDmitry Osipenko #define LPDDR2_TYPE_S2 1 133*38322cf4SDmitry Osipenko #define LPDDR2_TYPE_NVM 2 134*38322cf4SDmitry Osipenko 1355ec47cdaSMasahiro Yamada /* Structure for DDR addressing info from the JEDEC spec */ 1365ec47cdaSMasahiro Yamada struct lpddr2_addressing { 1375ec47cdaSMasahiro Yamada u32 num_banks; 1385ec47cdaSMasahiro Yamada u32 tREFI_ns; 1395ec47cdaSMasahiro Yamada u32 tRFCab_ps; 1405ec47cdaSMasahiro Yamada }; 1415ec47cdaSMasahiro Yamada 1425ec47cdaSMasahiro Yamada /* 1435ec47cdaSMasahiro Yamada * Structure for timings from the LPDDR2 datasheet 1445ec47cdaSMasahiro Yamada * All parameters are in pico seconds(ps) unless explicitly indicated 1455ec47cdaSMasahiro Yamada * with a suffix like tRAS_max_ns below 1465ec47cdaSMasahiro Yamada */ 1475ec47cdaSMasahiro Yamada struct lpddr2_timings { 1485ec47cdaSMasahiro Yamada u32 max_freq; 1495ec47cdaSMasahiro Yamada u32 min_freq; 1505ec47cdaSMasahiro Yamada u32 tRPab; 1515ec47cdaSMasahiro Yamada u32 tRCD; 1525ec47cdaSMasahiro Yamada u32 tWR; 1535ec47cdaSMasahiro Yamada u32 tRAS_min; 1545ec47cdaSMasahiro Yamada u32 tRRD; 1555ec47cdaSMasahiro Yamada u32 tWTR; 1565ec47cdaSMasahiro Yamada u32 tXP; 1575ec47cdaSMasahiro Yamada u32 tRTP; 1585ec47cdaSMasahiro Yamada u32 tCKESR; 1595ec47cdaSMasahiro Yamada u32 tDQSCK_max; 1605ec47cdaSMasahiro Yamada u32 tDQSCK_max_derated; 1615ec47cdaSMasahiro Yamada u32 tFAW; 1625ec47cdaSMasahiro Yamada u32 tZQCS; 1635ec47cdaSMasahiro Yamada u32 tZQCL; 1645ec47cdaSMasahiro Yamada u32 tZQinit; 1655ec47cdaSMasahiro Yamada u32 tRAS_max_ns; 1665ec47cdaSMasahiro Yamada }; 1675ec47cdaSMasahiro Yamada 1685ec47cdaSMasahiro Yamada /* 1695ec47cdaSMasahiro Yamada * Min value for some parameters in terms of number of tCK cycles(nCK) 1705ec47cdaSMasahiro Yamada * Please set to zero parameters that are not valid for a given memory 1715ec47cdaSMasahiro Yamada * type 1725ec47cdaSMasahiro Yamada */ 1735ec47cdaSMasahiro Yamada struct lpddr2_min_tck { 1745ec47cdaSMasahiro Yamada u32 tRPab; 1755ec47cdaSMasahiro Yamada u32 tRCD; 1765ec47cdaSMasahiro Yamada u32 tWR; 1775ec47cdaSMasahiro Yamada u32 tRASmin; 1785ec47cdaSMasahiro Yamada u32 tRRD; 1795ec47cdaSMasahiro Yamada u32 tWTR; 1805ec47cdaSMasahiro Yamada u32 tXP; 1815ec47cdaSMasahiro Yamada u32 tRTP; 1825ec47cdaSMasahiro Yamada u32 tCKE; 1835ec47cdaSMasahiro Yamada u32 tCKESR; 1845ec47cdaSMasahiro Yamada u32 tFAW; 1855ec47cdaSMasahiro Yamada }; 1865ec47cdaSMasahiro Yamada 1875ec47cdaSMasahiro Yamada extern const struct lpddr2_addressing 1885ec47cdaSMasahiro Yamada lpddr2_jedec_addressing_table[NUM_DDR_ADDR_TABLE_ENTRIES]; 1895ec47cdaSMasahiro Yamada extern const struct lpddr2_timings 1905ec47cdaSMasahiro Yamada lpddr2_jedec_timings[NUM_DDR_TIMING_TABLE_ENTRIES]; 1915ec47cdaSMasahiro Yamada extern const struct lpddr2_min_tck lpddr2_jedec_min_tck; 1925ec47cdaSMasahiro Yamada 193*38322cf4SDmitry Osipenko /* Structure of MR8 */ 194*38322cf4SDmitry Osipenko union lpddr2_basic_config4 { 195*38322cf4SDmitry Osipenko u32 value; 196*38322cf4SDmitry Osipenko 197*38322cf4SDmitry Osipenko struct { 198*38322cf4SDmitry Osipenko unsigned int arch_type : 2; 199*38322cf4SDmitry Osipenko unsigned int density : 4; 200*38322cf4SDmitry Osipenko unsigned int io_width : 2; 201*38322cf4SDmitry Osipenko } __packed; 202*38322cf4SDmitry Osipenko }; 203*38322cf4SDmitry Osipenko 204*38322cf4SDmitry Osipenko /* 205*38322cf4SDmitry Osipenko * Structure for information about LPDDR2 chip. All parameters are 206*38322cf4SDmitry Osipenko * matching raw values of standard mode register bitfields or set to 207*38322cf4SDmitry Osipenko * -ENOENT if info unavailable. 208*38322cf4SDmitry Osipenko */ 209*38322cf4SDmitry Osipenko struct lpddr2_info { 210*38322cf4SDmitry Osipenko int arch_type; 211*38322cf4SDmitry Osipenko int density; 212*38322cf4SDmitry Osipenko int io_width; 213*38322cf4SDmitry Osipenko int manufacturer_id; 214*38322cf4SDmitry Osipenko int revision_id1; 215*38322cf4SDmitry Osipenko int revision_id2; 216*38322cf4SDmitry Osipenko }; 217*38322cf4SDmitry Osipenko 218*38322cf4SDmitry Osipenko const char *lpddr2_jedec_manufacturer(unsigned int manufacturer_id); 219*38322cf4SDmitry Osipenko 220976897ddSLukasz Luba /* 221976897ddSLukasz Luba * Structure for timings for LPDDR3 based on LPDDR2 plus additional fields. 222976897ddSLukasz Luba * All parameters are in pico seconds(ps) excluding max_freq, min_freq which 223976897ddSLukasz Luba * are in Hz. 224976897ddSLukasz Luba */ 225976897ddSLukasz Luba struct lpddr3_timings { 226976897ddSLukasz Luba u32 max_freq; 227976897ddSLukasz Luba u32 min_freq; 228976897ddSLukasz Luba u32 tRFC; 229976897ddSLukasz Luba u32 tRRD; 230976897ddSLukasz Luba u32 tRPab; 231976897ddSLukasz Luba u32 tRPpb; 232976897ddSLukasz Luba u32 tRCD; 233976897ddSLukasz Luba u32 tRC; 234976897ddSLukasz Luba u32 tRAS; 235976897ddSLukasz Luba u32 tWTR; 236976897ddSLukasz Luba u32 tWR; 237976897ddSLukasz Luba u32 tRTP; 238976897ddSLukasz Luba u32 tW2W_C2C; 239976897ddSLukasz Luba u32 tR2R_C2C; 240976897ddSLukasz Luba u32 tWL; 241976897ddSLukasz Luba u32 tDQSCK; 242976897ddSLukasz Luba u32 tRL; 243976897ddSLukasz Luba u32 tFAW; 244976897ddSLukasz Luba u32 tXSR; 245976897ddSLukasz Luba u32 tXP; 246976897ddSLukasz Luba u32 tCKE; 247976897ddSLukasz Luba u32 tCKESR; 248976897ddSLukasz Luba u32 tMRD; 249976897ddSLukasz Luba }; 250976897ddSLukasz Luba 251976897ddSLukasz Luba /* 252976897ddSLukasz Luba * Min value for some parameters in terms of number of tCK cycles(nCK) 253976897ddSLukasz Luba * Please set to zero parameters that are not valid for a given memory 254976897ddSLukasz Luba * type 255976897ddSLukasz Luba */ 256976897ddSLukasz Luba struct lpddr3_min_tck { 257976897ddSLukasz Luba u32 tRFC; 258976897ddSLukasz Luba u32 tRRD; 259976897ddSLukasz Luba u32 tRPab; 260976897ddSLukasz Luba u32 tRPpb; 261976897ddSLukasz Luba u32 tRCD; 262976897ddSLukasz Luba u32 tRC; 263976897ddSLukasz Luba u32 tRAS; 264976897ddSLukasz Luba u32 tWTR; 265976897ddSLukasz Luba u32 tWR; 266976897ddSLukasz Luba u32 tRTP; 267976897ddSLukasz Luba u32 tW2W_C2C; 268976897ddSLukasz Luba u32 tR2R_C2C; 269976897ddSLukasz Luba u32 tWL; 270976897ddSLukasz Luba u32 tDQSCK; 271976897ddSLukasz Luba u32 tRL; 272976897ddSLukasz Luba u32 tFAW; 273976897ddSLukasz Luba u32 tXSR; 274976897ddSLukasz Luba u32 tXP; 275976897ddSLukasz Luba u32 tCKE; 276976897ddSLukasz Luba u32 tCKESR; 277976897ddSLukasz Luba u32 tMRD; 278976897ddSLukasz Luba }; 279976897ddSLukasz Luba 2805ec47cdaSMasahiro Yamada #endif /* __JEDEC_DDR_H */ 281