aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Blake <chrisrblake93@gmail.com>2016-10-24 14:05:54 -0500
committerJohn Crispin <john@phrozen.org>2016-10-26 12:37:45 +0200
commit28dd52b079d39fa80dd801e2864bea42251fd50b (patch)
tree92fdf3ea51892e09d93d7f78cb2eecab1e00100c
parentd8662ac3c6a2ecd3834d109c5d3abd864fb23a50 (diff)
downloadupstream-28dd52b079d39fa80dd801e2864bea42251fd50b.tar.gz
upstream-28dd52b079d39fa80dd801e2864bea42251fd50b.tar.bz2
upstream-28dd52b079d39fa80dd801e2864bea42251fd50b.zip
ar71xx: add mac partition to the MR12/MR16
On the stock Meraki Firmare for the MR12/MR16, a chunk of SPI space after u-boot-env is used to store the boards Mac address. Sadly as this was removed on any device already on OpenWRT/LEDE, moving forward a new, 64k partition named "mac" will be used to store the mac address for the device (which is the minimum size). This allows users to properly set the correct MAC, without editing the ART partition (which holds the same MAC for all devices). The reason the space is taken from kernel instead of rootfs is currently kernels are only 1.3MB, so that way we can leave the current rootfs space alone for users who fully utilize the available storage space. Once this partition is added to a device, you can set your MAC doing the following: mtd erase mac echo -n -e '\x00\x18\x0a\x33\x44\x55' > /dev/mtd5 sync && reboot Where 00:18:0a:33:44:55 is your MAC address. This was tested, and confirmed working on both the MR12 and MR16. Signed-off-by: Chris Blake <chrisrblake93@gmail.com>
-rw-r--r--target/linux/ar71xx/files/arch/mips/ath79/mach-mr12.c15
-rw-r--r--target/linux/ar71xx/files/arch/mips/ath79/mach-mr16.c22
-rw-r--r--target/linux/ar71xx/image/generic.mk8
3 files changed, 22 insertions, 23 deletions
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 12c9a1cb5d..5a337e5c9f 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,7 @@
#define MR12_WAN_PHYMASK BIT(4)
-#define MR12_WMAC0_MAC_OFFSET 0x120c
-#define MR12_CALDATA0_OFFSET 0x1000
+#define MR12_CALDATA0_OFFSET 0x21000
static struct gpio_led MR12_leds_gpio[] __initdata = {
{
@@ -90,8 +89,9 @@ static struct gpio_keys_button MR12_gpio_keys[] __initdata = {
static void __init MR12_setup(void)
{
- u8 *mac = (u8 *) KSEG1ADDR(0xbfff0000);
-
+ u8 *mac = (u8 *) KSEG1ADDR(0xbffd0000);
+ u8 wlan_mac[ETH_ALEN];
+
ath79_register_mdio(0,0x0);
ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0);
@@ -107,9 +107,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);
-
+ ath79_init_mac(wlan_mac, mac, 1);
+ ap91_pci_init(mac + MR12_CALDATA0_OFFSET, wlan_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 9f08e3d4c0..9da21eab5a 100644
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-mr16.c
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-mr16.c
@@ -42,10 +42,8 @@
#define MR16_WAN_PHYMASK BIT(0)
-#define MR16_WMAC0_MAC_OFFSET 0x120c
-#define MR16_WMAC1_MAC_OFFSET 0x520c
-#define MR16_CALDATA0_OFFSET 0x1000
-#define MR16_CALDATA1_OFFSET 0x5000
+#define MR16_CALDATA0_OFFSET 0x21000
+#define MR16_CALDATA1_OFFSET 0x25000
static struct gpio_led MR16_leds_gpio[] __initdata = {
{
@@ -92,8 +90,10 @@ static struct gpio_keys_button MR16_gpio_keys[] __initdata = {
static void __init MR16_setup(void)
{
- u8 *mac = (u8 *) KSEG1ADDR(0xbfff0000);
-
+ u8 *mac = (u8 *) KSEG1ADDR(0xbffd0000);
+ 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);
@@ -109,10 +109,10 @@ 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);
+ ath79_init_mac(wlan0_mac, mac, 1);
+ ath79_init_mac(wlan1_mac, mac, 2);
+ ap94_pci_init(mac + MR16_CALDATA0_OFFSET, wlan0_mac,
+ mac + 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/generic.mk b/target/linux/ar71xx/image/generic.mk
index 4a81a17d67..070bfbb1d6 100644
--- a/target/linux/ar71xx/image/generic.mk
+++ b/target/linux/ar71xx/image/generic.mk
@@ -112,8 +112,8 @@ define Device/mr12
DEVICE_TITLE := Meraki MR12
DEVICE_PACKAGES := kmod-spi-gpio
BOARDNAME = MR12
- IMAGE_SIZE = 15744k
- MTDPARTS = spi0.0:256k(u-boot)ro,256k(u-boot-env)ro,13440k(rootfs),2304k(kernel),128k(art)ro,15744k@0x80000(firmware)
+ IMAGE_SIZE = 15680k
+ MTDPARTS = spi0.0:256k(u-boot)ro,256k(u-boot-env)ro,13440k(rootfs),2240k(kernel),64k(mac),128k(art)ro,15680k@0x80000(firmware)
IMAGE/kernel.bin = append-kernel
IMAGE/rootfs.bin = append-rootfs | pad-rootfs
IMAGE/sysupgrade.bin = append-rootfs | pad-rootfs | pad-to 13440k | append-kernel | check-size $$$$(IMAGE_SIZE)
@@ -125,8 +125,8 @@ define Device/mr16
DEVICE_TITLE := Meraki MR16
DEVICE_PACKAGES := kmod-spi-gpio
BOARDNAME = MR16
- IMAGE_SIZE = 15744k
- MTDPARTS = spi0.0:256k(u-boot)ro,256k(u-boot-env)ro,13440k(rootfs),2304k(kernel),128k(art)ro,15744k@0x80000(firmware)
+ IMAGE_SIZE = 15680k
+ MTDPARTS = spi0.0:256k(u-boot)ro,256k(u-boot-env)ro,13440k(rootfs),2240k(kernel),64k(mac),128k(art)ro,15680k@0x80000(firmware)
IMAGE/kernel.bin = append-kernel
IMAGE/rootfs.bin = append-rootfs | pad-rootfs
IMAGE/sysupgrade.bin = append-rootfs | pad-rootfs | pad-to 13440k | append-kernel | check-size $$$$(IMAGE_SIZE)