Message ID | 20210215121713.57687-26-marcan@marcan.st (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Apple M1 SoC platform bring-up | expand |
On Mon, Feb 15, 2021 at 09:17:13PM +0900, Hector Martin wrote: > This currently supports: > > * SMP (via spin-tables) > * AIC IRQs > * Serial (with earlycon) > * Framebuffer > > A number of properties are dynamic, and based on system firmware > decisions that vary from version to version. These are expected > to be filled in by the loader. > > Signed-off-by: Hector Martin <marcan@marcan.st> > --- > MAINTAINERS | 1 + > arch/arm64/boot/dts/Makefile | 1 + > arch/arm64/boot/dts/apple/Makefile | 2 + > arch/arm64/boot/dts/apple/apple-j274.dts | 41 ++++++++ > arch/arm64/boot/dts/apple/apple-m1.dtsi | 124 +++++++++++++++++++++++ > 5 files changed, 169 insertions(+) > create mode 100644 arch/arm64/boot/dts/apple/Makefile > create mode 100644 arch/arm64/boot/dts/apple/apple-j274.dts > create mode 100644 arch/arm64/boot/dts/apple/apple-m1.dtsi > > diff --git a/MAINTAINERS b/MAINTAINERS > index a8f258fbb5f1..87db1c947f45 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -1635,6 +1635,7 @@ C: irc://chat.freenode.net/asahi-dev > T: git https://github.com/AsahiLinux/linux.git > F: Documentation/devicetree/bindings/arm/apple.yaml > F: Documentation/devicetree/bindings/interrupt-controller/apple,aic.yaml > +F: arch/arm64/boot/dts/apple/ > F: arch/arm64/include/asm/sysreg_apple.h > F: drivers/irqchip/irq-apple-aic.c > F: include/dt-bindings/interrupt-controller/apple-aic.h > diff --git a/arch/arm64/boot/dts/Makefile b/arch/arm64/boot/dts/Makefile > index 9b1170658d60..64f055d94948 100644 > --- a/arch/arm64/boot/dts/Makefile > +++ b/arch/arm64/boot/dts/Makefile > @@ -6,6 +6,7 @@ subdir-y += amazon > subdir-y += amd > subdir-y += amlogic > subdir-y += apm > +subdir-y += apple > subdir-y += arm > subdir-y += bitmain > subdir-y += broadcom > diff --git a/arch/arm64/boot/dts/apple/Makefile b/arch/arm64/boot/dts/apple/Makefile > new file mode 100644 > index 000000000000..ec03c474efd4 > --- /dev/null > +++ b/arch/arm64/boot/dts/apple/Makefile > @@ -0,0 +1,2 @@ > +# SPDX-License-Identifier: GPL-2.0 > +dtb-$(CONFIG_ARCH_APPLE) += apple-j274.dtb > diff --git a/arch/arm64/boot/dts/apple/apple-j274.dts b/arch/arm64/boot/dts/apple/apple-j274.dts > new file mode 100644 > index 000000000000..9a1be91a2cf0 > --- /dev/null > +++ b/arch/arm64/boot/dts/apple/apple-j274.dts > @@ -0,0 +1,41 @@ > +// SPDX-License-Identifier: GPL-2.0+ OR MIT () around licenses, so: (GPL-2.0+ OR MIT) > +/* > + * Copyright The Asahi Linux Contributors > + */ > + > +/dts-v1/; > + > +#include "apple-m1.dtsi" > + > +/ { > + compatible = "apple,j274", "apple,m1", "apple,arm-platform"; > + model = "Apple Mac Mini M1 2020"; > + > + aliases { > + serial0 = &serial0; > + }; > + > + chosen { > + #address-cells = <2>; > + #size-cells = <2>; > + ranges; > + > + stdout-path = "serial0:1500000"; > + > + framebuffer0: framebuffer@0 { > + compatible = "apple,simple-framebuffer", "simple-framebuffer"; > + reg = <0 0 0 0>; /* To be filled by loader */ > + /* Format properties will be added by loader */ > + status = "disabled"; > + }; > + }; > + > + memory@800000000 { > + device_type = "memory"; > + reg = <0 0 0 0>; /* To be filled by loader */ dtc and dtschema might complain, so could you set here fake memory address 0x800000000? Would that work for your bootloader? > + }; > +}; > + > +&serial0 { > + status = "okay"; > +}; > diff --git a/arch/arm64/boot/dts/apple/apple-m1.dtsi b/arch/arm64/boot/dts/apple/apple-m1.dtsi > new file mode 100644 > index 000000000000..45c87771b057 > --- /dev/null > +++ b/arch/arm64/boot/dts/apple/apple-m1.dtsi > @@ -0,0 +1,124 @@ > +// SPDX-License-Identifier: GPL-2.0+ OR MIT > +/* > + * Copyright The Asahi Linux Contributors > + */ > + > +#include <dt-bindings/interrupt-controller/apple-aic.h> > +#include <dt-bindings/interrupt-controller/irq.h> > + > +/ { > + compatible = "apple,m1", "apple,arm-platform"; > + > + #address-cells = <2>; > + #size-cells = <2>; > + > + cpus { > + #address-cells = <2>; > + #size-cells = <0>; > + > + cpu0: cpu@0 { > + compatible = "apple,icestorm"; > + device_type = "cpu"; > + reg = <0x0 0x0>; > + enable-method = "spin-table"; > + cpu-release-addr = <0 0>; /* To be filled by loader */ > + }; New line after every device node, please. With this minor changes, fine for me: Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org> Best regards, Krzysztof
On 2/15/21 11:29 AM, Krzysztof Kozlowski wrote: >> diff --git a/arch/arm64/boot/dts/apple/apple-j274.dts b/arch/arm64/boot/dts/apple/apple-j274.dts >> new file mode 100644 >> index 000000000000..9a1be91a2cf0 >> --- /dev/null >> +++ b/arch/arm64/boot/dts/apple/apple-j274.dts >> @@ -0,0 +1,41 @@ >> +// SPDX-License-Identifier: GPL-2.0+ OR MIT > () around licenses, so: > (GPL-2.0+ OR MIT) Hi, When/where does that "() around licenses" apply, please? thanks.
On Mon, Feb 15, 2021 at 01:00:58PM -0800, Randy Dunlap wrote: > On 2/15/21 11:29 AM, Krzysztof Kozlowski wrote: > >> diff --git a/arch/arm64/boot/dts/apple/apple-j274.dts b/arch/arm64/boot/dts/apple/apple-j274.dts > >> new file mode 100644 > >> index 000000000000..9a1be91a2cf0 > >> --- /dev/null > >> +++ b/arch/arm64/boot/dts/apple/apple-j274.dts > >> @@ -0,0 +1,41 @@ > >> +// SPDX-License-Identifier: GPL-2.0+ OR MIT > > () around licenses, so: > > (GPL-2.0+ OR MIT) > > Hi, > When/where does that "() around licenses" apply, please? Hmm, somehow this pattern got into me but now I checked on the spdx.dev and the preferred syntax is indeed without (). Skip this comment then. Best regards, Krzysztof
On 16/02/2021 04.29, Krzysztof Kozlowski wrote: > On Mon, Feb 15, 2021 at 09:17:13PM +0900, Hector Martin wrote: >> + memory@800000000 { >> + device_type = "memory"; >> + reg = <0 0 0 0>; /* To be filled by loader */ > > dtc and dtschema might complain, so could you set here fake memory > address 0x800000000? Would that work for your bootloader? Yeah, the bootloader just replaces the entire property anyway. I'll fill in some dummy values (the real usable memory range is to some extent dynamic and depends on firmware). >> + }; >> +}; >> + >> +&serial0 { >> + status = "okay"; >> +}; >> diff --git a/arch/arm64/boot/dts/apple/apple-m1.dtsi b/arch/arm64/boot/dts/apple/apple-m1.dtsi >> new file mode 100644 >> index 000000000000..45c87771b057 >> --- /dev/null >> +++ b/arch/arm64/boot/dts/apple/apple-m1.dtsi >> @@ -0,0 +1,124 @@ >> +// SPDX-License-Identifier: GPL-2.0+ OR MIT >> +/* >> + * Copyright The Asahi Linux Contributors >> + */ >> + >> +#include <dt-bindings/interrupt-controller/apple-aic.h> >> +#include <dt-bindings/interrupt-controller/irq.h> >> + >> +/ { >> + compatible = "apple,m1", "apple,arm-platform"; >> + >> + #address-cells = <2>; >> + #size-cells = <2>; >> + >> + cpus { >> + #address-cells = <2>; >> + #size-cells = <0>; >> + >> + cpu0: cpu@0 { >> + compatible = "apple,icestorm"; >> + device_type = "cpu"; >> + reg = <0x0 0x0>; >> + enable-method = "spin-table"; >> + cpu-release-addr = <0 0>; /* To be filled by loader */ >> + }; > > New line after every device node, please. Added newlines after all the CPU nodes. > With this minor changes, fine for me: > Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org> Thanks! v3 will rename this file to apple/t8103.dtsi and the board file to t8103-j274.dts to better match other platforms (and to use the proper SoC ID for the M1); please let me know if you're okay keeping the Reviewed-by for that.
On Sun, Feb 21, 2021 at 11:43:52PM +0900, Hector Martin wrote: > On 16/02/2021 04.29, Krzysztof Kozlowski wrote: > > On Mon, Feb 15, 2021 at 09:17:13PM +0900, Hector Martin wrote: > > > + memory@800000000 { > > > + device_type = "memory"; > > > + reg = <0 0 0 0>; /* To be filled by loader */ > > > > dtc and dtschema might complain, so could you set here fake memory > > address 0x800000000? Would that work for your bootloader? > > Yeah, the bootloader just replaces the entire property anyway. I'll fill in > some dummy values (the real usable memory range is to some extent dynamic > and depends on firmware). > > > > + }; > > > +}; > > > + > > > +&serial0 { > > > + status = "okay"; > > > +}; > > > diff --git a/arch/arm64/boot/dts/apple/apple-m1.dtsi b/arch/arm64/boot/dts/apple/apple-m1.dtsi > > > new file mode 100644 > > > index 000000000000..45c87771b057 > > > --- /dev/null > > > +++ b/arch/arm64/boot/dts/apple/apple-m1.dtsi > > > @@ -0,0 +1,124 @@ > > > +// SPDX-License-Identifier: GPL-2.0+ OR MIT > > > +/* > > > + * Copyright The Asahi Linux Contributors > > > + */ > > > + > > > +#include <dt-bindings/interrupt-controller/apple-aic.h> > > > +#include <dt-bindings/interrupt-controller/irq.h> > > > + > > > +/ { > > > + compatible = "apple,m1", "apple,arm-platform"; > > > + > > > + #address-cells = <2>; > > > + #size-cells = <2>; > > > + > > > + cpus { > > > + #address-cells = <2>; > > > + #size-cells = <0>; > > > + > > > + cpu0: cpu@0 { > > > + compatible = "apple,icestorm"; > > > + device_type = "cpu"; > > > + reg = <0x0 0x0>; > > > + enable-method = "spin-table"; > > > + cpu-release-addr = <0 0>; /* To be filled by loader */ > > > + }; > > > > New line after every device node, please. > > Added newlines after all the CPU nodes. > > > With this minor changes, fine for me: > > Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org> > > Thanks! > > v3 will rename this file to apple/t8103.dtsi and the board file to > t8103-j274.dts to better match other platforms (and to use the proper SoC ID > for the M1); please let me know if you're okay keeping the Reviewed-by for > that. It's fine, keep my review tag. Best regards, Krzysztof
diff --git a/MAINTAINERS b/MAINTAINERS index a8f258fbb5f1..87db1c947f45 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1635,6 +1635,7 @@ C: irc://chat.freenode.net/asahi-dev T: git https://github.com/AsahiLinux/linux.git F: Documentation/devicetree/bindings/arm/apple.yaml F: Documentation/devicetree/bindings/interrupt-controller/apple,aic.yaml +F: arch/arm64/boot/dts/apple/ F: arch/arm64/include/asm/sysreg_apple.h F: drivers/irqchip/irq-apple-aic.c F: include/dt-bindings/interrupt-controller/apple-aic.h diff --git a/arch/arm64/boot/dts/Makefile b/arch/arm64/boot/dts/Makefile index 9b1170658d60..64f055d94948 100644 --- a/arch/arm64/boot/dts/Makefile +++ b/arch/arm64/boot/dts/Makefile @@ -6,6 +6,7 @@ subdir-y += amazon subdir-y += amd subdir-y += amlogic subdir-y += apm +subdir-y += apple subdir-y += arm subdir-y += bitmain subdir-y += broadcom diff --git a/arch/arm64/boot/dts/apple/Makefile b/arch/arm64/boot/dts/apple/Makefile new file mode 100644 index 000000000000..ec03c474efd4 --- /dev/null +++ b/arch/arm64/boot/dts/apple/Makefile @@ -0,0 +1,2 @@ +# SPDX-License-Identifier: GPL-2.0 +dtb-$(CONFIG_ARCH_APPLE) += apple-j274.dtb diff --git a/arch/arm64/boot/dts/apple/apple-j274.dts b/arch/arm64/boot/dts/apple/apple-j274.dts new file mode 100644 index 000000000000..9a1be91a2cf0 --- /dev/null +++ b/arch/arm64/boot/dts/apple/apple-j274.dts @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: GPL-2.0+ OR MIT +/* + * Copyright The Asahi Linux Contributors + */ + +/dts-v1/; + +#include "apple-m1.dtsi" + +/ { + compatible = "apple,j274", "apple,m1", "apple,arm-platform"; + model = "Apple Mac Mini M1 2020"; + + aliases { + serial0 = &serial0; + }; + + chosen { + #address-cells = <2>; + #size-cells = <2>; + ranges; + + stdout-path = "serial0:1500000"; + + framebuffer0: framebuffer@0 { + compatible = "apple,simple-framebuffer", "simple-framebuffer"; + reg = <0 0 0 0>; /* To be filled by loader */ + /* Format properties will be added by loader */ + status = "disabled"; + }; + }; + + memory@800000000 { + device_type = "memory"; + reg = <0 0 0 0>; /* To be filled by loader */ + }; +}; + +&serial0 { + status = "okay"; +}; diff --git a/arch/arm64/boot/dts/apple/apple-m1.dtsi b/arch/arm64/boot/dts/apple/apple-m1.dtsi new file mode 100644 index 000000000000..45c87771b057 --- /dev/null +++ b/arch/arm64/boot/dts/apple/apple-m1.dtsi @@ -0,0 +1,124 @@ +// SPDX-License-Identifier: GPL-2.0+ OR MIT +/* + * Copyright The Asahi Linux Contributors + */ + +#include <dt-bindings/interrupt-controller/apple-aic.h> +#include <dt-bindings/interrupt-controller/irq.h> + +/ { + compatible = "apple,m1", "apple,arm-platform"; + + #address-cells = <2>; + #size-cells = <2>; + + cpus { + #address-cells = <2>; + #size-cells = <0>; + + cpu0: cpu@0 { + compatible = "apple,icestorm"; + device_type = "cpu"; + reg = <0x0 0x0>; + enable-method = "spin-table"; + cpu-release-addr = <0 0>; /* To be filled by loader */ + }; + cpu1: cpu@1 { + compatible = "apple,icestorm"; + device_type = "cpu"; + reg = <0x0 0x1>; + enable-method = "spin-table"; + cpu-release-addr = <0 0>; /* To be filled by loader */ + }; + cpu2: cpu@2 { + compatible = "apple,icestorm"; + device_type = "cpu"; + reg = <0x0 0x2>; + enable-method = "spin-table"; + cpu-release-addr = <0 0>; /* To be filled by loader */ + }; + cpu3: cpu@3 { + compatible = "apple,icestorm"; + device_type = "cpu"; + reg = <0x0 0x3>; + enable-method = "spin-table"; + cpu-release-addr = <0 0>; /* To be filled by loader */ + }; + cpu4: cpu@10100 { + compatible = "apple,firestorm"; + device_type = "cpu"; + reg = <0x0 0x10100>; + enable-method = "spin-table"; + cpu-release-addr = <0 0>; /* To be filled by loader */ + }; + cpu5: cpu@10101 { + compatible = "apple,firestorm"; + device_type = "cpu"; + reg = <0x0 0x10101>; + enable-method = "spin-table"; + cpu-release-addr = <0 0>; /* To be filled by loader */ + }; + cpu6: cpu@10102 { + compatible = "apple,firestorm"; + device_type = "cpu"; + reg = <0x0 0x10102>; + enable-method = "spin-table"; + cpu-release-addr = <0 0>; /* To be filled by loader */ + }; + cpu7: cpu@10103 { + compatible = "apple,firestorm"; + device_type = "cpu"; + reg = <0x0 0x10103>; + enable-method = "spin-table"; + cpu-release-addr = <0 0>; /* To be filled by loader */ + }; + }; + + timer { + compatible = "arm,armv8-timer"; + interrupt-parent = <&aic>; + interrupt-names = "hyp-phys", "hyp-virt", "phys", "virt"; + interrupts = <AIC_FIQ AIC_TMR_HV_PHYS IRQ_TYPE_LEVEL_HIGH>, + <AIC_FIQ AIC_TMR_HV_VIRT IRQ_TYPE_LEVEL_HIGH>, + <AIC_FIQ AIC_TMR_GUEST_PHYS IRQ_TYPE_LEVEL_HIGH>, + <AIC_FIQ AIC_TMR_GUEST_VIRT IRQ_TYPE_LEVEL_HIGH>; + }; + + clk24: clock-24m { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <24000000>; + clock-output-names = "clk24"; + }; + + soc { + compatible = "simple-bus"; + #address-cells = <2>; + #size-cells = <2>; + + ranges; + nonposted-mmio; + + aic: interrupt-controller@23b100000 { + compatible = "apple,m1-aic", "apple,aic"; + #interrupt-cells = <3>; + interrupt-controller; + reg = <0x2 0x3b100000 0x0 0x8000>; + }; + + serial0: serial@235200000 { + compatible = "apple,s5l-uart"; + reg = <0x2 0x35200000 0x0 0x1000>; + reg-io-width = <4>; + interrupt-parent = <&aic>; + interrupts = <AIC_IRQ 605 IRQ_TYPE_LEVEL_HIGH>; + /* + * TODO: figure out the clocking properly, there may + * be a third selectable clock. + */ + clocks = <&clk24>, <&clk24>; + clock-names = "uart", "clk_uart_baud0"; + status = "disabled"; + }; + }; +};
This currently supports: * SMP (via spin-tables) * AIC IRQs * Serial (with earlycon) * Framebuffer A number of properties are dynamic, and based on system firmware decisions that vary from version to version. These are expected to be filled in by the loader. Signed-off-by: Hector Martin <marcan@marcan.st> --- MAINTAINERS | 1 + arch/arm64/boot/dts/Makefile | 1 + arch/arm64/boot/dts/apple/Makefile | 2 + arch/arm64/boot/dts/apple/apple-j274.dts | 41 ++++++++ arch/arm64/boot/dts/apple/apple-m1.dtsi | 124 +++++++++++++++++++++++ 5 files changed, 169 insertions(+) create mode 100644 arch/arm64/boot/dts/apple/Makefile create mode 100644 arch/arm64/boot/dts/apple/apple-j274.dts create mode 100644 arch/arm64/boot/dts/apple/apple-m1.dtsi