
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
Changes since v7:
- Use unsigned char instead of char
Changes since v6:
- Let mac[5] be set inside mx28_adjust_mac
Changes since v5:
- Allow the MAC vendor to be overriden
Changes since v4:
- No changes
Change since v3:
- Add a note about the first two MAC addresses being from Freescale vendor.
arch/arm/cpu/arm926ejs/mx28/mx28.c | 46 ++++++++++++++++++++++++++++++++++++ board/denx/m28evk/m28evk.c | 35 --------------------------- 2 files changed, 46 insertions(+), 35 deletions(-)
diff --git a/arch/arm/cpu/arm926ejs/mx28/mx28.c b/arch/arm/cpu/arm926ejs/mx28/mx28.c index 088c019..ee4e337 100644 --- a/arch/arm/cpu/arm926ejs/mx28/mx28.c +++ b/arch/arm/cpu/arm926ejs/mx28/mx28.c @@ -214,6 +214,52 @@ int cpu_eth_init(bd_t *bis) } #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( clocks, CONFIG_SYS_MAXARGS, 1, do_mx28_showclocks, "display clocks", diff --git a/board/denx/m28evk/m28evk.c b/board/denx/m28evk/m28evk.c index a0fabc0..005446a 100644 --- a/board/denx/m28evk/m28evk.c +++ b/board/denx/m28evk/m28evk.c @@ -178,39 +178,4 @@ int board_eth_init(bd_t *bis) 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
Acked-by: Marek Vasut marek.vasut@gmail.com