AnsweredAssumed Answered

i.MX6DL devicetree problem with framebuffer after Kernel upgrade

Question asked by Stefan Birkholz on Nov 28, 2019
Latest reply on Dec 2, 2019 by Diego Adrian Cuevas

Hello,

 

while updating from a Kernel 4.1.44 to a Kernel 5.2.11 (the latter taken from GitHub - Freescale/linux-fslc: Linux kernel source tree  branch "5.2.x+fslc") - we want to use the "etnaviv" driver and the Kernel 5.2.11 is meant to be a stepping stone towards the 5.4.x LTS Kernel) - I cannot configure the framebuffer nor the display correctly in the devicetree.

 

With the 4.1.44 Kernel both framebuffer and display are configured correctly - the cmdline of the Kernel uses "video=mxcfb0:dev=lcd,CLAA-WVGA,if=RGB666" and the devicetree has the relevant nodes:

 

mxcfb0: fb@0 {
compatible = "fsl,mxc_sdc_fb";
disp_dev = "lcd";
interface_pix_fmt = "RGB666";
mode_str = "CLAA-WVGA";
default_bpp = <32>;
int_clk = <0>;
late_init = <0>;
status = "okay";
};

 

lcd: lcd@0 {
compatible = "fsl,lcd";
ipu_id = <0>;
disp_id = <1>;
default_ifmt = "RGB666";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_ipu1_lcd>;
status = "okay";
};

 

ldb: ldb@020e0008 {
#address-cells = <1>;
#size-cells = <0>;
gpr = <&gpr>;
status = "okay";

lvds-channel@0 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0>;
status = "okay";
};

lvds-channel@1 {
#address-cells = <1>;
#size-cells = <0>;
reg = <1>;
status = "okay";
};
};

 

(NB: I will omit the &pinctrl_ip1_lcd entries, since they are the same)

 

The 5.2.11 Kernel takes the parameter "video=mxc_elcdif_fb:1024x768@60,bpp=18" and the relevant devicetree nodes are:

 

drm: display-subsystem {
compatible = "fsl,imx-display-subsystem";
ports = <&ipu1_di0>, <&ipu1_di1>;
};

 

ipu1_di0: port@2 {
#address-cells = <1>;
#size-cells = <0>;
reg = <2>;

ipu1_di0_disp0: endpoint@0 {
reg = <0>;

remote-endpoint = <&lcd_display_in>;
};

ipu1_di0_hdmi: endpoint@1 {
reg = <1>;
remote-endpoint = <&hdmi_mux_0>;
};

ipu1_di0_mipi: endpoint@2 {
reg = <2>;
remote-endpoint = <&mipi_mux_0>;
};

ipu1_di0_lvds0: endpoint@3 {
reg = <3>;
remote-endpoint = <&lvds0_mux_0>;
};

ipu1_di0_lvds1: endpoint@4 {
reg = <4>;
remote-endpoint = <&lvds1_mux_0>;
};
};

 

lcd_display: disp0 {
compatible = "fsl,imx-parallel-display";
#address-cells = <1>;
#size-cells = <0>;
interface-pix-fmt = "rgb666";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_ipu1_lcdif>;
status = "enabled";

port@0 {
reg = <0>;

lcd_display_in: endpoint {
remote-endpoint = <&ipu1_di0_disp0>;
};
};

port@1 {
reg = <1>;

lcd_display_out: endpoint {
remote-endpoint = <&lcd_panel_in>;
};
};
};

 

panel: panel {
compatible = "panel-lvds";
backlight = <&backlight>;
status = "okay";

data-mapping = "jeida-24";
width-mm = <300>;
height-mm = <200>;

port {
lcd_panel_in: endpoint {
remote-endpoint = <&lcd_display_out>;
};
};

panel-timing {
/* 1024x768 @60 Hz */
clock-frequency = <60000000>;
hactive = <1024>;
vactive = <768>;
hsync-len = <10>;
hfront-porch = <0>;
hback-porch = <0>;
vsync-len = <10>;
vfront-porch = <0>;
vback-porch = <0>;
};
};

 

While the first (4.1.44 Kernel + corresponding devicetree) configuration works perfectly fine, the second fails to create a /dev/fb0 device and has the following messages in the dmesg log:

 

Framebuffer /dev/fb0 not detected

[ 2.400629] imx-drm display-subsystem: no available port

 

Do you have an idea what might be wrong?

 

Kind regards,

 Stefan Birkholz

Outcomes