diff mbox series

[v2] fdt: update bcm283x device tree sources to Linux 4.14 state

Message ID 20171004123916.13789-1-agraf@suse.de
State Accepted
Commit 409f05f259ee5cb3e13b52279ce2365a6f8b8a8b
Headers show
Series [v2] fdt: update bcm283x device tree sources to Linux 4.14 state | expand

Commit Message

Alexander Graf Oct. 4, 2017, 12:39 p.m. UTC
Upstream Linux has received a few device tree updates to the RPi
which we should propagate into the builtin U-Boot one as well to
gain hardware support.

This patch bumps the dts files to their 4.14 Linux counterparts
with the exception of sdhost on 32bit RPi versions. There we stay
with iproc as the sdhost driver is missing in U-Boot.

Signed-off-by: Alexander Graf <agraf@suse.de>

---

v1 -> v2:

  - use sdhost on 32bit RPis
---
 arch/arm/dts/bcm2835-rpi-a-plus.dts    |  74 +++++++-
 arch/arm/dts/bcm2835-rpi-a.dts         |  76 +++++++-
 arch/arm/dts/bcm2835-rpi-b-plus.dts    |  75 +++++++-
 arch/arm/dts/bcm2835-rpi-b-rev2.dts    |  75 +++++++-
 arch/arm/dts/bcm2835-rpi-b.dts         |  76 +++++++-
 arch/arm/dts/bcm2835-rpi.dtsi          |  34 +++-
 arch/arm/dts/bcm2835.dtsi              |  10 +
 arch/arm/dts/bcm2836-rpi-2-b.dts       |   9 +-
 arch/arm/dts/bcm2836.dtsi              |  11 ++
 arch/arm/dts/bcm2837-rpi-3-b.dts       |  35 +++-
 arch/arm/dts/bcm2837.dtsi              |  13 +-
 arch/arm/dts/bcm283x-rpi-smsc9512.dtsi |   2 +-
 arch/arm/dts/bcm283x-rpi-smsc9514.dtsi |   2 +-
 arch/arm/dts/bcm283x-rpi-usb-host.dtsi |   3 +
 arch/arm/dts/bcm283x.dtsi              | 325 ++++++++++++++++++++++++++++++++-
 include/dt-bindings/clock/bcm2835.h    |   2 +
 include/dt-bindings/pinctrl/bcm2835.h  |   5 +
 17 files changed, 801 insertions(+), 26 deletions(-)
 create mode 100644 arch/arm/dts/bcm283x-rpi-usb-host.dtsi

Comments

Stefan Wahren Oct. 5, 2017, 4:52 p.m. UTC | #1
Hi Alexander,


Am 04.10.2017 um 14:39 schrieb Alexander Graf:
> Upstream Linux has received a few device tree updates to the RPi
> which we should propagate into the builtin U-Boot one as well to
> gain hardware support.
>
> This patch bumps the dts files to their 4.14 Linux counterparts
> with the exception of sdhost on 32bit RPi versions. There we stay
> with iproc as the sdhost driver is missing in U-Boot.

out of curiosity, why is the RPi Zero isn't included?

Best regards
Stefan

