Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * Definitions for DDR memories based on JEDEC specs
0004  *
0005  * Copyright (C) 2012 Texas Instruments, Inc.
0006  *
0007  * Aneesh V <aneesh@ti.com>
0008  */
0009 #ifndef __JEDEC_DDR_H
0010 #define __JEDEC_DDR_H
0011 
0012 #include <linux/types.h>
0013 
0014 /* DDR Densities */
0015 #define DDR_DENSITY_64Mb    1
0016 #define DDR_DENSITY_128Mb   2
0017 #define DDR_DENSITY_256Mb   3
0018 #define DDR_DENSITY_512Mb   4
0019 #define DDR_DENSITY_1Gb     5
0020 #define DDR_DENSITY_2Gb     6
0021 #define DDR_DENSITY_4Gb     7
0022 #define DDR_DENSITY_8Gb     8
0023 #define DDR_DENSITY_16Gb    9
0024 #define DDR_DENSITY_32Gb    10
0025 
0026 /* DDR type */
0027 #define DDR_TYPE_DDR2       1
0028 #define DDR_TYPE_DDR3       2
0029 #define DDR_TYPE_LPDDR2_S4  3
0030 #define DDR_TYPE_LPDDR2_S2  4
0031 #define DDR_TYPE_LPDDR2_NVM 5
0032 #define DDR_TYPE_LPDDR3     6
0033 
0034 /* DDR IO width */
0035 #define DDR_IO_WIDTH_4      1
0036 #define DDR_IO_WIDTH_8      2
0037 #define DDR_IO_WIDTH_16     3
0038 #define DDR_IO_WIDTH_32     4
0039 
0040 /* Number of Row bits */
0041 #define R9          9
0042 #define R10         10
0043 #define R11         11
0044 #define R12         12
0045 #define R13         13
0046 #define R14         14
0047 #define R15         15
0048 #define R16         16
0049 
0050 /* Number of Column bits */
0051 #define C7          7
0052 #define C8          8
0053 #define C9          9
0054 #define C10         10
0055 #define C11         11
0056 #define C12         12
0057 
0058 /* Number of Banks */
0059 #define B1          0
0060 #define B2          1
0061 #define B4          2
0062 #define B8          3
0063 
0064 /* Refresh rate in nano-seconds */
0065 #define T_REFI_15_6     15600
0066 #define T_REFI_7_8      7800
0067 #define T_REFI_3_9      3900
0068 
0069 /* tRFC values */
0070 #define T_RFC_90        90000
0071 #define T_RFC_110       110000
0072 #define T_RFC_130       130000
0073 #define T_RFC_160       160000
0074 #define T_RFC_210       210000
0075 #define T_RFC_300       300000
0076 #define T_RFC_350       350000
0077 
0078 /* Mode register numbers */
0079 #define DDR_MR0         0
0080 #define DDR_MR1         1
0081 #define DDR_MR2         2
0082 #define DDR_MR3         3
0083 #define DDR_MR4         4
0084 #define DDR_MR5         5
0085 #define DDR_MR6         6
0086 #define DDR_MR7         7
0087 #define DDR_MR8         8
0088 #define DDR_MR9         9
0089 #define DDR_MR10        10
0090 #define DDR_MR11        11
0091 #define DDR_MR16        16
0092 #define DDR_MR17        17
0093 #define DDR_MR18        18
0094 
0095 /*
0096  * LPDDR2 related defines
0097  */
0098 
0099 /* MR4 register fields */
0100 #define MR4_SDRAM_REF_RATE_SHIFT            0
0101 #define MR4_SDRAM_REF_RATE_MASK             7
0102 #define MR4_TUF_SHIFT                   7
0103 #define MR4_TUF_MASK                    (1 << 7)
0104 
0105 /* MR4 SDRAM Refresh Rate field values */
0106 #define SDRAM_TEMP_NOMINAL              0x3
0107 #define SDRAM_TEMP_RESERVED_4               0x4
0108 #define SDRAM_TEMP_HIGH_DERATE_REFRESH          0x5
0109 #define SDRAM_TEMP_HIGH_DERATE_REFRESH_AND_TIMINGS  0x6
0110 #define SDRAM_TEMP_VERY_HIGH_SHUTDOWN           0x7
0111 
0112 #define NUM_DDR_ADDR_TABLE_ENTRIES          11
0113 #define NUM_DDR_TIMING_TABLE_ENTRIES            4
0114 
0115 #define LPDDR2_MANID_SAMSUNG                1
0116 #define LPDDR2_MANID_QIMONDA                2
0117 #define LPDDR2_MANID_ELPIDA             3
0118 #define LPDDR2_MANID_ETRON              4
0119 #define LPDDR2_MANID_NANYA              5
0120 #define LPDDR2_MANID_HYNIX              6
0121 #define LPDDR2_MANID_MOSEL              7
0122 #define LPDDR2_MANID_WINBOND                8
0123 #define LPDDR2_MANID_ESMT               9
0124 #define LPDDR2_MANID_SPANSION               11
0125 #define LPDDR2_MANID_SST                12
0126 #define LPDDR2_MANID_ZMOS               13
0127 #define LPDDR2_MANID_INTEL              14
0128 #define LPDDR2_MANID_NUMONYX                254
0129 #define LPDDR2_MANID_MICRON             255
0130 
0131 #define LPDDR2_TYPE_S4                  0
0132 #define LPDDR2_TYPE_S2                  1
0133 #define LPDDR2_TYPE_NVM                 2
0134 
0135 /* Structure for DDR addressing info from the JEDEC spec */
0136 struct lpddr2_addressing {
0137     u32 num_banks;
0138     u32 tREFI_ns;
0139     u32 tRFCab_ps;
0140 };
0141 
0142 /*
0143  * Structure for timings from the LPDDR2 datasheet
0144  * All parameters are in pico seconds(ps) unless explicitly indicated
0145  * with a suffix like tRAS_max_ns below
0146  */
0147 struct lpddr2_timings {
0148     u32 max_freq;
0149     u32 min_freq;
0150     u32 tRPab;
0151     u32 tRCD;
0152     u32 tWR;
0153     u32 tRAS_min;
0154     u32 tRRD;
0155     u32 tWTR;
0156     u32 tXP;
0157     u32 tRTP;
0158     u32 tCKESR;
0159     u32 tDQSCK_max;
0160     u32 tDQSCK_max_derated;
0161     u32 tFAW;
0162     u32 tZQCS;
0163     u32 tZQCL;
0164     u32 tZQinit;
0165     u32 tRAS_max_ns;
0166 };
0167 
0168 /*
0169  * Min value for some parameters in terms of number of tCK cycles(nCK)
0170  * Please set to zero parameters that are not valid for a given memory
0171  * type
0172  */
0173 struct lpddr2_min_tck {
0174     u32 tRPab;
0175     u32 tRCD;
0176     u32 tWR;
0177     u32 tRASmin;
0178     u32 tRRD;
0179     u32 tWTR;
0180     u32 tXP;
0181     u32 tRTP;
0182     u32 tCKE;
0183     u32 tCKESR;
0184     u32 tFAW;
0185 };
0186 
0187 extern const struct lpddr2_addressing
0188     lpddr2_jedec_addressing_table[NUM_DDR_ADDR_TABLE_ENTRIES];
0189 extern const struct lpddr2_timings
0190     lpddr2_jedec_timings[NUM_DDR_TIMING_TABLE_ENTRIES];
0191 extern const struct lpddr2_min_tck lpddr2_jedec_min_tck;
0192 
0193 /* Structure of MR8 */
0194 union lpddr2_basic_config4 {
0195     u32 value;
0196 
0197     struct {
0198         unsigned int arch_type : 2;
0199         unsigned int density : 4;
0200         unsigned int io_width : 2;
0201     } __packed;
0202 };
0203 
0204 /*
0205  * Structure for information about LPDDR2 chip. All parameters are
0206  * matching raw values of standard mode register bitfields or set to
0207  * -ENOENT if info unavailable.
0208  */
0209 struct lpddr2_info {
0210     int arch_type;
0211     int density;
0212     int io_width;
0213     int manufacturer_id;
0214     int revision_id1;
0215     int revision_id2;
0216 };
0217 
0218 const char *lpddr2_jedec_manufacturer(unsigned int manufacturer_id);
0219 
0220 /*
0221  * Structure for timings for LPDDR3 based on LPDDR2 plus additional fields.
0222  * All parameters are in pico seconds(ps) excluding max_freq, min_freq which
0223  * are in Hz.
0224  */
0225 struct lpddr3_timings {
0226     u32 max_freq;
0227     u32 min_freq;
0228     u32 tRFC;
0229     u32 tRRD;
0230     u32 tRPab;
0231     u32 tRPpb;
0232     u32 tRCD;
0233     u32 tRC;
0234     u32 tRAS;
0235     u32 tWTR;
0236     u32 tWR;
0237     u32 tRTP;
0238     u32 tW2W_C2C;
0239     u32 tR2R_C2C;
0240     u32 tWL;
0241     u32 tDQSCK;
0242     u32 tRL;
0243     u32 tFAW;
0244     u32 tXSR;
0245     u32 tXP;
0246     u32 tCKE;
0247     u32 tCKESR;
0248     u32 tMRD;
0249 };
0250 
0251 /*
0252  * Min value for some parameters in terms of number of tCK cycles(nCK)
0253  * Please set to zero parameters that are not valid for a given memory
0254  * type
0255  */
0256 struct lpddr3_min_tck {
0257     u32 tRFC;
0258     u32 tRRD;
0259     u32 tRPab;
0260     u32 tRPpb;
0261     u32 tRCD;
0262     u32 tRC;
0263     u32 tRAS;
0264     u32 tWTR;
0265     u32 tWR;
0266     u32 tRTP;
0267     u32 tW2W_C2C;
0268     u32 tR2R_C2C;
0269     u32 tWL;
0270     u32 tDQSCK;
0271     u32 tRL;
0272     u32 tFAW;
0273     u32 tXSR;
0274     u32 tXP;
0275     u32 tCKE;
0276     u32 tCKESR;
0277     u32 tMRD;
0278 };
0279 
0280 #endif /* __JEDEC_DDR_H */