From patchwork Mon Aug 28 15:59:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Tretter X-Patchwork-Id: 137058 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a7d1:0:b0:3f2:4152:657d with SMTP id p17csp3469471vqm; Mon, 28 Aug 2023 10:13:33 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFOL5ShMbbl1dtJWH2pT++IXkxbWuAxypuudw/sQhyz6d2TRF6lJrxxUqx3cBB7scA0W+7Z X-Received: by 2002:a05:6a00:24c7:b0:68c:3f2:5ff9 with SMTP id d7-20020a056a0024c700b0068c03f25ff9mr12653422pfv.7.1693242812736; Mon, 28 Aug 2023 10:13:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1693242812; cv=none; d=google.com; s=arc-20160816; b=TIBEdM/qV2zM2NxjzgzNHh2VGlTXn2NbkqDVBCQdtJBQMIiMkblT2PJCiCSNCCbLq4 mY2USYbK9oM23RFJSiI2owRSjGiGTYDT9CCHgfQ8sBOVqlNt/37G9XQsthB4spY0vx7d yCut/yv3cvstu7E8SV4Iu+b2ZwyklamDvMh39NRfaktwzHVt3zQPIZwwaFQ1MQxQ/upe mNvB/28yebiUh/dA3Xb1UB+la3dSPw2WfQOjncHtGMPTwXDIGbvTL5atfbzhSEGJ1J4y 9wIf+4IlI9n/np2sviTqnlVvwGyfuSbVPLo/uhWNtqZ5z1mLwhlQaXFv7TCQOt0I7LWp FjTg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from; bh=cVk9lOWR6PkswaB9bvBF48/hHpTHfRHph5Buhs3/tEM=; fh=pKDXkxIseImAYs4+ZQjMc4DXEQVqgI/B2AVAWtKoC1k=; b=gV+rNODKXv9uOwk1LjGQwzggyEe9uc2L1FFnG09JtzJYcrAq1lHcdeE3+5o5xeRTvi 8TUpVoqsQx1/yJLPsN3uo2D+wPch4CA3ywfisKF+llqXgF5zGkHa5uNLK7aP728ApGhE L2J3Dcprb3tCq+zVoHmHjN7RjLGAKS5NpS3NzQh/C/oidXCeKhNAP7dojrPQrjxJM2fl Mczdh3lMdmpNj9vTYtt7tyHdG6u0vXqV/QNzz9lxfR+PmdTDXUMyJ3C39LHLS6sTH8Dv ZHs2+rtDtoDkUi8TIiDUA09iCX7YYM9cU3JZnDpjJ8mM6pcvhmK64UOBDLY6kAKWIymO ePHw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id k18-20020aa78212000000b0068be9437c0esi1241089pfi.215.2023.08.28.10.13.10; Mon, 28 Aug 2023 10:13:32 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232634AbjH1P76 (ORCPT + 99 others); Mon, 28 Aug 2023 11:59:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40958 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229664AbjH1P7T (ORCPT ); Mon, 28 Aug 2023 11:59:19 -0400 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 755A010B for ; Mon, 28 Aug 2023 08:59:17 -0700 (PDT) Received: from dude05.red.stw.pengutronix.de ([2a0a:edc0:0:1101:1d::54]) by metis.ext.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1qaedz-0005pk-GH; Mon, 28 Aug 2023 17:59:11 +0200 From: Michael Tretter Date: Mon, 28 Aug 2023 17:59:07 +0200 Subject: [PATCH 2/5] drm/bridge: samsung-dsim: reread ref clock before configuring PLL MIME-Version: 1.0 Message-Id: <20230818-samsung-dsim-v1-2-b39716db6b7a@pengutronix.de> References: <20230818-samsung-dsim-v1-0-b39716db6b7a@pengutronix.de> In-Reply-To: <20230818-samsung-dsim-v1-0-b39716db6b7a@pengutronix.de> To: Inki Dae , Jagan Teki , Marek Szyprowski , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, kernel@pengutronix.de, Michael Tretter X-Mailer: b4 0.12.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:1101:1d::54 X-SA-Exim-Mail-From: m.tretter@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1775493775466437385 X-GMAIL-MSGID: 1775493775466437385 The PLL reference clock may change at runtime. Thus, reading the clock rate during probe is not sufficient to correctly configure the PLL for the expected hs clock. Read the actual rate of the reference clock before calculating the PLL configuration parameters. Signed-off-by: Michael Tretter --- drivers/gpu/drm/bridge/samsung-dsim.c | 16 +++++++++------- include/drm/bridge/samsung-dsim.h | 1 + 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge/samsung-dsim.c index 6778f1751faa..da90c2038042 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -611,7 +611,12 @@ static unsigned long samsung_dsim_set_pll(struct samsung_dsim *dsi, u16 m; u32 reg; - fin = dsi->pll_clk_rate; + if (dsi->pll_clk) + fin = clk_get_rate(dsi->pll_clk); + else + fin = dsi->pll_clk_rate; + dev_dbg(dsi->dev, "PLL ref clock freq %lu\n", fin); + fout = samsung_dsim_pll_find_pms(dsi, fin, freq, &p, &m, &s); if (!fout) { dev_err(dsi->dev, @@ -1821,18 +1826,15 @@ static int samsung_dsim_parse_dt(struct samsung_dsim *dsi) u32 lane_polarities[5] = { 0 }; struct device_node *endpoint; int i, nr_lanes, ret; - struct clk *pll_clk; ret = samsung_dsim_of_read_u32(node, "samsung,pll-clock-frequency", &dsi->pll_clk_rate, 1); /* If it doesn't exist, read it from the clock instead of failing */ if (ret < 0) { dev_dbg(dev, "Using sclk_mipi for pll clock frequency\n"); - pll_clk = devm_clk_get(dev, "sclk_mipi"); - if (!IS_ERR(pll_clk)) - dsi->pll_clk_rate = clk_get_rate(pll_clk); - else - return PTR_ERR(pll_clk); + dsi->pll_clk = devm_clk_get(dev, "sclk_mipi"); + if (IS_ERR(dsi->pll_clk)) + return PTR_ERR(dsi->pll_clk); } /* If it doesn't exist, use pixel clock instead of failing */ diff --git a/include/drm/bridge/samsung-dsim.h b/include/drm/bridge/samsung-dsim.h index 05100e91ecb9..31ff88f152fb 100644 --- a/include/drm/bridge/samsung-dsim.h +++ b/include/drm/bridge/samsung-dsim.h @@ -87,6 +87,7 @@ struct samsung_dsim { void __iomem *reg_base; struct phy *phy; struct clk **clks; + struct clk *pll_clk; struct regulator_bulk_data supplies[2]; int irq; struct gpio_desc *te_gpio;