Commit 240b1c6e authored by Arnd Bergmann's avatar Arnd Bergmann

Merge tag 'arm-soc/for-4.6/devicetree' of http://github.com/Broadcom/stblinux into next/dt

Merge "Broadcom devicetree changes for 4.6" from Florian Fainelli:

This pull request contains Broadcom ARM-based SoCs Device Tree changes:

- Rafal adds a Device Tree for the D-Link DIR-885L router which is based on the
  BCM47094 SoC similar to the BCM4709

- Simran adds proper audio clock Device Tree nodes to the Cygnus platforms

- Martin adds the auxiliary SPI controllers, makes the UART naming convention
  more standard, and finally adds the auxiliary UART found in the BCM2835 to the
  BCM2835 Device Tree

- Remi adds PWM clock support to the BCM2835 Device Tree

- Lubomir adds a Device Tree for the Raspberry Pi Model A

- Alexander adds Device Tree information for the Raspberry Pi USB power domain

- Dhananjay enables the GPIO-A controller for the Northstar Plus SoCs

- Jon fixes the PCIE Device Tree nodes by pulling them out of the bus-level node,
  removes duplicate CPU definitions, adds PMU nodes, SP804 timers, and SP805 watchdog
  to the Northstar Plus SoCs

* tag 'arm-soc/for-4.6/devicetree' of http://github.com/Broadcom/stblinux:
  ARM: bcm2835: add bcm2835-aux-uart support to DT
  ARM: dts: NSP: Add SP805 Support to DT
  ARM: dts: NSP: Add SP804 Support to DT
  ARM: dts: NSP: Add PMU Support to DT
  ARM: dts: NSP: Fix CPU DT issue
  ARM: dts: NSP: Fix PCIE DT issue
  ARM: dts: enable GPIO-a for Broadcom NSP
  ARM: bcm2835: Add the Raspberry Pi power domain driver to the DT.
  ARM: bcm2835: dt: Add Raspberry Pi Model A
  ARM: bcm2835: follow dt uart node-naming convention
  ARM: bcm2835: Add PWM clock support to the device tree
  ARM: bcm2835: add the auxiliary spi1 and spi2 to the device tree
  ARM: dts: Add audio clock to the existing Broadcom Cygnus clock DT
  ARM: BCM5301X: Add DT for D-Link DIR-885L
