Blackfin arch: Fix Bug - Kernel does not boot if re-program clocks
On BF561 EBIU_SDGCTL bit 31 controls the SDRAM external data path width, typically set 0 for a 32-bit bus width. On other Blackfin derivatives this bit should be set by default. Signed-off-by: Michael Hennerich <michael.hennerich@analog.com> Signed-off-by: Bryan Wu <cooloney@kernel.org>
This commit is contained in:
committed by
Bryan Wu
parent
41245ac595
commit
331693129d
@@ -115,7 +115,7 @@
|
|||||||
#define mem_SDRRC (((CONFIG_SCLK_HZ / 1000) * SDRAM_Tref) / SDRAM_NRA) - (SDRAM_tRAS_num + SDRAM_tRP_num)
|
#define mem_SDRRC (((CONFIG_SCLK_HZ / 1000) * SDRAM_Tref) / SDRAM_NRA) - (SDRAM_tRAS_num + SDRAM_tRP_num)
|
||||||
|
|
||||||
/* Enable SCLK Out */
|
/* Enable SCLK Out */
|
||||||
#define mem_SDGCTL (0x80000000 | SCTLE | SDRAM_CL | SDRAM_tRAS | SDRAM_tRP | SDRAM_tRCD | SDRAM_tWR | PSS)
|
#define mem_SDGCTL (SCTLE | SDRAM_CL | SDRAM_tRAS | SDRAM_tRP | SDRAM_tRCD | SDRAM_tWR | PSS)
|
||||||
#else
|
#else
|
||||||
#define mem_SDRRC CONFIG_MEM_SDRRC
|
#define mem_SDRRC CONFIG_MEM_SDRRC
|
||||||
#define mem_SDGCTL CONFIG_MEM_SDGCTL
|
#define mem_SDGCTL CONFIG_MEM_SDGCTL
|
||||||
|
@@ -14,6 +14,7 @@
|
|||||||
#include <asm/clocks.h>
|
#include <asm/clocks.h>
|
||||||
#include <asm/mem_init.h>
|
#include <asm/mem_init.h>
|
||||||
|
|
||||||
|
#define SDGCTL_WIDTH (1 << 31) /* SDRAM external data path width */
|
||||||
#define PLL_CTL_VAL \
|
#define PLL_CTL_VAL \
|
||||||
(((CONFIG_VCO_MULT & 63) << 9) | CLKIN_HALF | \
|
(((CONFIG_VCO_MULT & 63) << 9) | CLKIN_HALF | \
|
||||||
(PLL_BYPASS << 8) | (ANOMALY_05000265 ? 0x8000 : 0))
|
(PLL_BYPASS << 8) | (ANOMALY_05000265 ? 0x8000 : 0))
|
||||||
@@ -76,7 +77,7 @@ void init_clocks(void)
|
|||||||
bfin_write_PLL_DIV(CONFIG_CCLK_ACT_DIV | CONFIG_SCLK_DIV);
|
bfin_write_PLL_DIV(CONFIG_CCLK_ACT_DIV | CONFIG_SCLK_DIV);
|
||||||
#ifdef EBIU_SDGCTL
|
#ifdef EBIU_SDGCTL
|
||||||
bfin_write_EBIU_SDRRC(mem_SDRRC);
|
bfin_write_EBIU_SDRRC(mem_SDRRC);
|
||||||
bfin_write_EBIU_SDGCTL(mem_SDGCTL);
|
bfin_write_EBIU_SDGCTL((bfin_read_EBIU_SDGCTL() & SDGCTL_WIDTH) | mem_SDGCTL);
|
||||||
#else
|
#else
|
||||||
bfin_write_EBIU_RSTCTL(bfin_read_EBIU_RSTCTL() & ~(SRREQ));
|
bfin_write_EBIU_RSTCTL(bfin_read_EBIU_RSTCTL() & ~(SRREQ));
|
||||||
do_sync();
|
do_sync();
|
||||||
|
Reference in New Issue
Block a user