bcm53xx: group dts backports by upstream kernel version
[openwrt/openwrt.git] / target / linux / bcm53xx / patches-5.4 / 033-v5.10-0004-ARM-BCM5301X-Add-DT-for-Meraki-MR32.patch
diff --git a/target/linux/bcm53xx/patches-5.4/033-v5.10-0004-ARM-BCM5301X-Add-DT-for-Meraki-MR32.patch b/target/linux/bcm53xx/patches-5.4/033-v5.10-0004-ARM-BCM5301X-Add-DT-for-Meraki-MR32.patch
new file mode 100644 (file)
index 0000000..e96815b
--- /dev/null
@@ -0,0 +1,266 @@
+From ec88a9c344d9fd8c3b11bff1f99a0b6248ae256d Mon Sep 17 00:00:00 2001
+From: Christian Lamparter <chunkeey@gmail.com>
+Date: Sat, 22 Aug 2020 18:19:23 +0200
+Subject: [PATCH] ARM: BCM5301X: Add DT for Meraki MR32
+
+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>
+Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
+---
+ arch/arm/boot/dts/Makefile                 |   1 +
+ arch/arm/boot/dts/bcm53016-meraki-mr32.dts | 197 +++++++++++++++++++++
+ 2 files changed, 198 insertions(+)
+ create mode 100644 arch/arm/boot/dts/bcm53016-meraki-mr32.dts
+
+--- a/arch/arm/boot/dts/Makefile
++++ b/arch/arm/boot/dts/Makefile
+@@ -118,6 +118,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 \
+--- /dev/null
++++ b/arch/arm/boot/dts/bcm53016-meraki-mr32.dts
+@@ -0,0 +1,197 @@
++// 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;
++              };
++      };
++};
++
++&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>;
++              };
++      };
++};