parents ac037ee0 ac07c41c
...@@ -62,6 +62,7 @@ dtb-$(CONFIG_ARCH_AXXIA) += \ ...@@ -62,6 +62,7 @@ dtb-$(CONFIG_ARCH_AXXIA) += \
axm5516-amarillo.dtb axm5516-amarillo.dtb
dtb-$(CONFIG_ARCH_BCM2835) += \ dtb-$(CONFIG_ARCH_BCM2835) += \
bcm2835-rpi-b.dtb \ bcm2835-rpi-b.dtb \
bcm2835-rpi-a.dtb \
bcm2835-rpi-b-rev2.dtb \ bcm2835-rpi-b-rev2.dtb \
bcm2835-rpi-b-plus.dtb \ bcm2835-rpi-b-plus.dtb \
bcm2835-rpi-a-plus.dtb \ bcm2835-rpi-a-plus.dtb \
...@@ -81,6 +82,7 @@ dtb-$(CONFIG_ARCH_BCM_5301X) += \ ...@@ -81,6 +82,7 @@ dtb-$(CONFIG_ARCH_BCM_5301X) += \
bcm4709-buffalo-wxr-1900dhp.dtb \ bcm4709-buffalo-wxr-1900dhp.dtb \
bcm4709-netgear-r7000.dtb \ bcm4709-netgear-r7000.dtb \
bcm4709-netgear-r8000.dtb \ bcm4709-netgear-r8000.dtb \
bcm47094-dlink-dir-885l.dtb \
bcm94708.dtb \ bcm94708.dtb \
bcm94709.dtb \ bcm94709.dtb \
bcm953012k.dtb bcm953012k.dtb
......
...@@ -121,4 +121,13 @@ asiu_clks: asiu_clks { ...@@ -121,4 +121,13 @@ asiu_clks: asiu_clks {
clocks = <&osc>; clocks = <&osc>;
clock-output-names = "keypad", "adc/touch", "pwm"; clock-output-names = "keypad", "adc/touch", "pwm";
}; };
audiopll: audiopll {
#clock-cells = <1>;
compatible = "brcm,cygnus-audiopll";
reg = <0x180aeb00 0x68>;
clocks = <&osc>;
clock-output-names = "audiopll", "ch0_audio",
"ch1_audio", "ch2_audio";
};
}; };
...@@ -45,14 +45,14 @@ cpus { ...@@ -45,14 +45,14 @@ cpus {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
cpu@0 { cpu0: cpu@0 {
device_type = "cpu"; device_type = "cpu";
compatible = "arm,cortex-a9"; compatible = "arm,cortex-a9";
next-level-cache = <&L2>; next-level-cache = <&L2>;
reg = <0x0>; reg = <0x0>;
}; };
cpu@1 { cpu1: cpu@1 {
device_type = "cpu"; device_type = "cpu";
compatible = "arm,cortex-a9"; compatible = "arm,cortex-a9";
next-level-cache = <&L2>; next-level-cache = <&L2>;
...@@ -62,24 +62,19 @@ cpu@1 { ...@@ -62,24 +62,19 @@ cpu@1 {
}; };
}; };
pmu {
compatible = "arm,cortex-a9-pmu";
interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH
GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
interrupt-affinity = <&cpu0>, <&cpu1>;
};
mpcore { mpcore {
compatible = "simple-bus"; compatible = "simple-bus";
ranges = <0x00000000 0x19000000 0x00023000>; ranges = <0x00000000 0x19000000 0x00023000>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu@0 {
device_type = "cpu";
compatible = "arm,cortex-a9";
next-level-cache = <&L2>;
reg = <0x0>;
};
};
a9pll: arm_clk@00000 { a9pll: arm_clk@00000 {
#clock-cells = <0>; #clock-cells = <0>;
compatible = "brcm,nsp-armpll"; compatible = "brcm,nsp-armpll";
...@@ -169,6 +164,18 @@ axi { ...@@ -169,6 +164,18 @@ axi {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
gpioa: gpio@0020 {
compatible = "brcm,nsp-gpio-a";
reg = <0x0020 0x70>,
<0x3f1c4 0x1c>;
#gpio-cells = <2>;
gpio-controller;
ngpios = <32>;
interrupt-controller;
interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>;
gpio-ranges = <&pinctrl 0 0 32>;
};
uart0: serial@0300 { uart0: serial@0300 {
compatible = "ns16550a"; compatible = "ns16550a";
reg = <0x0300 0x100>; reg = <0x0300 0x100>;
...@@ -185,78 +192,6 @@ uart1: serial@0400 { ...@@ -185,78 +192,6 @@ uart1: serial@0400 {
status = "disabled"; status = "disabled";
}; };
pcie0: pcie@12000 {
compatible = "brcm,iproc-pcie";
reg = <0x12000 0x1000>;
#interrupt-cells = <1>;
interrupt-map-mask = <0 0 0 0>;
interrupt-map = <0 0 0 0 &gic GIC_SPI 131 IRQ_TYPE_NONE>;
linux,pci-domain = <0>;
bus-range = <0x00 0xff>;
#address-cells = <3>;
#size-cells = <2>;
device_type = "pci";
/* Note: The HW does not support I/O resources. So,
* only the memory resource range is being specified.
*/
ranges = <0x82000000 0 0x08000000 0x08000000 0 0x8000000>;
status = "disabled";
};
pcie1: pcie@13000 {
compatible = "brcm,iproc-pcie";
reg = <0x13000 0x1000>;
#interrupt-cells = <1>;
interrupt-map-mask = <0 0 0 0>;
interrupt-map = <0 0 0 0 &gic GIC_SPI 137 IRQ_TYPE_NONE>;
linux,pci-domain = <1>;
bus-range = <0x00 0xff>;
#address-cells = <3>;
#size-cells = <2>;
device_type = "pci";
/* Note: The HW does not support I/O resources. So,
* only the memory resource range is being specified.
*/
ranges = <0x82000000 0 0x40000000 0x40000000 0 0x8000000>;
status = "disabled";
};
pcie2: pcie@14000 {
compatible = "brcm,iproc-pcie";
reg = <0x14000 0x1000>;
#interrupt-cells = <1>;
interrupt-map-mask = <0 0 0 0>;
interrupt-map = <0 0 0 0 &gic GIC_SPI 143 IRQ_TYPE_NONE>;
linux,pci-domain = <2>;
bus-range = <0x00 0xff>;
#address-cells = <3>;
#size-cells = <2>;
device_type = "pci";
/* Note: The HW does not support I/O resources. So,
* only the memory resource range is being specified.
*/
ranges = <0x82000000 0 0x48000000 0x48000000 0 0x8000000>;
status = "disabled";
};
nand: nand@26000 { nand: nand@26000 {
compatible = "brcm,nand-iproc", "brcm,brcmnand-v6.1"; compatible = "brcm,nand-iproc", "brcm,brcmnand-v6.1";
reg = <0x026000 0x600>, reg = <0x026000 0x600>,
...@@ -271,6 +206,24 @@ nand: nand@26000 { ...@@ -271,6 +206,24 @@ nand: nand@26000 {
brcm,nand-has-wp; brcm,nand-has-wp;
}; };
ccbtimer0: timer@34000 {
compatible = "arm,sp804";
reg = <0x34000 0x1000>;
interrupts = <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 91 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&iprocslow>;
clock-names = "apb_pclk";
};
ccbtimer1: timer@35000 {
compatible = "arm,sp804";
reg = <0x35000 0x1000>;
interrupts = <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&iprocslow>;
clock-names = "apb_pclk";
};
i2c0: i2c@38000 { i2c0: i2c@38000 {
compatible = "brcm,iproc-i2c"; compatible = "brcm,iproc-i2c";
reg = <0x38000 0x50>; reg = <0x38000 0x50>;
...@@ -280,6 +233,14 @@ i2c0: i2c@38000 { ...@@ -280,6 +233,14 @@ i2c0: i2c@38000 {
clock-frequency = <100000>; clock-frequency = <100000>;
}; };
watchdog@39000 {
compatible = "arm,sp805", "arm,primecell";
reg = <0x39000 0x1000>;
interrupts = <GIC_SPI 126 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&iprocslow>, <&iprocslow>;
clock-names = "wdogclk", "apb_pclk";
};
lcpll0: lcpll0@3f100 { lcpll0: lcpll0@3f100 {
#clock-cells = <1>; #clock-cells = <1>;
compatible = "brcm,nsp-lcpll0"; compatible = "brcm,nsp-lcpll0";
...@@ -306,4 +267,76 @@ pinctrl: pinctrl@3f1c0 { ...@@ -306,4 +267,76 @@ pinctrl: pinctrl@3f1c0 {
<0x3f408 0x04>; <0x3f408 0x04>;
}; };
}; };
pcie0: pcie@18012000 {
compatible = "brcm,iproc-pcie";
reg = <0x18012000 0x1000>;
#interrupt-cells = <1>;
interrupt-map-mask = <0 0 0 0>;
interrupt-map = <0 0 0 0 &gic GIC_SPI 131 IRQ_TYPE_NONE>;
linux,pci-domain = <0>;
bus-range = <0x00 0xff>;
#address-cells = <3>;
#size-cells = <2>;
device_type = "pci";
/* Note: The HW does not support I/O resources. So,
* only the memory resource range is being specified.
*/
ranges = <0x82000000 0 0x08000000 0x08000000 0 0x8000000>;
status = "disabled";
};
pcie1: pcie@18013000 {
compatible = "brcm,iproc-pcie";
reg = <0x18013000 0x1000>;
#interrupt-cells = <1>;
interrupt-map-mask = <0 0 0 0>;
interrupt-map = <0 0 0 0 &gic GIC_SPI 137 IRQ_TYPE_NONE>;
linux,pci-domain = <1>;
bus-range = <0x00 0xff>;
#address-cells = <3>;
#size-cells = <2>;
device_type = "pci";
/* Note: The HW does not support I/O resources. So,
* only the memory resource range is being specified.
*/
ranges = <0x82000000 0 0x40000000 0x40000000 0 0x8000000>;
status = "disabled";
};
pcie2: pcie@18014000 {
compatible = "brcm,iproc-pcie";
reg = <0x18014000 0x1000>;
#interrupt-cells = <1>;
interrupt-map-mask = <0 0 0 0>;
interrupt-map = <0 0 0 0 &gic GIC_SPI 143 IRQ_TYPE_NONE>;
linux,pci-domain = <2>;
bus-range = <0x00 0xff>;
#address-cells = <3>;
#size-cells = <2>;
device_type = "pci";
/* Note: The HW does not support I/O resources. So,
* only the memory resource range is being specified.
*/
ranges = <0x82000000 0 0x48000000 0x48000000 0 0x8000000>;
status = "disabled";
};
}; };
/dts-v1/;
#include "bcm2835.dtsi"
#include "bcm2835-rpi.dtsi"
/ {
compatible = "raspberrypi,model-a", "brcm,bcm2835";
model = "Raspberry Pi Model A";
leds {
act {
gpios = <&gpio 16 1>;
};
};
};
&gpio {
pinctrl-0 = <&gpioout &alt0 &i2s_alt2 &alt3>;
/* I2S interface */
i2s_alt2: i2s_alt2 {
brcm,pins = <28 29 30 31>;
brcm,function = <BCM2835_FSEL_ALT2>;
};
};
#include <dt-bindings/power/raspberrypi-power.h>
/ { / {
memory { memory {
reg = <0 0x10000000>; reg = <0 0x10000000>;
...@@ -18,6 +20,12 @@ firmware: firmware { ...@@ -18,6 +20,12 @@ firmware: firmware {
compatible = "raspberrypi,bcm2835-firmware"; compatible = "raspberrypi,bcm2835-firmware";
mboxes = <&mailbox>; mboxes = <&mailbox>;
}; };
power: power {
compatible = "raspberrypi,bcm2835-power";
firmware = <&firmware>;
#power-domain-cells = <1>;
};
}; };
}; };
...@@ -58,3 +66,11 @@ &sdhci { ...@@ -58,3 +66,11 @@ &sdhci {
status = "okay"; status = "okay";
bus-width = <4>; bus-width = <4>;
}; };
&pwm {
status = "okay";
};
&usb {
power-domains = <&power RPI_POWER_DOMAIN_USB>;
};
#include <dt-bindings/pinctrl/bcm2835.h> #include <dt-bindings/pinctrl/bcm2835.h>
#include <dt-bindings/clock/bcm2835.h> #include <dt-bindings/clock/bcm2835.h>
#include <dt-bindings/clock/bcm2835-aux.h>
#include "skeleton.dtsi" #include "skeleton.dtsi"
/* This include file covers the common peripherals and configuration between /* This include file covers the common peripherals and configuration between
...@@ -111,7 +112,7 @@ gpio: gpio@7e200000 { ...@@ -111,7 +112,7 @@ gpio: gpio@7e200000 {
#interrupt-cells = <2>; #interrupt-cells = <2>;
}; };
uart0: uart@7e201000 { uart0: serial@7e201000 {
compatible = "brcm,bcm2835-pl011", "arm,pl011", "arm,primecell"; compatible = "brcm,bcm2835-pl011", "arm,pl011", "arm,primecell";
reg = <0x7e201000 0x1000>; reg = <0x7e201000 0x1000>;
interrupts = <2 25>; interrupts = <2 25>;
...@@ -159,6 +160,44 @@ aux: aux@0x7e215000 { ...@@ -159,6 +160,44 @@ aux: aux@0x7e215000 {
clocks = <&clocks BCM2835_CLOCK_VPU>; clocks = <&clocks BCM2835_CLOCK_VPU>;
}; };
uart1: serial@7e215040 {
compatible = "brcm,bcm2835-aux-uart";
reg = <0x7e215040 0x40>;
interrupts = <1 29>;
clocks = <&aux BCM2835_AUX_CLOCK_UART>;
status = "disabled";
};
spi1: spi@7e215080 {
compatible = "brcm,bcm2835-aux-spi";
reg = <0x7e215080 0x40>;
interrupts = <1 29>;
clocks = <&aux BCM2835_AUX_CLOCK_SPI1>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
spi2: spi@7e2150c0 {
compatible = "brcm,bcm2835-aux-spi";
reg = <0x7e2150c0 0x40>;
interrupts = <1 29>;
clocks = <&aux BCM2835_AUX_CLOCK_SPI2>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
pwm: pwm@7e20c000 {
compatible = "brcm,bcm2835-pwm";
reg = <0x7e20c000 0x28>;
clocks = <&clocks BCM2835_CLOCK_PWM>;
assigned-clocks = <&clocks BCM2835_CLOCK_PWM>;
assigned-clock-rates = <10000000>;
#pwm-cells = <2>;
status = "disabled";
};
sdhci: sdhci@7e300000 { sdhci: sdhci@7e300000 {
compatible = "brcm,bcm2835-sdhci"; compatible = "brcm,bcm2835-sdhci";
reg = <0x7e300000 0x100>; reg = <0x7e300000 0x100>;
...@@ -187,7 +226,7 @@ i2c2: i2c@7e805000 { ...@@ -187,7 +226,7 @@ i2c2: i2c@7e805000 {
status = "disabled"; status = "disabled";
}; };
usb@7e980000 { usb: usb@7e980000 {
compatible = "brcm,bcm2835-usb"; compatible = "brcm,bcm2835-usb";
reg = <0x7e980000 0x10000>; reg = <0x7e980000 0x10000>;
interrupts = <1 9>; interrupts = <1 9>;
......
/*
* Broadcom BCM470X / BCM5301X ARM platform code.
* DTS for D-Link DIR-885L
*
* Copyright (C) 2016 Rafał Miłecki <zajec5@gmail.com>
*
* Licensed under the GNU/GPL. See COPYING for details.
*/
/dts-v1/;
#include "bcm4708.dtsi"
#include "bcm5301x-nand-cs0-bch8.dtsi"
/ {
compatible = "dlink,dir-885l", "brcm,bcm47094", "brcm,bcm4708";
model = "D-Link DIR-885L";
chosen {
bootargs = "console=ttyS0,115200";
};
memory {
reg = <0x00000000 0x08000000>;
};
nand: nand@18028000 {
nandcs@0 {
partition@0 {
label = "firmware";
reg = <0x00000000 0x08000000>;
};
};
};
leds {
compatible = "gpio-leds";
power-white {
label = "bcm53xx:white:power";
gpios = <&chipcommon 0 GPIO_ACTIVE_LOW>;
linux,default-trigger = "default-on";
};
wan-white {
label = "bcm53xx:white:wan";
gpios = <&chipcommon 1 GPIO_ACTIVE_LOW>;
linux,default-trigger = "default-off";
};
power-amber {
label = "bcm53xx:amber:power";
gpios = <&chipcommon 2 GPIO_ACTIVE_LOW>;
linux,default-trigger = "default-off";
};
wan-amber {
label = "bcm53xx:amber:wan";
gpios = <&chipcommon 3 GPIO_ACTIVE_LOW>;
linux,default-trigger = "default-off";
};
usb3-white {
label = "bcm53xx:white:usb3";
gpios = <&chipcommon 8 GPIO_ACTIVE_LOW>;
linux,default-trigger = "default-off";
};
2ghz {
label = "bcm53xx:white:2ghz";
gpios = <&chipcommon 13 GPIO_ACTIVE_LOW>;
linux,default-trigger = "default-off";
};
5ghz {
label = "bcm53xx:white:5ghz";
gpios = <&chipcommon 14 GPIO_ACTIVE_LOW>;
linux,default-trigger = "default-off";
};
};
gpio-keys {
compatible = "gpio-keys";
#address-cells = <1>;
#size-cells = <0>;
wps {
label = "WPS";
linux,code = <KEY_WPS_BUTTON>;
gpios = <&chipcommon 7 GPIO_ACTIVE_LOW>;
};
/* Switch: router / extender */
extender {
label = "Extender";
linux,code = <BTN_0>;
gpios = <&chipcommon 10 GPIO_ACTIVE_LOW>;
};
restart {
label = "Reset";
linux,code = <KEY_RESTART>;
gpios = <&chipcommon 17 GPIO_ACTIVE_LOW>;
};
};
};
&uart0 {
status = "okay";
clock-frequency = <125000000>;
};
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment