The patch is to support getting FEC MAC address from fuse bank. Signed-off-by: Jason Liu <r64...@freescale.com>
--- Changes for v2: - correct the mac address byte order according to review comments - add memset(edev, 0. sizeof(*edev)) when do fec_probe, - fix some code comments --- arch/arm/include/asm/arch-mx25/imx-regs.h | 10 +++------- arch/arm/include/asm/arch-mx27/imx-regs.h | 5 ++--- arch/arm/include/asm/arch-mx5/imx-regs.h | 24 ++++++++++++++++++++++++ drivers/net/fec_mxc.c | 16 ++++++---------- 4 files changed, 35 insertions(+), 20 deletions(-) diff --git a/arch/arm/include/asm/arch-mx25/imx-regs.h b/arch/arm/include/asm/arch-mx25/imx-regs.h index f5a2929..6afcfdf 100644 --- a/arch/arm/include/asm/arch-mx25/imx-regs.h +++ b/arch/arm/include/asm/arch-mx25/imx-regs.h @@ -128,12 +128,8 @@ struct iim_regs { u32 iim_prev; u32 iim_srev; u32 iim_prog_p; - u32 res1[0x1f5]; - u32 iim_bank_area0[0x20]; - u32 res2[0xe0]; - u32 iim_bank_area1[0x20]; - u32 res3[0xe0]; - u32 iim_bank_area2[0x20]; + u32 res[0x1f5]; + u32 iim_bank_area[0x100 * 3]; }; #endif @@ -313,6 +309,6 @@ struct iim_regs { #define WSR_UNLOCK2 0xAAAA /* FUSE bank offsets */ -#define IIM0_MAC 0x1a +#define IIM_MAC 0x1a #endif /* _IMX_REGS_H */ diff --git a/arch/arm/include/asm/arch-mx27/imx-regs.h b/arch/arm/include/asm/arch-mx27/imx-regs.h index 6ecddaa..429f893 100644 --- a/arch/arm/include/asm/arch-mx27/imx-regs.h +++ b/arch/arm/include/asm/arch-mx27/imx-regs.h @@ -202,8 +202,7 @@ struct iim_regs { u32 iim_scs1; u32 iim_scs2; u32 iim_scs3; - u32 res[0x1F0]; - u32 iim_bank_area0[0x100]; + u32 iim_bank_area[0x100 * 2]; }; #endif @@ -513,7 +512,7 @@ struct iim_regs { #define IIM_ERR_PARITYE (1 << 1) /* Definitions for i.MX27 TO2 */ -#define IIM0_MAC 5 +#define IIM_MAC 5 #define IIM0_SCC_KEY 11 #define IIM1_SUID 1 diff --git a/arch/arm/include/asm/arch-mx5/imx-regs.h b/arch/arm/include/asm/arch-mx5/imx-regs.h index 0b6249a..93eef48 100644 --- a/arch/arm/include/asm/arch-mx5/imx-regs.h +++ b/arch/arm/include/asm/arch-mx5/imx-regs.h @@ -205,6 +205,9 @@ #define BOARD_REV_1_0 0x0 #define BOARD_REV_2_0 0x1 +#define IMX_IIM_BASE (IIM_BASE_ADDR) +#define IIM_MAC 0x109 + #if !(defined(__KERNEL_STRICT_NAMES) || defined(__ASSEMBLY__)) #include <asm/types.h> @@ -275,6 +278,27 @@ struct src { u32 sisr; u32 simr; }; + +struct iim_regs { + u32 stat; + u32 statm; + u32 err; + u32 emask; + u32 fctl; + u32 ua; + u32 la; + u32 sdat; + u32 prev; + u32 srev; + u32 preg_p; + u32 scs0; + u32 scs1; + u32 scs2; + u32 scs3; + u32 res[0x1f1]; + u32 iim_bank_area[0x100 * 4]; +}; + #endif /* __ASSEMBLER__*/ #endif /* __ASM_ARCH_MXC_MX51_H__ */ diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c index 3f09c2b..1e6ba06 100644 --- a/drivers/net/fec_mxc.c +++ b/drivers/net/fec_mxc.c @@ -312,21 +312,16 @@ static void fec_rbd_clean(int last, struct fec_bd *pRbd) static int fec_get_hwaddr(struct eth_device *dev, unsigned char *mac) { -/* - * The MX27 can store the mac address in internal eeprom - * This mechanism is not supported now by MX51 or MX25 - */ -#if defined(CONFIG_MX51) || defined(CONFIG_MX25) - return -1; -#else struct iim_regs *iim = (struct iim_regs *)IMX_IIM_BASE; int i; for (i = 0; i < 6; i++) +#ifdef CONFIG_MX27 mac[6-1-i] = readl(&iim->iim_bank_area0[IIM0_MAC + i]); - - return !is_valid_ether_addr(mac); +#else + mac[i] = readl(&iim->iim_bank_area[IIM_MAC + i]); #endif + return !is_valid_ether_addr(mac); } static int fec_set_hwaddr(struct eth_device *dev) @@ -710,6 +705,7 @@ static int fec_probe(bd_t *bd) puts("fec_mxc: not enough malloc memory\n"); return -ENOMEM; } + memset(edev, 0, sizeof(*edev)); edev->priv = fec; edev->init = fec_init; edev->send = fec_send; @@ -753,7 +749,7 @@ static int fec_probe(bd_t *bd) eth_register(edev); if (fec_get_hwaddr(edev, ethaddr) == 0) { - printf("got MAC address from EEPROM: %pM\n", ethaddr); + printf("got MAC address from FUSE: %pM\n", ethaddr); memcpy(edev->enetaddr, ethaddr, 6); } -- 1.7.0.4 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot