Message ID | 20210810223123.2174596-1-pgwipeout@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [BUG] dw-mipi-dsi-rockchip display corruption with dsi panel | expand |
Hi Peter, Am Mittwoch, 11. August 2021, 00:31:24 CEST schrieb Peter Geis: > Good Evening, > > I've been attempting to light off the feiyang fy07024di26a30d panel on > the rockpro64. This is the official panel from the Pine64 store. > I've confirmed it works with the downstream kernel on both the rk3399 > and rk3566, but on the mainline driver the display is partially > corrupted (see attached photo: [1]). > > As you can see, the left half of the display is fine, but the right half > of the display is corrupted with the pixels smearing horizontally. > > I saw when the panel was added, some additional code was added to > handle burst mode in the sun6_mipi_dsi driver [2]. > I've seen that the dw-mipi-dsi driver appears to already support burst > mode and I can't find anything out of place there. > I also haven't had much success finding anything obviously different in > the downstream driver vs the upstream driver that would explain this. > > Attached below is the in-progress dts changes for an example of how the > panel is plugged in. is that really a dual-dsi panel needing two dsi controllers to drive it? With that tiny resultion of 1024x600 I definitly wouldn't expect this, in contrast to say the 2048x1536 dual-dsi displays used in the Gru-Scarlet ChromeOS tablets. So maybe just drop the 2nd dsi controller connection in a first step? Because I really don't think that is the case on the hardware. The dual-dsi setup means that you have one vop supplying half of its display data to each of the 2 involved dsi controllers. And you're missing in fact half of your display data. Heiko > I admit, I have little understanding of the mipi-dsi internal workings, > so I'm reaching out to the experts on how to correct this. > > Thank you for your time, > Peter Geis > > [1] https://photos.app.goo.gl/LBA9M2WcweGaEb4cA > [2] https://patchwork.kernel.org/project/linux-arm-kernel/cover/20181116163916.29621-1-jagan@amarulasolutions.com/ > > diff --git a/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi > index 687a5afa5d2c..af55a30297ae 100644 > --- a/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi > +++ b/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi > @@ -20,6 +20,13 @@ chosen { > stdout-path = "serial2:1500000n8"; > }; > > + backlight: backlight { > + compatible = "pwm-backlight"; > + pwms = <&pwm0 0 1000000 0>; > + brightness-levels = <0 4 8 16 32 64 128 255>; > + default-brightness-level = <128>; > + }; > + > clkin_gmac: external-gmac-clock { > compatible = "fixed-clock"; > clock-frequency = <125000000>; > @@ -69,7 +76,7 @@ diy_led: led-1 { > > fan: pwm-fan { > compatible = "pwm-fan"; > - cooling-levels = <0 150 200 255>; > + cooling-levels = <0 100 150 255>; > #cooling-cells = <2>; > fan-supply = <&vcc12v_dcin>; > pwms = <&pwm1 0 50000 0>; > @@ -220,6 +227,16 @@ vdd_log: vdd-log { > regulator-max-microvolt = <1700000>; > vin-supply = <&vcc5v0_sys>; > }; > + > + avdd: avdd { > + compatible = "regulator-fixed"; > + regulator-name = "avdd"; > + regulator-always-on; > + regulator-boot-on; > + regulator-min-microvolt = <11000000>; > + regulator-max-microvolt = <11000000>; > + vin-supply = <&vcc3v3_s0>; > + }; > }; > > &cpu_l0 { > @@ -428,8 +445,8 @@ regulator-state-mem { > > vcc3v0_touch: LDO_REG2 { > regulator-name = "vcc3v0_touch"; > - regulator-always-on; > - regulator-boot-on; > +// regulator-always-on; > +// regulator-boot-on; > regulator-min-microvolt = <3000000>; > regulator-max-microvolt = <3000000>; > regulator-state-mem { > @@ -518,8 +535,8 @@ regulator-state-mem { > > vcc3v3_s0: SWITCH_REG2 { > regulator-name = "vcc3v3_s0"; > - regulator-always-on; > - regulator-boot-on; > +// regulator-always-on; > +// regulator-boot-on; > regulator-state-mem { > regulator-off-in-suspend; > }; > @@ -593,6 +610,19 @@ fusb0: typec-portc@22 { > vbus-supply = <&vcc5v0_typec>; > status = "okay"; > }; > + > + touch: touchscreen@5d { > + compatible = "goodix,gt911"; > + reg = <0x5d>; > + AVDD28-supply = <&vcc3v0_touch>; > + VDDIO-supply = <&vcc3v0_touch>; > + interrupt-parent = <&gpio4>; > + interrupts = <RK_PD5 IRQ_TYPE_EDGE_FALLING>; > + irq-gpios = <&gpio4 RK_PD5 GPIO_ACTIVE_HIGH>; > + reset-gpios = <&gpio4 RK_PD6 GPIO_ACTIVE_HIGH>; > +// touchscreen-inverted-x; > +// touchscreen-inverted-y; > + }; > }; > > &i2s0 { > @@ -628,6 +658,88 @@ &io_domains { > gpio1830-supply = <&vcc_3v0>; > }; > > +&mipi_dsi { > + status = "okay"; > + clock-master; > + > + ports { > + mipi_out: port@1 { > + reg = <1>; > + > + mipi_out_panel: endpoint { > + remote-endpoint = <&mipi_in_panel>; > + }; > + }; > + }; > + > + mipi_panel: panel@0 { > + compatible = "feiyang,fy07024di26a30d"; > + reg = <0>; > + backlight = <&backlight>; > + reset-gpios = <&gpio4 25 GPIO_ACTIVE_HIGH>; > +// enable-gpios = <&gpio4 25 GPIO_ACTIVE_HIGH>; > + width-mm = <154>; > + height-mm = <86>; > + rotation = <0>; > + avdd-supply = <&avdd>; > + dvdd-supply = <&vcc3v3_s0>; > + > + display-timings { > + native-mode = <&timing0>; > + timing0: timing0 { > + clock-frequency = <50000000>; > + hactive = <1024>; > + vactive = <600>; > + hfront-porch = <160>; > + hback-porch = <160>; > + hsync-len = <10>; > + vback-porch = <23>; > + vfront-porch = <12>; > + vsync-len = <1>; > + hsync-active = <0>; > + vsync-active = <0>; > + pixelclk-active = <0>; > + de-active = <0>; > + }; > + }; > + > + ports { > + #address-cells = <1>; > + #size-cells = <0>; > + > + port@0 { > + reg = <0>; > + > + mipi_in_panel: endpoint { > + remote-endpoint = <&mipi_out_panel>; > + }; > + }; > + > + port@1 { > + reg = <1>; > + > + mipi1_in_panel: endpoint@1 { > + remote-endpoint = <&mipi1_out_panel>; > + }; > + }; > + }; > + }; > +}; > + > +&mipi_dsi1 { > + status = "okay"; > + > + ports { > + mipi1_out: port@1 { > + reg = <1>; > + > + mipi1_out_panel: endpoint { > + remote-endpoint = <&mipi1_in_panel>; > + }; > + }; > + }; > +}; > + > &pcie0 { > ep-gpios = <&gpio2 RK_PD4 GPIO_ACTIVE_HIGH>; > num-lanes = <4>; >
On Tue, Aug 10, 2021 at 7:11 PM Heiko Stübner <heiko@sntech.de> wrote: > > Hi Peter, > > Am Mittwoch, 11. August 2021, 00:31:24 CEST schrieb Peter Geis: > > Good Evening, > > > > I've been attempting to light off the feiyang fy07024di26a30d panel on > > the rockpro64. This is the official panel from the Pine64 store. > > I've confirmed it works with the downstream kernel on both the rk3399 > > and rk3566, but on the mainline driver the display is partially > > corrupted (see attached photo: [1]). > > > > As you can see, the left half of the display is fine, but the right half > > of the display is corrupted with the pixels smearing horizontally. > > > > I saw when the panel was added, some additional code was added to > > handle burst mode in the sun6_mipi_dsi driver [2]. > > I've seen that the dw-mipi-dsi driver appears to already support burst > > mode and I can't find anything out of place there. > > I also haven't had much success finding anything obviously different in > > the downstream driver vs the upstream driver that would explain this. > > > > Attached below is the in-progress dts changes for an example of how the > > panel is plugged in. > > is that really a dual-dsi panel needing two dsi controllers to drive it? > > With that tiny resultion of 1024x600 I definitly wouldn't expect this, > in contrast to say the 2048x1536 dual-dsi displays used in the > Gru-Scarlet ChromeOS tablets. > > So maybe just drop the 2nd dsi controller connection in a first step? > Because I really don't think that is the case on the hardware. > > The dual-dsi setup means that you have one vop supplying half of its > display data to each of the 2 involved dsi controllers. And you're missing > in fact half of your display data. Thanks, that was it. I had tried removing the link previously, but I had to also disable that controller altogether or the vop fails to probe silently. That is a common issue I ran into when getting this all set up, anything failed to probe for the dsi panel the vop just silently dies in the background and graphics fail everywhere. > > > Heiko > > > > > I admit, I have little understanding of the mipi-dsi internal workings, > > so I'm reaching out to the experts on how to correct this. > > > > Thank you for your time, > > Peter Geis > > > > [1] https://photos.app.goo.gl/LBA9M2WcweGaEb4cA > > [2] https://patchwork.kernel.org/project/linux-arm-kernel/cover/20181116163916.29621-1-jagan@amarulasolutions.com/ > > > > diff --git a/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi > > index 687a5afa5d2c..af55a30297ae 100644 > > --- a/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi > > +++ b/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi > > @@ -20,6 +20,13 @@ chosen { > > stdout-path = "serial2:1500000n8"; > > }; > > > > + backlight: backlight { > > + compatible = "pwm-backlight"; > > + pwms = <&pwm0 0 1000000 0>; > > + brightness-levels = <0 4 8 16 32 64 128 255>; > > + default-brightness-level = <128>; > > + }; > > + > > clkin_gmac: external-gmac-clock { > > compatible = "fixed-clock"; > > clock-frequency = <125000000>; > > @@ -69,7 +76,7 @@ diy_led: led-1 { > > > > fan: pwm-fan { > > compatible = "pwm-fan"; > > - cooling-levels = <0 150 200 255>; > > + cooling-levels = <0 100 150 255>; > > #cooling-cells = <2>; > > fan-supply = <&vcc12v_dcin>; > > pwms = <&pwm1 0 50000 0>; > > @@ -220,6 +227,16 @@ vdd_log: vdd-log { > > regulator-max-microvolt = <1700000>; > > vin-supply = <&vcc5v0_sys>; > > }; > > + > > + avdd: avdd { > > + compatible = "regulator-fixed"; > > + regulator-name = "avdd"; > > + regulator-always-on; > > + regulator-boot-on; > > + regulator-min-microvolt = <11000000>; > > + regulator-max-microvolt = <11000000>; > > + vin-supply = <&vcc3v3_s0>; > > + }; > > }; > > > > &cpu_l0 { > > @@ -428,8 +445,8 @@ regulator-state-mem { > > > > vcc3v0_touch: LDO_REG2 { > > regulator-name = "vcc3v0_touch"; > > - regulator-always-on; > > - regulator-boot-on; > > +// regulator-always-on; > > +// regulator-boot-on; > > regulator-min-microvolt = <3000000>; > > regulator-max-microvolt = <3000000>; > > regulator-state-mem { > > @@ -518,8 +535,8 @@ regulator-state-mem { > > > > vcc3v3_s0: SWITCH_REG2 { > > regulator-name = "vcc3v3_s0"; > > - regulator-always-on; > > - regulator-boot-on; > > +// regulator-always-on; > > +// regulator-boot-on; > > regulator-state-mem { > > regulator-off-in-suspend; > > }; > > @@ -593,6 +610,19 @@ fusb0: typec-portc@22 { > > vbus-supply = <&vcc5v0_typec>; > > status = "okay"; > > }; > > + > > + touch: touchscreen@5d { > > + compatible = "goodix,gt911"; > > + reg = <0x5d>; > > + AVDD28-supply = <&vcc3v0_touch>; > > + VDDIO-supply = <&vcc3v0_touch>; > > + interrupt-parent = <&gpio4>; > > + interrupts = <RK_PD5 IRQ_TYPE_EDGE_FALLING>; > > + irq-gpios = <&gpio4 RK_PD5 GPIO_ACTIVE_HIGH>; > > + reset-gpios = <&gpio4 RK_PD6 GPIO_ACTIVE_HIGH>; > > +// touchscreen-inverted-x; > > +// touchscreen-inverted-y; > > + }; > > }; > > > > &i2s0 { > > @@ -628,6 +658,88 @@ &io_domains { > > gpio1830-supply = <&vcc_3v0>; > > }; > > > > +&mipi_dsi { > > + status = "okay"; > > + clock-master; > > + > > + ports { > > + mipi_out: port@1 { > > + reg = <1>; > > + > > + mipi_out_panel: endpoint { > > + remote-endpoint = <&mipi_in_panel>; > > + }; > > + }; > > + }; > > + > > + mipi_panel: panel@0 { > > + compatible = "feiyang,fy07024di26a30d"; > > + reg = <0>; > > + backlight = <&backlight>; > > + reset-gpios = <&gpio4 25 GPIO_ACTIVE_HIGH>; > > +// enable-gpios = <&gpio4 25 GPIO_ACTIVE_HIGH>; > > + width-mm = <154>; > > + height-mm = <86>; > > + rotation = <0>; > > + avdd-supply = <&avdd>; > > + dvdd-supply = <&vcc3v3_s0>; > > + > > + display-timings { > > + native-mode = <&timing0>; > > + timing0: timing0 { > > + clock-frequency = <50000000>; > > + hactive = <1024>; > > + vactive = <600>; > > + hfront-porch = <160>; > > + hback-porch = <160>; > > + hsync-len = <10>; > > + vback-porch = <23>; > > + vfront-porch = <12>; > > + vsync-len = <1>; > > + hsync-active = <0>; > > + vsync-active = <0>; > > + pixelclk-active = <0>; > > + de-active = <0>; > > + }; > > + }; > > + > > + ports { > > + #address-cells = <1>; > > + #size-cells = <0>; > > + > > + port@0 { > > + reg = <0>; > > + > > + mipi_in_panel: endpoint { > > + remote-endpoint = <&mipi_out_panel>; > > + }; > > + }; > > + > > + port@1 { > > + reg = <1>; > > + > > + mipi1_in_panel: endpoint@1 { > > + remote-endpoint = <&mipi1_out_panel>; > > + }; > > + }; > > + }; > > + }; > > +}; > > + > > +&mipi_dsi1 { > > + status = "okay"; > > + > > + ports { > > + mipi1_out: port@1 { > > + reg = <1>; > > + > > + mipi1_out_panel: endpoint { > > + remote-endpoint = <&mipi1_in_panel>; > > + }; > > + }; > > + }; > > +}; > > + > > &pcie0 { > > ep-gpios = <&gpio2 RK_PD4 GPIO_ACTIVE_HIGH>; > > num-lanes = <4>; > > > > > >
diff --git a/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi index 687a5afa5d2c..af55a30297ae 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi @@ -20,6 +20,13 @@ chosen { stdout-path = "serial2:1500000n8"; }; + backlight: backlight { + compatible = "pwm-backlight"; + pwms = <&pwm0 0 1000000 0>; + brightness-levels = <0 4 8 16 32 64 128 255>; + default-brightness-level = <128>; + }; + clkin_gmac: external-gmac-clock { compatible = "fixed-clock"; clock-frequency = <125000000>; @@ -69,7 +76,7 @@ diy_led: led-1 { fan: pwm-fan { compatible = "pwm-fan"; - cooling-levels = <0 150 200 255>; + cooling-levels = <0 100 150 255>; #cooling-cells = <2>; fan-supply = <&vcc12v_dcin>; pwms = <&pwm1 0 50000 0>; @@ -220,6 +227,16 @@ vdd_log: vdd-log { regulator-max-microvolt = <1700000>; vin-supply = <&vcc5v0_sys>; }; + + avdd: avdd { + compatible = "regulator-fixed"; + regulator-name = "avdd"; + regulator-always-on; + regulator-boot-on; + regulator-min-microvolt = <11000000>; + regulator-max-microvolt = <11000000>; + vin-supply = <&vcc3v3_s0>; + }; }; &cpu_l0 { @@ -428,8 +445,8 @@ regulator-state-mem { vcc3v0_touch: LDO_REG2 { regulator-name = "vcc3v0_touch"; - regulator-always-on; - regulator-boot-on; +// regulator-always-on; +// regulator-boot-on; regulator-min-microvolt = <3000000>; regulator-max-microvolt = <3000000>; regulator-state-mem { @@ -518,8 +535,8 @@ regulator-state-mem { vcc3v3_s0: SWITCH_REG2 { regulator-name = "vcc3v3_s0"; - regulator-always-on; - regulator-boot-on; +// regulator-always-on; +// regulator-boot-on; regulator-state-mem { regulator-off-in-suspend; }; @@ -593,6 +610,19 @@ fusb0: typec-portc@22 { vbus-supply = <&vcc5v0_typec>; status = "okay"; }; + + touch: touchscreen@5d { + compatible = "goodix,gt911"; + reg = <0x5d>; + AVDD28-supply = <&vcc3v0_touch>; + VDDIO-supply = <&vcc3v0_touch>; + interrupt-parent = <&gpio4>; + interrupts = <RK_PD5 IRQ_TYPE_EDGE_FALLING>; + irq-gpios = <&gpio4 RK_PD5 GPIO_ACTIVE_HIGH>; + reset-gpios = <&gpio4 RK_PD6 GPIO_ACTIVE_HIGH>; +// touchscreen-inverted-x; +// touchscreen-inverted-y; + }; }; &i2s0 { @@ -628,6 +658,88 @@ &io_domains { gpio1830-supply = <&vcc_3v0>; }; +&mipi_dsi { + status = "okay"; + clock-master; + + ports { + mipi_out: port@1 { + reg = <1>; + + mipi_out_panel: endpoint { + remote-endpoint = <&mipi_in_panel>; + }; + }; + }; + + mipi_panel: panel@0 { + compatible = "feiyang,fy07024di26a30d"; + reg = <0>; + backlight = <&backlight>; + reset-gpios = <&gpio4 25 GPIO_ACTIVE_HIGH>; +// enable-gpios = <&gpio4 25 GPIO_ACTIVE_HIGH>; + width-mm = <154>; + height-mm = <86>; + rotation = <0>; + avdd-supply = <&avdd>; + dvdd-supply = <&vcc3v3_s0>; + + display-timings { + native-mode = <&timing0>; + timing0: timing0 { + clock-frequency = <50000000>; + hactive = <1024>; + vactive = <600>; + hfront-porch = <160>; + hback-porch = <160>; + hsync-len = <10>; + vback-porch = <23>; + vfront-porch = <12>; + vsync-len = <1>; + hsync-active = <0>; + vsync-active = <0>; + pixelclk-active = <0>; + de-active = <0>; + }; + }; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + + mipi_in_panel: endpoint { + remote-endpoint = <&mipi_out_panel>; + }; + }; + + port@1 { + reg = <1>; + + mipi1_in_panel: endpoint@1 { + remote-endpoint = <&mipi1_out_panel>; + }; + }; + }; + }; +}; + +&mipi_dsi1 { + status = "okay"; + + ports { + mipi1_out: port@1 { + reg = <1>; + + mipi1_out_panel: endpoint { + remote-endpoint = <&mipi1_in_panel>; + }; + }; + }; +}; + &pcie0 { ep-gpios = <&gpio2 RK_PD4 GPIO_ACTIVE_HIGH>; num-lanes = <4>;