From 21cc8cf384ccdf8cd371e932b2070d7286704407 Mon Sep 17 00:00:00 2001 From: Troy Kisky <troy.kisky@boundarydevices.com> Date: Thu, 14 May 2015 13:02:44 -0700 Subject: [PATCH] mx6: soc: add dev_id to mac_from_fuse value --- arch/arm/mach-imx/mac.c | 47 ++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/arch/arm/mach-imx/mac.c b/arch/arm/mach-imx/mac.c index 3b1496b2038..7da11e5cdeb 100644 --- a/arch/arm/mach-imx/mac.c +++ b/arch/arm/mach-imx/mac.c @@ -28,33 +28,36 @@ void imx_get_mac_from_fuse(int dev_id, unsigned char *mac) struct imx_mac_fuse *fuse; u32 offset; bool has_second_mac; + u32 value_high, value_low; offset = is_mx6() ? MAC_FUSE_MX6_OFFSET : MAC_FUSE_MX7_OFFSET; fuse = (struct imx_mac_fuse *)(ulong)(OCOTP_BASE_ADDR + offset); has_second_mac = is_mx7() || is_mx6sx() || is_mx6ul() || is_mx6ull(); if (has_second_mac && dev_id == 1) { - u32 value = readl(&fuse->mac_addr2); - - mac[0] = value >> 24; - mac[1] = value >> 16; - mac[2] = value >> 8; - mac[3] = value; - - value = readl(&fuse->mac_addr1); - mac[4] = value >> 24; - mac[5] = value >> 16; - - } else { - u32 value = readl(&fuse->mac_addr1); - - mac[0] = value >> 8; - mac[1] = value; - - value = readl(&fuse->mac_addr0); - mac[2] = value >> 24; - mac[3] = value >> 16; - mac[4] = value >> 8; - mac[5] = value; + value_high = readl(&fuse->mac_addr2); + value_low = readl(&fuse->mac_addr1) >> 16; + + value_low |= (value_high << 16); + value_high >>= 16; + if (value_low | value_high) { + dev_id--; + goto valid; + } + } + value_high = readl(&fuse->mac_addr1); + value_low = readl(&fuse->mac_addr0); +valid: + if ((dev_id > 0) && (value_low | value_high)) { + u32 prev = value_low; + value_low += dev_id; + if (value_low < prev) + value_high++; } + mac[0] = value_high >> 8; + mac[1] = value_high; + mac[2] = value_low >> 24; + mac[3] = value_low >> 16; + mac[4] = value_low >> 8; + mac[5] = value_low; } -- GitLab