Received: by 2002:a05:6358:45e:b0:b5:b6eb:e1f9 with SMTP id 30csp4698402rwe; Tue, 30 Aug 2022 15:22:15 -0700 (PDT) X-Google-Smtp-Source: AA6agR6YNoCEx0QApG2TVUZMftCchOjkccOQcYTMZYqzLl1pBS8lSK6Mz7HGofOkTQexSA5FcEXl X-Received: by 2002:a05:6a00:114f:b0:528:2c7a:634c with SMTP id b15-20020a056a00114f00b005282c7a634cmr23024828pfm.41.1661898134962; Tue, 30 Aug 2022 15:22:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1661898134; cv=none; d=google.com; s=arc-20160816; b=D/MSVQ3unBmc0I+4EX1nAp2HLT6Qf9l8r0vI8fUXepABA4s/hNeDApGwY3kHkI8nV3 4p7cFhzkVsFouGDNEJP+9+LPnGwklyW6/5GxYesagRAuWjxfRyRTbPnDHhQ4Sjr9KGfS Q0qqBGdJfmQLyAlB5FYnbgt10Vh/URbjjV4rOLcJ8aY7PoU850DKFbDRpYnznv4Tc81J XbqcuE8Z+xDVARb57xLkaWRUhfg5TpXot+QtoQLpF0C7nGFcuniEjTQbhz4wIOQ7BtDm N9vLoOE1TF6QYv03mB8qOzauObuyPfqF2eAbmq1EKw23m7OcUrZcACB3EwfzvVoX58ZL sfpA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:message-id:user-agent:date:to:cc:from:subject :references:in-reply-to:content-transfer-encoding:mime-version :dkim-signature; bh=gCUCYVEx4T5dpHHUBITY2HYY4VFLcN/P1WisAD8wmX8=; b=Al7HBDif8zq2h9atm2sZxaQQV+rdGSFreVSOL+Db0Oop8zJGUnToyNcUoCCCKRsTj1 5rkB/irmjOS4uE8NY7rPxQkktWWO7C569fVM2Bhog0kkkEUiwBbVwITSTi72Ry2NtqsB autBLs/c0X9ejG/OhFqwYD8mX8e3pFkuFBkaPH5ap5/kYILrC0GCcNwD6psv+D+14G7G lZuJ5zvadsFhn4jvJUK5pb/1YlaOJ+P4hU0NZrmVCkvyaYRjX633M+oj7CIn4Ti5qGdn OAWR0gl6v7F0UhC+y+fC1KzJ/dYyZz7gBb9kMcdfXVf2bjBc7OXt4b0HwZvl0ltm/n40 9zqQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=LTn4IbBM; 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=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d21-20020a056a0010d500b0052b1cddb14asi14123059pfu.326.2022.08.30.15.22.03; Tue, 30 Aug 2022 15:22:14 -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=@kernel.org header.s=k20201202 header.b=LTn4IbBM; 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=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231279AbiH3WGd (ORCPT + 99 others); Tue, 30 Aug 2022 18:06:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36260 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229808AbiH3WGb (ORCPT ); Tue, 30 Aug 2022 18:06:31 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B53526A48E; Tue, 30 Aug 2022 15:06:28 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id A141560ED9; Tue, 30 Aug 2022 22:06:27 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 07440C433B5; Tue, 30 Aug 2022 22:06:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1661897187; bh=VVaAyTdAfsCPJoUa2MTvj/q7KQPHl/s8HHj/gCUuUo4=; h=In-Reply-To:References:Subject:From:Cc:To:Date:From; b=LTn4IbBMxJEp6Q7V3tyca8rMfjQhb+1sZ9XVw4Heq6M3hFxTPF2Jf8VJuW4BLujGq 6EnCmAkoYl7oKR4cZWzhieamjP0PFdXe8u+KuZjqkrMvdi5Ecql9GbbuRY0EwHww3k DsW9peqa5b389Czrd08ZNAcSQ5nhxrgOHVzmkeW75iG9iDTUQFVxLmofwIV3KzWZm1 Zww9BFNfLcHwpmy8GlKA0OHCxOwIQicey0IzaNGYyadxq2WJGt1JeuAoHYvHRfdMyh udIxGuajZrdmm6eX2SJDIUz2fj8NhU0VdcQvIIwKAo7GpfFpOcEct730Am3TDKdtHX A/8PrIm1/0vUA== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable In-Reply-To: <20220826142030.213805-1-quanyang.wang@windriver.com> References: <20220826142030.213805-1-quanyang.wang@windriver.com> Subject: Re: [PATCH] clk: zynqmp: pll: rectify rate rounding in zynqmp_pll_round_rate From: Stephen Boyd Cc: Michael Tretter , Quanyang Wang , linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org To: Michael Turquette , Michal Simek , quanyang.wang@windriver.com Date: Tue, 30 Aug 2022 15:06:25 -0700 User-Agent: alot/0.10 Message-Id: <20220830220627.07440C433B5@smtp.kernel.org> X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, 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 Quoting quanyang.wang@windriver.com (2022-08-26 07:20:30) > From: Quanyang Wang >=20 > The function zynqmp_pll_round_rate is used to find a most appropriate > PLL frequency which the hardware can generate according to the desired > frequency. For example, if the desired frequency is 297MHz, considering > the limited range from PS_PLL_VCO_MIN (1.5GHz) to PS_PLL_VCO_MAX (3.0GHz) > of PLL, zynqmp_pll_round_rate should return 1.872GHz (297MHz * 5). >=20 > There are two problems with the current code of zynqmp_pll_round_rate: >=20 > 1) When the rate is below PS_PLL_VCO_MIN, it can't find a correct rate > when the parameter "rate" is an integer multiple of *prate, in other word= s, > if "f" is zero, zynqmp_pll_round_rate won't return a valid frequency which > is from PS_PLL_VCO_MIN to PS_PLL_VCO_MAX. For example, *prate is 33MHz > and the rate is 660MHz, zynqmp_pll_round_rate will not boost up rate and > just return 660MHz, and this will cause clk_calc_new_rates failure since > zynqmp_pll_round_rate returns an invalid rate out of its boundaries. >=20 > 2) Even if the rate is higher than PS_PLL_VCO_MIN, there is still a risk > that zynqmp_pll_round_rate returns an invalid rate because the function > DIV_ROUND_CLOSEST makes some loss in the fractional part. If the parent > clock *prate is 33333333Hz and we want to set the PLL rate to 1.5GHz, > this function will return 1499999985Hz by using the formula below: > value =3D *prate * DIV_ROUND_CLOSEST(rate, *prate)). > This value is also invalid since it's slightly smaller than PS_PLL_VCO_MI= N. > because DIV_ROUND_CLOSEST makes some loss in the fractional part. >=20 > Signed-off-by: Quanyang Wang > --- Applied to clk-next