2016-03-04 18:39:33

by Eric Anholt

[permalink] [raw]
Subject: [PATCH 1/2] dt-bindings: Add root properties for Raspberry Pi 3

Signed-off-by: Eric Anholt <[email protected]>
---
Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt b/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt
index 11d3056..6ffe087 100644
--- a/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt
+++ b/Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt
@@ -30,6 +30,10 @@ Raspberry Pi 2 Model B
Required root node properties:
compatible = "raspberrypi,2-model-b", "brcm,bcm2836";

+Raspberry Pi 3 Model B
+Required root node properties:
+compatible = "raspberrypi,3-model-b", "brcm,bcm2837";
+
Raspberry Pi Compute Module
Required root node properties:
compatible = "raspberrypi,compute-module", "brcm,bcm2835";
--
2.7.0


2016-03-04 18:39:36

by Eric Anholt

[permalink] [raw]
Subject: [PATCH 2/2] ARM: bcm2835: Add devicetree for the Raspberry Pi 3.

For now this doesn't support the new hardware present on the Pi 3 (BT,
wifi, GPIO expander). Since the GPIO expander isn't supported, we
also don't have the LEDs like the other board files do.

Signed-off-by: Eric Anholt <[email protected]>
---
arch/arm/boot/dts/Makefile | 3 +-
arch/arm/boot/dts/bcm2837-rpi-3-b.dts | 22 ++++++++++++
arch/arm/boot/dts/bcm2837.dtsi | 68 +++++++++++++++++++++++++++++++++++
3 files changed, 92 insertions(+), 1 deletion(-)
create mode 100644 arch/arm/boot/dts/bcm2837-rpi-3-b.dts
create mode 100644 arch/arm/boot/dts/bcm2837.dtsi

diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index a4a6d70..71082a3 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -63,7 +63,8 @@ dtb-$(CONFIG_ARCH_BCM2835) += \
bcm2835-rpi-b-rev2.dtb \
bcm2835-rpi-b-plus.dtb \
bcm2835-rpi-a-plus.dtb \
- bcm2836-rpi-2-b.dtb
+ bcm2836-rpi-2-b.dtb \
+ bcm2837-rpi-3-b.dtb
dtb-$(CONFIG_ARCH_BCM_5301X) += \
bcm4708-asus-rt-ac56u.dtb \
bcm4708-asus-rt-ac68u.dtb \
diff --git a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts
new file mode 100644
index 0000000..5e8eafd
--- /dev/null
+++ b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts
@@ -0,0 +1,22 @@
+/dts-v1/;
+#include "bcm2837.dtsi"
+#include "bcm2835-rpi.dtsi"
+
+/ {
+ compatible = "raspberrypi,3-model-b", "brcm,bcm2837";
+ model = "Raspberry Pi 3 Model B";
+
+ memory {
+ reg = <0 0x40000000>;
+ };
+};
+
+&gpio {
+ pinctrl-0 = <&gpioout &alt0 &i2s_alt0 &alt3>;
+
+ /* I2S interface */
+ i2s_alt0: i2s_alt0 {
+ brcm,pins = <28 29 30 31>;
+ brcm,function = <BCM2835_FSEL_ALT2>;
+ };
+};
diff --git a/arch/arm/boot/dts/bcm2837.dtsi b/arch/arm/boot/dts/bcm2837.dtsi
new file mode 100644
index 0000000..2f36722
--- /dev/null
+++ b/arch/arm/boot/dts/bcm2837.dtsi
@@ -0,0 +1,68 @@
+#include "bcm283x.dtsi"
+
+/ {
+ compatible = "brcm,bcm2836";
+
+ soc {
+ ranges = <0x7e000000 0x3f000000 0x1000000>,
+ <0x40000000 0x40000000 0x00001000>;
+ dma-ranges = <0xc0000000 0x00000000 0x3f000000>;
+
+ local_intc: local_intc {
+ compatible = "brcm,bcm2836-l1-intc";
+ reg = <0x40000000 0x100>;
+ interrupt-controller;
+ #interrupt-cells = <1>;
+ interrupt-parent = <&local_intc>;
+ };
+ };
+
+ timer {
+ compatible = "arm,armv7-timer";
+ interrupt-parent = <&local_intc>;
+ interrupts = <0>, // PHYS_SECURE_PPI
+ <1>, // PHYS_NONSECURE_PPI
+ <3>, // VIRT_PPI
+ <2>; // HYP_PPI
+ always-on;
+ };
+
+ cpus: cpus {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ cpu0: cpu@0 {
+ device_type = "cpu";
+ compatible = "arm,cortex-a53";
+ reg = <0>;
+ };
+
+ cpu1: cpu@1 {
+ device_type = "cpu";
+ compatible = "arm,cortex-a53";
+ reg = <1>;
+ };
+
+ cpu2: cpu@2 {
+ device_type = "cpu";
+ compatible = "arm,cortex-a53";
+ reg = <2>;
+ };
+
+ cpu3: cpu@3 {
+ device_type = "cpu";
+ compatible = "arm,cortex-a53";
+ reg = <3>;
+ };
+ };
+};
+
+/* Make the BCM2835-style global interrupt controller be a child of the
+ * CPU-local interrupt controller.
+ */
+&intc {
+ compatible = "brcm,bcm2836-armctrl-ic";
+ reg = <0x7e00b200 0x200>;
+ interrupt-parent = <&local_intc>;
+ interrupts = <8>;
+};
--
2.7.0

2016-03-04 18:41:48

by Mark Rutland

[permalink] [raw]
Subject: Re: [PATCH 2/2] ARM: bcm2835: Add devicetree for the Raspberry Pi 3.

On Fri, Mar 04, 2016 at 10:39:29AM -0800, Eric Anholt wrote:
> For now this doesn't support the new hardware present on the Pi 3 (BT,
> wifi, GPIO expander). Since the GPIO expander isn't supported, we
> also don't have the LEDs like the other board files do.
>
> Signed-off-by: Eric Anholt <[email protected]>
> ---
> arch/arm/boot/dts/Makefile | 3 +-
> arch/arm/boot/dts/bcm2837-rpi-3-b.dts | 22 ++++++++++++
> arch/arm/boot/dts/bcm2837.dtsi | 68 +++++++++++++++++++++++++++++++++++
> 3 files changed, 92 insertions(+), 1 deletion(-)
> create mode 100644 arch/arm/boot/dts/bcm2837-rpi-3-b.dts
> create mode 100644 arch/arm/boot/dts/bcm2837.dtsi

> + timer {
> + compatible = "arm,armv7-timer";
> + interrupt-parent = <&local_intc>;
> + interrupts = <0>, // PHYS_SECURE_PPI
> + <1>, // PHYS_NONSECURE_PPI
> + <3>, // VIRT_PPI
> + <2>; // HYP_PPI
> + always-on;
> + };

Are the CPUs in an always-on power domain? Or is it jsut that the kernel
doesn't perform power management of CPUs?

The always-on proeprty is only intended for the former.

Mark.

2016-03-04 18:55:10

by Eric Anholt

[permalink] [raw]
Subject: Re: [PATCH 2/2] ARM: bcm2835: Add devicetree for the Raspberry Pi 3.

Mark Rutland <[email protected]> writes:

> On Fri, Mar 04, 2016 at 10:39:29AM -0800, Eric Anholt wrote:
>> For now this doesn't support the new hardware present on the Pi 3 (BT,
>> wifi, GPIO expander). Since the GPIO expander isn't supported, we
>> also don't have the LEDs like the other board files do.
>>
>> Signed-off-by: Eric Anholt <[email protected]>
>> ---
>> arch/arm/boot/dts/Makefile | 3 +-
>> arch/arm/boot/dts/bcm2837-rpi-3-b.dts | 22 ++++++++++++
>> arch/arm/boot/dts/bcm2837.dtsi | 68 +++++++++++++++++++++++++++++++++++
>> 3 files changed, 92 insertions(+), 1 deletion(-)
>> create mode 100644 arch/arm/boot/dts/bcm2837-rpi-3-b.dts
>> create mode 100644 arch/arm/boot/dts/bcm2837.dtsi
>
>> + timer {
>> + compatible = "arm,armv7-timer";
>> + interrupt-parent = <&local_intc>;
>> + interrupts = <0>, // PHYS_SECURE_PPI
>> + <1>, // PHYS_NONSECURE_PPI
>> + <3>, // VIRT_PPI
>> + <2>; // HYP_PPI
>> + always-on;
>> + };
>
> Are the CPUs in an always-on power domain? Or is it jsut that the kernel
> doesn't perform power management of CPUs?
>
> The always-on proeprty is only intended for the former.

The kernel doesn't get to do power management of CPUs. We only have
control of power domains through the firmware, and the firmware's
keeping the CPU domain on.


Attachments:
signature.asc (818.00 B)

2016-03-04 18:59:35

by Mark Rutland

[permalink] [raw]
Subject: Re: [PATCH 2/2] ARM: bcm2835: Add devicetree for the Raspberry Pi 3.

On Fri, Mar 04, 2016 at 10:55:03AM -0800, Eric Anholt wrote:
> Mark Rutland <[email protected]> writes:
>
> > On Fri, Mar 04, 2016 at 10:39:29AM -0800, Eric Anholt wrote:
> >> For now this doesn't support the new hardware present on the Pi 3 (BT,
> >> wifi, GPIO expander). Since the GPIO expander isn't supported, we
> >> also don't have the LEDs like the other board files do.
> >>
> >> Signed-off-by: Eric Anholt <[email protected]>
> >> ---
> >> arch/arm/boot/dts/Makefile | 3 +-
> >> arch/arm/boot/dts/bcm2837-rpi-3-b.dts | 22 ++++++++++++
> >> arch/arm/boot/dts/bcm2837.dtsi | 68 +++++++++++++++++++++++++++++++++++
> >> 3 files changed, 92 insertions(+), 1 deletion(-)
> >> create mode 100644 arch/arm/boot/dts/bcm2837-rpi-3-b.dts
> >> create mode 100644 arch/arm/boot/dts/bcm2837.dtsi
> >
> >> + timer {
> >> + compatible = "arm,armv7-timer";
> >> + interrupt-parent = <&local_intc>;
> >> + interrupts = <0>, // PHYS_SECURE_PPI
> >> + <1>, // PHYS_NONSECURE_PPI
> >> + <3>, // VIRT_PPI
> >> + <2>; // HYP_PPI
> >> + always-on;
> >> + };
> >
> > Are the CPUs in an always-on power domain? Or is it jsut that the kernel
> > doesn't perform power management of CPUs?
> >
> > The always-on proeprty is only intended for the former.
>
> The kernel doesn't get to do power management of CPUs. We only have
> control of power domains through the firmware, and the firmware's
> keeping the CPU domain on.