>
> Signed-off-by: Alexander Graf <agraf@suse.de>
>
> ---
>
> v1 -> v2:
>
>    - use sdhost on 32bit RPis
> ---
>   arch/arm/dts/bcm2835-rpi-a-plus.dts    |  74 +++++++-
>   arch/arm/dts/bcm2835-rpi-a.dts         |  76 +++++++-
>   arch/arm/dts/bcm2835-rpi-b-plus.dts    |  75 +++++++-
>   arch/arm/dts/bcm2835-rpi-b-rev2.dts    |  75 +++++++-
>   arch/arm/dts/bcm2835-rpi-b.dts         |  76 +++++++-
>   arch/arm/dts/bcm2835-rpi.dtsi          |  34 +++-
>   arch/arm/dts/bcm2835.dtsi              |  10 +
>   arch/arm/dts/bcm2836-rpi-2-b.dts       |   9 +-
>   arch/arm/dts/bcm2836.dtsi              |  11 ++
>   arch/arm/dts/bcm2837-rpi-3-b.dts       |  35 +++-
>   arch/arm/dts/bcm2837.dtsi              |  13 +-
>   arch/arm/dts/bcm283x-rpi-smsc9512.dtsi |   2 +-
>   arch/arm/dts/bcm283x-rpi-smsc9514.dtsi |   2 +-
>   arch/arm/dts/bcm283x-rpi-usb-host.dtsi |   3 +
>   arch/arm/dts/bcm283x.dtsi              | 325 ++++++++++++++++++++++++++++++++-
>   include/dt-bindings/clock/bcm2835.h    |   2 +
>   include/dt-bindings/pinctrl/bcm2835.h  |   5 +
>   17 files changed, 801 insertions(+), 26 deletions(-)
>   create mode 100644 arch/arm/dts/bcm283x-rpi-usb-host.dtsi
>
> diff --git a/arch/arm/dts/bcm2835-rpi-a-plus.dts b/arch/arm/dts/bcm2835-rpi-a-plus.dts
> index 35ff4e7a4a..9f866491ef 100644
> --- a/arch/arm/dts/bcm2835-rpi-a-plus.dts
> +++ b/arch/arm/dts/bcm2835-rpi-a-plus.dts
> @@ -1,6 +1,7 @@
>   /dts-v1/;
>   #include "bcm2835.dtsi"
>   #include "bcm2835-rpi.dtsi"
> +#include "bcm283x-rpi-usb-host.dtsi"
>   
>   / {
>   	compatible = "raspberrypi,model-a-plus", "brcm,bcm2835";
> @@ -21,7 +22,72 @@
>   };
>   
>   &gpio {
> -	pinctrl-0 = <&gpioout &alt0 &i2s_alt0 &alt3>;
> +	/*
> +	 * This is based on the unreleased schematic for the Model A+.
> +	 *
> +	 * Legend:
> +	 * "NC" = not connected (no rail from the SoC)
> +	 * "FOO" = GPIO line named "FOO" on the schematic
> +	 * "FOO_N" = GPIO line named "FOO" on schematic, active low
> +	 */
> +	gpio-line-names = "SDA0",
> +			  "SCL0",
> +			  "SDA1",
> +			  "SCL1",
> +			  "GPIO_GCLK",
> +			  "GPIO5",
> +			  "GPIO6",
> +			  "SPI_CE1_N",
> +			  "SPI_CE0_N",
> +			  "SPI_MISO",
> +			  "SPI_MOSI",
> +			  "SPI_SCLK",
> +			  "GPIO12",
> +			  "GPIO13",
> +			  /* Serial port */
> +			  "TXD0",
> +			  "RXD0",
> +			  "GPIO16",
> +			  "GPIO17",
> +			  "GPIO18",
> +			  "GPIO19",
> +			  "GPIO20",
> +			  "GPIO21",
> +			  "GPIO22",
> +			  "GPIO23",
> +			  "GPIO24",
> +			  "GPIO25",
> +			  "GPIO26",
> +			  "GPIO27",
> +			  "SDA0",
> +			  "SCL0",
> +			  "NC", /* GPIO30 */
> +			  "NC", /* GPIO31 */
> +			  "CAM_GPIO1", /* GPIO32 */
> +			  "NC", /* GPIO33 */
> +			  "NC", /* GPIO34 */
> +			  "PWR_LOW_N", /* GPIO35 */
> +			  "NC", /* GPIO36 */
> +			  "NC", /* GPIO37 */
> +			  "USB_LIMIT", /* GPIO38 */
> +			  "NC", /* GPIO39 */
> +			  "PWM0_OUT", /* GPIO40 */
> +			  "CAM_GPIO0", /* GPIO41 */
> +			  "NC", /* GPIO42 */
> +			  "NC", /* GPIO43 */
> +			  "NC", /* GPIO44 */
> +			  "PWM1_OUT", /* GPIO45 */
> +			  "HDMI_HPD_N",
> +			  "STATUS_LED",
> +			  /* Used by SD Card */
> +			  "SD_CLK_R",
> +			  "SD_CMD_R",
> +			  "SD_DATA0_R",
> +			  "SD_DATA1_R",
> +			  "SD_DATA2_R",
> +			  "SD_DATA3_R";
> +
> +	pinctrl-0 = <&gpioout &alt0 &i2s_alt0>;
>   
>   	/* I2S interface */
>   	i2s_alt0: i2s_alt0 {
> @@ -33,3 +99,9 @@
>   &hdmi {
>   	hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
>   };
> +
> +&uart0 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&uart0_gpio14>;
> +	status = "okay";
> +};
> diff --git a/arch/arm/dts/bcm2835-rpi-a.dts b/arch/arm/dts/bcm2835-rpi-a.dts
> index 306a84ee98..4b1af06c8d 100644
> --- a/arch/arm/dts/bcm2835-rpi-a.dts
> +++ b/arch/arm/dts/bcm2835-rpi-a.dts
> @@ -1,6 +1,7 @@
>   /dts-v1/;
>   #include "bcm2835.dtsi"
>   #include "bcm2835-rpi.dtsi"
> +#include "bcm283x-rpi-usb-host.dtsi"
>   
>   / {
>   	compatible = "raspberrypi,model-a", "brcm,bcm2835";
> @@ -14,7 +15,74 @@
>   };
>   
>   &gpio {
> -	pinctrl-0 = <&gpioout &alt0 &i2s_alt2 &alt3>;
> +	/*
> +	 * Taken from Raspberry-Pi-Rev-1.0-Model-AB-Schematics.pdf
> +	 * RPI00021 sheet 02
> +	 *
> +	 * Legend:
> +	 * "NC" = not connected (no rail from the SoC)
> +	 * "FOO" = GPIO line named "FOO" on the schematic
> +	 * "FOO_N" = GPIO line named "FOO" on schematic, active low
> +	 */
> +	gpio-line-names = "SDA0",
> +			  "SCL0",
> +			  "SDA1",
> +			  "SCL1",
> +			  "GPIO_GCLK",
> +			  "CAM_GPIO1",
> +			  "LAN_RUN",
> +			  "SPI_CE1_N",
> +			  "SPI_CE0_N",
> +			  "SPI_MISO",
> +			  "SPI_MOSI",
> +			  "SPI_SCLK",
> +			  "NC", /* GPIO12 */
> +			  "NC", /* GPIO13 */
> +			  /* Serial port */
> +			  "TXD0",
> +			  "RXD0",
> +			  "STATUS_LED_N",
> +			  "GPIO17",
> +			  "GPIO18",
> +			  "NC", /* GPIO19 */
> +			  "NC", /* GPIO20 */
> +			  "GPIO21",
> +			  "GPIO22",
> +			  "GPIO23",
> +			  "GPIO24",
> +			  "GPIO25",
> +			  "NC", /* GPIO26 */
> +			  "CAM_GPIO0",
> +			  /* Binary number representing build/revision */
> +			  "CONFIG0",
> +			  "CONFIG1",
> +			  "CONFIG2",
> +			  "CONFIG3",
> +			  "NC", /* GPIO32 */
> +			  "NC", /* GPIO33 */
> +			  "NC", /* GPIO34 */
> +			  "NC", /* GPIO35 */
> +			  "NC", /* GPIO36 */
> +			  "NC", /* GPIO37 */
> +			  "NC", /* GPIO38 */
> +			  "NC", /* GPIO39 */
> +			  "PWM0_OUT",
> +			  "NC", /* GPIO41 */
> +			  "NC", /* GPIO42 */
> +			  "NC", /* GPIO43 */
> +			  "NC", /* GPIO44 */
> +			  "PWM1_OUT",
> +			  "HDMI_HPD_P",
> +			  "SD_CARD_DET",
> +			  /* Used by SD Card */
> +			  "SD_CLK_R",
> +			  "SD_CMD_R",
> +			  "SD_DATA0_R",
> +			  "SD_DATA1_R",
> +			  "SD_DATA2_R",
> +			  "SD_DATA3_R";
> +
> +	pinctrl-0 = <&gpioout &alt0 &i2s_alt2>;
>   
>   	/* I2S interface */
>   	i2s_alt2: i2s_alt2 {
> @@ -26,3 +94,9 @@
>   &hdmi {
>   	hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>;
>   };
> +
> +&uart0 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&uart0_gpio14>;
> +	status = "okay";
> +};
> diff --git a/arch/arm/dts/bcm2835-rpi-b-plus.dts b/arch/arm/dts/bcm2835-rpi-b-plus.dts
> index d5fdb8e761..a846f1e781 100644
> --- a/arch/arm/dts/bcm2835-rpi-b-plus.dts
> +++ b/arch/arm/dts/bcm2835-rpi-b-plus.dts
> @@ -2,6 +2,7 @@
>   #include "bcm2835.dtsi"
>   #include "bcm2835-rpi.dtsi"
>   #include "bcm283x-rpi-smsc9514.dtsi"
> +#include "bcm283x-rpi-usb-host.dtsi"
>   
>   / {
>   	compatible = "raspberrypi,model-b-plus", "brcm,bcm2835";
> @@ -22,7 +23,73 @@
>   };
>   
>   &gpio {
> -	pinctrl-0 = <&gpioout &alt0 &i2s_alt0 &alt3>;
> +	/*
> +	 * Taken from Raspberry-Pi-B-Plus-V1.2-Schematics.pdf
> +	 * RPI-BPLUS sheet 1
> +	 *
> +	 * Legend:
> +	 * "NC" = not connected (no rail from the SoC)
> +	 * "FOO" = GPIO line named "FOO" on the schematic
> +	 * "FOO_N" = GPIO line named "FOO" on schematic, active low
> +	 */
> +	gpio-line-names = "SDA0",
> +			  "SCL0",
> +			  "SDA1",
> +			  "SCL1",
> +			  "GPIO_GCLK",
> +			  "GPIO5",
> +			  "GPIO6",
> +			  "SPI_CE1_N",
> +			  "SPI_CE0_N",
> +			  "SPI_MISO",
> +			  "SPI_MOSI",
> +			  "SPI_SCLK",
> +			  "GPIO12",
> +			  "GPIO13",
> +			  /* Serial port */
> +			  "TXD0",
> +			  "RXD0",
> +			  "GPIO16",
> +			  "GPIO17",
> +			  "GPIO18",
> +			  "GPIO19",
> +			  "GPIO20",
> +			  "GPIO21",
> +			  "GPIO22",
> +			  "GPIO23",
> +			  "GPIO24",
> +			  "GPIO25",
> +			  "GPIO26",
> +			  "GPIO27",
> +			  "SDA0",
> +			  "SCL0",
> +			  "NC", /* GPIO30 */
> +			  "LAN_RUN", /* GPIO31 */
> +			  "CAM_GPIO1", /* GPIO32 */
> +			  "NC", /* GPIO33 */
> +			  "NC", /* GPIO34 */
> +			  "PWR_LOW_N", /* GPIO35 */
> +			  "NC", /* GPIO36 */
> +			  "NC", /* GPIO37 */
> +			  "USB_LIMIT", /* GPIO38 */
> +			  "NC", /* GPIO39 */
> +			  "PWM0_OUT", /* GPIO40 */
> +			  "CAM_GPIO0", /* GPIO41 */
> +			  "NC", /* GPIO42 */
> +			  "NC", /* GPIO43 */
> +			  "ETHCLK", /* GPIO44 */
> +			  "PWM1_OUT", /* GPIO45 */
> +			  "HDMI_HPD_N",
> +			  "STATUS_LED",
> +			  /* Used by SD Card */
> +			  "SD_CLK_R",
> +			  "SD_CMD_R",
> +			  "SD_DATA0_R",
> +			  "SD_DATA1_R",
> +			  "SD_DATA2_R",
> +			  "SD_DATA3_R";
> +
> +	pinctrl-0 = <&gpioout &alt0 &i2s_alt0>;
>   
>   	/* I2S interface */
>   	i2s_alt0: i2s_alt0 {
> @@ -34,3 +101,9 @@
>   &hdmi {
>   	hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
>   };
> +
> +&uart0 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&uart0_gpio14>;
> +	status = "okay";
> +};
> diff --git a/arch/arm/dts/bcm2835-rpi-b-rev2.dts b/arch/arm/dts/bcm2835-rpi-b-rev2.dts
> index bfc4bd9b77..e860964e39 100644
> --- a/arch/arm/dts/bcm2835-rpi-b-rev2.dts
> +++ b/arch/arm/dts/bcm2835-rpi-b-rev2.dts
> @@ -2,6 +2,7 @@
>   #include "bcm2835.dtsi"
>   #include "bcm2835-rpi.dtsi"
>   #include "bcm283x-rpi-smsc9512.dtsi"
> +#include "bcm283x-rpi-usb-host.dtsi"
>   
>   / {
>   	compatible = "raspberrypi,model-b-rev2", "brcm,bcm2835";
> @@ -15,7 +16,73 @@
>   };
>   
>   &gpio {
> -	pinctrl-0 = <&gpioout &alt0 &i2s_alt2 &alt3>;
> +	/*
> +	 * Taken from Raspberry-Pi-Rev-2.0-Model-AB-Schematics.pdf
> +	 * RPI00022 sheet 02
> +	 *
> +	 * Legend:
> +	 * "NC" = not connected (no rail from the SoC)
> +	 * "FOO" = GPIO line named "FOO" on the schematic
> +	 * "FOO_N" = GPIO line named "FOO" on schematic, active low
> +	 */
> +	gpio-line-names = "SDA0",
> +			  "SCL0",
> +			  "SDA1",
> +			  "SCL1",
> +			  "GPIO_GCLK",
> +			  "CAM_CLK",
> +			  "LAN_RUN",
> +			  "SPI_CE1_N",
> +			  "SPI_CE0_N",
> +			  "SPI_MISO",
> +			  "SPI_MOSI",
> +			  "SPI_SCLK",
> +			  "NC", /* GPIO12 */
> +			  "NC", /* GPIO13 */
> +			  /* Serial port */
> +			  "TXD0",
> +			  "RXD0",
> +			  "STATUS_LED_N",
> +			  "GPIO17",
> +			  "GPIO18",
> +			  "NC", /* GPIO19 */
> +			  "NC", /* GPIO20 */
> +			  "CAM_GPIO",
> +			  "GPIO22",
> +			  "GPIO23",
> +			  "GPIO24",
> +			  "GPIO25",
> +			  "NC", /* GPIO26 */
> +			  "GPIO27",
> +			  "GPIO28",
> +			  "GPIO29",
> +			  "GPIO30",
> +			  "GPIO31",
> +			  "NC", /* GPIO32 */
> +			  "NC", /* GPIO33 */
> +			  "NC", /* GPIO34 */
> +			  "NC", /* GPIO35 */
> +			  "NC", /* GPIO36 */
> +			  "NC", /* GPIO37 */
> +			  "NC", /* GPIO38 */
> +			  "NC", /* GPIO39 */
> +			  "PWM0_OUT",
> +			  "NC", /* GPIO41 */
> +			  "NC", /* GPIO42 */
> +			  "NC", /* GPIO43 */
> +			  "NC", /* GPIO44 */
> +			  "PWM1_OUT",
> +			  "HDMI_HPD_P",
> +			  "SD_CARD_DET",
> +			  /* Used by SD Card */
> +			  "SD_CLK_R",
> +			  "SD_CMD_R",
> +			  "SD_DATA0_R",
> +			  "SD_DATA1_R",
> +			  "SD_DATA2_R",
> +			  "SD_DATA3_R";
> +
> +	pinctrl-0 = <&gpioout &alt0 &i2s_alt2>;
>   
>   	/* I2S interface */
>   	i2s_alt2: i2s_alt2 {
> @@ -27,3 +94,9 @@
>   &hdmi {
>   	hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
>   };
> +
> +&uart0 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&uart0_gpio14>;
> +	status = "okay";
> +};
> diff --git a/arch/arm/dts/bcm2835-rpi-b.dts b/arch/arm/dts/bcm2835-rpi-b.dts
> index 0371bb7374..5d77f3f8c4 100644
> --- a/arch/arm/dts/bcm2835-rpi-b.dts
> +++ b/arch/arm/dts/bcm2835-rpi-b.dts
> @@ -2,6 +2,7 @@
>   #include "bcm2835.dtsi"
>   #include "bcm2835-rpi.dtsi"
>   #include "bcm283x-rpi-smsc9512.dtsi"
> +#include "bcm283x-rpi-usb-host.dtsi"
>   
>   / {
>   	compatible = "raspberrypi,model-b", "brcm,bcm2835";
> @@ -15,9 +16,82 @@
>   };
>   
>   &gpio {
> -	pinctrl-0 = <&gpioout &alt0 &alt3>;
> +	/*
> +	 * Taken from Raspberry-Pi-Rev-1.0-Model-AB-Schematics.pdf
> +	 * RPI00021 sheet 02
> +	 *
> +	 * Legend:
> +	 * "NC" = not connected (no rail from the SoC)
> +	 * "FOO" = GPIO line named "FOO" on the schematic
> +	 * "FOO_N" = GPIO line named "FOO" on schematic, active low
> +	 */
> +	gpio-line-names = "SDA0",
> +			  "SCL0",
> +			  "SDA1",
> +			  "SCL1",
> +			  "GPIO_GCLK",
> +			  "CAM_GPIO1",
> +			  "LAN_RUN",
> +			  "SPI_CE1_N",
> +			  "SPI_CE0_N",
> +			  "SPI_MISO",
> +			  "SPI_MOSI",
> +			  "SPI_SCLK",
> +			  "NC", /* GPIO12 */
> +			  "NC", /* GPIO13 */
> +			  /* Serial port */
> +			  "TXD0",
> +			  "RXD0",
> +			  "STATUS_LED_N",
> +			  "GPIO17",
> +			  "GPIO18",
> +			  "NC", /* GPIO19 */
> +			  "NC", /* GPIO20 */
> +			  "GPIO21",
> +			  "GPIO22",
> +			  "GPIO23",
> +			  "GPIO24",
> +			  "GPIO25",
> +			  "NC", /* GPIO26 */
> +			  "CAM_GPIO0",
> +			  /* Binary number representing build/revision */
> +			  "CONFIG0",
> +			  "CONFIG1",
> +			  "CONFIG2",
> +			  "CONFIG3",
> +			  "NC", /* GPIO32 */
> +			  "NC", /* GPIO33 */
> +			  "NC", /* GPIO34 */
> +			  "NC", /* GPIO35 */
> +			  "NC", /* GPIO36 */
> +			  "NC", /* GPIO37 */
> +			  "NC", /* GPIO38 */
> +			  "NC", /* GPIO39 */
> +			  "PWM0_OUT",
> +			  "NC", /* GPIO41 */
> +			  "NC", /* GPIO42 */
> +			  "NC", /* GPIO43 */
> +			  "NC", /* GPIO44 */
> +			  "PWM1_OUT",
> +			  "HDMI_HPD_P",
> +			  "SD_CARD_DET",
> +			  /* Used by SD Card */
> +			  "SD_CLK_R",
> +			  "SD_CMD_R",
> +			  "SD_DATA0_R",
> +			  "SD_DATA1_R",
> +			  "SD_DATA2_R",
> +			  "SD_DATA3_R";
> +
> +	pinctrl-0 = <&gpioout &alt0>;
>   };
>   
>   &hdmi {
>   	hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>;
>   };
> +
> +&uart0 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&uart0_gpio14>;
> +	status = "okay";
> +};
> diff --git a/arch/arm/dts/bcm2835-rpi.dtsi b/arch/arm/dts/bcm2835-rpi.dtsi
> index e9b47b2bbc..8b95832dd0 100644
> --- a/arch/arm/dts/bcm2835-rpi.dtsi
> +++ b/arch/arm/dts/bcm2835-rpi.dtsi
> @@ -39,22 +39,21 @@
>   	};
>   
>   	alt0: alt0 {
> -		brcm,pins = <0 1 2 3 4 5 7 8 9 10 11 14 15 40 45>;
> +		brcm,pins = <4 5 7 8 9 10 11>;
>   		brcm,function = <BCM2835_FSEL_ALT0>;
>   	};
> -
> -	alt3: alt3 {
> -		brcm,pins = <48 49 50 51 52 53>;
> -		brcm,function = <BCM2835_FSEL_ALT3>;
> -	};
>   };
>   
>   &i2c0 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&i2c0_gpio0>;
>   	status = "okay";
>   	clock-frequency = <100000>;
>   };
>   
>   &i2c1 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&i2c1_gpio2>;
>   	status = "okay";
>   	clock-frequency = <100000>;
>   };
> @@ -64,11 +63,21 @@
>   };
>   
>   &sdhci {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&emmc_gpio48>;
>   	status = "okay";
>   	bus-width = <4>;
>   };
>   
> +&sdhost {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&sdhost_gpio48>;
> +	bus-width = <4>;
> +};
> +
>   &pwm {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&pwm0_gpio40 &pwm1_gpio45>;
>   	status = "okay";
>   };
>   
> @@ -84,3 +93,16 @@
>   	power-domains = <&power RPI_POWER_DOMAIN_HDMI>;
>   	status = "okay";
>   };
> +
> +&vec {
> +	power-domains = <&power RPI_POWER_DOMAIN_VEC>;
> +	status = "okay";
> +};
> +
> +&dsi0 {
> +	power-domains = <&power RPI_POWER_DOMAIN_DSI0>;
> +};
> +
> +&dsi1 {
> +	power-domains = <&power RPI_POWER_DOMAIN_DSI1>;
> +};
> diff --git a/arch/arm/dts/bcm2835.dtsi b/arch/arm/dts/bcm2835.dtsi
> index a78759e737..659b6e9513 100644
> --- a/arch/arm/dts/bcm2835.dtsi
> +++ b/arch/arm/dts/bcm2835.dtsi
> @@ -23,3 +23,13 @@
>   		};
>   	};
>   };
> +
> +&cpu_thermal {
> +	coefficients = <(-538)	407000>;
> +};
> +
> +/* enable thermal sensor with the correct compatible property set */
> +&thermal {
> +	compatible = "brcm,bcm2835-thermal";
> +	status = "okay";
> +};
> diff --git a/arch/arm/dts/bcm2836-rpi-2-b.dts b/arch/arm/dts/bcm2836-rpi-2-b.dts
> index 29e1cfe8eb..e8de41444b 100644
> --- a/arch/arm/dts/bcm2836-rpi-2-b.dts
> +++ b/arch/arm/dts/bcm2836-rpi-2-b.dts
> @@ -2,6 +2,7 @@
>   #include "bcm2836.dtsi"
>   #include "bcm2835-rpi.dtsi"
>   #include "bcm283x-rpi-smsc9514.dtsi"
> +#include "bcm283x-rpi-usb-host.dtsi"
>   
>   / {
>   	compatible = "raspberrypi,2-model-b", "brcm,bcm2836";
> @@ -26,7 +27,7 @@
>   };
>   
>   &gpio {
> -	pinctrl-0 = <&gpioout &alt0 &i2s_alt0 &alt3>;
> +	pinctrl-0 = <&gpioout &alt0 &i2s_alt0>;
>   
>   	/* I2S interface */
>   	i2s_alt0: i2s_alt0 {
> @@ -38,3 +39,9 @@
>   &hdmi {
>   	hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
>   };
> +
> +&uart0 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&uart0_gpio14>;
> +	status = "okay";
> +};
> diff --git a/arch/arm/dts/bcm2836.dtsi b/arch/arm/dts/bcm2836.dtsi
> index 9d0651d8f3..2c26d0be8b 100644
> --- a/arch/arm/dts/bcm2836.dtsi
> +++ b/arch/arm/dts/bcm2836.dtsi
> @@ -36,6 +36,7 @@
>   	cpus: cpus {
>   		#address-cells = <1>;
>   		#size-cells = <0>;
> +		enable-method = "brcm,bcm2836-smp";
>   
>   		v7_cpu0: cpu@0 {
>   			device_type = "cpu";
> @@ -76,3 +77,13 @@
>   	interrupt-parent = <&local_intc>;
>   	interrupts = <8>;
>   };
> +
> +&cpu_thermal {
> +	coefficients = <(-538)	407000>;
> +};
> +
> +/* enable thermal sensor with the correct compatible property set */
> +&thermal {
> +	compatible = "brcm,bcm2836-thermal";
> +	status = "okay";
> +};
> diff --git a/arch/arm/dts/bcm2837-rpi-3-b.dts b/arch/arm/dts/bcm2837-rpi-3-b.dts
> index 7841b724e3..20725ca487 100644
> --- a/arch/arm/dts/bcm2837-rpi-3-b.dts
> +++ b/arch/arm/dts/bcm2837-rpi-3-b.dts
> @@ -2,6 +2,7 @@
>   #include "bcm2837.dtsi"
>   #include "bcm2835-rpi.dtsi"
>   #include "bcm283x-rpi-smsc9514.dtsi"
> +#include "bcm283x-rpi-usb-host.dtsi"
>   
>   / {
>   	compatible = "raspberrypi,3-model-b", "brcm,bcm2837";
> @@ -15,16 +16,36 @@
>   		act {
>   			gpios = <&gpio 47 0>;
>   		};
> -
> -		pwr {
> -			label = "PWR";
> -			gpios = <&gpio 35 0>;
> -			default-state = "keep";
> -			linux,default-trigger = "default-on";
> -		};
>   	};
>   };
>   
> +/* uart0 communicates with the BT module */
> +&uart0 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&uart0_gpio32 &gpclk2_gpio43>;
> +	status = "okay";
> +};
> +
> +/* uart1 is mapped to the pin header */
>   &uart1 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&uart1_gpio14>;
> +	status = "okay";
> +};
> +
> +/* SDHCI is used to control the SDIO for wireless */
> +&sdhci {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&emmc_gpio34>;
> +	status = "okay";
> +	bus-width = <4>;
> +	non-removable;
> +};
> +
> +/* SDHOST is used to drive the SD card */
> +&sdhost {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&sdhost_gpio48>;
>   	status = "okay";
> +	bus-width = <4>;
>   };
> diff --git a/arch/arm/dts/bcm2837.dtsi b/arch/arm/dts/bcm2837.dtsi
> index 8216bbb29f..bc1cca5cf4 100644
> --- a/arch/arm/dts/bcm2837.dtsi
> +++ b/arch/arm/dts/bcm2837.dtsi
> @@ -1,7 +1,7 @@
>   #include "bcm283x.dtsi"
>   
>   / {
> -	compatible = "brcm,bcm2836";
> +	compatible = "brcm,bcm2837";
>   
>   	soc {
>   		ranges = <0x7e000000 0x3f000000 0x1000000>,
> @@ -30,6 +30,7 @@
>   	cpus: cpus {
>   		#address-cells = <1>;
>   		#size-cells = <0>;
> +		enable-method = "brcm,bcm2836-smp"; // for ARM 32-bit
>   
>   		cpu0: cpu@0 {
>   			device_type = "cpu";
> @@ -74,3 +75,13 @@
>   	interrupt-parent = <&local_intc>;
>   	interrupts = <8>;
>   };
> +
> +&cpu_thermal {
> +	coefficients = <(-538)	412000>;
> +};
> +
> +/* enable thermal sensor with the correct compatible property set */
> +&thermal {
> +	compatible = "brcm,bcm2837-thermal";
> +	status = "okay";
> +};
> diff --git a/arch/arm/dts/bcm283x-rpi-smsc9512.dtsi b/arch/arm/dts/bcm283x-rpi-smsc9512.dtsi
> index 12c981e511..9a0599f711 100644
> --- a/arch/arm/dts/bcm283x-rpi-smsc9512.dtsi
> +++ b/arch/arm/dts/bcm283x-rpi-smsc9512.dtsi
> @@ -1,6 +1,6 @@
>   / {
>   	aliases {
> -		ethernet = &ethernet;
> +		ethernet0 = &ethernet;
>   	};
>   };
>   
> diff --git a/arch/arm/dts/bcm283x-rpi-smsc9514.dtsi b/arch/arm/dts/bcm283x-rpi-smsc9514.dtsi
> index 3f0a56ebcf..dc7ae776db 100644
> --- a/arch/arm/dts/bcm283x-rpi-smsc9514.dtsi
> +++ b/arch/arm/dts/bcm283x-rpi-smsc9514.dtsi
> @@ -1,6 +1,6 @@
>   / {
>   	aliases {
> -		ethernet = &ethernet;
> +		ethernet0 = &ethernet;
>   	};
>   };
>   
> diff --git a/arch/arm/dts/bcm283x-rpi-usb-host.dtsi b/arch/arm/dts/bcm283x-rpi-usb-host.dtsi
> new file mode 100644
> index 0000000000..73f4ece8dc
> --- /dev/null
> +++ b/arch/arm/dts/bcm283x-rpi-usb-host.dtsi
> @@ -0,0 +1,3 @@
> +&usb {
> +	dr_mode = "host";
> +};
> diff --git a/arch/arm/dts/bcm283x.dtsi b/arch/arm/dts/bcm283x.dtsi
> index e5b4f20c2a..05a6f489af 100644
> --- a/arch/arm/dts/bcm283x.dtsi
> +++ b/arch/arm/dts/bcm283x.dtsi
> @@ -3,6 +3,11 @@
>   #include <dt-bindings/clock/bcm2835-aux.h>
>   #include <dt-bindings/gpio/gpio.h>
>   
> +/* firmware-provided startup stubs live here, where the secondary CPUs are
> + * spinning.
> + */
> +/memreserve/ 0x00000000 0x00001000;
> +
>   /* This include file covers the common peripherals and configuration between
>    * bcm2835 and bcm2836 implementations, leaving the CPU configuration to
>    * bcm2835.dtsi and bcm2836.dtsi.
> @@ -19,6 +24,26 @@
>   		bootargs = "earlyprintk console=ttyAMA0";
>   	};
>   
> +	thermal-zones {
> +		cpu_thermal: cpu-thermal {
> +			polling-delay-passive = <0>;
> +			polling-delay = <1000>;
> +
> +			thermal-sensors = <&thermal>;
> +
> +			trips {
> +				cpu-crit {
> +					temperature	= <80000>;
> +					hysteresis	= <0>;
> +					type		= "critical";
> +				};
> +			};
> +
> +			cooling-maps {
> +			};
> +		};
> +	};
> +
>   	soc: soc {
>   		compatible = "simple-bus";
>   		#address-cells = <1>;
> @@ -93,10 +118,13 @@
>   			#clock-cells = <1>;
>   			reg = <0x7e101000 0x2000>;
>   
> -			/* CPRMAN derives everything from the platform's
> -			 * oscillator.
> +			/* CPRMAN derives almost everything from the
> +			 * platform's oscillator.  However, the DSI
> +			 * pixel clocks come from the DSI analog PHY.
>   			 */
> -			clocks = <&clk_osc>;
> +			clocks = <&clk_osc>,
> +				<&dsi0 0>, <&dsi0 1>, <&dsi0 2>,
> +				<&dsi1 0>, <&dsi1 1>, <&dsi1 2>;
>   		};
>   
>   		rng@7e104000 {
> @@ -104,7 +132,7 @@
>   			reg = <0x7e104000 0x10>;
>   		};
>   
> -		mailbox: mailbox@7e00b800 {
> +		mailbox: mailbox@7e00b880 {
>   			compatible = "brcm,bcm2835-mbox";
>   			reg = <0x7e00b880 0x40>;
>   			interrupts = <0 1>;
> @@ -132,6 +160,213 @@
>   
>   			interrupt-controller;
>   			#interrupt-cells = <2>;
> +
> +			/* Defines pin muxing groups according to
> +			 * BCM2835-ARM-Peripherals.pdf page 102.
> +			 *
> +			 * While each pin can have its mux selected
> +			 * for various functions individually, some
> +			 * groups only make sense to switch to a
> +			 * particular function together.
> +			 */
> +			dpi_gpio0: dpi_gpio0 {
> +				brcm,pins = <0 1 2 3 4 5 6 7 8 9 10 11
> +					     12 13 14 15 16 17 18 19
> +					     20 21 22 23 24 25 26 27>;
> +				brcm,function = <BCM2835_FSEL_ALT2>;
> +			};
> +			emmc_gpio22: emmc_gpio22 {
> +				brcm,pins = <22 23 24 25 26 27>;
> +				brcm,function = <BCM2835_FSEL_ALT3>;
> +			};
> +			emmc_gpio34: emmc_gpio34 {
> +				brcm,pins = <34 35 36 37 38 39>;
> +				brcm,function = <BCM2835_FSEL_ALT3>;
> +				brcm,pull = <BCM2835_PUD_OFF
> +					     BCM2835_PUD_UP
> +					     BCM2835_PUD_UP
> +					     BCM2835_PUD_UP
> +					     BCM2835_PUD_UP
> +					     BCM2835_PUD_UP>;
> +			};
> +			emmc_gpio48: emmc_gpio48 {
> +				brcm,pins = <48 49 50 51 52 53>;
> +				brcm,function = <BCM2835_FSEL_ALT3>;
> +			};
> +
> +			gpclk0_gpio4: gpclk0_gpio4 {
> +				brcm,pins = <4>;
> +				brcm,function = <BCM2835_FSEL_ALT0>;
> +			};
> +			gpclk1_gpio5: gpclk1_gpio5 {
> +				brcm,pins = <5>;
> +				brcm,function = <BCM2835_FSEL_ALT0>;
> +			};
> +			gpclk1_gpio42: gpclk1_gpio42 {
> +				brcm,pins = <42>;
> +				brcm,function = <BCM2835_FSEL_ALT0>;
> +			};
> +			gpclk1_gpio44: gpclk1_gpio44 {
> +				brcm,pins = <44>;
> +				brcm,function = <BCM2835_FSEL_ALT0>;
> +			};
> +			gpclk2_gpio6: gpclk2_gpio6 {
> +				brcm,pins = <6>;
> +				brcm,function = <BCM2835_FSEL_ALT0>;
> +			};
> +			gpclk2_gpio43: gpclk2_gpio43 {
> +				brcm,pins = <43>;
> +				brcm,function = <BCM2835_FSEL_ALT0>;
> +			};
> +
> +			i2c0_gpio0: i2c0_gpio0 {
> +				brcm,pins = <0 1>;
> +				brcm,function = <BCM2835_FSEL_ALT0>;
> +			};
> +			i2c0_gpio28: i2c0_gpio28 {
> +				brcm,pins = <28 29>;
> +				brcm,function = <BCM2835_FSEL_ALT0>;
> +			};
> +			i2c0_gpio44: i2c0_gpio44 {
> +				brcm,pins = <44 45>;
> +				brcm,function = <BCM2835_FSEL_ALT1>;
> +			};
> +			i2c1_gpio2: i2c1_gpio2 {
> +				brcm,pins = <2 3>;
> +				brcm,function = <BCM2835_FSEL_ALT0>;
> +			};
> +			i2c1_gpio44: i2c1_gpio44 {
> +				brcm,pins = <44 45>;
> +				brcm,function = <BCM2835_FSEL_ALT2>;
> +			};
> +			i2c_slave_gpio18: i2c_slave_gpio18 {
> +				brcm,pins = <18 19 20 21>;
> +				brcm,function = <BCM2835_FSEL_ALT3>;
> +			};
> +
> +			jtag_gpio4: jtag_gpio4 {
> +				brcm,pins = <4 5 6 12 13>;
> +				brcm,function = <BCM2835_FSEL_ALT4>;
> +			};
> +			jtag_gpio22: jtag_gpio22 {
> +				brcm,pins = <22 23 24 25 26 27>;
> +				brcm,function = <BCM2835_FSEL_ALT4>;
> +			};
> +
> +			pcm_gpio18: pcm_gpio18 {
> +				brcm,pins = <18 19 20 21>;
> +				brcm,function = <BCM2835_FSEL_ALT0>;
> +			};
> +			pcm_gpio28: pcm_gpio28 {
> +				brcm,pins = <28 29 30 31>;
> +				brcm,function = <BCM2835_FSEL_ALT2>;
> +			};
> +
> +			pwm0_gpio12: pwm0_gpio12 {
> +				brcm,pins = <12>;
> +				brcm,function = <BCM2835_FSEL_ALT0>;
> +			};
> +			pwm0_gpio18: pwm0_gpio18 {
> +				brcm,pins = <18>;
> +				brcm,function = <BCM2835_FSEL_ALT5>;
> +			};
> +			pwm0_gpio40: pwm0_gpio40 {
> +				brcm,pins = <40>;
> +				brcm,function = <BCM2835_FSEL_ALT0>;
> +			};
> +			pwm1_gpio13: pwm1_gpio13 {
> +				brcm,pins = <13>;
> +				brcm,function = <BCM2835_FSEL_ALT0>;
> +			};
> +			pwm1_gpio19: pwm1_gpio19 {
> +				brcm,pins = <19>;
> +				brcm,function = <BCM2835_FSEL_ALT5>;
> +			};
> +			pwm1_gpio41: pwm1_gpio41 {
> +				brcm,pins = <41>;
> +				brcm,function = <BCM2835_FSEL_ALT0>;
> +			};
> +			pwm1_gpio45: pwm1_gpio45 {
> +				brcm,pins = <45>;
> +				brcm,function = <BCM2835_FSEL_ALT0>;
> +			};
> +
> +			sdhost_gpio48: sdhost_gpio48 {
> +				brcm,pins = <48 49 50 51 52 53>;
> +				brcm,function = <BCM2835_FSEL_ALT0>;
> +			};
> +
> +			spi0_gpio7: spi0_gpio7 {
> +				brcm,pins = <7 8 9 10 11>;
> +				brcm,function = <BCM2835_FSEL_ALT0>;
> +			};
> +			spi0_gpio35: spi0_gpio35 {
> +				brcm,pins = <35 36 37 38 39>;
> +				brcm,function = <BCM2835_FSEL_ALT0>;
> +			};
> +			spi1_gpio16: spi1_gpio16 {
> +				brcm,pins = <16 17 18 19 20 21>;
> +				brcm,function = <BCM2835_FSEL_ALT4>;
> +			};
> +			spi2_gpio40: spi2_gpio40 {
> +				brcm,pins = <40 41 42 43 44 45>;
> +				brcm,function = <BCM2835_FSEL_ALT4>;
> +			};
> +
> +			uart0_gpio14: uart0_gpio14 {
> +				brcm,pins = <14 15>;
> +				brcm,function = <BCM2835_FSEL_ALT0>;
> +			};
> +			/* Separate from the uart0_gpio14 group
> +			 * because it conflicts with spi1_gpio16, and
> +			 * people often run uart0 on the two pins
> +			 * without flow control.
> +			 */
> +			uart0_ctsrts_gpio16: uart0_ctsrts_gpio16 {
> +				brcm,pins = <16 17>;
> +				brcm,function = <BCM2835_FSEL_ALT3>;
> +			};
> +			uart0_ctsrts_gpio30: uart0_ctsrts_gpio30 {
> +				brcm,pins = <30 31>;
> +				brcm,function = <BCM2835_FSEL_ALT3>;
> +			};
> +			uart0_gpio32: uart0_gpio32 {
> +				brcm,pins = <32 33>;
> +				brcm,function = <BCM2835_FSEL_ALT3>;
> +			};
> +			uart0_gpio36: uart0_gpio36 {
> +				brcm,pins = <36 37>;
> +				brcm,function = <BCM2835_FSEL_ALT2>;
> +			};
> +			uart0_ctsrts_gpio38: uart0_ctsrts_gpio38 {
> +				brcm,pins = <38 39>;
> +				brcm,function = <BCM2835_FSEL_ALT2>;
> +			};
> +
> +			uart1_gpio14: uart1_gpio14 {
> +				brcm,pins = <14 15>;
> +				brcm,function = <BCM2835_FSEL_ALT5>;
> +			};
> +			uart1_ctsrts_gpio16: uart1_ctsrts_gpio16 {
> +				brcm,pins = <16 17>;
> +				brcm,function = <BCM2835_FSEL_ALT5>;
> +			};
> +			uart1_gpio32: uart1_gpio32 {
> +				brcm,pins = <32 33>;
> +				brcm,function = <BCM2835_FSEL_ALT5>;
> +			};
> +			uart1_ctsrts_gpio30: uart1_ctsrts_gpio30 {
> +				brcm,pins = <30 31>;
> +				brcm,function = <BCM2835_FSEL_ALT5>;
> +			};
> +			uart1_gpio40: uart1_gpio40 {
> +				brcm,pins = <40 41>;
> +				brcm,function = <BCM2835_FSEL_ALT5>;
> +			};
> +			uart1_ctsrts_gpio42: uart1_ctsrts_gpio42 {
> +				brcm,pins = <42 43>;
> +				brcm,function = <BCM2835_FSEL_ALT5>;
> +			};
>   		};
>   
>   		uart0: serial@7e201000 {
> @@ -144,6 +379,16 @@
>   			arm,primecell-periphid = <0x00241011>;
>   		};
>   
> +		sdhost: mmc@7e202000 {
> +			compatible = "brcm,bcm2835-sdhost";
> +			reg = <0x7e202000 0x100>;
> +			interrupts = <2 24>;
> +			clocks = <&clocks BCM2835_CLOCK_VPU>;
> +			dmas = <&dma 13>;
> +			dma-names = "rx-tx";
> +			status = "disabled";
> +		};
> +
>   		i2s: i2s@7e203000 {
>   			compatible = "brcm,bcm2835-i2s";
>   			reg = <0x7e203000 0x20>,
> @@ -187,6 +432,33 @@
>   			interrupts = <2 14>; /* pwa1 */
>   		};
>   
> +		dsi0: dsi@7e209000 {
> +			compatible = "brcm,bcm2835-dsi0";
> +			reg = <0x7e209000 0x78>;
> +			interrupts = <2 4>;
> +			#address-cells = <1>;
> +			#size-cells = <0>;
> +			#clock-cells = <1>;
> +
> +			clocks = <&clocks BCM2835_PLLA_DSI0>,
> +				 <&clocks BCM2835_CLOCK_DSI0E>,
> +				 <&clocks BCM2835_CLOCK_DSI0P>;
> +			clock-names = "phy", "escape", "pixel";
> +
> +			clock-output-names = "dsi0_byte",
> +					     "dsi0_ddr2",
> +					     "dsi0_ddr";
> +
> +		};
> +
> +		thermal: thermal@7e212000 {
> +			compatible = "brcm,bcm2835-thermal";
> +			reg = <0x7e212000 0x8>;
> +			clocks = <&clocks BCM2835_CLOCK_TSENS>;
> +			#thermal-sensor-cells = <0>;
> +			status = "disabled";
> +		};
> +
>   		aux: aux@0x7e215000 {
>   			compatible = "brcm,bcm2835-aux";
>   			#clock-cells = <1>;
> @@ -246,6 +518,26 @@
>   			interrupts = <2 1>;
>   		};
>   
> +		dsi1: dsi@7e700000 {
> +			compatible = "brcm,bcm2835-dsi1";
> +			reg = <0x7e700000 0x8c>;
> +			interrupts = <2 12>;
> +			#address-cells = <1>;
> +			#size-cells = <0>;
> +			#clock-cells = <1>;
> +
> +			clocks = <&clocks BCM2835_PLLD_DSI1>,
> +				 <&clocks BCM2835_CLOCK_DSI1E>,
> +				 <&clocks BCM2835_CLOCK_DSI1P>;
> +			clock-names = "phy", "escape", "pixel";
> +
> +			clock-output-names = "dsi1_byte",
> +					     "dsi1_ddr2",
> +					     "dsi1_ddr";
> +
> +			status = "disabled";
> +		};
> +
>   		i2c1: i2c@7e804000 {
>   			compatible = "brcm,bcm2835-i2c";
>   			reg = <0x7e804000 0x1000>;
> @@ -266,6 +558,14 @@
>   			status = "disabled";
>   		};
>   
> +		vec: vec@7e806000 {
> +			compatible = "brcm,bcm2835-vec";
> +			reg = <0x7e806000 0x1000>;
> +			clocks = <&clocks BCM2835_CLOCK_VEC>;
> +			interrupts = <2 27>;
> +			status = "disabled";
> +		};
> +
>   		pixelvalve@7e807000 {
>   			compatible = "brcm,bcm2835-pixelvalve2";
>   			reg = <0x7e807000 0x100>;
> @@ -281,6 +581,8 @@
>   			clocks = <&clocks BCM2835_PLLH_PIX>,
>   				 <&clocks BCM2835_CLOCK_HSM>;
>   			clock-names = "pixel", "hdmi";
> +			dmas = <&dma 17>;
> +			dma-names = "audio-rx";
>   			status = "disabled";
>   		};
>   
> @@ -290,6 +592,10 @@
>   			interrupts = <1 9>;
>   			#address-cells = <1>;
>   			#size-cells = <0>;
> +			clocks = <&clk_usb>;
> +			clock-names = "otg";
> +			phys = <&usbphy>;
> +			phy-names = "usb2-phy";
>   		};
>   
>   		v3d: v3d@7ec00000 {
> @@ -317,6 +623,17 @@
>   			clock-frequency = <19200000>;
>   		};
>   
> +		clk_usb: clock@4 {
> +			compatible = "fixed-clock";
> +			reg = <4>;
> +			#clock-cells = <0>;
> +			clock-output-names = "otg";
> +			clock-frequency = <480000000>;
> +		};
> +	};
> +
> +	usbphy: phy {
> +		compatible = "usb-nop-xceiv";
>   	};
>   };
>   
> diff --git a/include/dt-bindings/clock/bcm2835.h b/include/dt-bindings/clock/bcm2835.h
> index 360e00cefd..a0c812b0fa 100644
> --- a/include/dt-bindings/clock/bcm2835.h
> +++ b/include/dt-bindings/clock/bcm2835.h
> @@ -64,3 +64,5 @@
>   #define BCM2835_CLOCK_CAM1		46
>   #define BCM2835_CLOCK_DSI0E		47
>   #define BCM2835_CLOCK_DSI1E		48
> +#define BCM2835_CLOCK_DSI0P		49
> +#define BCM2835_CLOCK_DSI1P		50
> diff --git a/include/dt-bindings/pinctrl/bcm2835.h b/include/dt-bindings/pinctrl/bcm2835.h
> index 6f0bc37af3..e4e4fdf5d3 100644
> --- a/include/dt-bindings/pinctrl/bcm2835.h
> +++ b/include/dt-bindings/pinctrl/bcm2835.h
> @@ -24,4 +24,9 @@
>   #define BCM2835_FSEL_ALT2	6
>   #define BCM2835_FSEL_ALT3	7
>   
> +/* brcm,pull property */
> +#define BCM2835_PUD_OFF		0
> +#define BCM2835_PUD_DOWN	1
> +#define BCM2835_PUD_UP		2
> +
>   #endif /* __DT_BINDINGS_PINCTRL_BCM2835_H__ */
Alexander Graf Oct. 5, 2017, 5:05 p.m. UTC | #2
On 05.10.17 18:52, Stefan Wahren wrote:
> Hi Alexander,
> 
> 
> Am 04.10.2017 um 14:39 schrieb Alexander Graf:
>> Upstream Linux has received a few device tree updates to the RPi
>> which we should propagate into the builtin U-Boot one as well to
>> gain hardware support.
>>
>> This patch bumps the dts files to their 4.14 Linux counterparts
>> with the exception of sdhost on 32bit RPi versions. There we stay
>> with iproc as the sdhost driver is missing in U-Boot.
> 
> out of curiosity, why is the RPi Zero isn't included?

