.. | .. |
---|
96 | 96 | /* Hardware limit on ChipSelect rows per MC and processors per system */ |
---|
97 | 97 | #define NUM_CHIPSELECTS 8 |
---|
98 | 98 | #define DRAM_RANGES 8 |
---|
| 99 | +#define NUM_CONTROLLERS 8 |
---|
99 | 100 | |
---|
100 | 101 | #define ON true |
---|
101 | 102 | #define OFF false |
---|
.. | .. |
---|
119 | 120 | #define PCI_DEVICE_ID_AMD_17H_M10H_DF_F6 0x15ee |
---|
120 | 121 | #define PCI_DEVICE_ID_AMD_17H_M30H_DF_F0 0x1490 |
---|
121 | 122 | #define PCI_DEVICE_ID_AMD_17H_M30H_DF_F6 0x1496 |
---|
| 123 | +#define PCI_DEVICE_ID_AMD_17H_M60H_DF_F0 0x1448 |
---|
| 124 | +#define PCI_DEVICE_ID_AMD_17H_M60H_DF_F6 0x144e |
---|
| 125 | +#define PCI_DEVICE_ID_AMD_17H_M70H_DF_F0 0x1440 |
---|
| 126 | +#define PCI_DEVICE_ID_AMD_17H_M70H_DF_F6 0x1446 |
---|
| 127 | +#define PCI_DEVICE_ID_AMD_19H_DF_F0 0x1650 |
---|
| 128 | +#define PCI_DEVICE_ID_AMD_19H_DF_F6 0x1656 |
---|
122 | 129 | |
---|
123 | 130 | /* |
---|
124 | 131 | * Function 1 - Address Map |
---|
.. | .. |
---|
168 | 175 | #define DCSM0 0x60 |
---|
169 | 176 | #define DCSM1 0x160 |
---|
170 | 177 | |
---|
171 | | -#define csrow_enabled(i, dct, pvt) ((pvt)->csels[(dct)].csbases[(i)] & DCSB_CS_ENABLE) |
---|
| 178 | +#define csrow_enabled(i, dct, pvt) ((pvt)->csels[(dct)].csbases[(i)] & DCSB_CS_ENABLE) |
---|
| 179 | +#define csrow_sec_enabled(i, dct, pvt) ((pvt)->csels[(dct)].csbases_sec[(i)] & DCSB_CS_ENABLE) |
---|
172 | 180 | |
---|
173 | 181 | #define DRAM_CONTROL 0x78 |
---|
174 | 182 | |
---|
.. | .. |
---|
258 | 266 | |
---|
259 | 267 | /* UMC CH register offsets */ |
---|
260 | 268 | #define UMCCH_BASE_ADDR 0x0 |
---|
| 269 | +#define UMCCH_BASE_ADDR_SEC 0x10 |
---|
261 | 270 | #define UMCCH_ADDR_MASK 0x20 |
---|
| 271 | +#define UMCCH_ADDR_MASK_SEC 0x28 |
---|
262 | 272 | #define UMCCH_ADDR_CFG 0x30 |
---|
263 | 273 | #define UMCCH_DIMM_CFG 0x80 |
---|
264 | 274 | #define UMCCH_UMC_CFG 0x100 |
---|
.. | .. |
---|
274 | 284 | |
---|
275 | 285 | #define UMC_SDP_INIT BIT(31) |
---|
276 | 286 | |
---|
277 | | -#define NUM_UMCS 2 |
---|
278 | | - |
---|
279 | 287 | enum amd_families { |
---|
280 | 288 | K8_CPUS = 0, |
---|
281 | 289 | F10_CPUS, |
---|
.. | .. |
---|
287 | 295 | F17_CPUS, |
---|
288 | 296 | F17_M10H_CPUS, |
---|
289 | 297 | F17_M30H_CPUS, |
---|
| 298 | + F17_M60H_CPUS, |
---|
| 299 | + F17_M70H_CPUS, |
---|
| 300 | + F19_CPUS, |
---|
290 | 301 | NUM_FAMILIES, |
---|
291 | 302 | }; |
---|
292 | 303 | |
---|
.. | .. |
---|
313 | 324 | /* A DCT chip selects collection */ |
---|
314 | 325 | struct chip_select { |
---|
315 | 326 | u32 csbases[NUM_CHIPSELECTS]; |
---|
| 327 | + u32 csbases_sec[NUM_CHIPSELECTS]; |
---|
316 | 328 | u8 b_cnt; |
---|
317 | 329 | |
---|
318 | 330 | u32 csmasks[NUM_CHIPSELECTS]; |
---|
| 331 | + u32 csmasks_sec[NUM_CHIPSELECTS]; |
---|
319 | 332 | u8 m_cnt; |
---|
320 | 333 | }; |
---|
321 | 334 | |
---|
.. | .. |
---|
353 | 366 | u32 dbam0; /* DRAM Base Address Mapping reg for DCT0 */ |
---|
354 | 367 | u32 dbam1; /* DRAM Base Address Mapping reg for DCT1 */ |
---|
355 | 368 | |
---|
356 | | - /* one for each DCT */ |
---|
357 | | - struct chip_select csels[2]; |
---|
| 369 | + /* one for each DCT/UMC */ |
---|
| 370 | + struct chip_select csels[NUM_CONTROLLERS]; |
---|
358 | 371 | |
---|
359 | 372 | /* DRAM base and limit pairs F1x[78,70,68,60,58,50,48,40] */ |
---|
360 | 373 | struct dram_range ranges[DRAM_RANGES]; |
---|
.. | .. |
---|
366 | 379 | u32 dct_sel_hi; /* DRAM Controller Select High */ |
---|
367 | 380 | u32 online_spare; /* On-Line spare Reg */ |
---|
368 | 381 | |
---|
369 | | - /* x4 or x8 syndromes in use */ |
---|
| 382 | + /* x4, x8, or x16 syndromes in use */ |
---|
370 | 383 | u8 ecc_sym_sz; |
---|
371 | 384 | |
---|
372 | 385 | /* place to store error injection parameters prior to issue */ |
---|
.. | .. |
---|
399 | 412 | |
---|
400 | 413 | static inline u32 get_umc_base(u8 channel) |
---|
401 | 414 | { |
---|
402 | | - /* ch0: 0x50000, ch1: 0x150000 */ |
---|
403 | | - return 0x50000 + (!!channel << 20); |
---|
| 415 | + /* chY: 0xY50000 */ |
---|
| 416 | + return 0x50000 + (channel << 20); |
---|
404 | 417 | } |
---|
405 | 418 | |
---|
406 | 419 | static inline u64 get_dram_base(struct amd64_pvt *pvt, u8 i) |
---|
.. | .. |
---|
472 | 485 | struct amd64_family_type { |
---|
473 | 486 | const char *ctl_name; |
---|
474 | 487 | u16 f0_id, f1_id, f2_id, f6_id; |
---|
| 488 | + /* Maximum number of memory controllers per die/node. */ |
---|
| 489 | + u8 max_mcs; |
---|
475 | 490 | struct low_ops ops; |
---|
476 | 491 | }; |
---|
477 | 492 | |
---|