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.skra...@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/b7400500-f61f-4be8-936c-b90a67cccb92n%40googlegroups.com.

Reply via email to