It wasn't included before, so I didn't want to introduce it in this update.

Basically we don't have a zero U-Boot target today. I think that's wrong 
- we should allow for more than a single built-in DT to exist and choose 
the one we pick based on the target machine we find. But that's bigger 
than this patch :)


Alex
Tom Rini Oct. 17, 2017, 12:46 a.m. UTC | #3
On Wed, Oct 04, 2017 at 02:39:16PM +0200, Alexander Graf wrote:

> Upstream Linux has received a few device tree updates to the RPi

> which we should propagate into the builtin U-Boot one as well to

> gain hardware support.

> 

> This patch bumps the dts files to their 4.14 Linux counterparts

> with the exception of sdhost on 32bit RPi versions. There we stay

> with iproc as the sdhost driver is missing in U-Boot.

> 

> Signed-off-by: Alexander Graf <agraf@suse.de>


Applied to u-boot/master, thanks!

-- 
Tom
diff mbox series

Patch

diff --git a/arch/arm/dts/bcm2835-rpi-a-plus.dts b/arch/arm/dts/bcm2835-rpi-a-plus.dts
index 35ff4e7a4a..9f866491ef 100644
--- a/arch/arm/dts/bcm2835-rpi-a-plus.dts
+++ b/arch/arm/dts/bcm2835-rpi-a-plus.dts
@@ -1,6 +1,7 @@ 
 /dts-v1/;
 #include "bcm2835.dtsi"
 #include "bcm2835-rpi.dtsi"
