Imx8 configure mipi-dsi, the screen does not display(Q10.0.0_2.2.0_AUTO)

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

Imx8 configure mipi-dsi, the screen does not display(Q10.0.0_2.2.0_AUTO)

Jump to solution
2,588 Views
relax-wu
Contributor IV

SDK:Q10.0.0_2.2.0_AUTO

lunch mek_8q_car-userdebug

mipi-->ds90ub941-->ds90ub948-->lvds

Mipi-dsi is configured in Android
The rear_view_camera demo is used, which is also configured as mipi-dsi.
The mipi signal waveform cannot be measured with an oscilloscope.

 

When lunch mek_8q_car2-userdebug, the display is normal, and the waveform signal can be measured with an oscilloscope

 

 

0 Kudos
1 Solution
2,510 Views
relax-wu
Contributor IV
I have solved the problem, but I don’t know if this is completely correct
Observe the printing information and notice this abnormal printing
 
[ 1.318608] imx-drm display-subsystem: parent device of /bus@56220000/dsi_host@56228000 is not available
[ 1.328133] imx-drm display-subsystem: parent device of /bus@56220000/dsi_host@56248000 is not available
 
Find the corresponding code: vendor/nxp-opensource/kernel_imx/drivers/gpu/drm/drm_of.c
drm_of_component_probe_with_match is called by vendor/nxp-opensource/kernel_imx/drivers/gpu/drm/imx/imx-drm-core.c
drm_of_component_probe_with_match
    port = of_parse_phandle(dev->of_node, "ports", i);
    for_each_child_of_node(port, ep) {
        remote = of_graph_get_remote_port_parent(ep);
        if (!remote || !of_device_is_available(remote)) {
            of_node_put(remote);
            continue;
        } else if (!of_device_is_available(remote->parent)) {
            dev_warn(dev, "parent device of %pOF is not available\n",
                    remote);
            of_node_put(remote);
            continue;
        }
 
        drm_of_component_match_add(dev, &match, compare_of,
                           remote);
        of_node_put(remote);
    }
    of_node_put(port);
Add printing information and find that the value of remote is as follows
 
/bus@56220000/ldb@562210e0/lvds-channel@0             The device tree is disabled
/bus@56220000/ldb@562210e0/lvds-channel@1             The device tree is disabled
/bus@56220000/dsi_host@56228000
/bus@56220000/ldb@562410e0/lvds-channel@0             The device tree is disabled
/bus@56220000/ldb@562410e0/lvds-channel@1             The device tree is disabled
/bus@56220000/dsi_host@56248000
 
 
The parent node of /bus@56220000/dsi_host@56228000 and /bus@56220000/dsi_host@56248000 is lvds_subsys shared by M4. At the beginning, it was disabled, so an error was reported. It also causes that when Android starts, when bind is executed, there is no dsi_host node, and no display
 
The official default is LVDS. The parent node of /bus@56220000/ldb@562210e0/lvds-channel@0 is ldb1, which is okay by default, so there is no problem.
 
So you should set display_subsystem to disabled, and then add it to the M4 share. Modify as follows:
--- a/vendor/nxp-opensource/kernel_imx/arch/arm64/boot/dts/freescale/imx8qxp-ss-dc.dtsi
+++ b/vendor/nxp-opensource/kernel_imx/arch/arm64/boot/dts/freescale/imx8qxp-ss-dc.dtsi
@@ -41,7 +41,7 @@
};
 
