ppc4xx: Autocalibration can set RDCC to over aggressive value.
authorAdam Graham <agraham@amcc.com>
Mon, 9 Feb 2009 21:18:12 +0000 (13:18 -0800)
committerStefan Roese <sr@denx.de>
Thu, 12 Feb 2009 05:08:07 +0000 (06:08 +0100)
commitc645012aefebb301e6907d148c6c8efacac049d4
tree86c34e03b359c06f8e946dd2efcafdab9c739aee
parent2ede879fcb67470524847bb4fc8972651bb46184
ppc4xx: Autocalibration can set RDCC to over aggressive value.

The criteria of the AMCC SDRAM Controller DDR autocalibration
U-Boot code is to pick the largest passing write/read/compare
window that also has the smallest SDRAM_RDCC.[RDSS] Read Sample
Cycle Select value.

On some Kilauea boards the DDR autocalibration algorithm can
find a large passing write/read/compare window with a small
SDRAM_RDCC.[RDSS] aggressive value of Read Sample Cycle Select
value "T1 Sample".

This SDRAM_RDCC.[RDSS] Read Sample Cycle Select value of
"T1 Sample" proves to be to aggressive when later on U-Boot
relocates into DDR memory and executes.

The memory traces on the Kilauea board are short so on some
Kilauea boards the SDRAM_RDCC.[RDSS] Read Sample Cycle Select
value of "T1 Sample" shows up as a potentially valid value for
the DDR autocalibratiion algorithm.

The fix is to define a weak default function which provides
the minimum SDRAM_RDCC.[RDSS] Read Sample Cycle Select value
to accept for DDR autocalibration.  The default will be the
"T2 Sample" value.  A board developer who has a well defined
board and chooses to be more aggressive can always provide
their own board specific string function with the more
aggressive "T1 Sample" value or stick with the default
minimum SDRAM_RDCC.[RDSS] value of "T2".

Also put in a autocalibration loop fix for case where current
write/read/compare passing window size is the same as a prior
window size, then in this case choose the write/read/compare
result that has the associated smallest RDCC T-Sample value.

Signed-off-by: Adam Graham <agraham@amcc.com>
Signed-off-by: Stefan Roese <sr@denx.de>
cpu/ppc4xx/4xx_ibm_ddr2_autocalib.c
include/asm-ppc/ppc4xx-sdram.h
include/configs/kilauea.h