0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef __JEDEC_DDR_H
0010 #define __JEDEC_DDR_H
0011
0012 #include <linux/types.h>
0013
0014
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
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
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
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
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
0059 #define B1 0
0060 #define B2 1
0061 #define B4 2
0062 #define B8 3
0063
0064
0065 #define T_REFI_15_6 15600
0066 #define T_REFI_7_8 7800
0067 #define T_REFI_3_9 3900
0068
0069
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
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
0097
0098
0099
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
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
0136 struct lpddr2_addressing {
0137 u32 num_banks;
0138 u32 tREFI_ns;
0139 u32 tRFCab_ps;
0140 };
0141
0142
0143
0144
0145
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
0170
0171
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
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
0206
0207
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
0222
0223
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
0253
0254
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