[U-Boot] [PATCH 5/6] nand_spl: p1023rds: wait before enabling DDR controller
McClintock Matthew-B29882
B29882 at freescale.com
Mon Aug 13 20:50:45 CEST 2012
On Mon, Aug 13, 2012 at 1:18 PM, Scott Wood <scottwood at freescale.com> wrote:
> On 08/13/2012 01:10 PM, Matthew McClintock wrote:
>> We have a requirement to wait a period of time before enabling the
>> DDR controller
>>
>> Signed-off-by: Matthew McClintock <msm at freescale.com>
>> ---
>> nand_spl/board/freescale/p1023rds/Makefile | 6 +++++-
>> nand_spl/board/freescale/p1023rds/nand_boot.c | 14 ++++++++++++--
>> 2 files changed, 17 insertions(+), 3 deletions(-)
>>
>> diff --git a/nand_spl/board/freescale/p1023rds/Makefile b/nand_spl/board/freescale/p1023rds/Makefile
>> index 168e868..da43521 100644
>> --- a/nand_spl/board/freescale/p1023rds/Makefile
>> +++ b/nand_spl/board/freescale/p1023rds/Makefile
>> @@ -34,7 +34,8 @@ CFLAGS += -DCONFIG_NAND_SPL
>>
>> SOBJS = start.o resetvec.o
>> COBJS = cache.o cpu_init_early.o cpu_init_nand.o fsl_law.o law.o \
>> - nand_boot.o nand_boot_fsl_elbc.o ns16550.o tlb.o tlb_table.o
>> + nand_boot.o nand_boot_fsl_elbc.o ns16550.o tlb.o tlb_table.o \
>> + ../common.o
>>
>> SRCS := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c))
>> OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS))
>> @@ -114,6 +115,9 @@ ifneq ($(OBJTREE), $(SRCTREE))
>> $(obj)nand_boot.c:
>> @rm -f $(obj)nand_boot.c
>> ln -s $(SRCTREE)/nand_spl/board/$(BOARDDIR)/nand_boot.c $(obj)nand_boot.c
>> +$(obj)../common.c:
>> + @rm -f $(obj)../common.c
>> + ln -s $(SRCTREE)/nand_spl/board/freescale/common.c $(obj)../common.c
>> endif
>>
>> #########################################################################
>> diff --git a/nand_spl/board/freescale/p1023rds/nand_boot.c b/nand_spl/board/freescale/p1023rds/nand_boot.c
>> index 0065c87..9309936 100644
>> --- a/nand_spl/board/freescale/p1023rds/nand_boot.c
>> +++ b/nand_spl/board/freescale/p1023rds/nand_boot.c
>> @@ -25,6 +25,7 @@
>> #include <asm/io.h>
>> #include <nand.h>
>> #include <asm/fsl_law.h>
>> +#include <asm/fsl_ddr_sdram.h>
>>
>> /* Fixed sdram init -- doesn't use serial presence detect. */
>> void sdram_init(void)
>> @@ -53,12 +54,21 @@ void sdram_init(void)
>> out_be32(&ddr->ddr_wrlvl_cntl, CONFIG_SYS_DDR_WRLVL_CNTL);
>> out_be32(&ddr->ddr_cdr1, CONFIG_SYS_DDR_CDR_1);
>> out_be32(&ddr->ddr_cdr2, CONFIG_SYS_DDR_CDR_2);
>> - out_be32(&ddr->sdram_cfg, CONFIG_SYS_DDR_CONTROL);
>> + /* Set, but do not enable the memory */
>> + out_be32(&ddr->sdram_cfg, CONFIG_SYS_DDR_CONTROL & ~SDRAM_CFG_MEM_EN);
>> +
>> + asm volatile("sync;isync");
>> + udelay(500);
>> +
>> + /* Let the controller go */
>> + out_be32(&ddr->sdram_cfg, in_be32(&ddr->sdram_cfg) | SDRAM_CFG_MEM_EN);
>> }
>>
>> +u32 bus_clk;
>> +
>> void board_init_f(ulong bootflag)
>> {
>> - u32 plat_ratio, bus_clk;
>> + u32 plat_ratio;
>> ccsr_gur_t *gur = (void *)CONFIG_SYS_MPC85xx_GUTS_ADDR;
>>
>> /* initialize selected port with appropriate baud rate */
>>
>
> This is before relocation, so you can't use global variables. Use
> gd->bus_clk.
>
> In our SDK where this code has already been applied, I spent some debug
> time tracking why the first word of the SPL was getting corrupted (the
> BSS goes right after the end of the NAND buffer and it wraps around),
> when trying to find the cause of other corruption (the rest was bad DDR
> settings).
Thanks, v2 coming.
-M
More information about the U-Boot
mailing list