Hi,
we have a custom board with imx8mp SOM running native LVDS with fsl,dual-channel. After upgrading to 6.6 Kernel the dual-channel mode only uses a half of display slit vertically, with very small and blurred
text. It seems that only one lvds channel works. When we disable fsl,dual-channel, the display is back to normal. We have not changed any timing for the display in 6.6.
root@arm-aarch64-cortexa53:~# uname -a
Linux arm-aarch64-cortexa53 6.6.84-0 #1 SMP PREEMPT Wed Apr 30 17:53:10 UTC 2025 aarch64 GNU/Linux
We have following custom clock rate enabled:
--- a/arch/arm64/boot/dts/freescale/imx8mp.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mp.dtsi
@@ -752,7 +752,7 @@ clk: clock-controller@30380000 {
<800000000>,
<393216000>,
<361267200>,
- <1039500000>;
+ <840000000>;
};
src: reset-controller@30390000 {
@@ -1502,7 +1502,7 @@ media_blk_ctrl: blk-ctrl@32ec0000 {
<&clk IMX8MP_VIDEO_PLL1_OUT>,
<&clk IMX8MP_VIDEO_PLL1_OUT>;
assigned-clock-rates = <500000000>, <200000000>,
- <0>, <0>, <1039500000>;
+ <0>, <0>, <840000000>;
#power-domain-cells = <1>;
};
diff --git a/drivers/clk/imx/clk-pll14xx.c b/drivers/clk/imx/clk-pll14xx.c
index 6c17786ecb9f..74a4e3978b1e 100644
--- a/drivers/clk/imx/clk-pll14xx.c
+++ b/drivers/clk/imx/clk-pll14xx.c
@@ -60,10 +60,15 @@ static const struct imx_pll14xx_rate_table imx_pll1416x_tbl[] = {
};
static const struct imx_pll14xx_rate_table imx_pll1443x_tbl[] = {
- PLL_1443X_RATE(1039500000U, 173, 2, 1, 16384),
- PLL_1443X_RATE(650000000U, 325, 3, 2, 0),
- PLL_1443X_RATE(594000000U, 198, 2, 2, 0),
- PLL_1443X_RATE(519750000U, 173, 2, 2, 16384),
+ PLL_1443X_RATE(1039500000U, 173, 2, 1, 16384),
+ PLL_1443X_RATE(840000000U, 140, 2, 1, 0), // VCO=1680, PLL=840 (for LVDS)
+ PLL_1443X_RATE(650000000U, 325, 3, 2, 0),
+ PLL_1443X_RATE(594000000U, 198, 2, 2, 0),
+ PLL_1443X_RATE(519750000U, 173, 2, 2, 16384),
PLL_1443X_RATE(393216000U, 262, 2, 3, 9437),
Our panel dts entry:
panel_lvds: panel-lvds {
compatible = "panel-lvds";
backlight = <&backlight_lvds>;
data-mapping = "vesa-24";
width-mm = <199>;
height-mm = <112>;
status = "okay";
panel-timing {
clock-frequency = <60000000>;
hactive = <1280>;
hback-porch = <29>;
hfront-porch = <35>;
hsync-len = <7>;
vactive = <720>;
vback-porch = <9>;
vfront-porch = <9>;
vsync-len = <1>;
};
port {
panel_in_lvds0: endpoint {
remote-endpoint = <&ldb_lvds_ch0>;
};
};
};
};
&ldb {
status = "okay";
/* dual channel does not work for now */
/* fsl,dual-channel; */
lvds-channel@0 {
fsl,data-mapping = "spwg";
fsl,data-width = <0x18>;
status = "okay";
port@1 {
reg = <1>;
ldb_lvds_ch0: endpoint {
remote-endpoint = <&panel_in_lvds0>;
};
};
};
};
Comparing the clk_summary, we found one discrepancy for dual-channel mode media_ldb 420000000 in 5.5 vs 210000000 in 6.6
5.5 Kernel
video_pll1_ref_sel 1 1 0 24000000 0 0 50000
video_pll1 1 1 0 840000000 0 0 50000
video_pll1_bypass 1 1 0 840000000 0 0 50000
video_pll1_out 2 2 0 840000000 0 0 50000
media_ldb 1 1 0 420000000 0 0 50000
media_ldb_root_clk 1 1 0 420000000 0 0 50000
media_disp2_pix 1 1 0 60000000 0 0 50000
6.6 Kernel
video_pll1_ref_sel 1 1 0 24000000 0 0 50000 Y deviceless no_connection_id
video_pll1 1 1 0 840000000 0 0 50000 Y deviceless no_connection_id
video_pll1_bypass 1 1 0 840000000 0 0 50000 Y deviceless no_connection_id
video_pll1_out 2 2 0 840000000 0 0 50000 Y deviceless no_connection_id
media_ldb 1 1 0 210000000 0 0 50000 Y deviceless no_connection_id
media_ldb_root_clk 1 1 0 210000000 0 0 50000 Y ldb-display-controller ldb
deviceless no_connection_id
When we disable the dual-channel mode in 6.6 the output of video clocks matches one from 5.5, and we have a full screen available:
video_pll1_ref_sel 1 1 0 24000000 0 0 50000 Y deviceless no_connection_id
video_pll1 1 1 0 840000000 0 0 50000 Y deviceless no_connection_id
video_pll1_bypass 1 1 0 840000000 0 0 50000 Y deviceless no_connection_id
video_pll1_out 2 2 0 840000000 0 0 50000 Y deviceless no_connection_id
media_ldb 1 1 0 420000000 0 0 50000 Y deviceless no_connection_id
media_ldb_root_clk 1 1 0 420000000 0 0 50000 Y ldb-display-controller ldb
Except the differnce in media_ldb for dual-channel mode we could not find any difference, but dual-channel does not provide the same output as in 5.5. Can you help to understand why?