mx28: Let imx_get_mac_from_fuse be common for mx28
Let imx_get_mac_from_fuse function be a common function, so that other mx28 boards can reuse it. Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com> Acked-by: Marek Vasut <marek.vasut@gmail.com> Acked-by: Stefano Babic <sbabic@denx.de>
This commit is contained in:
parent
be252b654a
commit
5cb525f3d2
|
@ -214,6 +214,52 @@ int cpu_eth_init(bd_t *bis)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static void __mx28_adjust_mac(int dev_id, unsigned char *mac)
|
||||||
|
{
|
||||||
|
mac[0] = 0x00;
|
||||||
|
mac[1] = 0x04; /* Use FSL vendor MAC address by default */
|
||||||
|
|
||||||
|
if (dev_id == 1) /* Let MAC1 be MAC0 + 1 by default */
|
||||||
|
mac[5] += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mx28_adjust_mac(int dev_id, unsigned char *mac)
|
||||||
|
__attribute__((weak, alias("__mx28_adjust_mac")));
|
||||||
|
|
||||||
|
#ifdef CONFIG_MX28_FEC_MAC_IN_OCOTP
|
||||||
|
|
||||||
|
#define MXS_OCOTP_MAX_TIMEOUT 1000000
|
||||||
|
void imx_get_mac_from_fuse(int dev_id, unsigned char *mac)
|
||||||
|
{
|
||||||
|
struct mx28_ocotp_regs *ocotp_regs =
|
||||||
|
(struct mx28_ocotp_regs *)MXS_OCOTP_BASE;
|
||||||
|
uint32_t data;
|
||||||
|
|
||||||
|
memset(mac, 0, 6);
|
||||||
|
|
||||||
|
writel(OCOTP_CTRL_RD_BANK_OPEN, &ocotp_regs->hw_ocotp_ctrl_set);
|
||||||
|
|
||||||
|
if (mx28_wait_mask_clr(&ocotp_regs->hw_ocotp_ctrl_reg, OCOTP_CTRL_BUSY,
|
||||||
|
MXS_OCOTP_MAX_TIMEOUT)) {
|
||||||
|
printf("MXS FEC: Can't get MAC from OCOTP\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
data = readl(&ocotp_regs->hw_ocotp_cust0);
|
||||||
|
|
||||||
|
mac[2] = (data >> 24) & 0xff;
|
||||||
|
mac[3] = (data >> 16) & 0xff;
|
||||||
|
mac[4] = (data >> 8) & 0xff;
|
||||||
|
mac[5] = data & 0xff;
|
||||||
|
mx28_adjust_mac(dev_id, mac);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
void imx_get_mac_from_fuse(int dev_id, unsigned char *mac)
|
||||||
|
{
|
||||||
|
memset(mac, 0, 6);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
U_BOOT_CMD(
|
U_BOOT_CMD(
|
||||||
clocks, CONFIG_SYS_MAXARGS, 1, do_mx28_showclocks,
|
clocks, CONFIG_SYS_MAXARGS, 1, do_mx28_showclocks,
|
||||||
"display clocks",
|
"display clocks",
|
||||||
|
|
|
@ -178,39 +178,4 @@ int board_eth_init(bd_t *bis)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_M28_FEC_MAC_IN_OCOTP
|
|
||||||
|
|
||||||
#define MXS_OCOTP_MAX_TIMEOUT 1000000
|
|
||||||
void imx_get_mac_from_fuse(int dev_id, char *mac)
|
|
||||||
{
|
|
||||||
struct mx28_ocotp_regs *ocotp_regs =
|
|
||||||
(struct mx28_ocotp_regs *)MXS_OCOTP_BASE;
|
|
||||||
uint32_t data;
|
|
||||||
|
|
||||||
memset(mac, 0, 6);
|
|
||||||
|
|
||||||
writel(OCOTP_CTRL_RD_BANK_OPEN, &ocotp_regs->hw_ocotp_ctrl_set);
|
|
||||||
|
|
||||||
if (mx28_wait_mask_clr(&ocotp_regs->hw_ocotp_ctrl_reg, OCOTP_CTRL_BUSY,
|
|
||||||
MXS_OCOTP_MAX_TIMEOUT)) {
|
|
||||||
printf("MXS FEC: Can't get MAC from OCOTP\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
data = readl(&ocotp_regs->hw_ocotp_cust0);
|
|
||||||
|
|
||||||
mac[0] = 0x00;
|
|
||||||
mac[1] = 0x04;
|
|
||||||
mac[2] = (data >> 24) & 0xff;
|
|
||||||
mac[3] = (data >> 16) & 0xff;
|
|
||||||
mac[4] = (data >> 8) & 0xff;
|
|
||||||
mac[5] = data & 0xff;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
void imx_get_mac_from_fuse(int dev_id, char *mac)
|
|
||||||
{
|
|
||||||
memset(mac, 0, 6);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue