diff --git a/docs/index.rst b/docs/index.rst index c5226c27..2f24459c 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -112,6 +112,11 @@ ar71xx-generic - WZR-HP-G300NH2 - WZR-HP-G450H +* Cisco Meraki + + - MR12 / MR62 + - MR16 / MR66 + * D-Link - DIR-505 (A1, A2) diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac index c4f44065..cab13a67 100755 --- a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac +++ b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac @@ -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', diff --git a/patches/openwrt/0095-ar71xx-generic-Fix-flash-layout-and-MAC-addresses-of-Meraki-MR12-MR16.patch b/patches/openwrt/0095-ar71xx-generic-Fix-flash-layout-and-MAC-addresses-of-Meraki-MR12-MR16.patch new file mode 100644 index 00000000..f4a5f130 --- /dev/null +++ b/patches/openwrt/0095-ar71xx-generic-Fix-flash-layout-and-MAC-addresses-of-Meraki-MR12-MR16.patch @@ -0,0 +1,128 @@ +From: Oleander Reis +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 diff --git a/targets/ar71xx-generic/profiles.mk b/targets/ar71xx-generic/profiles.mk index c76c8a8b..6da40e12 100644 --- a/targets/ar71xx-generic/profiles.mk +++ b/targets/ar71xx-generic/profiles.mk @@ -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