Allows the SDRAM self refresh to work with 2 chip selects
cover Allows the SDRAM self refresh to work with 2 chip selects
Hi,
Those 2 patches allow the self refresh to work in case of 2 chip selects are in use by the SDRC.
It applies on top of the master branch.
Regards,
Jean
---
OMAP3-add-support-for-2-SDRAM-chip-selects.patch OMAP3-Setup-MUX-settings-for-SDRC-CKE-signals.patch
arch/arm/mach-omap2/board-2430sdp.c | 2 +- arch/arm/mach-omap2/board-3430sdp.c | 2 +- arch/arm/mach-omap2/board-4430sdp.c | 2 +- arch/arm/mach-omap2/board-apollon.c | 2 +- arch/arm/mach-omap2/board-generic.c | 2 +- arch/arm/mach-omap2/board-h4.c | 2 +- arch/arm/mach-omap2/board-ldp.c | 2 +- arch/arm/mach-omap2/board-n800.c | 2 +- arch/arm/mach-omap2/board-omap3beagle.c | 7 ++- arch/arm/mach-omap2/board-omap3evm.c | 2 +- arch/arm/mach-omap2/board-omap3pandora.c | 8 ++- arch/arm/mach-omap2/board-overo.c | 8 ++- arch/arm/mach-omap2/board-rx51.c | 6 +- arch/arm/mach-omap2/board-zoom2.c | 2 +- arch/arm/mach-omap2/clock34xx.c | 37 ++++++-- arch/arm/mach-omap2/io.c | 5 +- arch/arm/mach-omap2/mux.c | 6 ++ arch/arm/mach-omap2/sdrc.c | 63 +++++++++----- arch/arm/mach-omap2/sram34xx.S | 137 +++++++++++++++++++++++------- arch/arm/plat-omap/include/mach/io.h | 3 +- arch/arm/plat-omap/include/mach/mux.h | 4 + arch/arm/plat-omap/include/mach/sdrc.h | 11 ++- arch/arm/plat-omap/include/mach/sram.h | 23 +++--- arch/arm/plat-omap/sram.c | 30 ++++--- 24 files changed, 265 insertions(+), 103 deletions(-)
PATCH 1/2 OMAP3: add support for 2 SDRAM chip selects
Some OMAP3 boards (Beagle Cx, Overo, RX51, Pandora) have 2 SDRAM parts connected to the SDRC.
This patch adds the following:
- add a new argument of type omap_sdrc_params struct* to omap2_init_common_hw and omap2_sdrc_init for the 2nd CS params
- adapted the OMAP boards files to the new prototype of omap2_init_common_hw
- add the SDRC 2nd CS registers offsets defines
- adapt the sram sleep code to configure the SDRC for the 2nd CS
Note: If the 2nd param to omap2_init_common_hw is NULL, then the parameters are not programmed into the SDRC CS1 registers
Tested on 3430 SDP and Beagleboard rev C2 and B5, with suspend/resume and frequency changes (cpufreq).
--- arch/arm/mach-omap2/board-2430sdp.c | 2 +- arch/arm/mach-omap2/board-3430sdp.c | 2 +- arch/arm/mach-omap2/board-4430sdp.c | 2 +- arch/arm/mach-omap2/board-apollon.c | 2 +- arch/arm/mach-omap2/board-generic.c | 2 +- arch/arm/mach-omap2/board-h4.c | 2 +- arch/arm/mach-omap2/board-ldp.c | 2 +- arch/arm/mach-omap2/board-n800.c | 2 +- arch/arm/mach-omap2/board-omap3beagle.c | 3 +- arch/arm/mach-omap2/board-omap3evm.c | 2 +- arch/arm/mach-omap2/board-omap3pandora.c | 3 +- arch/arm/mach-omap2/board-overo.c | 3 +- arch/arm/mach-omap2/board-rx51.c | 2 +- arch/arm/mach-omap2/board-zoom2.c | 2 +- arch/arm/mach-omap2/clock34xx.c | 37 ++++++-- arch/arm/mach-omap2/io.c | 5 +- arch/arm/mach-omap2/sdrc.c | 63 +++++++++----- arch/arm/mach-omap2/sram34xx.S | 137 +++++++++++++++++++++++------- arch/arm/plat-omap/include/mach/io.h | 3 +- arch/arm/plat-omap/include/mach/sdrc.h | 11 ++- arch/arm/plat-omap/include/mach/sram.h | 23 +++--- arch/arm/plat-omap/sram.c | 30 ++++--- 22 files changed, 237 insertions(+), 103 deletions(-)
From 037d377794543a46112a7e797a27b5101f1509f0 Mon Sep 17 00:00:00 2001
From: Jean Pihet <[email protected]>
Date: Mon, 15 Jun 2009 21:22:00 +0200
Subject: [PATCH 1/2] OMAP3: add support for 2 SDRAM chip selects
Some OMAP3 boards (Beagle Cx, Overo, RX51, Pandora) have 2 SDRAM parts connected to the SDRC.
This patch adds the following:
- add a new argument of type omap_sdrc_params struct* to omap2_init_common_hw and omap2_sdrc_init for the 2nd CS params
- adapted the OMAP boards files to the new prototype of omap2_init_common_hw
- add the SDRC 2nd CS registers offsets defines
- adapt the sram sleep code to configure the SDRC for the 2nd CS
Note: If the 2nd param to omap2_init_common_hw is NULL, then the parameters are not programmed into the SDRC CS1 registers
Tested on 3430 SDP and Beagleboard rev C2 and B5, with suspend/resume and frequency changes (cpufreq).
--- arch/arm/mach-omap2/board-2430sdp.c | 2 +- arch/arm/mach-omap2/board-3430sdp.c | 2 +- arch/arm/mach-omap2/board-4430sdp.c | 2 +- arch/arm/mach-omap2/board-apollon.c | 2 +- arch/arm/mach-omap2/board-generic.c | 2 +- arch/arm/mach-omap2/board-h4.c | 2 +- arch/arm/mach-omap2/board-ldp.c | 2 +- arch/arm/mach-omap2/board-n800.c | 2 +- arch/arm/mach-omap2/board-omap3beagle.c | 3 +- arch/arm/mach-omap2/board-omap3evm.c | 2 +- arch/arm/mach-omap2/board-omap3pandora.c | 3 +- arch/arm/mach-omap2/board-overo.c | 3 +- arch/arm/mach-omap2/board-rx51.c | 2 +- arch/arm/mach-omap2/board-zoom2.c | 2 +- arch/arm/mach-omap2/clock34xx.c | 37 ++++++-- arch/arm/mach-omap2/io.c | 5 +- arch/arm/mach-omap2/sdrc.c | 63 +++++++++----- arch/arm/mach-omap2/sram34xx.S | 137 +++++++++++++++++++++++------- arch/arm/plat-omap/include/mach/io.h | 3 +- arch/arm/plat-omap/include/mach/sdrc.h | 11 ++- arch/arm/plat-omap/include/mach/sram.h | 23 +++--- arch/arm/plat-omap/sram.c | 30 ++++--- 22 files changed, 237 insertions(+), 103 deletions(-)
arch/arm/mach-omap2/board-2430sdp.c +1 -1
@@ -141,7 +141,7 @@ static inline void board_smc91x_init(void)static void __init omap_2430sdp_init_irq (void ) { -omap2_init_common_hw (NULL ); +omap2_init_common_hw (NULL ,NULL );omap_init_irq ();omap_gpio_init (); }
arch/arm/mach-omap2/board-3430sdp.c +1 -1
@@ -169,7 +169,7 @@ static struct platform_device *sdp3430_devices[] __initdata = {static void __init omap_3430sdp_init_irq (void ) { -omap2_init_common_hw (hyb18m512160af6_sdrc_params); +omap2_init_common_hw (hyb18m512160af6_sdrc_params,NULL );omap_init_irq ();omap_gpio_init (); }
arch/arm/mach-omap2/board-4430sdp.c +1 -1
@@ -59,7 +59,7 @@ static void __init gic_init_irq(void)static void __init omap_4430sdp_init_irq (void ) { -omap2_init_common_hw (NULL ); +omap2_init_common_hw (NULL ,NULL );#ifdef CONFIG_OMAP_32K_TIMER omap2_gp_clockevent_set_gptimer (1 );#endif
arch/arm/mach-omap2/board-apollon.c +1 -1
@@ -250,7 +250,7 @@ out:static void __init omap_apollon_init_irq (void ) { -omap2_init_common_hw (NULL ); +omap2_init_common_hw (NULL ,NULL );omap_init_irq ();omap_gpio_init ();apollon_init_smc91x ();
arch/arm/mach-omap2/board-generic.c +1 -1
@@ -33,7 +33,7 @@static void __init omap_generic_init_irq (void ) { -omap2_init_common_hw (NULL ); +omap2_init_common_hw (NULL ,NULL );omap_init_irq (); }
arch/arm/mach-omap2/board-h4.c +1 -1
@@ -270,7 +270,7 @@ static void __init h4_init_flash(void)static void __init omap_h4_init_irq (void ) { -omap2_init_common_hw (NULL ); +omap2_init_common_hw (NULL ,NULL );omap_init_irq ();omap_gpio_init ();h4_init_flash ();
arch/arm/mach-omap2/board-ldp.c +1 -1
@@ -270,7 +270,7 @@ static inline void __init ldp_init_smsc911x(void)static void __init omap_ldp_init_irq (void ) { -omap2_init_common_hw (NULL ); +omap2_init_common_hw (NULL ,NULL );omap_init_irq ();omap_gpio_init ();ldp_init_smsc911x ();
arch/arm/mach-omap2/board-n800.c +1 -1
@@ -142,7 +142,7 @@ static struct lm8323_platform_data lm8323_pdata = {void __init nokia_n800_init_irq (void ) { -omap2_init_common_hw (NULL ); +omap2_init_common_hw (NULL ,NULL );omap_init_irq ();omap_gpio_init ();
arch/arm/mach-omap2/board-omap3beagle.c +2 -1
@@ -282,7 +282,8 @@ static int __init omap3_beagle_i2c_init(void)static void __init omap3_beagle_init_irq (void ) { -omap2_init_common_hw (mt46h32m32lf6_sdrc_params); +omap2_init_common_hw (mt46h32m32lf6_sdrc_params, + mt46h32m32lf6_sdrc_params);omap_init_irq ();#ifdef CONFIG_OMAP_32K_TIMER omap2_gp_clockevent_set_gptimer (12 );
arch/arm/mach-omap2/board-omap3evm.c +1 -1
@@ -279,7 +279,7 @@ struct spi_board_info omap3evm_spi_board_info[] = {static void __init omap3_evm_init_irq (void ) { -omap2_init_common_hw (mt46h32m32lf6_sdrc_params); +omap2_init_common_hw (mt46h32m32lf6_sdrc_params,NULL );omap_init_irq ();omap_gpio_init ();omap3evm_init_smc911x ();
arch/arm/mach-omap2/board-omap3pandora.c +2 -1
@@ -310,7 +310,8 @@ static int __init omap3pandora_i2c_init(void)static void __init omap3pandora_init_irq (void ) { -omap2_init_common_hw (mt46h32m32lf6_sdrc_params); +omap2_init_common_hw (mt46h32m32lf6_sdrc_params, + mt46h32m32lf6_sdrc_params);omap_init_irq ();omap_gpio_init (); }
arch/arm/mach-omap2/board-overo.c +2 -1
@@ -360,7 +360,8 @@ static int __init overo_i2c_init(void)static void __init overo_init_irq (void ) { -omap2_init_common_hw (mt46h32m32lf6_sdrc_params); +omap2_init_common_hw (mt46h32m32lf6_sdrc_params, + mt46h32m32lf6_sdrc_params);omap_init_irq ();omap_gpio_init (); }
arch/arm/mach-omap2/board-rx51.c +1 -1
@@ -61,7 +61,7 @@ static struct omap_board_config_kernel rx51_config[] = {static void __init rx51_init_irq (void ) { -omap2_init_common_hw (NULL ); +omap2_init_common_hw (NULL ,NULL );omap_init_irq ();omap_gpio_init (); }
arch/arm/mach-omap2/board-zoom2.c +1 -1
@@ -25,7 +25,7 @@static void __init omap_zoom2_init_irq (void ) { -omap2_init_common_hw (NULL ); +omap2_init_common_hw (NULL ,NULL );omap_init_irq ();omap_gpio_init (); }
arch/arm/mach-omap2/clock34xx.c +28 -9
@@ -725,7 +725,9 @@ static int omap3_core_dpll_m2_set_rate(struct clk *clk, unsigned long rate)u32 unlock_dll =0 ;u32 c;unsigned long validrate, sdrcrate, mpurate; -struct omap_sdrc_params *sp; +struct omap_sdrc_params *sdrc_cs0; +struct omap_sdrc_params *sdrc_cs1; +int ret;if (!clk || !rate)return -EINVAL ;
@@ -743,8 +745,8 @@ static int omap3_core_dpll_m2_set_rate(struct clk *clk, unsigned long rate)else sdrcrate >>= ((clk->rate / rate) >>1 ); - sp =omap2_sdrc_get_params (sdrcrate); -if (!sp) + ret =omap2_sdrc_get_params (sdrcrate, &sdrc_cs0, &sdrc_cs1); +if (ret)return -EINVAL ;if (sdrcrate <MIN_SDRC_DLL_LOCK_FREQ ) {
@@ -765,12 +767,29 @@ static int omap3_core_dpll_m2_set_rate(struct clk *clk, unsigned long rate)pr_debug ("clock: changing CORE DPLL rate from %lu to %lu\n" , clk->rate, validrate); -pr_debug ("clock: SDRC timing params used: %08x %08x %08x\n" , - sp->rfr_ctrl, sp->actim_ctrla, sp->actim_ctrlb); - -omap3_configure_core_dpll (sp->rfr_ctrl, sp->actim_ctrla, - sp->actim_ctrlb, new_div, unlock_dll, c, - sp->mr, rate > clk->rate); +pr_debug ("clock: SDRC CS0 timing params used:" +" RFR %08x CTRLA %08x CTRLB %08x MR %08x\n" , + sdrc_cs0->rfr_ctrl, sdrc_cs0->actim_ctrla, + sdrc_cs0->actim_ctrlb, sdrc_cs0->mr); +if (sdrc_cs1) +pr_debug ("clock: SDRC CS1 timing params used: " +" RFR %08x CTRLA %08x CTRLB %08x MR %08x\n" , + sdrc_cs1->rfr_ctrl, sdrc_cs1->actim_ctrla, + sdrc_cs1->actim_ctrlb, sdrc_cs1->mr); + +if (sdrc_cs1) +omap3_configure_core_dpll ( + new_div, unlock_dll, c, rate > clk->rate, + sdrc_cs0->rfr_ctrl, sdrc_cs0->actim_ctrla, + sdrc_cs0->actim_ctrlb, sdrc_cs0->mr, + sdrc_cs1->rfr_ctrl, sdrc_cs1->actim_ctrla, + sdrc_cs1->actim_ctrlb, sdrc_cs1->mr); +else +omap3_configure_core_dpll ( + new_div, unlock_dll, c, rate > clk->rate, + sdrc_cs0->rfr_ctrl, sdrc_cs0->actim_ctrla, + sdrc_cs0->actim_ctrlb, sdrc_cs0->mr, +0 ,0 ,0 ,0 );return 0 ; }
arch/arm/mach-omap2/io.c +3 -2
@@ -276,14 +276,15 @@ static int __init _omap2_init_reprogram_sdrc(void)return v; } -void __init omap2_init_common_hw (struct omap_sdrc_params *sp) +void __init omap2_init_common_hw (struct omap_sdrc_params *sdrc_cs0, +struct omap_sdrc_params *sdrc_cs1) {omap2_mux_init ();#ifndef CONFIG_ARCH_OMAP4 /* FIXME: Remove this once the clkdev is ready */ pwrdm_init (powerdomains_omap);clkdm_init (clockdomains_omap, clkdm_pwrdm_autodeps);omap2_clk_init (); -omap2_sdrc_init (sp); +omap2_sdrc_init (sdrc_cs0, sdrc_cs1);_omap2_init_reprogram_sdrc ();#endif gpmc_init ();
arch/arm/mach-omap2/sdrc.c +41 -22
101 lines not on this page · raw message
arch/arm/mach-omap2/sram34xx.S +107 -30
193 lines not on this page · raw message
arch/arm/plat-omap/include/mach/io.h +2 -1
@@ -228,7 +228,8 @@ extern void omap1_map_common_io(void);extern void omap1_init_common_hw (void );extern void omap2_map_common_io (void ); -extern void omap2_init_common_hw (struct omap_sdrc_params *sp); +extern void omap2_init_common_hw (struct omap_sdrc_params *sdrc_cs0, +struct omap_sdrc_params *sdrc_cs1);#define __arch_ioremap (p,s,t) omap_ioremap(p,s,t)#define __arch_iounmap (v) omap_iounmap(v)
arch/arm/plat-omap/include/mach/sdrc.h +9 -2
@@ -30,6 +30,10 @@#define SDRC_ACTIM_CTRL_A_0 0x09c#define SDRC_ACTIM_CTRL_B_0 0x0a0#define SDRC_RFR_CTRL_0 0x0a4 +#define SDRC_MR_1 0x0B4 +#define SDRC_ACTIM_CTRL_A_1 0x0C4 +#define SDRC_ACTIM_CTRL_B_1 0x0C8 +#define SDRC_RFR_CTRL_1 0x0D4/* * These values represent the number of memory clock cycles between
@@ -102,8 +106,11 @@ struct omap_sdrc_params {u32 mr; }; -void __init omap2_sdrc_init (struct omap_sdrc_params *sp); -struct omap_sdrc_params *omap2_sdrc_get_params (unsigned long r); +void __init omap2_sdrc_init (struct omap_sdrc_params *sdrc_cs0, +struct omap_sdrc_params *sdrc_cs1); +int omap2_sdrc_get_params (unsigned long r, +struct omap_sdrc_params **sdrc_cs0, +struct omap_sdrc_params **sdrc_cs1);#ifdef CONFIG_ARCH_OMAP2
arch/arm/plat-omap/include/mach/sram.h +12 -11
@@ -21,11 +21,12 @@ extern void omap2_sram_reprogram_sdrc(u32 perf_level, u32 dll_val, u32 mem_type);extern u32 omap2_set_prcm (u32 dpll_ctrl_val,u32 sdrc_rfr_val,int bypass); -extern u32 omap3_configure_core_dpll (u32 sdrc_rfr_ctrl, -u32 sdrc_actim_ctrla, -u32 sdrc_actim_ctrlb,u32 m2, -u32 unlock_dll,u32 f,u32 sdrc_mr, -u32 inc); +extern u32 omap3_configure_core_dpll ( +u32 m2,u32 unlock_dll,u32 f,u32 inc, +u32 sdrc_rfr_ctrl_0,u32 sdrc_actim_ctrl_a_0, +u32 sdrc_actim_ctrl_b_0,u32 sdrc_mr_0, +u32 sdrc_rfr_ctrl_1,u32 sdrc_actim_ctrl_a_1, +u32 sdrc_actim_ctrl_b_1,u32 sdrc_mr_1);/* Do not use these */ extern void omap1_sram_reprogram_clock (u32 ckctl,u32 dpllctl);
@@ -59,12 +60,12 @@ extern void omap243x_sram_reprogram_sdrc(u32 perf_level, u32 dll_val, u32 mem_type);extern unsigned long omap243x_sram_reprogram_sdrc_sz; - -extern u32 omap3_sram_configure_core_dpll (u32 sdrc_rfr_ctrl, -u32 sdrc_actim_ctrla, -u32 sdrc_actim_ctrlb,u32 m2, -u32 unlock_dll,u32 f,u32 sdrc_mr, -u32 inc); +extern u32 omap3_sram_configure_core_dpll ( +u32 m2,u32 unlock_dll,u32 f,u32 inc, +u32 sdrc_rfr_ctrl_0,u32 sdrc_actim_ctrl_a_0, +u32 sdrc_actim_ctrl_b_0,u32 sdrc_mr_0, +u32 sdrc_rfr_ctrl_1,u32 sdrc_actim_ctrl_a_1, +u32 sdrc_actim_ctrl_b_1,u32 sdrc_mr_1);extern unsigned long omap3_sram_configure_core_dpll_sz;#endif
arch/arm/plat-omap/sram.c +18 -12
@@ -368,20 +368,26 @@ static inline int omap243x_sram_init(void)#ifdef CONFIG_ARCH_OMAP3 -static u32 (*_omap3_sram_configure_core_dpll)(u32 sdrc_rfr_ctrl, -u32 sdrc_actim_ctrla, -u32 sdrc_actim_ctrlb, -u32 m2,u32 unlock_dll, -u32 f,u32 sdrc_mr,u32 inc); -u32 omap3_configure_core_dpll (u32 sdrc_rfr_ctrl,u32 sdrc_actim_ctrla, -u32 sdrc_actim_ctrlb,u32 m2,u32 unlock_dll, -u32 f,u32 sdrc_mr,u32 inc) +static u32 (*_omap3_sram_configure_core_dpll)( +u32 m2,u32 unlock_dll,u32 f,u32 inc, +u32 sdrc_rfr_ctrl_0,u32 sdrc_actim_ctrl_a_0, +u32 sdrc_actim_ctrl_b_0,u32 sdrc_mr_0, +u32 sdrc_rfr_ctrl_1,u32 sdrc_actim_ctrl_a_1, +u32 sdrc_actim_ctrl_b_1,u32 sdrc_mr_1); + +u32 omap3_configure_core_dpll (u32 m2,u32 unlock_dll,u32 f,u32 inc, +u32 sdrc_rfr_ctrl_0,u32 sdrc_actim_ctrl_a_0, +u32 sdrc_actim_ctrl_b_0,u32 sdrc_mr_0, +u32 sdrc_rfr_ctrl_1,u32 sdrc_actim_ctrl_a_1, +u32 sdrc_actim_ctrl_b_1,u32 sdrc_mr_1) {BUG_ON (!_omap3_sram_configure_core_dpll); -return _omap3_sram_configure_core_dpll (sdrc_rfr_ctrl, - sdrc_actim_ctrla, - sdrc_actim_ctrlb, m2, - unlock_dll, f, sdrc_mr, inc); +return _omap3_sram_configure_core_dpll ( + m2, unlock_dll, f, inc, + sdrc_rfr_ctrl_0, sdrc_actim_ctrl_a_0, + sdrc_actim_ctrl_b_0, sdrc_mr_0, + sdrc_rfr_ctrl_1, sdrc_actim_ctrl_a_1, + sdrc_actim_ctrl_b_1, sdrc_mr_1); }/* REVISIT: Should this be same as omap34xx_sram_init() after off-idle? */
Signature · 1 line
1.6.2.5.168.g3823
PATCH 2/2 OMAP3: Setup MUX settings for SDRC CKE signals
In reply to Jean PihetThis patches ensures the MUX settings are correct for the SDRC CKE signals to SDRAM. This allows the self-refresh to work when 2 chip-selects are in use.
A warning is thrown away in case the initial muxing is incorrect, in order to track faulty or old-dated bootloaders.
Note: The CONFIG_OMAP_MUX and CONFIG_OMAP_MUX_WARNINGS options must be enabled for the mux code to have effect.
--- arch/arm/mach-omap2/board-omap3beagle.c | 4 ++++ arch/arm/mach-omap2/board-omap3pandora.c | 5 +++++ arch/arm/mach-omap2/board-overo.c | 5 +++++ arch/arm/mach-omap2/board-rx51.c | 4 ++++ arch/arm/mach-omap2/mux.c | 6 ++++++ arch/arm/plat-omap/include/mach/mux.h | 4 ++++ 6 files changed, 28 insertions(+), 0 deletions(-)
(quoted diff) +0 -0
b/arch/arm/mach-omap2/board-omap3beagle.c
index 37cd4b7..922e8ab 100644
arch/arm/mach-omap2/board-omap3beagle.c +4 -0
@@ -410,6 +410,10 @@ static void __init omap3_beagle_init(void)usb_musb_init ();usb_ehci_init (EHCI_HCD_OMAP_MODE_PHY , true, true,57 ,61 );omap3beagle_flash_init (); + +/* Ensure SDRC pins are mux'd for self-refresh */ +omap_cfg_reg (H16_34XX_SDRC_CKE0 ); +omap_cfg_reg (H17_34XX_SDRC_CKE1 ); }static void __init omap3_beagle_map_io (void )
(quoted diff) +0 -0
b/arch/arm/mach-omap2/board-omap3pandora.c
index b19cc7b..ef77c20 100644
arch/arm/mach-omap2/board-omap3pandora.c +5 -0
@@ -40,6 +40,7 @@#include <mach/mcspi.h> #include <mach/usb.h> #include <mach/keypad.h> +#include <mach/mux.h> #include "sdram-micron-mt46h32m32lf-6.h" #include "mmc-twl4030.h"
@@ -399,6 +400,10 @@ static void __init omap3pandora_init(void)usb_ehci_init (EHCI_HCD_OMAP_MODE_PHY , false, true,16 , -EINVAL );pandora_keys_gpio_init ();usb_musb_init (); + +/* Ensure SDRC pins are mux'd for self-refresh */ +omap_cfg_reg (H16_34XX_SDRC_CKE0 ); +omap_cfg_reg (H17_34XX_SDRC_CKE1 ); }static void __init omap3pandora_map_io (void )
(quoted diff) +0 -0
b/arch/arm/mach-omap2/board-overo.c
index 5932ff1..a44771d 100644
arch/arm/mach-omap2/board-overo.c +5 -0
@@ -44,6 +44,7 @@#include <mach/gpmc.h> #include <mach/hardware.h> #include <mach/nand.h> +#include <mach/mux.h> #include <mach/usb.h> #include "sdram-micron-mt46h32m32lf-6.h"
@@ -397,6 +398,10 @@ static void __init overo_init(void)overo_ads7846_init ();overo_init_smsc911x (); +/* Ensure SDRC pins are mux'd for self-refresh */ +omap_cfg_reg (H16_34XX_SDRC_CKE0 ); +omap_cfg_reg (H17_34XX_SDRC_CKE1 ); +if ((gpio_request (OVERO_GPIO_W2W_NRESET ,"OVERO_GPIO_W2W_NRESET" ) ==0 ) && (gpio_direction_output (OVERO_GPIO_W2W_NRESET ,1 ) ==0 )) {
(quoted diff) +0 -0
b/arch/arm/mach-omap2/board-rx51.c
index 591ae8a..1c9e07f 100644
arch/arm/mach-omap2/board-rx51.c +4 -0
@@ -75,6 +75,10 @@ static void __init rx51_init(void)omap_serial_init ();usb_musb_init ();rx51_peripherals_init (); + +/* Ensure SDRC pins are mux'd for self-refresh */ +omap_cfg_reg (H16_34XX_SDRC_CKE0 ); +omap_cfg_reg (H17_34XX_SDRC_CKE1 ); }static void __init rx51_map_io (void )
arch/arm/mach-omap2/mux.c +6 -0
@@ -486,6 +486,12 @@ MUX_CFG_34XX("H19_34XX_GPIO164_OUT", 0x19c, OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_OUTPUT) MUX_CFG_34XX("J25_34XX_GPIO170", 0x1c6, OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_INPUT) + +/* OMAP3 SDRC CKE signals to SDR/DDR ram chips */ +MUX_CFG_34XX ("H16_34XX_SDRC_CKE0" ,0x262 , + OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT) +MUX_CFG_34XX ("H17_34XX_SDRC_CKE1" ,0x264 , + OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT) };#define OMAP34XX_PINS_SZ ARRAY_SIZE(omap34xx_pins)
(quoted diff) +0 -0
b/arch/arm/plat-omap/include/mach/mux.h
index 85a6217..80281c4 100644
arch/arm/plat-omap/include/mach/mux.h +4 -0
@@ -853,6 +853,10 @@ enum omap34xx_index {AE5_34XX_GPIO143 ,H19_34XX_GPIO164_OUT ,J25_34XX_GPIO170 , + +/* OMAP3 SDRC CKE signals to SDR/DDR ram chips */ +H16_34XX_SDRC_CKE0 , + H17_34XX_SDRC_CKE1, }; struct omap_mux_cfg {
Signature · 1 line
1.6.2.5.168.g3823
From 4bdb5b858d1d441d0cbf0f82016aaa6d4fec0b39 Mon Sep 17 00:00:00 2001
From: Jean Pihet <[email protected]>
Date: Tue, 16 Jun 2009 09:58:58 +0200
Subject: [PATCH 2/2] OMAP3: Setup MUX settings for SDRC CKE signals
This patches ensures the MUX settings are correct for the SDRC CKE signals to SDRAM. This allows the self-refresh to work when 2 chip-selects are in use.
A warning is thrown away in case the initial muxing is incorrect, in order to track faulty or old-dated bootloaders.
Note: The CONFIG_OMAP_MUX and CONFIG_OMAP_MUX_WARNINGS options must be enabled for the mux code to have effect.
--- arch/arm/mach-omap2/board-omap3beagle.c | 4 ++++ arch/arm/mach-omap2/board-omap3pandora.c | 5 +++++ arch/arm/mach-omap2/board-overo.c | 5 +++++ arch/arm/mach-omap2/board-rx51.c | 4 ++++ arch/arm/mach-omap2/mux.c | 6 ++++++ arch/arm/plat-omap/include/mach/mux.h | 4 ++++ 6 files changed, 28 insertions(+), 0 deletions(-)
arch/arm/mach-omap2/board-omap3beagle.c +4 -0
@@ -410,6 +410,10 @@ static void __init omap3_beagle_init(void)usb_musb_init ();usb_ehci_init (EHCI_HCD_OMAP_MODE_PHY , true, true,57 ,61 );omap3beagle_flash_init (); + +/* Ensure SDRC pins are mux'd for self-refresh */ +omap_cfg_reg (H16_34XX_SDRC_CKE0 ); +omap_cfg_reg (H17_34XX_SDRC_CKE1 ); }static void __init omap3_beagle_map_io (void )
arch/arm/mach-omap2/board-omap3pandora.c +5 -0
@@ -40,6 +40,7 @@#include <mach/mcspi.h> #include <mach/usb.h> #include <mach/keypad.h> +#include <mach/mux.h> #include "sdram-micron-mt46h32m32lf-6.h" #include "mmc-twl4030.h"
@@ -399,6 +400,10 @@ static void __init omap3pandora_init(void)usb_ehci_init (EHCI_HCD_OMAP_MODE_PHY , false, true,16 , -EINVAL );pandora_keys_gpio_init ();usb_musb_init (); + +/* Ensure SDRC pins are mux'd for self-refresh */ +omap_cfg_reg (H16_34XX_SDRC_CKE0 ); +omap_cfg_reg (H17_34XX_SDRC_CKE1 ); }static void __init omap3pandora_map_io (void )
arch/arm/mach-omap2/board-overo.c +5 -0
@@ -44,6 +44,7 @@#include <mach/gpmc.h> #include <mach/hardware.h> #include <mach/nand.h> +#include <mach/mux.h> #include <mach/usb.h> #include "sdram-micron-mt46h32m32lf-6.h"
@@ -397,6 +398,10 @@ static void __init overo_init(void)overo_ads7846_init ();overo_init_smsc911x (); +/* Ensure SDRC pins are mux'd for self-refresh */ +omap_cfg_reg (H16_34XX_SDRC_CKE0 ); +omap_cfg_reg (H17_34XX_SDRC_CKE1 ); +if ((gpio_request (OVERO_GPIO_W2W_NRESET ,"OVERO_GPIO_W2W_NRESET" ) ==0 ) && (gpio_direction_output (OVERO_GPIO_W2W_NRESET ,1 ) ==0 )) {
arch/arm/mach-omap2/board-rx51.c +4 -0
@@ -75,6 +75,10 @@ static void __init rx51_init(void)omap_serial_init ();usb_musb_init ();rx51_peripherals_init (); + +/* Ensure SDRC pins are mux'd for self-refresh */ +omap_cfg_reg (H16_34XX_SDRC_CKE0 ); +omap_cfg_reg (H17_34XX_SDRC_CKE1 ); }static void __init rx51_map_io (void )
arch/arm/mach-omap2/mux.c +6 -0
@@ -486,6 +486,12 @@ MUX_CFG_34XX("H19_34XX_GPIO164_OUT", 0x19c, OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_OUTPUT) MUX_CFG_34XX("J25_34XX_GPIO170", 0x1c6, OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_INPUT) + +/* OMAP3 SDRC CKE signals to SDR/DDR ram chips */ +MUX_CFG_34XX ("H16_34XX_SDRC_CKE0" ,0x262 , + OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT) +MUX_CFG_34XX ("H17_34XX_SDRC_CKE1" ,0x264 , + OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT) };#define OMAP34XX_PINS_SZ ARRAY_SIZE(omap34xx_pins)
arch/arm/plat-omap/include/mach/mux.h +4 -0
@@ -853,6 +853,10 @@ enum omap34xx_index {AE5_34XX_GPIO143 ,H19_34XX_GPIO164_OUT ,J25_34XX_GPIO170 , + +/* OMAP3 SDRC CKE signals to SDR/DDR ram chips */ +H16_34XX_SDRC_CKE0 , + H17_34XX_SDRC_CKE1, }; struct omap_mux_cfg {
Signature · 1 line
1.6.2.5.168.g3823