omap: emif: configure emif only when required
PATCH 1/1 omap: emif: configure emif only when required
DMM_LISA_MAP registers program whether memory is mapped on particular EMIF or not. Irrespective of these registers EMIF is getting configured. Correcting the same.
--- arch/arm/cpu/armv7/omap-common/emif-common.c | 39 ++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 5 deletions(-)
arch/arm/cpu/armv7/omap-common/emif-common.c +34 -5
@@ -33,6 +33,8 @@#include <asm/utils.h> #include <linux/compiler.h> +static int emif1_enabled =-1 , emif2_enabled =-1 ; +void set_lpmode_selfrefresh (u32 base) {struct emif_reg_struct *emif = (struct emif_reg_struct *)base;
@@ -1218,6 +1220,27 @@ void dmm_init(u32 base) } } +static void enable_emifs (void ) +{ +u32 i, section, valid; + + emif1_enabled =0 ; + emif2_enabled =0 ; +for (i =0 ; i <4 ; i++) { + section =__raw_readl (DMM_BASE + i*4 ); + valid = (section &EMIF_SDRC_MAP_MASK ) >> + (EMIF_SDRC_MAP_SHIFT ); +if (valid ==1 ) { + emif1_enabled =1 ; + }else if (valid ==2 ) { + emif2_enabled =1 ; + }else if (valid ==3 ) { + emif1_enabled =1 ; + emif2_enabled =1 ; +return ; + } + } +}/* * SDRAM initialization: * SDRAM initialization has two parts:
@@ -1255,15 +1278,21 @@ void sdram_init(void)writel (CM_DLL_CTRL_NO_OVERRIDE , &prcm->cm_dll_ctrl); } -do_sdram_init (EMIF1_BASE ); -do_sdram_init (EMIF2_BASE ); -if (!in_sdram)dmm_init (DMM_BASE ); +enable_emifs (); +if (emif1_enabled) +do_sdram_init (EMIF1_BASE ); + +if (emif2_enabled) +do_sdram_init (EMIF2_BASE ); +if (!(in_sdram ||warm_reset ())) { -emif_post_init_config (EMIF1_BASE ); -emif_post_init_config (EMIF2_BASE ); +if (emif1_enabled) +emif_post_init_config (EMIF1_BASE ); +if (emif2_enabled) +emif_post_init_config (EMIF2_BASE ); }/* for the shadow registers to take effect */
Signature · 1 line
1.7.9.5
PATCH 1/1 omap: emif: configure emif only when required
Quoted 51 lines · Lokesh Vutla
DMM_LISA_MAPregisters program whether memory is mapped on particular EMIF or not. Irrespective of these registers EMIF is getting configured. Correcting the same.Signed-off-by Lokesh Vutla <[email protected]>--- arch/arm/cpu/armv7/omap-common/emif-common.c | 39 ++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 5 deletions(-)arch/arm/cpu/armv7/omap-common/emif-common.c +23
-0@@ -33,6 +33,8 @@#include <asm/utils.h> #include <linux/compiler.h> +static int emif1_enabled =-1 , emif2_enabled =-1 ; +void set_lpmode_selfrefresh (u32 base) {struct emif_reg_struct *emif = (struct emif_reg_struct *)base;@@ -1218,6 +1220,27 @@ void dmm_init(u32 base) } } +static void enable_emifs (void ) +{ +u32 i, section, valid; + + emif1_enabled =0 ; + emif2_enabled =0 ; +for (i =0 ; i <4 ; i++) { + section =__raw_readl (DMM_BASE + i*4 ); + valid = (section &EMIF_SDRC_MAP_MASK ) >> + (EMIF_SDRC_MAP_SHIFT ); +if (valid ==1 ) { + emif1_enabled =1 ; + }else if (valid ==2 ) { + emif2_enabled =1 ; + }else if (valid ==3 ) { + emif1_enabled =1 ; + emif2_enabled =1 ; +return ; + } + } +}/* * SDRAM initialization: * SDRAM initialization has two parts:
arch/arm/cpu/armv7/omap-common/emif-common.c void sdram_init(void) · line 1284
Quoted 10 lines
arch/arm/cpu/armv7/omap-common/emif-common.c +1
-3@@ -1255,15 +1278,21 @@ void sdram_init(void)writel (CM_DLL_CTRL_NO_OVERRIDE , &prcm->cm_dll_ctrl); } -do_sdram_init (EMIF1_BASE ); -do_sdram_init (EMIF2_BASE ); -if (!in_sdram)dmm_init (DMM_BASE ); +enable_emifs ();
The function name is odd. It has got nothing to do with enabling
EMIF's. It just identifies which is enabled ?. How about set_enabled_emifs ?
Also this can done just when you are configuring the LISA registers. That way a extra function is avoided.
Regards,
Sricharan
PATCH 1/1 omap: emif: configure emif only when required
Quoted 63 lines · R Sricharan
Quoted 62 lines · Lokesh Vutla
DMM_LISA_MAPregisters program whether memory is mapped on particular EMIF or not. Irrespective of these registers EMIF is getting configured. Correcting the same.Signed-off-by Lokesh Vutla <[email protected]>--- arch/arm/cpu/armv7/omap-common/emif-common.c | 39 ++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 5 deletions(-)arch/arm/cpu/armv7/omap-common/emif-common.c +23
-3@@ -33,6 +33,8 @@#include <asm/utils.h> #include <linux/compiler.h> +static int emif1_enabled =-1 , emif2_enabled =-1 ; +void set_lpmode_selfrefresh (u32 base) {struct emif_reg_struct *emif = (struct emif_reg_struct *)base;@@ -1218,6 +1220,27 @@ void dmm_init(u32 base) } } +static void enable_emifs (void ) +{ +u32 i, section, valid; + + emif1_enabled =0 ; + emif2_enabled =0 ; +for (i =0 ; i <4 ; i++) { + section =__raw_readl (DMM_BASE + i*4 ); + valid = (section &EMIF_SDRC_MAP_MASK ) >> + (EMIF_SDRC_MAP_SHIFT ); +if (valid ==1 ) { + emif1_enabled =1 ; + }else if (valid ==2 ) { + emif2_enabled =1 ; + }else if (valid ==3 ) { + emif1_enabled =1 ; + emif2_enabled =1 ; +return ; + } + } +}/* * SDRAM initialization: * SDRAM initialization has two parts: @@ -1255,15 +1278,21 @@ void sdram_init(void)writel (CM_DLL_CTRL_NO_OVERRIDE , &prcm->cm_dll_ctrl); } -do_sdram_init (EMIF1_BASE ); -do_sdram_init (EMIF2_BASE ); -if (!in_sdram)dmm_init (DMM_BASE );
Quoted 7 lines
arch/arm/cpu/armv7/omap-common/emif-common.c void sdram_init(void) · line 1284
Quoted 1 line
arch/arm/cpu/armv7/omap-common/emif-common.c +1
-0+enable_emifs ();The function name is odd. It has got nothing to do with enabling
EMIF's. It just identifies which is enabled ?. How aboutset_enabled_emifs?Also this can done just when you are configuring the LISA registers. That way a extra function is avoided.
Yes you are right. Ill do this post it.
Thanks
Lokesh
Quoted 3 lines
Regards,
Sricharan