bcm53xx: add support for Meraki MR26
authorChristian Lamparter <chunkeey@gmail.com>
Fri, 10 Jun 2022 20:22:39 +0000 (22:22 +0200)
committerChristian Lamparter <chunkeey@gmail.com>
Fri, 15 Jul 2022 13:21:44 +0000 (15:21 +0200)
Meraki MR26 is an EOL wireless access point featuring a
PoE ethernet port and two dual-band 3x3 MIMO 802.11n
radios and 1x1 dual-band WIFI dedicated to scanning.

Thank you Amir for the unit and PSU.

Hardware info:
SOC   : Broadcom BCM53015A1KFEBG (dual-core Cortex-A9 CPU at 800 MHz)
RAM   : SK hynix Inc. H5TQ1G63EFR, 1 Gbit DDR3 SDRAM = 128 MiB
NAND  : Spansion S34ML01G100TF100, 1 Gbit SLC NAND Flash = 128 MiB
ETH   : 1 GBit Ethernet Port - PoE
WIFI1 : Broadcom BCM43431KMLG, BCM43431 802.11 abgn
WIFI1 : Broadcom BCM43431KMLG, BCM43431 802.11 abgn
WIFI3 : Broadcom BCM43428 abgn (1x1:1 - id: 43428)
BUTTON: one reset button
LEDS  : RGB-LED
MISC  : Atmel AT24C64 8KiB EEPROM (i2c - seems empty)
      : Ti INA219 26V, 12-bit, i2c output current/voltage/power monitor
      : TPS23754, High Power/High Efficiency PoE Interface+DC/DC Controller

SERIAL:
WARNING: The serial port needs a TTL/RS-232 3V3 level converter!
The Serial setting is 115200-8-N-1. The board has a populated
right angle 1x4 0.1" pinheader.
The pinout is: VCC (next to J3, has little white arrow), RX, TX, GND.

This flashing procedure for the MR26 was tested with firmware:
    "22-143410M-gf25cbf5a-asa".
    U-Boot 2012.10-00063-g83f9fe4 (Jun 04 2014 - 21:22:39)

A guide how to open up the device is available on the wiki:
<https://openwrt.org/toh/meraki/mr26>

Notes:
 - The WIFI do work to a degree. Limited to 802.11bg in the 2.4GHz band.
 - the WIFI macs are made up.

0. Create a separate Ethernet LAN which can't have access to the internet.
   Ideally use 192.168.1.2 for your PC. The new OpenWrt firmware will setup
   the network via DHCP Discovery, so make sure your PC is running
   a DHCP-Server (i.e.: dnsmasq)
   '# dnsmasq -i eth# -F 192.168.1.5,192.168.1.50
   Download the openwrt-meraki-mr26 initramfs file from openwrt.org and
   rename it to something simple like mr26.bin. Then put it into the tftp's
   server directory.

1. Disassemble the MR26 device by removing all screws (4 screws are located
   under the 4 rubber feets!) and prying open the plastic covers without
   breaking the plastic retention clips. Once inside, remove the plastic
   back casing. Be careful, there some "hidden" retention clips on both
   sides of the LAN port, you need a light to see those. Next, you want to
   remove all the screws on the outer metal shielding to get to the PCB.
   It's not necessary to remove the antennas!

2. Connect the serial cable to the serial header and Ethernet patch cable
   to the device.

4. Before connecting the power, get ready flood the serial console program
   with the magic:   xyzzy  . This is necessary in order to get into the
   u-boot prompt. Once Ready: connect power cable.

5. If you don't get the "u-boot>" prompt within the first few seconds,
   you have to disconnect and reconnect the power cable and try again.

6. In the u-boot prompt enter:

   setenv ipaddr 192.168.1.4
   setenv serverip 192.168.1.2
   tftpboot ${meraki_loadaddr} mr26.bin; bootm

   this will boot a in-ram-only OpenWrt image.

