/linux/arch/arm/mach-mx28
..
static void __init mx28_init_fec(void)
{
{
struct platform_device *pdev;
struct mxs_dev_lookup *lookup;
struct fec_platform_data *pfec;
int i;
u32 val;
__raw_writel(BM_OCOTP_CTRL_RD_BANK_OPEN,
IO_ADDRESS(OCOTP_PHYS_ADDR) + HW_OCOTP_CTRL_SET);
while (BM_OCOTP_CTRL_BUSY &
__raw_readl(IO_ADDRESS(OCOTP_PHYS_ADDR) + HW_OCOTP_CTRL))
udelay(10);
lookup = mxs_get_devices("mxs-fec");
if (lookup == NULL || IS_ERR(lookup))
return;
for (i = 0; i < lookup->size; i++) {
pdev = lookup->pdev + i;
val = __raw_readl(IO_ADDRESS(OCOTP_PHYS_ADDR) +
HW_OCOTP_CUSTn(pdev->id));
switch (pdev->id) {
case 0:
pdev->resource = fec0_resource;
pdev->num_resources = ARRAY_SIZE(fec0_resource);
pdev->dev.platform_data = &fec_pdata0;
break;
case 1:
pdev->resource = fec1_resource;
pdev->num_resources = ARRAY_SIZE(fec1_resource);
pdev->dev.platform_data = &fec_pdata1;
break;
default:
return;
}
pfec = (struct fec_platform_data *)pdev->dev.platform_data;
pfec->mac[0] = 0x00;
pfec->mac[1] = 0x04;
pfec->mac[2] = (val >> 24) & 0xFF;
pfec->mac[3] = (val >> 16) & 0xFF;
pfec->mac[4] = (val >> 8) & 0xFF;
pfec->mac[5] = (val >> 0) & 0xFF;
mxs_add_device(pdev, 2);
}
}
so use Bitburner to flash HW_OCOTP_CUST0, HW_OCOTP_CUST1. if you don't have this tools, contact your FAE.