Pass timings structure pointer to board_get_mem_timings()
PATCH 1/1 Pass timings structure pointer to board_get_mem_timings()
Instead of passing individual registers by value to board_get_mem_timings, pass a board_mem_timings structure pointer for the board files to fill in. Pass same structure pointer to write_sdrc_timings. This saves about 90 bytes of space in SPL.
Signed-off-by Peter Barada <[email protected]>
--- arch/arm/cpu/armv7/omap3/sdrc.c | 36 ++++++++---------- arch/arm/include/asm/arch-omap3/sys_proto.h | 12 +++++- board/corscience/tricorder/tricorder.c | 13 +++---- board/overo/overo.c | 37 +++++++++---------- board/ti/beagle/beagle.c | 53 +++++++++++++-------------- board/ti/evm/evm.c | 19 +++++----- board/timll/devkit8000/devkit8000.c | 13 +++---- 7 files changed, 91 insertions(+), 92 deletions(-)
arch/arm/cpu/armv7/omap3/sdrc.c +16 -20
@@ -113,18 +113,18 @@ u32 get_sdr_cs_offset(u32 cs)* - Test CS to make sure it's OK for use */ static void write_sdrc_timings (u32 cs,struct sdrc_actim *sdrc_actim_base, -u32 mcfg,u32 ctrla,u32 ctrlb,u32 rfr_ctrl,u32 mr) +struct board_mem_timings *timings) {/* Setup timings we got from the board. */ -writel (mcfg, &sdrc_base->cs[cs].mcfg); -writel (ctrla, &sdrc_actim_base->ctrla); -writel (ctrlb, &sdrc_actim_base->ctrlb); -writel (rfr_ctrl, &sdrc_base->cs[cs].rfr_ctrl); +writel (timings->mcfg, &sdrc_base->cs[cs].mcfg); +writel (timings->ctrla, &sdrc_actim_base->ctrla); +writel (timings->ctrlb, &sdrc_actim_base->ctrlb); +writel (timings->rfr_ctrl, &sdrc_base->cs[cs].rfr_ctrl);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 (mr, &sdrc_base->cs[cs].mr); +writel (timings->mr, &sdrc_base->cs[cs].mr);/* * Test ram in this bank
@@ -143,7 +143,7 @@ static void write_sdrc_timings(u32 cs, struct sdrc_actim *sdrc_actim_base,void do_sdrc_init (u32 cs,u32 early) {struct sdrc_actim *sdrc_actim_base0, *sdrc_actim_base1; -u32 mcfg, ctrla, ctrlb, rfr_ctrl, mr; +struct board_mem_timings timings; sdrc_actim_base0 = (struct sdrc_actim *)SDRC_ACTIM_CTRL0_BASE ; sdrc_actim_base1 = (struct sdrc_actim *)SDRC_ACTIM_CTRL1_BASE ;
@@ -158,7 +158,7 @@ void do_sdrc_init(u32 cs, u32 early)* setup CS1. */ #ifdef CONFIG_SPL_BUILD -get_board_mem_timings (&mcfg, &ctrla, &ctrlb, &rfr_ctrl, &mr); +get_board_mem_timings (&timings);#endif if (early) {/* reset sdrc controller */
@@ -177,11 +177,9 @@ void do_sdrc_init(u32 cs, u32 early)writel (ENADLL |DLLPHASE_90 , &sdrc_base->dlla_ctrl);sdelay (0x20000 );#ifdef CONFIG_SPL_BUILD -write_sdrc_timings (CS0 , sdrc_actim_base0, mcfg, ctrla, ctrlb, - rfr_ctrl, mr); +write_sdrc_timings (CS0 , sdrc_actim_base0, &timings);make_cs1_contiguous (); -write_sdrc_timings (CS0 , sdrc_actim_base1, mcfg, ctrla, ctrlb, - rfr_ctrl, mr); +write_sdrc_timings (CS0 , sdrc_actim_base1, &timings);#endif }
@@ -193,14 +191,12 @@ void do_sdrc_init(u32 cs, u32 early)* so we may be asked now to setup CS1. */ if (cs ==CS1 ) { - mcfg =readl (&sdrc_base->cs[CS0 ].mcfg), - rfr_ctrl =readl (&sdrc_base->cs[CS0 ].rfr_ctrl); - ctrla =readl (&sdrc_actim_base0->ctrla), - ctrlb =readl (&sdrc_actim_base0->ctrlb); - mr =readl (&sdrc_base->cs[CS0 ].mr); -write_sdrc_timings (cs, sdrc_actim_base1, mcfg, ctrla, ctrlb, - rfr_ctrl, mr); - + timings.mcfg =readl (&sdrc_base->cs[CS0 ].mcfg); + timings.rfr_ctrl =readl (&sdrc_base->cs[CS0 ].rfr_ctrl); + timings.ctrla =readl (&sdrc_actim_base0->ctrla), + timings.ctrlb =readl (&sdrc_actim_base0->ctrlb); + timings.mr =readl (&sdrc_base->cs[CS0 ].mr); +write_sdrc_timings (cs, sdrc_actim_base1, &timings); } }
arch/arm/include/asm/arch-omap3/sys_proto.h +10 -2
@@ -32,6 +32,15 @@ struct emu_hal_params {u32 param1; }; +/* Board DRAM timing values */ +struct board_mem_timings { +u32 mcfg; +u32 ctrla; +u32 ctrlb; +u32 rfr_ctrl; +u32 mr; +}; +void prcm_init (void );void per_clocks_enable (void );void ehci_clocks_enable (void );
@@ -39,8 +48,7 @@ void ehci_clocks_enable(void);void memif_init (void );void sdrc_init (void );void do_sdrc_init (u32 ,u32 ); -void get_board_mem_timings (u32 *mcfg,u32 *ctrla,u32 *ctrlb,u32 *rfr_ctrl, -u32 *mr); +void get_board_mem_timings (struct board_mem_timings *timings);void identify_nand_chip (int *mfr,int *id);void emif4_init (void );void gpmc_init (void );
board/corscience/tricorder/tricorder.c +6 -7
@@ -91,15 +91,14 @@ int board_mmc_init(bd_t *bis)* provides the timing values back to the function that configures * the memory. We have either one or two banks of 128MB DDR. */ -void get_board_mem_timings (u32 *mcfg,u32 *ctrla,u32 *ctrlb,u32 *rfr_ctrl, -u32 *mr) +void get_board_mem_timings (struct board_mem_timings *timings) {/* General SDRC config */ - *mcfg =MICRON_V_MCFG_165 (128 <<20 ); - *rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz; + timings->mcfg =MICRON_V_MCFG_165 (128 <<20 ); + timings->rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz;/* AC timings */ - *ctrla =MICRON_V_ACTIMA_165 ; - *ctrlb =MICRON_V_ACTIMB_165 ; - *mr =MICRON_V_MR_165 ; + timings->ctrla =MICRON_V_ACTIMA_165 ; + timings->ctrlb =MICRON_V_ACTIMB_165 ; + timings->mr =MICRON_V_MR_165 ; }
board/overo/overo.c +18 -19
@@ -157,34 +157,33 @@ int get_board_revision(void)* Description: If we use SPL then there is no x-loader nor config header * so we have to setup the DDR timings ourself on both banks. */ -void get_board_mem_timings (u32 *mcfg,u32 *ctrla,u32 *ctrlb,u32 *rfr_ctrl, -u32 *mr) +void get_board_mem_timings (struct board_mem_timings *timings) { - *mr =MICRON_V_MR_165 ; + timings->mr =MICRON_V_MR_165 ;switch (get_board_revision ()) {case REVISION_0 :/* Micron 1286MB/256MB, 1/2 banks of 128MB */ - *mcfg =MICRON_V_MCFG_165 (128 <<20 ); - *ctrla =MICRON_V_ACTIMA_165 ; - *ctrlb =MICRON_V_ACTIMB_165 ; - *rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz; + timings->mcfg =MICRON_V_MCFG_165 (128 <<20 ); + timings->ctrla =MICRON_V_ACTIMA_165 ; + timings->ctrlb =MICRON_V_ACTIMB_165 ; + timings->rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz;break ;case REVISION_1 :/* Micron 256MB/512MB, 1/2 banks of 256MB */ - *mcfg =MICRON_V_MCFG_165 (256 <<20 ); - *ctrla =MICRON_V_ACTIMA_165 ; - *ctrlb =MICRON_V_ACTIMB_165 ; - *rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz; + timings->mcfg =MICRON_V_MCFG_165 (256 <<20 ); + timings->ctrla =MICRON_V_ACTIMA_165 ; + timings->ctrlb =MICRON_V_ACTIMB_165 ; + timings->rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz;break ;case REVISION_2 :/* Hynix 256MB/512MB, 1/2 banks of 256MB */ - *mcfg =HYNIX_V_MCFG_165 (256 <<20 ); - *ctrla =HYNIX_V_ACTIMA_165 ; - *ctrlb =HYNIX_V_ACTIMB_165 ; - *rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz; + timings->mcfg =HYNIX_V_MCFG_165 (256 <<20 ); + timings->ctrla =HYNIX_V_ACTIMA_165 ; + timings->ctrlb =HYNIX_V_ACTIMB_165 ; + timings->rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz;break ;default : - *mcfg =MICRON_V_MCFG_165 (128 <<20 ); - *ctrla =MICRON_V_ACTIMA_165 ; - *ctrlb =MICRON_V_ACTIMB_165 ; - *rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz; + timings->mcfg =MICRON_V_MCFG_165 (128 <<20 ); + timings->ctrla =MICRON_V_ACTIMA_165 ; + timings->ctrlb =MICRON_V_ACTIMB_165 ; + timings->rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz; } }#endif
board/ti/beagle/beagle.c +26 -27
87 lines not on this page · raw message
board/ti/evm/evm.c +9 -10
@@ -128,8 +128,7 @@ int board_init(void)* provides the timing values back to the function that configures * the memory. */ -void get_board_mem_timings (u32 *mcfg,u32 *ctrla,u32 *ctrlb,u32 *rfr_ctrl, -u32 *mr) +void get_board_mem_timings (struct board_mem_timings *timings) {int pop_mfr, pop_id;
@@ -142,17 +141,17 @@ void get_board_mem_timings(u32 *mcfg, u32 *ctrla, u32 *ctrlb, u32 *rfr_ctrl,if (pop_mfr ==NAND_MFR_HYNIX && pop_id ==0xbc ) {/* 256MB DDR */ - *mcfg =HYNIX_V_MCFG_200 (256 <<20 ); - *ctrla =HYNIX_V_ACTIMA_200 ; - *ctrlb =HYNIX_V_ACTIMB_200 ; + timings->mcfg =HYNIX_V_MCFG_200 (256 <<20 ); + timings->ctrla =HYNIX_V_ACTIMA_200 ; + timings->ctrlb =HYNIX_V_ACTIMB_200 ; }else {/* 128MB DDR */ - *mcfg =MICRON_V_MCFG_165 (128 <<20 ); - *ctrla =MICRON_V_ACTIMA_165 ; - *ctrlb =MICRON_V_ACTIMB_165 ; + timings->mcfg =MICRON_V_MCFG_165 (128 <<20 ); + timings->ctrla =MICRON_V_ACTIMA_165 ; + timings->ctrlb =MICRON_V_ACTIMB_165 ; } - *rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz; - *mr = MICRON_V_MR_165; + timings->rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz; + timings->mr = MICRON_V_MR_165; }#endif
board/timll/devkit8000/devkit8000.c +6 -7
@@ -151,16 +151,15 @@ int board_eth_init(bd_t *bis)* provides the timing values back to the function that configures * the memory. We have either one or two banks of 128MB DDR. */ -void get_board_mem_timings (u32 *mcfg,u32 *ctrla,u32 *ctrlb,u32 *rfr_ctrl, -u32 *mr) +void get_board_mem_timings (struct board_mem_timings *timings) {/* General SDRC config */ - *mcfg =MICRON_V_MCFG_165 (128 <<20 ); - *rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz; + timings->mcfg =MICRON_V_MCFG_165 (128 <<20 ); + timings->rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz;/* AC timings */ - *ctrla =MICRON_V_ACTIMA_165 ; - *ctrlb =MICRON_V_ACTIMB_165 ; + timings->ctrla =MICRON_V_ACTIMA_165 ; + timings->ctrlb =MICRON_V_ACTIMB_165 ; - *mr =MICRON_V_MR_165 ; + timings->mr =MICRON_V_MR_165 ; }
Signature · 1 line
1.7.1
PATCH 1/1 Pass timings structure pointer to board_get_mem_timings()
Hi Peter,
Good work! Thanks.
Quoted 6 lines · Peter Barada
Instead of passing individual registers by value to
board_get_mem_timings, pass aboard_mem_timingsstructure pointer for the board files to fill in. Pass same structure pointer towrite_sdrc_timings. This saves about 90 bytes of space in SPL.Signed-off-by Peter Barada <[email protected]>
Acked-by Igor Grinberg <[email protected]>
Signature · 2 lines
Regards, Igor.