Received: by 10.223.176.5 with SMTP id f5csp2686875wra; Mon, 29 Jan 2018 02:16:46 -0800 (PST) X-Google-Smtp-Source: AH8x2261GYcQ4mLqThtojA3VMb1t2WSwSgs4jpB6pqopee0qr9Bq/yedbsi47FID61a1BcCiDLIt X-Received: by 2002:a17:902:6c44:: with SMTP id h4-v6mr21803325pln.373.1517221006359; Mon, 29 Jan 2018 02:16:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1517221006; cv=none; d=google.com; s=arc-20160816; b=iFj7iMZZJqU13Go3uN4gE4AAtCouU7Om8Borm11X9wsjsxENf67sd3+jMfbqD1+LiI HZLoCbz+y7tKH7zy183mPHybMV43Z9D+iDTbxVGk71jfH1E+FD7zkTZ16Hy0pYunPqsm NB8IlIzlY3J2+IkrgnJuaoKn7vQ0ZU4Bbxxw9KrAoSSXFm2BynfVUurrzhb22jDI+TvU 5/4LUbJcmhmfJPz60WvCN9Ex12IGXLwTq5osNxHhIsQDDx/0FyJLLQ/1q14lmBGi3ep6 3JuDXASYLSuhkgpUEV7kHhVcHVHWwBS4SbWxXqZV5qBIUkaK3gCuXwW0ynmJd/Iu+z4o iClA== 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:cc:to:subject :message-id:date:from:references:in-reply-to:mime-version :dkim-signature:arc-authentication-results; bh=meHtRMoLljLuujMWTHV7R4uIWHzorOEJSwAJLtx8nyc=; b=STTnErELSqluX6HXs8GrVCPXVw+K2EBZRDuNjin8rWqDXhVMMZVqkGSdMt4MS18mIF twwXkldCRyOzOUACghVfCtcGu4fUQtX+ERBHlr9NjSgxakH8d5YmXOkSm4QWVCdxnzuy +v0UwmFtrDFxrt83HExPR2+3ZGF9L0nThm/uz4UeddjUu5binJ8r5q1XQ7PETNAUB5qp zfEOHHeiGRUXPxSR00I7zH+4gLfpjOoR30reHElusEykWuwjFK+v7SfG2TFwK32j1eyt pW3RBz6GNOzb4xlF0oR6dw9nKHttgFpwUjimDmpo6FGImxr643xvEewObp3/hvZEn6x2 lSjg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=XCCEjaJU; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u69si7203426pgb.10.2018.01.29.02.16.31; Mon, 29 Jan 2018 02:16:46 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=XCCEjaJU; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751650AbeA2KQD (ORCPT + 99 others); Mon, 29 Jan 2018 05:16:03 -0500 Received: from mail-qt0-f194.google.com ([209.85.216.194]:39050 "EHLO mail-qt0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750913AbeA2KQA (ORCPT ); Mon, 29 Jan 2018 05:16:00 -0500 Received: by mail-qt0-f194.google.com with SMTP id f4so11933308qtj.6 for ; Mon, 29 Jan 2018 02:16:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=meHtRMoLljLuujMWTHV7R4uIWHzorOEJSwAJLtx8nyc=; b=XCCEjaJUL/u2oJcZMjwy4pILUzCaH/FIkjC0ME1t36usk6vDH1782HSiY+ZYFXHiwG G9DbNABqoOEnHgVkf0HpsjoCeLrYxyFQLTSU8gVbbmVHmzQ3cUNxiMEa/WAXQORgnyeR rqOEIPFWsbkGDRXiBLxqXw/buuUhauh4G9Lcw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=meHtRMoLljLuujMWTHV7R4uIWHzorOEJSwAJLtx8nyc=; b=FrbGuINltIReNNnuGaec24eRDzKxX+An2ODE9JU4tF/V5yzZCW0gjfYXMbnGm+o+Ct 4YQ7lW9r0cR+jRV23A4mc7iJ1nVveUP8/Qj/0gEpWFxIiAD53YqUNJhHonHTa+P6NkwC y35nkkNaTryIp9vVTRe40gVXVZfv+7S7XMoZWCS8juJUA+8JocL3Z0Z/WcSplLB31PHZ ZFUPGkKB/UF+p8keMXrAXKWNJBoSHzdvrx+JnK4vf7UUGA5kWLJUj3BBoOinQThnZbfi envclQoNMqLs6WsizYj+oQV7Mvz2b1XfYBq+xE1fM1WFJyoWZMasEGc56nyoiLsHL0ce 6+6A== X-Gm-Message-State: AKwxytd5huXttKd4ykbI2l+//rnWDsQzo8IzvnlMTDHsmG2l29Py6vzx njdUIc1WXL+WgUMimA7c28/ZDLTLTLV/ge53YU2AAQ== X-Received: by 10.237.53.253 with SMTP id d58mr29219664qte.276.1517220959577; Mon, 29 Jan 2018 02:15:59 -0800 (PST) MIME-Version: 1.0 Received: by 10.140.82.178 with HTTP; Mon, 29 Jan 2018 02:15:59 -0800 (PST) In-Reply-To: References: <20180125160101.9102-1-philippe.cornu@st.com> From: Benjamin Gaignard Date: Mon, 29 Jan 2018 11:15:59 +0100 Message-ID: Subject: Re: [PATCH] drm/stm: ltdc: use crtc_mode_fixup to update adjusted_mode clock To: Yannick FERTRE Cc: Philippe CORNU , Vincent ABRIOU , David Airlie , "dri-devel@lists.freedesktop.org" , "linux-kernel@vger.kernel.org" , Archit Taneja , Andrzej Hajda , Laurent Pinchart , Fabien DESSENNE , Mickael REULIER , Ludovic BARRE , Alexandre TORGUE , Maxime Coquelin Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 2018-01-29 10:46 GMT+01:00 Yannick FERTRE : > On 01/25/2018 05:01 PM, Philippe Cornu wrote: >> There is a difference between the panel/bridge requested pixel clock >> value and the real one due to the hw platform clock preciseness (pll, >> dividers...). This patch updates the adjusted_mode clock value with >> the real hw clock value so then attached encoder & connector can use >> it for precise timing computations. > Reviewed-by: Yannick Fertr=C3=A9 >> Signed-off-by: Philippe Cornu Applied on drm-misc-next. Regards, Benjamin >> --- >> drivers/gpu/drm/stm/ltdc.c | 35 +++++++++++++++++++++++++---------- >> 1 file changed, 25 insertions(+), 10 deletions(-) >> >> diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c >> index b48589343ae1..90b3de516c91 100644 >> --- a/drivers/gpu/drm/stm/ltdc.c >> +++ b/drivers/gpu/drm/stm/ltdc.c >> @@ -428,12 +428,35 @@ static void ltdc_crtc_atomic_disable(struct drm_cr= tc *crtc, >> reg_set(ldev->regs, LTDC_SRCR, SRCR_IMR); >> } >> >> +static bool ltdc_crtc_mode_fixup(struct drm_crtc *crtc, >> + const struct drm_display_mode *mode, >> + struct drm_display_mode *adjusted_mode) >> +{ >> + struct ltdc_device *ldev =3D crtc_to_ltdc(crtc); >> + int rate =3D mode->clock * 1000; >> + >> + /* >> + * TODO clk_round_rate() does not work yet. When ready, it can >> + * be used instead of clk_set_rate() then clk_get_rate(). >> + */ >> + >> + clk_disable(ldev->pixel_clk); >> + if (clk_set_rate(ldev->pixel_clk, rate) < 0) { >> + DRM_ERROR("Cannot set rate (%dHz) for pixel clk\n", rate); >> + return false; >> + } >> + clk_enable(ldev->pixel_clk); >> + >> + adjusted_mode->clock =3D clk_get_rate(ldev->pixel_clk) / 1000; >> + >> + return true; >> +} >> + >> static void ltdc_crtc_mode_set_nofb(struct drm_crtc *crtc) >> { >> struct ltdc_device *ldev =3D crtc_to_ltdc(crtc); >> struct drm_display_mode *mode =3D &crtc->state->adjusted_mode; >> struct videomode vm; >> - int rate =3D mode->clock * 1000; >> u32 hsync, vsync, accum_hbp, accum_vbp, accum_act_w, accum_act_h; >> u32 total_width, total_height; >> u32 val; >> @@ -456,15 +479,6 @@ static void ltdc_crtc_mode_set_nofb(struct drm_crtc= *crtc) >> total_width =3D accum_act_w + vm.hfront_porch; >> total_height =3D accum_act_h + vm.vfront_porch; >> >> - clk_disable(ldev->pixel_clk); >> - >> - if (clk_set_rate(ldev->pixel_clk, rate) < 0) { >> - DRM_ERROR("Cannot set rate (%dHz) for pixel clk\n", rate); >> - return; >> - } >> - >> - clk_enable(ldev->pixel_clk); >> - >> /* Configures the HS, VS, DE and PC polarities. Default Active Low= */ >> val =3D 0; >> >> @@ -528,6 +542,7 @@ static void ltdc_crtc_atomic_flush(struct drm_crtc *= crtc, >> } >> >> static const struct drm_crtc_helper_funcs ltdc_crtc_helper_funcs =3D { >> + .mode_fixup =3D ltdc_crtc_mode_fixup, >> .mode_set_nofb =3D ltdc_crtc_mode_set_nofb, >> .atomic_flush =3D ltdc_crtc_atomic_flush, >> .atomic_enable =3D ltdc_crtc_atomic_enable,