[U-Boot] [PATCH v2 1/3] mx28: Let imx_get_mac_from_fuse be common for mx28

Marek Vasut marek.vasut at gmail.com
Fri Dec 16 11:39:47 CET 2011


> On 16/12/2011 10:53, Marek Vasut wrote:
> >> On 15/12/2011 18:22, Marek Vasut wrote:
> >>>> 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 at freescale.com>
> 
> Hi Marek,

Hi Stefano,

DISCLAIMER: I'm terribly tired today, had early class.

> 
> >>> Be careful here. 0x00 0x04 prefix might not be correct for all cases!
> >> 
> >> But to be honest, it seems they are correct for the MX28EVK and not for
> >> the M28EVK. The M28EVK and the M28 module are delivered with their own
> >> MAC address that does not belong to the Freescale's range.
> >> 
> >> As far as I can see, the M28EVK starts with a Freescale's MAC, and then
> >> the DENX MAC address (Vendor ID C0:E5:4E) is set later to the correct
> >> value when Linux boots.
> > 
> > It's actually set even in uboot by ethaddr and eth1addr. This is the
> > default behaviour.
> 
> This means ethaddr overwrites the values read from fuses - why do we
> need the fuses ?

You disable fuses and use ethaddr. Why do we need them? We don't, but the 
hardware is in the CPU and someone might use it so let's support it.

> 
> >> I can understand this feature in the SOC as a way to set the LSBs of the
> >> MAC address, but leaving to the customer a way to set its own vendor id,
> >> if he bought it.
> >> 
> >> What about to add a weak function (board_set_mac_vendor, maybe ?) that
> >> can be called at this point to set the vendor id ? The default behavior
> >> should be to set the Freescale's vendor id.
> > 
> > ethaddr and eth1addr is insufficient?
> 
> In a standard way, the environment must be adapted for each board to
> store the MAC address in the ethaddr variable. The reason to get the MAC
> directly from the hardware is that it is not required a specific initial
> setup for each board, and that simplifies the production and the
> delivery of the boards.

Sure, but the OCOTP capacity here is limited. But there was approach from 
Fabio/me how to make the OCOTP good enough for two NICs even.

* The idea is to let user configure the top 2 bytes per-device (which is the 
most likely case).
* Introduce mac_modify(int fec, char *mac) function, which will be called from 
imx_get_mac_from_fuse()
* The function will adjust the MAC, for example by setting top two bytes to 
preconfigured data, bottom four bytes from OCOTP and the last bit of the MAC 
from "int fec", which is 0 for FEC0 and 1 for FEC1. This should be sufficient 
for most people.
* The function will be weak so it can be overridden to your hearts content.

> 
> If you rely on ethaddr, than we do not need imx_get_mac_from_fuse() at
> all, and the MAC can be set to zero, because in this case the ethaddr
> value is used - but we lose the feature.
> 
> The reason why imx_get_mac_from_fuse was introduce is to have an
> automatic mechanism to set up the MAC without any customization.
> 
> Best regards,
> Stefano Babic

Cheers!

M


More information about the U-Boot mailing list