Enable the Display Control Unit (DCU) for the Nuvoton MA35D1 SoC.
This patch adds the DCU node to the SoC dtsi and enables it on
the MA35D1 SOM board.
Signed-off-by: Joey Lu <a0987203069@gmail.com>
---
.../boot/dts/nuvoton/ma35d1-som-256m.dts | 56 +++++++++++++++++++
arch/arm64/boot/dts/nuvoton/ma35d1.dtsi | 14 +++++
2 files changed, 70 insertions(+)
diff --git a/arch/arm64/boot/dts/nuvoton/ma35d1-som-256m.dts b/arch/arm64/boot/dts/nuvoton/ma35d1-som-256m.dts
index f6f20a17e501..e596bb452cc9 100644
--- a/arch/arm64/boot/dts/nuvoton/ma35d1-som-256m.dts
+++ b/arch/arm64/boot/dts/nuvoton/ma35d1-som-256m.dts
@@ -98,6 +98,42 @@ pinctrl_uart16: uart16-pins {
power-source = <1>;
};
};
+
+ dcu {
+ pinctrl_display: display-pins {
+ nuvoton,pins =
+ <6 8 6>, /* VSYNC */
+ <6 9 6>, /* HSYNC */
+ <6 10 6>, /* CLK */
+ <10 4 6>, /* DE */
+ <8 8 6>, /* D0 - D23 */
+ <8 9 6>,
+ <8 10 6>,
+ <8 11 6>,
+ <8 12 6>,
+ <8 13 6>,
+ <8 14 6>,
+ <8 15 6>,
+ <7 0 6>,
+ <7 1 6>,
+ <7 2 6>,
+ <7 3 6>,
+ <7 4 6>,
+ <7 5 6>,
+ <7 6 6>,
+ <7 7 6>,
+ <2 12 6>,
+ <2 13 6>,
+ <2 14 6>,
+ <2 15 6>,
+ <7 12 6>,
+ <7 13 6>,
+ <7 14 6>,
+ <7 15 6>;
+ bias-disable;
+ power-source = <1>;
+ };
+ };
};
&uart0 {
@@ -129,3 +165,23 @@ &uart16 {
pinctrl-0 = <&pinctrl_uart16>;
status = "okay";
};
+
+&panel {
+ port {
+ panel_in: endpoint@0 {
+ remote-endpoint = <&dpi_out>;
+ };
+ };
+};
+
+&display {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_display>;
+ status = "okay";
+
+ port {
+ dpi_out: endpoint@0 {
+ remote-endpoint = <&panel_in>;
+ };
+ };
+};
diff --git a/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi b/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi
index e51b98f5bdce..7d9d077f12b2 100644
--- a/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi
+++ b/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi
@@ -379,5 +379,19 @@ uart16: serial@40880000 {
clocks = <&clk UART16_GATE>;
status = "disabled";
};
+
+ panel: panel {
+ compatible = "panel-dpi";
+ };
+
+ display: display@40260000 {
+ compatible = "nuvoton,ma35d1-dcu";
+ reg = <0x0 0x40260000 0x0 0x2000>;
+ interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&clk DCU_GATE>, <&clk DCUP_DIV>;
+ clock-names = "dcu_gate", "dcup_div";
+ resets = <&sys MA35D1_RESET_DISP>;
+ status = "disabled";
+ };
};
};
--
2.43.0
On Thu, Jan 29, 2026 at 12:05:31PM +0800, Joey Lu wrote:
> &uart0 {
> @@ -129,3 +165,23 @@ &uart16 {
> pinctrl-0 = <&pinctrl_uart16>;
> status = "okay";
> };
> +
> +&panel {
> + port {
> + panel_in: endpoint@0 {
> + remote-endpoint = <&dpi_out>;
> + };
> + };
> +};
> +
> +&display {
What sort of ordering rule is followed in Nuvoton? Why is it different
than DTS coding style? Why do you choose other style?
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_display>;
> + status = "okay";
> +
> + port {
> + dpi_out: endpoint@0 {
> + remote-endpoint = <&panel_in>;
> + };
> + };
> +};
> diff --git a/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi b/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi
> index e51b98f5bdce..7d9d077f12b2 100644
> --- a/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi
> +++ b/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi
> @@ -379,5 +379,19 @@ uart16: serial@40880000 {
> clocks = <&clk UART16_GATE>;
> status = "disabled";
> };
> +
> + panel: panel {
No, there is no way your SoC has a panel.
Don't add fake stuff to your DTS.
Best regards,
Krzysztof
On 2/5/2026 9:23 PM, Krzysztof Kozlowski wrote:
> On Thu, Jan 29, 2026 at 12:05:31PM +0800, Joey Lu wrote:
>> &uart0 {
>> @@ -129,3 +165,23 @@ &uart16 {
>> pinctrl-0 = <&pinctrl_uart16>;
>> status = "okay";
>> };
>> +
>> +&panel {
>> + port {
>> + panel_in: endpoint@0 {
>> + remote-endpoint = <&dpi_out>;
>> + };
>> + };
>> +};
>> +
>> +&display {
> What sort of ordering rule is followed in Nuvoton? Why is it different
> than DTS coding style? Why do you choose other style?
>
>> + pinctrl-names = "default";
>> + pinctrl-0 = <&pinctrl_display>;
>> + status = "okay";
>> +
>> + port {
>> + dpi_out: endpoint@0 {
>> + remote-endpoint = <&panel_in>;
>> + };
>> + };
>> +};
>> diff --git a/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi b/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi
>> index e51b98f5bdce..7d9d077f12b2 100644
>> --- a/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi
>> +++ b/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi
>> @@ -379,5 +379,19 @@ uart16: serial@40880000 {
>> clocks = <&clk UART16_GATE>;
>> status = "disabled";
>> };
>> +
>> + panel: panel {
> No, there is no way your SoC has a panel.
>
> Don't add fake stuff to your DTS.
>
> Best regards,
> Krzysztof
I'll move panel nodes out of dtsi into board dts.
Joey
On 06/02/2026 08:12, Joey Lu wrote:
>
> On 2/5/2026 9:23 PM, Krzysztof Kozlowski wrote:
>> On Thu, Jan 29, 2026 at 12:05:31PM +0800, Joey Lu wrote:
>>> &uart0 {
>>> @@ -129,3 +165,23 @@ &uart16 {
>>> pinctrl-0 = <&pinctrl_uart16>;
>>> status = "okay";
>>> };
>>> +
>>> +&panel {
>>> + port {
>>> + panel_in: endpoint@0 {
>>> + remote-endpoint = <&dpi_out>;
>>> + };
>>> + };
>>> +};
>>> +
>>> +&display {
>> What sort of ordering rule is followed in Nuvoton? Why is it different
>> than DTS coding style? Why do you choose other style?
>>
>>> + pinctrl-names = "default";
>>> + pinctrl-0 = <&pinctrl_display>;
>>> + status = "okay";
>>> +
>>> + port {
>>> + dpi_out: endpoint@0 {
>>> + remote-endpoint = <&panel_in>;
>>> + };
>>> + };
>>> +};
>>> diff --git a/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi b/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi
>>> index e51b98f5bdce..7d9d077f12b2 100644
>>> --- a/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi
>>> +++ b/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi
>>> @@ -379,5 +379,19 @@ uart16: serial@40880000 {
>>> clocks = <&clk UART16_GATE>;
>>> status = "disabled";
>>> };
>>> +
>>> + panel: panel {
>> No, there is no way your SoC has a panel.
>>
>> Don't add fake stuff to your DTS.
>>
>> Best regards,
>> Krzysztof
>
> I'll move panel nodes out of dtsi into board dts.
You did not respond to several comments in total, it's fine, but if you
just ignored them, then it would not be fine.
Best regards,
Krzysztof
On 2/6/2026 4:56 PM, Krzysztof Kozlowski wrote:
> On 06/02/2026 08:12, Joey Lu wrote:
>> On 2/5/2026 9:23 PM, Krzysztof Kozlowski wrote:
>>> On Thu, Jan 29, 2026 at 12:05:31PM +0800, Joey Lu wrote:
>>>> &uart0 {
>>>> @@ -129,3 +165,23 @@ &uart16 {
>>>> pinctrl-0 = <&pinctrl_uart16>;
>>>> status = "okay";
>>>> };
>>>> +
>>>> +&panel {
>>>> + port {
>>>> + panel_in: endpoint@0 {
>>>> + remote-endpoint = <&dpi_out>;
>>>> + };
>>>> + };
>>>> +};
>>>> +
>>>> +&display {
>>> What sort of ordering rule is followed in Nuvoton? Why is it different
>>> than DTS coding style? Why do you choose other style?
>>>
>>>> + pinctrl-names = "default";
>>>> + pinctrl-0 = <&pinctrl_display>;
>>>> + status = "okay";
>>>> +
>>>> + port {
>>>> + dpi_out: endpoint@0 {
>>>> + remote-endpoint = <&panel_in>;
>>>> + };
>>>> + };
>>>> +};
>>>> diff --git a/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi b/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi
>>>> index e51b98f5bdce..7d9d077f12b2 100644
>>>> --- a/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi
>>>> +++ b/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi
>>>> @@ -379,5 +379,19 @@ uart16: serial@40880000 {
>>>> clocks = <&clk UART16_GATE>;
>>>> status = "disabled";
>>>> };
>>>> +
>>>> + panel: panel {
>>> No, there is no way your SoC has a panel.
>>>
>>> Don't add fake stuff to your DTS.
>>>
>>> Best regards,
>>> Krzysztof
>> I'll move panel nodes out of dtsi into board dts.
> You did not respond to several comments in total, it's fine, but if you
> just ignored them, then it would not be fine.
>
>
> Best regards,
> Krzysztof
Thanks for the review. I've gone through all comments carefully.
Some points were addressed directly in the next revision,so I grouped a
few replies together since the original code will no longer appear after
the update.
I will also restructure the DTS so the panel is defined under the root
node to follow the standard hierarchy and ordering conventions.
For remaining items that need discussion, I'll reply inline one by one.
Joey
© 2016 - 2026 Red Hat, Inc.