X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=board%2Fhighbank%2Fhighbank.c;h=f41bf05a518c1da4b2134639b67f2cfb1e33c72f;hb=9c471142bc6c5aa01532ba85ead8509bbf2eb153;hp=8db8a2bb2c1ca9f1ee7366bba5bcf7d9d4151261;hpb=37fc0ed268dc5acacd3a83adafa26eb1a84e90af;p=u-boot diff --git a/board/highbank/highbank.c b/board/highbank/highbank.c index 8db8a2bb2c..f41bf05a51 100644 --- a/board/highbank/highbank.c +++ b/board/highbank/highbank.c @@ -17,9 +17,18 @@ #include #include +#include #include #include +#include + +#define HB_SREG_A9_PWR_REQ 0xfff3cf00 +#define HB_SREG_A9_BOOT_SRC_STAT 0xfff3cf04 +#define HB_PWR_SUSPEND 0 +#define HB_PWR_SOFT_RESET 1 +#define HB_PWR_HARD_RESET 2 +#define HB_PWR_SHUTDOWN 3 DECLARE_GLOBAL_DATA_PTR; @@ -33,10 +42,34 @@ int board_init(void) return 0; } +/* We know all the init functions have been run now */ +int board_eth_init(bd_t *bis) +{ + int rc = 0; + +#ifdef CONFIG_CALXEDA_XGMAC + rc += calxedaxgmac_initialize(0, 0xfff50000); + rc += calxedaxgmac_initialize(1, 0xfff51000); +#endif + return rc; +} + int misc_init_r(void) { + char envbuffer[16]; + u32 boot_choice; + ahci_init(0xffe08000); scsi_scan(1); + + boot_choice = readl(HB_SREG_A9_BOOT_SRC_STAT) & 0xff; + sprintf(envbuffer, "bootcmd%d", boot_choice); + if (getenv(envbuffer)) { + sprintf(envbuffer, "run bootcmd%d", boot_choice); + setenv("bootcmd", envbuffer); + } else + setenv("bootcmd", ""); + return 0; } @@ -54,4 +87,6 @@ void dram_init_banksize(void) void reset_cpu(ulong addr) { + writel(HB_PWR_HARD_RESET, HB_SREG_A9_PWR_REQ); + asm(" wfi"); }