Skip to content

Commit c7fd27c

Browse files
Kyle Moffettkumargala
Kyle Moffett
authored andcommitted
mpc8xxx: DDR2/DDR3: Clean up DIMM-type switch statements
The numeric constants in the switch statements are replaced by #defines added to the common ddr_spd.h header. This dramatically improves the readability of the switch statments. In addition, a few of the longer lines were cleaned up, and the DDR2 type for an SO-RDIMM module was added to the DDR2 switch statement. Signed-off-by: Kyle Moffett <Kyle.D.Moffett@boeing.com> Cc: Andy Fleming <afleming@gmail.com> Cc: Kim Phillips <kim.phillips@freescale.com> Acked-by: York Sun <yorksun@freescale.com> Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
1 parent e820a13 commit c7fd27c

File tree

4 files changed

+53
-43
lines changed

4 files changed

+53
-43
lines changed

arch/powerpc/cpu/mpc8xxx/ddr/ddr2_dimm_params.c

+13-10
Original file line numberDiff line numberDiff line change
@@ -250,24 +250,27 @@ ddr_compute_dimm_parameters(const ddr2_spd_eeprom_t *spd,
250250
pdimm->primary_sdram_width = spd->primw;
251251
pdimm->ec_sdram_width = spd->ecw;
252252

253-
/* FIXME: what about registered SO-DIMM? */
253+
/* These are all the types defined by the JEDEC DDR2 SPD 1.3 spec */
254254
switch (spd->dimm_type) {
255-
case 0x01: /* RDIMM */
256-
case 0x10: /* Mini-RDIMM */
257-
pdimm->registered_dimm = 1; /* register buffered */
255+
case DDR2_SPD_DIMMTYPE_RDIMM:
256+
case DDR2_SPD_DIMMTYPE_72B_SO_RDIMM:
257+
case DDR2_SPD_DIMMTYPE_MINI_RDIMM:
258+
/* Registered/buffered DIMMs */
259+
pdimm->registered_dimm = 1;
258260
break;
259261

260-
case 0x02: /* UDIMM */
261-
case 0x04: /* SO-DIMM */
262-
case 0x08: /* Micro-DIMM */
263-
case 0x20: /* Mini-UDIMM */
264-
pdimm->registered_dimm = 0; /* unbuffered */
262+
case DDR2_SPD_DIMMTYPE_UDIMM:
263+
case DDR2_SPD_DIMMTYPE_SO_DIMM:
264+
case DDR2_SPD_DIMMTYPE_MICRO_DIMM:
265+
case DDR2_SPD_DIMMTYPE_MINI_UDIMM:
266+
/* Unbuffered DIMMs */
267+
pdimm->registered_dimm = 0;
265268
break;
266269

270+
case DDR2_SPD_DIMMTYPE_72B_SO_CDIMM:
267271
default:
268272
printf("unknown dimm_type 0x%02X\n", spd->dimm_type);
269273
return 1;
270-
break;
271274
}
272275

273276
/* SDRAM device parameters */

arch/powerpc/cpu/mpc8xxx/ddr/ddr3_dimm_params.c

+20-23
Original file line numberDiff line numberDiff line change
@@ -128,24 +128,32 @@ ddr_compute_dimm_parameters(const ddr3_spd_eeprom_t *spd,
128128
pdimm->data_width = pdimm->primary_sdram_width
129129
+ pdimm->ec_sdram_width;
130130

131-
switch (spd->module_type & 0xf) {
132-
case 0x01: /* RDIMM */
133-
case 0x05: /* Mini-RDIMM */
134-
pdimm->registered_dimm = 1; /* register buffered */
131+
/* These are the types defined by the JEDEC DDR3 SPD spec */
132+
pdimm->mirrored_dimm = 0;
133+
pdimm->registered_dimm = 0;
134+
switch (spd->module_type & DDR3_SPD_MODULETYPE_MASK) {
135+
case DDR3_SPD_MODULETYPE_RDIMM:
136+
case DDR3_SPD_MODULETYPE_MINI_RDIMM:
137+
/* Registered/buffered DIMMs */
138+
pdimm->registered_dimm = 1;
135139
for (i = 0; i < 16; i += 2) {
136-
pdimm->rcw[i] = spd->mod_section.registered.rcw[i/2] & 0x0F;
137-
pdimm->rcw[i+1] = (spd->mod_section.registered.rcw[i/2] >> 4) & 0x0F;
140+
u8 rcw = spd->mod_section.registered.rcw[i/2];
141+
pdimm->rcw[i] = (rcw >> 0) & 0x0F;
142+
pdimm->rcw[i+1] = (rcw >> 4) & 0x0F;
138143
}
139144
break;
140-
case 0x02: /* UDIMM */
141-
case 0x03: /* SO-DIMM */
142-
case 0x04: /* Micro-DIMM */
143-
case 0x06: /* Mini-UDIMM */
144-
pdimm->registered_dimm = 0; /* unbuffered */
145+
146+
case DDR3_SPD_MODULETYPE_UDIMM:
147+
case DDR3_SPD_MODULETYPE_SO_DIMM:
148+
case DDR3_SPD_MODULETYPE_MICRO_DIMM:
149+
case DDR3_SPD_MODULETYPE_MINI_UDIMM:
150+
/* Unbuffered DIMMs */
151+
if (spd->mod_section.unbuffered.addr_mapping & 0x1)
152+
pdimm->mirrored_dimm = 1;
145153
break;
146154

147155
default:
148-
printf("unknown dimm_type 0x%02X\n", spd->module_type);
156+
printf("unknown module_type 0x%02X\n", spd->module_type);
149157
return 1;
150158
}
151159

@@ -303,16 +311,5 @@ ddr_compute_dimm_parameters(const ddr3_spd_eeprom_t *spd,
303311
pdimm->tFAW_ps = (((spd->tFAW_msb & 0xf) << 8) | spd->tFAW_min)
304312
* mtb_ps;
305313

306-
/*
307-
* We need check the address mirror for unbuffered DIMM
308-
* If SPD indicate the address map mirror, The DDR controller
309-
* need care it.
310-
*/
311-
if ((spd->module_type == SPD_MODULETYPE_UDIMM) ||
312-
(spd->module_type == SPD_MODULETYPE_SODIMM) ||
313-
(spd->module_type == SPD_MODULETYPE_MICRODIMM) ||
314-
(spd->module_type == SPD_MODULETYPE_MINIUDIMM))
315-
pdimm->mirrored_dimm = spd->mod_section.unbuffered.addr_mapping & 0x1;
316-
317314
return 0;
318315
}

common/ddr_spd.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ spd_check(const u8 *buf, u8 spd_rev, u8 spd_cksum)
1818

1919
/*
2020
* Check SPD revision supported
21-
* Rev 1.2 or less supported by this code
21+
* Rev 1.X or less supported by this code
2222
*/
2323
if (spd_rev >= 0x20) {
2424
printf("SPD revision %02X not supported by this code\n",

include/ddr_spd.h

+19-9
Original file line numberDiff line numberDiff line change
@@ -304,14 +304,24 @@ extern unsigned int ddr3_spd_check(const ddr3_spd_eeprom_t *spd);
304304
#define SPD_MEMTYPE_DDR2_FBDIMM_PROBE (0x0A)
305305
#define SPD_MEMTYPE_DDR3 (0x0B)
306306

307-
/*
308-
* Byte 3 Key Byte / Module Type for DDR3 SPD
309-
*/
310-
#define SPD_MODULETYPE_RDIMM (0x01)
311-
#define SPD_MODULETYPE_UDIMM (0x02)
312-
#define SPD_MODULETYPE_SODIMM (0x03)
313-
#define SPD_MODULETYPE_MICRODIMM (0x04)
314-
#define SPD_MODULETYPE_MINIRDIMM (0x05)
315-
#define SPD_MODULETYPE_MINIUDIMM (0x06)
307+
/* DIMM Type for DDR2 SPD (according to v1.3) */
308+
#define DDR2_SPD_DIMMTYPE_UNDEFINED (0x00)
309+
#define DDR2_SPD_DIMMTYPE_RDIMM (0x01)
310+
#define DDR2_SPD_DIMMTYPE_UDIMM (0x02)
311+
#define DDR2_SPD_DIMMTYPE_SO_DIMM (0x04)
312+
#define DDR2_SPD_DIMMTYPE_72B_SO_CDIMM (0x06)
313+
#define DDR2_SPD_DIMMTYPE_72B_SO_RDIMM (0x07)
314+
#define DDR2_SPD_DIMMTYPE_MICRO_DIMM (0x08)
315+
#define DDR2_SPD_DIMMTYPE_MINI_RDIMM (0x10)
316+
#define DDR2_SPD_DIMMTYPE_MINI_UDIMM (0x20)
317+
318+
/* Byte 3 Key Byte / Module Type for DDR3 SPD */
319+
#define DDR3_SPD_MODULETYPE_MASK (0x0f)
320+
#define DDR3_SPD_MODULETYPE_RDIMM (0x01)
321+
#define DDR3_SPD_MODULETYPE_UDIMM (0x02)
322+
#define DDR3_SPD_MODULETYPE_SO_DIMM (0x03)
323+
#define DDR3_SPD_MODULETYPE_MICRO_DIMM (0x04)
324+
#define DDR3_SPD_MODULETYPE_MINI_RDIMM (0x05)
325+
#define DDR3_SPD_MODULETYPE_MINI_UDIMM (0x06)
316326

317327
#endif /* _DDR_SPD_H_ */

0 commit comments

Comments
 (0)