1

I actually need some help of defining the kernel/linux DTS file and use it together with the uboot videoargs.

In use is the 5.4.47 uboot and kernel/linux from a NXP imx8m YOCTO project.

In uboot I already can use 5 different MIPI DSI display panels and a HDMI adapter from nxp. To configure the displays type in uboot, I use the video_link environment variable. This works fine for me and can easily be extended and configured. To get this work my uboot DTS looks like this:

#include <dt-bindings/usb/pd.h>
#include "imx8mm.dtsi"

/ {
    model = "My own board";
    compatible = "fsl,imx8mm-evk", "fsl,imx8mm";
    
    .
    .
    .
    
    dsi_host: dsi-host {
        compatible = "samsung,sec-mipi-dsi";
        status = "okay";
    };  

    01_panel {
        compatible = "mydisplay,01_display";
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_mipi_dsi_en>;
        reset-gpio = <&gpio1 8 GPIO_ACTIVE_LOW>;
        dsi-lanes = <4>;
        video-mode = <2>;   /* 0: burst mode
                     * 1: non-burst mode with sync event
                     * 2: non-burst mode with sync pulse
                     */
        panel-width-mm = <67>;
        panel-height-mm = <121>;
        status = "okay";

        port {
            01_from_dsim: endpoint {
                remote-endpoint = <&dsim_to_01>;
            };
        };
    };

    02_panel {
        compatible = "mydisplay,02_display";
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_mipi_dsi_en>;
        reset-gpio = <&gpio1 8 GPIO_ACTIVE_LOW>;
        dsi-lanes = <4>;
        video-mode = <2>;   /* 0: burst mode
                     * 1: non-burst mode with sync event
                     * 2: non-burst mode with sync pulse
                     */
        panel-width-mm = <67>;
        panel-height-mm = <121>;
        status = "okay";

        port {
            02_from_dsim: endpoint {
                remote-endpoint = <&dsim_to_02>;
            };
        };
    };

    .
    .
    .
};

.
.
.

&mipi_dsi {
    status = "okay";

    port@1 {
        dsim_to_adv7535: endpoint {
            remote-endpoint = <&adv7535_from_dsim>;
        };
    };

    port@2 {
        dsim_to_01: endpoint {
            remote-endpoint = <&01_from_dsim>;
        };
    };

    port@3 {
        dsim_to_02: endpoint {
            remote-endpoint = <&02_from_dsim>;
        };
    };
    
    .
    .
    .
};

Now I want to use the same displays in kernel/linux, of course. I first tried the same DTS structure like above from uboot DTS file. I also used the following configuration of the kernel/linux DTS:

#include "imx8mm.dtsi"

/ {
    model = "My own board";
    compatible = "fsl,imx8mm-flunder", "fsl,imx8mm";
    reserved-memory {
        #address-cells = <2>;
        #size-cells = <2>;
        ranges;

        rpmsg_reserved: rpmsg@0xb8000000 {
            no-map;
            reg = <0 0xb8000000 0 0x400000>;
        };
    };
    
    .
    .
    .
};

.
.
.

&mipi_dsi {
  status = "okay";

    port@1 {
        dsim_to_adv7535: endpoint {
            remote-endpoint = <&adv7535_from_dsim>;
        };
    };

    panel@0 {
        compatible = "mydisplay,01_display";
        pinctrl-names = "default";
        reg = <0>;
        pinctrl-0 = <&pinctrl_mipi_dsi_en>;
        reset-gpio = <&gpio1 8 GPIO_ACTIVE_LOW>;
        dsi-lanes = <4>;
        video-mode = <2>;   /* 0: burst mode
                        * 1: non-burst mode with sync event
                        * 2: non-burst mode with sync pulse
                        */
        panel-width-mm = <62>;
        panel-height-mm = <110>;
        status = "okay";
    };

    panel@1 {
        compatible = "mydisplay,02_display";
        pinctrl-names = "default";
        reg = <0>;
        pinctrl-0 = <&pinctrl_mipi_dsi_en>;
        reset-gpio = <&gpio1 8 GPIO_ACTIVE_LOW>;
        dsi-lanes = <4>;
        video-mode = <2>;   /* 0: burst mode
                        * 1: non-burst mode with sync event
                        * 2: non-burst mode with sync pulse
                        */
        panel-width-mm = <62>;
        panel-height-mm = <110>;
        status = "okay";
    };
};

.
.
.

The second variant ends in the usage of the panel 0, while the kernel boots. But in both variants I was not able to tell the kernel/linux, from the uboot side, which display I want to use.

As boot- or videoargs from uboot side I tested many variants without any success.

A short example list you can see here:

video=imx-drm:720x1280@60
primary_display=imx-drm
video=DSI-1:dev=01,720x1280@60
video=mxcfb0:dev=ldb,01_panel,if=RGB24
video=mxcfb0:dev=mipi_dsi,01_panel,if=RGB24
video=DSI-1:dev=01_panel
video=mxcfb0:dev=mipi_dsi,720x1280M@60,if=RGB24
video=mxcfb0:dev=ldb,720x1280M@60,if=RGB24
video=DSI-1:720x1280@60

In my opinion the first configuration, like I use in uboot, is the correct one, but I end in the questions:

  • How is the correct configuration of the kernel/linux DTS file for more than one MIPI DSI Display?

  • How can I tell the Kernel while booting which display it has to use?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.