mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-27 00:04:47 +08:00
drm/nouveau/kms/nv50-: Get rid of bogus nouveau_conn_mode_valid()
Ville also pointed out that I got a lot of the logic here wrong as well, whoops.
While I don't think anyone's likely using 3D output with nouveau, the next patch
will make nouveau_conn_mode_valid() make a lot less sense. So, let's just get
rid of it and open-code it like before, while taking care to move the 3D frame
packing calculations on the dot clock into the right place.
Signed-off-by: Lyude Paul <lyude@redhat.com>
Fixes: d6a9efece7
("drm/nouveau/kms/nv50-: Share DP SST mode_valid() handling with MST")
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: <stable@vger.kernel.org> # v5.8+
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
dcd292c172
commit
2d831155cf
@ -1023,29 +1023,6 @@ get_tmds_link_bandwidth(struct drm_connector *connector)
|
||||
return 112000 * duallink_scale;
|
||||
}
|
||||
|
||||
enum drm_mode_status
|
||||
nouveau_conn_mode_clock_valid(const struct drm_display_mode *mode,
|
||||
const unsigned min_clock,
|
||||
const unsigned max_clock,
|
||||
unsigned int *clock_out)
|
||||
{
|
||||
unsigned int clock = mode->clock;
|
||||
|
||||
if ((mode->flags & DRM_MODE_FLAG_3D_MASK) ==
|
||||
DRM_MODE_FLAG_3D_FRAME_PACKING)
|
||||
clock *= 2;
|
||||
|
||||
if (clock < min_clock)
|
||||
return MODE_CLOCK_LOW;
|
||||
if (clock > max_clock)
|
||||
return MODE_CLOCK_HIGH;
|
||||
|
||||
if (clock_out)
|
||||
*clock_out = clock;
|
||||
|
||||
return MODE_OK;
|
||||
}
|
||||
|
||||
static enum drm_mode_status
|
||||
nouveau_connector_mode_valid(struct drm_connector *connector,
|
||||
struct drm_display_mode *mode)
|
||||
@ -1053,7 +1030,7 @@ nouveau_connector_mode_valid(struct drm_connector *connector,
|
||||
struct nouveau_connector *nv_connector = nouveau_connector(connector);
|
||||
struct nouveau_encoder *nv_encoder = nv_connector->detected_encoder;
|
||||
struct drm_encoder *encoder = to_drm_encoder(nv_encoder);
|
||||
unsigned min_clock = 25000, max_clock = min_clock;
|
||||
unsigned int min_clock = 25000, max_clock = min_clock, clock = mode->clock;
|
||||
|
||||
switch (nv_encoder->dcb->type) {
|
||||
case DCB_OUTPUT_LVDS:
|
||||
@ -1082,8 +1059,15 @@ nouveau_connector_mode_valid(struct drm_connector *connector,
|
||||
return MODE_BAD;
|
||||
}
|
||||
|
||||
return nouveau_conn_mode_clock_valid(mode, min_clock, max_clock,
|
||||
NULL);
|
||||
if ((mode->flags & DRM_MODE_FLAG_3D_MASK) == DRM_MODE_FLAG_3D_FRAME_PACKING)
|
||||
clock *= 2;
|
||||
|
||||
if (clock < min_clock)
|
||||
return MODE_CLOCK_LOW;
|
||||
if (clock > max_clock)
|
||||
return MODE_CLOCK_HIGH;
|
||||
|
||||
return MODE_OK;
|
||||
}
|
||||
|
||||
static struct drm_encoder *
|
||||
|
@ -232,12 +232,14 @@ nv50_dp_mode_valid(struct drm_connector *connector,
|
||||
unsigned *out_clock)
|
||||
{
|
||||
const unsigned min_clock = 25000;
|
||||
unsigned max_clock, ds_clock, clock;
|
||||
enum drm_mode_status ret;
|
||||
unsigned max_clock, ds_clock, clock = mode->clock;
|
||||
|
||||
if (mode->flags & DRM_MODE_FLAG_INTERLACE && !outp->caps.dp_interlace)
|
||||
return MODE_NO_INTERLACE;
|
||||
|
||||
if ((mode->flags & DRM_MODE_FLAG_3D_MASK) == DRM_MODE_FLAG_3D_FRAME_PACKING)
|
||||
clock *= 2;
|
||||
|
||||
max_clock = outp->dp.link_nr * outp->dp.link_bw;
|
||||
ds_clock = drm_dp_downstream_max_dotclock(outp->dp.dpcd,
|
||||
outp->dp.downstream_ports);
|
||||
@ -245,9 +247,13 @@ nv50_dp_mode_valid(struct drm_connector *connector,
|
||||
max_clock = min(max_clock, ds_clock);
|
||||
|
||||
clock = mode->clock * (connector->display_info.bpc * 3) / 10;
|
||||
ret = nouveau_conn_mode_clock_valid(mode, min_clock, max_clock,
|
||||
&clock);
|
||||
if (clock < min_clock)
|
||||
return MODE_CLOCK_LOW;
|
||||
if (clock > max_clock)
|
||||
return MODE_CLOCK_HIGH;
|
||||
|
||||
if (out_clock)
|
||||
*out_clock = clock;
|
||||
return ret;
|
||||
|
||||
return MODE_OK;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user