Message ID | 20241206-rcar-gh-dsi-v3-10-d74c2166fa15@ideasonboard.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm: Add DSI/DP support for Renesas r8a779h0 V4M and grey-hawk board | expand |
Hi Tomi, On Fri, Dec 6, 2024 at 10:33 AM Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> wrote: > From: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com> > > Add support for the mini DP output on the Gray Hawk board. > > Signed-off-by: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com> > Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> > Tested-by: Geert Uytterhoeven <geert+renesas@glider.be> Thanks for your patch! > --- a/arch/arm64/boot/dts/renesas/r8a779h0-gray-hawk-single.dts > +++ b/arch/arm64/boot/dts/renesas/r8a779h0-gray-hawk-single.dts > @@ -269,6 +314,51 @@ eeprom@53 { > }; > }; > > +&i2c1 { > + pinctrl-0 = <&i2c1_pins>; > + pinctrl-names = "default"; > + > + status = "okay"; > + clock-frequency = <400000>; > + > + bridge@2c { Missing: pinctrl-0 = <&irq0_pins>; pinctrl-names = "default"; > + compatible = "ti,sn65dsi86"; > + reg = <0x2c>; > + > + clocks = <&sn65dsi86_refclk>; > + clock-names = "refclk"; > + > + interrupt-parent = <&intc_ex>; > + interrupts = <0 IRQ_TYPE_LEVEL_HIGH>; interrupts-extended = ... > + > + enable-gpios = <&gpio1 26 GPIO_ACTIVE_HIGH>; > + > + vccio-supply = <®_1p8v>; > + vpll-supply = <®_1p8v>; > + vcca-supply = <®_1p2v>; > + vcc-supply = <®_1p2v>; > + > + ports { > + #address-cells = <1>; > + #size-cells = <0>; > + > + port@0 { > + reg = <0>; > + sn65dsi86_in0: endpoint { > + remote-endpoint = <&dsi0_out>; > + }; > + }; > + > + port@1 { > + reg = <1>; > + sn65dsi86_out0: endpoint { > + remote-endpoint = <&mini_dp_con_in>; > + }; > + }; > + }; > + }; > +}; > + > &i2c3 { > pinctrl-0 = <&i2c3_pins>; > pinctrl-names = "default"; > @@ -361,6 +451,11 @@ i2c0_pins: i2c0 { > function = "i2c0"; > }; > > + i2c1_pins: i2c1 { > + groups = "i2c1"; > + function = "i2c1"; > + }; > + > i2c3_pins: i2c3 { > groups = "i2c3"; > function = "i2c3"; Missing: irq0_pins: irq0 { groups = "intc_ex_irq0_a"; function = "intc_ex"; }; I'll fix that up while applying. Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> i.e. will queue in renesas-devel for v6.14. Gr{oetje,eeting}s, Geert
Hi, On 10/12/2024 18:34, Geert Uytterhoeven wrote: > Hi Tomi, > > On Fri, Dec 6, 2024 at 10:33 AM Tomi Valkeinen > <tomi.valkeinen@ideasonboard.com> wrote: >> From: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com> >> >> Add support for the mini DP output on the Gray Hawk board. >> >> Signed-off-by: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com> >> Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> >> Tested-by: Geert Uytterhoeven <geert+renesas@glider.be> > > Thanks for your patch! > >> --- a/arch/arm64/boot/dts/renesas/r8a779h0-gray-hawk-single.dts >> +++ b/arch/arm64/boot/dts/renesas/r8a779h0-gray-hawk-single.dts >> @@ -269,6 +314,51 @@ eeprom@53 { >> }; >> }; >> >> +&i2c1 { >> + pinctrl-0 = <&i2c1_pins>; >> + pinctrl-names = "default"; >> + >> + status = "okay"; >> + clock-frequency = <400000>; >> + >> + bridge@2c { > > Missing: > > pinctrl-0 = <&irq0_pins>; > pinctrl-names = "default"; > >> + compatible = "ti,sn65dsi86"; >> + reg = <0x2c>; >> + >> + clocks = <&sn65dsi86_refclk>; >> + clock-names = "refclk"; >> + >> + interrupt-parent = <&intc_ex>; >> + interrupts = <0 IRQ_TYPE_LEVEL_HIGH>; > > interrupts-extended = ... Is that just to use the same style in the whole dts, or is there some specific need for the extended one here? >> + >> + enable-gpios = <&gpio1 26 GPIO_ACTIVE_HIGH>; >> + >> + vccio-supply = <®_1p8v>; >> + vpll-supply = <®_1p8v>; >> + vcca-supply = <®_1p2v>; >> + vcc-supply = <®_1p2v>; >> + >> + ports { >> + #address-cells = <1>; >> + #size-cells = <0>; >> + >> + port@0 { >> + reg = <0>; >> + sn65dsi86_in0: endpoint { >> + remote-endpoint = <&dsi0_out>; >> + }; >> + }; >> + >> + port@1 { >> + reg = <1>; >> + sn65dsi86_out0: endpoint { >> + remote-endpoint = <&mini_dp_con_in>; >> + }; >> + }; >> + }; >> + }; >> +}; >> + >> &i2c3 { >> pinctrl-0 = <&i2c3_pins>; >> pinctrl-names = "default"; >> @@ -361,6 +451,11 @@ i2c0_pins: i2c0 { >> function = "i2c0"; >> }; >> >> + i2c1_pins: i2c1 { >> + groups = "i2c1"; >> + function = "i2c1"; >> + }; >> + >> i2c3_pins: i2c3 { >> groups = "i2c3"; >> function = "i2c3"; > > Missing: > > irq0_pins: irq0 { > groups = "intc_ex_irq0_a"; > function = "intc_ex"; > }; > > I'll fix that up while applying. Thanks! Tomi > Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> > i.e. will queue in renesas-devel for v6.14. > > Gr{oetje,eeting}s, > > Geert >
Hi Tomi, On Tue, Dec 10, 2024 at 7:10 PM Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> wrote: > On 10/12/2024 18:34, Geert Uytterhoeven wrote: > > On Fri, Dec 6, 2024 at 10:33 AM Tomi Valkeinen > > <tomi.valkeinen@ideasonboard.com> wrote: > >> From: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com> > >> > >> Add support for the mini DP output on the Gray Hawk board. > >> > >> Signed-off-by: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com> > >> Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> > >> Tested-by: Geert Uytterhoeven <geert+renesas@glider.be> > > > > Thanks for your patch! > > > >> --- a/arch/arm64/boot/dts/renesas/r8a779h0-gray-hawk-single.dts > >> +++ b/arch/arm64/boot/dts/renesas/r8a779h0-gray-hawk-single.dts > >> + compatible = "ti,sn65dsi86"; > >> + reg = <0x2c>; > >> + > >> + clocks = <&sn65dsi86_refclk>; > >> + clock-names = "refclk"; > >> + > >> + interrupt-parent = <&intc_ex>; > >> + interrupts = <0 IRQ_TYPE_LEVEL_HIGH>; > > > > interrupts-extended = ... > > Is that just to use the same style in the whole dts, or is there some > specific need for the extended one here? There is no real technical need to use the extended one, but it is more concise. That's why we just converted all such cases in Renesas DTS files in v6.13-rc1. And of course it reduces the difference between arch/arm64/boot/dts/renesas/white-hawk-cpu-common.dtsi and arch/arm64/boot/dts/renesas/r8a779h0-gray-hawk-single.dts. Gr{oetje,eeting}s, Geert
Hi Tomi, On Fri, Dec 6, 2024 at 10:33 AM Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> wrote: > From: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com> > > Add support for the mini DP output on the Gray Hawk board. > > Signed-off-by: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com> > Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> > Tested-by: Geert Uytterhoeven <geert+renesas@glider.be> Thanks for your patch, which is now commit b1000645dc29701f ("arm64: dts: renesas: gray-hawk-single: Add DisplayPort support") in renesas-devel/renesas-dts-for-v6.14. Apparently this patch breaks s2idle on Gray Hawk Single when "[PATCH v3 06/10] drm/rcar-du: dsi: Add r8a779h0 support" is not present, or when CONFIG_DRM_RCAR_USE_MIPI_DSI is not enabled. If the DSI driver is not available, the ti_sn65dsi86.bridge part fails to probe with -EPROBE_DEFER and "failed to attach dsi host". Still, the sn65dsi86 driver must do something critical, as resuming from s2idle now hangs. I haven't identified yet where exactly it hangs. As a result, s2idle is broken in current renesas-devel, which only has the DTS changes. Perhaps I should drop the DTS until the issue is resolved? However, I suspect White Hawk has the same issue (if CONFIG_DRM_RCAR_USE_MIPI_DSI=n), but I cannot verify as my local White Hawk is currently not available for kernel testing. Do you have a clue? Thanks! Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds
Hi, On 16/12/2024 15:33, Geert Uytterhoeven wrote: > Hi Tomi, > > On Fri, Dec 6, 2024 at 10:33 AM Tomi Valkeinen > <tomi.valkeinen@ideasonboard.com> wrote: >> From: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com> >> >> Add support for the mini DP output on the Gray Hawk board. >> >> Signed-off-by: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com> >> Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> >> Tested-by: Geert Uytterhoeven <geert+renesas@glider.be> > > Thanks for your patch, which is now commit b1000645dc29701f > ("arm64: dts: renesas: gray-hawk-single: Add DisplayPort support") > in renesas-devel/renesas-dts-for-v6.14. > > Apparently this patch breaks s2idle on Gray Hawk Single when "[PATCH > v3 06/10] drm/rcar-du: dsi: Add r8a779h0 support" is not present, or > when CONFIG_DRM_RCAR_USE_MIPI_DSI is not enabled. If the DSI driver > is not available, the ti_sn65dsi86.bridge part fails to probe with > -EPROBE_DEFER and "failed to attach dsi host". Still, the sn65dsi86 > driver must do something critical, as resuming from s2idle now hangs. > I haven't identified yet where exactly it hangs. > > As a result, s2idle is broken in current renesas-devel, which only > has the DTS changes. Perhaps I should drop the DTS until the issue > is resolved? I'm fine with that. The DT bindings are still under work anyway. > However, I suspect White Hawk has the same issue (if > CONFIG_DRM_RCAR_USE_MIPI_DSI=n), but I cannot verify as my local White > Hawk is currently not available for kernel testing. I can reproduce on White Hawk. And I agree that it's probably related to sn65dsi86. I use modules, so I tried dropping modules to see when the issue goes away. And it's always sn65dsi86. So without the rcar DRM & DSI modules loaded, if I load or don't load sn65dsi86, I see or don't see the hang, respectively. Even if I drop the ti_sn65dsi86_pm_ops, it doesn't help. And looks like just doing the i2c_add_driver() part in ti_sn65dsi86_init() will cause the issue, so it's something that happens there. I'll continue the debug later. Tomi
Hi, On 16/12/2024 17:15, Tomi Valkeinen wrote: > Hi, > > On 16/12/2024 15:33, Geert Uytterhoeven wrote: >> Hi Tomi, >> >> On Fri, Dec 6, 2024 at 10:33 AM Tomi Valkeinen >> <tomi.valkeinen@ideasonboard.com> wrote: >>> From: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com> >>> >>> Add support for the mini DP output on the Gray Hawk board. >>> >>> Signed-off-by: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com> >>> Reviewed-by: Laurent Pinchart >>> <laurent.pinchart+renesas@ideasonboard.com> >>> Tested-by: Geert Uytterhoeven <geert+renesas@glider.be> >> >> Thanks for your patch, which is now commit b1000645dc29701f >> ("arm64: dts: renesas: gray-hawk-single: Add DisplayPort support") >> in renesas-devel/renesas-dts-for-v6.14. >> >> Apparently this patch breaks s2idle on Gray Hawk Single when "[PATCH >> v3 06/10] drm/rcar-du: dsi: Add r8a779h0 support" is not present, or >> when CONFIG_DRM_RCAR_USE_MIPI_DSI is not enabled. If the DSI driver >> is not available, the ti_sn65dsi86.bridge part fails to probe with >> -EPROBE_DEFER and "failed to attach dsi host". Still, the sn65dsi86 >> driver must do something critical, as resuming from s2idle now hangs. >> I haven't identified yet where exactly it hangs. >> > As a result, s2idle is broken in current renesas-devel, which only >> has the DTS changes. Perhaps I should drop the DTS until the issue >> is resolved? > > I'm fine with that. The DT bindings are still under work anyway. > >> However, I suspect White Hawk has the same issue (if >> CONFIG_DRM_RCAR_USE_MIPI_DSI=n), but I cannot verify as my local White >> Hawk is currently not available for kernel testing. > > I can reproduce on White Hawk. And I agree that it's probably related to > sn65dsi86. > > I use modules, so I tried dropping modules to see when the issue goes > away. And it's always sn65dsi86. So without the rcar DRM & DSI modules > loaded, if I load or don't load sn65dsi86, I see or don't see the hang, > respectively. > > Even if I drop the ti_sn65dsi86_pm_ops, it doesn't help. And looks like > just doing the i2c_add_driver() part in ti_sn65dsi86_init() will cause > the issue, so it's something that happens there. > > I'll continue the debug later. I wrote a minimal kernel module that has an i2c driver that does nothing, using ti,sn65dsi86 as the compatible string. I can still see the hang with that driver (i.e. no DRM drivers loaded at all). So it's not an issue in the driver. I didn't really figure anything out, but I did notice that if I comment the following lines from the dts, the problem goes away: interrupt-parent = <&intc_ex>; interrupts = <0 IRQ_TYPE_LEVEL_HIGH>; enable-gpios = <&gpio1 26 GPIO_ACTIVE_HIGH>; vccio-supply = <®_1p8v>; vpll-supply = <®_1p8v>; vcca-supply = <®_1p2v>; vcc-supply = <®_1p2v>; Tomi
On Mon, Dec 16, 2024 at 2:33 PM Geert Uytterhoeven <geert@linux-m68k.org> wrote: > On Fri, Dec 6, 2024 at 10:33 AM Tomi Valkeinen > <tomi.valkeinen@ideasonboard.com> wrote: > > From: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com> > > > > Add support for the mini DP output on the Gray Hawk board. > > > > Signed-off-by: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com> > > Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> > > Tested-by: Geert Uytterhoeven <geert+renesas@glider.be> > > Thanks for your patch, which is now commit b1000645dc29701f > ("arm64: dts: renesas: gray-hawk-single: Add DisplayPort support") > in renesas-devel/renesas-dts-for-v6.14. > > Apparently this patch breaks s2idle on Gray Hawk Single when "[PATCH > v3 06/10] drm/rcar-du: dsi: Add r8a779h0 support" is not present, or > when CONFIG_DRM_RCAR_USE_MIPI_DSI is not enabled. If the DSI driver > is not available, the ti_sn65dsi86.bridge part fails to probe with > -EPROBE_DEFER and "failed to attach dsi host". Still, the sn65dsi86 > driver must do something critical, as resuming from s2idle now hangs. > I haven't identified yet where exactly it hangs. > > As a result, s2idle is broken in current renesas-devel, which only > has the DTS changes. Perhaps I should drop the DTS until the issue > is resolved? > > However, I suspect White Hawk has the same issue (if > CONFIG_DRM_RCAR_USE_MIPI_DSI=n), but I cannot verify as my local White > Hawk is currently not available for kernel testing. Confirmed on White Hawk by Tomi and me. When the hang occurs, magic sysrq no longer works. However, the system still prints "nfs server not responding" once in a while, so I added calls to various sysrq print functions to rpc_check_timeout(). This revealed that the system is blocked on wait_for_completion() in dpm_wait_for_superior(), called from device_resume_noirq(). Printing the actual device and parent gives: platform fed80000.dsi-encoder: PM: device_resume_noirq platform fed80000.dsi-encoder: PM: dpm_wait_for_superior: parent fed80000.dsi-encoder Gr{oetje,eeting}s, Geert
CC Saravana On Tue, Dec 17, 2024 at 2:29 PM Geert Uytterhoeven <geert@linux-m68k.org> wrote: > On Mon, Dec 16, 2024 at 2:33 PM Geert Uytterhoeven <geert@linux-m68k.org> wrote: > > On Fri, Dec 6, 2024 at 10:33 AM Tomi Valkeinen > > <tomi.valkeinen@ideasonboard.com> wrote: > > > From: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com> > > > > > > Add support for the mini DP output on the Gray Hawk board. > > > > > > Signed-off-by: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com> > > > Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> > > > Tested-by: Geert Uytterhoeven <geert+renesas@glider.be> > > > > Thanks for your patch, which is now commit b1000645dc29701f > > ("arm64: dts: renesas: gray-hawk-single: Add DisplayPort support") > > in renesas-devel/renesas-dts-for-v6.14. > > > > Apparently this patch breaks s2idle on Gray Hawk Single when "[PATCH > > v3 06/10] drm/rcar-du: dsi: Add r8a779h0 support" is not present, or > > when CONFIG_DRM_RCAR_USE_MIPI_DSI is not enabled. If the DSI driver > > is not available, the ti_sn65dsi86.bridge part fails to probe with > > -EPROBE_DEFER and "failed to attach dsi host". Still, the sn65dsi86 > > driver must do something critical, as resuming from s2idle now hangs. > > I haven't identified yet where exactly it hangs. > > > > As a result, s2idle is broken in current renesas-devel, which only > > has the DTS changes. Perhaps I should drop the DTS until the issue > > is resolved? > > > > However, I suspect White Hawk has the same issue (if > > CONFIG_DRM_RCAR_USE_MIPI_DSI=n), but I cannot verify as my local White > > Hawk is currently not available for kernel testing. > > Confirmed on White Hawk by Tomi and me. > > When the hang occurs, magic sysrq no longer works. However, the system > still prints "nfs server not responding" once in a while, so I added > calls to various sysrq print functions to rpc_check_timeout(). > This revealed that the system is blocked on wait_for_completion() > in dpm_wait_for_superior(), called from device_resume_noirq(). > Printing the actual device and parent gives: > > platform fed80000.dsi-encoder: PM: device_resume_noirq > platform fed80000.dsi-encoder: PM: dpm_wait_for_superior: parent fed80000.dsi-encoder So it's waiting for itself, i.e. deadlock :-( When the DSI driver is available: rcar-mipi-dsi fed80000.dsi-encoder: PM: device_resume_noirq:627 rcar-mipi-dsi fed80000.dsi-encoder: PM: dpm_wait_for_superior:280 rcar-mipi-dsi fed80000.dsi-encoder: PM: dpm_wait_for_superior:296: parent fed80000.dsi-encoder still waiting for itself, but it does continue! Note that the fed80000.dsi-encoder block is now bound, and "rcar-mipi-dsi" is printed instead of "platform". fw_devlink issue? Gr{oetje,eeting}s, Geert
diff --git a/arch/arm64/boot/dts/renesas/r8a779h0-gray-hawk-single.dts b/arch/arm64/boot/dts/renesas/r8a779h0-gray-hawk-single.dts index 057f959d67b3..7cdf07b6dde6 100644 --- a/arch/arm64/boot/dts/renesas/r8a779h0-gray-hawk-single.dts +++ b/arch/arm64/boot/dts/renesas/r8a779h0-gray-hawk-single.dts @@ -59,6 +59,12 @@ chosen { stdout-path = "serial0:921600n8"; }; + sn65dsi86_refclk: clk-x6 { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <38400000>; + }; + keys { compatible = "gpio-keys"; @@ -126,6 +132,27 @@ memory@480000000 { reg = <0x4 0x80000000 0x1 0x80000000>; }; + mini-dp-con { + compatible = "dp-connector"; + label = "CN5"; + type = "mini"; + + port { + mini_dp_con_in: endpoint { + remote-endpoint = <&sn65dsi86_out0>; + }; + }; + }; + + reg_1p2v: regulator-1p2v { + compatible = "regulator-fixed"; + regulator-name = "fixed-1.2V"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + regulator-boot-on; + regulator-always-on; + }; + reg_1p8v: regulator-1p8v { compatible = "regulator-fixed"; regulator-name = "fixed-1.8V"; @@ -200,6 +227,24 @@ channel1 { }; }; +&dsi0 { + status = "okay"; + + ports { + port@1 { + reg = <1>; + dsi0_out: endpoint { + remote-endpoint = <&sn65dsi86_in0>; + data-lanes = <1 2 3 4>; + }; + }; + }; +}; + +&du { + status = "okay"; +}; + &extal_clk { clock-frequency = <16666666>; }; @@ -269,6 +314,51 @@ eeprom@53 { }; }; +&i2c1 { + pinctrl-0 = <&i2c1_pins>; + pinctrl-names = "default"; + + status = "okay"; + clock-frequency = <400000>; + + bridge@2c { + compatible = "ti,sn65dsi86"; + reg = <0x2c>; + + clocks = <&sn65dsi86_refclk>; + clock-names = "refclk"; + + interrupt-parent = <&intc_ex>; + interrupts = <0 IRQ_TYPE_LEVEL_HIGH>; + + enable-gpios = <&gpio1 26 GPIO_ACTIVE_HIGH>; + + vccio-supply = <®_1p8v>; + vpll-supply = <®_1p8v>; + vcca-supply = <®_1p2v>; + vcc-supply = <®_1p2v>; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + sn65dsi86_in0: endpoint { + remote-endpoint = <&dsi0_out>; + }; + }; + + port@1 { + reg = <1>; + sn65dsi86_out0: endpoint { + remote-endpoint = <&mini_dp_con_in>; + }; + }; + }; + }; +}; + &i2c3 { pinctrl-0 = <&i2c3_pins>; pinctrl-names = "default"; @@ -361,6 +451,11 @@ i2c0_pins: i2c0 { function = "i2c0"; }; + i2c1_pins: i2c1 { + groups = "i2c1"; + function = "i2c1"; + }; + i2c3_pins: i2c3 { groups = "i2c3"; function = "i2c3";