ar71xx-generic: Fix flash layout and MAC addresses of Meraki MR12/MR16

Fixes #993. Only verified for MR16.
This commit is contained in:
Oleander Reis 2017-01-14 07:12:14 +01:00
parent 850499fdb3
commit 846725750a
4 changed files with 134 additions and 3 deletions

View File

@ -112,6 +112,11 @@ ar71xx-generic
- WZR-HP-G300NH2
- WZR-HP-G450H
* Cisco Meraki
- MR12 / MR62
- MR16 / MR66
* D-Link
- DIR-505 (A1, A2)

View File

@ -33,6 +33,7 @@ elseif platform.match('ar71xx', 'generic', {'unifi-outdoor-plus', 'carambola2',
'mr600', 'mr600v2',
'mr900', 'mr900v2',
'mr1750', 'mr1750v2',
'mr12', 'mr16', 'mr66',
'om2p', 'om2pv2',
'om2p-hs', 'om2p-hsv2', 'om2p-hsv3',
'om2p-lc',

View File

@ -0,0 +1,128 @@
From: Oleander Reis <oleander@oleander.cc>
Date: Sat, 14 Jan 2017 05:59:00 +0100
Subject: ar71xx-generic: Fix flash layout and MAC addresses of Meraki MR12/MR16
Fixes #993. Only verified for MR16.
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-mr12.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-mr12.c
index 12c9a1cb5d932d0b579e865f122f653b03b47170..fc547f8d7e9eadd84855d48d9958ed32218a18d4 100644
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-mr12.c
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-mr12.c
@@ -42,8 +42,9 @@
#define MR12_WAN_PHYMASK BIT(4)
-#define MR12_WMAC0_MAC_OFFSET 0x120c
-#define MR12_CALDATA0_OFFSET 0x1000
+#define MR12_MAC 0xbf090000
+#define MR12_ART 0xbfff0000
+#define MR12_CALDATA0_OFFSET 0x1000
static struct gpio_led MR12_leds_gpio[] __initdata = {
{
@@ -90,8 +91,11 @@ static struct gpio_keys_button MR12_gpio_keys[] __initdata = {
static void __init MR12_setup(void)
{
- u8 *mac = (u8 *) KSEG1ADDR(0xbfff0000);
-
+ u8 *mac = (u8 *) KSEG1ADDR(MR12_MAC);
+ u8 *art = (u8 *) KSEG1ADDR(MR12_ART);
+
+ u8 wlan0_mac[ETH_ALEN];
+
ath79_register_mdio(0,0x0);
ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0);
@@ -99,6 +103,8 @@ static void __init MR12_setup(void)
ath79_eth0_data.phy_mask = MR12_WAN_PHYMASK;
ath79_register_eth(0);
+ ath79_init_mac(wlan0_mac, mac, 1);
+
ath79_register_m25p80(NULL);
ath79_register_leds_gpio(-1, ARRAY_SIZE(MR12_leds_gpio),
@@ -107,9 +113,8 @@ static void __init MR12_setup(void)
ARRAY_SIZE(MR12_gpio_keys),
MR12_gpio_keys);
- ap91_pci_init(mac + MR12_CALDATA0_OFFSET,
- mac + MR12_WMAC0_MAC_OFFSET);
+ ap91_pci_init(art + MR12_CALDATA0_OFFSET, wlan0_mac);
}
-MIPS_MACHINE(ATH79_MACH_MR12, "MR12", "Meraki MR12", MR12_setup);
\ No newline at end of file
+MIPS_MACHINE(ATH79_MACH_MR12, "MR12", "Meraki MR12", MR12_setup);
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-mr16.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-mr16.c
index 9f08e3d4c04c337e6e9d768e3881381ac17b2ddc..0cf61f92ebf6b643162fc7c316600f2076b75a74 100644
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-mr16.c
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-mr16.c
@@ -42,8 +42,8 @@
#define MR16_WAN_PHYMASK BIT(0)
-#define MR16_WMAC0_MAC_OFFSET 0x120c
-#define MR16_WMAC1_MAC_OFFSET 0x520c
+#define MR16_MAC 0xbf080066
+#define MR16_ART 0xbfff0000
#define MR16_CALDATA0_OFFSET 0x1000
#define MR16_CALDATA1_OFFSET 0x5000
@@ -92,8 +92,12 @@ static struct gpio_keys_button MR16_gpio_keys[] __initdata = {
static void __init MR16_setup(void)
{
- u8 *mac = (u8 *) KSEG1ADDR(0xbfff0000);
-
+ u8 *mac = (u8 *) KSEG1ADDR(MR16_MAC);
+ u8 *art = (u8 *) KSEG1ADDR(MR16_ART);
+
+ u8 wlan0_mac[ETH_ALEN];
+ u8 wlan1_mac[ETH_ALEN];
+
ath79_register_mdio(0,0x0);
ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0);
@@ -101,6 +105,9 @@ static void __init MR16_setup(void)
ath79_eth0_data.phy_mask = MR16_WAN_PHYMASK;
ath79_register_eth(0);
+ ath79_init_mac(wlan0_mac, mac, 1);
+ ath79_init_mac(wlan1_mac, mac, 2);
+
ath79_register_m25p80(NULL);
ath79_register_leds_gpio(-1, ARRAY_SIZE(MR16_leds_gpio),
@@ -109,10 +116,8 @@ static void __init MR16_setup(void)
ARRAY_SIZE(MR16_gpio_keys),
MR16_gpio_keys);
- ap94_pci_init(mac + MR16_CALDATA0_OFFSET,
- mac + MR16_WMAC0_MAC_OFFSET,
- mac + MR16_CALDATA1_OFFSET,
- mac + MR16_WMAC1_MAC_OFFSET);
+ ap94_pci_init(art + MR16_CALDATA0_OFFSET, wlan0_mac,
+ art + MR16_CALDATA1_OFFSET, wlan1_mac);
}
-MIPS_MACHINE(ATH79_MACH_MR16, "MR16", "Meraki MR16", MR16_setup);
\ No newline at end of file
+MIPS_MACHINE(ATH79_MACH_MR16, "MR16", "Meraki MR16", MR16_setup);
diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
index 61e221255f6742f9594da168b11af7716d6a720e..5ead0677f9e082b5393e3ecb4741aab37f840679 100644
--- a/target/linux/ar71xx/image/Makefile
+++ b/target/linux/ar71xx/image/Makefile
@@ -1136,8 +1136,8 @@ dlrtdev_mtdlayout_fat=mtdparts=spi0.0:256k(uboot)ro,64k(config)ro,7168k(firmware
dragino2_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,16000k(firmware),64k(config)ro,64k(art)ro
dw33d_mtdlayout=mtdparts=spi0.0:256k(u-boot),64k(u-boot-env)ro,14528k(rootfs),1472k(kernel),64k(art)ro,16000k@0x50000(firmware);ar934x-nfc:96m(rootfs_data),32m(backup)ro
hiwifi_hc6361_mtdlayout=mtdparts=spi0.0:64k(u-boot)ro,64k(bdinfo)ro,1280k(kernel),14848k(rootfs),64k(backup)ro,64k(art)ro,16128k@0x20000(firmware)
-mr12_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,256k(u-boot-env)ro,13440k(rootfs),2304k(kernel),128k(art)ro,15744k@0x80000(firmware)
-mr16_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,256k(u-boot-env)ro,13440k(rootfs),2304k(kernel),128k(art)ro,15744k@0x80000(firmware)
+mr12_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,256k(u-boot-env)ro,128k(config)ro,13312k(rootfs),2304k(kernel),128k(art)ro,15616k@0xa0000(firmware)
+mr16_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,256k(u-boot-env)ro,128k(config)ro,13312k(rootfs),2304k(kernel),128k(art)ro,15616k@0xa0000(firmware)
pb92_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,2752k(rootfs),896k(kernel),64k(nvram),64k(art)ro,3648k@0x50000(firmware)
planex_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,7744k(firmware),128k(art)ro
ubntxm_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,7552k(firmware),256k(cfg)ro,64k(EEPROM)ro

View File

@ -408,8 +408,6 @@ $(eval $(call GluonModel,ALFANX,alfa-nx,alfa-network-n2-n5))
## Meraki
# BROKEN: MAC address uniqueness issues
ifneq ($(BROKEN),)
# Meraki MR12/MR62
$(eval $(call GluonProfile,MR12,rssileds))
$(eval $(call GluonProfileFactorySuffix,MR12))
@ -421,7 +419,6 @@ $(eval $(call GluonProfile,MR16,rssileds))
$(eval $(call GluonProfileFactorySuffix,MR16))
$(eval $(call GluonModel,MR16,mr16,meraki-mr16))
$(eval $(call GluonModelAlias,MR16,meraki-mr16,meraki-mr66))
endif
## 8devices