mirror of https://gitee.com/openkylin/linux.git
drm/vc4: hdmi: Make sure our clock rate is within limits
The HDMI controller cannot go above a certain pixel rate limit depending on the generations, but that limit is only enforced in mode_valid at the moment, which means that we won't advertise modes that exceed that limit, but the userspace is still free to try to setup a mode that would. Implement atomic_check to make sure we check it in that scenario too. Signed-off-by: Maxime Ripard <maxime@cerno.tech> Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com> Link: https://patchwork.freedesktop.org/patch/msgid/20201029122522.1917579-1-maxime@cerno.tech
This commit is contained in:
parent
cdf117d6d3
commit
63495f6b4a
|
@ -760,6 +760,20 @@ static void vc4_hdmi_encoder_enable(struct drm_encoder *encoder)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int vc4_hdmi_encoder_atomic_check(struct drm_encoder *encoder,
|
||||||
|
struct drm_crtc_state *crtc_state,
|
||||||
|
struct drm_connector_state *conn_state)
|
||||||
|
{
|
||||||
|
struct drm_display_mode *mode = &crtc_state->adjusted_mode;
|
||||||
|
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
|
||||||
|
unsigned long long pixel_rate = mode->clock * 1000;
|
||||||
|
|
||||||
|
if (pixel_rate > vc4_hdmi->variant->max_pixel_clock)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static enum drm_mode_status
|
static enum drm_mode_status
|
||||||
vc4_hdmi_encoder_mode_valid(struct drm_encoder *encoder,
|
vc4_hdmi_encoder_mode_valid(struct drm_encoder *encoder,
|
||||||
const struct drm_display_mode *mode)
|
const struct drm_display_mode *mode)
|
||||||
|
@ -773,6 +787,7 @@ vc4_hdmi_encoder_mode_valid(struct drm_encoder *encoder,
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct drm_encoder_helper_funcs vc4_hdmi_encoder_helper_funcs = {
|
static const struct drm_encoder_helper_funcs vc4_hdmi_encoder_helper_funcs = {
|
||||||
|
.atomic_check = vc4_hdmi_encoder_atomic_check,
|
||||||
.mode_valid = vc4_hdmi_encoder_mode_valid,
|
.mode_valid = vc4_hdmi_encoder_mode_valid,
|
||||||
.disable = vc4_hdmi_encoder_disable,
|
.disable = vc4_hdmi_encoder_disable,
|
||||||
.enable = vc4_hdmi_encoder_enable,
|
.enable = vc4_hdmi_encoder_enable,
|
||||||
|
|
Loading…
Reference in New Issue