+#include "bcm283x-rpi-usb-host.dtsi"
 
 / {
 	compatible = "raspberrypi,model-a-plus", "brcm,bcm2835";
@@ -21,7 +22,72 @@ 
 };
 
 &gpio {
-	pinctrl-0 = <&gpioout &alt0 &i2s_alt0 &alt3>;
+	/*
+	 * This is based on the unreleased schematic for the Model A+.
+	 *
+	 * Legend:
+	 * "NC" = not connected (no rail from the SoC)
+	 * "FOO" = GPIO line named "FOO" on the schematic
+	 * "FOO_N" = GPIO line named "FOO" on schematic, active low
+	 */
+	gpio-line-names = "SDA0",
+			  "SCL0",
+			  "SDA1",
+			  "SCL1",
+			  "GPIO_GCLK",
+			  "GPIO5",
+			  "GPIO6",
+			  "SPI_CE1_N",
+			  "SPI_CE0_N",
+			  "SPI_MISO",
+			  "SPI_MOSI",
+			  "SPI_SCLK",
+			  "GPIO12",
+			  "GPIO13",
+			  /* Serial port */
+			  "TXD0",
+			  "RXD0",
+			  "GPIO16",
+			  "GPIO17",
+			  "GPIO18",
+			  "GPIO19",
+			  "GPIO20",
+			  "GPIO21",
+			  "GPIO22",
+			  "GPIO23",
+			  "GPIO24",
+			  "GPIO25",
+			  "GPIO26",
+			  "GPIO27",
+			  "SDA0",
+			  "SCL0",
+			  "NC", /* GPIO30 */
+			  "NC", /* GPIO31 */
+			  "CAM_GPIO1", /* GPIO32 */
+			  "NC", /* GPIO33 */
+			  "NC", /* GPIO34 */
+			  "PWR_LOW_N", /* GPIO35 */
+			  "NC", /* GPIO36 */
+			  "NC", /* GPIO37 */
+			  "USB_LIMIT", /* GPIO38 */
+			  "NC", /* GPIO39 */
+			  "PWM0_OUT", /* GPIO40 */
+			  "CAM_GPIO0", /* GPIO41 */
+			  "NC", /* GPIO42 */
+			  "NC", /* GPIO43 */
+			  "NC", /* GPIO44 */
+			  "PWM1_OUT", /* GPIO45 */
+			  "HDMI_HPD_N",
+			  "STATUS_LED",
+			  /* Used by SD Card */
+			  "SD_CLK_R",
+			  "SD_CMD_R",
+			  "SD_DATA0_R",
+			  "SD_DATA1_R",
+			  "SD_DATA2_R",
+			  "SD_DATA3_R";
+
+	pinctrl-0 = <&gpioout &alt0 &i2s_alt0>;
 
 	/* I2S interface */
 	i2s_alt0: i2s_alt0 {
@@ -33,3 +99,9 @@ 
 &hdmi {
 	hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
 };
+
+&uart0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart0_gpio14>;
+	status = "okay";
+};
diff --git a/arch/arm/dts/bcm2835-rpi-a.dts b/arch/arm/dts/bcm2835-rpi-a.dts
index 306a84ee98..4b1af06c8d 100644
--- a/arch/arm/dts/bcm2835-rpi-a.dts
+++ b/arch/arm/dts/bcm2835-rpi-a.dts
@@ -1,6 +1,7 @@ 
 /dts-v1/;
 #include "bcm2835.dtsi"
 #include "bcm2835-rpi.dtsi"
+#include "bcm283x-rpi-usb-host.dtsi"
 
 / {
 	compatible = "raspberrypi,model-a", "brcm,bcm2835";
@@ -14,7 +15,74 @@ 
 };
 
 &gpio {
-	pinctrl-0 = <&gpioout &alt0 &i2s_alt2 &alt3>;
+	/*
+	 * Taken from Raspberry-Pi-Rev-1.0-Model-AB-Schematics.pdf
+	 * RPI00021 sheet 02
+	 *
+	 * Legend:
+	 * "NC" = not connected (no rail from the SoC)
+	 * "FOO" = GPIO line named "FOO" on the schematic
+	 * "FOO_N" = GPIO line named "FOO" on schematic, active low
+	 */
+	gpio-line-names = "SDA0",
+			  "SCL0",
+			  "SDA1",
+			  "SCL1",
+			  "GPIO_GCLK",
+			  "CAM_GPIO1",
+			  "LAN_RUN",
+			  "SPI_CE1_N",
+			  "SPI_CE0_N",
+			  "SPI_MISO",
+			  "SPI_MOSI",
+			  "SPI_SCLK",
+			  "NC", /* GPIO12 */
+			  "NC", /* GPIO13 */
+			  /* Serial port */
+			  "TXD0",
+			  "RXD0",
+			  "STATUS_LED_N",
+			  "GPIO17",
+			  "GPIO18",
+			  "NC", /* GPIO19 */
+			  "NC", /* GPIO20 */
+			  "GPIO21",
+			  "GPIO22",
+			  "GPIO23",
+			  "GPIO24",
+			  "GPIO25",
+			  "NC", /* GPIO26 */
+			  "CAM_GPIO0",
+			  /* Binary number representing build/revision */
+			  "CONFIG0",
+			  "CONFIG1",
+			  "CONFIG2",
+			  "CONFIG3",
+			  "NC", /* GPIO32 */
+			  "NC", /* GPIO33 */
+			  "NC", /* GPIO34 */
+			  "NC", /* GPIO35 */
+			  "NC", /* GPIO36 */
+			  "NC", /* GPIO37 */
+			  "NC", /* GPIO38 */
+			  "NC", /* GPIO39 */
+			  "PWM0_OUT",
+			  "NC", /* GPIO41 */
+			  "NC", /* GPIO42 */
+			  "NC", /* GPIO43 */
+			  "NC", /* GPIO44 */
+			  "PWM1_OUT",
+			  "HDMI_HPD_P",
+			  "SD_CARD_DET",
+			  /* Used by SD Card */
+			  "SD_CLK_R",
+			  "SD_CMD_R",
+			  "SD_DATA0_R",
+			  "SD_DATA1_R",
+			  "SD_DATA2_R",
+			  "SD_DATA3_R";
+
+	pinctrl-0 = <&gpioout &alt0 &i2s_alt2>;
 
 	/* I2S interface */
 	i2s_alt2: i2s_alt2 {
@@ -26,3 +94,9 @@ 
 &hdmi {
 	hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>;
 };
+
+&uart0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart0_gpio14>;
+	status = "okay";
+};
diff --git a/arch/arm/dts/bcm2835-rpi-b-plus.dts b/arch/arm/dts/bcm2835-rpi-b-plus.dts
index d5fdb8e761..a846f1e781 100644
--- a/arch/arm/dts/bcm2835-rpi-b-plus.dts
+++ b/arch/arm/dts/bcm2835-rpi-b-plus.dts
@@ -2,6 +2,7 @@ 
 #include "bcm2835.dtsi"
 #include "bcm2835-rpi.dtsi"
 #include "bcm283x-rpi-smsc9514.dtsi"
+#include "bcm283x-rpi-usb-host.dtsi"
 
 / {
 	compatible = "raspberrypi,model-b-plus", "brcm,bcm2835";
@@ -22,7 +23,73 @@ 
 };
 
 &gpio {
-	pinctrl-0 = <&gpioout &alt0 &i2s_alt0 &alt3>;
+	/*
+	 * Taken from Raspberry-Pi-B-Plus-V1.2-Schematics.pdf
+	 * RPI-BPLUS sheet 1
+	 *
+	 * Legend:
+	 * "NC" = not connected (no rail from the SoC)
+	 * "FOO" = GPIO line named "FOO" on the schematic
+	 * "FOO_N" = GPIO line named "FOO" on schematic, active low
+	 */
+	gpio-line-names = "SDA0",
+			  "SCL0",
+			  "SDA1",
+			  "SCL1",
+			  "GPIO_GCLK",
+			  "GPIO5",
+			  "GPIO6",
+			  "SPI_CE1_N",
+			  "SPI_CE0_N",
+			  "SPI_MISO",
+			  "SPI_MOSI",
+			  "SPI_SCLK",
+			  "GPIO12",
+			  "GPIO13",
+			  /* Serial port */
+			  "TXD0",
+			  "RXD0",
+			  "GPIO16",
+			  "GPIO17",
+			  "GPIO18",
+			  "GPIO19",
+			  "GPIO20",
+			  "GPIO21",
+			  "GPIO22",
+			  "GPIO23",
+			  "GPIO24",
+			  "GPIO25",
+			  "GPIO26",
+			  "GPIO27",
+			  "SDA0",
+			  "SCL0",
+			  "NC", /* GPIO30 */
+			  "LAN_RUN", /* GPIO31 */
+			  "CAM_GPIO1", /* GPIO32 */
+			  "NC", /* GPIO33 */
+			  "NC", /* GPIO34 */
+			  "PWR_LOW_N", /* GPIO35 */
+			  "NC", /* GPIO36 */
+			  "NC", /* GPIO37 */
+			  "USB_LIMIT", /* GPIO38 */
+			  "NC", /* GPIO39 */
+			  "PWM0_OUT", /* GPIO40 */
+			  "CAM_GPIO0", /* GPIO41 */
+			  "NC", /* GPIO42 */
+			  "NC", /* GPIO43 */
+			  "ETHCLK", /* GPIO44 */
+			  "PWM1_OUT", /* GPIO45 */
+			  "HDMI_HPD_N",
+			  "STATUS_LED",
+			  /* Used by SD Card */
+			  "SD_CLK_R",
+			  "SD_CMD_R",
+			  "SD_DATA0_R",
+			  "SD_DATA1_R",
+			  "SD_DATA2_R",
+			  "SD_DATA3_R";
+
+	pinctrl-0 = <&gpioout &alt0 &i2s_alt0>;
 
 	/* I2S interface */
 	i2s_alt0: i2s_alt0 {
@@ -34,3 +101,9 @@ 
 &hdmi {
 	hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
 };
+
+&uart0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart0_gpio14>;
+	status = "okay";
+};
diff --git a/arch/arm/dts/bcm2835-rpi-b-rev2.dts b/arch/arm/dts/bcm2835-rpi-b-rev2.dts
index bfc4bd9b77..e860964e39 100644
--- a/arch/arm/dts/bcm2835-rpi-b-rev2.dts
+++ b/arch/arm/dts/bcm2835-rpi-b-rev2.dts
@@ -2,6 +2,7 @@ 
 #include "bcm2835.dtsi"
 #include "bcm2835-rpi.dtsi"
 #include "bcm283x-rpi-smsc9512.dtsi"
+#include "bcm283x-rpi-usb-host.dtsi"
 
 / {
 	compatible = "raspberrypi,model-b-rev2", "brcm,bcm2835";
@@ -15,7 +16,73 @@ 
 };
 
 &gpio {
-	pinctrl-0 = <&gpioout &alt0 &i2s_alt2 &alt3>;
+	/*
+	 * Taken from Raspberry-Pi-Rev-2.0-Model-AB-Schematics.pdf
+	 * RPI00022 sheet 02
+	 *
+	 * Legend:
+	 * "NC" = not connected (no rail from the SoC)
+	 * "FOO" = GPIO line named "FOO" on the schematic
+	 * "FOO_N" = GPIO line named "FOO" on schematic, active low
+	 */
+	gpio-line-names = "SDA0",
+			  "SCL0",
+			  "SDA1",
+			  "SCL1",
+			  "GPIO_GCLK",
+			  "CAM_CLK",
+			  "LAN_RUN",
+			  "SPI_CE1_N",
+			  "SPI_CE0_N",
+			  "SPI_MISO",
+			  "SPI_MOSI",
+			  "SPI_SCLK",
+			  "NC", /* GPIO12 */
+			  "NC", /* GPIO13 */
+			  /* Serial port */
+			  "TXD0",
+			  "RXD0",
+			  "STATUS_LED_N",
+			  "GPIO17",
+			  "GPIO18",
+			  "NC", /* GPIO19 */
+			  "NC", /* GPIO20 */
+			  "CAM_GPIO",
+			  "GPIO22",
+			  "GPIO23",
+			  "GPIO24",
+			  "GPIO25",
+			  "NC", /* GPIO26 */
+			  "GPIO27",
+			  "GPIO28",
+			  "GPIO29",
+			  "GPIO30",
+			  "GPIO31",
+			  "NC", /* GPIO32 */
+			  "NC", /* GPIO33 */
+			  "NC", /* GPIO34 */
+			  "NC", /* GPIO35 */
+			  "NC", /* GPIO36 */
+			  "NC", /* GPIO37 */
+			  "NC", /* GPIO38 */
+			  "NC", /* GPIO39 */
+			  "PWM0_OUT",
+			  "NC", /* GPIO41 */
+			  "NC", /* GPIO42 */
+			  "NC", /* GPIO43 */
+			  "NC", /* GPIO44 */
+			  "PWM1_OUT",
+			  "HDMI_HPD_P",
+			  "SD_CARD_DET",
+			  /* Used by SD Card */
+			  "SD_CLK_R",
+			  "SD_CMD_R",
+			  "SD_DATA0_R",
+			  "SD_DATA1_R",
+			  "SD_DATA2_R",
+			  "SD_DATA3_R";
+
+	pinctrl-0 = <&gpioout &alt0 &i2s_alt2>;
 
 	/* I2S interface */
 	i2s_alt2: i2s_alt2 {
@@ -27,3 +94,9 @@ 
 &hdmi {
 	hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
 };
+
+&uart0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart0_gpio14>;
+	status = "okay";
+};
diff --git a/arch/arm/dts/bcm2835-rpi-b.dts b/arch/arm/dts/bcm2835-rpi-b.dts
index 0371bb7374..5d77f3f8c4 100644
--- a/arch/arm/dts/bcm2835-rpi-b.dts
+++ b/arch/arm/dts/bcm2835-rpi-b.dts
@@ -2,6 +2,7 @@ 
 #include "bcm2835.dtsi"
 #include "bcm2835-rpi.dtsi"
 #include "bcm283x-rpi-smsc9512.dtsi"
+#include "bcm283x-rpi-usb-host.dtsi"
 
 / {
 	compatible = "raspberrypi,model-b", "brcm,bcm2835";
@@ -15,9 +16,82 @@ 
 };
 
 &gpio {
-	pinctrl-0 = <&gpioout &alt0 &alt3>;
+	/*
+	 * Taken from Raspberry-Pi-Rev-1.0-Model-AB-Schematics.pdf
+	 * RPI00021 sheet 02
+	 *
+	 * Legend:
+	 * "NC" = not connected (no rail from the SoC)
+	 * "FOO" = GPIO line named "FOO" on the schematic
+	 * "FOO_N" = GPIO line named "FOO" on schematic, active low
+	 */
+	gpio-line-names = "SDA0",
+			  "SCL0",
+			  "SDA1",
+			  "SCL1",
+			  "GPIO_GCLK",
+			  "CAM_GPIO1",
+			  "LAN_RUN",
+			  "SPI_CE1_N",
+			  "SPI_CE0_N",
+			  "SPI_MISO",
+			  "SPI_MOSI",
+			  "SPI_SCLK",
+			  "NC", /* GPIO12 */
+			  "NC", /* GPIO13 */
+			  /* Serial port */
+			  "TXD0",
+			  "RXD0",
+			  "STATUS_LED_N",
+			  "GPIO17",
+			  "GPIO18",
+			  "NC", /* GPIO19 */
+			  "NC", /* GPIO20 */
+			  "GPIO21",
+			  "GPIO22",
+			  "GPIO23",
+			  "GPIO24",
+			  "GPIO25",
+			  "NC", /* GPIO26 */
+			  "CAM_GPIO0",
+			  /* Binary number representing build/revision */
+			  "CONFIG0",
+			  "CONFIG1",
+			  "CONFIG2",
+			  "CONFIG3",
+			  "NC", /* GPIO32 */
+			  "NC", /* GPIO33 */
+			  "NC", /* GPIO34 */
+			  "NC", /* GPIO35 */
+			  "NC", /* GPIO36 */
+			  "NC", /* GPIO37 */
+			  "NC", /* GPIO38 */
+			  "NC", /* GPIO39 */
+			  "PWM0_OUT",
+			  "NC", /* GPIO41 */
+			  "NC", /* GPIO42 */
+			  "NC", /* GPIO43 */
+			  "NC", /* GPIO44 */
+			  "PWM1_OUT",
+			  "HDMI_HPD_P",
+			  "SD_CARD_DET",
+			  /* Used by SD Card */
+			  "SD_CLK_R",
+			  "SD_CMD_R",
+			  "SD_DATA0_R",
+			  "SD_DATA1_R",
+			  "SD_DATA2_R",
+			  "SD_DATA3_R";
+
+	pinctrl-0 = <&gpioout &alt0>;
 };
 
 &hdmi {
 	hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>;
 };
+
+&uart0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart0_gpio14>;
+	status = "okay";
+};
diff --git a/arch/arm/dts/bcm2835-rpi.dtsi b/arch/arm/dts/bcm2835-rpi.dtsi
index e9b47b2bbc..8b95832dd0 100644
--- a/arch/arm/dts/bcm2835-rpi.dtsi
+++ b/arch/arm/dts/bcm2835-rpi.dtsi
@@ -39,22 +39,21 @@ 
 	};
 
 	alt0: alt0 {
-		brcm,pins = <0 1 2 3 4 5 7 8 9 10 11 14 15 40 45>;
+		brcm,pins = <4 5 7 8 9 10 11>;
 		brcm,function = <BCM2835_FSEL_ALT0>;
 	};
-
-	alt3: alt3 {
-		brcm,pins = <48 49 50 51 52 53>;
-		brcm,function = <BCM2835_FSEL_ALT3>;
-	};
 };
 
 &i2c0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&i2c0_gpio0>;
 	status = "okay";
 	clock-frequency = <100000>;
 };
 
 &i2c1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&i2c1_gpio2>;
 	status = "okay";
 	clock-frequency = <100000>;
 };
@@ -64,11 +63,21 @@ 
 };
 
 &sdhci {
+	pinctrl-names = "default";
+	pinctrl-0 = <&emmc_gpio48>;
 	status = "okay";
 	bus-width = <4>;
 };
 
+&sdhost {
+	pinctrl-names = "default";
+	pinctrl-0 = <&sdhost_gpio48>;
+	bus-width = <4>;
+};
+
 &pwm {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pwm0_gpio40 &pwm1_gpio45>;
 	status = "okay";
 };
 
@@ -84,3 +93,16 @@ 
 	power-domains = <&power RPI_POWER_DOMAIN_HDMI>;
 	status = "okay";
 };
+
+&vec {
+	power-domains = <&power RPI_POWER_DOMAIN_VEC>;
+	status = "okay";
+};
+
+&dsi0 {
+	power-domains = <&power RPI_POWER_DOMAIN_DSI0>;
+};
+
+&dsi1 {
+	power-domains = <&power RPI_POWER_DOMAIN_DSI1>;
+};
diff --git a/arch/arm/dts/bcm2835.dtsi b/arch/arm/dts/bcm2835.dtsi
index a78759e737..659b6e9513 100644
--- a/arch/arm/dts/bcm2835.dtsi
+++ b/arch/arm/dts/bcm2835.dtsi
@@ -23,3 +23,13 @@ 
 		};
 	};
 };
+
+&cpu_thermal {
+	coefficients = <(-538)	407000>;
+};
+
+/* enable thermal sensor with the correct compatible property set */
+&thermal {
+	compatible = "brcm,bcm2835-thermal";
+	status = "okay";
+};
diff --git a/arch/arm/dts/bcm2836-rpi-2-b.dts b/arch/arm/dts/bcm2836-rpi-2-b.dts
index 29e1cfe8eb..e8de41444b 100644
--- a/arch/arm/dts/bcm2836-rpi-2-b.dts
+++ b/arch/arm/dts/bcm2836-rpi-2-b.dts
@@ -2,6 +2,7 @@ 
 #include "bcm2836.dtsi"
 #include "bcm2835-rpi.dtsi"
 #include "bcm283x-rpi-smsc9514.dtsi"
+#include "bcm283x-rpi-usb-host.dtsi"
 
 / {
 	compatible = "raspberrypi,2-model-b", "brcm,bcm2836";
@@ -26,7 +27,7 @@ 
 };
 
 &gpio {
-	pinctrl-0 = <&gpioout &alt0 &i2s_alt0 &alt3>;
+	pinctrl-0 = <&gpioout &alt0 &i2s_alt0>;
 
 	/* I2S interface */
 	i2s_alt0: i2s_alt0 {
@@ -38,3 +39,9 @@ 
 &hdmi {
 	hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
 };
+
+&uart0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart0_gpio14>;
+	status = "okay";
+};
diff --git a/arch/arm/dts/bcm2836.dtsi b/arch/arm/dts/bcm2836.dtsi
index 9d0651d8f3..2c26d0be8b 100644
--- a/arch/arm/dts/bcm2836.dtsi
+++ b/arch/arm/dts/bcm2836.dtsi
@@ -36,6 +36,7 @@ 
 	cpus: cpus {
 		#address-cells = <1>;
 		#size-cells = <0>;
+		enable-method = "brcm,bcm2836-smp";
 
 		v7_cpu0: cpu@0 {
 			device_type = "cpu";
@@ -76,3 +77,13 @@ 
 	interrupt-parent = <&local_intc>;
 	interrupts = <8>;
 };
+
+&cpu_thermal {
+	coefficients = <(-538)	407000>;
+};
+
+/* enable thermal sensor with the correct compatible property set */
+&thermal {
+	compatible = "brcm,bcm2836-thermal";
+	status = "okay";
+};
diff --git a/arch/arm/dts/bcm2837-rpi-3-b.dts b/arch/arm/dts/bcm2837-rpi-3-b.dts
index 7841b724e3..20725ca487 100644
--- a/arch/arm/dts/bcm2837-rpi-3-b.dts
+++ b/arch/arm/dts/bcm2837-rpi-3-b.dts
@@ -2,6 +2,7 @@ 
 #include "bcm2837.dtsi"
 #include "bcm2835-rpi.dtsi"
 #include "bcm283x-rpi-smsc9514.dtsi"
+#include "bcm283x-rpi-usb-host.dtsi"
 
 / {
 	compatible = "raspberrypi,3-model-b", "brcm,bcm2837";
@@ -15,16 +16,36 @@ 
 		act {
 			gpios = <&gpio 47 0>;
 		};
-
-		pwr {
-			label = "PWR";
-			gpios = <&gpio 35 0>;
-			default-state = "keep";
-			linux,default-trigger = "default-on";
-		};
 	};
 };
 
+/* uart0 communicates with the BT module */
+&uart0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart0_gpio32 &gpclk2_gpio43>;
+	status = "okay";
+};
+
+/* uart1 is mapped to the pin header */
 &uart1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart1_gpio14>;
+	status = "okay";
+};
+
+/* SDHCI is used to control the SDIO for wireless */
+&sdhci {
+	pinctrl-names = "default";
+	pinctrl-0 = <&emmc_gpio34>;
+	status = "okay";
+	bus-width = <4>;
+	non-removable;
+};
+
+/* SDHOST is used to drive the SD card */
+&sdhost {
+	pinctrl-names = "default";
+	pinctrl-0 = <&sdhost_gpio48>;
 	status = "okay";
+	bus-width = <4>;
 };
diff --git a/arch/arm/dts/bcm2837.dtsi b/arch/arm/dts/bcm2837.dtsi
index 8216bbb29f..bc1cca5cf4 100644
--- a/arch/arm/dts/bcm2837.dtsi
+++ b/arch/arm/dts/bcm2837.dtsi
@@ -1,7 +1,7 @@ 
 #include "bcm283x.dtsi"
 
 / {
-	compatible = "brcm,bcm2836";
+	compatible = "brcm,bcm2837";
 
 	soc {
 		ranges = <0x7e000000 0x3f000000 0x1000000>,
@@ -30,6 +30,7 @@ 
 	cpus: cpus {
 		#address-cells = <1>;
 		#size-cells = <0>;
+		enable-method = "brcm,bcm2836-smp"; // for ARM 32-bit
 
 		cpu0: cpu@0 {
 			device_type = "cpu";
@@ -74,3 +75,13 @@ 
 	interrupt-parent = <&local_intc>;
 	interrupts = <8>;
 };
+
+&cpu_thermal {
+	coefficients = <(-538)	412000>;
+};
+
+/* enable thermal sensor with the correct compatible property set */
+&thermal {
+	compatible = "brcm,bcm2837-thermal";
+	status = "okay";
+};
diff --git a/arch/arm/dts/bcm283x-rpi-smsc9512.dtsi b/arch/arm/dts/bcm283x-rpi-smsc9512.dtsi
index 12c981e511..9a0599f711 100644
--- a/arch/arm/dts/bcm283x-rpi-smsc9512.dtsi
+++ b/arch/arm/dts/bcm283x-rpi-smsc9512.dtsi
@@ -1,6 +1,6 @@ 
 / {
 	aliases {
-		ethernet = &ethernet;
+		ethernet0 = &ethernet;
 	};
 };
 
diff --git a/arch/arm/dts/bcm283x-rpi-smsc9514.dtsi b/arch/arm/dts/bcm283x-rpi-smsc9514.dtsi
index 3f0a56ebcf..dc7ae776db 100644
--- a/arch/arm/dts/bcm283x-rpi-smsc9514.dtsi
+++ b/arch/arm/dts/bcm283x-rpi-smsc9514.dtsi
@@ -1,6 +1,6 @@ 
 / {
 	aliases {
-		ethernet = &ethernet;
+		ethernet0 = &ethernet;
 	};
 };
 
diff --git a/arch/arm/dts/bcm283x-rpi-usb-host.dtsi b/arch/arm/dts/bcm283x-rpi-usb-host.dtsi
new file mode 100644
index 0000000000..73f4ece8dc
--- /dev/null
+++ b/arch/arm/dts/bcm283x-rpi-usb-host.dtsi
@@ -0,0 +1,3 @@ 
+&usb {
+	dr_mode = "host";
+};
diff --git a/arch/arm/dts/bcm283x.dtsi b/arch/arm/dts/bcm283x.dtsi
index e5b4f20c2a..05a6f489af 100644
--- a/arch/arm/dts/bcm283x.dtsi
+++ b/arch/arm/dts/bcm283x.dtsi
@@ -3,6 +3,11 @@ 
 #include <dt-bindings/clock/bcm2835-aux.h>
 #include <dt-bindings/gpio/gpio.h>
 
+/* firmware-provided startup stubs live here, where the secondary CPUs are
+ * spinning.
+ */
+/memreserve/ 0x00000000 0x00001000;
+
 /* This include file covers the common peripherals and configuration between
  * bcm2835 and bcm2836 implementations, leaving the CPU configuration to
  * bcm2835.dtsi and bcm2836.dtsi.
@@ -19,6 +24,26 @@ 
 		bootargs = "earlyprintk console=ttyAMA0";
 	};
 
+	thermal-zones {
+		cpu_thermal: cpu-thermal {
+			polling-delay-passive = <0>;
+			polling-delay = <1000>;
+
+			thermal-sensors = <&thermal>;
+
+			trips {
+				cpu-crit {
+					temperature	= <80000>;
+					hysteresis	= <0>;
+					type		= "critical";
+				};
+			};
+
+			cooling-maps {
+			};
+		};
+	};
+
 	soc: soc {
 		compatible = "simple-bus";
 		#address-cells = <1>;
@@ -93,10 +118,13 @@ 
 			#clock-cells = <1>;
 			reg = <0x7e101000 0x2000>;
 
-			/* CPRMAN derives everything from the platform's
-			 * oscillator.
+			/* CPRMAN derives almost everything from the
+			 * platform's oscillator.  However, the DSI
+			 * pixel clocks come from the DSI analog PHY.
 			 */
-			clocks = <&clk_osc>;
+			clocks = <&clk_osc>,
+				<&dsi0 0>, <&dsi0 1>, <&dsi0 2>,
+				<&dsi1 0>, <&dsi1 1>, <&dsi1 2>;
 		};
 
 		rng@7e104000 {
@@ -104,7 +132,7 @@ 
 			reg = <0x7e104000 0x10>;
 		};
 
-		mailbox: mailbox@7e00b800 {
+		mailbox: mailbox@7e00b880 {
 			compatible = "brcm,bcm2835-mbox";
 			reg = <0x7e00b880 0x40>;
 			interrupts = <0 1>;
@@ -132,6 +160,213 @@ 
 
 			interrupt-controller;
 			#interrupt-cells = <2>;
+
+			/* Defines pin muxing groups according to
+			 * BCM2835-ARM-Peripherals.pdf page 102.
+			 *
+			 * While each pin can have its mux selected
+			 * for various functions individually, some
+			 * groups only make sense to switch to a
+			 * particular function together.
+			 */
+			dpi_gpio0: dpi_gpio0 {
+				brcm,pins = <0 1 2 3 4 5 6 7 8 9 10 11
+					     12 13 14 15 16 17 18 19
+					     20 21 22 23 24 25 26 27>;
+				brcm,function = <BCM2835_FSEL_ALT2>;
+			};
+			emmc_gpio22: emmc_gpio22 {
+				brcm,pins = <22 23 24 25 26 27>;
+				brcm,function = <BCM2835_FSEL_ALT3>;
+			};
+			emmc_gpio34: emmc_gpio34 {
+				brcm,pins = <34 35 36 37 38 39>;
+				brcm,function = <BCM2835_FSEL_ALT3>;
+				brcm,pull = <BCM2835_PUD_OFF
+					     BCM2835_PUD_UP
+					     BCM2835_PUD_UP
+					     BCM2835_PUD_UP
+					     BCM2835_PUD_UP
+					     BCM2835_PUD_UP>;
+			};
+			emmc_gpio48: emmc_gpio48 {
+				brcm,pins = <48 49 50 51 52 53>;
+				brcm,function = <BCM2835_FSEL_ALT3>;
+			};
+
+			gpclk0_gpio4: gpclk0_gpio4 {
+				brcm,pins = <4>;
+				brcm,function = <BCM2835_FSEL_ALT0>;
+			};
+			gpclk1_gpio5: gpclk1_gpio5 {
+				brcm,pins = <5>;
+				brcm,function = <BCM2835_FSEL_ALT0>;
+			};
+			gpclk1_gpio42: gpclk1_gpio42 {
+				brcm,pins = <42>;
+				brcm,function = <BCM2835_FSEL_ALT0>;
+			};
+			gpclk1_gpio44: gpclk1_gpio44 {
+				brcm,pins = <44>;
+				brcm,function = <BCM2835_FSEL_ALT0>;
+			};
+			gpclk2_gpio6: gpclk2_gpio6 {
+				brcm,pins = <6>;
+				brcm,function = <BCM2835_FSEL_ALT0>;
+			};
+			gpclk2_gpio43: gpclk2_gpio43 {
+				brcm,pins = <43>;
+				brcm,function = <BCM2835_FSEL_ALT0>;
+			};
+
+			i2c0_gpio0: i2c0_gpio0 {
+				brcm,pins = <0 1>;
+				brcm,function = <BCM2835_FSEL_ALT0>;
+			};
+			i2c0_gpio28: i2c0_gpio28 {
+				brcm,pins = <28 29>;
+				brcm,function = <BCM2835_FSEL_ALT0>;
+			};
+			i2c0_gpio44: i2c0_gpio44 {
+				brcm,pins = <44 45>;
+				brcm,function = <BCM2835_FSEL_ALT1>;
+			};
+			i2c1_gpio2: i2c1_gpio2 {
+				brcm,pins = <2 3>;
+				brcm,function = <BCM2835_FSEL_ALT0>;
+			};
+			i2c1_gpio44: i2c1_gpio44 {
+				brcm,pins = <44 45>;
+				brcm,function = <BCM2835_FSEL_ALT2>;
+			};
+			i2c_slave_gpio18: i2c_slave_gpio18 {
+				brcm,pins = <18 19 20 21>;
+				brcm,function = <BCM2835_FSEL_ALT3>;
+			};
+
+			jtag_gpio4: jtag_gpio4 {
+				brcm,pins = <4 5 6 12 13>;
+				brcm,function = <BCM2835_FSEL_ALT4>;
+			};
+			jtag_gpio22: jtag_gpio22 {
+				brcm,pins = <22 23 24 25 26 27>;
+				brcm,function = <BCM2835_FSEL_ALT4>;
+			};
+
+			pcm_gpio18: pcm_gpio18 {
+				brcm,pins = <18 19 20 21>;
+				brcm,function = <BCM2835_FSEL_ALT0>;
+			};
+			pcm_gpio28: pcm_gpio28 {
+				brcm,pins = <28 29 30 31>;
+				brcm,function = <BCM2835_FSEL_ALT2>;
+			};
+
+			pwm0_gpio12: pwm0_gpio12 {
+				brcm,pins = <12>;
+				brcm,function = <BCM2835_FSEL_ALT0>;
+			};
+			pwm0_gpio18: pwm0_gpio18 {
+				brcm,pins = <18>;
+				brcm,function = <BCM2835_FSEL_ALT5>;
+			};
+			pwm0_gpio40: pwm0_gpio40 {
+				brcm,pins = <40>;
+				brcm,function = <BCM2835_FSEL_ALT0>;
+			};
+			pwm1_gpio13: pwm1_gpio13 {
+				brcm,pins = <13>;
+				brcm,function = <BCM2835_FSEL_ALT0>;
+			};
+			pwm1_gpio19: pwm1_gpio19 {
+				brcm,pins = <19>;
+				brcm,function = <BCM2835_FSEL_ALT5>;
+			};
+			pwm1_gpio41: pwm1_gpio41 {
+				brcm,pins = <41>;
+				brcm,function = <BCM2835_FSEL_ALT0>;
+			};
+			pwm1_gpio45: pwm1_gpio45 {
+				brcm,pins = <45>;
+				brcm,function = <BCM2835_FSEL_ALT0>;
+			};
+
+			sdhost_gpio48: sdhost_gpio48 {
+				brcm,pins = <48 49 50 51 52 53>;
+				brcm,function = <BCM2835_FSEL_ALT0>;
+			};
+
+			spi0_gpio7: spi0_gpio7 {
+				brcm,pins = <7 8 9 10 11>;
+				brcm,function = <BCM2835_FSEL_ALT0>;
+			};
+			spi0_gpio35: spi0_gpio35 {
+				brcm,pins = <35 36 37 38 39>;
+				brcm,function = <BCM2835_FSEL_ALT0>;
+			};
+			spi1_gpio16: spi1_gpio16 {
+				brcm,pins = <16 17 18 19 20 21>;
+				brcm,function = <BCM2835_FSEL_ALT4>;
+			};
+			spi2_gpio40: spi2_gpio40 {
+				brcm,pins = <40 41 42 43 44 45>;
+				brcm,function = <BCM2835_FSEL_ALT4>;
+			};
+
+			uart0_gpio14: uart0_gpio14 {
+				brcm,pins = <14 15>;
+				brcm,function = <BCM2835_FSEL_ALT0>;
+			};
+			/* Separate from the uart0_gpio14 group
+			 * because it conflicts with spi1_gpio16, and
+			 * people often run uart0 on the two pins
+			 * without flow control.
+			 */
+			uart0_ctsrts_gpio16: uart0_ctsrts_gpio16 {
+				brcm,pins = <16 17>;
+				brcm,function = <BCM2835_FSEL_ALT3>;
+			};
+			uart0_ctsrts_gpio30: uart0_ctsrts_gpio30 {
+				brcm,pins = <30 31>;
+				brcm,function = <BCM2835_FSEL_ALT3>;
+			};
+			uart0_gpio32: uart0_gpio32 {
+				brcm,pins = <32 33>;
+				brcm,function = <BCM2835_FSEL_ALT3>;
+			};
+			uart0_gpio36: uart0_gpio36 {
+				brcm,pins = <36 37>;
+				brcm,function = <BCM2835_FSEL_ALT2>;
+			};
+			uart0_ctsrts_gpio38: uart0_ctsrts_gpio38 {
+				brcm,pins = <38 39>;
+				brcm,function = <BCM2835_FSEL_ALT2>;
+			};
+
+			uart1_gpio14: uart1_gpio14 {
+				brcm,pins = <14 15>;
+				brcm,function = <BCM2835_FSEL_ALT5>;
+			};
+			uart1_ctsrts_gpio16: uart1_ctsrts_gpio16 {
+				brcm,pins = <16 17>;
+				brcm,function = <BCM2835_FSEL_ALT5>;
+			};
+			uart1_gpio32: uart1_gpio32 {
+				brcm,pins = <32 33>;
+				brcm,function = <BCM2835_FSEL_ALT5>;
+			};
+			uart1_ctsrts_gpio30: uart1_ctsrts_gpio30 {
+				brcm,pins = <30 31>;
+				brcm,function = <BCM2835_FSEL_ALT5>;
+			};
+			uart1_gpio40: uart1_gpio40 {
+				brcm,pins = <40 41>;
+				brcm,function = <BCM2835_FSEL_ALT5>;
+			};
+			uart1_ctsrts_gpio42: uart1_ctsrts_gpio42 {
+				brcm,pins = <42 43>;
+				brcm,function = <BCM2835_FSEL_ALT5>;
+			};
 		};
 
 		uart0: serial@7e201000 {
@@ -144,6 +379,16 @@ 
 			arm,primecell-periphid = <0x00241011>;
 		};
 
+		sdhost: mmc@7e202000 {
+			compatible = "brcm,bcm2835-sdhost";
+			reg = <0x7e202000 0x100>;
+			interrupts = <2 24>;
+			clocks = <&clocks BCM2835_CLOCK_VPU>;
+			dmas = <&dma 13>;
+			dma-names = "rx-tx";
+			status = "disabled";
+		};
+
 		i2s: i2s@7e203000 {
 			compatible = "brcm,bcm2835-i2s";
 			reg = <0x7e203000 0x20>,
@@ -187,6 +432,33 @@ 
 			interrupts = <2 14>; /* pwa1 */
 		};
 
+		dsi0: dsi@7e209000 {
+			compatible = "brcm,bcm2835-dsi0";
+			reg = <0x7e209000 0x78>;
+			interrupts = <2 4>;
+			#address-cells = <1>;
+			#size-cells = <0>;
+			#clock-cells = <1>;
+
+			clocks = <&clocks BCM2835_PLLA_DSI0>,
+				 <&clocks BCM2835_CLOCK_DSI0E>,
+				 <&clocks BCM2835_CLOCK_DSI0P>;
+			clock-names = "phy", "escape", "pixel";
+
+			clock-output-names = "dsi0_byte",
+					     "dsi0_ddr2",
+					     "dsi0_ddr";
+
+		};
+
+		thermal: thermal@7e212000 {
+			compatible = "brcm,bcm2835-thermal";
+			reg = <0x7e212000 0x8>;
+			clocks = <&clocks BCM2835_CLOCK_TSENS>;
+			#thermal-sensor-cells = <0>;
+			status = "disabled";
+		};
+
 		aux: aux@0x7e215000 {
 			compatible = "brcm,bcm2835-aux";
 			#clock-cells = <1>;
@@ -246,6 +518,26 @@ 
 			interrupts = <2 1>;
 		};
 
+		dsi1: dsi@7e700000 {
+			compatible = "brcm,bcm2835-dsi1";
+			reg = <0x7e700000 0x8c>;
+			interrupts = <2 12>;
+			#address-cells = <1>;
+			#size-cells = <0>;
+			#clock-cells = <1>;
+
+			clocks = <&clocks BCM2835_PLLD_DSI1>,
+				 <&clocks BCM2835_CLOCK_DSI1E>,
+				 <&clocks BCM2835_CLOCK_DSI1P>;
+			clock-names = "phy", "escape", "pixel";
+
+			clock-output-names = "dsi1_byte",
+					     "dsi1_ddr2",
+					     "dsi1_ddr";
+
+			status = "disabled";
+		};
+
 		i2c1: i2c@7e804000 {
 			compatible = "brcm,bcm2835-i2c";
 			reg = <0x7e804000 0x1000>;
@@ -266,6 +558,14 @@ 
 			status = "disabled";
 		};
 
+		vec: vec@7e806000 {
+			compatible = "brcm,bcm2835-vec";
+			reg = <0x7e806000 0x1000>;
+			clocks = <&clocks BCM2835_CLOCK_VEC>;
+			interrupts = <2 27>;
+			status = "disabled";
+		};
+
 		pixelvalve@7e807000 {
 			compatible = "brcm,bcm2835-pixelvalve2";
 			reg = <0x7e807000 0x100>;
@@ -281,6 +581,8 @@ 
 			clocks = <&clocks BCM2835_PLLH_PIX>,
 				 <&clocks BCM2835_CLOCK_HSM>;
 			clock-names = "pixel", "hdmi";
+			dmas = <&dma 17>;
+			dma-names = "audio-rx";
 			status = "disabled";
 		};
 
@@ -290,6 +592,10 @@ 
 			interrupts = <1 9>;
 			#address-cells = <1>;
 			#size-cells = <0>;
+			clocks = <&clk_usb>;
+			clock-names = "otg";
+			phys = <&usbphy>;
+			phy-names = "usb2-phy";
 		};
 
 		v3d: v3d@7ec00000 {
@@ -317,6 +623,17 @@ 
 			clock-frequency = <19200000>;
 		};
 
+		clk_usb: clock@4 {
+			compatible = "fixed-clock";
+			reg = <4>;
+			#clock-cells = <0>;
+			clock-output-names = "otg";
+			clock-frequency = <480000000>;
+		};
+	};
+
+	usbphy: phy {
+		compatible = "usb-nop-xceiv";
 	};
 };
 
