OMAP3 relied on the memory config done by X-loader or Configuration Header. 
This has to be reworked for the implementation of a SPL. This patch configures 
RAM bank 0 if CONFIG_PRELOADER is set. Settings for Micron-RAM used by 
devkit8000 are added to mem.h

Signed-off-by: Simon Schwarz <schw...@corscience.de>
--

diff --git a/arch/arm/cpu/armv7/omap3/sdrc.c b/arch/arm/cpu/armv7/omap3/sdrc.c
index 2a7970b..d9e7313 100644
--- a/arch/arm/cpu/armv7/omap3/sdrc.c
+++ b/arch/arm/cpu/armv7/omap3/sdrc.c
@@ -8,6 +8,9 @@
  * Copyright (C) 2004-2010
  * Texas Instruments Incorporated - http://www.ti.com/
  *
+ * Copyright (C) 2011
+ * Corscience GmbH & Co. KG - Simon Schwarz <schw...@corscience.de>
+ *
  * Author :
  *     Vaibhav Hiremath <hvaib...@ti.com>
  *
@@ -36,6 +39,7 @@
 #include <asm/io.h>
 #include <asm/arch/mem.h>
 #include <asm/arch/sys_proto.h>
+#include <asm/utils.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 extern omap3_sysinfo sysinfo;
@@ -133,13 +137,38 @@ void do_sdrc_init(u32 cs, u32 early)
                sdelay(0x20000);
        }
 
+#ifdef CONFIG_PRELOADER
+       /* If we use a SPL there is no x-loader nor config header so we have
+        * to do the job ourselfs
+        */
+       if (cs == CS0) {
+               sdrc_actim_base0 = (struct sdrc_actim *)SDRC_ACTIM_CTRL0_BASE;
+
+               /* General SDRC config */
+               writel(V_MCFG, &sdrc_base->cs[cs].mcfg);
+               writel(V_RFR_CTRL, &sdrc_base->cs[cs].rfr_ctrl);
+
+               /* AC timings */
+               writel(V_ACTIMA_165, &sdrc_actim_base0->ctrla);
+               writel(V_ACTIMB_165, &sdrc_actim_base0->ctrlb);
+
+               /* Initialize */
+               writel(CMD_NOP, &sdrc_base->cs[cs].manual);
+               writel(CMD_PRECHARGE, &sdrc_base->cs[cs].manual);
+               writel(CMD_AUTOREFRESH, &sdrc_base->cs[cs].manual);
+               writel(CMD_AUTOREFRESH, &sdrc_base->cs[cs].manual);
+
+               writel(V_MR, &sdrc_base->cs[cs].mr);
+       }
+#endif
+
        /*
         * SDRC timings are set up by x-load or config header
         * We don't need to redo them here.
         * Older x-loads configure only CS0
         * configure CS1 to handle this ommission
         */
-       if (cs) {
+       if (cs == CS1) {
                sdrc_actim_base0 = (struct sdrc_actim *)SDRC_ACTIM_CTRL0_BASE;
                sdrc_actim_base1 = (struct sdrc_actim *)SDRC_ACTIM_CTRL1_BASE;
                writel(readl(&sdrc_base->cs[CS0].mcfg),
@@ -163,8 +192,11 @@ void do_sdrc_init(u32 cs, u32 early)
         * Test ram in this bank
         * Disable if bad or not present
         */
-       if (!mem_ok(cs))
+       if (!mem_ok(cs)) {
+               spl_debug("RAM test: FAILED!\n");
                writel(0, &sdrc_base->cs[cs].mcfg);
+       }
+       spl_debug("RAM test: PASSED!\n");
 }
 
 /*
diff --git a/arch/arm/include/asm/arch-omap3/mem.h 
b/arch/arm/include/asm/arch-omap3/mem.h
index f165949..8b39745 100644
--- a/arch/arm/include/asm/arch-omap3/mem.h
+++ b/arch/arm/include/asm/arch-omap3/mem.h
@@ -128,6 +128,33 @@ enum {
                (MICRON_XSR_165 << 0) | (MICRON_TXP_165 << 8) | \
                (MICRON_TWTR_165 << 16))
 
+#define MICRON_RAMTYPE                 0x1
+#define MICRON_DDRTYPE                 0x0
+#define MICRON_DEEPPD                  0x1
+#define MICRON_B32NOT16                        0x1
+#define MICRON_BANKALLOCATION  0x2
+#define MICRON_RAMSIZE                 ((PHYS_SDRAM_1_SIZE/(1024*1024))/2)
+#define MICRON_ADDRMUXLEGACY   0x1
+#define MICRON_CASWIDTH                        0x5
+#define MICRON_RASWIDTH                        0x2
+#define MICRON_LOCKSTATUS              0x0
+#define MICRON_V_MCFG ((MICRON_LOCKSTATUS << 30) | (MICRON_RASWIDTH << 24) | \
+       (MICRON_CASWIDTH << 20) | (MICRON_ADDRMUXLEGACY << 19) | \
+       (MICRON_RAMSIZE << 8) | (MICRON_BANKALLOCATION << 6) | \
+       (MICRON_B32NOT16 << 4) | (MICRON_DEEPPD << 3) | \
+       (MICRON_DDRTYPE << 2) | (MICRON_RAMTYPE))
+
+#define MICRON_ARCV                            2030
+#define MICRON_ARE                             0x1
+#define MICRON_V_RFR_CTRL ((MICRON_ARCV << 8) | (MICRON_ARE))
+
+#define MICRON_BL                              0x2
+#define MICRON_SIL                             0x0
+#define MICRON_CASL                            0x3
+#define MICRON_WBST                            0x0
+#define MICRON_V_MR ((MICRON_WBST << 9) | (MICRON_CASL << 4) | \
+       (MICRON_SIL << 3) | (MICRON_BL))
+
 /*
  * NUMONYX part of IGEP v2 (165MHz optimized) 6.06ns
  *   ACTIMA
@@ -171,10 +198,15 @@ enum {
 #define V_ACTIMA_165 INFINEON_V_ACTIMA_165
 #define V_ACTIMB_165 INFINEON_V_ACTIMB_165
 #endif
+
 #ifdef CONFIG_OMAP3_MICRON_DDR
-#define V_ACTIMA_165 MICRON_V_ACTIMA_165
-#define V_ACTIMB_165 MICRON_V_ACTIMB_165
+#define V_ACTIMA_165   MICRON_V_ACTIMA_165
+#define V_ACTIMB_165   MICRON_V_ACTIMB_165
+#define V_MCFG                 MICRON_V_MCFG
+#define V_RFR_CTRL             MICRON_V_RFR_CTRL
+#define V_MR                   MICRON_V_MR
 #endif
+
 #ifdef CONFIG_OMAP3_NUMONYX_DDR
 #define V_ACTIMA_165 NUMONYX_V_ACTIMA_165
 #define V_ACTIMB_165 NUMONYX_V_ACTIMB_165
@@ -184,6 +216,10 @@ enum {
 #error "Please choose the right DDR type in config header"
 #endif
 
+#if defined(CONFIG_PRELOADER) && (!defined(V_MCFG) || !defined(V_RFR_CTRL))
+#error "Please choose the right DDR type in config header"
+#endif
+
 /*
  * GPMC settings -
  * Definitions is as per the following format
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to