From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Nelson Date: Thu, 7 Sep 2017 00:23:19 -0700 Subject: [U-Boot] video: ipu_common: fix build error In-Reply-To: <20170907080127.1ab8b29d@karo-electronics.de> References: <1461809273-4603-1-git-send-email-van.freenix@gmail.com> <7275421f-e4b0-0be4-a856-b9b4159b6845@cox.net> <20170906011619.GA12592@linux-7smt.suse> <20170907080127.1ab8b29d@karo-electronics.de> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: quoted-printable To: u-boot@lists.denx.de On 09/06/2017 11:01 PM, Lothar Wa=C3=9Fmann wrote: > On Wed, 6 Sep 2017 10:34:33 -0700 Eric Nelson wrote: >> On 09/05/2017 06:16 PM, Peng Fan wrote: >>> On Mon, Sep 04, 2017 at 07:48:56PM -0700, Eric Nelson wrote: >>>> Hi Peng, >>>> >>>> Can you tell that I'm hunting a bug in an old version? >>>> >>>> I'm seeing a **very** intermittent regression between U-Boot >>>> versions 2015.07 and 2016.05 and happened to spot something >>>> in this patch. >>>> >>>> On 04/27/2016 07:07 PM, Peng Fan wrote: >>>>> Some toolchains fail to build >>>>> "clk->rate =3D (u64)(clk->parent->rate * 16) / div;" >>>>> And the cast usage is wrong. >>>>> >>>>> Use the following code to fix the issue, >>>>> " >>>>> do_div(parent_rate, div); >>>>> clk->rate =3D parent_rate; >>>>> " >>>>> >>>>> Reported-by: Peter Robinson >>>>> Signed-off-by: Peng Fan >>>>> Cc: Stefano Babic >>>>> Cc: Fabio Estevam >>>>> Cc: Tom Rini >>>>> Cc: Anatolij Gustschin >>>>> Cc: Peter Robinson >>>>> Reviewed-by: Tom Rini >>>>> Tested-by: Peter Robinson >>>>> --- >>>>> >>>>> Hi Peter, >>>>> >>>>> Please help test this patch to see whether this fix your issue or = not. >>>>> Thanks for pointing out this issue. >>>>> >>>>> Thanks, >>>>> Peng. >>>>> >>>>> drivers/video/ipu_common.c | 4 +++- >>>>> 1 file changed, 3 insertions(+), 1 deletion(-) >>>>> >>>>> diff --git a/drivers/video/ipu_common.c b/drivers/video/ipu_common.c >>>>> index 36d4b23..5676a0f 100644 >>>>> --- a/drivers/video/ipu_common.c >>>>> +++ b/drivers/video/ipu_common.c >>>>> @@ -352,7 +352,9 @@ static int ipu_pixel_clk_set_rate(struct clk *clk= , unsigned long rate) >>>>> */ >>>>> __raw_writel((div / 16) << 16, DI_BS_CLKGEN1(clk->id)); >>>> >>>> Did we lose a multiply by 16 in this change? >>> >>> We already have "parent_rate =3D (unsigned long long)clk->parent->rate = * 16;" >>> in this function. >>> >> >> Hmmm. So this patch also fixed a bug, since we previously had >> **two** multiply-by-16's: >> > No! The 'second' multiply by 16 used the clk->parent->rate, not the > 'parent_rate' which was multiplied by 16... >=20 > | parent_rate =3D (unsigned long long)clk->parent->rate * 16; > [...] > | clk->rate =3D (u64)(clk->parent->rate * 16) / div; >=20 Doh! I clearly missed that. Thanks Lothar.