Received: by 2002:ac0:de83:0:0:0:0:0 with SMTP id b3csp1454992imk; Mon, 4 Jul 2022 03:29:23 -0700 (PDT) X-Google-Smtp-Source: AGRyM1v2fAA5fZK0HIabY3cPGwZPCTkCPbCG7L4ZF2bHgARENUu+0cIZOIj4MpsqzK7bALQr7HH6 X-Received: by 2002:a17:90b:240e:b0:1e0:775b:f8fc with SMTP id nr14-20020a17090b240e00b001e0775bf8fcmr25143330pjb.132.1656930563071; Mon, 04 Jul 2022 03:29:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1656930563; cv=none; d=google.com; s=arc-20160816; b=w0YSssTcmS1b0PhORoPTjN7jZFIa9cq4k+3Hdx1JWvf8BoAyqO6ioWt2eK1Z63VyvK uW9X5ada7m23Xh4crRBzPBLSrhUvk5zGkpM9U6c02vtfzMO4tQK8D5KyOUj3Jp4ttNGw 8eeZcQveLDmba2VMBfmVgmcGGWRnzQ2qrb1Hw3zKTnN6jaODGih/XXF7S3XuGORBvtvq 8br1Px/sD8uyT74NPVcx5qTJQtNU+NNhBjgJRppDa9JIe+NN2x9q/5GKhsNuXVsPATj7 WdlrtmVo7ZxhIEi/ZQx/Z3yK2rNmT2WEAcb1XZOeo8g2hONrZoZjeLfqxNckf1b+h7bO z5jg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=X7lOi81P59ly9ir3hSSgOlWUEInjdlF70ZZwXlUo5lM=; b=b43y67k7d1lvVXh4vH7l+u/dLpQLVA/g/0fhgYbHyEdNlYKZXD4fErDUgzAcOuMWn3 TRXb/jq+S0HSN6zLALEkzT/G9qaF8QgH7CJ8OqAyKc67cjIBGlOz0qY/qjaVFd3vBfmK SMueFdXzEI9AN39OaEfNFK/cZZ2w2KG4ggPEAIpFmbd78twmLh6KkmE47Lnks7JqVGqU tG5Qtvh+xJ49ECEcrQNw9NAnmswT0qmdBiGzw0OgQjPxPs9HT/jdmf90rZu1WVPzbU9g sVRDs+lP+UFOj/DaMFJPaF3CoIaajVQT69oH5fRy8Ya2tU4sIJ/c2MS8nDtqZ2CSB+xS GOVQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=msoEig4U; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id b12-20020a056a00114c00b0050a7b4bf744si14792544pfm.128.2022.07.04.03.29.11; Mon, 04 Jul 2022 03:29:23 -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; dkim=pass header.i=@gmail.com header.s=20210112 header.b=msoEig4U; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233970AbiGDJyW (ORCPT + 99 others); Mon, 4 Jul 2022 05:54:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47340 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233959AbiGDJyU (ORCPT ); Mon, 4 Jul 2022 05:54:20 -0400 Received: from mail-qt1-x831.google.com (mail-qt1-x831.google.com [IPv6:2607:f8b0:4864:20::831]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 26655DEA8; Mon, 4 Jul 2022 02:54:18 -0700 (PDT) Received: by mail-qt1-x831.google.com with SMTP id x1so9193362qtv.8; Mon, 04 Jul 2022 02:54:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=X7lOi81P59ly9ir3hSSgOlWUEInjdlF70ZZwXlUo5lM=; b=msoEig4U8+Wv0IfCSOlrgbLo1GqcbEggRdXkihILPsUPLrMdElICAReNnVoIymBhPu JU+0+zzxuf+rLJeV1iURziXNWAO8XJZEuaY7vS9+I+sklnva1Miua1E3y1Ao3259Bmju lI/Eidvu2KbVx7LHK9Q56BYbkpj0id7TZIHQX5MNZ6JXjlkD5+hAaQ2m0TiChHr1jOZu VxRrTgu7wKg2K5rKRMJTRKVHkXOIcP60odbYEXmsVcHBdil+KdCh4DuIjHxVmO+jwxmK QYJeG6kchVD+tkwfPMhjoPVBhAyMEQkBrX2hxgQDqiO/14J2DvvR9IFUJJkBwBbfQlpz eRzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=X7lOi81P59ly9ir3hSSgOlWUEInjdlF70ZZwXlUo5lM=; b=s48AM3Q9tqdzBNwvT/yESbhQC+5XnCt/ob8HAtIw5h3bIX7qdw5+Y4uQzggjdbQwSq v4c3MIs7aXrBJHlV8YKo987T63kMQbu/YLnQ5937aRGgy+dXWLvnCKFsx3rp26439hbS 8SlUFXYMqKeuyTw/PyZrtH+uJd5LrMIlS3Z6J2y/eNgOY/ZyfHd9Eobrx8J3Ur9vrpu6 og9jwd45S7p77kZ5rJPwv3nzpDqIVQNg5WLBCAknFFxT3v1YLSL70b9aRAc9J5R45knw Kwv879JAtaxhrMnFHnOWrPMw+uQFLufokbtoRgDxzYKDKQmdW+y9mZj8NYr6gjTrPbOv uR3A== X-Gm-Message-State: AJIora+3DEIjM96Jgc76DxUkRnmay5aE+lbqnlFMaQlW1yJ3V+OkWdtU 5GgwbP/2f60hc35djda5CoKhFjCDaWHo9nrif5w= X-Received: by 2002:ad4:5c64:0:b0:472:f016:bfde with SMTP id i4-20020ad45c64000000b00472f016bfdemr6046629qvh.52.1656928457116; Mon, 04 Jul 2022 02:54:17 -0700 (PDT) MIME-Version: 1.0 References: <20220703164514.308622-1-r.stratiienko@gmail.com> <4748270.31r3eYUQgx@jernej-laptop> In-Reply-To: <4748270.31r3eYUQgx@jernej-laptop> From: Roman Stratiienko Date: Mon, 4 Jul 2022 12:54:06 +0300 Message-ID: Subject: Re: [PATCH v2] clk: sunxi-ng: sun50i: h6: Modify GPU clock configuration to support DFS To: =?UTF-8?Q?Jernej_=C5=A0krabec?= Cc: Samuel Holland , =?UTF-8?B?Q2zDqW1lbnQgUMOpcm9u?= , Michael Turquette , sboyd@kernel.org, mripard@kernel.org, wens@csie.org, linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE 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 Hi Jernej, =D0=B2=D1=81, 3 =D0=B8=D1=8E=D0=BB. 2022 =D0=B3. =D0=B2 21:43, Jernej =C5= =A0krabec : > > Dne nedelja, 03. julij 2022 ob 18:45:14 CEST je Roman Stratiienko napisal= (a): > > Using simple bash script it was discovered that not all CCU registers > > can be safely used for DFS, e.g.: > > > > while true > > do > > devmem 0x3001030 4 0xb0003e02 > > devmem 0x3001030 4 0xb0001e02 > > done > > > > Script above changes the GPU_PLL multiplier register value. While the > > script is running, the user should interact with the user interface. > > > > Using this method the following results were obtained: > > | Register | Name | Bits | Values | Result | > > | -- | -- | -- | -- | -- | > > | 0x3001030 | GPU_PLL.MULT | 15..8 | 20-62 | OK | > > | 0x3001030 | GPU_PLL.INDIV | 1 | 0-1 | OK | > > | 0x3001030 | GPU_PLL.OUTDIV | 0 | 0-1 | FAIL | > > | 0x3001670 | GPU_CLK.DIV | 3..0 | ANY | FAIL | > > > > DVFS started to work seamlessly once dividers which caused the > > glitches were set to fixed values. > > > > Signed-off-by: Roman Stratiienko > > > > --- > > > > Changelog: > > > > V2: > > - Drop changes related to mux > > - Drop frequency limiting > > - Add unused dividers initialization > > --- > > drivers/clk/sunxi-ng/ccu-sun50i-h6.c | 16 +++++++++++++--- > > 1 file changed, 13 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/clk/sunxi-ng/ccu-sun50i-h6.c > > b/drivers/clk/sunxi-ng/ccu-sun50i-h6.c index 2ddf0a0da526f..1b0205ff241= 08 > > 100644 > > --- a/drivers/clk/sunxi-ng/ccu-sun50i-h6.c > > +++ b/drivers/clk/sunxi-ng/ccu-sun50i-h6.c > > @@ -95,13 +95,13 @@ static struct ccu_nkmp pll_periph1_clk =3D { > > }, > > }; > > > > +/* For GPU PLL, using an output divider for DFS causes system to fail = */ > > #define SUN50I_H6_PLL_GPU_REG 0x030 > > static struct ccu_nkmp pll_gpu_clk =3D { > > .enable =3D BIT(31), > > .lock =3D BIT(28), > > .n =3D _SUNXI_CCU_MULT_MIN(8, 8, 12), > > .m =3D _SUNXI_CCU_DIV(1, 1), /* input divider */ > > - .p =3D _SUNXI_CCU_DIV(0, 1), /* output divider > */ > > Having minimum (288 MHz) as per vendor GPU driver and maximum, either max= . opp > or max. from datasheet is equally good. I know that both are basically li= mited > with opp table, but people like to play with these, so it's good to have = them > in. > > > .common =3D { > > .reg =3D 0x030, > > .hw.init =3D CLK_HW_INIT("pll-gpu", "osc24M", > > @@ -294,9 +294,9 @@ static SUNXI_CCU_M_WITH_MUX_GATE(deinterlace_clk, > > "deinterlace", static SUNXI_CCU_GATE(bus_deinterlace_clk, > > "bus-deinterlace", "psi-ahb1-ahb2", 0x62c, BIT(0), 0); > > > > +/* Keep GPU_CLK divider const to avoid DFS instability. */ > > static const char * const gpu_parents[] =3D { "pll-gpu" }; > > -static SUNXI_CCU_M_WITH_MUX_GATE(gpu_clk, "gpu", gpu_parents, 0x670, > > - 0, 3, /* M */ > > +static SUNXI_CCU_MUX_WITH_GATE(gpu_clk, "gpu", gpu_parents, 0x670, > > 24, 1, /* mux */ > > BIT(31), /* gate */ > > CLK_SET_RATE_PARENT); > > @@ -1193,6 +1193,16 @@ static int sun50i_h6_ccu_probe(struct platform_d= evice > > *pdev) if (IS_ERR(reg)) > > return PTR_ERR(reg); > > > > + /* Force PLL_GPU output divider to 0 */ > > Divider 0 here > > > + val =3D readl(reg + SUN50I_H6_PLL_GPU_REG); > > + val &=3D ~BIT(0); > > + writel(val, reg + SUN50I_H6_PLL_GPU_REG); > > + > > + /* Force GPU_CLK divider to 0 */ > > and here sounds wrong, since division by zero is not defined. Using 1 is = more > intuitive and correct, since that's what HW actually uses. > You're right but a few lines below there is already a similar message (see below) , so I used similar formulation to avoid confusion. /* * Force the output divider of video PLLs to 0. * * See the comment before pll-video0 definition for the reason. */ > Patch looks good otherwise. May I have your r-b? Best regards, Roman > > Best regards, > Jernej > > > + val =3D readl(reg + gpu_clk.common.reg); > > + val &=3D ~GENMASK(3, 0); > > + writel(val, reg + gpu_clk.common.reg); > > + > > /* Enable the lock bits on all PLLs */ > > for (i =3D 0; i < ARRAY_SIZE(pll_regs); i++) { > > val =3D readl(reg + pll_regs[i]); > > > >