drm/bridge: tc358767: fix max_tu_symbol value
max_tu_symbol was programmed to TU_SIZE_RECOMMENDED - 1, which is not what the spec says. The spec says: roundup ((input active video bandwidth in bytes/output active video bandwidth in bytes) * tu_size) It is not quite clear what the above means, but calculating max_tu_symbol = (input Bps / output Bps) * tu_size seems to work and fixes the issues seen. This fixes artifacts in some videomodes (e.g. 1024x768@60 on 2-lanes & 1.62Gbps was pretty bad for me). Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> Tested-by: Jyri Sarha <jsarha@ti.com> Signed-off-by: Andrzej Hajda <a.hajda@samsung.com> Link: https://patchwork.freedesktop.org/patch/msgid/20190924131702.9988-1-tomi.valkeinen@ti.com
This commit is contained in:
parent
cc635be34e
commit
fd70c7755b
|
@ -728,6 +728,8 @@ static int tc_set_video_mode(struct tc_data *tc,
|
|||
int lower_margin = mode->vsync_start - mode->vdisplay;
|
||||
int vsync_len = mode->vsync_end - mode->vsync_start;
|
||||
u32 dp0_syncval;
|
||||
u32 bits_per_pixel = 24;
|
||||
u32 in_bw, out_bw;
|
||||
|
||||
/*
|
||||
* Recommended maximum number of symbols transferred in a transfer unit:
|
||||
|
@ -735,7 +737,10 @@ static int tc_set_video_mode(struct tc_data *tc,
|
|||
* (output active video bandwidth in bytes))
|
||||
* Must be less than tu_size.
|
||||
*/
|
||||
max_tu_symbol = TU_SIZE_RECOMMENDED - 1;
|
||||
|
||||
in_bw = mode->clock * bits_per_pixel / 8;
|
||||
out_bw = tc->link.base.num_lanes * tc->link.base.rate;
|
||||
max_tu_symbol = DIV_ROUND_UP(in_bw * TU_SIZE_RECOMMENDED, out_bw);
|
||||
|
||||
dev_dbg(tc->dev, "set mode %dx%d\n",
|
||||
mode->hdisplay, mode->vdisplay);
|
||||
|
|
Loading…
Reference in a new issue