I inserted some printks in the sun4i_tcon.c, sun8i-tcon-top.c and 
sun6i_mipi_dsi.c (because there are not many debug prints with DRM.debug)
[    0.968820] sun4i_tcon_probe
[    0.968890] sun4i_tcon_probe:hasChannel0
[    0.969635] sun4i_tcon_probe
[    0.976753] sun8i_tcon_top_probe
[    2.391061] sun6i_dsi_probe
[    2.394217] sun6i-mipi-dsi 5450000.dsi: supply vcc-dsi not found, using 
dummy regulator
[    2.403074] sun6i-mipi-dsi 5450000.dsi: Couldn't get the DSI mod clock

Might have to look more, but it seems the the tcon and tcon_top are probed, 
then when dsi is probed later, it fails. Can it be that the clock is not 
available yet, because tcon and tcon_top are not bound yet?
I saw that this dependencies where a problem with other sunxi mipi 
implementations. Had been fixed though in 2019. 
So it might be that the clocks are fine after all. But it fails for another 
reason.

Jakob L schrieb am Sonntag, 31. Dezember 2023 um 17:01:46 UTC+1:

> Indeed,
>
> Had not looked at the clock print yet, but I saw the same thing in the 
> registers yesterday. TCON_TOP is not configured and presumably not enabled. 
> Neither is the DPHY.
> The above clock print was with the only patch that did not give errors.
> Option1 A 
> @@ -655,7 +655,7 @@ dsi: dsi@5450000 {
>
>   reg = <0x5450000 0x1000>;
>   interrupts = <SOC_PERIPHERAL_IRQ(92) IRQ_TYPE_LEVEL_HIGH>;
>   clocks = <&ccu CLK_BUS_MIPI_DSI>,
> -  <&tcon_top CLK_TCON_TOP_DSI>;
> +  <&ccu CLK_MIPI_DSI>;
>
> So tcon-top-dsi not beeing prepared and enabled is ok. 
>
> But looking at the registers from uboot and sun8i_tcon_top.h it is clear 
> that TCON_TOP_TCON_DSI_GATE is beeing set. So some clock must come from 
> TCON_TOP
> Also TCON_TOP_PORT_SEL_REG is set to 0x00000020 (kernel 0)
> #define TCON_TOP_PORT_DE0_MSK GENMASK(1, 0)
> #define TCON_TOP_PORT_DE1_MSK GENMASK(5, 4)
>
> So i looked again at what you found with Option 2 (index of TCON_TOP 
> clocks). In my kernel 6.5.7 its already fixed by Samuel Holland.
> https://lore.kernel.org/lkml/20220412042807.47519-13
> It is not needed anymore once you use a newer kernel.
>
> It has to be something on the init code for DPHY and TCON_TOP as those 
> registers remain untouched by the kernel as it is now. 
> Or it is because the clock is wrong, and thus the *DSI_BGR_REG 0x02001B4C 
> *DSI Clock is masked, resulting in failed writes to some registers.
> Might not be as easy as i hoped some days ago...
>
> Have a nice new years eve and a good start into the new one!
> Jakob
> K. James schrieb am Sonntag, 31. Dezember 2023 um 02:28:41 UTC+1:
>
>> Jakob,
>>
>> Regarding your clock, I don't know which DTS configuration this is from 
>> however:
>>
>>
>>                                 enable  prepare  protect                  
>>                          duty    hardware
>>    clock                    count    count    count        rate          
>>    accuracy  phase    cycle      enable
>>
>> -------------------------------------------------------------------------------------------------------
>> .....
>> tcon-top-dsi                0           0            0       216000000   
>>        0              0        50000         N
>> .....
>>
>> bus-mipi-dsi               0            2           0       200000000    
>>       0               0       50000         N
>> .....
>>
>> If the DSI device/phy mod bus is supposed to be tcon-top-dsi (unlikely 
>> due to the prepare count) - it's not being enabled/set by the tcon top 
>> driver. But maybe you have the mod bus being set from a different clock in 
>> this config?
>>
>> If the DSI device/phy supposed to be using the bus-mipi-dsi (likely as 
>> this is the default in the mainline t113/d1s device tree) then its being 
>> prepared, but not enabled, which is maybe odd? certainly a prepare count of 
>> two, without an enable count of two indicates something funny, like the CCU 
>> is not starting the bus-mipi-dsi clock like it should when its called?
>>
>> This could be a thread to pull..
>> On Sunday 31 December 2023 at 8:23:46 am UTC+10:30 jakob...@gmail.com 
>> wrote:
>>
>>> Hello James,
>>>
>>> yes indeed. I also was pleasantly surprised to see your question and 
>>> that it has replies. Actually i started with T113 about 6 months ago. But 
>>> then paused till last week.
>>> I feel it is not far off and its a nice project to learn.
>>>
>>> Since the patches from Samuel Holland mention that its a similar DSI 
>>> hardware (40nm version) as the A64, i tried to add a no mod-clock patch. It 
>>> removes the error, but it wont work.
>>>
>>> And according to the User Manual T113 does need a module clock and it 
>>> has to be started after the data clock. Otherwise that Manual is horrible 
>>> and thin in DSI.
>>> As far as i understand page 57 dsi module clock can be hosc, peripll1x, 
>>> video0pll2x, video1pll2x, audio1pll_div2 (this matches the registers from 
>>> DSI_CLK_REG). 
>>> In typical pll application PLL_PERI(2X)  is suggested for DSI. Allwinner 
>>> uboot sets the source in DSI_CLK_REG to 001 (PLL_PERI(1x) and the Factor to 
>>> 0011 (4)
>>>
>>> I think the routing through TCON TOP is something that is done in the 
>>> kernel to make it fit into the scheme, but in hardware its not relevant?
>>>
>>> This is the output of /sys/kernel/debug/clk/clk_summary (shortened)
>>>                                  enable  prepare  protect               
>>>                  duty  hardware
>>>    clock                          count    count    count        rate   
>>> accuracy phase  cycle    enable
>>>
>>> -------------------------------------------------------------------------------------------------------
>>>  iosc                                 1        1        0    16000000 
>>>  300000000     0  50000         Y
>>>     iosc-32k                          1        1        0       31250 
>>>  300000000     0  50000         Y
>>>        osc32k                         1        1        0       31250 
>>>  300000000     0  50000         Y
>>>           hdmi-cec                    0        0        0       31250 
>>>  300000000     0  50000         N
>>>           r-ir-rx                     0        0        0       31250 
>>>  300000000     0  50000         N
>>>           rtc-32k                     1        1        0       31250 
>>>  300000000     0  50000         Y
>>>           osc32k-fanout               0        0        0       31250 
>>>  300000000     0  50000         N
>>>  dcxo                                10       10        2    24000000   
>>>        0     0  50000         Y
>>>       pll-ve                            0        0        0   432000000 
>>>          0     0  50000         N
>>>        ve                             0        0        0   432000000   
>>>        0     0  50000         N
>>>     pll-video1-4x                     0        0        0  1188000000   
>>>        0     0  50000         N
>>>        pll-video1                     0        0        0   297000000   
>>>        0     0  50000         Y
>>>        pll-video1-2x                  0        0        0   594000000   
>>>        0     0  50000         Y
>>>     pll-video0-4x                     2        2        1   864000000   
>>>        0     0  50000         Y
>>>        de                             3        3        0   216000000   
>>>        0     0  50000         Y
>>>           wb-div                      0        0        0   216000000   
>>>        0     0  50000         Y
>>>              wb                       0        0        0   216000000   
>>>        0     0  50000         N
>>>           mixer1-div                  1        1        0   216000000   
>>>        0     0  50000         Y
>>>              mixer1                   1        1        0   216000000   
>>>        0     0  50000         Y
>>>           mixer0-div                  1        1        0   216000000   
>>>        0     0  50000         Y
>>>              mixer0                   1        1        0   216000000   
>>>        0     0  50000         Y
>>>        pll-video0                     1        1        1   216000000   
>>>        0     0  50000         Y
>>>           fanout-27M                  0        0        0   216000000   
>>>        0     0  50000         N
>>>           tve                         0        0        0   216000000   
>>>        0     0  50000         N
>>>           tcon-tv                     0        0        0   216000000   
>>>        0     0  50000         N
>>>              tcon-top-tv0             0        0        0   216000000   
>>>        0     0  50000         N
>>>           tcon-lcd0                   2        2        1   216000000   
>>>        0     0  50000         Y
>>>              tcon-pixel-clock         1        1        1    54000000   
>>>        0     0  50000         Y
>>>              tcon-top-dsi             0        0        0   216000000   
>>>        0     0  50000         N
>>>        pll-video0-2x                  0        0        0   432000000   
>>>        0     0  50000         Y
>>>     pll-periph0-4x                    1        1        1  2400000000   
>>>        0     0  50000         Y
>>>        pll-periph0-800M               0        0        0   800000000   
>>>        0     0  50000         Y
>>>        pll-periph0-2x                 1        1        1  1200000000   
>>>        0     0  50000         Y
>>>           fanout-32k                  0        0        0       32768   
>>>        0     0  50000         N
>>>              fanout2                  0        0        0       32768   
>>>        0     0  50000         N
>>>              fanout1                  0        0        0       32768   
>>>        0     0  50000         N
>>>              fanout0                  0        0        0       32768   
>>>        0     0  50000         N
>>>           fanout-16M                  0        0        0    16000000   
>>>        0     0  50000         N
>>>           csi-top                     0        0        0  1200000000   
>>>        0     0  50000         N
>>>           hdmi-cec-32k                0        0        0       32768   
>>>        0     0  50000         N
>>>           ce                          0        0        0   300000000   
>>>        0     0  50000         N
>>>           g2d                         0        0        0  1200000000   
>>>        0     0  50000         N
>>>           di                          0        0        0  1200000000   
>>>        0     0  50000         N
>>>           pll-periph0-div3            0        0        0   200000000   
>>>        0     0  50000         Y
>>>           pll-periph0                 5        5        1   600000000   
>>>        0     0  50000         Y
>>>              mmc0                     0        0        0    50000000   
>>>        0     0  50000         N
>>>              mipi-dsi                 2        2        1   150000000   
>>>        0     0  50000         Y
>>>              fanout-25M               0        0        0    25000000   
>>>        0     0  50000         N
>>>              usb-ohci1                2        2        0    12000000   
>>>        0     0  50000         Y
>>>              usb-ohci0                2        2        0    12000000   
>>>        0     0  50000         Y
>>>              spdif-rx                 0        0        0   600000000   
>>>        0     0  50000         N
>>>              emac-25M                 0        0        0    25000000   
>>>        0     0  50000         N
>>>              apb0                     1        1        0   100000000   
>>>        0     0  50000         Y
>>>                 fanout-pclk           0        0        0   100000000   
>>>        0     0  50000         N
>>>                 bus-tzma              0        0        0   100000000   
>>>        0     0  50000         N
>>>                 bus-tpadc             0        0        0   100000000   
>>>        0     0  50000         N
>>>                 bus-lradc             0        0        0   100000000   
>>>        0     0  50000         N
>>>                 bus-audio             0        0        0   100000000   
>>>        0     0  50000         N
>>>                 bus-dmic              0        0        0   100000000   
>>>        0     0  50000         N
>>>                 bus-spdif             0        0        0   100000000   
>>>        0     0  50000         N
>>>                 bus-i2s2              0        0        0   100000000   
>>>        0     0  50000         N
>>>                 bus-i2s1              0        0        0   100000000   
>>>        0     0  50000         N
>>>                 bus-i2s0              0        0        0   100000000   
>>>        0     0  50000         N
>>>                 bus-ths               0        0        0   100000000   
>>>        0     0  50000         N
>>>                 bus-gpadc             0        0        0   100000000   
>>>        0     0  50000         N
>>>                 bus-ir-tx             0        0        0   100000000   
>>>        0     0  50000         N
>>>                 bus-iommu             0        0        0   100000000   
>>>        0     0  50000         N
>>>                 bus-pwm               0        0        0   100000000   
>>>        0     0  50000         N
>>>              psi-ahb                 13       14        0   200000000   
>>>        0     0  50000         Y
>>>                 bus-riscv-cfg         1        1        0   200000000   
>>>        0     0  50000         Y
>>>                 bus-dsp-cfg           0        0        0   200000000   
>>>        0     0  50000         N
>>>                 bus-csi               0        0        0   200000000   
>>>        0     0  50000         N
>>>                 bus-ledc              0        0        0   200000000   
>>>        0     0  50000         N
>>>                 bus-tvd               0        0        0   200000000   
>>>        0     0  50000         N
>>>                 bus-tvd-top           0        0        0   200000000   
>>>        0     0  50000         N
>>>                 bus-tve               0        0        0   200000000   
>>>        0     0  50000         N
>>>                 bus-tve-top           0        0        0   200000000   
>>>        0     0  50000         N
>>>                 bus-tcon-tv           1        1        0   200000000   
>>>        0     0  50000         Y
>>>                 bus-tcon-lcd0         1        1        0   200000000   
>>>        0     0  50000         Y
>>>                 bus-mipi-dsi          0        2        0   200000000   
>>>        0     0  50000         N
>>>                 bus-hdmi              0        0        0   200000000   
>>>        0     0  50000         N
>>>                 bus-dpss-top          1        1        0   200000000   
>>>        0     0  50000         Y
>>>                 bus-otg               1        1        0   200000000   
>>>        0     0  50000         Y
>>>                 bus-ehci1             1        1        0   200000000   
>>>        0     0  50000         Y
>>>                 bus-ehci0             1        1        0   200000000   
>>>        0     0  50000         Y
>>>                 bus-ohci1             2        2        0   200000000   
>>>        0     0  50000         Y
>>>                 bus-ohci0             2        2        0   200000000   
>>>        0     0  50000         Y
>>>                 bus-emac              1        1        0   200000000   
>>>        0     0  50000         Y
>>>                 bus-spi1              0        0        0   200000000   
>>>        0     0  50000         N
>>>                 bus-spi0              0        0        0   200000000   
>>>        0     0  50000         N
>>>                 bus-mmc2              0        0        0   200000000   
>>>        0     0  50000         N
>>>                 bus-mmc1              0        0        0   200000000   
>>>        0     0  50000         N
>>>                 bus-mmc0              0        0        0   200000000   
>>>        0     0  50000         N
>>>                 bus-dram              1        1        0   200000000   
>>>        0     0  50000         Y
>>>                 bus-dbg               0        0        0   200000000   
>>>        0     0  50000         N
>>>                 bus-hstimer           0        0        0   200000000   
>>>        0     0  50000         N
>>>                 bus-spinlock          0        0        0   200000000   
>>>        0     0  50000         N
>>>                 bus-msgbox2           0        0        0   200000000   
>>>        0     0  50000         N
>>>                 bus-msgbox1           0        0        0   200000000   
>>>        0     0  50000         N
>>>                 bus-msgbox0           0        0        0   200000000   
>>>        0     0  50000         N
>>>                 bus-dma               1        1        0   200000000   
>>>        0     0  50000         Y
>>>                 bus-ve                0        0        0   200000000   
>>>        0     0  50000         N
>>>                 bus-ce                0        0        0   200000000   
>>>        0     0  50000         N
>>>                 bus-g2d               0        0        0   200000000   
>>>        0     0  50000         N
>>>                 bus-di                0        0        0   200000000   
>>>        0     0  50000         N
>>>                 bus-de                3        3        0   200000000   
>>>        0     0  50000         Y
>>>                    bus-wb             0        0        0   200000000   
>>>        0     0  50000         N
>>>                    bus-mixer1         1        1        0   200000000   
>>>        0     0  50000         Y
>>>                    bus-mixer0         1        1        0   200000000   
>>>        0     0  50000         Y
>>>
>>>
>>> I have pulled a register overview from the working uboot config. Will 
>>> try to find some differences and keep you posted.
>>> K. James schrieb am Samstag, 30. Dezember 2023 um 08:05:56 UTC+1:
>>>
>>>> Hey Jakob,
>>>>
>>>> Ok, nice to know there is someone else working to solve the same 
>>>> problem, I saw some other guys having similar issues on the IRC channel.
>>>>
>>>> Shame it was not something obvious like clock index didn't solve it 
>>>> straight away, but Option 1A seems like it could be part of the solution - 
>>>> at least it was init without error
>>>>
>>>> Pinctrl looks ok too, I don't think it should matter if it's under the 
>>>> dsi, dphy or tcon node - and no pinctrl assertion errors I presume?
>>>> but if you have a chance to scope the lanes might give us some 
>>>> indication if we are anything looking correct with the working clock 
>>>> config.
>>>>
>>>> Worth checking /sys/kernel/debug/clk/clk_summary (with debugfs mounted) 
>>>> to see if we can identify the clock sources
>>>>
>>>> I don't think the tcon print out any debug messages at the default 
>>>> level, maybe increase the console loglevel and pastebin your full dmesg?
>>>>
>>>>
>>>> On Sat, 30 Dec 2023 at 16:42, Jakob L <jakob...@gmail.com> wrote:
>>>>
>>>>> Hello James and Andrew,
>>>>>
>>>>> i was recently also tryting to get mipi dsi to work on T113-S3 - with 
>>>>> the same error.
>>>>> These days i was going to compare register setting between mainline 
>>>>> kernel and bsp u-boot. 
>>>>> But this here came early and i was able to try the options.
>>>>> The LCD i use works on A64 and also works with these timings on 
>>>>> allwinner kernel on my T113 board.
>>>>> On T113 the Low power mode of DSI works - i can send the init code. 
>>>>> Verified that with oscilloscope and test patterns on LCD. 
>>>>> Then the lanes are dead and do not have the right level afair.
>>>>>
>>>>> I used Kernel 6.5.7. DRM_SUN8I_TCON_TOP is enabled
>>>>> With MangoPi dts as base and the following nodes:
>>>>>
>>>>> +&de {
>>>>> + status = "okay";
>>>>> +};
>>>>> +
>>>>> +&dsi {
>>>>> + pinctrl-0 = <&dsi_4lane_pins>;
>>>>> + pinctrl-names = "default";
>>>>> + status = "okay";
>>>>> +
>>>>> +        panel: panel@0 {
>>>>> + reg = <0>;
>>>>> + compatible = "jnj,7i";
>>>>> + pinctrl-names = "default";
>>>>> + reset-gpios = <&pio 3 20 GPIO_ACTIVE_HIGH>; 
>>>>> +
>>>>> + // pinctrl-0 = <&panel_pin>;
>>>>> + 
>>>>> + port {
>>>>> +   panel_in: endpoint {
>>>>> +   remote-endpoint = <&tcon_lcd0_out_dsi>;
>>>>> +   };
>>>>> + };
>>>>> +
>>>>> +         };
>>>>> +};
>>>>> +
>>>>> +&dphy {
>>>>> + status = "okay";
>>>>> +};
>>>>>
>>>>> Option2 No Luck 
>>>>> @@ -655,7 +655,7 @@ dsi: dsi@5450000 {
>>>>>   reg = <0x5450000 0x1000>;
>>>>>   interrupts = <SOC_PERIPHERAL_IRQ(92) IRQ_TYPE_LEVEL_HIGH>;
>>>>>   clocks = <&ccu CLK_BUS_MIPI_DSI>,
>>>>> -  <&tcon_top CLK_TCON_TOP_DSI>;
>>>>> +  <&tcon_top 1>;
>>>>>
>>>>> I had a feeling option 2 has something to do with it. But the patched 
>>>>> kernel shows the same error.
>>>>> sun6i-mipi-dsi 5450000.dsi: Couldn't get the DSI mod clock
>>>>>
>>>>> Option1 A 
>>>>> @@ -655,7 +655,7 @@ dsi: dsi@5450000 {
>>>>>   reg = <0x5450000 0x1000>;
>>>>>   interrupts = <SOC_PERIPHERAL_IRQ(92) IRQ_TYPE_LEVEL_HIGH>;
>>>>>   clocks = <&ccu CLK_BUS_MIPI_DSI>,
>>>>> -  <&tcon_top CLK_TCON_TOP_DSI>;
>>>>> +  <&ccu CLK_MIPI_DSI>;
>>>>>
>>>>> With this patch i am no longer getting the modclock error. But i am 
>>>>> not getting an image either.
>>>>> Unfortunatly i do not have my oscilloscope with me. So i cannot check 
>>>>> if there is a signal, but i guess not. 
>>>>>
>>>>> Option1 B 
>>>>> @@ -675,7 +675,7 @@ dphy: phy@5451000 {
>>>>>   reg = <0x5451000 0x1000>;
>>>>>   interrupts = <SOC_PERIPHERAL_IRQ(92) IRQ_TYPE_LEVEL_HIGH>;
>>>>>   clocks = <&ccu CLK_BUS_MIPI_DSI>,
>>>>> -  <&ccu CLK_MIPI_DSI>;
>>>>> +  <&tcon_top CLK_TCON_TOP_DSI>;
>>>>>
>>>>> This is not ok either. 
>>>>> sun6i-mipi-dphy 5451000.phy: Couldn't get the DPHY mod clock
>>>>> sun6i-mipi-dsi 5450000.dsi: Couldn't get the DSI mod clock 
>>>>>
>>>>>
>>>>> Ultimatly i tested to use Option 2 with Option 1. So both DSI and PHY 
>>>>> get the modclock from top, but with the right index.
>>>>> @@ -655,7 +655,7 @@ dsi: dsi@5450000 {
>>>>>   reg = <0x5450000 0x1000>;
>>>>>   interrupts = <SOC_PERIPHERAL_IRQ(92) IRQ_TYPE_LEVEL_HIGH>;
>>>>>   clocks = <&ccu CLK_BUS_MIPI_DSI>,
>>>>> -  <&tcon_top CLK_TCON_TOP_DSI>;
>>>>> +  <&tcon_top 1>;
>>>>>   clock-names = "bus", "mod";
>>>>>   resets = <&ccu RST_BUS_MIPI_DSI>;
>>>>>   phys = <&dphy>;
>>>>> @@ -675,7 +675,7 @@ dphy: phy@5451000 {
>>>>>   reg = <0x5451000 0x1000>;
>>>>>   interrupts = <SOC_PERIPHERAL_IRQ(92) IRQ_TYPE_LEVEL_HIGH>;
>>>>>   clocks = <&ccu CLK_BUS_MIPI_DSI>,
>>>>> -  <&ccu CLK_MIPI_DSI>;
>>>>> +  <&tcon_top 1>;
>>>>>   clock-names = "bus", "mod";
>>>>>   resets = <&ccu RST_BUS_MIPI_DSI>;
>>>>>   #phy-cells = <0>;
>>>>>
>>>>> sun6i-mipi-dphy 5451000.phy: Couldn't get the DPHY mod clock
>>>>> sun6i-mipi-dsi 5450000.dsi: Couldn't get the DSI mod clock
>>>>>
>>>>> So all options are not working. I will check some more tomorrow. If 
>>>>> you have another idea - i would be happy to test.,
>>>>>
>>>>> All the best
>>>>> Jakob
>>>>> K. James schrieb am Freitag, 29. Dezember 2023 um 03:48:37 UTC+1:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> Apologies for the bad etiquette - I didn't realise the copy paste 
>>>>>> from bootlin would put so much HTML. I will strip the formatting from my 
>>>>>> messages in the future.
>>>>>> I am away from my desk and devkit for a few days, but I think I could 
>>>>>> have narrowed it down to two issues:
>>>>>>
>>>>>> 1) Clock is wrong source - according to the device tree the mod clock 
>>>>>> for the DSI interface is from TCON_TOP as you mention, and from the 
>>>>>> patchset "[PATCH v2 1/4] dt-bindings: display: sun6i-dsi: Fix clock 
>>>>>> conditional"
>>>>>> Samuel makes the following point: "the module clock routes through 
>>>>>> the TCON TOP".
>>>>>>
>>>>>> the device tree has the following:
>>>>>>
>>>>>> dsi: dsi@5450000 {
>>>>>> compatible = "allwinner,sun20i-d1-mipi-dsi",
>>>>>> "allwinner,sun50i-a100-mipi-dsi";
>>>>>> reg = <0x5450000 0x1000>;
>>>>>> interrupts = <SOC_PERIPHERAL_IRQ(92) IRQ_TYPE_LEVEL_HIGH>;
>>>>>> clocks = <&ccu CLK_BUS_MIPI_DSI>,
>>>>>> <&tcon_top CLK_TCON_TOP_DSI>;
>>>>>> clock-names = "bus", "mod";
>>>>>> resets = <&ccu RST_BUS_MIPI_DSI>;
>>>>>> phys = <&dphy>;
>>>>>> phy-names = "dphy";
>>>>>> status = "disabled";
>>>>>> };
>>>>>>
>>>>>> dphy: phy@5451000 {
>>>>>> compatible = "allwinner,sun20i-d1-mipi-dphy",
>>>>>> "allwinner,sun50i-a100-mipi-dphy";
>>>>>> reg = <0x5451000 0x1000>;
>>>>>> interrupts = <SOC_PERIPHERAL_IRQ(92) IRQ_TYPE_LEVEL_HIGH>;
>>>>>> clocks = <&ccu CLK_BUS_MIPI_DSI>,
>>>>>> <&ccu CLK_MIPI_DSI>;
>>>>>> clock-names = "bus", "mod";
>>>>>> resets = <&ccu RST_BUS_MIPI_DSI>;
>>>>>> #phy-cells = <0>;
>>>>>> };
>>>>>>
>>>>>> In this case the DPHY is getting its clock from the CCU node 
>>>>>> "CLK_MIPI_DSI" instead of TCON TOP, so one of the following cases could 
>>>>>> be 
>>>>>> true:
>>>>>>
>>>>>> > The DSI node should get its mod clock from CCU CLK_MIPI_DSI and the 
>>>>>> TCON_TOP CLK_TCON_TOP_DSI clock source is incorrect, or
>>>>>> > The DPHY should get its mod clock from TCON_TOP CLK_TCON_TOP_DSI 
>>>>>> and the ccu CLK_MIPI_DSI source is incorrect, or
>>>>>> > These clock sources are correct and there is some other issue (such 
>>>>>> as below).
>>>>>>
>>>>>>
>>>>>> 2) alternatively, it could be just a quirk of the D1/T113 TCON TOP 
>>>>>> setup.
>>>>>>
>>>>>> I also had found this in reviewing the devicetree for this board - 
>>>>>> the patchset "[PATCH v2 00/14] drm/sun4i: Allwinner D1 Display Engine 
>>>>>> 2.0 
>>>>>> Support" includes the TCON Top Support the following note:
>>>>>>
>>>>>> [PATCH v2 12/14] drm/sun4i: Add support for D1 TCON TOP
>>>>>> "D1 has a TCON TOP with TCON TV0 and DSI, but no TCON TV1. This puts 
>>>>>> theDSI clock name at index 1 in clock-output-names. Support this by only 
>>>>>> incrementing the index for clocks that are actually supported."
>>>>>>
>>>>>>
>>>>>> But reviewing the DSI node:
>>>>>>
>>>>>>
>>>>>> dsi: dsi@5450000 {
>>>>>> compatible = "allwinner,sun20i-d1-mipi-dsi",
>>>>>> "allwinner,sun50i-a100-mipi-dsi";
>>>>>> reg = <0x5450000 0x1000>;
>>>>>> interrupts = <SOC_PERIPHERAL_IRQ(92) IRQ_TYPE_LEVEL_HIGH>;
>>>>>> clocks = <&ccu CLK_BUS_MIPI_DSI>,
>>>>>> <&tcon_top CLK_TCON_TOP_DSI>;
>>>>>> clock-names = "bus", "mod";
>>>>>> resets = <&ccu RST_BUS_MIPI_DSI>;
>>>>>> phys = <&dphy>;
>>>>>> phy-names = "dphy";
>>>>>> status = "disabled";
>>>>>>
>>>>>>
>>>>>> the definition of CLK_TCON_TOP_DSI comes from sun8i-tcon-top.h:
>>>>>>
>>>>>>
>>>>>> /* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
>>>>>> /* Copyright (C) 2018 Jernej Skrabec <jernej....@siol.net> */
>>>>>>
>>>>>> #ifndef _DT_BINDINGS_CLOCK_SUN8I_TCON_TOP_H_
>>>>>> #define _DT_BINDINGS_CLOCK_SUN8I_TCON_TOP_H_
>>>>>>
>>>>>> #define CLK_TCON_TOP_TV0 0
>>>>>> #define CLK_TCON_TOP_TV1 1
>>>>>> #define CLK_TCON_TOP_DSI 2
>>>>>>
>>>>>> #endif /* _DT_BINDINGS_CLOCK_SUN8I_TCON_TOP_H_ */
>>>>>>
>>>>>>
>>>>>>
>>>>>> I believe, if that the quirk of the D1s correct to the above comment, 
>>>>>> the incorrect clock index is being selected in the devicetree which 
>>>>>> would 
>>>>>> also cause the failure.
>>>>>>
>>>>>>
>>>>>> In which case:
>>>>>>
>>>>>> clocks = <&ccu CLK_BUS_MIPI_DSI>, <&tcon_top 1>;
>>>>>>
>>>>>> clock-names = "bus", "mod";
>>>>>>
>>>>>>
>>>>>> would be a sufficient fix without updating the header/source.
>>>>>>
>>>>>> Either case as soon as I am back with my devkit, I would try this for 
>>>>>> sure and try and see if I can find an answer.
>>>>>>
>>>>>>
>>>>>>
>>>>>> >You can check /sys/kernel/debug/clk/clk_summary (with debugfs 
>>>>>> mounted)
>>>>>> >to see what clocks are there and how they are used
>>>>>> Also great information, I will test.
>>>>>>
>>>>>>
>>>>>> Regards,
>>>>>>
>>>>>> On Thursday 28 December 2023 at 9:59:09 am UTC+10:30 Andre Przywara 
>>>>>> wrote:
>>>>>>
>>>>>>> On Tue, 26 Dec 2023 19:00:58 -0800 (PST) 
>>>>>>> "K. James" <kirby.n...@gmail.com> wrote: 
>>>>>>>
>>>>>>> Hi, 
>>>>>>>
>>>>>>> please try to avoid HTML email on lists, that makes it hard to reply 
>>>>>>> inline and messes up the text view - and there is little need to 
>>>>>>> provide 
>>>>>>> links to every identifier anyway. 
>>>>>>>
>>>>>>> > Hi All, 
>>>>>>> > 
>>>>>>> > Been working on getting T113-s3 on mainline as I prepare to update 
>>>>>>> a 
>>>>>>> > project from a v3s. One of the benefits has been the ability to 
>>>>>>> move from a 
>>>>>>> > 18bit RGB LCD to a MIPI-DSI display, with the interface available 
>>>>>>> on the 
>>>>>>> > T113-s3 , which has given some better display choices. 
>>>>>>> > 
>>>>>>> > The DSI driver was on mainline from 6.2, however building from 
>>>>>>> sources on 
>>>>>>> > init I am getting the following error: 
>>>>>>> > 
>>>>>>> > *"sun6i-mipi-dsi 5450000.dsi: Couldn't get the DSI mod clock"* 
>>>>>>> > 
>>>>>>> > Its tripping at the following init in sun6i_mipi_dsi.c 
>>>>>>> > <
>>>>>>> https://elixir.bootlin.com/linux/v6.6.2/source/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c#L1155>
>>>>>>>  
>>>>>>>
>>>>>>> > 
>>>>>>> > 
>>>>>>> > if (variant-> has_mod_clk) { 
>>>>>>> > dsi->mod_clk = devm_clk_get(dev, "mod"); 
>>>>>>> > if (IS_ERR (dsi->mod_clk)) { 
>>>>>>> > dev_err(dev, "Couldn't get the DSI mod clock\n"); 
>>>>>>> > ret = PTR_ERR(dsi->mod_clk); 
>>>>>>> > goto err_attach_clk; 
>>>>>>> >} 
>>>>>>>
>>>>>>> But since this comes from the DSI driver, this refers to the DT node 
>>>>>>> of 
>>>>>>> the DSI device, not the DE2 clock, doesn't it? 
>>>>>>>
>>>>>>> > The display modclock is registered from the following DTS node in 
>>>>>>> > sunxi-d1s-t113.dtsi 
>>>>>>> > <
>>>>>>> https://elixir.bootlin.com/linux/v6.6.2/source/arch/riscv/boot/dts/allwinner/sunxi-d1s-t113.dtsi#L641>
>>>>>>>  
>>>>>>>
>>>>>>> > 
>>>>>>> > 
>>>>>>> > display_clocks: clock-controller@5000000 { 
>>>>>>> > compatible = "allwinner,sun20i-d1-de2-clk", 
>>>>>>> > "allwinner,sun50i-h5-de2-clk"; 
>>>>>>> > reg = <0x5000000 0x10000>; 
>>>>>>> > clocks = <&ccu CLK_BUS_DE>, <&ccu CLK_DE>; 
>>>>>>> > clock-names = "bus", *"mod"*; 
>>>>>>> > resets = <&ccu RST_BUS_DE>; 
>>>>>>> > #clock-cells = <1>; 
>>>>>>> > #reset-cells = <1>; 
>>>>>>> > }; 
>>>>>>>
>>>>>>> So those are the clocks from: 
>>>>>>> dsi: dsi@5450000 { 
>>>>>>> ... 
>>>>>>> clocks = <&ccu CLK_BUS_MIPI_DSI>, 
>>>>>>> <&tcon_top CLK_TCON_TOP_DSI>; 
>>>>>>> clock-names = "bus", "mod"; 
>>>>>>> ... 
>>>>>>> }; 
>>>>>>>
>>>>>>> So the "mod" clock here points to the tcon_top device, the one with 
>>>>>>> the 
>>>>>>> "allwinner,sun20i-d1-tcon-top" compatible string. Which is 
>>>>>>> implemented 
>>>>>>> by drivers/gpu/drm/sun4i/sun8i_tcon_top.c, controlled by the 
>>>>>>> DRM_SUN8I_TCON_TOP Kconfig symbol. Do you have that enabled? 
>>>>>>>
>>>>>>> You can check /sys/kernel/debug/clk/clk_summary (with debugfs 
>>>>>>> mounted) 
>>>>>>> to see what clocks are there and how they are used. 
>>>>>>>
>>>>>>> Cheers, 
>>>>>>> Andre 
>>>>>>>
>>>>>>> > I checked the buildroot config and the CCU for sun8i DE2 is being 
>>>>>>> > built and included, the registration should occur and give an 
>>>>>>> > exception if it's not happening: ccu-sun8i-de2.c 
>>>>>>> > <
>>>>>>> https://elixir.bootlin.com/linux/v6.6.2/source/drivers/clk/sunxi-ng/ccu-sun8i-de2.c#L263>
>>>>>>>  
>>>>>>>
>>>>>>> > 
>>>>>>> > mod_clk <https://elixir.bootlin.com/linux/v6.6.2/C/ident/mod_clk> 
>>>>>>> = 
>>>>>>> > devm_clk_get 
>>>>>>> > <https://elixir.bootlin.com/linux/v6.6.2/C/ident/devm_clk_get>( 
>>>>>>> > &pdev->dev, "mod"); if (IS_ERR 
>>>>>>> > <https://elixir.bootlin.com/linux/v6.6.2/C/ident/IS_ERR>(mod_clk 
>>>>>>> > <https://elixir.bootlin.com/linux/v6.6.2/C/ident/mod_clk>)) 
>>>>>>> return 
>>>>>>> > dev_err_probe 
>>>>>>> > <https://elixir.bootlin.com/linux/v6.6.2/C/ident/dev_err_probe>(&pdev->dev,
>>>>>>> >  
>>>>>>>
>>>>>>> > PTR_ERR 
>>>>>>> > <https://elixir.bootlin.com/linux/v6.6.2/C/ident/PTR_ERR>(mod_clk 
>>>>>>> > <https://elixir.bootlin.com/linux/v6.6.2/C/ident/mod_clk>), 
>>>>>>> "Couldn't 
>>>>>>> > get mod clk\n"); 
>>>>>>> > 
>>>>>>> > ret = clk_prepare_enable 
>>>>>>> > <
>>>>>>> https://elixir.bootlin.com/linux/v6.6.2/C/ident/clk_prepare_enable>(mod_clk
>>>>>>>  
>>>>>>>
>>>>>>> > <https://elixir.bootlin.com/linux/v6.6.2/C/ident/mod_clk>); if 
>>>>>>> (ret) 
>>>>>>> > { dev_err 
>>>>>>> > <https://elixir.bootlin.com/linux/v6.6.2/C/ident/dev_err>(&pdev->dev 
>>>>>>>
>>>>>>> > , "Couldn't enable mod clk: %d\n", ret); goto err_disable_bus_clk; 
>>>>>>> } 
>>>>>>> > 
>>>>>>> > I don't see dmesg print any clock errors, but at the same time, I 
>>>>>>> > understand that linux common clock framework also won't print 
>>>>>>> > anything by default. 
>>>>>>> > 
>>>>>>> > I can't see anything in either driver that would cause an error 
>>>>>>> other 
>>>>>>> > than the clock not existing, if anyone has any ideas - i'm all 
>>>>>>> ears. 
>>>>>>> > 
>>>>>>> > At the moment I am leaning towards the clock-controller; Is there 
>>>>>>> a 
>>>>>>> > userspace or debug option to check (mod) clock status' under the 
>>>>>>> > common clock framework? 
>>>>>>> > 
>>>>>>> > Thanks 
>>>>>>> > 
>>>>>>>
>>>>>>> -- 
>>>>> You received this message because you are subscribed to a topic in the 
>>>>> Google Groups "linux-sunxi" group.
>>>>> To unsubscribe from this topic, visit 
>>>>> https://groups.google.com/d/topic/linux-sunxi/HxDBpY5HbbQ/unsubscribe.
>>>>> To unsubscribe from this group and all its topics, send an email to 
>>>>> linux-sunxi...@googlegroups.com.
>>>>> To view this discussion on the web, visit 
>>>>> https://groups.google.com/d/msgid/linux-sunxi/02e9453d-7335-4499-933b-ac5038e41bbcn%40googlegroups.com
>>>>>  
>>>>> <https://groups.google.com/d/msgid/linux-sunxi/02e9453d-7335-4499-933b-ac5038e41bbcn%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>>

-- 
You received this message because you are subscribed to the Google Groups 
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to linux-sunxi+unsubscr...@googlegroups.com.
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/linux-sunxi/929373b1-7727-4126-8c3c-4b9ad629dda3n%40googlegroups.com.

Reply via email to