Add DDR2 controller fixed/SPD Init for MPC83xx
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH 3/3 Add DDR2 controller fixed/SPD Init for MPC83xx
The code supply fixed and SPD initialization for MPC83xx DDR2 Controller. it pass DDR/DDR2 compliance tests.
---
This patch applies to the mpc83xx branch of the opensource.freescale.com u-boot-83xx.git tree
board/mpc8349emds/mpc8349emds.c | 17 ++- board/mpc8360emds/mpc8360emds.c | 15 ++ cpu/mpc83xx/spd_sdram.c | 384 ++++++++++++++++++++++++++++++++------ 3 files changed, 354 insertions(+), 62 deletions(-)
board/mpc8349emds/mpc8349emds.c +16 -1
@@ -119,6 +119,20 @@ int fixed_sdram(void)#if (CFG_DDR_SIZE !=256 )#warning Currenly any ddr size other than 256 is not supported#endif +#ifdef CONFIG_DDR_II + im->ddr.csbnds[2 ].csbnds =CFG_DDR_CS2_BNDS ; + im->ddr.cs_config[2 ] =CFG_DDR_CS2_CONFIG ; + im->ddr.timing_cfg_0 =CFG_DDR_TIMING_0 ; + im->ddr.timing_cfg_1 =CFG_DDR_TIMING_1 ; + im->ddr.timing_cfg_2 =CFG_DDR_TIMING_2 ; + im->ddr.timing_cfg_3 =CFG_DDR_TIMING_3 ; + im->ddr.sdram_cfg =CFG_DDR_SDRAM_CFG ; + im->ddr.sdram_cfg2 =CFG_DDR_SDRAM_CFG2 ; + im->ddr.sdram_mode =CFG_DDR_MODE ; + im->ddr.sdram_mode2 =CFG_DDR_MODE2 ; + im->ddr.sdram_interval =CFG_DDR_INTERVAL ; + im->ddr.sdram_clk_cntl =CFG_DDR_CLK_CNTL ; +#else im->ddr.csbnds[2 ].csbnds =0x0000000f ; im->ddr.cs_config[2 ] =CFG_DDR_CONFIG ;
@@ -143,6 +157,7 @@ int fixed_sdram(void) im->ddr.sdram_mode =CFG_DDR_MODE ; im->ddr.sdram_interval =CFG_DDR_INTERVAL ; +#endif udelay (200 );/* enable DDR controller */
@@ -239,7 +254,7 @@ void sdram_init(void)#else void sdram_init (void ) { -put ("SDRAM on Local Bus is NOT available!\n" ); +puts (" SDRAM on Local Bus is NOT available!\n" ); }#endif
board/mpc8360emds/mpc8360emds.c +15 -0
@@ -158,6 +158,20 @@ int fixed_sdram(void)#if (CFG_DDR_SIZE !=256 )#warning Currenly any ddr size other than 256 is not supported#endif +#ifdef CONFIG_DDR_II + im->ddr.csbnds[0 ].csbnds =CFG_DDR_CS0_BNDS ; + im->ddr.cs_config[0 ] =CFG_DDR_CS0_CONFIG ; + im->ddr.timing_cfg_0 =CFG_DDR_TIMING_0 ; + im->ddr.timing_cfg_1 =CFG_DDR_TIMING_1 ; + im->ddr.timing_cfg_2 =CFG_DDR_TIMING_2 ; + im->ddr.timing_cfg_3 =CFG_DDR_TIMING_3 ; + im->ddr.sdram_cfg =CFG_DDR_SDRAM_CFG ; + im->ddr.sdram_cfg2 =CFG_DDR_SDRAM_CFG2 ; + im->ddr.sdram_mode =CFG_DDR_MODE ; + im->ddr.sdram_mode2 =CFG_DDR_MODE2 ; + im->ddr.sdram_interval =CFG_DDR_INTERVAL ; + im->ddr.sdram_clk_cntl =CFG_DDR_CLK_CNTL ; +#else im->ddr.csbnds[0 ].csbnds =0x00000007 ; im->ddr.csbnds[1 ].csbnds =0x0008000f ;
@@ -170,6 +184,7 @@ int fixed_sdram(void) im->ddr.sdram_mode =CFG_DDR_MODE ; im->ddr.sdram_interval =CFG_DDR_INTERVAL ; +#endif udelay (200 ); im->ddr.sdram_cfg |=SDRAM_CFG_MEM_EN ;
cpu/mpc83xx/spd_sdram.c +323 -61
540 lines not on this page · raw message
Signature · 1 line
1.4.4.1
PATCH 1/1 Fix two bugs for MPC83xx DDR2 controller SPD Init
There are a few bugs in the cpu/mpc83xx/spd_sdram.c the first bug is that the picos_to_clk routine introduces a huge rounding error in 83xx.
the second bug is that the mode register write recovery field is tWR-1, not tWR >> 1.
---
This patch applies to the mpc83xx branch of the opensource.freescale.com u-boot-83xx.git tree
cpu/mpc83xx/spd_sdram.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-)
cpu/mpc83xx/spd_sdram.c +3 -3
@@ -58,8 +58,8 @@ picos_to_clk(int picos)int clks; ddr_bus_clk = gd->ddr_clk >>1 ; - clks = picos / ((1000000000 / ddr_bus_clk) *1000 ); -if (picos % ((1000000000 / ddr_bus_clk) *1000 ) !=0 ) + clks = picos / (1000000000 / (ddr_bus_clk /1000 )); +if (picos % (1000000000 / (ddr_bus_clk /1000 )) !=0 ) clks++;return clks;
@@ -624,7 +624,7 @@ long int spd_sdram() | (1 << (16 + 10)) /* DQS Differential disable */ | (add_lat << (16 +3 ))/* Additive Latency in EMRS1 */ | (mode_odt_enable <<16 )/* ODT Enable in EMRS1 */ - | ((twr_clk >>1 ) <<9 )/* Write Recovery Autopre */ + | ((twr_clk -1 ) <<9 )/* Write Recovery Autopre */ | (caslat <<4 )/* caslat */ | (burstlen <<0 )/* Burst length */ );
Signature · 1 line
1.4.4.1