summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXie Xiaobo <r63061@freescale.com>2010-08-23 15:47:36 +0800
committerXie Xiaobo <r63061@freescale.com>2010-08-23 16:22:22 +0800
commita915af8e905ba2bcbeedc345a9d55129d2ad8358 (patch)
tree179b814eade81cd926cfd6519c254b1b72707130
parent92455c946b2a417f0d1a4e8b004d074ca11db3ae (diff)
ENGR00126576-1 MX28: read mac address from fuse
Read mac address from fuse when L2-switch init. Signed-off-by: Xie Xiaobo <X.Xie@freescale.com>
-rw-r--r--arch/arm/mach-mx28/device.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/arch/arm/mach-mx28/device.c b/arch/arm/mach-mx28/device.c
index b0ae8bbdcf01..ec9cfa62a1cc 100644
--- a/arch/arm/mach-mx28/device.c
+++ b/arch/arm/mach-mx28/device.c
@@ -848,13 +848,36 @@ static struct switch_platform_data l2switch_data = {
static void __init mx28_init_l2switch(void)
{
struct platform_device *pdev;
+ struct switch_platform_data *pswitch;
+ struct fec_platform_data *pfec;
+ 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);
+
pdev = mxs_get_device("mxs-l2switch", 0);
if (pdev == NULL || IS_ERR(pdev))
return;
+ val = __raw_readl(IO_ADDRESS(OCOTP_PHYS_ADDR) +
+ HW_OCOTP_CUSTn(pdev->id));
pdev->resource = l2switch_resources;
pdev->num_resources = ARRAY_SIZE(l2switch_resources);
pdev->dev.platform_data = &l2switch_data;
+
+ pswitch = (struct switch_platform_data *)pdev->dev.platform_data;
+ pfec = pswitch->fec_enet;
+ 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);
}
#else