> MX28 has two built-in FECs (Fast Ethernet Controller). > > OCOTP register can be used to only store 4 bytes of MAC addresses. > > In order to workaround this limitation, let the MAC address of FEC1 be > the FEC0 address plus one. > > Signed-off-by: Fabio Estevam <fabio.este...@freescale.com> > --- > Changes since v5: > No changes. Newly introduced on this series > > arch/arm/cpu/arm926ejs/mx28/mx28.c | 8 ++++++-- > drivers/net/fec_mxc.c | 16 ++++++++++++++++ > drivers/net/fec_mxc.h | 1 + > 3 files changed, 23 insertions(+), 2 deletions(-) > > diff --git a/arch/arm/cpu/arm926ejs/mx28/mx28.c > b/arch/arm/cpu/arm926ejs/mx28/mx28.c index a25814e..79b4001 100644 > --- a/arch/arm/cpu/arm926ejs/mx28/mx28.c > +++ b/arch/arm/cpu/arm926ejs/mx28/mx28.c > @@ -227,7 +227,7 @@ void set_mac_vendor(char *mac) > > #define MXS_OCOTP_MAX_TIMEOUT 1000000 > > -void imx_get_mac_from_fuse(char *mac) > +void mx28_get_mac_from_fuse(int dev_id, char *mac) > { > struct mx28_ocotp_regs *ocotp_regs = > (struct mx28_ocotp_regs *)MXS_OCOTP_BASE; > @@ -249,10 +249,14 @@ void imx_get_mac_from_fuse(char *mac) > mac[3] = (data >> 16) & 0xff; > mac[4] = (data >> 8) & 0xff; > mac[5] = data & 0xff; > + /* Assume that FEC1 MAC address is MAC0 + 1 */ > + if (dev_id == 1) > + mac[5]+= 1;
No, please don't ... user might want to do this the other way around so just give him the freedom (and you're missing space before +) :) You can move exactly this code to the default implementation of mx28_mac_adjust(). > + > set_mac_vendor(mac); > } > #else > -void imx_get_mac_from_fuse(char *mac) > +void mx28_get_mac_from_fuse(int dev_id, char *mac) > { > memset(mac, 0, 6); > } > diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c > index b05a4c0..a6bf597 100644 > --- a/drivers/net/fec_mxc.c > +++ b/drivers/net/fec_mxc.c > @@ -345,11 +345,20 @@ static void fec_rbd_clean(int last, struct fec_bd > *pRbd) writew(0, &pRbd->data_length); > } > > +#ifndef CONFIG_MX28 > static int fec_get_hwaddr(struct eth_device *dev, unsigned char *mac) > { > imx_get_mac_from_fuse(mac); > return !is_valid_ether_addr(mac); > } > +#else > +static int mx28_fec_get_hwaddr(struct eth_device *dev, int dev_id, > + unsigned char *mac) > +{ > + mx28_get_mac_from_fuse(dev_id, mac); > + return !is_valid_ether_addr(mac); > +} > +#endif > > static int fec_set_hwaddr(struct eth_device *dev) > { > @@ -812,10 +821,17 @@ static int fec_probe(bd_t *bd, int dev_id, int > phy_id, uint32_t base_addr) > > eth_register(edev); > > +#ifndef CONFIG_MX28 > if (fec_get_hwaddr(edev, ethaddr) == 0) { > debug("got MAC address from fuse: %pM\n", ethaddr); > memcpy(edev->enetaddr, ethaddr, 6); > } > +#else > + if (mx28_fec_get_hwaddr(edev, dev_id, ethaddr) == 0) { > + debug("got MAC%d address from fuse: %pM\n", dev_id, ethaddr); > + memcpy(edev->enetaddr, ethaddr, 6); > + } > +#endif > > return ret; > > diff --git a/drivers/net/fec_mxc.h b/drivers/net/fec_mxc.h > index 8b26645..e2cfe4a 100644 > --- a/drivers/net/fec_mxc.h > +++ b/drivers/net/fec_mxc.h > @@ -33,6 +33,7 @@ > #define __FEC_MXC_H > > void imx_get_mac_from_fuse(unsigned char *mac); > +void mx28_get_mac_from_fuse(int dev_id, unsigned char *mac); > > /** > * Layout description of the FEC M _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot