Skip to contentSkip to conversation

ARM: dts: add Raspberry Pi 3 A+

PATCH Superseded Stefan Wahren 3 participants 10 messages Nov 15, 2018 – Dec 27, 2018

Subsystems (4)

v2 of 5 Superseded Latest is v5 →

lore
Share & tools
lore
#0 lore raw

v2 cover ARM: dts: add Raspberry Pi 3 A+

This patch series adds support for the brand new Raspberry Pi 3 A+ .

Changes in V2:
- add missing Makefile change for arm64

Stefan Wahren (3):
dt-bindings: bcm: Add Raspberry Pi 3 A+
ARM: dts: add Raspberry Pi 3 A+
arm64: dts: broadcom: Add reference to RPi 3 A+

 .../devicetree/bindings/arm/bcm/brcm,bcm2835.txt   |   4 +
 arch/arm/boot/dts/Makefile                         |   1 +
 arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts         | 107 +++++++++++++++++++++
 arch/arm64/boot/dts/broadcom/Makefile              |   3 +-
 .../boot/dts/broadcom/bcm2837-rpi-3-a-plus.dts     |   2 +
 5 files changed, 116 insertions(+), 1 deletion(-)
 create mode 100644 arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts
 create mode 100644 arch/arm64/boot/dts/broadcom/bcm2837-rpi-3-a-plus.dts
Signature · 1 line
2.7.4
#1 lore raw

PATCH v2 1/3 dt-bindings: bcm: Add Raspberry Pi 3 A+

This adds the root properties for the Raspberry Pi 3 A+ .

---
 Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt | 4 ++++
 1 file changed, 4 insertions(+)
Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt +4 -0
index 0dcc3ea..245328f 100644
@@ -30,6 +30,10 @@ Raspberry Pi 2 Model B
 Required root node properties:
 compatible = "raspberrypi,2-model-b", "brcm,bcm2836";
 
+Raspberry Pi 3 Model A+
+Required root node properties:
+compatible = "raspberrypi,3-model-a-plus", "brcm,bcm2837";
+
 Raspberry Pi 3 Model B
 Required root node properties:
 compatible = "raspberrypi,3-model-b", "brcm,bcm2837";
Signature · 1 line
2.7.4
#2 lore raw

PATCH v2 2/3 ARM: dts: add Raspberry Pi 3 A+

In reply to Stefan Wahren

The Raspberry Pi 3 A+ is similar to the Pi 3 B+ but has only 512 MB RAM, 1 USB 2.0 port and no Ethernet.

---
 arch/arm/boot/dts/Makefile                 |   1 +
 arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts | 107 +++++++++++++++++++++++++++++
 2 files changed, 108 insertions(+)
 create mode 100644 arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts
arch/arm/boot/dts/Makefile +1 -0
index b0e966d..15bbd0d 100644
@@ -79,6 +79,7 @@ dtb-$(CONFIG_ARCH_BCM2835) += \
 	bcm2835-rpi-a-plus.dtb \
 	bcm2835-rpi-cm1-io1.dtb \
 	bcm2836-rpi-2-b.dtb \
+	bcm2837-rpi-3-a-plus.dtb \
 	bcm2837-rpi-3-b.dtb \
 	bcm2837-rpi-3-b-plus.dtb \
 	bcm2837-rpi-cm3-io3.dtb \
arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts new file +107 -0

107 lines not on this page · raw message

Signature · 1 line
2.7.4
#3 lore raw

Hi Stefan,

Quoted 126 lines · Stefan Wahren

The Raspberry Pi 3 A+ is similar to the Pi 3 B+ but has only 512 MB RAM, 1 USB 2.0 port and no Ethernet.

---
  arch/arm/boot/dts/Makefile                 |   1 +
  arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts | 107 +++++++++++++++++++++++++++++
  2 files changed, 108 insertions(+)

create mode 100644 arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts

arch/arm/boot/dts/Makefile +1 -0
index b0e966d..15bbd0d 100644
@@ -79,6 +79,7 @@ dtb-$(CONFIG_ARCH_BCM2835) += \
  	bcm2835-rpi-a-plus.dtb \
  	bcm2835-rpi-cm1-io1.dtb \
  	bcm2836-rpi-2-b.dtb \
+	bcm2837-rpi-3-a-plus.dtb \
  	bcm2837-rpi-3-b.dtb \
  	bcm2837-rpi-3-b-plus.dtb \
  	bcm2837-rpi-cm3-io3.dtb \
arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts new file +97 -0
new file mode 100644
index 0000000..75785dd
@@ -0,0 +1,107 @@
+// SPDX-License-Identifier: GPL-2.0
+/dts-v1/;
+#include "bcm2837.dtsi"
+#include "bcm2836-rpi.dtsi"
+#include "bcm283x-rpi-usb-host.dtsi"
+
+/ {
+	compatible = "raspberrypi,3-model-a-plus", "brcm,bcm2837";
+	model = "Raspberry Pi 3 Model A+";
+
+	chosen {
+		/* 8250 auxiliary UART instead of pl011 */
+		stdout-path = "serial1:115200n8";
+	};
+
+	memory {
+		reg = <0 0x20000000>;
+	};
+
+	leds {
+		act {
+			gpios = <&gpio 29 GPIO_ACTIVE_HIGH>;
+		};
+
+		pwr {
+			label = "PWR";
+			gpios = <&expgpio 2 GPIO_ACTIVE_LOW>;
+		};
+	};
+
+	wifi_pwrseq: wifi-pwrseq {
+		compatible = "mmc-pwrseq-simple";
+		reset-gpios = <&expgpio 1 GPIO_ACTIVE_HIGH>;
+	};
+};
+
+&firmware {
+	expgpio: gpio {
+		compatible = "raspberrypi,firmware-gpio";
+		gpio-controller;
+		#gpio-cells = <2>;
+		gpio-line-names = "BT_ON",
+				  "WL_ON",
+				  "STATUS_LED",
+				  "",
+				  "",
+				  "CAM_GPIO0",
+				  "CAM_GPIO1",
+				  "";
+		status = "okay";
+	};
+};
+
+&hdmi {
+	hpd-gpios = <&gpio 28 GPIO_ACTIVE_LOW>;
+};
+
+&pwm {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pwm0_gpio40 &pwm1_gpio41>;
+	status = "okay";
+};
+
+/* SDHCI is used to control the SDIO for wireless */
+&sdhci {
+	#address-cells = <1>;
+	#size-cells = <0>;
+	pinctrl-names = "default";
+	pinctrl-0 = <&emmc_gpio34>;
+	status = "okay";
+	bus-width = <4>;
+	non-removable;
+	mmc-pwrseq = <&wifi_pwrseq>;
+
+	brcmf: wifi@1 {
+		reg = <1>;
+		compatible = "brcm,bcm4329-fmac";
+	};
+};
+
+/* SDHOST is used to drive the SD card */
+&sdhost {
+	pinctrl-names = "default";
+	pinctrl-0 = <&sdhost_gpio48>;
+	status = "okay";
+	bus-width = <4>;
+};
+
+/* uart0 communicates with the BT module */
+&uart0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart0_ctsrts_gpio30 &uart0_gpio32 &gpclk2_gpio43>;
+	status = "okay";
+
+	bluetooth {
+		compatible = "brcm,bcm43438-bt";
+		max-speed = <2000000>;

arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts line 107

Quoted 10 lines
arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts new file +10 -0
+		shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>;
+	};
+};
+
+/* uart1 is mapped to the pin header */
+&uart1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart1_gpio14>;
+	status = "okay";
+};

Although this DTS originally looked correct to me, I learnt yesterday from poring over the schematic that, due to routing congestion around the WiFi combo chip, the 3A+ drives the BT_ON pin from the same source - GPIO1 on the expander - as the WL_ON pin. GPIO0 on the expander is not connected. This means that the shutdown-gpios property of the bluetooth node is incorrect.

Furthermore, I've been told that the current production 3B+ is the same in this regard - a change since the 3B+ schematic with which the firmware support was developed - so the 3B+ DTS should ideally also be changed, although leaving it as it stands is likely to make little practical difference.

Phil

_______________________________________________
linux-arm-kernel mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

#4 lore raw

Hi Phil,

[add Marcel to CC]

Quoted 140 lines

Phil Elwell <[email protected]> hat am 14. Dezember 2018 um 22:49 geschrieben:

Hi Stefan,

Quoted 134 lines · Stefan Wahren

The Raspberry Pi 3 A+ is similar to the Pi 3 B+ but has only 512 MB RAM, 1 USB 2.0 port and no Ethernet.

---
  arch/arm/boot/dts/Makefile                 |   1 +
  arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts | 107 +++++++++++++++++++++++++++++
  2 files changed, 108 insertions(+)

create mode 100644 arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts

arch/arm/boot/dts/Makefile +1 -0
index b0e966d..15bbd0d 100644
@@ -79,6 +79,7 @@ dtb-$(CONFIG_ARCH_BCM2835) += \
  	bcm2835-rpi-a-plus.dtb \
  	bcm2835-rpi-cm1-io1.dtb \
  	bcm2836-rpi-2-b.dtb \
+	bcm2837-rpi-3-a-plus.dtb \
  	bcm2837-rpi-3-b.dtb \
  	bcm2837-rpi-3-b-plus.dtb \
  	bcm2837-rpi-cm3-io3.dtb \
arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts new file +106 -0
new file mode 100644
index 0000000..75785dd
@@ -0,0 +1,107 @@
+// SPDX-License-Identifier: GPL-2.0
+/dts-v1/;
+#include "bcm2837.dtsi"
+#include "bcm2836-rpi.dtsi"
+#include "bcm283x-rpi-usb-host.dtsi"
+
+/ {
+	compatible = "raspberrypi,3-model-a-plus", "brcm,bcm2837";
+	model = "Raspberry Pi 3 Model A+";
+
+	chosen {
+		/* 8250 auxiliary UART instead of pl011 */
+		stdout-path = "serial1:115200n8";
+	};
+
+	memory {
+		reg = <0 0x20000000>;
+	};
+
+	leds {
+		act {
+			gpios = <&gpio 29 GPIO_ACTIVE_HIGH>;
+		};
+
+		pwr {
+			label = "PWR";
+			gpios = <&expgpio 2 GPIO_ACTIVE_LOW>;
+		};
+	};
+
+	wifi_pwrseq: wifi-pwrseq {
+		compatible = "mmc-pwrseq-simple";
+		reset-gpios = <&expgpio 1 GPIO_ACTIVE_HIGH>;
+	};
+};
+
+&firmware {
+	expgpio: gpio {
+		compatible = "raspberrypi,firmware-gpio";
+		gpio-controller;
+		#gpio-cells = <2>;
+		gpio-line-names = "BT_ON",
+				  "WL_ON",
+				  "STATUS_LED",
+				  "",
+				  "",
+				  "CAM_GPIO0",
+				  "CAM_GPIO1",
+				  "";
+		status = "okay";
+	};
+};
+
+&hdmi {
+	hpd-gpios = <&gpio 28 GPIO_ACTIVE_LOW>;
+};
+
+&pwm {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pwm0_gpio40 &pwm1_gpio41>;
+	status = "okay";
+};
+
+/* SDHCI is used to control the SDIO for wireless */
+&sdhci {
+	#address-cells = <1>;
+	#size-cells = <0>;
+	pinctrl-names = "default";
+	pinctrl-0 = <&emmc_gpio34>;
+	status = "okay";
+	bus-width = <4>;
+	non-removable;
+	mmc-pwrseq = <&wifi_pwrseq>;
+
+	brcmf: wifi@1 {
+		reg = <1>;
+		compatible = "brcm,bcm4329-fmac";
+	};
+};
+
+/* SDHOST is used to drive the SD card */
+&sdhost {
+	pinctrl-names = "default";
+	pinctrl-0 = <&sdhost_gpio48>;
+	status = "okay";
+	bus-width = <4>;
+};
+
+/* uart0 communicates with the BT module */
+&uart0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart0_ctsrts_gpio30 &uart0_gpio32 &gpclk2_gpio43>;
+	status = "okay";
+
+	bluetooth {
+		compatible = "brcm,bcm43438-bt";
+		max-speed = <2000000>;
+		shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>;
+	};
+};
+
+/* uart1 is mapped to the pin header */
+&uart1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart1_gpio14>;
+	status = "okay";
Quoted 8 lines

arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts line 107

Quoted 2 lines
arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts new file +1 -0
+};

Although this DTS originally looked correct to me, I learnt yesterday from poring over the schematic that, due to routing congestion around the WiFi combo chip, the 3A+ drives the BT_ON pin from the same source - GPIO1 on the expander - as the WL_ON pin. GPIO0 on the expander is not connected. This means that the shutdown-gpios property of the bluetooth node is incorrect.

thanks for pointing out. I tested this on my RPi 3 A+ with some gpio-exp hacking and can confirm this behavior.

I don't know the reason for this design decision, but both drivers (wifi and BT) can't share the control of GPIO1. Additionally we can't give the control to only one of them, because the other one could be unexpectedly tied into reset. So i decided to drop the reset control of both ones with all the consequences (no power management, default baudrate usage of BT) in V4 of this series.

Quoted 5 lines

Furthermore, I've been told that the current production 3B+ is the same in this regard - a change since the 3B+ schematic with which the firmware support was developed - so the 3B+ DTS should ideally also be changed, although leaving it as it stands is likely to make little practical difference.

Oh dear. I think there is no hurry for changing 3B+. So i would like to wait until this series has been applied.

Stefan

Quoted 2 lines

Phil

_______________________________________________
linux-arm-kernel mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

#5 lore raw

PATCH v2 3/3 arm64: dts: broadcom: Add reference to RPi 3 A+

In reply to Stefan Wahren

This adds a reference to the dts of the Raspberry Pi 3 A+, so we don't need to maintain the content in arm64.

---
 arch/arm64/boot/dts/broadcom/Makefile                 | 3 ++-
 arch/arm64/boot/dts/broadcom/bcm2837-rpi-3-a-plus.dts | 2 ++
 2 files changed, 4 insertions(+), 1 deletion(-)
 create mode 100644 arch/arm64/boot/dts/broadcom/bcm2837-rpi-3-a-plus.dts
arch/arm64/boot/dts/broadcom/Makefile +2 -1
index 667ca98..d1d31cc 100644
@@ -1,5 +1,6 @@
 # SPDX-License-Identifier: GPL-2.0
-dtb-$(CONFIG_ARCH_BCM2835) += bcm2837-rpi-3-b.dtb \
+dtb-$(CONFIG_ARCH_BCM2835) += bcm2837-rpi-3-a-plus.dtb \
+			      bcm2837-rpi-3-b.dtb \
 			      bcm2837-rpi-3-b-plus.dtb \
 			      bcm2837-rpi-cm3-io3.dtb
 
arch/arm64/boot/dts/broadcom/bcm2837-rpi-3-a-plus.dts new file +2 -0
new file mode 100644
index 0000000..f0ec56a
@@ -0,0 +1,2 @@
+// SPDX-License-Identifier: GPL-2.0
+#include "arm/bcm2837-rpi-3-a-plus.dts"
Signature · 1 line
2.7.4
#6 lore raw

cover ARM: dts: add Raspberry Pi 3 A+

In reply to Stefan Wahren

This patch series adds support for the brand new Raspberry Pi 3 A+ .

