Commit 62acdc71 authored by Ben Skeggs's avatar Ben Skeggs

drm/nouveau: fix required mode bandwidth calculation for DP

This should fix eDP on certain laptops with 18-bit panels, we were rejecting
the panel's native mode due to thinking there was insufficient bandwidth
for it.
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 85341f27
...@@ -76,6 +76,22 @@ nouveau_encoder_connector_get(struct nouveau_encoder *encoder) ...@@ -76,6 +76,22 @@ nouveau_encoder_connector_get(struct nouveau_encoder *encoder)
return NULL; return NULL;
} }
/*TODO: This could use improvement, and learn to handle the fixed
* BIOS tables etc. It's fine currently, for its only user.
*/
int
nouveau_connector_bpp(struct drm_connector *connector)
{
struct nouveau_connector *nv_connector = nouveau_connector(connector);
if (nv_connector->edid && nv_connector->edid->revision >= 4) {
u8 bpc = ((nv_connector->edid->input & 0x70) >> 3) + 4;
if (bpc > 4)
return bpc;
}
return 18;
}
static void static void
nouveau_connector_destroy(struct drm_connector *drm_connector) nouveau_connector_destroy(struct drm_connector *drm_connector)
...@@ -666,7 +682,7 @@ nouveau_connector_mode_valid(struct drm_connector *connector, ...@@ -666,7 +682,7 @@ nouveau_connector_mode_valid(struct drm_connector *connector,
else else
max_clock = nv_encoder->dp.link_nr * 162000; max_clock = nv_encoder->dp.link_nr * 162000;
clock *= 3; clock = clock * nouveau_connector_bpp(connector) / 8;
break; break;
default: default:
BUG_ON(1); BUG_ON(1);
......
...@@ -55,4 +55,7 @@ nouveau_connector_create(struct drm_device *, int index); ...@@ -55,4 +55,7 @@ nouveau_connector_create(struct drm_device *, int index);
void void
nouveau_connector_set_polling(struct drm_connector *); nouveau_connector_set_polling(struct drm_connector *);
int
nouveau_connector_bpp(struct drm_connector *);
#endif /* __NOUVEAU_CONNECTOR_H__ */ #endif /* __NOUVEAU_CONNECTOR_H__ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment