[coreboot] [PATCH] Implement DIMM loading for DDR on K8

Peter Stuge peter at stuge.se
Sun Dec 12 02:15:04 CET 2010


Rudolf Marek wrote:
> +/*
> +	Following table comes directly from BKDG (unbuffered DIMM support)
> +	[Y][X] Y = ch0_0, ch1_0, ch0_1, ch1_1 1=present 0=empty
> +	  X uses same layout but 1 means double rank 0 is single rank/empty
> +*/
> +

Maybe clarify that ch{0_0,1_0,0_1,1_1} maps to MEMCS_{1L,1H,2L,2H} in
the PDF. Maybe also mention that preE is table 45, and revE table 46.


> +	static const unsigned char dimm_loading_config_preE[16][16] = {
> +		[0x8] = {[0x0] = DDR400,[0x8] = DDR400},
> +		[0x2] = {[0x0] = DDR333,[0x2] = DDR400},
> +		[0xa] = {[0x0] = DDR400_2T,[0x2] = DDR400_2T,
> +			 [0x8] = DDR400_2T,[0xa] = DDR333_2T},
> +		[0xc] = {[0x0] = DDR400,[0xc] = DDR400},
> +		[0x3] = {[0x0] = DDR333,[0x3] = DDR400},
> +		[0xf] = {[0x0] = DDR400_2T,[0x3] = DDR400_2T,
> +			 [0xc] = DDR400_2T,[0xf] = DDR333_2T},
> +	};

This matches the PDF.


> +	static const unsigned char dimm_loading_config_revE[16][16] = {
> +		[0x8] = {[0x0] = DDR400, [0x8] = DDR400},
> +		[0x2] = {[0x0] = DDR333, [0x2] = DDR400},
> +		[0x4] = {[0x0] = DDR400, [0x4] = DDR400},
> +		[0x1] = {[0x0] = DDR333, [0x1] = DDR400},
> +		[0xa] = {[0x0] = DDR400_2T, [0x2] = DDR400_2T,
> +			 [0x8] = DDR400_2T, [0xa] = DDR333_2T},
> +		[0x5] = {[0x0] = DDR400_2T, [0x1] = DDR400_2T,
> +			 [0x4] = DDR400_2T, [0x5] = DDR333_2T},
> +		[0xc] = {[0x0] = DDR400, [0xc] = DDR400, [0x4] = DDR400, [0x8] = DDR400},
> +		[0x3] = {[0x0] = DDR333, [0x1] = DDR333, [0x2] = DDR333, [0x3] = DDR400},
> +		[0xe] = {[0x0] = DDR400_2T, [0x4] = DDR400_2T, [0x2] = DDR400_2T,
> +			 [0x6] = DDR400_2T, [0x8] = DDR400_2T, [0xc] = DDR400_2T,
> +			 [0xa] = DDR333_2T, [0xe] = DDR333_2T},
> +		[0xb] = {[0x0] = DDR333, [0x1] = DDR400_2T, [0x2] = DDR333_2T,
> +			 [0x3] = DDR400_2T, [0x8] = DDR333_2T, [0x9] = DDR400_2T,
> +			 [0xa] = DDR333_2T, [0xb] = DDR333_2T},
> +		[0xd] = {[0x0] = DDR400_2T, [0x8] = DDR400_2T, [0x1] = DDR400_2T,
> +			 [0x9] = DDR333_2T, [0x4] = DDR400_2T, [0xc] = DDR400_2T,
> +			 [0x5] = DDR333_2T, [0xd] = DDR333_2T},
> +		[0x7] = {[0x0] = DDR333_2T, [0x2] = DDR400_2T, [0x1] = DDR333_2T,

7,0 above could be DDR333, ie use 1T.


> +			 [0x3] = DDR400_2T, [0x4] = DDR333_2T, [0x6] = DDR400_2T,
> +			 [0x5] = DDR333_2T, [0x7] = DDR333_2T},
> +		[0xf] = {[0x0] = DDR400_2T, [0x1] = DDR400_2T, [0x4] = DDR400_2T,
> +			 [0x5] = DDR333_2T, [0x2] = DDR400_2T, [0x3] = DDR400_2T,
> +			 [0x6] = DDR400_2T, [0x7] = DDR333_2T, [0x8] = DDR400_2T,
> +			 [0x9] = DDR400_2T, [0xc] = DDR400_2T, [0xd] = DDR333_2T,
> +			 [0xa] = DDR333_2T, [0xb] = DDR333_2T, [0xe] = DDR333_2T,
> +			 [0xf] = DDR333_2T},
> +	};

The 26094 BKDF PDF refers to "the AMD Athlon™ 64 939 Processor
Motherboard Design Guide, order# 30474" in some of the memory
configuration cases.

It seems that 30474 isn't publically available, maybe someone has
access to it and could check if we should take special considerations
for those cases in coreboot, maybe to choose a lower clock speed to
guarantee reliability?


Acked-by: Peter Stuge <peter at stuge.se>




More information about the coreboot mailing list