No MIPI DSI ouput at the i.MX 8M Mini

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

No MIPI DSI ouput at the i.MX 8M Mini

1,034 Views
cklapsia
Contributor I

I am currently working on generating any kind of MIPI DSI signal out of the MCU "i.MX 8M Mini", placed on a symphony board V1.2. For that, the IC LVDS bridge chip SN65DSI83 has been removed on the VAR-SOM-chip, on which the MCU is located. In addition, I am using currently the existing driver file "panel-raydium-rm67191.c". Regarding the software, I did the following adaption in the kernel:

  • I took the dts file "fls-imx8mm-var-som", disabled the LVDS bridge:

dsi_lvds_bridge: sn65dsi84@2c {

      compatible = "ti,sn65dsi83";

      reg = <0x2c>;

      ti,dsi-lanes = <4>;

      ti,lvds-format = <1>;

      ti,lvds-bpp = <24>;

      ti,width-mm = <430>;

      ti,height-mm = <254>;

      enable-gpios = <&gpio2 11 GPIO_ACTIVE_HIGH>;

      pinctrl-names = "default";

      pinctrl-0 = <&pinctrl_lvds>;

      status = "disabled";

 

      display-timings {

         lvds {

            clock-frequency = <33000000>;

            hactive = <800>;

            vactive = <480>;

            hback-porch = <40>;

            hfront-porch = <40>;

            vback-porch = <29>;

            vfront-porch = <13>;

            hsync-len = <48>;

            vsync-len = <3>;

            hsync-active = <0>;

            vsync-active = <0>;

            de-active = <1>;

            pixelclk-active = <0>;

         };

      };

      /*

      port {

         dsi_lvds_bridge_in: endpoint {

            remote-endpoint = <&mipi_dsi_out>;

         };

      };

      */

  };

  • I added the MIPI DSI to the dts file in correspondence to the Raydium RM67191 as follows:

&mipi_dsi {

   status = "okay";

   fsl,clock-drop-level = <2>;

 

   panel@0 {

      #address-cells = <1>;

      #size-cells = <0>;

 

      compatible = "raydium,rm67191";

      reg = <0>;

      reset-gpios = <&gpio4 7 GPIO_ACTIVE_LOW>;

      dsi-lanes = <4>;

      video-mode = <2>;

      width-mm = <68>;

      height-mm = <121>;

 

      port@0 {

         reg = <0>;

         panel0_in: endpoint {

            remote-endpoint = <&mipi0_panel_out>;

         };

      };

   };

 

   ports {

      /delete-node/ port@1;

 

      port@1 {

         reg = <1>;

         mipi0_panel_out: endpoint {

            remote-endpoint = <&panel0_in>;

         };

      };

   };

};

.

.

.

&iomuxc {

   pinctrl-names = "default";

   imx8mm-var-som {

 

      pinctrl_lvds: lvdsgrp {

                 fsl,pins = <

                     MX8MM_IOMUXC_SD1_STROBE_GPIO2_IO11        0x16

                 >;

          };

 

      pinctrl_mipi_dsi_en: mipidsiengrp {

         fsl,pins = <

            MX8MM_IOMUXC_SAI1_TXD0_GPIO4_IO12         0x16

         >;

      };

   };

};

  • I changed two configuration in the file my_defconfig:

CONFIG_DRM_PANEL_RAYDIUM_RM67191=m

CONFIG_DRM_IMX_LDB=n

Once I tried to boot the compiled kernel and I got the following output of the serial terminal:

[drm] Supports vblank timestamp caching Rev 2 (21.10.2013).

[drm] No driver support for vblank timestamp query.

imx-drm display-subsystem: bound imx-lcdif-crtc.0 (ops lcdif_crtc_ops)

imx-drm display-subsystem: failed to bind 32e10000.mipi_dsi (ops imx_sec_dsim_ops): -517

imx-drm display-subsystem: master bind failed: -517

(-> Please find the whole boot log files in the attachment)

 

The booting stops unfinished and there are no signals detectable on the output of the MCU.

It should be noted, that no display panel is connected to the symphony board (resulting in,

no connection to the MCU).

I also checked the "fsl-imx8mm.dtsi" and the "mipi_dsi@32e10000" is disabled:

mipi_dsi: mipi_dsi@32E10000 {

      #address-cells = <1>;

      #size-cells = <0>;

      compatible = "fsl,imx8mm-mipi-dsim";

      reg = <0x0 0x32e10000 0x0 0x400>;

      clocks = <&clk IMX8MM_CLK_DSI_CORE_DIV>,

         <&clk IMX8MM_CLK_DSI_PHY_REF_DIV>;

      clock-names = "cfg", "pll-ref";

      assigned-clocks = <&clk IMX8MM_CLK_DSI_CORE_SRC>,

             <&clk IMX8MM_CLK_DSI_PHY_REF_SRC>;

      assigned-clock-parents = <&clk IMX8MM_SYS_PLL1_266M>,

               <&clk IMX8MM_VIDEO_PLL1_OUT>;

      assigned-clock-rates = <266000000>, <594000000>;

      interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>;

      dsi-gpr = <&dispmix_gpr>;

      power-domains = <&mipi_pd>;

      status = "disabled";

 

      port@0 {

         dsim_from_lcdif: endpoint {

            remote-endpoint = <&lcdif_to_dsim>;

         };

      };

   };

What can be the causes of the bidning failure messages and how can I resolve them?

Many thanks in advance

Best regards

Christian

Labels (1)
0 Kudos
2 Replies

1,020 Views
igorpadykov
NXP Employee
NXP Employee

Hi Christian

 

reason for failures may be that driver expects to receive some data from panel, like in

function rad_bl_get_brightness(), mipi_dsi_dcs_get_display_brightness() in
https://source.codeaurora.org/external/imx/linux-imx/tree/drivers/gpu/drm/panel/panel-raydium-rm6719...
mipi_dsi_dcs_get_display_brightness(call mipi_dsi_dcs_read()) in ../gpu/drm/drm_mipi_dsi.c

So one can try to debug driver and remove such calls to panel.

 

Best regards
igor

1,001 Views
cklapsia
Contributor I

Dear Igor,

Thank you very much for your support, I really appreciate it.

As suggested, I made the following changes:

commit 16983b1c31b1a3652718bfe85622484c2886d362
Author: Klapsia Christian <c.klapsia@tracpilot.com>
Date: Wed May 5 16:28:23 2021 +0200

my changes

diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c
index 4b47226b90d4..39ab60a6a69c 100644
--- a/drivers/gpu/drm/drm_mipi_dsi.c
+++ b/drivers/gpu/drm/drm_mipi_dsi.c
@@ -794,8 +794,9 @@ int mipi_dsi_dcs_get_power_mode(struct mipi_dsi_device *dsi, u8 *mode)
{
ssize_t err;

- err = mipi_dsi_dcs_read(dsi, MIPI_DCS_GET_POWER_MODE, mode,
- sizeof(*mode));
+ //err = mipi_dsi_dcs_read(dsi, MIPI_DCS_GET_POWER_MODE, mode,sizeof(*mode));
+ err = 10;
+
if (err <= 0) {
if (err == 0)
err = -ENODATA;
@@ -819,8 +820,8 @@ int mipi_dsi_dcs_get_pixel_format(struct mipi_dsi_device *dsi, u8 *format)
{
ssize_t err;

- err = mipi_dsi_dcs_read(dsi, MIPI_DCS_GET_PIXEL_FORMAT, format,
- sizeof(*format));
+ //err = mipi_dsi_dcs_read(dsi, MIPI_DCS_GET_PIXEL_FORMAT, format,sizeof(*format));
+ err = 10;
if (err <= 0) {
if (err == 0)
err = -ENODATA;
@@ -1077,8 +1078,10 @@ int mipi_dsi_dcs_get_display_brightness(struct mipi_dsi_device *dsi,
{
ssize_t err;

- err = mipi_dsi_dcs_read(dsi, MIPI_DCS_GET_DISPLAY_BRIGHTNESS,
- brightness, sizeof(*brightness));
+ //err = mipi_dsi_dcs_read(dsi, MIPI_DCS_GET_DISPLAY_BRIGHTNESS,brightness, sizeof(*brightness));
+ err = 10;
+
+
if (err <= 0) {
if (err == 0)
err = -ENODATA;
diff --git a/drivers/gpu/drm/panel/panel-raydium-rm67191.c b/drivers/gpu/drm/panel/panel-raydium-rm67191.c
index 7e9682af063b..f13b3263d395 100644
--- a/drivers/gpu/drm/panel/panel-raydium-rm67191.c
+++ b/drivers/gpu/drm/panel/panel-raydium-rm67191.c
@@ -479,7 +479,10 @@ static int rad_bl_get_brightness(struct backlight_device *bl)

dsi->mode_flags &= ~MIPI_DSI_MODE_LPM;

- ret = mipi_dsi_dcs_get_display_brightness(dsi, &brightness);
+ //ret = mipi_dsi_dcs_get_display_brightness(dsi, &brightness);
+ ret =10;
+ brightness=10;
+
if (ret < 0)
return ret;

@@ -510,7 +513,7 @@ static int rad_bl_update_status(struct backlight_device *bl)
}

static const struct backlight_ops rad_bl_ops = {
- .update_status = rad_bl_update_status,
+ .update_status = rad_bl_update_status,
.get_brightness = rad_bl_get_brightness,
};

But unfortunately I still get the same booting problem. Perhaps I am missing something? Do you have any further suggestions?

Thank you and I look forward to your reply

Kind regards,
Christian

0 Kudos