parallel display for rzg2l /rzv2l (5.10 kernel)

Hi 
Can you list supported parallel(not lvds parallel bridge) displays for kernel version 5.10 Also if possible can you provide dts entry for parallel display

Parents Reply Children
  • Try adding #address-cells = <1>; and #size-cells = <0>; to your node. I have seen before that if they are missing, it does not work. The kernel documentation actually says they are required.

    	panel_rgb: panel-rgb {
    		compatible = "giantplus,gpm940b0";
    
    		port {
    			#address-cells = <1>;
    			#size-cells = <0>;
    
    			panel_in_rgb: endpoint {
    				remote-endpoint = <&du_out_rgb>;
    			};
    		};
    
    	};

    i have added debugs in probe functions and it seems that its not even probing(panel_simple.c and rcar_du_drv.c )


    The only other suggestion is to boot the kernel with initcall_debug to see if the rcar_du and panel_simple drivers are being loaded on kernel boot.

    jira-gasg.renesas.eu/.../Linux Debug Tricks

  • hello chris i tried adding the following things but doesnt seems to work.

     #address-cells = <1>; and #size-cells = <0>;
  • OK, then add initcall_debug to the kernel command line to see if those drivers are really getting loaded or not.

  • Hi anzal,

    I recheck RZ/V2L to support your panel and it can register the panel normally.

    root@smarc-rzg2l:~# dmesg | grep drm
    [    1.395664] [drm] Initialized rcar-du 1.0.0 20130110 for 10890000.display on minor 0
    [    1.403487] [drm] Device 10890000.display probed
    [    1.476741] rcar-du 10890000.display: [drm] fb0: rcar-dudrmfb frame buffer device
    
    root@smarc-rzg2l:~# modetest -M rcar-du
    Encoders:
    id      crtc    type    possible crtcs  possible clones
    38      37      none    0x00000001      0x00000001
    44      0       Virtual 0x00000001      0x00000002
    
    Connectors:
    id      encoder status          name            size (mm)       modes   encoders
    39      38      connected       DPI-1           0x0             1       38
      modes:
            index name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot)
      #0 480x272 51.25 480 488 531 572 272 276 297 307 9000 flags: ; type: preferred, driver

    I tested in v5.10.201-cip41. If you used old kernel version, please update to cip41 (3.0.6 BSP package).

    Here is the diff that I support. Could you retry in your side?

    Devicetree: RZ/V2L (disable adc due to pin conflict)

    diff --git a/arch/arm64/boot/dts/renesas/r9a07g054l2-smarc.dts b/arch/arm64/boot/dts/renesas/r9a07g054l2-smarc.dts
    index 3857f9f0a67e..9e5b607756c2 100644
    --- a/arch/arm64/boot/dts/renesas/r9a07g054l2-smarc.dts
    +++ b/arch/arm64/boot/dts/renesas/r9a07g054l2-smarc.dts
    @@ -59,4 +59,98 @@ isp_work0: SIMPLE_ISP {
                            reg = <0x0 0xB4000000 0x0 0x03000000>;
                    };
            };
    +
    +       panel_rgb: panel-rgb {
    +//             compatible = "giantplus,gpm940b0";   /* Used this compatible if the panel is supported in panel-simple */
    +               compatible = "panel-dpi";
    +               /* panel-timing is used for "panel-dpi" compatible */
    +               panel-timing {
    +                       clock-frequency = <9000000>;
    +                       hactive = <480>;
    +                       vactive = <272>;
    +                       hsync-len = <43>;
    +                       hfront-porch = <8>;
    +                       hback-porch = <41>;
    +                       vfront-porch = <4>;
    +                       vback-porch = <10>;
    +                       vsync-len = <21>;
    +               };
    +
    +               port {
    +                       panel_in_rgb: endpoint {
    +                               remote-endpoint = <&du_out_rgb>;
    +                       };
    +               };
    +
    +       };
    +};
    +
    +&pinctrl {
    +        du_pins: du {
    +               data {
    +                       pinmux = <RZG2L_PORT_PINMUX(14, 1, 1)>,
    +                                <RZG2L_PORT_PINMUX(15, 0, 1)>,
    +                                <RZG2L_PORT_PINMUX(15, 1, 1)>,
    +                                <RZG2L_PORT_PINMUX(16, 0, 1)>,
    +                                <RZG2L_PORT_PINMUX(16, 1, 1)>,
    +                                <RZG2L_PORT_PINMUX(17, 0, 1)>,
    +                                <RZG2L_PORT_PINMUX(17, 1, 1)>,
    +                                <RZG2L_PORT_PINMUX(17, 2, 1)>,
    +                                <RZG2L_PORT_PINMUX(11, 0, 1)>,
    +                                <RZG2L_PORT_PINMUX(11, 1, 1)>,
    +                                <RZG2L_PORT_PINMUX(12, 0, 1)>,
    +                                <RZG2L_PORT_PINMUX(12, 1, 1)>,
    +                                <RZG2L_PORT_PINMUX(13, 0, 1)>,
    +                                <RZG2L_PORT_PINMUX(13, 1, 1)>,
    +                                <RZG2L_PORT_PINMUX(13, 2, 1)>,
    +                                <RZG2L_PORT_PINMUX(14, 0, 1)>,
    +                                <RZG2L_PORT_PINMUX(7, 2, 1)>,
    +                                <RZG2L_PORT_PINMUX(8, 0, 1)>,
    +                                <RZG2L_PORT_PINMUX(8, 1, 1)>,
    +                                <RZG2L_PORT_PINMUX(8, 2, 1)>,
    +                                <RZG2L_PORT_PINMUX(9, 0, 1)>,
    +                                <RZG2L_PORT_PINMUX(9, 1, 1)>,
    +                                <RZG2L_PORT_PINMUX(10, 0, 1)>,
    +                                <RZG2L_PORT_PINMUX(10, 1, 1)>;
    +               };
    +
    +               sync {
    +                       pinmux = <RZG2L_PORT_PINMUX(6, 1, 1)>, /* HSYNC */
    +                                <RZG2L_PORT_PINMUX(7, 0, 1)>; /* VSYNC */
    +               };
    +
    +               de {
    +                       pinmux = <RZG2L_PORT_PINMUX(7, 1, 1)>; /* DE */
    +               };
    +
    +               clk {
    +                       pinmux = <RZG2L_PORT_PINMUX(6, 0, 1)>; /* CLK */
    +               };
    +       };
    +};
    +
    +&dsi0 {
    +       status = "disabled";
    +};
    +
    +&adv7535 {
    +       status = "disabled";
    +};
    +
    +&du {
    +       pinctrl-0 = <&du_pins>;
    +       pinctrl-names = "default";
    +       status = "okay";
    +
    +       ports {
    +               port@0 {
    +                       du_out_rgb: endpoint {
    +                                               remote-endpoint = <&panel_in_rgb>;
    +                       };
    +               };
    +       };
    +};
    +
    +&adc {
    +        status = "disabled";
     };
    

    If you use "compatible = "giantplus,gpm940b0"", please comment out the "panel-dpi" and its timing in devicetree and update the panel-simple.c driver with below diff:

    diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
    index 35a3ceae9424..1588506d43f2 100644
    --- a/drivers/gpu/drm/panel/panel-simple.c
    +++ b/drivers/gpu/drm/panel/panel-simple.c
    @@ -1965,22 +1965,22 @@ static const struct panel_desc giantplus_gpg482739qs5 = {
            .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
     };
    
    -static const struct display_timing giantplus_gpm940b0_timing = {
    -       .pixelclock = { 13500000, 27000000, 27500000 },
    -       .hactive = { 320, 320, 320 },
    -       .hfront_porch = { 14, 686, 718 },
    -       .hback_porch = { 50, 70, 255 },
    -       .hsync_len = { 1, 1, 1 },
    -       .vactive = { 240, 240, 240 },
    -       .vfront_porch = { 1, 1, 179 },
    -       .vback_porch = { 1, 21, 31 },
    -       .vsync_len = { 1, 1, 6 },
    -       .flags = DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW,
    +static const struct drm_display_mode giantplus_gpm940b0_mode = {
    +        .clock          = 9000,
    +        .hdisplay       = 480,
    +        .hsync_start    = 480 + 8,
    +        .hsync_end      = 480 + 8 + 43,
    +        .htotal         = 800 + 8 + 43 + 41,
    +        .vdisplay       = 272,
    +        .vsync_start    = 272 + 4,
    +        .vsync_end      = 272 + 4 + 21,
    +        .vtotal         = 272 + 4 + 21 + 10,
    +        .flags          = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
     };
    
     static const struct panel_desc giantplus_gpm940b0 = {
    -       .timings = &giantplus_gpm940b0_timing,
    -       .num_timings = 1,
    +       .modes = &giantplus_gpm940b0_mode,
    +       .num_modes = 1,
            .bpc = 8,
            .size = {
                    .width = 60,
    

    Also enable "DRM_PANEL_SIMPLE" config:

    diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
    index 938efecc8d54..3d06c27d3eaf 100644
    --- a/arch/arm64/configs/defconfig
    +++ b/arch/arm64/configs/defconfig
    @@ -444,3 +444,4 @@ CONFIG_RZV2M_TIM_CNT=y
     CONFIG_COUNTER=y
     CONFIG_RZ_MTU3_CNT=y
     CONFIG_RZ_TIMER_MTU3=y
    +CONFIG_DRM_PANEL_SIMPLE=y
    

  • i have enabled the driver in defconfig but doesnt seems to work driver is not being loaded. What to do about it.

  • please run "zcat /proc/config. gz | grep PANEL_SIMPLE" then send the output here.

    By the way, do you make kernel manually or build by yocto?

  • please run "zcat /proc/config. gz | grep PANEL_SIMPLE" then send the output here.

  • i did and i updated it here

    calixto_admin@localhost:~$ zcat /proc/config. gz | grep PANEL_SIMPLE
    gzip: /proc/config..gz: No such file or directory
    gzip: gz.gz: No such file or directory

  • sorry, config.gz . It does not have a space ....

  • calixto_admin@localhost:~$ zcat /proc/config.gz | grep PANEL_SIMPLE
    # CONFIG_DRM_PANEL_SIMPLE is not set

  • .... it is not set. You should make defconfig to apply your configs changed!

  • here is the defconfig file should i add anything else to this