aboutsummaryrefslogtreecommitdiff
path: root/arch/arm/cpu/armv7/omap3
diff options
context:
space:
mode:
authorJohn Rigby <john.rigby@linaro.org>2011-10-23 22:55:22 -0600
committerJohn Rigby <john.rigby@linaro.org>2012-08-16 10:09:58 -0600
commitdb1d3d55cc02cd63f42e023490c5027b25d2334c (patch)
tree7fb5ee1c7e6ea33f8f9fa81fd83344b4b5a8ed2f /arch/arm/cpu/armv7/omap3
parent9b1eb6e7c04afd3763db35b6f661415d292b7a52 (diff)
OMAP3: Beagle: set mac addr from dieid
TODO: share dieid<-->mac addr code between OMAP3 and OMAP4 Signed-off-by: John Rigby <john.rigby@linaro.org>
Diffstat (limited to 'arch/arm/cpu/armv7/omap3')
-rw-r--r--arch/arm/cpu/armv7/omap3/sys_info.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/arch/arm/cpu/armv7/omap3/sys_info.c b/arch/arm/cpu/armv7/omap3/sys_info.c
index 3c8011350..10808e5b1 100644
--- a/arch/arm/cpu/armv7/omap3/sys_info.c
+++ b/arch/arm/cpu/armv7/omap3/sys_info.c
@@ -79,6 +79,8 @@ void dieid_num_r(void)
printf("Die ID #%s\n", uid_s);
}
+
+
/******************************************
* get_cpu_type(void) - extract cpu info
******************************************/
@@ -366,3 +368,36 @@ int print_cpuinfo (void)
return 0;
}
#endif /* CONFIG_DISPLAY_CPUINFO */
+
+void omap3_die_id_to_ethernet_mac(u8 *mac, int subtype)
+{
+ struct ctrl_id *id_base = (struct ctrl_id *)OMAP34XX_ID_L4_IO_BASE;
+ u32 idcode;
+ u32 id[4];
+
+ idcode = readl(&id_base->idcode);
+ id[0] = readl(&id_base->die_id_0);
+ id[1] = readl(&id_base->die_id_1);
+ id[2] = readl(&id_base->die_id_2);
+ id[3] = readl(&id_base->die_id_3);
+
+ mac[0] = id[2];
+ mac[1] = id[2] >> 8;
+ mac[2] = id[1];
+ mac[3] = id[1] >> 8;
+ mac[4] = id[1] >> 16;
+ mac[5] = id[1] >> 24;
+ /* XOR other chip-specific data with ID */
+ idcode ^= id[3];
+
+ mac[0] ^= idcode;
+ mac[1] ^= idcode >> 8;
+ mac[2] ^= idcode >> 16;
+ mac[3] ^= idcode >> 24;
+
+ /* allow four MACs from this same basic data */
+ mac[1] = (mac[1] & ~0xc0) | ((subtype & 3) << 6);
+
+ /* mark it as not multicast and outside official 80211 MAC namespace */
+ mac[0] = (mac[0] & ~1) | 2;
+}