Skip to contentSkip to conversation

Add RAM configuration independent of x-loader or CH

PATCH Superseded Simon Schwarz 1 participant 1 message Jun 1, 2011 Arm (32-bit)

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Add RAM configuration independent of x-loader or CH

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

--

(quoted diff) +0 -0

b/arch/arm/cpu/armv7/omap3/sdrc.c
index 2a7970b..3ea0842 100644

arch/arm/cpu/armv7/omap3/sdrc.c +28 -1
@@ -8,6 +8,8 @@
   * Copyright (C) 2004-2010
   * Texas Instruments Incorporated - http://www.ti.com/
   *
+ * Copyright (C) 2011 Simon Schwarz <[email protected]>
+ *
   * Author :
   *     Vaibhav Hiremath <[email protected]>
   *
@@ -133,13 +135,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),
(quoted diff) +0 -0

b/arch/arm/include/asm/arch-omap3/mem.h
index f165949..a28a900 100644

arch/arm/include/asm/arch-omap3/mem.h +13 -0
@@ -3,6 +3,8 @@
   * Texas Instruments, <www.ti.com>
   * Richard Woodruff <[email protected]>
   *
+ * (C) Copyright 2011 Simon Schwarz <[email protected]>
+ *
   * See file CREDITS for list of people who contributed to this
   * project.
   *
@@ -128,6 +130,32 @@ 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			0x0
+#define MICRON_BANKALLOCATION	0x0
+#define MICRON_RAMSIZE			(PHYS_SDRAM_1_SIZE/2)
+#define MICRON_ADDMUXLEGACY		0x1
+#define MICRON_CASWIDTH			0x4
+#define MICRON_RASWIDTH			0x1
+#define MICRON_LOCKSTATUS		0x0
+#define MICRON_V_MCFG ((MICRON_LOCKSTATUS << 30) | (MICRON_RASWIDTH << 

24) | \
+ (MICRON_CASWIDTH << 20) | (MICRON_ADDMUXLEGACY << 19) | \
+ (MICRON_RAMSIZE << 8) | (MICRON_BANKALLOCATION << 6) | \
+ (MICRON_B32NOT16 << 4) | (MICRON_DEEPPD << 3) | \
+ (MICRON_DDRTYPE << 2) | (MICRON_RAMTYPE))
+
+#define MICRON_ARE 0x1
+#define MICRON_v_RFR_CTRL ((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 +199,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 +217,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