diff mbox series

[v2,6/6] ARM: BCM5301X: Add DT for Meraki MR32

Message ID e1646714f56452f63340df991e0b7d90f456d515.1598111680.git.chunkeey@gmail.com (mailing list archive)
State New, archived
Headers show
Series ARM: BCM5301X: add Meraki MR32 series | expand

Commit Message

Christian Lamparter Aug. 22, 2020, 4:19 p.m. UTC
add support for the Cisco Meraki MR32.
This is a dual-band enterprise class 802.11ac access point.
The unit was donated by Chris Blake. Thank you!

SoC:    Broadcom BCM53016A1 (1 GHz, 2 cores)
RAM:    128 MiB
NAND:   128 MiB Spansion S34ML01G2 (~114 MiB useable)
ETH:    1GBit Ethernet Port - PoE
WIFI1:  Broadcom BCM43520 an+ac (2x2:2 - id: 0x4352)
WIFI2:  Broadcom BCM43520 bgn (2x2:2 - id: 0x4352)
WIFI3:  Broadcom BCM43428 abgn (1x1:1 - id: 43428)

BLE:    Broadcom BCM20732 (ttyS1)
LEDS:   1 x Programmable RGB Status LED (driven by a PWM)
        1 x White LED (GPIO)
        1 x Orange LED Fault Indicator (GPIO)
        2 x LAN Activity / Speed LEDs (On the RJ45 Port)
BUTTON: one Reset button
MISC:   AT24C64 8KiB EEPROM (i2c - stores Ethernet MAC)
        ina219 hardware monitor (i2c)
        Kensington Lock

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, RX, TX, GND.

Odd stuff:
	- uart0 clock frequency is 62.5 MHz.
	- The LEDs are labeled as SYS-LED1 through SYS-LED3
	  because of the silkscreen on the PCB.
	- the original u-boot has been compiled with most functions
	  and commands disabled. The u-boot env isn't setup properly
	  either and as a result, the bcm47xxpart probing is not
	  working. Hence, the nand partitions are specified through a
	  "fixed-partition" binding.
	- The "WICED SMART(TM)" Bluetooth LE 4.0 BCM20732 chip is
	  connected to uart2 of the SoC. The BCM20732 does not
	  provide a HCI. So the linux' bluetooth stack is useless.
	  The mock-up node with the compatible binding and
	  enable-gpios property is provided solely as documentation.

Signed-off-by: Christian Lamparter <chunkeey@gmail.com>

---

v1 -> v2:
	- fixed order of boards in Makefile. (Scott Branden)
	- added device_type to memory node. (Florian Fainelli)
	- added hw i2c, although doesn't work. (Florian Fainelli)
	- renamed gpio-keys to just keys.
	- included pinmux configurations for i2c and pwm.
---
 arch/arm/boot/dts/Makefile                 |   1 +
 arch/arm/boot/dts/bcm53016-meraki-mr32.dts | 219 +++++++++++++++++++++
 2 files changed, 220 insertions(+)
 create mode 100644 arch/arm/boot/dts/bcm53016-meraki-mr32.dts

Comments

Florian Fainelli Aug. 27, 2020, 12:03 a.m. UTC | #1
On Sat, 22 Aug 2020 18:19:23 +0200, Christian Lamparter <chunkeey@gmail.com> wrote:
> add support for the Cisco Meraki MR32.
> This is a dual-band enterprise class 802.11ac access point.
> The unit was donated by Chris Blake. Thank you!
> 
> SoC:    Broadcom BCM53016A1 (1 GHz, 2 cores)
> RAM:    128 MiB
> NAND:   128 MiB Spansion S34ML01G2 (~114 MiB useable)
> ETH:    1GBit Ethernet Port - PoE
> WIFI1:  Broadcom BCM43520 an+ac (2x2:2 - id: 0x4352)
> WIFI2:  Broadcom BCM43520 bgn (2x2:2 - id: 0x4352)
> WIFI3:  Broadcom BCM43428 abgn (1x1:1 - id: 43428)
> 
> BLE:    Broadcom BCM20732 (ttyS1)
> LEDS:   1 x Programmable RGB Status LED (driven by a PWM)
>         1 x White LED (GPIO)
>         1 x Orange LED Fault Indicator (GPIO)
>         2 x LAN Activity / Speed LEDs (On the RJ45 Port)
> BUTTON: one Reset button
> MISC:   AT24C64 8KiB EEPROM (i2c - stores Ethernet MAC)
>         ina219 hardware monitor (i2c)
>         Kensington Lock
> 
> 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, RX, TX, GND.
> 
> Odd stuff:
> 	- uart0 clock frequency is 62.5 MHz.
> 	- The LEDs are labeled as SYS-LED1 through SYS-LED3
> 	  because of the silkscreen on the PCB.
> 	- the original u-boot has been compiled with most functions
> 	  and commands disabled. The u-boot env isn't setup properly
> 	  either and as a result, the bcm47xxpart probing is not
> 	  working. Hence, the nand partitions are specified through a
> 	  "fixed-partition" binding.
> 	- The "WICED SMART(TM)" Bluetooth LE 4.0 BCM20732 chip is
> 	  connected to uart2 of the SoC. The BCM20732 does not
> 	  provide a HCI. So the linux' bluetooth stack is useless.
> 	  The mock-up node with the compatible binding and
> 	  enable-gpios property is provided solely as documentation.
> 
> Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
> 
> ---

