[Letux-kernel] X1600 / LX16 support - here: UART issue

H. Nikolaus Schaller hns at goldelico.com
Fri Feb 23 09:18:36 CET 2024



> Am 23.02.2024 um 09:12 schrieb H. Nikolaus Schaller <hns at goldelico.com>:
> 
> Bug #1 is that we have to disable the UART nodes in the DTS.
> 
> By accident I found that all UARTs (incl. UART2) can be broken
> by this single line in the DTS:
> 
> &uart0 { status = "disable"; };
> 
> Maybe a bug in "status =" processing?
> 
> Or it has something to do with pinctrl which is set up before
> probing a driver and turned down if probe fails.
> 
> On the other hand there are no pinctrl entries involved.
> 
> Having status = "disable" may also do something differently from
> having no status at all.
> 
> The default from x1600.dtsi is:
> 
> uart0: serial at 10030000 {
> compatible = "ingenic,x1600-uart";
> reg = <0x10030000 0x100>;
> reg-shift = <2>;
> interrupt-parent = <&core_intc>;
> interrupts = <IRQ_UART0>;
> clocks = <&extclk>, <&cgu X1600_CLK_UART0>;
> clock-names = "baud", "module";
> dmas = <&dma X1600_DMA_UART0_TX 0xffffffff>,
>   <&dma X1600_DMA_UART0_RX 0xffffffff>;
> dma-names = "tx", "rx";
> #address-cells = <1>;
> #size-cells = <0>;
> };

I think I understand a little better:

https://elixir.bootlin.com/linux/latest/source/drivers/of/fdt.c#L83

This code means that NO "status" property is the same as "ok" or "okay".

In other words the feature to disable one or more UARTs is broken
and breaks all of them.

And that is what we have tried: disable UART0,1,3 by default.

If we set all of them to "ok" it should also work.

BR,
Nikolaus



More information about the Letux-kernel mailing list