diff mbox series

fdt: update bcm283x device tree sources to Linux 4.14 state

Message ID 20171004043337.59595-1-agraf@suse.de
State Superseded
Headers show
Series fdt: update bcm283x device tree sources to Linux 4.14 state | expand

Commit Message

Alexander Graf Oct. 4, 2017, 4:33 a.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.

Signed-off-by: Alexander Graf <agraf@suse.de>
---
 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

Fabian Vogt Oct. 4, 2017, 6:59 a.m. UTC | #1
On Monday, October 4 2017, 06:33:37 CEST 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.

Looks good to me.

> Signed-off-by: Alexander Graf <agraf@suse.de>
Acked-by: Fabian Vogt <fvogt@suse.com>

> ---
>  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..e36c392a2b 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>;
> +	bus-width = <4>;
> +};
> +
> +&sdhost {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&sdhost_gpio48>;
>  	status = "okay";
>  	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. 4, 2017, 11:38 a.m. UTC | #2
On 04.10.17 08:59, Fabian Vogt wrote:
> On Monday, October 4 2017, 06:33:37 CEST 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.
> 
> Looks good to me.
> 
>> Signed-off-by: Alexander Graf <agraf@suse.de>
> Acked-by: Fabian Vogt <fvogt@suse.com>

My testing just revealed that this breaks on the RPi 1B. It doesn't find 
the SD card.

I'll dig a bit.


Alex
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..e36c392a2b 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>;
+	bus-width = <4>;
+};
+
+&sdhost {
+	pinctrl-names = "default";
+	pinctrl-0 = <&sdhost_gpio48>;
 	status = "okay";
 	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__ */