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 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/02e9453d-7335-4499-933b-ac5038e41bbcn%40googlegroups.com.