So there is no way that the CPUs could request for the firmare to place
them in a state where the timer would lose context (but other events
coukd wake them up), even if they don't do that today?

Mark

2016-03-04 19:39:18

by Eric Anholt

[permalink] [raw]
Subject: Re: [PATCH 2/2] ARM: bcm2835: Add devicetree for the Raspberry Pi 3.

Mark Rutland <[email protected]> writes:

> On Fri, Mar 04, 2016 at 10:55:03AM -0800, Eric Anholt wrote:
>> Mark Rutland <[email protected]> writes:
>>
>> > On Fri, Mar 04, 2016 at 10:39:29AM -0800, Eric Anholt wrote:
>> >> For now this doesn't support the new hardware present on the Pi 3 (BT,
>> >> wifi, GPIO expander). Since the GPIO expander isn't supported, we
>> >> also don't have the LEDs like the other board files do.
>> >>
>> >> Signed-off-by: Eric Anholt <[email protected]>
>> >> ---
>> >> arch/arm/boot/dts/Makefile | 3 +-
>> >> arch/arm/boot/dts/bcm2837-rpi-3-b.dts | 22 ++++++++++++
>> >> arch/arm/boot/dts/bcm2837.dtsi | 68 +++++++++++++++++++++++++++++++++++
>> >> 3 files changed, 92 insertions(+), 1 deletion(-)
>> >> create mode 100644 arch/arm/boot/dts/bcm2837-rpi-3-b.dts
>> >> create mode 100644 arch/arm/boot/dts/bcm2837.dtsi
>> >
>> >> + timer {
>> >> + compatible = "arm,armv7-timer";
>> >> + interrupt-parent = <&local_intc>;
>> >> + interrupts = <0>, // PHYS_SECURE_PPI
>> >> + <1>, // PHYS_NONSECURE_PPI
>> >> + <3>, // VIRT_PPI
>> >> + <2>; // HYP_PPI
>> >> + always-on;
>> >> + };
>> >
>> > Are the CPUs in an always-on power domain? Or is it jsut that the kernel
>> > doesn't perform power management of CPUs?
>> >
>> > The always-on proeprty is only intended for the former.
>>
>> The kernel doesn't get to do power management of CPUs. We only have
>> control of power domains through the firmware, and the firmware's
>> keeping the CPU domain on.
>
> So there is no way that the CPUs could request for the firmare to place
> them in a state where the timer would lose context (but other events
> coukd wake them up), even if they don't do that today?

I don't see any mechanism in the RPi firmware for the ARM to request
suspend or anything like that. Enabling something like that would
definitely require an updated DT, to enable a driver that talks to the
firmware to make requests like that.

(Note that this is the same timer setup we have in bcm2836.dtsi)


Attachments:
signature.asc (818.00 B)

2016-03-08 05:54:37

by Stephen Warren

[permalink] [raw]
Subject: Re: [PATCH 2/2] ARM: bcm2835: Add devicetree for the Raspberry Pi 3.

On 03/04/2016 11:39 AM, Eric Anholt wrote:
> For now this doesn't support the new hardware present on the Pi 3 (BT,
> wifi, GPIO expander). Since the GPIO expander isn't supported, we
> also don't have the LEDs like the other board files do.

The series,
Acked-by: Stephen Warren <[email protected]>

... although I'd be slightly surprised if this was accepted; when
AArch64 was first announced, I thought the mainline ARM kernel community
decided that only 64-bit kernels would be supported on 64-bit HW? Still,
I don't immediately see that in any commit log or in the kernel doc
directory, so perhaps I'm misremembering. Hopefully; life is simpler
that way:-)

2016-03-17 11:53:34

by Rob Herring

[permalink] [raw]
Subject: Re: [PATCH 1/2] dt-bindings: Add root properties for Raspberry Pi 3

On Fri, Mar 04, 2016 at 10:39:28AM -0800, Eric Anholt wrote:
> Signed-off-by: Eric Anholt <[email protected]>
> ---
> Documentation/devicetree/bindings/arm/bcm/brcm,bcm2835.txt | 4 ++++
> 1 file changed, 4 insertions(+)

Acked-by: Rob Herring <[email protected]>