/ {
-       display-subsystem {
+       display_subsystem: display-subsystem {
                compatible = "fsl,imx-display-subsystem";
                ports = <&dpu_disp0>, <&dpu_disp1>;
        };
 
--- a/vendor/nxp-opensource/kernel_imx/arch/arm64/boot/dts/freescale/imx8qxp-mek-car.dts
+++ b/vendor/nxp-opensource/kernel_imx/arch/arm64/boot/dts/freescale/imx8qxp-mek-car.dts
@@ -26,12 +26,17 @@
        status = "disabled";
};
 
+&display_subsystem {
+       status = "disabled";
+};
+
&vehicle_rpmsg_m4 {
        #address-cells = <2>;
        #size-cells = <2>;
        status = "okay";
        ranges;
        fsl,resources = <&lvds_subsys>,
+                       <&display_subsystem>,
                        <&dc0_subsys>,
                        <&img_subsys>;

View solution in original post

0 Kudos
5 Replies
2,554 Views
jimmychan
NXP TechSupport
NXP TechSupport

Could you tell me which board are you using?

Yes, there are different between mek_8q_car and mek_8q_car2. Please read the Android User's Guide.pdf Chapter 8.10 for more details.

 

0 Kudos
2,543 Views
relax-wu
Contributor IV

And M4 log

0 Kudos
2,545 Views
relax-wu
Contributor IV

I am using MCIMX8QXP-CPU (MEK), I currently only configure mipi-dsi, the attachment is my modification, and log

0 Kudos
2,514 Views
jimmychan
NXP TechSupport
NXP TechSupport

"When lunch mek_8q_car2-userdebug, the display is normal".

Could you send me the log of the normal one?

Thanks.

0 Kudos
2,511 Views
relax-wu
Contributor IV
I have solved the problem, but I don’t know if this is completely correct
Observe the printing information and notice this abnormal printing
 
[ 1.318608] imx-drm display-subsystem: parent device of /bus@56220000/dsi_host@56228000 is not available
[ 1.328133] imx-drm display-subsystem: parent device of /bus@56220000/dsi_host@56248000 is not available
 
Find the corresponding code: vendor/nxp-opensource/kernel_imx/drivers/gpu/drm/drm_of.c
drm_of_component_probe_with_match is called by vendor/nxp-opensource/kernel_imx/drivers/gpu/drm/imx/imx-drm-core.c
drm_of_component_probe_with_match
    port = of_parse_phandle(dev->of_node, "ports", i);
    for_each_child_of_node(port, ep) {
        remote = of_graph_get_remote_port_parent(ep);
        if (!remote || !of_device_is_available(remote)) {
            of_node_put(remote);
            continue;
        } else if (!of_device_is_available(remote->parent)) {
            dev_warn(dev, "parent device of %pOF is not available\n",
                    remote);
            of_node_put(remote);
            continue;
        }
 
        drm_of_component_match_add(dev, &match, compare_of,
                           remote);
        of_node_put(remote);
    }
    of_node_put(port);
Add printing information and find that the value of remote is as follows
 
/bus@56220000/ldb@562210e0/lvds-channel@0             The device tree is disabled
/bus@56220000/ldb@562210e0/lvds-channel@1             The device tree is disabled
/bus@56220000/dsi_host@56228000
/bus@56220000/ldb@562410e0/lvds-channel@0             The device tree is disabled
/bus@56220000/ldb@562410e0/lvds-channel@1             The device tree is disabled
/bus@56220000/dsi_host@56248000
 
 
The parent node of /bus@56220000/dsi_host@56228000 and /bus@56220000/dsi_host@56248000 is lvds_subsys shared by M4. At the beginning, it was disabled, so an error was reported. It also causes that when Android starts, when bind is executed, there is no dsi_host node, and no display
 
The official default is LVDS. The parent node of /bus@56220000/ldb@562210e0/lvds-channel@0 is ldb1, which is okay by default, so there is no problem.
 
So you should set display_subsystem to disabled, and then add it to the M4 share. Modify as follows:
--- a/vendor/nxp-opensource/kernel_imx/arch/arm64/boot/dts/freescale/imx8qxp-ss-dc.dtsi
+++ b/vendor/nxp-opensource/kernel_imx/arch/arm64/boot/dts/freescale/imx8qxp-ss-dc.dtsi
@@ -41,7 +41,7 @@
};
 
/ {
-       display-subsystem {
+       display_subsystem: display-subsystem {
                compatible = "fsl,imx-display-subsystem";
                ports = <&dpu_disp0>, <&dpu_disp1>;
        };
 
--- a/vendor/nxp-opensource/kernel_imx/arch/arm64/boot/dts/freescale/imx8qxp-mek-car.dts
+++ b/vendor/nxp-opensource/kernel_imx/arch/arm64/boot/dts/freescale/imx8qxp-mek-car.dts
@@ -26,12 +26,17 @@
        status = "disabled";
};
 
+&display_subsystem {
+       status = "disabled";
+};
+
&vehicle_rpmsg_m4 {
        #address-cells = <2>;
        #size-cells = <2>;
        status = "okay";
        ranges;
        fsl,resources = <&lvds_subsys>,
+                       <&display_subsystem>,
                        <&dc0_subsys>,
                        <&img_subsys>;
0 Kudos