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 38AB9C433F5 for ; Fri, 15 Apr 2022 08:53:36 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=jYBW4kHsOtS+jlOuu9HFg8yq+Os3BEtyyx8jvtbFN88=; b=JHUMFHZ8cFsxml Hlc9d6rnPKhsX3AMczXY1Jlpvp9X1khzd0lr1gj6VNeHW8VytEw4QwO9efkJAfcHMbcAlSmW/zvfC oLVPwFnRUPkw3t7pfnl6rzqKDE8qCsdt6m0jMWai2cxZn9K0i7Q7wXOqp8E+V+2PoqOrk407USRjD V0K/RRmqgqYs1DpVxwx8xulqQDEZ7GDqhJOs4iGsoRVH3EHQEwzb9vmnOQxUPlFkbJ+2cBcC9gLMj f2A4DLv45c97UlBD2+o2vRZGlVNZgF7GdAmNPLasYenhJ/WFtJsHSsLQ802wZUAjzfoiDdSYnqObi ebZbVfWyLQ9rCkAzcyAw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nfHgw-009Pqi-2h; Fri, 15 Apr 2022 08:52:34 +0000 Received: from mout.kundenserver.de ([217.72.192.73]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nfHgr-009PoL-09; Fri, 15 Apr 2022 08:52:31 +0000 Received: from [192.168.1.107] ([37.4.249.94]) by mrelayeu.kundenserver.de (mreue109 [212.227.15.183]) with ESMTPSA (Nemesis) id 1MOiLp-1nIWZ60VzT-00QDKM; Fri, 15 Apr 2022 10:52:15 +0200 Message-ID: <0b3356c0-b4c8-91ed-dfde-9f50483ec36f@i2se.com> Date: Fri, 15 Apr 2022 10:52:13 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.7.0 Subject: Re: [PATCH v2] clk: bcm2835: Round UART input clock up Content-Language: en-US To: "Ivan T. Ivanov" Cc: Michael Turquette , Stephen Boyd , Nicolas Saenz Julienne , Florian Fainelli , Ray Jui , Scott Branden , Paul Walmsley , Palmer Dabbelt , Albert Ou , Phil Elwell , kernel test robot , bcm-kernel-feedback-list@broadcom.com, linux-clk@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org References: <20220404125113.80239-1-iivanov@suse.de> <20220414105656.qt52zmr5vjmjdcxc@suse> From: Stefan Wahren In-Reply-To: <20220414105656.qt52zmr5vjmjdcxc@suse> X-Provags-ID: V03:K1:UebfG6WqPbhJizg1NMN/mpyZgcPumdWSuBM/6BTDt9v+yXZkEr3 GndZzAbWe8BDp4QzSQwPPJ3+SmJBMG7kBuYPQAABkxMraT4NPgtVj9kuGjxBYk0TT/Tgi94 WPgYpXiQ3heRKbRvZgHden647nwMC9ZT5R5edTEYWd4N7yOmifX7WQB8FoypikFloWZ3Ujn glSzQtjAu9YfvjjiOochg== X-UI-Out-Filterresults: notjunk:1;V03:K0:Z/PBRr/I3gA=:T0iJ+twphEZJ7qBwP+UyhK 8mfkYIZWGlKLh/v9pMQXh7oJp1ZCiHXjIYhtQssd/cjlQBJlTdIcT6Rn5EiIwoSl3xATiYAWX RLp3EU+wq/Au6WfPMLI6TEkIf8OaJUxqhr2CxEi8NH0c2+9ZIPqPSHlrwst7Xqht7S5huRvSm ETiqP5Zp38/Mcg+ko2dsok0nfPkky/RM4h3NjV2t8Gbd/MCj8AqW0SwIxuEF1pA8wCY83NcE5 juWgHvS0wUDofvPd98hcwRUygoZyBcw6bHGj5j6oJKLuOO5lbrdS/EqkwI5NiXtFNMRfwv1BM 86lE73CG/pXTfjCBTqc9kkANvXAfA142Tyvk8gzh2mLietz321GApomGM+xKBV0jwNEsaX0NF VAnRpn/XdDj65o21hq9xAEyqMZEjr+8v1T6hUO6tyKEewImSGDxTpOUkANiJIiKuxKTBzyfwA Bz7ImpR+2RlcdsEVuWlWk3EZChT4q5zJrt6IDiZgf2Z/I4T55Fg2azABM3J/X9XPPzvND211m QuO06kgldItGTPA9xHXwDJ+fsyOyh0kBH6yJ779EQbq9MOJ1o30aQNETOsqX9geSILX67LDTu FvwPjC2OYoprWZKm0TdO/DQWpzGPvIdEu6ocyKsVMlLmMlh7zE9NdZ8/Ky9OtQK9kuCtWDrFJ BGhtZLvUVj5s+CGrKaH4h6nx+WjCEqRQa/AKc17ogShsd/mJXGHy45rhuVFoBeEVFerRG5Wxz 5v683OAdSbpVWBc8 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220415_015229_406611_DCD23717 X-CRM114-Status: GOOD ( 24.46 ) 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-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi Ivan, Am 14.04.22 um 12:56 schrieb Ivan T. Ivanov: > Hi Stefan, > > Please, could you take a look into following patch? yes, but i cannot give a technical review. But from my gut feeling this doesn't look really elegant to me. > > Thanks! > Ivan > > On 04-04 15:51, Ivan T. Ivanov wrote: >> Subject: [PATCH v2] clk: bcm2835: Round UART input clock up >> Message-Id: <20220404125113.80239-1-iivanov@suse.de> >> >> The UART clock is initialised to be as close to the requested >> frequency as possible without exceeding it. Now that there is a >> clock manager that returns the actual frequencies, an expected >> 48MHz clock is reported as 47999625. If the requested baudrate >> == requested clock/16, there is no headroom and the slight >> reduction in actual clock rate results in failure. >> >> If increasing a clock by less than 0.1% changes it from ..999.. >> to ..000.., round it up. Based on this commit message this looks like a fix / workaround for an issue. It would be very helpful to know: What issue should be fixed? Why is it fixed here and not in the UART driver for instance? In case it fixes a regression, a Fixes tag should be necessary. In best case this is explained in the commit message. Best regards >> >> This is reworked version of a downstream fix: >> https://github.com/raspberrypi/linux/commit/ab3f1b39537f6d3825b8873006fbe2fc5ff057b7 >> >> Cc: Phil Elwell >> Signed-off-by: Ivan T. Ivanov >> --- >> Changes since v1 >> Make bcm2835_clock_round() static to fix following warning >> when compiling for riscv: >> drivers/clk/bcm/clk-bcm2835.c:997:15: warning: no previous prototype for 'bcm2835_clock_round' [-Wmissing-prototypes] >> Reported-by: kernel test robot >> >> drivers/clk/bcm/clk-bcm2835.c | 30 ++++++++++++++++++++++++++++-- >> 1 file changed, 28 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c >> index 3ad20e75fd23..c29b643d1bf5 100644 >> --- a/drivers/clk/bcm/clk-bcm2835.c >> +++ b/drivers/clk/bcm/clk-bcm2835.c >> @@ -502,6 +502,8 @@ struct bcm2835_clock_data { >> bool low_jitter; >> >> u32 tcnt_mux; >> + >> + bool round_up; >> }; >> >> struct bcm2835_gate_data { >> @@ -992,12 +994,30 @@ static long bcm2835_clock_rate_from_divisor(struct bcm2835_clock *clock, >> return temp; >> } >> >> +static unsigned long bcm2835_clock_round(unsigned long clk) >> +{ >> + unsigned long scaler; >> + >> + /* >> + * If increasing a clock by less than 0.1% changes it >> + * from ..999.. to ..000.., round up. >> + */ >> + scaler = 1; >> + while (scaler * 100000 < clk) >> + scaler *= 10; >> + if ((clk + scaler - 1) / scaler % 1000 == 0) >> + clk = (clk / scaler + 1) * scaler; >> + >> + return clk; >> +} >> + >> static unsigned long bcm2835_clock_get_rate(struct clk_hw *hw, >> unsigned long parent_rate) >> { >> struct bcm2835_clock *clock = bcm2835_clock_from_hw(hw); >> struct bcm2835_cprman *cprman = clock->cprman; >> const struct bcm2835_clock_data *data = clock->data; >> + unsigned long rate; >> u32 div; >> >> if (data->int_bits == 0 && data->frac_bits == 0) >> @@ -1005,7 +1025,12 @@ static unsigned long bcm2835_clock_get_rate(struct clk_hw *hw, >> >> div = cprman_read(cprman, data->div_reg); >> >> - return bcm2835_clock_rate_from_divisor(clock, parent_rate, div); >> + rate = bcm2835_clock_rate_from_divisor(clock, parent_rate, div); >> + >> + if (data->round_up) >> + rate = bcm2835_clock_round(rate); >> + >> + return rate; >> } >> >> static void bcm2835_clock_wait_busy(struct bcm2835_clock *clock) >> @@ -2142,7 +2167,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { >> .div_reg = CM_UARTDIV, >> .int_bits = 10, >> .frac_bits = 12, >> - .tcnt_mux = 28), >> + .tcnt_mux = 28, >> + .round_up = true), >> >> /* TV encoder clock. Only operating frequency is 108Mhz. */ >> [BCM2835_CLOCK_VEC] = REGISTER_PER_CLK( >> -- >> 2.26.2 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel