summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPoonam Aggrwal <poonam.aggrwal@freescale.com>2009-10-07 15:47:47 -0400
committerJustin Waters <justin.waters@timesys.com>2009-10-07 15:47:47 -0400
commit6225e77f84d77a661222dbc2b1bcd6dbf0842d7a (patch)
treebdb8edf8f38ee15db6e6dd16a1cbfc8d426ff7f2
parent26dc95690b04b5c2032ce94b82a3002831639a8b (diff)
u-boot-2009.03-p2020rdb-SYSCLK-detected-from-GPIO10
SYSCLK getting detected from GPIO10 If GPIO10 = 0... SYSCLK = 66Mhz If GPIO10 = 1... SYSCLK = 50Mhz Board REV getting detected from GPIO11 If GPIO11 = 0... REV A board If GPIO11 = 1... REV B board. Signed-off-by: Poonam Aggrwal <poonam.aggrwal@freescale.com>
-rw-r--r--board/freescale/p10xx_p20xx_rdb/p10xx_p20xx_rdb.c35
-rw-r--r--include/configs/P10XX_20XX_RDB.h5
2 files changed, 36 insertions, 4 deletions
diff --git a/board/freescale/p10xx_p20xx_rdb/p10xx_p20xx_rdb.c b/board/freescale/p10xx_p20xx_rdb/p10xx_p20xx_rdb.c
index ad3cda1be8..bcd1ca90e0 100644
--- a/board/freescale/p10xx_p20xx_rdb/p10xx_p20xx_rdb.c
+++ b/board/freescale/p10xx_p20xx_rdb/p10xx_p20xx_rdb.c
@@ -45,10 +45,29 @@ extern void ddr_enable_ecc(unsigned int dram_size);
#define GPIO_DIR 0x060f0000
#define BOARD_PERI_RST 0x020f0000
#define USB_RST 0x08000000
+
+#define SYSCLK_MASK 0x00200000
+#define BOARDREV_MASK 0x00100000
+
+#define SYSCLK_66 66666666
+#define SYSCLK_50 50000000
DECLARE_GLOBAL_DATA_PTR;
phys_size_t fixed_sdram(void);
+unsigned long get_board_sys_clk(ulong dummy)
+{
+ volatile ccsr_gpio_t *pgpio = (void *)(CONFIG_SYS_MPC85xx_GPIO_ADDR);
+ u32 val, sysclk;
+
+ val = pgpio->gpdat;
+ sysclk = val & SYSCLK_MASK;
+ if(sysclk == 0)
+ return SYSCLK_66;
+ else
+ return SYSCLK_50;
+}
+
int board_early_init_f (void)
{
#ifdef CONFIG_MMC
@@ -63,10 +82,10 @@ int board_early_init_f (void)
int checkboard (void)
{
- u32 val;
+ unsigned long sysclk;
+ u32 val, temp;
volatile ccsr_gpio_t *pgpio = (void *)(CONFIG_SYS_MPC85xx_GPIO_ADDR);
- printf ("Board: %sRDB, System ID: 0x%02x, "
- "System Version: 0x%02x\n", gd->cpu->name, 0, 0);
+ char board_rev;
/* Bringing the following peripherals out of reset via GPIOs
* 0= reset and 1= out of reset
@@ -82,6 +101,15 @@ int checkboard (void)
setbits_be32(&pgpio->gpdir, GPIO_DIR);
val = pgpio->gpdat;
+ temp = val & BOARDREV_MASK;
+ if(temp == 0)
+ board_rev = 'A';
+ else
+ board_rev = 'B';
+
+ printf ("Board: %sRDB Rev%c, System ID: 0x%02x, "
+ "System Version: 0x%02x\n", gd->cpu->name, board_rev, 0, 0);
+
clrsetbits_be32(&pgpio->gpdat, USB_RST, BOARD_PERI_RST);
return 0;
@@ -433,3 +461,4 @@ void board_lmb_reserve(struct lmb *lmb)
cpu_mp_lmb_reserve(lmb);
}
#endif
+
diff --git a/include/configs/P10XX_20XX_RDB.h b/include/configs/P10XX_20XX_RDB.h
index 5b619ad854..6b09b46fde 100644
--- a/include/configs/P10XX_20XX_RDB.h
+++ b/include/configs/P10XX_20XX_RDB.h
@@ -61,7 +61,10 @@
#define CONFIG_SF_DEFAULT_SPEED 10000000
#define CONFIG_SF_DEFAULT_MODE 0
-#define CONFIG_SYS_CLK_FREQ 66666666 /* SYSCLK on P10xx_p20xx RDB */
+#ifndef __ASSEMBLY__
+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_DDR_CLK_FREQ 66666666 /* DDRCLK on P10xx_p20xx RDB */
/*