summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPoonam Aggrwal <poonam.aggrwal@freescale.com>2009-06-01 12:34:49 +0530
committerJustin Waters <justin.waters@timesys.com>2009-10-07 15:47:49 -0400
commit0c90bde2af020d34c466296df7b8a2a48d230e7e (patch)
tree224112890fe0610036a9478d8f7d595fc667d488
parentdc89a49f05650be605fb5bd134eedcf5224fc689 (diff)
NAND boot changes for P2020RDB RevB. Mainly related to DDR size, DDR configuration and SYSCLK values.
Signed-off-by: Poonam Aggrwal <poonam.aggrwal@freescale.com>
-rw-r--r--board/freescale/p10xx_p20xx_rdb/p10xx_p20xx_rdb.c40
-rw-r--r--include/configs/P10XX_20XX_RDB.h3
-rw-r--r--nand_spl/board/freescale/p10xx_p20xx_rdb/nand_boot.c123
-rw-r--r--nand_spl/board/freescale/p10xx_p20xx_rdb/start.S2
4 files changed, 97 insertions, 71 deletions
diff --git a/board/freescale/p10xx_p20xx_rdb/p10xx_p20xx_rdb.c b/board/freescale/p10xx_p20xx_rdb/p10xx_p20xx_rdb.c
index 5225d136ea..e9df145a34 100644
--- a/board/freescale/p10xx_p20xx_rdb/p10xx_p20xx_rdb.c
+++ b/board/freescale/p10xx_p20xx_rdb/p10xx_p20xx_rdb.c
@@ -68,6 +68,28 @@ unsigned long get_board_sys_clk(ulong dummy)
return SYSCLK_50;
}
+unsigned long get_board_ddr_size(ulong dummy)
+{
+ volatile ccsr_gpio_t *pgpio = (void *)(CONFIG_SYS_MPC85xx_GPIO_ADDR);
+ u32 val, temp;
+ unsigned int ddr_size;
+
+ val = pgpio->gpdat;
+ temp = val & BOARDREV_MASK;
+
+ if(gd->cpu->soc_ver == SVR_P1020 ||
+ gd->cpu->soc_ver == SVR_P1020_E)
+ ddr_size = 256 * 1024 * 1024;
+ if(gd->cpu->soc_ver == SVR_P2020 ||
+ gd->cpu->soc_ver == SVR_P2020_E) {
+ if(temp == 0)
+ ddr_size = 512 * 1024 * 1024;
+ else
+ ddr_size = 1024 * 1024 * 1024;
+ }
+ return ddr_size;
+}
+
int board_early_init_f (void)
{
#ifdef CONFIG_MMC
@@ -122,7 +144,7 @@ phys_size_t initdram(int board_type)
puts("Initializing....");
#if defined(CONFIG_SDCARD_U_BOOT) || defined(CONFIG_NAND_U_BOOT)
- return CONFIG_SYS_SDRAM_SIZE * 1024 * 1024;
+ return CONFIG_SYS_SDRAM_SIZE;
#endif
#ifdef CONFIG_DDR_SPD
@@ -156,7 +178,6 @@ phys_size_t fixed_sdram (void)
int d_init, dbw;
u32 val, temp;
volatile ccsr_gpio_t *pgpio = (void *)(CONFIG_SYS_MPC85xx_GPIO_ADDR);
- unsigned int ddr_size;
sys_info_t sysinfo;
ddr->cs0_bnds = CONFIG_SYS_DDR_CS0_BNDS;
@@ -173,16 +194,7 @@ phys_size_t fixed_sdram (void)
val = pgpio->gpdat;
temp = val & BOARDREV_MASK;
get_sys_info(&sysinfo);
- if(gd->cpu->soc_ver == SVR_P1020 ||
- gd->cpu->soc_ver == SVR_P1020_E)
- ddr_size = 256 * 1024 * 1024;
- if(gd->cpu->soc_ver == SVR_P2020 ||
- gd->cpu->soc_ver == SVR_P2020_E) {
- if(temp == 0)
- ddr_size = 512 * 1024 * 1024;
- else
- ddr_size = 1024 * 1024 * 1024;
- }
+
if(temp == 0) {
/* Rev A board*/
printf("configuring for Board REVA, freqDDR%d\n",\
@@ -219,7 +231,6 @@ phys_size_t fixed_sdram (void)
else if(sysinfo.freqDDRBus <= 534000000) {
printf("configuring for Board REVB, freqDDR%d\n", \
sysinfo.freqDDRBus);
- ddr_size = 1024 *1024 *1024;
ddr->timing_cfg_3 = CONFIG_SYS_DDR_TIMING_3_533_REVB;
ddr->timing_cfg_0 = CONFIG_SYS_DDR_TIMING_0_533_REVB;
ddr->timing_cfg_1 = CONFIG_SYS_DDR_TIMING_1_533_REVB;
@@ -236,7 +247,6 @@ phys_size_t fixed_sdram (void)
else if(sysinfo.freqDDRBus <= 667000000) {
printf("configuring for Board REVB, freqDDR%d\n",\
sysinfo.freqDDRBus);
- ddr_size = 1024 *1024 *1024;
ddr->timing_cfg_3 = CONFIG_SYS_DDR_TIMING_3_667_REVB;
ddr->timing_cfg_0 = CONFIG_SYS_DDR_TIMING_0_667_REVB;
ddr->timing_cfg_1 = CONFIG_SYS_DDR_TIMING_1_667_REVB;
@@ -303,7 +313,7 @@ phys_size_t fixed_sdram (void)
udelay(500);
#endif
- return ddr_size;
+ return CONFIG_SYS_SDRAM_SIZE;
}
#endif
diff --git a/include/configs/P10XX_20XX_RDB.h b/include/configs/P10XX_20XX_RDB.h
index 9481010366..5ec8e3969e 100644
--- a/include/configs/P10XX_20XX_RDB.h
+++ b/include/configs/P10XX_20XX_RDB.h
@@ -65,6 +65,7 @@
extern unsigned long get_board_sys_clk(unsigned long dummy);
#endif
#define CONFIG_SYS_CLK_FREQ get_board_sys_clk(0) /*sysclk for P10xx20xxRDB */
+//#define CONFIG_SYS_CLK_FREQ 66666666 /*sysclk for P10xx20xxRDB */
#define CONFIG_DDR_CLK_FREQ 66666666 /* DDRCLK on P10xx_p20xx RDB */
/*
@@ -112,7 +113,7 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);
#define CONFIG_MEM_INIT_VALUE 0xDeadBeef
-#define CONFIG_SYS_SDRAM_SIZE 512
+#define CONFIG_SYS_SDRAM_SIZE get_board_ddr_size(0)
#define CONFIG_SYS_DDR_SDRAM_BASE 0x00000000
#define CONFIG_SYS_SDRAM_BASE CONFIG_SYS_DDR_SDRAM_BASE
diff --git a/nand_spl/board/freescale/p10xx_p20xx_rdb/nand_boot.c b/nand_spl/board/freescale/p10xx_p20xx_rdb/nand_boot.c
index 7e078b4b17..828bd29804 100644
--- a/nand_spl/board/freescale/p10xx_p20xx_rdb/nand_boot.c
+++ b/nand_spl/board/freescale/p10xx_p20xx_rdb/nand_boot.c
@@ -28,33 +28,72 @@
#define udelay(x) {int i, j; for (i = 0; i < x; i++) for (j = 0; j < 10000; j++); }
+#define BOARDREV_MASK 0x00100000
+
void initsdram(void)
{
- volatile ccsr_ddr_t *ddr = (void *)(CONFIG_SYS_MPC85xx_DDR_ADDR);
-
- out_be32(&ddr->cs0_bnds, CONFIG_SYS_DDR_CS0_BNDS);
- out_be32(&ddr->cs0_config, CONFIG_SYS_DDR_CS0_CONFIG);
-
- out_be32(&ddr->timing_cfg_3, CONFIG_SYS_DDR_TIMING_3_REVA);
- out_be32(&ddr->timing_cfg_0, CONFIG_SYS_DDR_TIMING_0_REVA);
- out_be32(&ddr->timing_cfg_1, CONFIG_SYS_DDR_TIMING_1_REVA);
- out_be32(&ddr->timing_cfg_2, CONFIG_SYS_DDR_TIMING_2_REVA);
- out_be32(&ddr->sdram_mode, CONFIG_SYS_DDR_MODE_1_REVA);
- out_be32(&ddr->sdram_mode_2, CONFIG_SYS_DDR_MODE_2_REVA);
- out_be32(&ddr->sdram_interval, CONFIG_SYS_DDR_INTERVAL_REVA);
- out_be32(&ddr->sdram_data_init, CONFIG_SYS_DDR_DATA_INIT);
- out_be32(&ddr->sdram_clk_cntl, CONFIG_SYS_DDR_CLK_CTRL_REVA);
- out_be32(&ddr->sdram_cfg_2, CONFIG_SYS_DDR_CONTROL2_REVA);
-
-#if defined(CONFIG_DDR_ECC)
- out_be32(&ddr->err_int_en, CONFIG_SYS_DDR_ERR_INT_EN);
- out_be32(&ddr->err_disable, CONFIG_SYS_DDR_ERR_DIS);
- out_be32(&ddr->err_sbe, CONFIG_SYS_DDR_SBE);
+
+ volatile ccsr_ddr_t *ddr= (ccsr_ddr_t *)CONFIG_SYS_MPC85xx_DDR_ADDR;
+ int d_init, dbw;
+ u32 val, temp;
+ volatile ccsr_gpio_t *pgpio = (void *)(CONFIG_SYS_MPC85xx_GPIO_ADDR);
+ unsigned int ddr_size;
+ sys_info_t sysinfo;
+
+ ddr->cs0_bnds = CONFIG_SYS_DDR_CS0_BNDS;
+ ddr->cs0_config = CONFIG_SYS_DDR_CS0_CONFIG;
+ ddr->cs0_config_2 = CONFIG_SYS_DDR_CS0_CONFIG_2;
+ ddr->sdram_data_init = CONFIG_SYS_DDR_DATA_INIT;
+
+ /* On P2020/P1020 RDB boards DDR size varies as follows:
+ * REV A board (512MB P2020 and 256MB P1020)
+ * REV B board (1GB P2020 and 256MB P1020)
+ * FIXME:: must also program cs0_bnds register accordingly.
+ * currently CSO_BNDS is programmed for 1G.
+ */
+ val = pgpio->gpdat;
+ temp = val & BOARDREV_MASK;
+ if(temp == 0) {
+ /* Rev A board*/
+ ddr->timing_cfg_3 = CONFIG_SYS_DDR_TIMING_3_REVA;
+ ddr->timing_cfg_0 = CONFIG_SYS_DDR_TIMING_0_REVA;
+ ddr->timing_cfg_1 = CONFIG_SYS_DDR_TIMING_1_REVA;
+ ddr->timing_cfg_2 = CONFIG_SYS_DDR_TIMING_2_REVA;
+ ddr->timing_cfg_4 = CONFIG_SYS_DDR_TIMING_4_REVA;
+ ddr->timing_cfg_5 = CONFIG_SYS_DDR_TIMING_5_REVA;
+ ddr->sdram_mode = CONFIG_SYS_DDR_MODE_1_REVA;
+ ddr->sdram_mode_2 = CONFIG_SYS_DDR_MODE_2_REVA;
+ ddr->sdram_interval = CONFIG_SYS_DDR_INTERVAL_REVA;
+ ddr->sdram_clk_cntl = CONFIG_SYS_DDR_CLK_CTRL_REVA;
+ ddr->sdram_cfg = CONFIG_SYS_DDR_CONTROL_REVA;
+ ddr->sdram_cfg_2 = CONFIG_SYS_DDR_CONTROL2_REVA;
+ }
+ else {
+ ddr->timing_cfg_3 = CONFIG_SYS_DDR_TIMING_3_667_REVB;
+ ddr->timing_cfg_0 = CONFIG_SYS_DDR_TIMING_0_667_REVB;
+ ddr->timing_cfg_1 = CONFIG_SYS_DDR_TIMING_1_667_REVB;
+ ddr->timing_cfg_2 = CONFIG_SYS_DDR_TIMING_2_667_REVB;
+ ddr->timing_cfg_4 = CONFIG_SYS_DDR_TIMING_4_667_REVB;
+ ddr->timing_cfg_5 = CONFIG_SYS_DDR_TIMING_5_667_REVB;
+ ddr->sdram_mode = CONFIG_SYS_DDR_MODE_1_667_REVB;
+ ddr->sdram_mode_2 = CONFIG_SYS_DDR_MODE_2_667_REVB;
+ ddr->sdram_interval = CONFIG_SYS_DDR_INTERVAL_667_REVB;
+ ddr->sdram_clk_cntl = CONFIG_SYS_DDR_CLK_CTRL_667_REVB;
+ ddr->sdram_cfg = CONFIG_SYS_DDR_CONTROL_667_REVB;
+ ddr->sdram_cfg_2 = CONFIG_SYS_DDR_CONTROL2_667_REVB;
+ }
+
+#if defined (CONFIG_DDR_ECC)
+ ddr->err_int_en = CONFIG_SYS_DDR_ERR_INT_EN;
+ ddr->err_disable = CONFIG_SYS_DDR_ERR_DIS;
+ ddr->err_sbe = CONFIG_SYS_DDR_SBE;
#endif
asm("sync;isync");
- udelay(200);
- out_be32(&ddr->sdram_cfg, CONFIG_SYS_DDR_CONTROL_REVA);
+ udelay(500);
+
+ ddr->sdram_cfg |= 0x80000000;
+
}
void board_init_f_nand(void)
@@ -62,40 +101,16 @@ void board_init_f_nand(void)
u8 sysclk_ratio;
uint plat_ratio, bus_clk, sys_clk;
volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
+ u32 val, temp;
+ volatile ccsr_gpio_t *pgpio = (void *)(CONFIG_SYS_MPC85xx_GPIO_ADDR);
/* initialize selected port with appropriate baud rate */
-#if 0
- sysclk_ratio = *((volatile unsigned char *)(PIXIS_BASE + PIXIS_SPD));
- sysclk_ratio &= 0x7;
- switch (sysclk_ratio) {
- case 0:
- sys_clk = 33333000;
- break;
- case 1:
- sys_clk = 39999600;
- break;
- case 2:
- sys_clk = 49999500;
- break;
- case 3:
- sys_clk = 66666000;
- break;
- case 4:
- sys_clk = 83332500;
- break;
- case 5:
- sys_clk = 99999000;
- break;
- case 6:
- sys_clk = 133332000;
- break;
- case 7:
- sys_clk = 166665000;
- break;
- }
-#endif
-
- sys_clk = 66666000;
+ val = pgpio->gpdat;
+ temp = val & BOARDREV_MASK;
+ if(temp == 0)
+ sys_clk = 66666666;
+ else
+ sys_clk = 50000000;
plat_ratio = (gur->porpllsr) & 0x0000003e;
plat_ratio >>= 1;
bus_clk = plat_ratio * sys_clk;
diff --git a/nand_spl/board/freescale/p10xx_p20xx_rdb/start.S b/nand_spl/board/freescale/p10xx_p20xx_rdb/start.S
index d392f3e564..6b1f27646e 100644
--- a/nand_spl/board/freescale/p10xx_p20xx_rdb/start.S
+++ b/nand_spl/board/freescale/p10xx_p20xx_rdb/start.S
@@ -327,7 +327,7 @@ law_entry:
.long (law_end-law_start)/8
law_start:
.long 0
- .long LAWAR_EN | LAWAR_TRGT_IF_DDR1 | (LAWAR_SIZE & LAWAR_SIZE_512M)
+ .long LAWAR_EN | LAWAR_TRGT_IF_DDR1 | (LAWAR_SIZE & LAWAR_SIZE_1G)
/* placeholder for LAWAR_TRGT_IF_DDR2 */
.long 0