* [PATCH 00/10] arm64: dts: amlogic: S4 SoC additions and the Amediatech X98Q
@ 2026-11-06 10:46 christian.koever-draxl
2026-11-06 10:46 ` [PATCH 01/10] dt-bindings: arm: amlogic: add " christian.koever-draxl
` (9 more replies)
0 siblings, 10 replies; 20+ messages in thread
From: christian.koever-draxl @ 2026-11-06 10:46 UTC (permalink / raw)
To: robh, krzk+dt, conor+dt, neil.armstrong, khilman, jbrunet,
martin.blumenstingl
Cc: devicetree, linux-kernel, linux-arm-kernel, linux-amlogic,
Christian Stefan Kövér-Draxl
From: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
Patches 2-9 add S4 SoC blocks to meson-s4.dtsi, one feature per patch:
caches, PSCI idle state, S4 secure monitor compatible, Mali GPU, CPU
thermal sensor and zone, GE2D, USB host and AO CEC. Patch 10 adds the
Amediatech X98Q TV box (S905W2) that all of it was tested on; patch 1
its binding.
The board has two USB ports, an SD slot, Ethernet, HDMI, a power LED
and an IR receiver, and no analog audio output. CPU frequency scaling,
audio and the video decoder are left out until their drivers and
bindings are settled; the HDMI display path is not in mainline for S4.
Dependencies (bindings, sent separately):
- amlogic,meson-s4-sm (firmware: meson: sm power-off)
- amlogic,s4-thermal (thermal S4)
- amlogic,s4-ge2d (ge2d binding)
- amlogic,meson-s4-usb-ctrl, s4-usb2-phy (usb-ctrl, usb2 phy S4)
- amlogic,core-phase-degrees (mmc core phase)
- wakeup-source on meson-ir, rc-x98q (meson-ir, rc keytable)
- amlogic,shared-antenna (Bluetooth W1)
Tool use (Documentation/process/generated-content.rst):
This work was done with the help of an AI coding assistant, Claude
(Anthropic), used through Claude Code over many sessions. It did a large
part of the hands-on work: it read the vendor kernel and the firmware
interfaces, probed registers on the board, drafted the code and the
changelogs, and ran the builds, checkpatch, dt_binding_check and the
tests on the hardware. I directed the work, reviewed every change and
the final patches, and take responsibility for them. There is no single
prompt to quote; the sessions were of the form "find out why X fails on
this board, fix it, test it on the box".
Tested on an Amediatech X98Q TV box (Amlogic S905W2, S4 family, 2 GiB),
vendor U-Boot and BL31/OP-TEE, Linux 7.3 plus this work.
Christian Stefan Kövér-Draxl (10):
dt-bindings: arm: amlogic: add the Amediatech X98Q
arm64: dts: amlogic: meson-s4: describe the CPU caches
arm64: dts: amlogic: meson-s4: add the PSCI CPU idle state
arm64: dts: amlogic: meson-s4: use the S4 secure monitor compatible
arm64: dts: amlogic: meson-s4: add the Mali GPU
arm64: dts: amlogic: meson-s4: add the CPU thermal sensor and zone
arm64: dts: amlogic: meson-s4: add the GE2D
arm64: dts: amlogic: meson-s4: add the USB host
arm64: dts: amlogic: meson-s4: add the AO CEC controller
arm64: dts: amlogic: add the Amediatech X98Q
.../devicetree/bindings/arm/amlogic.yaml | 7 +
arch/arm64/boot/dts/amlogic/Makefile | 1 +
.../boot/dts/amlogic/meson-s4-s905w2-x98q.dts | 310 ++++++++++++++++++
arch/arm64/boot/dts/amlogic/meson-s4.dtsi | 246 +++++++++++++-
4 files changed, 563 insertions(+), 1 deletion(-)
create mode 100644 arch/arm64/boot/dts/amlogic/meson-s4-s905w2-x98q.dts
base-commit: 7be4bc52fd9e0e55dc9a2e0232b89427d2c4b614
--
2.56.0
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 01/10] dt-bindings: arm: amlogic: add the Amediatech X98Q
2026-11-06 10:46 [PATCH 00/10] arm64: dts: amlogic: S4 SoC additions and the Amediatech X98Q christian.koever-draxl
@ 2026-11-06 10:46 ` christian.koever-draxl
2026-11-06 10:46 ` [PATCH 02/10] arm64: dts: amlogic: meson-s4: describe the CPU caches christian.koever-draxl
` (8 subsequent siblings)
9 siblings, 0 replies; 20+ messages in thread
From: christian.koever-draxl @ 2026-11-06 10:46 UTC (permalink / raw)
To: robh, krzk+dt, conor+dt, neil.armstrong, khilman, jbrunet,
martin.blumenstingl
Cc: devicetree, linux-kernel, linux-arm-kernel, linux-amlogic,
Christian Stefan Kövér-Draxl
From: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
The Amediatech X98Q is a TV box built around the Amlogic S905W2, a
member of the S4 family.
Signed-off-by: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
---
Documentation/devicetree/bindings/arm/amlogic.yaml | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/Documentation/devicetree/bindings/arm/amlogic.yaml b/Documentation/devicetree/bindings/arm/amlogic.yaml
index 9f73a0054fb2..9b35dc71e831 100644
--- a/Documentation/devicetree/bindings/arm/amlogic.yaml
+++ b/Documentation/devicetree/bindings/arm/amlogic.yaml
@@ -254,6 +254,13 @@ properties:
- const: amlogic,s805x2
- const: amlogic,s4
+ - description: Boards with the Amlogic Meson S4 S905W2 SoC
+ items:
+ - enum:
+ - amediatech,x98q
+ - const: amlogic,s905w2
+ - const: amlogic,s4
+
- description: Boards with the Amlogic Meson S4 S905Y4 SoC
items:
- enum:
--
2.56.0
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 02/10] arm64: dts: amlogic: meson-s4: describe the CPU caches
2026-11-06 10:46 [PATCH 00/10] arm64: dts: amlogic: S4 SoC additions and the Amediatech X98Q christian.koever-draxl
2026-11-06 10:46 ` [PATCH 01/10] dt-bindings: arm: amlogic: add " christian.koever-draxl
@ 2026-11-06 10:46 ` christian.koever-draxl
2026-11-06 10:52 ` neil.armstrong
2026-11-06 10:46 ` [PATCH 03/10] arm64: dts: amlogic: meson-s4: add the PSCI CPU idle state christian.koever-draxl
` (7 subsequent siblings)
9 siblings, 1 reply; 20+ messages in thread
From: christian.koever-draxl @ 2026-11-06 10:46 UTC (permalink / raw)
To: robh, krzk+dt, conor+dt, neil.armstrong, khilman, jbrunet,
martin.blumenstingl
Cc: devicetree, linux-kernel, linux-arm-kernel, linux-amlogic,
Christian Stefan Kövér-Draxl
From: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
Describe the per-core L1 caches and the shared 512 KiB L2 cache, with
the geometry the cores report in CCSIDR_EL1 on an S905W2.
Signed-off-by: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
---
arch/arm64/boot/dts/amlogic/meson-s4.dtsi | 38 +++++++++++++++++++++++
1 file changed, 38 insertions(+)
diff --git a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
index 2a6fbd530836..675db02a8d5e 100644
--- a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
@@ -22,6 +22,13 @@ cpu0: cpu@0 {
compatible = "arm,cortex-a35";
reg = <0x0 0x0>;
enable-method = "psci";
+ d-cache-line-size = <64>;
+ d-cache-size = <0x8000>;
+ d-cache-sets = <128>;
+ i-cache-line-size = <64>;
+ i-cache-size = <0x8000>;
+ i-cache-sets = <256>;
+ next-level-cache = <&l2>;
};
cpu1: cpu@1 {
@@ -29,6 +36,13 @@ cpu1: cpu@1 {
compatible = "arm,cortex-a35";
reg = <0x0 0x1>;
enable-method = "psci";
+ d-cache-line-size = <64>;
+ d-cache-size = <0x8000>;
+ d-cache-sets = <128>;
+ i-cache-line-size = <64>;
+ i-cache-size = <0x8000>;
+ i-cache-sets = <256>;
+ next-level-cache = <&l2>;
};
cpu2: cpu@2 {
@@ -36,6 +50,13 @@ cpu2: cpu@2 {
compatible = "arm,cortex-a35";
reg = <0x0 0x2>;
enable-method = "psci";
+ d-cache-line-size = <64>;
+ d-cache-size = <0x8000>;
+ d-cache-sets = <128>;
+ i-cache-line-size = <64>;
+ i-cache-size = <0x8000>;
+ i-cache-sets = <256>;
+ next-level-cache = <&l2>;
};
cpu3: cpu@3 {
@@ -43,6 +64,23 @@ cpu3: cpu@3 {
compatible = "arm,cortex-a35";
reg = <0x0 0x3>;
enable-method = "psci";
+ d-cache-line-size = <64>;
+ d-cache-size = <0x8000>;
+ d-cache-sets = <128>;
+ i-cache-line-size = <64>;
+ i-cache-size = <0x8000>;
+ i-cache-sets = <256>;
+ next-level-cache = <&l2>;
+ };
+
+ /* Geometry as CCSIDR_EL1 reports it on S905W2. */
+ l2: l2-cache0 {
+ compatible = "cache";
+ cache-level = <2>;
+ cache-unified;
+ cache-size = <0x80000>; /* L2. 512 KB */
+ cache-line-size = <64>;
+ cache-sets = <1024>;
};
};
--
2.56.0
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 03/10] arm64: dts: amlogic: meson-s4: add the PSCI CPU idle state
2026-11-06 10:46 [PATCH 00/10] arm64: dts: amlogic: S4 SoC additions and the Amediatech X98Q christian.koever-draxl
2026-11-06 10:46 ` [PATCH 01/10] dt-bindings: arm: amlogic: add " christian.koever-draxl
2026-11-06 10:46 ` [PATCH 02/10] arm64: dts: amlogic: meson-s4: describe the CPU caches christian.koever-draxl
@ 2026-11-06 10:46 ` christian.koever-draxl
2026-11-06 10:54 ` neil.armstrong
2026-11-06 10:46 ` [PATCH 04/10] arm64: dts: amlogic: meson-s4: use the S4 secure monitor compatible christian.koever-draxl
` (6 subsequent siblings)
9 siblings, 1 reply; 20+ messages in thread
From: christian.koever-draxl @ 2026-11-06 10:46 UTC (permalink / raw)
To: robh, krzk+dt, conor+dt, neil.armstrong, khilman, jbrunet,
martin.blumenstingl
Cc: devicetree, linux-kernel, linux-arm-kernel, linux-amlogic,
Christian Stefan Kövér-Draxl
From: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
The firmware implements PSCI 1.0 without OS-initiated mode. Add the
core power-down state the vendor kernel uses (power state 0x10000).
Signed-off-by: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
---
arch/arm64/boot/dts/amlogic/meson-s4.dtsi | 24 +++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
index 675db02a8d5e..57270fbfb4a7 100644
--- a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
@@ -22,6 +22,7 @@ cpu0: cpu@0 {
compatible = "arm,cortex-a35";
reg = <0x0 0x0>;
enable-method = "psci";
+ cpu-idle-states = <&cpu_sleep>;
d-cache-line-size = <64>;
d-cache-size = <0x8000>;
d-cache-sets = <128>;
@@ -36,6 +37,7 @@ cpu1: cpu@1 {
compatible = "arm,cortex-a35";
reg = <0x0 0x1>;
enable-method = "psci";
+ cpu-idle-states = <&cpu_sleep>;
d-cache-line-size = <64>;
d-cache-size = <0x8000>;
d-cache-sets = <128>;
@@ -50,6 +52,7 @@ cpu2: cpu@2 {
compatible = "arm,cortex-a35";
reg = <0x0 0x2>;
enable-method = "psci";
+ cpu-idle-states = <&cpu_sleep>;
d-cache-line-size = <64>;
d-cache-size = <0x8000>;
d-cache-sets = <128>;
@@ -64,6 +67,7 @@ cpu3: cpu@3 {
compatible = "arm,cortex-a35";
reg = <0x0 0x3>;
enable-method = "psci";
+ cpu-idle-states = <&cpu_sleep>;
d-cache-line-size = <64>;
d-cache-size = <0x8000>;
d-cache-sets = <128>;
@@ -82,6 +86,26 @@ l2: l2-cache0 {
cache-line-size = <64>;
cache-sets = <1024>;
};
+
+ /*
+ * The firmware reports PSCI 1.0 without OSI, so the platform
+ * itself decides how deep to go and the kernel only has this
+ * one core state to offer. The suspend parameter is in the
+ * original format - bit 16 asks for a power down at affinity
+ * level 0 - and matches what the vendor kernel passes.
+ */
+ idle-states {
+ entry-method = "psci";
+
+ cpu_sleep: cpu-sleep {
+ compatible = "arm,idle-state";
+ arm,psci-suspend-param = <0x00010000>;
+ local-timer-stop;
+ entry-latency-us = <4000>;
+ exit-latency-us = <5000>;
+ min-residency-us = <10000>;
+ };
+ };
};
timer {
--
2.56.0
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 04/10] arm64: dts: amlogic: meson-s4: use the S4 secure monitor compatible
2026-11-06 10:46 [PATCH 00/10] arm64: dts: amlogic: S4 SoC additions and the Amediatech X98Q christian.koever-draxl
` (2 preceding siblings ...)
2026-11-06 10:46 ` [PATCH 03/10] arm64: dts: amlogic: meson-s4: add the PSCI CPU idle state christian.koever-draxl
@ 2026-11-06 10:46 ` christian.koever-draxl
2026-11-06 10:54 ` sashiko-bot
2026-11-06 10:46 ` [PATCH 05/10] arm64: dts: amlogic: meson-s4: add the Mali GPU christian.koever-draxl
` (5 subsequent siblings)
9 siblings, 1 reply; 20+ messages in thread
From: christian.koever-draxl @ 2026-11-06 10:46 UTC (permalink / raw)
To: robh, krzk+dt, conor+dt, neil.armstrong, khilman, jbrunet,
martin.blumenstingl
Cc: devicetree, linux-kernel, linux-arm-kernel, linux-amlogic,
Christian Stefan Kövér-Draxl
From: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
Use the S4 specific compatible for the secure monitor, so that the
driver can apply the S4 power-off sequence.
Signed-off-by: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
---
arch/arm64/boot/dts/amlogic/meson-s4.dtsi | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
index 57270fbfb4a7..793c7bb9512e 100644
--- a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
@@ -135,7 +135,7 @@ xtal: xtal-clk {
firmware {
sm: secure-monitor {
- compatible = "amlogic,meson-gxbb-sm";
+ compatible = "amlogic,meson-s4-sm", "amlogic,meson-gxbb-sm";
pwrc: power-controller {
compatible = "amlogic,meson-s4-pwrc";
--
2.56.0
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 05/10] arm64: dts: amlogic: meson-s4: add the Mali GPU
2026-11-06 10:46 [PATCH 00/10] arm64: dts: amlogic: S4 SoC additions and the Amediatech X98Q christian.koever-draxl
` (3 preceding siblings ...)
2026-11-06 10:46 ` [PATCH 04/10] arm64: dts: amlogic: meson-s4: use the S4 secure monitor compatible christian.koever-draxl
@ 2026-11-06 10:46 ` christian.koever-draxl
2026-11-06 10:46 ` [PATCH 06/10] arm64: dts: amlogic: meson-s4: add the CPU thermal sensor and zone christian.koever-draxl
` (4 subsequent siblings)
9 siblings, 0 replies; 20+ messages in thread
From: christian.koever-draxl @ 2026-11-06 10:46 UTC (permalink / raw)
To: robh, krzk+dt, conor+dt, neil.armstrong, khilman, jbrunet,
martin.blumenstingl
Cc: devicetree, linux-kernel, linux-arm-kernel, linux-amlogic,
Christian Stefan Kövér-Draxl
From: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
Add the Mali-G31 GPU with its operating points. The GPU rail is not
switchable, so it scales by frequency only, over the fixed fclk derived
rates the vendor DVFS table uses as well.
Signed-off-by: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
---
arch/arm64/boot/dts/amlogic/meson-s4.dtsi | 55 +++++++++++++++++++++++
1 file changed, 55 insertions(+)
diff --git a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
index 793c7bb9512e..69105c8abf12 100644
--- a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
@@ -126,6 +126,40 @@ vrtc: rtc@fe010288 {
reg = <0x0 0xfe010288 0x0 0x4>;
};
+ /*
+ * The Mali rail is not switchable on this SoC, so the GPU scales by
+ * frequency alone. Every rate here is one of the fixed fclk dividers,
+ * optionally halved or quartered by the mali divider, which is what
+ * the vendor DVFS table uses as well. Its 850 MHz point is left out
+ * because it needs GP0 PLL, and the mali mux is not allowed to
+ * reprogram its parents.
+ */
+ gpu_opp_table: opp-table-gpu {
+ compatible = "operating-points-v2";
+
+ opp-124999998 {
+ opp-hz = /bits/ 64 <124999998>;
+ };
+ opp-249999996 {
+ opp-hz = /bits/ 64 <249999996>;
+ };
+ opp-285714281 {
+ opp-hz = /bits/ 64 <285714281>;
+ };
+ opp-399999994 {
+ opp-hz = /bits/ 64 <399999994>;
+ };
+ opp-499999992 {
+ opp-hz = /bits/ 64 <499999992>;
+ };
+ opp-666666656 {
+ opp-hz = /bits/ 64 <666666656>;
+ };
+ opp-799999988 {
+ opp-hz = /bits/ 64 <799999988>;
+ };
+ };
+
xtal: xtal-clk {
compatible = "fixed-clock";
clock-frequency = <24000000>;
@@ -164,6 +198,27 @@ soc {
#size-cells = <2>;
ranges;
+ gpu: gpu@fe400000 {
+ compatible = "amlogic,meson-g12a-mali", "arm,mali-bifrost";
+ reg = <0x0 0xfe400000 0x0 0x40000>;
+ interrupt-names = "job", "mmu", "gpu";
+ interrupts = <GIC_SPI 146 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 145 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH>;
+ /*
+ * CLKID_MALI is only the system bus gate. The core is
+ * fed by the glitch-free mali mux, which is the clock
+ * the OPP table scales.
+ */
+ clocks = <&clkc_periphs CLKID_MALI_SEL>,
+ <&clkc_periphs CLKID_MALI>;
+ clock-names = "core", "bus";
+ resets = <&reset RESET_MALI_APB>, <&reset RESET_MALI>;
+ operating-points-v2 = <&gpu_opp_table>;
+ #cooling-cells = <2>;
+ status = "disabled";
+ };
+
gic: interrupt-controller@fff01000 {
compatible = "arm,gic-400";
#interrupt-cells = <3>;
--
2.56.0
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 06/10] arm64: dts: amlogic: meson-s4: add the CPU thermal sensor and zone
2026-11-06 10:46 [PATCH 00/10] arm64: dts: amlogic: S4 SoC additions and the Amediatech X98Q christian.koever-draxl
` (4 preceding siblings ...)
2026-11-06 10:46 ` [PATCH 05/10] arm64: dts: amlogic: meson-s4: add the Mali GPU christian.koever-draxl
@ 2026-11-06 10:46 ` christian.koever-draxl
2026-11-06 10:53 ` sashiko-bot
2026-11-06 10:46 ` [PATCH 07/10] arm64: dts: amlogic: meson-s4: add the GE2D christian.koever-draxl
` (3 subsequent siblings)
9 siblings, 1 reply; 20+ messages in thread
From: christian.koever-draxl @ 2026-11-06 10:46 UTC (permalink / raw)
To: robh, krzk+dt, conor+dt, neil.armstrong, khilman, jbrunet,
martin.blumenstingl
Cc: devicetree, linux-kernel, linux-arm-kernel, linux-amlogic,
Christian Stefan Kövér-Draxl
From: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
Add the CPU temperature sensor with its bus and functional clocks; it
reads its calibration through the secure monitor. Add a CPU thermal
zone with a passive trip that throttles the GPU, which shares the die,
and a hot and a critical trip. The CPUs can join the passive trip once
CPU frequency scaling is in place.
Signed-off-by: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
---
arch/arm64/boot/dts/amlogic/meson-s4.dtsi | 48 +++++++++++++++++++++++
1 file changed, 48 insertions(+)
diff --git a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
index 69105c8abf12..1e8b845b80c3 100644
--- a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
@@ -11,6 +11,7 @@
#include <dt-bindings/clock/amlogic,s4-peripherals-clkc.h>
#include <dt-bindings/power/meson-s4-power.h>
#include <dt-bindings/reset/amlogic,meson-s4-reset.h>
+#include <dt-bindings/thermal/thermal.h>
/ {
cpus {
@@ -748,6 +749,17 @@ gpio_intc: interrupt-controller@4080 {
<10 11 12 13 14 15 16 17 18 19 20 21>;
};
+ cpu_temp: temperature-sensor@20000 {
+ compatible = "amlogic,s4-thermal";
+ reg = <0x0 0x20000 0x0 0x50>;
+ interrupts = <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&clkc_periphs CLKID_TS_PLL>,
+ <&clkc_periphs CLKID_TS>;
+ clock-names = "bus", "core";
+ #thermal-sensor-cells = <0>;
+ amlogic,secure-monitor = <&sm 1>;
+ };
+
eth_phy: mdio-multiplexer@28000 {
compatible = "amlogic,g12a-mdio-mux";
reg = <0x0 0x28000 0x0 0xa4>;
@@ -1025,4 +1037,40 @@ emmc: mmc@fe08c000 {
assigned-clock-rates = <24000000>;
};
};
+
+ thermal-zones {
+ cpu-thermal {
+ polling-delay = <1000>;
+ polling-delay-passive = <100>;
+ thermal-sensors = <&cpu_temp>;
+
+ trips {
+ cpu_passive: cpu-passive {
+ temperature = <85000>;
+ hysteresis = <5000>;
+ type = "passive";
+ };
+
+ cpu_hot: cpu-hot {
+ temperature = <95000>;
+ hysteresis = <5000>;
+ type = "hot";
+ };
+
+ cpu_critical: cpu-critical {
+ temperature = <105000>;
+ hysteresis = <1000>;
+ type = "critical";
+ };
+ };
+ cooling-maps {
+ /* the GPU shares the die and the sensor */
+ map0 {
+ trip = <&cpu_passive>;
+ cooling-device = <&gpu THERMAL_NO_LIMIT
+ THERMAL_NO_LIMIT>;
+ };
+ };
+ };
+ };
};
--
2.56.0
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 07/10] arm64: dts: amlogic: meson-s4: add the GE2D
2026-11-06 10:46 [PATCH 00/10] arm64: dts: amlogic: S4 SoC additions and the Amediatech X98Q christian.koever-draxl
` (5 preceding siblings ...)
2026-11-06 10:46 ` [PATCH 06/10] arm64: dts: amlogic: meson-s4: add the CPU thermal sensor and zone christian.koever-draxl
@ 2026-11-06 10:46 ` christian.koever-draxl
2026-11-06 10:53 ` sashiko-bot
2026-11-06 10:46 ` [PATCH 08/10] arm64: dts: amlogic: meson-s4: add the USB host christian.koever-draxl
` (2 subsequent siblings)
9 siblings, 1 reply; 20+ messages in thread
From: christian.koever-draxl @ 2026-11-06 10:46 UTC (permalink / raw)
To: robh, krzk+dt, conor+dt, neil.armstrong, khilman, jbrunet,
martin.blumenstingl
Cc: devicetree, linux-kernel, linux-arm-kernel, linux-amlogic,
Christian Stefan Kövér-Draxl
From: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
Add the GE2D 2D graphics accelerator, compatible with the AXG one.
Signed-off-by: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
---
arch/arm64/boot/dts/amlogic/meson-s4.dtsi | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
index 1e8b845b80c3..8bbd70e52a29 100644
--- a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
@@ -199,6 +199,16 @@ soc {
#size-cells = <2>;
ranges;
+ ge2d: ge2d@ff040000 {
+ compatible = "amlogic,s4-ge2d";
+ reg = <0x0 0xff040000 0x0 0x10000>;
+ interrupts = <GIC_SPI 217 IRQ_TYPE_EDGE_RISING>;
+ clocks = <&clkc_periphs CLKID_GE2D>;
+ resets = <&reset RESET_GE2D>;
+ power-domains = <&pwrc PWRC_S4_GE2D_ID>;
+ status = "disabled";
+ };
+
gpu: gpu@fe400000 {
compatible = "amlogic,meson-g12a-mali", "arm,mali-bifrost";
reg = <0x0 0xfe400000 0x0 0x40000>;
--
2.56.0
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 08/10] arm64: dts: amlogic: meson-s4: add the USB host
2026-11-06 10:46 [PATCH 00/10] arm64: dts: amlogic: S4 SoC additions and the Amediatech X98Q christian.koever-draxl
` (6 preceding siblings ...)
2026-11-06 10:46 ` [PATCH 07/10] arm64: dts: amlogic: meson-s4: add the GE2D christian.koever-draxl
@ 2026-11-06 10:46 ` christian.koever-draxl
2026-11-06 10:55 ` neil.armstrong
2026-11-06 10:59 ` sashiko-bot
2026-11-06 10:46 ` [PATCH 09/10] arm64: dts: amlogic: meson-s4: add the AO CEC controller christian.koever-draxl
2026-11-06 10:46 ` [PATCH 10/10] arm64: dts: amlogic: add the Amediatech X98Q christian.koever-draxl
9 siblings, 2 replies; 20+ messages in thread
From: christian.koever-draxl @ 2026-11-06 10:46 UTC (permalink / raw)
To: robh, krzk+dt, conor+dt, neil.armstrong, khilman, jbrunet,
martin.blumenstingl
Cc: devicetree, linux-kernel, linux-arm-kernel, linux-amlogic,
Christian Stefan Kövér-Draxl
From: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
Add the two USB2 PHYs and the USB glue with its xHCI host controller.
The S4 has no USB3 PHY, so the host runs USB2 only.
Signed-off-by: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
---
arch/arm64/boot/dts/amlogic/meson-s4.dtsi | 45 +++++++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
index 8bbd70e52a29..155997649dc3 100644
--- a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
@@ -770,6 +770,26 @@ cpu_temp: temperature-sensor@20000 {
amlogic,secure-monitor = <&sm 1>;
};
+ usb2_phy0: phy@3c000 {
+ compatible = "amlogic,s4-usb2-phy";
+ reg = <0x0 0x3c000 0x0 0x2000>;
+ clocks = <&xtal>;
+ clock-names = "xtal";
+ resets = <&reset RESET_USBPHY20>;
+ reset-names = "phy";
+ #phy-cells = <0>;
+ };
+
+ usb2_phy1: phy@3e000 {
+ compatible = "amlogic,s4-usb2-phy";
+ reg = <0x0 0x3e000 0x0 0x2000>;
+ clocks = <&xtal>;
+ clock-names = "xtal";
+ resets = <&reset RESET_USBPHY21>;
+ reset-names = "phy";
+ #phy-cells = <0>;
+ };
+
eth_phy: mdio-multiplexer@28000 {
compatible = "amlogic,g12a-mdio-mux";
reg = <0x0 0x28000 0x0 0xa4>;
@@ -988,6 +1008,31 @@ mdio0: mdio {
};
};
+ usb: usb@fe03a000 {
+ compatible = "amlogic,meson-s4-usb-ctrl",
+ "amlogic,meson-g12a-usb-ctrl";
+ reg = <0x0 0xfe03a000 0x0 0xa0>;
+ interrupts = <GIC_SPI 129 IRQ_TYPE_LEVEL_HIGH>;
+ #address-cells = <2>;
+ #size-cells = <2>;
+ ranges;
+ clocks = <&clkc_periphs CLKID_USB>;
+ resets = <&reset RESET_USBCTRL>;
+ power-domains = <&pwrc PWRC_S4_USB_COMB_ID>;
+ dr_mode = "host";
+ phys = <&usb2_phy0>, <&usb2_phy1>;
+ phy-names = "usb2-phy0", "usb2-phy1";
+ status = "disabled";
+
+ crg_xhci: usb@fde00000 {
+ compatible = "generic-xhci";
+ reg = <0x0 0xfde00000 0x0 0x100000>;
+ interrupts = <GIC_SPI 130 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&clkc_periphs CLKID_USB1_TO_DDR>;
+ status = "okay";
+ };
+ };
+
uart_a: serial@fe078000 {
compatible = "amlogic,meson-s4-uart",
"amlogic,meson-ao-uart";
--
2.56.0
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 09/10] arm64: dts: amlogic: meson-s4: add the AO CEC controller
2026-11-06 10:46 [PATCH 00/10] arm64: dts: amlogic: S4 SoC additions and the Amediatech X98Q christian.koever-draxl
` (7 preceding siblings ...)
2026-11-06 10:46 ` [PATCH 08/10] arm64: dts: amlogic: meson-s4: add the USB host christian.koever-draxl
@ 2026-11-06 10:46 ` christian.koever-draxl
2026-11-06 10:55 ` neil.armstrong
2026-11-06 10:46 ` [PATCH 10/10] arm64: dts: amlogic: add the Amediatech X98Q christian.koever-draxl
9 siblings, 1 reply; 20+ messages in thread
From: christian.koever-draxl @ 2026-11-06 10:46 UTC (permalink / raw)
To: robh, krzk+dt, conor+dt, neil.armstrong, khilman, jbrunet,
martin.blumenstingl
Cc: devicetree, linux-kernel, linux-arm-kernel, linux-amlogic,
Christian Stefan Kövér-Draxl
From: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
Add the AO_CEC_A controller and its pin group.
Signed-off-by: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
---
arch/arm64/boot/dts/amlogic/meson-s4.dtsi | 24 +++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
index 155997649dc3..dd51e786d29d 100644
--- a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
@@ -747,6 +747,14 @@ mux {
};
};
+ ao_cec_a_pins: ao-cec-a {
+ mux {
+ groups = "ao_cec_a";
+ function = "ao_cec_a";
+ bias-disable;
+ };
+ };
+
};
gpio_intc: interrupt-controller@4080 {
@@ -970,6 +978,22 @@ sec_ao: ao-secure@10220 {
amlogic,has-chip-id;
};
+ cec_a: cec@44000 {
+ compatible = "amlogic,meson-gx-ao-cec";
+ reg = <0x0 0x44000 0x0 0x14>;
+ interrupts = <GIC_SPI 179 IRQ_TYPE_EDGE_RISING>;
+ clocks = <&clkc_periphs CLKID_CECA_32K_CLKOUT>;
+ clock-names = "core";
+ assigned-clocks = <&clkc_periphs CLKID_CECA_32K_DIV>,
+ <&clkc_periphs CLKID_CECA_32K_SEL_PRE>,
+ <&clkc_periphs CLKID_CECA_32K_SEL>;
+ assigned-clock-parents = <0>,
+ <&clkc_periphs CLKID_CECA_32K_DIV>,
+ <&clkc_periphs CLKID_CECA_32K_SEL_PRE>;
+ assigned-clock-rates = <32768>, <0>, <0>;
+ status = "disabled";
+ };
+
ir: ir@84040 {
compatible = "amlogic,meson-s4-ir";
reg = <0x0 0x84040 0x0 0x30>;
--
2.56.0
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 10/10] arm64: dts: amlogic: add the Amediatech X98Q
2026-11-06 10:46 [PATCH 00/10] arm64: dts: amlogic: S4 SoC additions and the Amediatech X98Q christian.koever-draxl
` (8 preceding siblings ...)
2026-11-06 10:46 ` [PATCH 09/10] arm64: dts: amlogic: meson-s4: add the AO CEC controller christian.koever-draxl
@ 2026-11-06 10:46 ` christian.koever-draxl
2026-11-06 11:00 ` sashiko-bot
9 siblings, 1 reply; 20+ messages in thread
From: christian.koever-draxl @ 2026-11-06 10:46 UTC (permalink / raw)
To: robh, krzk+dt, conor+dt, neil.armstrong, khilman, jbrunet,
martin.blumenstingl
Cc: devicetree, linux-kernel, linux-arm-kernel, linux-amlogic,
Christian Stefan Kövér-Draxl
From: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
The Amediatech X98Q is a TV box with an Amlogic S905W2, eMMC, an SD
slot, Fast Ethernet, two USB2 host ports, HDMI, a power LED, an IR
receiver and an Amlogic W1 Wi-Fi/Bluetooth combo chip.
Supported:
- serial console, eMMC, SD card, Ethernet, USB host
- Mali GPU, GE2D, thermal throttling of the GPU
- IR remote, also as a wakeup source
- Bluetooth
The CPU supply is described, but CPU frequency scaling and the video
decoder are left for later, as their drivers are not upstream yet.
The SDIO bus for the W1 Wi-Fi is described, but there is no mainline
driver for it yet.
Signed-off-by: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
---
arch/arm64/boot/dts/amlogic/Makefile | 1 +
.../boot/dts/amlogic/meson-s4-s905w2-x98q.dts | 310 ++++++++++++++++++
2 files changed, 311 insertions(+)
create mode 100644 arch/arm64/boot/dts/amlogic/meson-s4-s905w2-x98q.dts
diff --git a/arch/arm64/boot/dts/amlogic/Makefile b/arch/arm64/boot/dts/amlogic/Makefile
index 57bc440fa55c..4e85c5227b7c 100644
--- a/arch/arm64/boot/dts/amlogic/Makefile
+++ b/arch/arm64/boot/dts/amlogic/Makefile
@@ -86,6 +86,7 @@ dtb-$(CONFIG_ARCH_MESON) += meson-gxm-ugoos-am3.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-gxm-vega-s96.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-gxm-wetek-core2.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-s4-s805x2-aq222.dtb
+dtb-$(CONFIG_ARCH_MESON) += meson-s4-s905w2-x98q.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-s4-s905y4-khadas-vim1s.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-sm1-a95xf3-air-gbit.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-sm1-a95xf3-air.dtb
diff --git a/arch/arm64/boot/dts/amlogic/meson-s4-s905w2-x98q.dts b/arch/arm64/boot/dts/amlogic/meson-s4-s905w2-x98q.dts
new file mode 100644
index 000000000000..388198756a3a
--- /dev/null
+++ b/arch/arm64/boot/dts/amlogic/meson-s4-s905w2-x98q.dts
@@ -0,0 +1,310 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (c) 2026 Christian Stefan Kövér-Draxl <ckoever@outlook.de>
+ * Based on meson-s4-s905y4-khadas-vim1s.dts:
+ * - Copyright (c) 2026 Khadas Technology Co., Ltd.
+ */
+
+/dts-v1/;
+
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/leds/common.h>
+
+#include "meson-s4.dtsi"
+
+/ {
+ model = "Shenzhen Amediatech Technology Co., Ltd X98Q";
+ compatible = "amediatech,x98q", "amlogic,s905w2", "amlogic,s4";
+ interrupt-parent = <&gic>;
+ #address-cells = <2>;
+ #size-cells = <2>;
+
+ aliases {
+ mmc0 = &emmc;
+ mmc1 = &sd;
+ mmc2 = &sdio;
+ serial0 = &uart_b;
+ serial1 = &uart_a;
+ };
+
+ chosen {
+ stdout-path = "serial0:115200n8";
+ };
+
+ memory@0 {
+ device_type = "memory";
+ reg = <0x0 0x0 0x0 0x40000000>;
+ };
+
+ reserved-memory {
+ #address-cells = <2>;
+ #size-cells = <2>;
+ ranges;
+
+ /* 52 MiB reserved for ARM Trusted Firmware */
+ secmon_reserved: secmon@5000000 {
+ reg = <0x0 0x05000000 0x0 0x3400000>;
+ no-map;
+ };
+ };
+
+ adc-keys {
+ compatible = "adc-keys";
+ io-channels = <&saradc 0>;
+ io-channel-names = "buttons";
+ keyup-threshold-microvolt = <1710000>;
+
+ button-function {
+ label = "Function";
+ linux,code = <KEY_POWER>;
+ press-threshold-microvolt = <35000>;
+ };
+ };
+
+ emmc_pwrseq: emmc-pwrseq {
+ compatible = "mmc-pwrseq-emmc";
+ reset-gpios = <&gpio GPIOB_9 GPIO_ACTIVE_LOW>;
+ };
+
+ leds {
+ compatible = "gpio-leds";
+
+ led-power {
+ color = <LED_COLOR_ID_BLUE>;
+ function = LED_FUNCTION_POWER;
+ gpios = <&gpio GPIOD_11 GPIO_ACTIVE_LOW>;
+ default-state = "on";
+ };
+ };
+
+ main_5v: regulator-main-5v {
+ compatible = "regulator-fixed";
+ regulator-name = "5V";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-always-on;
+ };
+
+ sd_3v3: regulator-sd-3v3 {
+ compatible = "regulator-fixed";
+ regulator-name = "SD_3V3";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ gpio = <&gpio GPIOD_4 GPIO_ACTIVE_LOW>;
+ regulator-always-on;
+ };
+
+ vddao_3v3: regulator-vddao-3v3 {
+ compatible = "regulator-fixed";
+ regulator-name = "VDDAO_3V3";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ vin-supply = <&main_5v>;
+ regulator-always-on;
+ };
+
+ /* SY8120B1ABC DC/DC regulator behind an RC filter */
+ vddcpu: regulator-vddcpu {
+ compatible = "pwm-regulator";
+ regulator-name = "VDDCPU";
+ regulator-min-microvolt = <689000>;
+ regulator-max-microvolt = <1049000>;
+ vin-supply = <&main_5v>;
+ pwms = <&pwm_ij 1 1500 0>;
+ pwm-dutycycle-range = <100 0>;
+ /*
+ * A duty cycle change takes a while to show on the filtered
+ * rail; without this the CPU is clocked up while the voltage
+ * is still ramping.
+ */
+ regulator-settling-time-up-us = <3000>;
+ regulator-boot-on;
+ regulator-always-on;
+ /* Voltage Duty-Cycle */
+ voltage-table = <1049000 0>,
+ <1039000 3>,
+ <1029000 6>,
+ <1019000 9>,
+ <1009000 12>,
+ <999000 14>,
+ <989000 17>,
+ <979000 20>,
+ <969000 23>,
+ <959000 26>,
+ <949000 29>,
+ <939000 31>,
+ <929000 34>,
+ <919000 37>,
+ <909000 40>,
+ <899000 43>,
+ <889000 45>,
+ <879000 48>,
+ <869000 51>,
+ <859000 54>,
+ <849000 56>,
+ <839000 59>,
+ <829000 62>,
+ <819000 65>,
+ <809000 68>,
+ <799000 70>,
+ <789000 73>,
+ <779000 76>,
+ <769000 79>,
+ <759000 81>,
+ <749000 84>,
+ <739000 87>,
+ <729000 89>,
+ <719000 92>,
+ <709000 95>,
+ <699000 98>,
+ <689000 100>;
+ };
+
+ vddio_ao1v8: regulator-vddio-ao1v8 {
+ compatible = "regulator-fixed";
+ regulator-name = "VDDIO_AO1V8";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ vin-supply = <&vddao_3v3>;
+ regulator-always-on;
+ };
+
+ sdio_32k: sdio-32k {
+ compatible = "pwm-clock";
+ #clock-cells = <0>;
+ clock-frequency = <32768>;
+ pwms = <&pwm_ef 0 30518 0>;
+ };
+
+ sdio_pwrseq: sdio-pwrseq {
+ compatible = "mmc-pwrseq-simple";
+ reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>;
+ clocks = <&sdio_32k>;
+ clock-names = "ext_clock";
+ };
+};
+
+&emmc {
+ pinctrl-0 = <&emmc_pins>, <&emmc_ds_pins>;
+ pinctrl-1 = <&emmc_clk_gate_pins>;
+ pinctrl-names = "default", "clk-gate";
+ bus-width = <8>;
+ cap-mmc-highspeed;
+ mmc-ddr-1_8v;
+ mmc-hs200-1_8v;
+ max-frequency = <200000000>;
+ non-removable;
+ disable-wp;
+ mmc-pwrseq = <&emmc_pwrseq>;
+ vmmc-supply = <&vddao_3v3>;
+ vqmmc-supply = <&vddio_ao1v8>;
+ status = "okay";
+};
+
+ðmac {
+ phy-handle = <&internal_ephy>;
+ phy-mode = "rmii";
+ status = "okay";
+};
+
+&ge2d {
+ status = "okay";
+};
+
+&gpu {
+ status = "okay";
+};
+
+&ir {
+ pinctrl-0 = <&remote_pins>;
+ pinctrl-names = "default";
+ linux,rc-map-name = "rc-x98q";
+ wakeup-source;
+ status = "okay";
+};
+
+&pwm_ef {
+ pinctrl-0 = <&pwm_e_pins1>;
+ pinctrl-names = "default";
+ status = "okay";
+};
+
+&pwm_ij {
+ pinctrl-0 = <&pwm_j_pins>;
+ pinctrl-names = "default";
+ status = "okay";
+};
+
+&saradc {
+ vref-supply = <&vddio_ao1v8>;
+ status = "okay";
+};
+
+&sd {
+ pinctrl-0 = <&sdcard_pins>;
+ pinctrl-1 = <&sdcard_clk_gate_pins>;
+ pinctrl-names = "default", "clk-gate";
+ bus-width = <4>;
+ cap-sd-highspeed;
+ /* Fails CRC at 50 MHz with the default 180 degree phase */
+ amlogic,core-phase-degrees = <270>;
+ max-frequency = <50000000>;
+ disable-wp;
+ cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>;
+ vmmc-supply = <&vddao_3v3>;
+ vqmmc-supply = <&vddao_3v3>;
+ status = "okay";
+};
+
+/* Wi-Fi half of the Amlogic W1 combo chip */
+&sdio {
+ pinctrl-0 = <&sdio_pins>;
+ pinctrl-1 = <&sdio_clk_gate_pins>;
+ pinctrl-names = "default", "clk-gate";
+ bus-width = <4>;
+ cap-sd-highspeed;
+ sd-uhs-sdr50;
+ sd-uhs-sdr104;
+ max-frequency = <200000000>;
+ non-removable;
+ disable-wp;
+ no-sd;
+ no-mmc;
+ mmc-pwrseq = <&sdio_pwrseq>;
+ vmmc-supply = <&vddao_3v3>;
+ vqmmc-supply = <&vddio_ao1v8>;
+ status = "okay";
+};
+
+&uart_a {
+ pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>;
+ pinctrl-names = "default";
+ uart-has-rtscts;
+ status = "okay";
+
+ /* Bluetooth half of the Amlogic W1 combo chip */
+ bluetooth {
+ compatible = "amlogic,w155s2-bt";
+ clocks = <&sdio_32k>;
+ enable-gpios = <&gpio GPIOX_17 GPIO_ACTIVE_HIGH>;
+ vddio-supply = <&vddio_ao1v8>;
+ firmware-name = "amlogic/aml_w1_bt_uart.bin";
+ amlogic,shared-antenna;
+ };
+};
+
+&uart_b {
+ status = "okay";
+};
+
+&usb {
+ status = "okay";
+};
+
+&usb2_phy0 {
+ status = "okay";
+};
+
+&usb2_phy1 {
+ status = "okay";
+};
--
2.56.0
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 02/10] arm64: dts: amlogic: meson-s4: describe the CPU caches
2026-11-06 10:46 ` [PATCH 02/10] arm64: dts: amlogic: meson-s4: describe the CPU caches christian.koever-draxl
@ 2026-11-06 10:52 ` neil.armstrong
0 siblings, 0 replies; 20+ messages in thread
From: neil.armstrong @ 2026-11-06 10:52 UTC (permalink / raw)
To: christian.koever-draxl, robh, krzk+dt, conor+dt, khilman,
jbrunet, martin.blumenstingl
Cc: devicetree, linux-kernel, linux-arm-kernel, linux-amlogic,
Christian Stefan Kövér-Draxl
On 11/6/26 11:46, christian.koever-draxl@student.uibk.ac.at wrote:
> From: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
>
> Describe the per-core L1 caches and the shared 512 KiB L2 cache, with
> the geometry the cores report in CCSIDR_EL1 on an S905W2.
>
> Signed-off-by: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
> ---
> arch/arm64/boot/dts/amlogic/meson-s4.dtsi | 38 +++++++++++++++++++++++
> 1 file changed, 38 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> index 2a6fbd530836..675db02a8d5e 100644
> --- a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> +++ b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> @@ -22,6 +22,13 @@ cpu0: cpu@0 {
> compatible = "arm,cortex-a35";
> reg = <0x0 0x0>;
> enable-method = "psci";
> + d-cache-line-size = <64>;
> + d-cache-size = <0x8000>;
> + d-cache-sets = <128>;
> + i-cache-line-size = <64>;
> + i-cache-size = <0x8000>;
> + i-cache-sets = <256>;
> + next-level-cache = <&l2>;
> };
>
> cpu1: cpu@1 {
> @@ -29,6 +36,13 @@ cpu1: cpu@1 {
> compatible = "arm,cortex-a35";
> reg = <0x0 0x1>;
> enable-method = "psci";
> + d-cache-line-size = <64>;
> + d-cache-size = <0x8000>;
> + d-cache-sets = <128>;
> + i-cache-line-size = <64>;
> + i-cache-size = <0x8000>;
> + i-cache-sets = <256>;
> + next-level-cache = <&l2>;
> };
>
> cpu2: cpu@2 {
> @@ -36,6 +50,13 @@ cpu2: cpu@2 {
> compatible = "arm,cortex-a35";
> reg = <0x0 0x2>;
> enable-method = "psci";
> + d-cache-line-size = <64>;
> + d-cache-size = <0x8000>;
> + d-cache-sets = <128>;
> + i-cache-line-size = <64>;
> + i-cache-size = <0x8000>;
> + i-cache-sets = <256>;
> + next-level-cache = <&l2>;
> };
>
> cpu3: cpu@3 {
> @@ -43,6 +64,23 @@ cpu3: cpu@3 {
> compatible = "arm,cortex-a35";
> reg = <0x0 0x3>;
> enable-method = "psci";
> + d-cache-line-size = <64>;
> + d-cache-size = <0x8000>;
> + d-cache-sets = <128>;
> + i-cache-line-size = <64>;
> + i-cache-size = <0x8000>;
> + i-cache-sets = <256>;
> + next-level-cache = <&l2>;
> + };
> +
> + /* Geometry as CCSIDR_EL1 reports it on S905W2. */
> + l2: l2-cache0 {
> + compatible = "cache";
> + cache-level = <2>;
> + cache-unified;
> + cache-size = <0x80000>; /* L2. 512 KB */
> + cache-line-size = <64>;
> + cache-sets = <1024>;
> };
> };
>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Thanks,
Neil
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 07/10] arm64: dts: amlogic: meson-s4: add the GE2D
2026-11-06 10:46 ` [PATCH 07/10] arm64: dts: amlogic: meson-s4: add the GE2D christian.koever-draxl
@ 2026-11-06 10:53 ` sashiko-bot
0 siblings, 0 replies; 20+ messages in thread
From: sashiko-bot @ 2026-11-06 10:53 UTC (permalink / raw)
To: christian.koever-draxl
Cc: devicetree, linux-amlogic, robh, conor+dt, neil.armstrong
Thank you for your contribution! Sashiko AI review found 1 potential
issue to consider:
- [Medium] arm64: dts: amlogic: meson-s4: ge2d node missing
amlogic,axg-ge2d fallback
--
commit 0db40a28ab18ba3c72a34659bd708d3e86073c70
Author: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
arm64: dts: amlogic: meson-s4: add the GE2D
This commit adds the GE2D 2D graphics accelerator node to the Amlogic S4 SoC
devicetree.
> diff --git a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> index 1e8b845b80c31..8bbd70e52a299 100644
> --- a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> +++ b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> @@ -199,6 +199,16 @@ soc {
> #size-cells = <2>;
> ranges;
>
> + ge2d: ge2d@ff040000 {
> + compatible = "amlogic,s4-ge2d";
> + reg = <0x0 0xff040000 0x0 0x10000>;
> + interrupts = <GIC_SPI 217 IRQ_TYPE_EDGE_RISING>;
> + clocks = <&clkc_periphs CLKID_GE2D>;
> + resets = <&reset RESET_GE2D>;
> + power-domains = <&pwrc PWRC_S4_GE2D_ID>;
> + status = "disabled";
> + };
[Severity: Medium]
Should the ge2d node include "amlogic,axg-ge2d" as a fallback compatible string?
meson_ge2d_match in drivers/media/platform/amlogic/meson-ge2d/ge2d.c only
matches "amlogic,axg-ge2d", so without the fallback compatible the driver will
never bind when this node is enabled. In addition,
Documentation/devicetree/bindings/media/amlogic,axg-ge2d.yaml sets
additionalProperties: false and does not document "amlogic,s4-ge2d" or
power-domains, which causes dtbs_check to fail.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261106104659.54656-1-christian.koever-draxl@student.uibk.ac.at?part=7
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 06/10] arm64: dts: amlogic: meson-s4: add the CPU thermal sensor and zone
2026-11-06 10:46 ` [PATCH 06/10] arm64: dts: amlogic: meson-s4: add the CPU thermal sensor and zone christian.koever-draxl
@ 2026-11-06 10:53 ` sashiko-bot
0 siblings, 0 replies; 20+ messages in thread
From: sashiko-bot @ 2026-11-06 10:53 UTC (permalink / raw)
To: christian.koever-draxl
Cc: devicetree, linux-amlogic, robh, conor+dt, neil.armstrong
Thank you for your contribution! Sashiko AI review found 1 potential
issue to consider:
- [High] arm64: dts: amlogic: meson-s4: unmatched amlogic,s4-thermal
compatible
--
commit a99d2d51a763291902046985186e9763a3fd5d38
Author: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
arm64: dts: amlogic: meson-s4: add the CPU thermal sensor and zone
This commit adds the CPU temperature sensor node and the corresponding CPU
thermal zone with trip points and GPU cooling map to meson-s4.dtsi.
> diff --git a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> index 69105c8abf122..1e8b845b80c31 100644
> --- a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> +++ b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
[ ... ]
> @@ -748,6 +749,17 @@ gpio_intc: interrupt-controller@4080 {
> <10 11 12 13 14 15 16 17 18 19 20 21>;
> };
>
> + cpu_temp: temperature-sensor@20000 {
> + compatible = "amlogic,s4-thermal";
> + reg = <0x0 0x20000 0x0 0x50>;
> + interrupts = <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>;
> + clocks = <&clkc_periphs CLKID_TS_PLL>,
> + <&clkc_periphs CLKID_TS>;
> + clock-names = "bus", "core";
> + #thermal-sensor-cells = <0>;
> + amlogic,secure-monitor = <&sm 1>;
> + };
[Severity: High]
Does cpu_temp fail to bind to a driver and fail dtbs_check because
"amlogic,s4-thermal" is not matched or documented?
of_amlogic_thermal_match[] in drivers/thermal/amlogic_thermal.c only lists
"amlogic,g12a-ddr-thermal", "amlogic,g12a-cpu-thermal",
"amlogic,a1-cpu-thermal", and "amlogic,t7-thermal". Without a matching
entry or a fallback compatible such as "amlogic,t7-thermal" (which
Documentation/devicetree/bindings/thermal/amlogic,thermal.yaml also
requires when two clocks and clock-names are present), amlogic_thermal_probe()
never runs and the cpu-thermal zone remains inactive.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261106104659.54656-1-christian.koever-draxl@student.uibk.ac.at?part=6
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 03/10] arm64: dts: amlogic: meson-s4: add the PSCI CPU idle state
2026-11-06 10:46 ` [PATCH 03/10] arm64: dts: amlogic: meson-s4: add the PSCI CPU idle state christian.koever-draxl
@ 2026-11-06 10:54 ` neil.armstrong
0 siblings, 0 replies; 20+ messages in thread
From: neil.armstrong @ 2026-11-06 10:54 UTC (permalink / raw)
To: christian.koever-draxl, robh, krzk+dt, conor+dt, khilman,
jbrunet, martin.blumenstingl
Cc: devicetree, linux-kernel, linux-arm-kernel, linux-amlogic,
Christian Stefan Kövér-Draxl
On 11/6/26 11:46, christian.koever-draxl@student.uibk.ac.at wrote:
> From: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
>
> The firmware implements PSCI 1.0 without OS-initiated mode. Add the
> core power-down state the vendor kernel uses (power state 0x10000).
>
> Signed-off-by: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
> ---
> arch/arm64/boot/dts/amlogic/meson-s4.dtsi | 24 +++++++++++++++++++++++
> 1 file changed, 24 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> index 675db02a8d5e..57270fbfb4a7 100644
> --- a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> +++ b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> @@ -22,6 +22,7 @@ cpu0: cpu@0 {
> compatible = "arm,cortex-a35";
> reg = <0x0 0x0>;
> enable-method = "psci";
> + cpu-idle-states = <&cpu_sleep>;
> d-cache-line-size = <64>;
> d-cache-size = <0x8000>;
> d-cache-sets = <128>;
> @@ -36,6 +37,7 @@ cpu1: cpu@1 {
> compatible = "arm,cortex-a35";
> reg = <0x0 0x1>;
> enable-method = "psci";
> + cpu-idle-states = <&cpu_sleep>;
> d-cache-line-size = <64>;
> d-cache-size = <0x8000>;
> d-cache-sets = <128>;
> @@ -50,6 +52,7 @@ cpu2: cpu@2 {
> compatible = "arm,cortex-a35";
> reg = <0x0 0x2>;
> enable-method = "psci";
> + cpu-idle-states = <&cpu_sleep>;
> d-cache-line-size = <64>;
> d-cache-size = <0x8000>;
> d-cache-sets = <128>;
> @@ -64,6 +67,7 @@ cpu3: cpu@3 {
> compatible = "arm,cortex-a35";
> reg = <0x0 0x3>;
> enable-method = "psci";
> + cpu-idle-states = <&cpu_sleep>;
> d-cache-line-size = <64>;
> d-cache-size = <0x8000>;
> d-cache-sets = <128>;
> @@ -82,6 +86,26 @@ l2: l2-cache0 {
> cache-line-size = <64>;
> cache-sets = <1024>;
> };
> +
> + /*
> + * The firmware reports PSCI 1.0 without OSI, so the platform
> + * itself decides how deep to go and the kernel only has this
> + * one core state to offer. The suspend parameter is in the
> + * original format - bit 16 asks for a power down at affinity
> + * level 0 - and matches what the vendor kernel passes.
> + */
Drop this comment and move it to the commit message
> + idle-states {
> + entry-method = "psci";
> +
> + cpu_sleep: cpu-sleep {
> + compatible = "arm,idle-state";
> + arm,psci-suspend-param = <0x00010000>;
> + local-timer-stop;
> + entry-latency-us = <4000>;
> + exit-latency-us = <5000>;
> + min-residency-us = <10000>;
> + };
> + };
> };
>
> timer {
With that:
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Thanks,
Neil
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 04/10] arm64: dts: amlogic: meson-s4: use the S4 secure monitor compatible
2026-11-06 10:46 ` [PATCH 04/10] arm64: dts: amlogic: meson-s4: use the S4 secure monitor compatible christian.koever-draxl
@ 2026-11-06 10:54 ` sashiko-bot
0 siblings, 0 replies; 20+ messages in thread
From: sashiko-bot @ 2026-11-06 10:54 UTC (permalink / raw)
To: christian.koever-draxl
Cc: devicetree, linux-amlogic, robh, conor+dt, neil.armstrong
Thank you for your contribution! Sashiko AI review found 1 potential
issue to consider:
- [Medium] arm64: dts: amlogic: meson-s4: undocumented and unhandled
amlogic,meson-s4-sm compatible
--
commit 7614308a3cef6b940646583a9f25a7b443724222
Author: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
arm64: dts: amlogic: meson-s4: use the S4 secure monitor compatible
This commit adds the "amlogic,meson-s4-sm" compatible string to the
secure-monitor node in the Meson S4 device tree include.
> diff --git a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> index 57270fbfb4a73..793c7bb9512eb 100644
> --- a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> +++ b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> @@ -135,7 +135,7 @@ xtal: xtal-clk {
>
> firmware {
> sm: secure-monitor {
> - compatible = "amlogic,meson-gxbb-sm";
> + compatible = "amlogic,meson-s4-sm", "amlogic,meson-gxbb-sm";
[Severity: Medium]
Does adding "amlogic,meson-s4-sm" break dtbs_check on Meson S4 boards?
Documentation/devicetree/bindings/firmware/amlogic,meson-gxbb-sm.yaml only
permits "amlogic,meson-gxbb-sm" or "amlogic,meson-gx-sm" followed by
"amlogic,meson-gxbb-sm". In addition, meson_sm_ids[] in
drivers/firmware/meson/meson_sm.c only matches "amlogic,meson-gxbb-sm" and no
driver in the tree handles "amlogic,meson-s4-sm" or implements an S4
power-off sequence.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261106104659.54656-1-christian.koever-draxl@student.uibk.ac.at?part=4
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 08/10] arm64: dts: amlogic: meson-s4: add the USB host
2026-11-06 10:46 ` [PATCH 08/10] arm64: dts: amlogic: meson-s4: add the USB host christian.koever-draxl
@ 2026-11-06 10:55 ` neil.armstrong
2026-11-06 10:59 ` sashiko-bot
1 sibling, 0 replies; 20+ messages in thread
From: neil.armstrong @ 2026-11-06 10:55 UTC (permalink / raw)
To: christian.koever-draxl, robh, krzk+dt, conor+dt, khilman,
jbrunet, martin.blumenstingl
Cc: devicetree, linux-kernel, linux-arm-kernel, linux-amlogic,
Christian Stefan Kövér-Draxl
On 11/6/26 11:46, christian.koever-draxl@student.uibk.ac.at wrote:
> From: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
>
> Add the two USB2 PHYs and the USB glue with its xHCI host controller.
> The S4 has no USB3 PHY, so the host runs USB2 only.
>
> Signed-off-by: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
> ---
> arch/arm64/boot/dts/amlogic/meson-s4.dtsi | 45 +++++++++++++++++++++++
> 1 file changed, 45 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> index 8bbd70e52a29..155997649dc3 100644
> --- a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> +++ b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> @@ -770,6 +770,26 @@ cpu_temp: temperature-sensor@20000 {
> amlogic,secure-monitor = <&sm 1>;
> };
>
> + usb2_phy0: phy@3c000 {
> + compatible = "amlogic,s4-usb2-phy";
> + reg = <0x0 0x3c000 0x0 0x2000>;
> + clocks = <&xtal>;
> + clock-names = "xtal";
> + resets = <&reset RESET_USBPHY20>;
> + reset-names = "phy";
> + #phy-cells = <0>;
> + };
> +
> + usb2_phy1: phy@3e000 {
> + compatible = "amlogic,s4-usb2-phy";
> + reg = <0x0 0x3e000 0x0 0x2000>;
> + clocks = <&xtal>;
> + clock-names = "xtal";
> + resets = <&reset RESET_USBPHY21>;
> + reset-names = "phy";
> + #phy-cells = <0>;
> + };
> +
> eth_phy: mdio-multiplexer@28000 {
> compatible = "amlogic,g12a-mdio-mux";
> reg = <0x0 0x28000 0x0 0xa4>;
> @@ -988,6 +1008,31 @@ mdio0: mdio {
> };
> };
>
> + usb: usb@fe03a000 {
> + compatible = "amlogic,meson-s4-usb-ctrl",
> + "amlogic,meson-g12a-usb-ctrl";
> + reg = <0x0 0xfe03a000 0x0 0xa0>;
> + interrupts = <GIC_SPI 129 IRQ_TYPE_LEVEL_HIGH>;
> + #address-cells = <2>;
> + #size-cells = <2>;
> + ranges;
> + clocks = <&clkc_periphs CLKID_USB>;
> + resets = <&reset RESET_USBCTRL>;
> + power-domains = <&pwrc PWRC_S4_USB_COMB_ID>;
> + dr_mode = "host";
> + phys = <&usb2_phy0>, <&usb2_phy1>;
> + phy-names = "usb2-phy0", "usb2-phy1";
> + status = "disabled";
> +
> + crg_xhci: usb@fde00000 {
> + compatible = "generic-xhci";
> + reg = <0x0 0xfde00000 0x0 0x100000>;
> + interrupts = <GIC_SPI 130 IRQ_TYPE_LEVEL_HIGH>;
> + clocks = <&clkc_periphs CLKID_USB1_TO_DDR>;
> + status = "okay";
Drop status
> + };
> + };
> +
> uart_a: serial@fe078000 {
> compatible = "amlogic,meson-s4-uart",
> "amlogic,meson-ao-uart";
With that:
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Thanks,
Neil
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 09/10] arm64: dts: amlogic: meson-s4: add the AO CEC controller
2026-11-06 10:46 ` [PATCH 09/10] arm64: dts: amlogic: meson-s4: add the AO CEC controller christian.koever-draxl
@ 2026-11-06 10:55 ` neil.armstrong
0 siblings, 0 replies; 20+ messages in thread
From: neil.armstrong @ 2026-11-06 10:55 UTC (permalink / raw)
To: christian.koever-draxl, robh, krzk+dt, conor+dt, khilman,
jbrunet, martin.blumenstingl
Cc: devicetree, linux-kernel, linux-arm-kernel, linux-amlogic,
Christian Stefan Kövér-Draxl
On 11/6/26 11:46, christian.koever-draxl@student.uibk.ac.at wrote:
> From: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
>
> Add the AO_CEC_A controller and its pin group.
>
> Signed-off-by: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
> ---
> arch/arm64/boot/dts/amlogic/meson-s4.dtsi | 24 +++++++++++++++++++++++
> 1 file changed, 24 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> index 155997649dc3..dd51e786d29d 100644
> --- a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> +++ b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> @@ -747,6 +747,14 @@ mux {
> };
> };
>
> + ao_cec_a_pins: ao-cec-a {
> + mux {
> + groups = "ao_cec_a";
> + function = "ao_cec_a";
> + bias-disable;
> + };
> + };
> +
> };
>
> gpio_intc: interrupt-controller@4080 {
> @@ -970,6 +978,22 @@ sec_ao: ao-secure@10220 {
> amlogic,has-chip-id;
> };
>
> + cec_a: cec@44000 {
> + compatible = "amlogic,meson-gx-ao-cec";
> + reg = <0x0 0x44000 0x0 0x14>;
> + interrupts = <GIC_SPI 179 IRQ_TYPE_EDGE_RISING>;
> + clocks = <&clkc_periphs CLKID_CECA_32K_CLKOUT>;
> + clock-names = "core";
> + assigned-clocks = <&clkc_periphs CLKID_CECA_32K_DIV>,
> + <&clkc_periphs CLKID_CECA_32K_SEL_PRE>,
> + <&clkc_periphs CLKID_CECA_32K_SEL>;
> + assigned-clock-parents = <0>,
> + <&clkc_periphs CLKID_CECA_32K_DIV>,
> + <&clkc_periphs CLKID_CECA_32K_SEL_PRE>;
> + assigned-clock-rates = <32768>, <0>, <0>;
> + status = "disabled";
> + };
> +
> ir: ir@84040 {
> compatible = "amlogic,meson-s4-ir";
> reg = <0x0 0x84040 0x0 0x30>;
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Thanks,
Neil
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 08/10] arm64: dts: amlogic: meson-s4: add the USB host
2026-11-06 10:46 ` [PATCH 08/10] arm64: dts: amlogic: meson-s4: add the USB host christian.koever-draxl
2026-11-06 10:55 ` neil.armstrong
@ 2026-11-06 10:59 ` sashiko-bot
1 sibling, 0 replies; 20+ messages in thread
From: sashiko-bot @ 2026-11-06 10:59 UTC (permalink / raw)
To: christian.koever-draxl
Cc: devicetree, linux-amlogic, robh, conor+dt, neil.armstrong
Thank you for your contribution! Sashiko AI review found 3 potential
issues to consider:
- [High] arm64: dts: amlogic: unmatched s4-usb2-phy compatible breaks
USB probe
- [Medium] arm64: dts: amlogic: meson-s4 USB glue and xHCI violate DT
binding
- [Low] arm64: dts: amlogic: meson-s4 USB2 PHY nodes out of address
order
--
commit 52aac76c3162fb981eef1f4f1e554811e324a07e
Author: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
arm64: dts: amlogic: meson-s4: add the USB host
This commit adds the two USB2 PHY nodes and the USB controller node with
its child xHCI host node to the Amlogic Meson S4 SoC device tree.
> diff --git a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> index 8bbd70e52a299..155997649dc3a 100644
> --- a/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> +++ b/arch/arm64/boot/dts/amlogic/meson-s4.dtsi
> @@ -770,6 +770,26 @@ cpu_temp: temperature-sensor@20000 {
> amlogic,secure-monitor = <&sm 1>;
> };
>
> + usb2_phy0: phy@3c000 {
> + compatible = "amlogic,s4-usb2-phy";
> + reg = <0x0 0x3c000 0x0 0x2000>;
> + clocks = <&xtal>;
> + clock-names = "xtal";
> + resets = <&reset RESET_USBPHY20>;
> + reset-names = "phy";
> + #phy-cells = <0>;
> + };
> +
> + usb2_phy1: phy@3e000 {
> + compatible = "amlogic,s4-usb2-phy";
> + reg = <0x0 0x3e000 0x0 0x2000>;
> + clocks = <&xtal>;
> + clock-names = "xtal";
> + resets = <&reset RESET_USBPHY21>;
> + reset-names = "phy";
> + #phy-cells = <0>;
> + };
[Severity: High]
Does "amlogic,s4-usb2-phy" have a matching driver or binding in the kernel,
or does it need a fallback such as "amlogic,g12a-usb2-phy"?
phy_meson_g12a_usb2_of_match[] in drivers/phy/amlogic/phy-meson-g12a-usb2.c
and Documentation/devicetree/bindings/phy/amlogic,g12a-usb2-phy.yaml only
list "amlogic,g12a-usb2-phy" and "amlogic,a1-usb2-phy". Without a matching
driver or fallback compatible on usb2_phy0 and usb2_phy1, no PHY provider
is registered, so dwc3_meson_g12a_probe() -> dwc3_meson_g12a_get_phys() ->
devm_phy_optional_get() returns -EPROBE_DEFER permanently when usb@fe03a000
is enabled, and dtbs_check fails.
> +
> eth_phy: mdio-multiplexer@28000 {
> compatible = "amlogic,g12a-mdio-mux";
> reg = <0x0 0x28000 0x0 0xa4>;
[Severity: Low]
This isn't a bug, but phy@3c000 and phy@3e000 are placed before
mdio-multiplexer@28000 instead of after it in unit-address order under
apb4.
> @@ -988,6 +1008,31 @@ mdio0: mdio {
> };
> };
>
> + usb: usb@fe03a000 {
> + compatible = "amlogic,meson-s4-usb-ctrl",
> + "amlogic,meson-g12a-usb-ctrl";
> + reg = <0x0 0xfe03a000 0x0 0xa0>;
> + interrupts = <GIC_SPI 129 IRQ_TYPE_LEVEL_HIGH>;
> + #address-cells = <2>;
> + #size-cells = <2>;
> + ranges;
> + clocks = <&clkc_periphs CLKID_USB>;
> + resets = <&reset RESET_USBCTRL>;
> + power-domains = <&pwrc PWRC_S4_USB_COMB_ID>;
> + dr_mode = "host";
> + phys = <&usb2_phy0>, <&usb2_phy1>;
> + phy-names = "usb2-phy0", "usb2-phy1";
> + status = "disabled";
> +
> + crg_xhci: usb@fde00000 {
> + compatible = "generic-xhci";
> + reg = <0x0 0xfde00000 0x0 0x100000>;
> + interrupts = <GIC_SPI 130 IRQ_TYPE_LEVEL_HIGH>;
> + clocks = <&clkc_periphs CLKID_USB1_TO_DDR>;
> + status = "okay";
> + };
> + };
[Severity: Medium]
Do the compatible strings on usb@fe03a000 and its child usb@fde00000 match
Documentation/devicetree/bindings/usb/amlogic,meson-g12a-usb-ctrl.yaml and
drivers/usb/dwc3/dwc3-meson-g12a.c?
The binding only allows a single compatible entry from its enum (which does
not include "amlogic,meson-s4-usb-ctrl") and restricts child usb@ nodes to
dwc2.yaml# or snps,dwc3.yaml#, so both nodes fail dtbs_check. In addition,
dwc3_meson_g12a_otg_init() looks up the host child via
dwc3_meson_g12_find_child(dev, "snps,dwc3"), which returns NULL when the
child uses "generic-xhci".
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261106104659.54656-1-christian.koever-draxl@student.uibk.ac.at?part=8
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 10/10] arm64: dts: amlogic: add the Amediatech X98Q
2026-11-06 10:46 ` [PATCH 10/10] arm64: dts: amlogic: add the Amediatech X98Q christian.koever-draxl
@ 2026-11-06 11:00 ` sashiko-bot
0 siblings, 0 replies; 20+ messages in thread
From: sashiko-bot @ 2026-11-06 11:00 UTC (permalink / raw)
To: christian.koever-draxl
Cc: devicetree, linux-amlogic, robh, conor+dt, neil.armstrong
Thank you for your contribution! Sashiko AI review found 5 potential
issues to consider:
- [High] arm64: dts: amlogic: unimplemented amlogic,core-phase-degrees
in x98q sd node
- [Medium] arm64: dts: amlogic: invalid rc-x98q map and wakeup-source on
x98q ir node
- [Medium] arm64: dts: amlogic: unimplemented amlogic,shared-antenna on
x98q bluetooth
- [Medium] arm64: dts: amlogic: x98q enables S4 usb, ge2d, and thermal
without drivers
- [Low] arm64: dts: amlogic: unused sd_3v3 regulator claiming GPIOD_4 in
x98q dts
--
commit 3b50767a39ee59efef6457c4aa95bbf033834748
Author: Christian Stefan Kövér-Draxl <ckoever@outlook.de>
arm64: dts: amlogic: add the Amediatech X98Q
This commit adds the device tree for the Amediatech X98Q TV box based on
the Amlogic S905W2 SoC.
> diff --git a/arch/arm64/boot/dts/amlogic/meson-s4-s905w2-x98q.dts b/arch/arm64/boot/dts/amlogic/meson-s4-s905w2-x98q.dts
> new file mode 100644
> index 0000000000000..388198756a3a2
> --- /dev/null
> +++ b/arch/arm64/boot/dts/amlogic/meson-s4-s905w2-x98q.dts
[ ... ]
> + sd_3v3: regulator-sd-3v3 {
> + compatible = "regulator-fixed";
> + regulator-name = "SD_3V3";
> + regulator-min-microvolt = <3300000>;
> + regulator-max-microvolt = <3300000>;
> + gpio = <&gpio GPIOD_4 GPIO_ACTIVE_LOW>;
> + regulator-always-on;
> + };
[Severity: Low]
Should &sd use &sd_3v3 for vmmc-supply, or is regulator-sd-3v3 unused on
this board?
regulator-sd-3v3 claims GPIOD_4 and drives it low at boot via
regulator-always-on, but &sd below sets both vmmc-supply and vqmmc-supply
to &vddao_3v3, leaving &sd_3v3 unreferenced.
[ ... ]
> +&ir {
> + pinctrl-0 = <&remote_pins>;
> + pinctrl-names = "default";
> + linux,rc-map-name = "rc-x98q";
> + wakeup-source;
> + status = "okay";
> +};
[Severity: Medium]
Are "rc-x98q" and wakeup-source supported on &ir?
"rc-x98q" is not in Documentation/devicetree/bindings/media/rc.yaml or
drivers/media/rc/keymaps/. At probe, rc_prepare_rx_device() falls back to
RC_MAP_EMPTY (RC_PROTO_UNKNOWN) and passes that to
meson_ir_hw_decoder_init(), which returns early without setting
IR_DEC_REG1_ENABLE when RC_PROTO_BIT_NEC is not set, leaving the hardware
IR decoder disabled until reconfigured from userspace.
In addition, Documentation/devicetree/bindings/media/amlogic,meson6-ir.yaml
sets unevaluatedProperties: false and does not allow wakeup-source, and
drivers/media/rc/meson-ir.c does not configure wakeup support and disables
IR_DEC_REG1_ENABLE in meson_ir_suspend().
[ ... ]
> +&sd {
> + pinctrl-0 = <&sdcard_pins>;
> + pinctrl-1 = <&sdcard_clk_gate_pins>;
> + pinctrl-names = "default", "clk-gate";
> + bus-width = <4>;
> + cap-sd-highspeed;
> + /* Fails CRC at 50 MHz with the default 180 degree phase */
> + amlogic,core-phase-degrees = <270>;
> + max-frequency = <50000000>;
[Severity: High]
Does amlogic,core-phase-degrees have any effect in mainline?
Documentation/devicetree/bindings/mmc/amlogic,meson-gx-mmc.yaml sets
unevaluatedProperties: false and does not define
amlogic,core-phase-degrees, so dtbs_check fails. At runtime,
meson_mmc_clk_init() in drivers/mmc/host/meson-gx-mmc.c unconditionally
programs CLK_PHASE_180 and never parses this property, leaving the SD
controller at the 180-degree phase where 50 MHz high-speed transfers fail
with CRC errors.
[ ... ]
> +&uart_a {
> + pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>;
> + pinctrl-names = "default";
> + uart-has-rtscts;
> + status = "okay";
> +
> + /* Bluetooth half of the Amlogic W1 combo chip */
> + bluetooth {
> + compatible = "amlogic,w155s2-bt";
> + clocks = <&sdio_32k>;
> + enable-gpios = <&gpio GPIOX_17 GPIO_ACTIVE_HIGH>;
> + vddio-supply = <&vddio_ao1v8>;
> + firmware-name = "amlogic/aml_w1_bt_uart.bin";
> + amlogic,shared-antenna;
> + };
> +};
[Severity: Medium]
Is amlogic,shared-antenna supported by the binding or driver for
amlogic,w155s2-bt?
Documentation/devicetree/bindings/net/bluetooth/amlogic,w155s2-bt.yaml
sets additionalProperties: false and does not define
amlogic,shared-antenna. In drivers/bluetooth/hci_aml.c, aml_parse_dt()
does not read this property and aml_setup() passes
amldev->aml_dev_data->is_coex (false for data_w155s2) to aml_config_rf(),
configuring AML_RF_ANT_DOUBLE instead of AML_RF_ANT_SINGLE.
[ ... ]
> +&usb {
> + status = "okay";
> +};
> +
> +&usb2_phy0 {
> + status = "okay";
> +};
> +
> +&usb2_phy1 {
> + status = "okay";
> +};
[Severity: Medium]
Can &usb, &ge2d, or GPU thermal throttling probe with the compatibles in
meson-s4.dtsi?
In arch/arm64/boot/dts/amlogic/meson-s4.dtsi, usb2_phy0 and usb2_phy1 use
compatible = "amlogic,s4-usb2-phy" without an "amlogic,g12a-usb2-phy"
fallback, while drivers/phy/amlogic/phy-meson-g12a-usb2.c only matches
"amlogic,g12a-usb2-phy" and "amlogic,a1-usb2-phy", causing
dwc3_meson_g12a_probe() to defer indefinitely in dwc3_meson_g12a_get_phys().
Also, usb2_phy0 and usb2_phy1 are already enabled in meson-s4.dtsi, so the
status overrides here are redundant.
Similarly, &ge2d uses "amlogic,s4-ge2d" without an "amlogic,axg-ge2d"
fallback (drivers/media/platform/amlogic/meson-ge2d/ge2d.c only matches
"amlogic,axg-ge2d"), and cpu_temp uses "amlogic,s4-thermal" without an
"amlogic,t7-thermal" fallback (drivers/thermal/amlogic_thermal.c only
matches "amlogic,t7-thermal"), so neither GE2D nor GPU thermal throttling
binds a driver despite being listed as supported in the commit message.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261106104659.54656-1-christian.koever-draxl@student.uibk.ac.at?part=10
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2026-11-06 11:00 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-11-06 10:46 [PATCH 00/10] arm64: dts: amlogic: S4 SoC additions and the Amediatech X98Q christian.koever-draxl
2026-11-06 10:46 ` [PATCH 01/10] dt-bindings: arm: amlogic: add " christian.koever-draxl
2026-11-06 10:46 ` [PATCH 02/10] arm64: dts: amlogic: meson-s4: describe the CPU caches christian.koever-draxl
2026-11-06 10:52 ` neil.armstrong
2026-11-06 10:46 ` [PATCH 03/10] arm64: dts: amlogic: meson-s4: add the PSCI CPU idle state christian.koever-draxl
2026-11-06 10:54 ` neil.armstrong
2026-11-06 10:46 ` [PATCH 04/10] arm64: dts: amlogic: meson-s4: use the S4 secure monitor compatible christian.koever-draxl
2026-11-06 10:54 ` sashiko-bot
2026-11-06 10:46 ` [PATCH 05/10] arm64: dts: amlogic: meson-s4: add the Mali GPU christian.koever-draxl
2026-11-06 10:46 ` [PATCH 06/10] arm64: dts: amlogic: meson-s4: add the CPU thermal sensor and zone christian.koever-draxl
2026-11-06 10:53 ` sashiko-bot
2026-11-06 10:46 ` [PATCH 07/10] arm64: dts: amlogic: meson-s4: add the GE2D christian.koever-draxl
2026-11-06 10:53 ` sashiko-bot
2026-11-06 10:46 ` [PATCH 08/10] arm64: dts: amlogic: meson-s4: add the USB host christian.koever-draxl
2026-11-06 10:55 ` neil.armstrong
2026-11-06 10:59 ` sashiko-bot
2026-11-06 10:46 ` [PATCH 09/10] arm64: dts: amlogic: meson-s4: add the AO CEC controller christian.koever-draxl
2026-11-06 10:55 ` neil.armstrong
2026-11-06 10:46 ` [PATCH 10/10] arm64: dts: amlogic: add the Amediatech X98Q christian.koever-draxl
2026-11-06 11:00 ` sashiko-bot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®