diff options
author | Poonam Aggrwal <poonam.aggrwal@freescale.com> | 2009-10-07 15:47:47 -0400 |
---|---|---|
committer | Justin Waters <justin.waters@timesys.com> | 2009-10-07 15:47:47 -0400 |
commit | 6225e77f84d77a661222dbc2b1bcd6dbf0842d7a (patch) | |
tree | bdb8edf8f38ee15db6e6dd16a1cbfc8d426ff7f2 | |
parent | 26dc95690b04b5c2032ce94b82a3002831639a8b (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.c | 35 | ||||
-rw-r--r-- | include/configs/P10XX_20XX_RDB.h | 5 |
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 */ /* |