Applied to devicetree/next, thanks!
--
Florian
Florian Fainelli Sept. 10, 2020, 8:38 p.m. UTC | #2
On 8/22/2020 9:19 AM, Christian Lamparter wrote:
> add support for the Cisco Meraki MR32.
> This is a dual-band enterprise class 802.11ac access point.
> The unit was donated by Chris Blake. Thank you!
> 
> SoC:    Broadcom BCM53016A1 (1 GHz, 2 cores)
> RAM:    128 MiB
> NAND:   128 MiB Spansion S34ML01G2 (~114 MiB useable)
> ETH:    1GBit Ethernet Port - PoE
> WIFI1:  Broadcom BCM43520 an+ac (2x2:2 - id: 0x4352)
> WIFI2:  Broadcom BCM43520 bgn (2x2:2 - id: 0x4352)
> WIFI3:  Broadcom BCM43428 abgn (1x1:1 - id: 43428)
> 
> BLE:    Broadcom BCM20732 (ttyS1)
> LEDS:   1 x Programmable RGB Status LED (driven by a PWM)
>          1 x White LED (GPIO)
>          1 x Orange LED Fault Indicator (GPIO)
>          2 x LAN Activity / Speed LEDs (On the RJ45 Port)
> BUTTON: one Reset button
> MISC:   AT24C64 8KiB EEPROM (i2c - stores Ethernet MAC)
>          ina219 hardware monitor (i2c)
>          Kensington Lock
> 
> 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, RX, TX, GND.
> 
> Odd stuff:
> 	- uart0 clock frequency is 62.5 MHz.
> 	- The LEDs are labeled as SYS-LED1 through SYS-LED3
> 	  because of the silkscreen on the PCB.
> 	- the original u-boot has been compiled with most functions
> 	  and commands disabled. The u-boot env isn't setup properly
> 	  either and as a result, the bcm47xxpart probing is not
> 	  working. Hence, the nand partitions are specified through a
> 	  "fixed-partition" binding.
> 	- The "WICED SMART(TM)" Bluetooth LE 4.0 BCM20732 chip is
> 	  connected to uart2 of the SoC. The BCM20732 does not
> 	  provide a HCI. So the linux' bluetooth stack is useless.
> 	  The mock-up node with the compatible binding and
> 	  enable-gpios property is provided solely as documentation.
> 
> Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
> 
> ---
> 
> v1 -> v2:
> 	- fixed order of boards in Makefile. (Scott Branden)
> 	- added device_type to memory node. (Florian Fainelli)
> 	- added hw i2c, although doesn't work. (Florian Fainelli)
> 	- renamed gpio-keys to just keys.
> 	- included pinmux configurations for i2c and pwm.
> ---
>   arch/arm/boot/dts/Makefile                 |   1 +
>   arch/arm/boot/dts/bcm53016-meraki-mr32.dts | 219 +++++++++++++++++++++
>   2 files changed, 220 insertions(+)
>   create mode 100644 arch/arm/boot/dts/bcm53016-meraki-mr32.dts
> 
> diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
> index 4572db3fa5ae..d254ca2a942d 100644
> --- a/arch/arm/boot/dts/Makefile
> +++ b/arch/arm/boot/dts/Makefile
> @@ -127,6 +127,7 @@ dtb-$(CONFIG_ARCH_BCM_5301X) += \
>   	bcm47094-luxul-xwr-3150-v1.dtb \
>   	bcm47094-netgear-r8500.dtb \
>   	bcm47094-phicomm-k3.dtb \
> +	bcm53016-meraki-mr32.dtb \
>   	bcm94708.dtb \
>   	bcm94709.dtb \
>   	bcm953012er.dtb \
> diff --git a/arch/arm/boot/dts/bcm53016-meraki-mr32.dts b/arch/arm/boot/dts/bcm53016-meraki-mr32.dts
> new file mode 100644
> index 000000000000..7306df7ff704
> --- /dev/null
> +++ b/arch/arm/boot/dts/bcm53016-meraki-mr32.dts
> @@ -0,0 +1,219 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
> +/*
> + * Broadcom BCM470X / BCM5301X ARM platform code.
> + * DTS for Meraki MR32 / Codename: Espresso
> + *
> + * Copyright (C) 2018-2020 Christian Lamparter <chunkeey@gmail.com>
> + */
> +
> +/dts-v1/;
> +
> +#include "bcm4708.dtsi"
> +#include "bcm5301x-nand-cs0-bch8.dtsi"
> +#include <dt-bindings/leds/common.h>
> +
> +/ {
> +	compatible = "meraki,mr32", "brcm,brcm53016", "brcm,bcm4708";
> +	model = "Meraki MR32";
> +
> +	chosen {
> +		bootargs = " console=ttyS0,115200n8 earlycon";
> +	};
> +
> +	memory {
> +		reg = <0x00000000 0x08000000>;
> +		device_type = "memory";
> +	};
> +
> +	aliases {
> +		serial1 = &uart2;
> +	};
> +
> +	leds {
> +		compatible = "gpio-leds";
> +
> +		sysled3 {
> +			function = LED_FUNCTION_FAULT;
> +			color = <LED_COLOR_ID_AMBER>;
> +			gpios = <&chipcommon 18 GPIO_ACTIVE_LOW>;
> +			panic-indicator;
> +		};
> +		sysled2 {
> +			function = LED_FUNCTION_INDICATOR;
> +			color = <LED_COLOR_ID_WHITE>;
> +			gpios = <&chipcommon 19 GPIO_ACTIVE_HIGH>;
> +		};
> +	};
> +
> +	keys {
> +		compatible = "gpio-keys";
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +
> +		restart {
> +			label = "Reset";
> +			linux,code = <KEY_RESTART>;
> +			gpios = <&chipcommon 21 GPIO_ACTIVE_LOW>;
> +		};
> +	};
> +
> +	pwm-leds {
> +		compatible = "pwm-leds";
> +
> +		red {
> +			/* SYS-LED 1 - Tricolor */
> +			function = LED_FUNCTION_INDICATOR;
> +			color = <LED_COLOR_ID_RED>;
> +			pwms = <&pwm 0 50000 0>;
> +			max-brightness = <255>;
> +		};
> +
> +		green {
> +			/* SYS-LED 1 - Tricolor */
> +			function = LED_FUNCTION_POWER;
> +			color = <LED_COLOR_ID_GREEN>;
> +			pwms = <&pwm 1 50000 0>;
> +			max-brightness = <255>;
> +		};
> +
> +		blue {
> +			/* SYS-LED 1 - Tricolor */
> +			function = LED_FUNCTION_INDICATOR;
> +			color = <LED_COLOR_ID_BLUE>;
> +			pwms = <&pwm 2 50000 0>;
> +			max-brightness = <255>;
> +		};
> +	};
> +
> +	i2c {
> +		/*
> +		 * The platform provided I2C does not budge.
> +		 * This is a replacement until I can figure
> +		 * out what are the missing bits...
> +		 */
> +
> +		compatible = "i2c-gpio";
> +		sda-gpios = <&chipcommon 5 GPIO_ACTIVE_HIGH>;
> +		scl-gpios = <&chipcommon 4 GPIO_ACTIVE_HIGH>;
> +		i2c-gpio,delay-us = <10>; /* close to 100 kHz */
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +
> +		current_sense: ina219@45 {
> +			compatible = "ti,ina219";
> +			reg = <0x45>;
> +			shunt-resistor = <60000>; /* = 60 mOhms */
> +		};
> +
> +		eeprom: eeprom@50 {
> +			compatible = "atmel,24c64";
> +			reg = <0x50>;
> +			pagesize = <32>;
> +			read-only;
> +		};
> +	};
> +};
> +
> +&i2c0 {
> +	/* status = "okay"; - can be enabled once it works. */
> +
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&pinmux_i2c>;
> +
> +	clock-frequency = <100000>;
> +
> +	current_sense: ina219@45 {
> +		compatible = "ti,ina219";
> +		reg = <0x45>;
> +		shunt-resistor = <60000>; /* = 60 mOhms */
> +	};
> +
> +	eeprom: eeprom@50 {
> +		compatible = "atmel,24c64";
> +		reg = <0x50>;
> +		pagesize = <32>;
> +		read-only;
> +	};

These would create duplicate labels which are hard errors per DTC, so I 
took out the entire &i2c0 override here into what I merged into 
devicetree/next.

This cannot have built for you unless you run dtc with the force flag, 
is that how OpenWrt does it?
Christian Lamparter Sept. 11, 2020, 5:27 p.m. UTC | #3
Hello,

On 2020-09-10 22:38, Florian Fainelli wrote:
> 
> 
> On 8/22/2020 9:19 AM, Christian Lamparter wrote:
>> add support for the Cisco Meraki MR32.
>> This is a dual-band enterprise class 802.11ac access point.
>> The unit was donated by Chris Blake. Thank you!
>>
[...]

>> +
>> +    i2c {
>> +        /*
>> +         * The platform provided I2C does not budge.
>> +         * This is a replacement until I can figure
>> +         * out what are the missing bits...
>> +         */
>> +
>> +        compatible = "i2c-gpio";
>> +        sda-gpios = <&chipcommon 5 GPIO_ACTIVE_HIGH>;
>> +        scl-gpios = <&chipcommon 4 GPIO_ACTIVE_HIGH>;
>> +        i2c-gpio,delay-us = <10>; /* close to 100 kHz */
>> +        #address-cells = <1>;
>> +        #size-cells = <0>;
>> +
>> +        current_sense: ina219@45 {
>> +            compatible = "ti,ina219";
>> +            reg = <0x45>;
>> +            shunt-resistor = <60000>; /* = 60 mOhms */
>> +        };
>> +
>> +        eeprom: eeprom@50 {
>> +            compatible = "atmel,24c64";
>> +            reg = <0x50>;
>> +            pagesize = <32>;
>> +            read-only;
>> +        };
>> +    };
>> +};
>> +
>> +&i2c0 {
>> +    /* status = "okay"; - can be enabled once it works. */
>> +
>> +    pinctrl-names = "default";
>> +    pinctrl-0 = <&pinmux_i2c>;
>> +
>> +    clock-frequency = <100000>;
>> +
>> +    current_sense: ina219@45 {
>> +        compatible = "ti,ina219";
>> +        reg = <0x45>;
>> +        shunt-resistor = <60000>; /* = 60 mOhms */
>> +    };
>> +
>> +    eeprom: eeprom@50 {
>> +        compatible = "atmel,24c64";
>> +        reg = <0x50>;
>> +        pagesize = <32>;
>> +        read-only;
>> +    };
> 
> These would create duplicate labels which are hard errors per DTC,
> so I took out the entire &i2c0 override here into what I merged into devicetree/next.
> 
> This cannot have built for you unless you run dtc with the force flag, is that how OpenWrt does it?

I'm sorry for my mistake. Yes, I looked at this now again and my tree had this uncommited change :(.

---
$ git diff
diff --git a/arch/arm/boot/dts/bcm53016-meraki-mr32.dts b/arch/arm/boot/dts/bcm53016-meraki-mr32.dts
index 7306df7ff704..35e733b0db62 100644
--- a/arch/arm/boot/dts/bcm53016-meraki-mr32.dts
+++ b/arch/arm/boot/dts/bcm53016-meraki-mr32.dts
@@ -122,13 +122,13 @@ &i2c0 {

         clock-frequency = <100000>;

-       current_sense: ina219@45 {
+       /* current_sense: */ ina219@45 {
                 compatible = "ti,ina219";
                 reg = <0x45>;
                 shunt-resistor = <60000>; /* = 60 mOhms */
         };

-       eeprom: eeprom@50 {
+       /* eeprom: */ eeprom@50 {
                 compatible = "atmel,24c64";
                 reg = <0x50>;
                 pagesize = <32>;
---

Didn't show up when running make.

In the OpenWrt version (As OpenWrt is currently using a patched 5.4)
the labels on the non-functioning i2c node are commented-out.

<https://patchwork.ozlabs.org/project/openwrt/patch/c647ad56b4adb449cd448a2bc56d58058fd06e6f.1599346205.git.chunkeey@gmail.com/>

|++&i2c0 {
|[...] (Cut)
|++
|++	/* current_sense: */ ina219@45 {
|++		compatible = "ti,ina219";
|++		reg = <0x45>;
|++		shunt-resistor = <60000>; /* = 60 mOhms */
|++	};
|++
|++	/* eeprom: */ eeprom@50 {
|++		compatible = "atmel,24c64";
|++		reg = <0x50>;
|++		pagesize = <32>;
|++		read-only;
|++	};
|++};

Ok, I'll drop the &i2c node as well in my MR32 OpenWrt series.
But I'll keep a patch with the i2c node in my openwrt staging tree.

(I can't find devicetree/next on https://git.kernel.org/ .
Can you please tell me the link to it?)


Cheers,
Christian
Florian Fainelli Sept. 11, 2020, 5:30 p.m. UTC | #4
On 9/11/2020 10:27 AM, Christian Lamparter wrote:
> Hello,
> 
> On 2020-09-10 22:38, Florian Fainelli wrote:
>>
>>
>> On 8/22/2020 9:19 AM, Christian Lamparter wrote:
>>> add support for the Cisco Meraki MR32.
>>> This is a dual-band enterprise class 802.11ac access point.
>>> The unit was donated by Chris Blake. Thank you!
>>>
> [...]
> 
>>> +
>>> +    i2c {
>>> +        /*
>>> +         * The platform provided I2C does not budge.
>>> +         * This is a replacement until I can figure
>>> +         * out what are the missing bits...
>>> +         */
>>> +
>>> +        compatible = "i2c-gpio";
>>> +        sda-gpios = <&chipcommon 5 GPIO_ACTIVE_HIGH>;
>>> +        scl-gpios = <&chipcommon 4 GPIO_ACTIVE_HIGH>;
>>> +        i2c-gpio,delay-us = <10>; /* close to 100 kHz */
>>> +        #address-cells = <1>;
>>> +        #size-cells = <0>;
>>> +
>>> +        current_sense: ina219@45 {
>>> +            compatible = "ti,ina219";
>>> +            reg = <0x45>;
>>> +            shunt-resistor = <60000>; /* = 60 mOhms */
>>> +        };
>>> +
>>> +        eeprom: eeprom@50 {
>>> +            compatible = "atmel,24c64";
>>> +            reg = <0x50>;
>>> +            pagesize = <32>;
>>> +            read-only;
>>> +        };
>>> +    };
>>> +};
>>> +
>>> +&i2c0 {
>>> +    /* status = "okay"; - can be enabled once it works. */
>>> +
>>> +    pinctrl-names = "default";
>>> +    pinctrl-0 = <&pinmux_i2c>;
>>> +
>>> +    clock-frequency = <100000>;
>>> +
>>> +    current_sense: ina219@45 {
>>> +        compatible = "ti,ina219";
>>> +        reg = <0x45>;
>>> +        shunt-resistor = <60000>; /* = 60 mOhms */
>>> +    };
>>> +
>>> +    eeprom: eeprom@50 {
>>> +        compatible = "atmel,24c64";
>>> +        reg = <0x50>;
>>> +        pagesize = <32>;
>>> +        read-only;
>>> +    };
>>
>> These would create duplicate labels which are hard errors per DTC,
>> so I took out the entire &i2c0 override here into what I merged into 
>> devicetree/next.
>>
>> This cannot have built for you unless you run dtc with the force flag, 
>> is that how OpenWrt does it?
> 
> I'm sorry for my mistake. Yes, I looked at this now again and my tree 
> had this uncommited change :(.
> 
> ---
> $ git diff
> diff --git a/arch/arm/boot/dts/bcm53016-meraki-mr32.dts 
> b/arch/arm/boot/dts/bcm53016-meraki-mr32.dts
> index 7306df7ff704..35e733b0db62 100644
> --- a/arch/arm/boot/dts/bcm53016-meraki-mr32.dts
> +++ b/arch/arm/boot/dts/bcm53016-meraki-mr32.dts
> @@ -122,13 +122,13 @@ &i2c0 {
> 
>          clock-frequency = <100000>;
> 
> -       current_sense: ina219@45 {
> +       /* current_sense: */ ina219@45 {
>                  compatible = "ti,ina219";
>                  reg = <0x45>;
>                  shunt-resistor = <60000>; /* = 60 mOhms */
>          };
> 
> -       eeprom: eeprom@50 {
> +       /* eeprom: */ eeprom@50 {
>                  compatible = "atmel,24c64";
>                  reg = <0x50>;
>                  pagesize = <32>;
> ---
> 
> Didn't show up when running make.
> 
> In the OpenWrt version (As OpenWrt is currently using a patched 5.4)
> the labels on the non-functioning i2c node are commented-out.
> 
> <https://patchwork.ozlabs.org/project/openwrt/patch/c647ad56b4adb449cd448a2bc56d58058fd06e6f.1599346205.git.chunkeey@gmail.com/> 
> 
> 
> |++&i2c0 {
> |[...] (Cut)
> |++
> |++    /* current_sense: */ ina219@45 {
> |++        compatible = "ti,ina219";
> |++        reg = <0x45>;
> |++        shunt-resistor = <60000>; /* = 60 mOhms */
> |++    };
> |++
> |++    /* eeprom: */ eeprom@50 {
> |++        compatible = "atmel,24c64";
> |++        reg = <0x50>;
> |++        pagesize = <32>;
> |++        read-only;
> |++    };
> |++};
> 
> Ok, I'll drop the &i2c node as well in my MR32 OpenWrt series.
> But I'll keep a patch with the i2c node in my openwrt staging tree.
> 
> (I can't find devicetree/next on https://git.kernel.org/ .
> Can you please tell me the link to it?)

https://github.com/Broadcom/stblinux/commits/devicetree/next
diff mbox series

Patch

diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index 4572db3fa5ae..d254ca2a942d 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -127,6 +127,7 @@  dtb-$(CONFIG_ARCH_BCM_5301X) += \
 	bcm47094-luxul-xwr-3150-v1.dtb \
 	bcm47094-netgear-r8500.dtb \
 	bcm47094-phicomm-k3.dtb \
+	bcm53016-meraki-mr32.dtb \
 	bcm94708.dtb \
 	bcm94709.dtb \
 	bcm953012er.dtb \
diff --git a/arch/arm/boot/dts/bcm53016-meraki-mr32.dts b/arch/arm/boot/dts/bcm53016-meraki-mr32.dts
new file mode 100644
index 000000000000..7306df7ff704
--- /dev/null
+++ b/arch/arm/boot/dts/bcm53016-meraki-mr32.dts
@@ -0,0 +1,219 @@ 
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/*
+ * Broadcom BCM470X / BCM5301X ARM platform code.
+ * DTS for Meraki MR32 / Codename: Espresso
+ *
+ * Copyright (C) 2018-2020 Christian Lamparter <chunkeey@gmail.com>
+ */
+
+/dts-v1/;
+
+#include "bcm4708.dtsi"
+#include "bcm5301x-nand-cs0-bch8.dtsi"
+#include <dt-bindings/leds/common.h>
+
+/ {
+	compatible = "meraki,mr32", "brcm,brcm53016", "brcm,bcm4708";
+	model = "Meraki MR32";
+
+	chosen {
+		bootargs = " console=ttyS0,115200n8 earlycon";
+	};
+
+	memory {
+		reg = <0x00000000 0x08000000>;
+		device_type = "memory";
+	};
+
+	aliases {
+		serial1 = &uart2;
+	};
+
+	leds {
+		compatible = "gpio-leds";
+
+		sysled3 {
+			function = LED_FUNCTION_FAULT;
+			color = <LED_COLOR_ID_AMBER>;
+			gpios = <&chipcommon 18 GPIO_ACTIVE_LOW>;
+			panic-indicator;
+		};
+		sysled2 {
+			function = LED_FUNCTION_INDICATOR;
+			color = <LED_COLOR_ID_WHITE>;
+			gpios = <&chipcommon 19 GPIO_ACTIVE_HIGH>;
+		};
+	};
+
+	keys {
+		compatible = "gpio-keys";
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		restart {
+			label = "Reset";
+			linux,code = <KEY_RESTART>;
+			gpios = <&chipcommon 21 GPIO_ACTIVE_LOW>;
+		};
+	};
+
+	pwm-leds {
+		compatible = "pwm-leds";
+
+		red {
+			/* SYS-LED 1 - Tricolor */
+			function = LED_FUNCTION_INDICATOR;
+			color = <LED_COLOR_ID_RED>;
+			pwms = <&pwm 0 50000 0>;
+			max-brightness = <255>;
+		};
+
+		green {
+			/* SYS-LED 1 - Tricolor */
+			function = LED_FUNCTION_POWER;
+			color = <LED_COLOR_ID_GREEN>;
+			pwms = <&pwm 1 50000 0>;
+			max-brightness = <255>;
+		};
+
+		blue {
+			/* SYS-LED 1 - Tricolor */
+			function = LED_FUNCTION_INDICATOR;
+			color = <LED_COLOR_ID_BLUE>;
+			pwms = <&pwm 2 50000 0>;
+			max-brightness = <255>;
+		};
+	};
+
+	i2c {
+		/*
+		 * The platform provided I2C does not budge.
+		 * This is a replacement until I can figure
+		 * out what are the missing bits...
+		 */
+
+		compatible = "i2c-gpio";
+		sda-gpios = <&chipcommon 5 GPIO_ACTIVE_HIGH>;
+		scl-gpios = <&chipcommon 4 GPIO_ACTIVE_HIGH>;
+		i2c-gpio,delay-us = <10>; /* close to 100 kHz */
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		current_sense: ina219@45 {
+			compatible = "ti,ina219";
+			reg = <0x45>;
+			shunt-resistor = <60000>; /* = 60 mOhms */
+		};
+
+		eeprom: eeprom@50 {
+			compatible = "atmel,24c64";
+			reg = <0x50>;
+			pagesize = <32>;
+			read-only;
+		};
+	};
+};
+
+&i2c0 {
+	/* status = "okay"; - can be enabled once it works. */
+
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinmux_i2c>;
+
+	clock-frequency = <100000>;
+
+	current_sense: ina219@45 {
+		compatible = "ti,ina219";
+		reg = <0x45>;
+		shunt-resistor = <60000>; /* = 60 mOhms */
+	};
+
+	eeprom: eeprom@50 {
+		compatible = "atmel,24c64";
+		reg = <0x50>;
+		pagesize = <32>;
+		read-only;
+	};
+};
+
+&uart0 {
+	clock-frequency = <62500000>;
+	/delete-property/ clocks;
+};
+
+&uart1 {
+	status = "disabled";
+};
+
+&uart2 {
+	status = "okay";
+	/*
+	 * bluetooth-le {
+	 *	compatible = "brcm,bcm20732";
+	 *	enable-gpios = <&chipcommon 20 GPIO_ACTIVE_HIGH>;
+	 *};
+	 */
+};
+
+&gmac1 {
+	status = "disabled";
+};
+&gmac2 {
+	status = "disabled";
+};
+&gmac3 {
+	status = "disabled";
+};
+
+&pwm {
+	status = "okay";
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinmux_pwm>;
+};
+
+&nandcs {
+	nand-ecc-algo = "hw";
+
+	partitions {
+		/*
+		 * The partition autodetection does not work for this device.
+		 * It will only detect the "nvram" partition with an incorrect size.
+		 *	[    1.721667] 1 bcm47xxpart partitions found on MTD device brcmnand.0
+		 *	[    1.727962] Creating 1 MTD partitions on "brcmnand.0":
+		 *	[    1.733117] 0x000000400000-0x000008000000 : "nvram"
+		 */
+
+		compatible = "fixed-partitions";
+		#address-cells = <0x1>;
+		#size-cells = <0x1>;
+
+		partition0@0 {
+			label = "u-boot";
+			reg = <0x0 0x100000>;
+			read-only;
+		};
+
+		partition1@100000 {
+			label = "bootkernel1";
+			reg = <0x100000 0x300000>;
+			read-only;
+		};
+
+		partition2@400000 {
+			label = "nvram";
+			reg = <0x400000 0x100000>;
+			read-only;
+		};
+
+		partition3@500000 {
+			label = "bootkernel2";
+			reg = <0x500000 0x300000>;
+			read-only;
+		};
+
+		partition4@800000 {
+			label = "ubi";
+			reg = <0x800000 0x7780000>;
+		};
+	};
+};