diff options
-rw-r--r-- | board/sunxi/board.c | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/board/sunxi/board.c b/board/sunxi/board.c index 302a72443b..8e05bc9f4b 100644 --- a/board/sunxi/board.c +++ b/board/sunxi/board.c @@ -604,9 +604,45 @@ int last_stage_init(void) int misc_init_r(void) { char serial_string[17] = { 0 }; - unsigned int sid[4]; uint8_t mac_addr[6]; int ret; +#ifdef CONFIG_SUNXI_PANGOLIN + struct mmc *mmc0; + struct sunxi_mmc_host { + unsigned mmc_no; + uint32_t *mclkreg; + unsigned fatal_err; + struct sunxi_mmc *reg; + struct mmc_config cfg; + }; + + mmc0 = find_mmc_device(1); + + struct sunxi_mmc_host *mmchost = mmc0->priv; + /* lookup the real device number to get the eMMC */ + if(mmchost->mmc_no != 2) + mmc0 = find_mmc_device(0); + + if(mmc0->has_init==0) + mmc_init(mmc0); + + if (!getenv("ethaddr")) { + /* Non OUI / registered MAC address */ + mac_addr[0] = 0x02; + mac_addr[1] = (mmc0->cid[0] >> 24) & 0xff; + mac_addr[2] = (mmc0->cid[2] >> 0) & 0xff; + mac_addr[3] = (mmc0->cid[3] >> 24) & 0xff; + mac_addr[4] = (mmc0->cid[3] >> 16) & 0xff; + mac_addr[5] = (mmc0->cid[3] >> 8) & 0xff; + + eth_setenv_enetaddr("ethaddr", mac_addr); + } + + snprintf(serial_string, sizeof(serial_string), "%08x%02x%06x", + mmc0->cid[0]>>24,mmc0->cid[2]&0xff,mmc0->cid[3]>>8); + setenv("serial#", serial_string); +#else + unsigned int sid[4]; ret = sunxi_get_sid(sid); if (ret == 0 && sid[0] != 0 && sid[3] != 0) { @@ -629,7 +665,7 @@ int misc_init_r(void) setenv("serial#", serial_string); } } - +#endif #ifndef CONFIG_MACH_SUN9I ret = sunxi_usb_phy_probe(); if (ret) |