This removes user control to force a hdmimhz. Given the vast variety of hardware and display configurations out there, I don't see how a patch like this won't blow up in our faces.
I'm not saying we shouldn't do it -- we should attempt to respect the various maximums in the vbios, but until we get a solid handle on things, we should allow more user-configurability, not less, for the case where we get it wrong. 2018-07-20 11:17 GMT-04:00 Karol Herbst <[email protected]>: > Signed-off-by: Karol Herbst <[email protected]> > --- > drm/nouveau/dispnv50/disp.c | 5 +++++ > drm/nouveau/nouveau_connector.c | 5 +++++ > drm/nouveau/nouveau_encoder.h | 4 ++++ > 3 files changed, 14 insertions(+) > > diff --git a/drm/nouveau/dispnv50/disp.c b/drm/nouveau/dispnv50/disp.c > index 6f41a6a0..3a960664 100644 > --- a/drm/nouveau/dispnv50/disp.c > +++ b/drm/nouveau/dispnv50/disp.c > @@ -1433,7 +1433,12 @@ nv50_sor_create(struct drm_connector *connector, > struct dcb_output *dcbe, > case DCB_OUTPUT_LVDS: type = DRM_MODE_ENCODER_LVDS; break; > case DCB_OUTPUT_DP: > nv_encoder->dp.no_interlace = caps->dp[or].no_interlace; > + type = DRM_MODE_ENCODER_TMDS; > + break; > case DCB_OUTPUT_TMDS: > + nv_encoder->tmds.max_mhz = caps->tmds[or].max_mhz; > + type = DRM_MODE_ENCODER_TMDS; > + break; > default: > type = DRM_MODE_ENCODER_TMDS; > break; > diff --git a/drm/nouveau/nouveau_connector.c b/drm/nouveau/nouveau_connector.c > index 074e6d52..a955f225 100644 > --- a/drm/nouveau/nouveau_connector.c > +++ b/drm/nouveau/nouveau_connector.c > @@ -980,9 +980,14 @@ static unsigned > get_tmds_link_bandwidth(struct drm_connector *connector, bool hdmi) > { > struct nouveau_connector *nv_connector = nouveau_connector(connector); > + struct nouveau_encoder *nv_encoder = nv_connector->detected_encoder; > struct nouveau_drm *drm = nouveau_drm(connector->dev); > struct dcb_output *dcb = nv_connector->detected_encoder->dcb; > > + /* cap to 297MHz until we figure out HDMI 2.0 */ > + if (nv_encoder->tmds.max_mhz) > + return nv_encoder->tmds.max_mhz * 1000; > + > if (hdmi) { > if (nouveau_hdmimhz > 0) > return nouveau_hdmimhz * 1000; > diff --git a/drm/nouveau/nouveau_encoder.h b/drm/nouveau/nouveau_encoder.h > index f74af5ce..fbef9dc0 100644 > --- a/drm/nouveau/nouveau_encoder.h > +++ b/drm/nouveau/nouveau_encoder.h > @@ -65,6 +65,10 @@ struct nouveau_encoder { > int link_bw; > bool no_interlace; > } dp; > + > + struct { > + uint16_t max_mhz; > + } tmds; > }; > > void (*enc_save)(struct drm_encoder *encoder); > -- > 2.17.1 > > _______________________________________________ > Nouveau mailing list > [email protected] > https://lists.freedesktop.org/mailman/listinfo/nouveau _______________________________________________ Nouveau mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/nouveau