7. Once it booted use sysupgrade to permanently install OpenWrt.
   To do this: Download the latest sysupgrade.bin file and move
   it to the device. Then use sysupgrade *sysupgrade.bin to install it.

    WARNING: DO NOT DELETE the "storage" ubi volume!

Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
target/linux/bcm53xx/base-files/etc/board.d/02_network
target/linux/bcm53xx/base-files/etc/hotplug.d/ieee80211/10-fix-mac-address [new file with mode: 0644]
target/linux/bcm53xx/base-files/lib/upgrade/platform.sh
target/linux/bcm53xx/image/Makefile
target/linux/bcm53xx/patches-5.10/081-next-ARM_dts_BCM53015-add-mr26.patch [new file with mode: 0644]
target/linux/bcm53xx/patches-5.15/072-next-ARM_dts_BCM53015-add-mr26.patch [new file with mode: 0644]

index 822320c0a6a7f510b57bfd4ee9043d1c1335e933..c2e5afc5ed80458324fcde0e5bb0b78279976fe5 100644 (file)
@@ -22,6 +22,7 @@ bcm53xx_setup_interfaces()
        luxul,xap-1610-v1)
                ucidef_set_interface_lan "poe lan" "dhcp"
                ;;
+       meraki,mr26 | \
        meraki,mr32)
                ucidef_set_interface_lan "poe" "dhcp"
                ;;
@@ -58,6 +59,11 @@ bcm53xx_setup_macs()
                etXmacaddr=$(nvram get et0macaddr)
                offset=5
                ;;
+       meraki,mr26)
+               label_mac="$(mtd_get_mac_binary_ubi board-config 0x66)"
+               ucidef_set_interface_macaddr "lan" "$label_mac"
+               ucidef_set_label_macaddr "$label_mac"
+               ;;
        *)
                etXmacaddr=$(nvram get et0macaddr)
                offset=1
diff --git a/target/linux/bcm53xx/base-files/etc/hotplug.d/ieee80211/10-fix-mac-address b/target/linux/bcm53xx/base-files/etc/hotplug.d/ieee80211/10-fix-mac-address
new file mode 100644 (file)
index 0000000..c1c56a1
--- /dev/null
@@ -0,0 +1,18 @@
+#!/bin/ash
+
+[ "$ACTION" = "add" ] || exit 0
+
+PHYNBR=${DEVPATH##*/phy}
+
+[ -n $PHYNBR ] || exit 0
+
+. /lib/functions.sh
+. /lib/functions/system.sh
+
+board=$(board_name)
+
+case "$board" in
+meraki,mr26)
+       macaddr_add "$(macaddr_setbit_la $(mtd_get_mac_binary_ubi 'board-config' 0x66))" $(($PHYNBR * 8 + 1)) > /sys${DEVPATH}/macaddress
+       ;;
+esac
index 62a36dac49d23a9cd0dad56f16c89e69a08f6755..3ebde77d3f944c56579d148052f09f5e317cca05 100644 (file)
@@ -193,12 +193,16 @@ platform_other_check_image() {
 }
 
 platform_check_image() {
-       case "$(board_name)" in
+       local board
+
+       board="$(board_name)"
+       case "$board" in
+       # Ideally, REQUIRE_IMAGE_METADATA=1 would suffice
+       # but this would require converting all other
+       # devices too.
+       meraki,mr26 | \
        meraki,mr32)
-               # Ideally, REQUIRE_IMAGE_METADATA=1 would suffice
-               # but this would require converting all other
-               # devices too.
-               nand_do_platform_check meraki-mr32 "$1"
+               nand_do_platform_check "${board//,/_}" "$1"
                return $?
                ;;
        *)
@@ -394,6 +398,7 @@ platform_other_do_upgrade() {
 
 platform_do_upgrade() {
        case "$(board_name)" in
+       meraki,mr26 | \
        meraki,mr32)
                CI_KERNPART="part.safe"
                nand_do_upgrade "$1"
index 0d0cf9b19b9d0f4ed5d186d250682136d8332cfb..d101ff95a7b89f62ba01e2a64506380749972de7 100644 (file)
@@ -322,6 +322,23 @@ define Device/luxul_xwr-3150
 endef
 TARGET_DEVICES += luxul_xwr-3150
 
+define Device/meraki_mr26
+  DEVICE_VENDOR := Meraki
+  DEVICE_MODEL := MR26
+  DEVICE_PACKAGES := $(B43) kmod-i2c-bcm-iproc kmod-eeprom-at24 \
+       kmod-hwmon-ina2xx nu801
+  DEVICE_DTS := bcm53015-meraki-mr26
+# resize the initramfs to fit the size of the existing part.safe.
+  KERNEL_LOADADDR := 0x00008000
+  KERNEL_INITRAMFS_SUFFIX := .bin
+  KERNEL_INITRAMFS := kernel-bin | append-dtb | gzip | uImage gzip | pad-to 9310208
+# LZMA is not supported by the uboot
+  KERNEL := kernel-bin | append-dtb | gzip | uImage gzip
+  IMAGES += sysupgrade.bin
+  IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
+endef
+TARGET_DEVICES += meraki_mr26
+
 define Device/meraki_mr32
   DEVICE_VENDOR := Meraki
   DEVICE_MODEL := MR32
@@ -339,7 +356,6 @@ define Device/meraki_mr32
        pad-to 10362880
   KERNEL := kernel-bin | fit none $$(DTS_DIR)/$$(DEVICE_DTS).dtb
   IMAGES += sysupgrade.bin
-# Currently the only device that uses the new image check
   IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
 
 # The loader is specifically looking for fdt@2:
diff --git a/target/linux/bcm53xx/patches-5.10/081-next-ARM_dts_BCM53015-add-mr26.patch b/target/linux/bcm53xx/patches-5.10/081-next-ARM_dts_BCM53015-add-mr26.patch
new file mode 100644 (file)
index 0000000..4517b23
--- /dev/null
@@ -0,0 +1,242 @@
+From 935327a73553001f8d81375c76985d05f604507f Mon Sep 17 00:00:00 2001
+From: Christian Lamparter <chunkeey@gmail.com>
+Date: Sat, 18 Jun 2022 00:00:29 +0200
+Subject: [PATCH] ARM: dts: BCM5301X: Add DT for Meraki MR26
+
+Meraki MR26 is an EOL wireless access point featuring a
+PoE ethernet port and two dual-band 3x3 MIMO 802.11n
+radios and 1x1 dual-band WIFI dedicated to scanning.
+
+Thank you Amir for the unit and PSU.
+
+Hardware info:
+SOC   : Broadcom BCM53015A1KFEBG (dual-core Cortex-A9 CPU at 800 MHz)
+RAM   : SK Hynix Inc. H5TQ1G63EFR, 1 GBit DDR3 SDRAM = 128 MiB
+NAND  : Spansion S34ML01G100TF100, 1 GBit SLC NAND Flash = 128 MiB
+ETH   : 1 GBit Ethernet Port - PoE (TPS23754 PoE Interface)
+WIFI0 : Broadcom BCM43431KMLG, BCM43431 802.11 abgn (3x3:3)
+WIFI1 : Broadcom BCM43431KMLG, BCM43431 802.11 abgn (3x3:3)
+WIFI2 : Broadcom BCM43428 "Air Marshal" 802.11 abgn (1x1:1)
+BUTTON: One reset key behind a small hole next to the Ethernet Port
+LEDS  : One amber (fault), one white (indicator) LED, separate RGB-LED
+MISC  : Atmel AT24C64 8KiB EEPROM i2c
+      : Ti INA219 26V, 12-bit, i2c output current/voltage/power monitor
+
+SERIAL:
+      WARNING: The serial port needs a TTL/RS-232 3V3 level converter!
+      The Serial setting is 115200-8-N-1. The board has a populated
+      right angle 1x4 0.1" pinheader.
+      The pinout is: VCC (next to J3, has the pin 1 indicator), RX, TX, GND.
+
+Odd stuff:
+
+- uboot does not support lzma compression, but gzip'd uImage/DTB work.
+- uboot claims to support FIT, but fails to pass the DTB to the kernel.
+  Appending the dtb after the kernel image works.
+- RGB-controller is supported through an external userspace program.
+- The ubi partition contains a "board-config" volume. It stores the
+  MAC Address (0x66 in binary) and Serial No. (0x7c alpha-numerical).
+- SoC's temperature sensor always reports that it is on fire.
+  This causes the system to immediately shutdown! Looking at reported
+  "418 degree Celsius" suggests that this sensor is not working.
+
+WIFI:
+b43 is able to initialize all three WIFIs @ 802.11bg.
+| b43-phy0: Broadcom 43431 WLAN found (core revision 29)
+| bcma-pci-bridge 0000:01:00.0: bus1: Switched to core: 0x812
+| b43-phy0: Found PHY: Analog 9, Type 7 (HT), Revision 1
+| b43-phy0: Found Radio: Manuf 0x17F, ID 0x2059, Revision 0, Version 1
+| b43-phy0 warning: 5 GHz band is unsupported on this PHY
+| b43-phy1: Broadcom 43431 WLAN found (core revision 29)
+| bcma-pci-bridge 0001:01:00.0: bus2: Switched to core: 0x812
+| b43-phy1: Found PHY: Analog 9, Type 7 (HT), Revision 1
+| b43-phy1: Found Radio: Manuf 0x17F, ID 0x2059, Revision 0, Version 1
+| b43-phy1 warning: 5 GHz band is unsupported on this PHY
+| b43-phy2: Broadcom 43228 WLAN found (core revision 30)
+| bcma-pci-bridge 0002:01:00.0: bus3: Switched to core: 0x812
+| b43-phy2: Found PHY: Analog 9, Type 4 (N), Revision 16
+| b43-phy2: Found Radio: Manuf 0x17F, ID 0x2057, Revision 9, Version 1
+| Broadcom 43xx driver loaded [ Features: NL ]
+
+Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
+Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
+---
+--- /dev/null
++++ b/arch/arm/boot/dts/bcm53015-meraki-mr26.dts
+@@ -0,0 +1,166 @@
++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
++/*
++ * Broadcom BCM470X / BCM5301X ARM platform code.
++ * DTS for Meraki MR26 / Codename: Venom
++ *
++ * Copyright (C) 2022 Christian Lamparter <chunkeey@gmail.com>
++ */
++
++/dts-v1/;
++
++#include "bcm4708.dtsi"
++#include "bcm5301x-nand-cs0-bch8.dtsi"
++#include <dt-bindings/leds/common.h>
++
++/ {
++      compatible = "meraki,mr26", "brcm,bcm53015", "brcm,bcm4708";
++      model = "Meraki MR26";
++
++      memory@0 {
++              reg = <0x00000000 0x08000000>;
++              device_type = "memory";
++      };
++
++      leds {
++              compatible = "gpio-leds";
++
++              led-0 {
++                      function = LED_FUNCTION_FAULT;
++                      color = <LED_COLOR_ID_AMBER>;
++                      gpios = <&chipcommon 13 GPIO_ACTIVE_HIGH>;
++                      panic-indicator;
++              };
++              led-1 {
++                      function = LED_FUNCTION_INDICATOR;
++                      color = <LED_COLOR_ID_WHITE>;
++                      gpios = <&chipcommon 12 GPIO_ACTIVE_HIGH>;
++              };
++      };
++
++      keys {
++              compatible = "gpio-keys";
++              #address-cells = <1>;
++              #size-cells = <0>;
++
++              key-restart {
++                      label = "Reset";
++                      linux,code = <KEY_RESTART>;
++                      gpios = <&chipcommon 11 GPIO_ACTIVE_LOW>;
++              };
++      };
++};
++
++&uart0 {
++      clock-frequency = <50000000>;
++      /delete-property/ clocks;
++};
++
++&uart1 {
++      status = "disabled";
++};
++
++&gmac0 {
++      status = "okay";
++};
++
++&gmac1 {
++      status = "disabled";
++};
++&gmac2 {
++      status = "disabled";
++};
++&gmac3 {
++      status = "disabled";
++};
++
++&nandcs {
++      nand-ecc-algo = "hw";
++
++      partitions {
++              compatible = "fixed-partitions";
++              #address-cells = <0x1>;
++              #size-cells = <0x1>;
++
++              partition@0 {
++                      label = "u-boot";
++                      reg = <0x0 0x200000>;
++                      read-only;
++              };
++
++              partition@200000 {
++                      label = "u-boot-env";
++                      reg = <0x200000 0x200000>;
++                      /* empty */
++              };
++
++              partition@400000 {
++                      label = "u-boot-backup";
++                      reg = <0x400000 0x200000>;
++                      /* empty */
++              };
++
++              partition@600000 {
++                      label = "u-boot-env-backup";
++                      reg = <0x600000 0x200000>;
++                      /* empty */
++              };
++
++              partition@800000 {
++                      label = "ubi";
++                      reg = <0x800000 0x7780000>;
++              };
++      };
++};
++
++&srab {
++      status = "okay";
++
++      ports {
++              port@0 {
++                      reg = <0>;
++                      label = "poe";
++              };
++
++              port@5 {
++                      reg = <5>;
++                      label = "cpu";
++                      ethernet = <&gmac0>;
++
++                      fixed-link {
++                              speed = <1000>;
++                              duplex-full;
++                      };
++              };
++      };
++};
++
++&i2c0 {
++      status = "okay";
++
++      pinctrl-names = "default";
++      pinctrl-0 = <&pinmux_i2c>;
++
++      clock-frequency = <100000>;
++
++      ina219@40 {
++              compatible = "ti,ina219"; /* PoE power */
++              reg = <0x40>;
++              shunt-resistor = <60000>; /* = 60 mOhms */
++      };
++
++      eeprom@56 {
++              compatible = "atmel,24c64";
++              reg = <0x56>;
++              pagesize = <32>;
++              read-only;
++              #address-cells = <1>;
++              #size-cells = <1>;
++
++              /* it's empty */
++      };
++};
++
++&thermal {
++      status = "disabled";
++      /* does not work, reads 418 degree Celsius */
++};
+--- a/arch/arm/boot/dts/Makefile
++++ b/arch/arm/boot/dts/Makefile
+@@ -129,6 +129,7 @@ dtb-$(CONFIG_ARCH_BCM_5301X) += \
+       bcm47094-luxul-xwr-3150-v1.dtb \
+       bcm47094-netgear-r8500.dtb \
+       bcm47094-phicomm-k3.dtb \
++      bcm53015-meraki-mr26.dtb \
+       bcm53016-meraki-mr32.dtb \
+       bcm94708.dtb \
+       bcm94709.dtb \
diff --git a/target/linux/bcm53xx/patches-5.15/072-next-ARM_dts_BCM53015-add-mr26.patch b/target/linux/bcm53xx/patches-5.15/072-next-ARM_dts_BCM53015-add-mr26.patch
new file mode 100644 (file)
index 0000000..4517b23
--- /dev/null
@@ -0,0 +1,242 @@
+From 935327a73553001f8d81375c76985d05f604507f Mon Sep 17 00:00:00 2001
+From: Christian Lamparter <chunkeey@gmail.com>
+Date: Sat, 18 Jun 2022 00:00:29 +0200
+Subject: [PATCH] ARM: dts: BCM5301X: Add DT for Meraki MR26
+
+Meraki MR26 is an EOL wireless access point featuring a
+PoE ethernet port and two dual-band 3x3 MIMO 802.11n
+radios and 1x1 dual-band WIFI dedicated to scanning.
+
+Thank you Amir for the unit and PSU.
+
+Hardware info:
+SOC   : Broadcom BCM53015A1KFEBG (dual-core Cortex-A9 CPU at 800 MHz)
+RAM   : SK Hynix Inc. H5TQ1G63EFR, 1 GBit DDR3 SDRAM = 128 MiB
+NAND  : Spansion S34ML01G100TF100, 1 GBit SLC NAND Flash = 128 MiB
+ETH   : 1 GBit Ethernet Port - PoE (TPS23754 PoE Interface)
+WIFI0 : Broadcom BCM43431KMLG, BCM43431 802.11 abgn (3x3:3)
+WIFI1 : Broadcom BCM43431KMLG, BCM43431 802.11 abgn (3x3:3)
+WIFI2 : Broadcom BCM43428 "Air Marshal" 802.11 abgn (1x1:1)
+BUTTON: One reset key behind a small hole next to the Ethernet Port
+LEDS  : One amber (fault), one white (indicator) LED, separate RGB-LED
+MISC  : Atmel AT24C64 8KiB EEPROM i2c
+      : Ti INA219 26V, 12-bit, i2c output current/voltage/power monitor
+
+SERIAL:
+      WARNING: The serial port needs a TTL/RS-232 3V3 level converter!
+      The Serial setting is 115200-8-N-1. The board has a populated
+      right angle 1x4 0.1" pinheader.
+      The pinout is: VCC (next to J3, has the pin 1 indicator), RX, TX, GND.
+
+Odd stuff:
+
+- uboot does not support lzma compression, but gzip'd uImage/DTB work.
+- uboot claims to support FIT, but fails to pass the DTB to the kernel.
+  Appending the dtb after the kernel image works.
+- RGB-controller is supported through an external userspace program.
+- The ubi partition contains a "board-config" volume. It stores the
+  MAC Address (0x66 in binary) and Serial No. (0x7c alpha-numerical).
+- SoC's temperature sensor always reports that it is on fire.
+  This causes the system to immediately shutdown! Looking at reported
+  "418 degree Celsius" suggests that this sensor is not working.
+
+WIFI:
+b43 is able to initialize all three WIFIs @ 802.11bg.
+| b43-phy0: Broadcom 43431 WLAN found (core revision 29)
+| bcma-pci-bridge 0000:01:00.0: bus1: Switched to core: 0x812
+| b43-phy0: Found PHY: Analog 9, Type 7 (HT), Revision 1
+| b43-phy0: Found Radio: Manuf 0x17F, ID 0x2059, Revision 0, Version 1
+| b43-phy0 warning: 5 GHz band is unsupported on this PHY
+| b43-phy1: Broadcom 43431 WLAN found (core revision 29)
+| bcma-pci-bridge 0001:01:00.0: bus2: Switched to core: 0x812
+| b43-phy1: Found PHY: Analog 9, Type 7 (HT), Revision 1
+| b43-phy1: Found Radio: Manuf 0x17F, ID 0x2059, Revision 0, Version 1
+| b43-phy1 warning: 5 GHz band is unsupported on this PHY
+| b43-phy2: Broadcom 43228 WLAN found (core revision 30)
+| bcma-pci-bridge 0002:01:00.0: bus3: Switched to core: 0x812
+| b43-phy2: Found PHY: Analog 9, Type 4 (N), Revision 16
+| b43-phy2: Found Radio: Manuf 0x17F, ID 0x2057, Revision 9, Version 1
+| Broadcom 43xx driver loaded [ Features: NL ]
+
+Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
+Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
+---
+--- /dev/null
++++ b/arch/arm/boot/dts/bcm53015-meraki-mr26.dts
+@@ -0,0 +1,166 @@
++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
++/*
++ * Broadcom BCM470X / BCM5301X ARM platform code.
++ * DTS for Meraki MR26 / Codename: Venom
++ *
++ * Copyright (C) 2022 Christian Lamparter <chunkeey@gmail.com>
++ */
++
++/dts-v1/;
++
++#include "bcm4708.dtsi"
++#include "bcm5301x-nand-cs0-bch8.dtsi"
++#include <dt-bindings/leds/common.h>
++
++/ {
++      compatible = "meraki,mr26", "brcm,bcm53015", "brcm,bcm4708";
++      model = "Meraki MR26";
++
++      memory@0 {
++              reg = <0x00000000 0x08000000>;
++              device_type = "memory";
++      };
++
++      leds {
++              compatible = "gpio-leds";
++
++              led-0 {
++                      function = LED_FUNCTION_FAULT;
++                      color = <LED_COLOR_ID_AMBER>;
++                      gpios = <&chipcommon 13 GPIO_ACTIVE_HIGH>;
++                      panic-indicator;
++              };
++              led-1 {
++                      function = LED_FUNCTION_INDICATOR;
++                      color = <LED_COLOR_ID_WHITE>;
++                      gpios = <&chipcommon 12 GPIO_ACTIVE_HIGH>;
++              };
++      };
++
++      keys {
++              compatible = "gpio-keys";
++              #address-cells = <1>;
++              #size-cells = <0>;
++
++              key-restart {
++                      label = "Reset";
++                      linux,code = <KEY_RESTART>;
++                      gpios = <&chipcommon 11 GPIO_ACTIVE_LOW>;
++              };
++      };
++};
++
++&uart0 {
++      clock-frequency = <50000000>;
++      /delete-property/ clocks;
++};
++
++&uart1 {
++      status = "disabled";
++};
++
++&gmac0 {
++      status = "okay";
++};
++
++&gmac1 {
++      status = "disabled";
++};
++&gmac2 {
++      status = "disabled";
++};
++&gmac3 {
++      status = "disabled";
++};
++
++&nandcs {
++      nand-ecc-algo = "hw";
++
++      partitions {
++              compatible = "fixed-partitions";
++              #address-cells = <0x1>;
++              #size-cells = <0x1>;
++
++              partition@0 {
++                      label = "u-boot";
++                      reg = <0x0 0x200000>;
++                      read-only;
++              };
++
++              partition@200000 {
++                      label = "u-boot-env";
++                      reg = <0x200000 0x200000>;
++                      /* empty */
++              };
++
++              partition@400000 {
++                      label = "u-boot-backup";
++                      reg = <0x400000 0x200000>;
++                      /* empty */
++              };
++
++              partition@600000 {
++                      label = "u-boot-env-backup";
++                      reg = <0x600000 0x200000>;
++                      /* empty */
++              };
++
++              partition@800000 {
++                      label = "ubi";
++                      reg = <0x800000 0x7780000>;
++              };
++      };
++};
++
++&srab {
++      status = "okay";
++
++      ports {
++              port@0 {
++                      reg = <0>;
++                      label = "poe";
++              };
++
++              port@5 {
++                      reg = <5>;
++                      label = "cpu";
++                      ethernet = <&gmac0>;
++
++                      fixed-link {
++                              speed = <1000>;
++                              duplex-full;
++                      };
++              };
++      };
++};
++
++&i2c0 {
++      status = "okay";
++
++      pinctrl-names = "default";
++      pinctrl-0 = <&pinmux_i2c>;
++
++      clock-frequency = <100000>;
++
++      ina219@40 {
++              compatible = "ti,ina219"; /* PoE power */
++              reg = <0x40>;
++              shunt-resistor = <60000>; /* = 60 mOhms */
++      };
++
++      eeprom@56 {
++              compatible = "atmel,24c64";
++              reg = <0x56>;
++              pagesize = <32>;
++              read-only;
++              #address-cells = <1>;
++              #size-cells = <1>;
++
++              /* it's empty */
++      };
++};
++
++&thermal {
++      status = "disabled";
++      /* does not work, reads 418 degree Celsius */
++};
+--- a/arch/arm/boot/dts/Makefile
++++ b/arch/arm/boot/dts/Makefile
+@@ -129,6 +129,7 @@ dtb-$(CONFIG_ARCH_BCM_5301X) += \
+       bcm47094-luxul-xwr-3150-v1.dtb \
+       bcm47094-netgear-r8500.dtb \
+       bcm47094-phicomm-k3.dtb \
++      bcm53015-meraki-mr26.dtb \
+       bcm53016-meraki-mr32.dtb \
+       bcm94708.dtb \
+       bcm94709.dtb \