Skip to content

Commit eea4f89

Browse files
committed
drm/bridge: cdns-dsi: Fix REG_WAKEUP_TIME value
The driver tries to calculate the value for REG_WAKEUP_TIME. However, the calculation itself is not correct, and to add on it, the resulting value is almost always larger than the field's size, so the actual result is more or less random. According to the docs, figuring out the value for REG_WAKEUP_TIME requires HW characterization and there's no way to have a generic algorithm to come up with the value. That doesn't help at all... However, we know that the value must be smaller than the line time, and, at least in my understanding, the proper value for it is quite small. Testing shows that setting it to 1/10 of the line time seems to work well. All video modes from my HDMI monitor work with this algorithm. Hopefully we'll get more information on how to calculate the value, and we can then update this. Tested-by: Parth Pancholi <parth.pancholi@toradex.com> Tested-by: Jayesh Choudhary <j-choudhary@ti.com> Reviewed-by: Devarsh Thakkar <devarsht@ti.com> Link: https://lore.kernel.org/r/20250723-cdns-dsi-impro-v5-11-e61cc06074c2@ideasonboard.com Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
1 parent e948bca commit eea4f89

1 file changed

Lines changed: 7 additions & 1 deletion

File tree

drivers/gpu/drm/bridge/cadence/cdns-dsi-core.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -793,7 +793,13 @@ static void cdns_dsi_bridge_atomic_pre_enable(struct drm_bridge *bridge,
793793

794794
tx_byte_period = DIV_ROUND_DOWN_ULL((u64)NSEC_PER_SEC * 8,
795795
phy_cfg->hs_clk_rate);
796-
reg_wakeup = (phy_cfg->hs_prepare + phy_cfg->hs_zero) / tx_byte_period;
796+
797+
/*
798+
* Estimated time [in clock cycles] to perform LP->HS on D-PHY.
799+
* It is not clear how to calculate this, so for now,
800+
* set it to 1/10 of the total number of clocks in a line.
801+
*/
802+
reg_wakeup = dsi_cfg.htotal / nlanes / 10;
797803
writel(REG_WAKEUP_TIME(reg_wakeup) | REG_LINE_DURATION(tmp),
798804
dsi->regs + VID_DPHY_TIME);
799805

0 commit comments

Comments
 (0)