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:
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>;
};
};
*/
};
&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
>;
};
};
};
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
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
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