Stefan Wahren (3):
dt-bindings: bcm: Add Raspberry Pi 3 A+
ARM: dts: add Raspberry Pi 3 A+
arm64: dts: broadcom: Add reference to RPi 3 A+

 .../devicetree/bindings/arm/bcm/brcm,bcm2835.txt   |   4 +
 arch/arm/boot/dts/Makefile                         |   1 +
 arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts         | 107 +++++++++++++++++++++
 .../boot/dts/broadcom/bcm2837-rpi-3-a-plus.dts     |   2 +
 4 files changed, 114 insertions(+)
 create mode 100644 arch/arm/boot/dts/bcm2837-rpi-3-a-plus.dts
 create mode 100644 arch/arm64/boot/dts/broadcom/bcm2837-rpi-3-a-plus.dts
Signature · 1 line
2.7.4
#7 lore raw

v2 cover ARM: dts: add Raspberry Pi 3 A+

In reply to Stefan Wahren
Quoted 9 lines · Stefan Wahren

This patch series adds support for the brand new Raspberry Pi 3 A+ .

Changes in V2:
- add missing Makefile change for arm64

Stefan Wahren (3):
dt-bindings: bcm: Add Raspberry Pi 3 A+
ARM: dts: add Raspberry Pi 3 A+
arm64: dts: broadcom: Add reference to RPi 3 A+

Looks pretty reasonable, but I couldn't verify any of the contents --
the firmware repo doesn't have a DT file for it, and the published
schematics don't show most of the GPIO connections (sigh). How did you
write/test this?
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 832 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20181116/43b09e4b/attachment.sig>

#8 lore raw

v2 cover ARM: dts: add Raspberry Pi 3 A+

Hi Eric,

Quoted 15 lines

Eric Anholt <[email protected]> hat am 16. November 2018 um 22:23 geschrieben:

Quoted 9 lines · Stefan Wahren

This patch series adds support for the brand new Raspberry Pi 3 A+ .

Changes in V2:
- add missing Makefile change for arm64

Stefan Wahren (3):
dt-bindings: bcm: Add Raspberry Pi 3 A+
ARM: dts: add Raspberry Pi 3 A+
arm64: dts: broadcom: Add reference to RPi 3 A+

Quoted 4 lines

Looks pretty reasonable, but I couldn't verify any of the contents -- the firmware repo doesn't have a DT file for it, and the published schematics don't show most of the GPIO connections (sigh). How did you write/test this?

i have a Raspberry Pi 3 A+ and the firmware seems to use a runtime generated DT. So i dumped the DTS of a 3 A+ and a 3 B+ from procfs. Based on the procfs diff i modified the upstream 3B+ source to get a 3A+ .

Please consider this series as optional for 5.0. I won't submit any further patch for the next release cycle.

But maybe Phil can provide some feedback.

Regards
Stefan

#9 lore raw

v2 cover ARM: dts: add Raspberry Pi 3 A+

Quoted 22 lines · Stefan Wahren

Hi Eric,

Quoted 15 lines

Eric Anholt <[email protected]> hat am 16. November 2018 um 22:23 geschrieben:

Quoted 9 lines · Stefan Wahren

This patch series adds support for the brand new Raspberry Pi 3 A+ .

Changes in V2:
- add missing Makefile change for arm64

Stefan Wahren (3):
dt-bindings: bcm: Add Raspberry Pi 3 A+
ARM: dts: add Raspberry Pi 3 A+
arm64: dts: broadcom: Add reference to RPi 3 A+

Quoted 4 lines

Looks pretty reasonable, but I couldn't verify any of the contents -- the firmware repo doesn't have a DT file for it, and the published schematics don't show most of the GPIO connections (sigh). How did you write/test this?

Quoted 4 lines

i have a Raspberry Pi 3 A+ and the firmware seems to use a runtime generated DT. So i dumped the DTS of a 3 A+ and a 3 B+ from procfs. Based on the procfs diff i modified the upstream 3B+ source to get a 3A+ .

Sounds good to me. Comparing to the pi3b+, it looks like the changes I would expect for the board, so the series is:

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 832 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20181119/d0dde766/attachment.sig>