From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mout-p-202.mailbox.org (mout-p-202.mailbox.org [80.241.56.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4A44917732; Wed, 20 Dec 2023 07:08:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oltmanns.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oltmanns.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oltmanns.dev header.i=@oltmanns.dev header.b="MDcUmSB4" Received: from smtp202.mailbox.org (smtp202.mailbox.org [10.196.197.202]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-202.mailbox.org (Postfix) with ESMTPS id 4Sw4R8464Sz9spg; Wed, 20 Dec 2023 08:08:36 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oltmanns.dev; s=MBO0001; t=1703056116; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=LpZoNtkkDCmi/GIcUCtUwUBihXR4v8Tro3usQTKcxlk=; b=MDcUmSB4S9LKW4ZTc+NtSRMKxUEdcUnY0wn6l44qvlbFTTroJ8WZz5Qv8ECcVX6DcWjZEB jQ3/re3xsmLKWlT56zs7kSvnpxqaGqUyTpFPXRYcHlxzWtOpgwLi842VLkgNnvurZyx3u/ pU8yvY2kHZV45dGMVHz4hRINvsyVJ0sWMFDjlDz9We995sS9ko94Wzrbqf0Zguf4yeuezP Dp+RlKPjalQPUv2yalY2J3y9A07U/nS5YMDRzud4jdtIzGnBAI065q5SH+W7caLMt6wG06 yZODhREY6WZtsf7PhjmuFdeVjEA7uEAzTtE1kr3gkp/S35umgtp6o59UeK4Dkg== References: <20231218-pinephone-pll-fixes-v1-0-e238b6ed6dc1@oltmanns.dev> <20231218-pinephone-pll-fixes-v1-1-e238b6ed6dc1@oltmanns.dev> <5736273.DvuYhMxLoT@jernej-laptop> From: Frank Oltmanns To: Jernej =?utf-8?Q?=C5=A0krabec?= Cc: Michael Turquette , Stephen Boyd , Chen-Yu Tsai , Samuel Holland , Guido =?utf-8?Q?G=C3=BCnther?= , Purism Kernel Team , Ondrej Jirman , Neil Armstrong , Jessica Zhang , Sam Ravnborg , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: Re: [PATCH 1/5] clk: sunxi-ng: nkm: Support constraints on m/n ratio and parent rate Date: Wed, 20 Dec 2023 07:58:07 +0100 In-reply-to: <5736273.DvuYhMxLoT@jernej-laptop> Message-ID: <87msu59wrc.fsf@oltmanns.dev> Precedence: bulk X-Mailing-List: linux-clk@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi Jernej! On 2023-12-19 at 17:46:08 +0100, Jernej =C5=A0krabec wrote: > Hi Frank! > > Dne ponedeljek, 18. december 2023 ob 14:35:19 CET je Frank Oltmanns napis= al(a): >> The Allwinner A64 manual lists the following constraints for the >> PLL-MIPI clock: >> - M/N >=3D 3 > > This should be "<=3D" Yes, good catch! I will fix it in V2. > >> - (PLL_VIDEO0)/M >=3D 24MHz >> >> The PLL-MIPI clock is implemented as ccu_nkm. Therefore, add support for >> these constraints. >> >> Signed-off-by: Frank Oltmanns >> --- >> drivers/clk/sunxi-ng/ccu_nkm.c | 23 +++++++++++++++++++++++ >> drivers/clk/sunxi-ng/ccu_nkm.h | 8 ++++++++ >> 2 files changed, 31 insertions(+) >> >> diff --git a/drivers/clk/sunxi-ng/ccu_nkm.c b/drivers/clk/sunxi-ng/ccu_n= km.c >> index eed64547ad42..2af5c1ebd527 100644 >> --- a/drivers/clk/sunxi-ng/ccu_nkm.c >> +++ b/drivers/clk/sunxi-ng/ccu_nkm.c >> @@ -16,6 +16,20 @@ struct _ccu_nkm { >> unsigned long m, min_m, max_m; >> }; >> >> +static bool ccu_nkm_is_valid_rate(struct ccu_common *common, unsigned l= ong parent, >> + unsigned long n, unsigned long m) >> +{ >> + struct ccu_nkm *nkm =3D container_of(common, struct ccu_nkm, common); >> + >> + if (nkm->max_mn_ratio && (m > nkm->max_mn_ratio * n)) >> + return false; >> + >> + if (nkm->parent_wo_nk && (parent < nkm->parent_wo_nk * m)) >> + return false; >> + >> + return true; >> +} >> + >> static unsigned long ccu_nkm_find_best_with_parent_adj(struct ccu_commo= n *common, >> struct clk_hw *parent_hw, >> unsigned long *parent, unsigned long rate, >> @@ -32,6 +46,9 @@ static unsigned long ccu_nkm_find_best_with_parent_adj= (struct ccu_common *common >> >> tmp_parent =3D clk_hw_round_rate(parent_hw, rate * _m / (_n * _k)); >> >> + if (!ccu_nkm_is_valid_rate(common, tmp_parent, _n, _m)) >> + continue; >> + >> tmp_rate =3D tmp_parent * _n * _k / _m; >> >> if (ccu_is_better_rate(common, rate, tmp_rate, best_rate) || >> @@ -65,6 +82,12 @@ static unsigned long ccu_nkm_find_best(unsigned long = parent, unsigned long rate, >> for (_k =3D nkm->min_k; _k <=3D nkm->max_k; _k++) { >> for (_n =3D nkm->min_n; _n <=3D nkm->max_n; _n++) { >> for (_m =3D nkm->min_m; _m <=3D nkm->max_m; _m++) { >> + if ((common->reg =3D=3D 0x040) && (_m > 3 * _n)) >> + break; >> + >> + if ((common->reg =3D=3D 0x040) && (parent < 24000000 * _m)) >> + continue; >> + > > You already figured this part. > >> unsigned long tmp_rate; >> >> tmp_rate =3D parent * _n * _k / _m; >> diff --git a/drivers/clk/sunxi-ng/ccu_nkm.h b/drivers/clk/sunxi-ng/ccu_n= km.h >> index 6601defb3f38..d3d3eaf55faf 100644 >> --- a/drivers/clk/sunxi-ng/ccu_nkm.h >> +++ b/drivers/clk/sunxi-ng/ccu_nkm.h >> @@ -16,6 +16,12 @@ >> * struct ccu_nkm - Definition of an N-K-M clock >> * >> * Clocks based on the formula parent * N * K / M >> + * >> + * @max_mn_ratio: Maximum value for M / N. >> + * @parent_wo_nk: The minimum rate the parent must provide after applyi= ng the divisor, >> + * but without applying the multipliers, i.e. the contstraint >> + * (parent rate)/M >=3D parent_wo_nk >> + * must be fulfilled. >> */ >> struct ccu_nkm { >> u32 enable; >> @@ -27,6 +33,8 @@ struct ccu_nkm { >> struct ccu_mux_internal mux; >> >> unsigned int fixed_post_div; >> + unsigned long max_mn_ratio; >> + unsigned long parent_wo_nk; > > What about max_m_n_ratio and max_parent_m_ratio, to be consistent? This > should also allow to simplify description. Jernej, thank you so much! This is brilliant! I was racking my brain for a good name but failed. Now, that I see your proposal, I don't know why I hadn't come up with it. It's the obvious choice. I'd say with the new names we should be able to get rid of the comments describing the new struct members (also in ccu_nm.h). What are your thoughts on that? Best regards, Frank > > Best regards, > Jernej > >> >> struct ccu_common common; >> }; >> >> From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 1606CC3DA6E for ; Wed, 20 Dec 2023 07:09:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-ID:In-reply-to: Date:Subject:Cc:To:From:References:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=xt7z5tuD/8g4UVb3oTPKhGPFtws3lYGnWMCfHnShraM=; b=HQlgtgwwWO957D ARgxLpiMpoVnDNN9iNvopMgU4d3L+qH9bLowKAfYsODh6AAs9jeYLaT4R7MNEEr7IIrjMOYP4gF85 WGvwywHE/lMBVSB3BDMH3m6AEYTly2Ld2DZiteB7AAQ5y+sqajYBnMbLQbiQJ140x9IUSBTvARIkZ 8eowvujqCb1pLbJc4afidSUnA8MVuNaNYv3W1gXjEKyay6iEC7PJLzR2jce5bcJdGftx5Mb+vc/OY limi3ovfd55l8A2XCY1vs9GSwt+5+64vjF2bJDMGeyw3cWhhxvqMcKLM9v5Vuq01URcBsc2EYeRUT Epi3UZwocWahvn7/qasw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rFqhL-00GMdw-2v; Wed, 20 Dec 2023 07:08:55 +0000 Received: from mout-p-202.mailbox.org ([80.241.56.172]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rFqhJ-00GMZp-09 for linux-arm-kernel@lists.infradead.org; Wed, 20 Dec 2023 07:08:54 +0000 Received: from smtp202.mailbox.org (smtp202.mailbox.org [10.196.197.202]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-202.mailbox.org (Postfix) with ESMTPS id 4Sw4R8464Sz9spg; Wed, 20 Dec 2023 08:08:36 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oltmanns.dev; s=MBO0001; t=1703056116; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=LpZoNtkkDCmi/GIcUCtUwUBihXR4v8Tro3usQTKcxlk=; b=MDcUmSB4S9LKW4ZTc+NtSRMKxUEdcUnY0wn6l44qvlbFTTroJ8WZz5Qv8ECcVX6DcWjZEB jQ3/re3xsmLKWlT56zs7kSvnpxqaGqUyTpFPXRYcHlxzWtOpgwLi842VLkgNnvurZyx3u/ pU8yvY2kHZV45dGMVHz4hRINvsyVJ0sWMFDjlDz9We995sS9ko94Wzrbqf0Zguf4yeuezP Dp+RlKPjalQPUv2yalY2J3y9A07U/nS5YMDRzud4jdtIzGnBAI065q5SH+W7caLMt6wG06 yZODhREY6WZtsf7PhjmuFdeVjEA7uEAzTtE1kr3gkp/S35umgtp6o59UeK4Dkg== References: <20231218-pinephone-pll-fixes-v1-0-e238b6ed6dc1@oltmanns.dev> <20231218-pinephone-pll-fixes-v1-1-e238b6ed6dc1@oltmanns.dev> <5736273.DvuYhMxLoT@jernej-laptop> From: Frank Oltmanns To: Jernej =?utf-8?Q?=C5=A0krabec?= Cc: Michael Turquette , Stephen Boyd , Chen-Yu Tsai , Samuel Holland , Guido =?utf-8?Q?G=C3=BCnther?= , Purism Kernel Team , Ondrej Jirman , Neil Armstrong , Jessica Zhang , Sam Ravnborg , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: Re: [PATCH 1/5] clk: sunxi-ng: nkm: Support constraints on m/n ratio and parent rate Date: Wed, 20 Dec 2023 07:58:07 +0100 In-reply-to: <5736273.DvuYhMxLoT@jernej-laptop> Message-ID: <87msu59wrc.fsf@oltmanns.dev> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231219_230853_244970_05E694F4 X-CRM114-Status: GOOD ( 21.70 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgSmVybmVqIQoKT24gMjAyMy0xMi0xOSBhdCAxNzo0NjowOCArMDEwMCwgSmVybmVqIMWga3Jh YmVjIDxqZXJuZWouc2tyYWJlY0BnbWFpbC5jb20+IHdyb3RlOgo+IEhpIEZyYW5rIQo+Cj4gRG5l IHBvbmVkZWxqZWssIDE4LiBkZWNlbWJlciAyMDIzIG9iIDE0OjM1OjE5IENFVCBqZSBGcmFuayBP bHRtYW5ucyBuYXBpc2FsKGEpOgo+PiBUaGUgQWxsd2lubmVyIEE2NCBtYW51YWwgbGlzdHMgdGhl IGZvbGxvd2luZyBjb25zdHJhaW50cyBmb3IgdGhlCj4+IFBMTC1NSVBJIGNsb2NrOgo+PiAgLSBN L04gPj0gMwo+Cj4gVGhpcyBzaG91bGQgYmUgIjw9IgoKWWVzLCBnb29kIGNhdGNoISBJIHdpbGwg Zml4IGl0IGluIFYyLgoKPgo+PiAgLSAoUExMX1ZJREVPMCkvTSA+PSAyNE1Iego+Pgo+PiBUaGUg UExMLU1JUEkgY2xvY2sgaXMgaW1wbGVtZW50ZWQgYXMgY2N1X25rbS4gVGhlcmVmb3JlLCBhZGQg c3VwcG9ydCBmb3IKPj4gdGhlc2UgY29uc3RyYWludHMuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IEZy YW5rIE9sdG1hbm5zIDxmcmFua0BvbHRtYW5ucy5kZXY+Cj4+IC0tLQo+PiAgZHJpdmVycy9jbGsv c3VueGktbmcvY2N1X25rbS5jIHwgMjMgKysrKysrKysrKysrKysrKysrKysrKysKPj4gIGRyaXZl cnMvY2xrL3N1bnhpLW5nL2NjdV9ua20uaCB8ICA4ICsrKysrKysrCj4+ICAyIGZpbGVzIGNoYW5n ZWQsIDMxIGluc2VydGlvbnMoKykKPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3N1bnhp LW5nL2NjdV9ua20uYyBiL2RyaXZlcnMvY2xrL3N1bnhpLW5nL2NjdV9ua20uYwo+PiBpbmRleCBl ZWQ2NDU0N2FkNDIuLjJhZjVjMWViZDUyNyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9jbGsvc3Vu eGktbmcvY2N1X25rbS5jCj4+ICsrKyBiL2RyaXZlcnMvY2xrL3N1bnhpLW5nL2NjdV9ua20uYwo+ PiBAQCAtMTYsNiArMTYsMjAgQEAgc3RydWN0IF9jY3VfbmttIHsKPj4gIAl1bnNpZ25lZCBsb25n CW0sIG1pbl9tLCBtYXhfbTsKPj4gIH07Cj4+Cj4+ICtzdGF0aWMgYm9vbCBjY3VfbmttX2lzX3Zh bGlkX3JhdGUoc3RydWN0IGNjdV9jb21tb24gKmNvbW1vbiwgdW5zaWduZWQgbG9uZyBwYXJlbnQs Cj4+ICsJCQkJICB1bnNpZ25lZCBsb25nIG4sIHVuc2lnbmVkIGxvbmcgbSkKPj4gK3sKPj4gKwlz dHJ1Y3QgY2N1X25rbSAqbmttID0gY29udGFpbmVyX29mKGNvbW1vbiwgc3RydWN0IGNjdV9ua20s IGNvbW1vbik7Cj4+ICsKPj4gKwlpZiAobmttLT5tYXhfbW5fcmF0aW8gJiYgKG0gPiBua20tPm1h eF9tbl9yYXRpbyAqIG4pKQo+PiArCQlyZXR1cm4gZmFsc2U7Cj4+ICsKPj4gKwlpZiAobmttLT5w YXJlbnRfd29fbmsgJiYgKHBhcmVudCA8IG5rbS0+cGFyZW50X3dvX25rICogbSkpCj4+ICsJCXJl dHVybiBmYWxzZTsKPj4gKwo+PiArCXJldHVybiB0cnVlOwo+PiArfQo+PiArCj4+ICBzdGF0aWMg dW5zaWduZWQgbG9uZyBjY3VfbmttX2ZpbmRfYmVzdF93aXRoX3BhcmVudF9hZGooc3RydWN0IGNj dV9jb21tb24gKmNvbW1vbiwKPj4gIAkJCQkJCSAgICAgICBzdHJ1Y3QgY2xrX2h3ICpwYXJlbnRf aHcsCj4+ICAJCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqcGFyZW50LCB1bnNpZ25lZCBsb25n IHJhdGUsCj4+IEBAIC0zMiw2ICs0Niw5IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNjdV9ua21f ZmluZF9iZXN0X3dpdGhfcGFyZW50X2FkaihzdHJ1Y3QgY2N1X2NvbW1vbiAqY29tbW9uCj4+Cj4+ ICAJCQkJdG1wX3BhcmVudCA9IGNsa19od19yb3VuZF9yYXRlKHBhcmVudF9odywgcmF0ZSAqIF9t IC8gKF9uICogX2spKTsKPj4KPj4gKwkJCQlpZiAoIWNjdV9ua21faXNfdmFsaWRfcmF0ZShjb21t b24sIHRtcF9wYXJlbnQsIF9uLCBfbSkpCj4+ICsJCQkJCWNvbnRpbnVlOwo+PiArCj4+ICAJCQkJ dG1wX3JhdGUgPSB0bXBfcGFyZW50ICogX24gKiBfayAvIF9tOwo+Pgo+PiAgCQkJCWlmIChjY3Vf aXNfYmV0dGVyX3JhdGUoY29tbW9uLCByYXRlLCB0bXBfcmF0ZSwgYmVzdF9yYXRlKSB8fAo+PiBA QCAtNjUsNiArODIsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY2N1X25rbV9maW5kX2Jlc3Qo dW5zaWduZWQgbG9uZyBwYXJlbnQsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKPj4gIAlmb3IgKF9rID0g bmttLT5taW5fazsgX2sgPD0gbmttLT5tYXhfazsgX2srKykgewo+PiAgCQlmb3IgKF9uID0gbmtt LT5taW5fbjsgX24gPD0gbmttLT5tYXhfbjsgX24rKykgewo+PiAgCQkJZm9yIChfbSA9IG5rbS0+ bWluX207IF9tIDw9IG5rbS0+bWF4X207IF9tKyspIHsKPj4gKwkJCQlpZiAoKGNvbW1vbi0+cmVn ID09IDB4MDQwKSAmJiAoX20gPiAzICogX24pKQo+PiArCQkJCQlicmVhazsKPj4gKwo+PiArCQkJ CWlmICgoY29tbW9uLT5yZWcgPT0gMHgwNDApICYmIChwYXJlbnQgPCAyNDAwMDAwMCAqIF9tKSkK Pj4gKwkJCQkJY29udGludWU7Cj4+ICsKPgo+IFlvdSBhbHJlYWR5IGZpZ3VyZWQgdGhpcyBwYXJ0 Lgo+Cj4+ICAJCQkJdW5zaWduZWQgbG9uZyB0bXBfcmF0ZTsKPj4KPj4gIAkJCQl0bXBfcmF0ZSA9 IHBhcmVudCAqIF9uICogX2sgLyBfbTsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3N1bnhp LW5nL2NjdV9ua20uaCBiL2RyaXZlcnMvY2xrL3N1bnhpLW5nL2NjdV9ua20uaAo+PiBpbmRleCA2 NjAxZGVmYjNmMzguLmQzZDNlYWY1NWZhZiAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9jbGsvc3Vu eGktbmcvY2N1X25rbS5oCj4+ICsrKyBiL2RyaXZlcnMvY2xrL3N1bnhpLW5nL2NjdV9ua20uaAo+ PiBAQCAtMTYsNiArMTYsMTIgQEAKPj4gICAqIHN0cnVjdCBjY3VfbmttIC0gRGVmaW5pdGlvbiBv ZiBhbiBOLUstTSBjbG9jawo+PiAgICoKPj4gICAqIENsb2NrcyBiYXNlZCBvbiB0aGUgZm9ybXVs YSBwYXJlbnQgKiBOICogSyAvIE0KPj4gKyAqCj4+ICsgKiBAbWF4X21uX3JhdGlvOglNYXhpbXVt IHZhbHVlIGZvciBNIC8gTi4KPj4gKyAqIEBwYXJlbnRfd29fbms6CVRoZSBtaW5pbXVtIHJhdGUg dGhlIHBhcmVudCBtdXN0IHByb3ZpZGUgYWZ0ZXIgYXBwbHlpbmcgdGhlIGRpdmlzb3IsCj4+ICsg KgkJCWJ1dCB3aXRob3V0IGFwcGx5aW5nIHRoZSBtdWx0aXBsaWVycywgaS5lLiB0aGUgY29udHN0 cmFpbnQKPj4gKyAqCQkJICAgKHBhcmVudCByYXRlKS9NID49IHBhcmVudF93b19uawo+PiArICoJ CQltdXN0IGJlIGZ1bGZpbGxlZC4KPj4gICAqLwo+PiAgc3RydWN0IGNjdV9ua20gewo+PiAgCXUz MgkJCWVuYWJsZTsKPj4gQEAgLTI3LDYgKzMzLDggQEAgc3RydWN0IGNjdV9ua20gewo+PiAgCXN0 cnVjdCBjY3VfbXV4X2ludGVybmFsCW11eDsKPj4KPj4gIAl1bnNpZ25lZCBpbnQJCWZpeGVkX3Bv c3RfZGl2Owo+PiArCXVuc2lnbmVkIGxvbmcJCW1heF9tbl9yYXRpbzsKPj4gKwl1bnNpZ25lZCBs b25nICAgICAgICAgICBwYXJlbnRfd29fbms7Cj4KPiBXaGF0IGFib3V0IG1heF9tX25fcmF0aW8g YW5kIG1heF9wYXJlbnRfbV9yYXRpbywgdG8gYmUgY29uc2lzdGVudD8gVGhpcwo+IHNob3VsZCBh bHNvIGFsbG93IHRvIHNpbXBsaWZ5IGRlc2NyaXB0aW9uLgoKSmVybmVqLCB0aGFuayB5b3Ugc28g bXVjaCEgVGhpcyBpcyBicmlsbGlhbnQhIEkgd2FzIHJhY2tpbmcgbXkgYnJhaW4gZm9yCmEgZ29v ZCBuYW1lIGJ1dCBmYWlsZWQuIE5vdywgdGhhdCBJIHNlZSB5b3VyIHByb3Bvc2FsLCBJIGRvbid0 IGtub3cgd2h5CkkgaGFkbid0IGNvbWUgdXAgd2l0aCBpdC4gSXQncyB0aGUgb2J2aW91cyBjaG9p Y2UuCgpJJ2Qgc2F5IHdpdGggdGhlIG5ldyBuYW1lcyB3ZSBzaG91bGQgYmUgYWJsZSB0byBnZXQg cmlkIG9mIHRoZSBjb21tZW50cwpkZXNjcmliaW5nIHRoZSBuZXcgc3RydWN0IG1lbWJlcnMgKGFs c28gaW4gY2N1X25tLmgpLiBXaGF0IGFyZSB5b3VyCnRob3VnaHRzIG9uIHRoYXQ/CgpCZXN0IHJl Z2FyZHMsCiAgRnJhbmsKCj4KPiBCZXN0IHJlZ2FyZHMsCj4gSmVybmVqCj4KPj4KPj4gIAlzdHJ1 Y3QgY2N1X2NvbW1vbgljb21tb247Cj4+ICB9Owo+Pgo+PgoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QK bGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRl YWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 1D766C46CD3 for ; Wed, 20 Dec 2023 07:08:42 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 7143B10E534; Wed, 20 Dec 2023 07:08:41 +0000 (UTC) Received: from mout-p-202.mailbox.org (mout-p-202.mailbox.org [80.241.56.172]) by gabe.freedesktop.org (Postfix) with ESMTPS id F20B310E534 for ; Wed, 20 Dec 2023 07:08:39 +0000 (UTC) Received: from smtp202.mailbox.org (smtp202.mailbox.org [10.196.197.202]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-202.mailbox.org (Postfix) with ESMTPS id 4Sw4R8464Sz9spg; Wed, 20 Dec 2023 08:08:36 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oltmanns.dev; s=MBO0001; t=1703056116; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=LpZoNtkkDCmi/GIcUCtUwUBihXR4v8Tro3usQTKcxlk=; b=MDcUmSB4S9LKW4ZTc+NtSRMKxUEdcUnY0wn6l44qvlbFTTroJ8WZz5Qv8ECcVX6DcWjZEB jQ3/re3xsmLKWlT56zs7kSvnpxqaGqUyTpFPXRYcHlxzWtOpgwLi842VLkgNnvurZyx3u/ pU8yvY2kHZV45dGMVHz4hRINvsyVJ0sWMFDjlDz9We995sS9ko94Wzrbqf0Zguf4yeuezP Dp+RlKPjalQPUv2yalY2J3y9A07U/nS5YMDRzud4jdtIzGnBAI065q5SH+W7caLMt6wG06 yZODhREY6WZtsf7PhjmuFdeVjEA7uEAzTtE1kr3gkp/S35umgtp6o59UeK4Dkg== References: <20231218-pinephone-pll-fixes-v1-0-e238b6ed6dc1@oltmanns.dev> <20231218-pinephone-pll-fixes-v1-1-e238b6ed6dc1@oltmanns.dev> <5736273.DvuYhMxLoT@jernej-laptop> From: Frank Oltmanns To: Jernej =?utf-8?Q?=C5=A0krabec?= Subject: Re: [PATCH 1/5] clk: sunxi-ng: nkm: Support constraints on m/n ratio and parent rate Date: Wed, 20 Dec 2023 07:58:07 +0100 In-reply-to: <5736273.DvuYhMxLoT@jernej-laptop> Message-ID: <87msu59wrc.fsf@oltmanns.dev> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Neil Armstrong , Purism Kernel Team , Samuel Holland , Stephen Boyd , David Airlie , Michael Turquette , linux-kernel@vger.kernel.org, Maxime Ripard , linux-clk@vger.kernel.org, linux-sunxi@lists.linux.dev, Chen-Yu Tsai , Ondrej Jirman , dri-devel@lists.freedesktop.org, Thomas Zimmermann , Jessica Zhang , Sam Ravnborg , Guido =?utf-8?Q?G=C3=BCnther?= , linux-arm-kernel@lists.infradead.org Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Hi Jernej! On 2023-12-19 at 17:46:08 +0100, Jernej =C5=A0krabec wrote: > Hi Frank! > > Dne ponedeljek, 18. december 2023 ob 14:35:19 CET je Frank Oltmanns napis= al(a): >> The Allwinner A64 manual lists the following constraints for the >> PLL-MIPI clock: >> - M/N >=3D 3 > > This should be "<=3D" Yes, good catch! I will fix it in V2. > >> - (PLL_VIDEO0)/M >=3D 24MHz >> >> The PLL-MIPI clock is implemented as ccu_nkm. Therefore, add support for >> these constraints. >> >> Signed-off-by: Frank Oltmanns >> --- >> drivers/clk/sunxi-ng/ccu_nkm.c | 23 +++++++++++++++++++++++ >> drivers/clk/sunxi-ng/ccu_nkm.h | 8 ++++++++ >> 2 files changed, 31 insertions(+) >> >> diff --git a/drivers/clk/sunxi-ng/ccu_nkm.c b/drivers/clk/sunxi-ng/ccu_n= km.c >> index eed64547ad42..2af5c1ebd527 100644 >> --- a/drivers/clk/sunxi-ng/ccu_nkm.c >> +++ b/drivers/clk/sunxi-ng/ccu_nkm.c >> @@ -16,6 +16,20 @@ struct _ccu_nkm { >> unsigned long m, min_m, max_m; >> }; >> >> +static bool ccu_nkm_is_valid_rate(struct ccu_common *common, unsigned l= ong parent, >> + unsigned long n, unsigned long m) >> +{ >> + struct ccu_nkm *nkm =3D container_of(common, struct ccu_nkm, common); >> + >> + if (nkm->max_mn_ratio && (m > nkm->max_mn_ratio * n)) >> + return false; >> + >> + if (nkm->parent_wo_nk && (parent < nkm->parent_wo_nk * m)) >> + return false; >> + >> + return true; >> +} >> + >> static unsigned long ccu_nkm_find_best_with_parent_adj(struct ccu_commo= n *common, >> struct clk_hw *parent_hw, >> unsigned long *parent, unsigned long rate, >> @@ -32,6 +46,9 @@ static unsigned long ccu_nkm_find_best_with_parent_adj= (struct ccu_common *common >> >> tmp_parent =3D clk_hw_round_rate(parent_hw, rate * _m / (_n * _k)); >> >> + if (!ccu_nkm_is_valid_rate(common, tmp_parent, _n, _m)) >> + continue; >> + >> tmp_rate =3D tmp_parent * _n * _k / _m; >> >> if (ccu_is_better_rate(common, rate, tmp_rate, best_rate) || >> @@ -65,6 +82,12 @@ static unsigned long ccu_nkm_find_best(unsigned long = parent, unsigned long rate, >> for (_k =3D nkm->min_k; _k <=3D nkm->max_k; _k++) { >> for (_n =3D nkm->min_n; _n <=3D nkm->max_n; _n++) { >> for (_m =3D nkm->min_m; _m <=3D nkm->max_m; _m++) { >> + if ((common->reg =3D=3D 0x040) && (_m > 3 * _n)) >> + break; >> + >> + if ((common->reg =3D=3D 0x040) && (parent < 24000000 * _m)) >> + continue; >> + > > You already figured this part. > >> unsigned long tmp_rate; >> >> tmp_rate =3D parent * _n * _k / _m; >> diff --git a/drivers/clk/sunxi-ng/ccu_nkm.h b/drivers/clk/sunxi-ng/ccu_n= km.h >> index 6601defb3f38..d3d3eaf55faf 100644 >> --- a/drivers/clk/sunxi-ng/ccu_nkm.h >> +++ b/drivers/clk/sunxi-ng/ccu_nkm.h >> @@ -16,6 +16,12 @@ >> * struct ccu_nkm - Definition of an N-K-M clock >> * >> * Clocks based on the formula parent * N * K / M >> + * >> + * @max_mn_ratio: Maximum value for M / N. >> + * @parent_wo_nk: The minimum rate the parent must provide after applyi= ng the divisor, >> + * but without applying the multipliers, i.e. the contstraint >> + * (parent rate)/M >=3D parent_wo_nk >> + * must be fulfilled. >> */ >> struct ccu_nkm { >> u32 enable; >> @@ -27,6 +33,8 @@ struct ccu_nkm { >> struct ccu_mux_internal mux; >> >> unsigned int fixed_post_div; >> + unsigned long max_mn_ratio; >> + unsigned long parent_wo_nk; > > What about max_m_n_ratio and max_parent_m_ratio, to be consistent? This > should also allow to simplify description. Jernej, thank you so much! This is brilliant! I was racking my brain for a good name but failed. Now, that I see your proposal, I don't know why I hadn't come up with it. It's the obvious choice. I'd say with the new names we should be able to get rid of the comments describing the new struct members (also in ccu_nm.h). What are your thoughts on that? Best regards, Frank > > Best regards, > Jernej > >> >> struct ccu_common common; >> }; >> >>