| From 32023d93a46f36d11db85bbac297d15d3126a9b0 Mon Sep 17 00:00:00 2001 |
| From: Tomi Valkeinen <tomi.valkeinen@ti.com> |
| Date: Thu, 3 Jan 2019 13:59:52 +0200 |
| Subject: drm/bridge: tc358767: reject modes which require too much BW |
| |
| [ Upstream commit 51b9e62eb6950c762162ab7eb8390990179be067 ] |
| |
| The current driver accepts any videomode with pclk < 154MHz. This is not |
| correct, as with 1 lane and/or 1.62Mbps speed not all videomodes can be |
| supported. |
| |
| Add code to reject modes that require more bandwidth that is available. |
| |
| Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> |
| Reviewed-by: Andrzej Hajda <a.hajda@samsung.com> |
| Signed-off-by: Andrzej Hajda <a.hajda@samsung.com> |
| Link: https://patchwork.freedesktop.org/patch/msgid/20190103115954.12785-6-tomi.valkeinen@ti.com |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/bridge/tc358767.c | 10 ++++++++++ |
| 1 file changed, 10 insertions(+) |
| |
| diff --git a/drivers/gpu/drm/bridge/tc358767.c b/drivers/gpu/drm/bridge/tc358767.c |
| index dbe403ea130d..16fa42984c50 100644 |
| --- a/drivers/gpu/drm/bridge/tc358767.c |
| +++ b/drivers/gpu/drm/bridge/tc358767.c |
| @@ -1118,10 +1118,20 @@ static bool tc_bridge_mode_fixup(struct drm_bridge *bridge, |
| static int tc_connector_mode_valid(struct drm_connector *connector, |
| struct drm_display_mode *mode) |
| { |
| + struct tc_data *tc = connector_to_tc(connector); |
| + u32 req, avail; |
| + u32 bits_per_pixel = 24; |
| + |
| /* DPI interface clock limitation: upto 154 MHz */ |
| if (mode->clock > 154000) |
| return MODE_CLOCK_HIGH; |
| |
| + req = mode->clock * bits_per_pixel / 8; |
| + avail = tc->link.base.num_lanes * tc->link.base.rate; |
| + |
| + if (req > avail) |
| + return MODE_BAD; |
| + |
| return MODE_OK; |
| } |
| |
| -- |
| 2.19.1 |
| |