Received: by 2002:a25:ca44:0:0:0:0:0 with SMTP id a65csp380804ybg; Tue, 28 Jul 2020 08:19:07 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwU8yRsORP96gC3mNORm0Lxy5MLPIpqzI0k+qRvt8pzhjkxFn67rRt5CIyua8oAWZigQ62S X-Received: by 2002:aa7:cf1a:: with SMTP id a26mr23880515edy.51.1595949547645; Tue, 28 Jul 2020 08:19:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1595949547; cv=none; d=google.com; s=arc-20160816; b=tudPZ7/67axPquz/+vrogshiEdOcjQVdGCo1q+IB3XoJzvJGJJuPJ22DpgHCz89scf UIeJOEwRlN0CwYma0LtIq0eAtrpaeRx4OrjZgcI6R4Gu+oShzs7NSMtaZ6DfieNnPW2G HP+yw0XqrNLP4pGp9XBAWYCuVjOjuguVTlEzLAaktGShAUJK7iuzvb88ZWEDPCN0WWk2 10tc/oi+6OaAIDE/io8t33aNQUSS04ddQAM2Zx4Hh3JUJ8Z6Id0PQ5/mCi6TzBecdj8S +ceqFYVf/g1Pj8pTB+91rJRnHwFoYqG4A11kR4FJBHaxje5/ptCrvbqM9A3v7DZq7Ddt NlIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=mCAL3uifqrwrrscsGck77s7dOI7H4T7L/Psu4vIjeNo=; b=y3Lv0jPI46pdVfCaFc2hauIri5JYyPGfEQZkq273DGo8Zc4pOvczliH50DLE8FQZF5 bXUVRHNbU7pdbZAKBOcDUPIxaVz5UZKXJzXaAKprv6fBVq1Ln0y9llLP8JEd6M6AzLUl Fqv3RKBK97T20McwYeKESH1dscNBzJZW1EZ5siTy8fvhdJTRsKYbQLAKnoMbGxKunf1V 3G5v+PzKVDGtzvqkZjjWtEQghphI0vEDaEPM63RW1vXL4PJxI+vDh56jXSUOXvo75k9l sKYDJnNfGgboVGvc9huAXfABLLBVA4xbWHYPk5/2lHacXLhqMSeJlTCB3U2ethBuUp7Z liSQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@crapouillou.net header.s=mail header.b=ISeLpAy0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=crapouillou.net Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id i2si8174904ejp.201.2020.07.28.08.18.45; Tue, 28 Jul 2020 08:19:07 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=fail header.i=@crapouillou.net header.s=mail header.b=ISeLpAy0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=crapouillou.net Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730741AbgG1PRF (ORCPT + 99 others); Tue, 28 Jul 2020 11:17:05 -0400 Received: from crapouillou.net ([89.234.176.41]:38796 "EHLO crapouillou.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730586AbgG1PRF (ORCPT ); Tue, 28 Jul 2020 11:17:05 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=crapouillou.net; s=mail; t=1595949410; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=mCAL3uifqrwrrscsGck77s7dOI7H4T7L/Psu4vIjeNo=; b=ISeLpAy0gBt9aVtGQ7vMvBc4q0lHCwa/EveW3oxDGe2VLWxcbo1TZtHCNHvgG+m9slP+pt QLRE2x9JexqOaaYyVPYr3sCqNRyz5RizX2/BQ+8GsWcYU+HJkZZGt+lmNeSZFP7YWvtTx4 xOVVM7wsGxQiBskNouFyBFcQMP8iNyU= From: Paul Cercueil To: David Airlie , Daniel Vetter Cc: od@zcrc.me, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Paul Cercueil Subject: [PATCH 2/2] drm/ingenic: Validate mode in a .mode_valid callback Date: Tue, 28 Jul 2020 17:16:41 +0200 Message-Id: <20200728151641.26124-3-paul@crapouillou.net> In-Reply-To: <20200728151641.26124-1-paul@crapouillou.net> References: <20200728151641.26124-1-paul@crapouillou.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Validate modes in the drm_crtc_helper_funcs.mode_valid() callback, which is designed for this purpose, instead of doing it in drm_crtc_helper_funcs.atomic_check(). Signed-off-by: Paul Cercueil --- drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 34 +++++++++++++---------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c index 64eabab3ef69..5dab9c3d0a52 100644 --- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c +++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c @@ -199,21 +199,8 @@ static int ingenic_drm_crtc_atomic_check(struct drm_crtc *crtc, { struct ingenic_drm *priv = drm_crtc_get_priv(crtc); struct drm_plane_state *f1_state, *f0_state, *ipu_state = NULL; - long rate; - - if (!drm_atomic_crtc_needs_modeset(state)) - return 0; - - if (state->mode.hdisplay > priv->soc_info->max_width || - state->mode.vdisplay > priv->soc_info->max_height) - return -EINVAL; - rate = clk_round_rate(priv->pix_clk, - state->adjusted_mode.clock * 1000); - if (rate < 0) - return rate; - - if (priv->soc_info->has_osd) { + if (drm_atomic_crtc_needs_modeset(state) && priv->soc_info->has_osd) { f1_state = drm_atomic_get_plane_state(state->state, &priv->f1); if (IS_ERR(f1_state)) return PTR_ERR(f1_state); @@ -242,6 +229,24 @@ static int ingenic_drm_crtc_atomic_check(struct drm_crtc *crtc, return 0; } +static enum drm_mode_status +ingenic_drm_crtc_mode_valid(struct drm_crtc *crtc, const struct drm_display_mode *mode) +{ + struct ingenic_drm *priv = drm_crtc_get_priv(crtc); + long rate; + + if (mode->hdisplay > priv->soc_info->max_width) + return MODE_BAD_HVALUE; + if (mode->vdisplay > priv->soc_info->max_height) + return MODE_BAD_VVALUE; + + rate = clk_round_rate(priv->pix_clk, mode->clock * 1000); + if (rate < 0) + return MODE_CLOCK_RANGE; + + return MODE_OK; +} + static void ingenic_drm_crtc_atomic_begin(struct drm_crtc *crtc, struct drm_crtc_state *oldstate) { @@ -655,6 +660,7 @@ static const struct drm_crtc_helper_funcs ingenic_drm_crtc_helper_funcs = { .atomic_begin = ingenic_drm_crtc_atomic_begin, .atomic_flush = ingenic_drm_crtc_atomic_flush, .atomic_check = ingenic_drm_crtc_atomic_check, + .mode_valid = ingenic_drm_crtc_mode_valid, }; static const struct drm_encoder_helper_funcs ingenic_drm_encoder_helper_funcs = { -- 2.27.0