On 2022-08-22 16:20, Sascha Hauer wrote:
The driver checks if the pixel clock of the given mode matches an entry
in the mpll config table. The frequencies in the mpll table are meant as
a frequency range up to which the entry works, not as a frequency that
must match the pixel clock. Return MODE_OK when the pixelclock is
smaller than one of the mpll frequencies to allow for more display
resolutions.
Has the issue been fixed that this table is also used to validate modes
on RK3328, which doesn't even *have* the Synopsys phy? Last time I
looked, that tended to lead to complete display breakage when the proper
phy driver later decides it doesn't like a pixel clock that mode_valid
already said was OK.
The more general concern is that these known-good clock rates are good,
but others may not be even when nominally supported, which I suspect is
the dirty secret of why it was implemented this way to begin with. I
would really really love this patch so my RK3399 board can drive my
1920x1200 monitor at native resolution, but on the other hand my RK3288
box generates such a crap 154MHz clock for that mode that - unless
that's been improved in the meantime too - patch #2 might be almost be
considered a regression if it means such a setup would start defaulting
to an unusably glitchy display instead of falling back to 1920x1080
which does at least work perfectly (even if the slightly squished aspect
ratio is ugly).
Thanks,
Robin.
Signed-off-by: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>
---
drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
index c14f888938688..b6b662dabedc6 100644
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
@@ -251,7 +251,7 @@ dw_hdmi_rockchip_mode_valid(struct dw_hdmi *hdmi, void *data,
int i;
for (i = 0; mpll_cfg[i].mpixelclock != (~0UL); i++) {
- if (pclk == mpll_cfg[i].mpixelclock) {
+ if (pclk <= mpll_cfg[i].mpixelclock) {
valid = true;
break;
}