diff --git a/include/dt-bindings/clock/bcm2835.h b/include/dt-bindings/clock/bcm2835.h
index 360e00cefd..a0c812b0fa 100644
--- a/include/dt-bindings/clock/bcm2835.h
+++ b/include/dt-bindings/clock/bcm2835.h
@@ -64,3 +64,5 @@ 
 #define BCM2835_CLOCK_CAM1		46
 #define BCM2835_CLOCK_DSI0E		47
 #define BCM2835_CLOCK_DSI1E		48
+#define BCM2835_CLOCK_DSI0P		49
+#define BCM2835_CLOCK_DSI1P		50
diff --git a/include/dt-bindings/pinctrl/bcm2835.h b/include/dt-bindings/pinctrl/bcm2835.h
index 6f0bc37af3..e4e4fdf5d3 100644
--- a/include/dt-bindings/pinctrl/bcm2835.h
+++ b/include/dt-bindings/pinctrl/bcm2835.h
@@ -24,4 +24,9 @@ 
 #define BCM2835_FSEL_ALT2	6
 #define BCM2835_FSEL_ALT3	7
 
+/* brcm,pull property */
+#define BCM2835_PUD_OFF		0
+#define BCM2835_PUD_DOWN	1
+#define BCM2835_PUD_UP		2
+
 #endif /* __DT_BINDINGS_PINCTRL_BCM2835_H__ */