Date: Sun, 30 Aug 2020 23:20:08 +0300 From: Andriy Gapon <avg@FreeBSD.org> To: Emmanuel Vadot <manu@freebsd.org>, src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r364927 - head/sys/arm/allwinner/clkng Message-ID: <31f105d3-e67a-7b81-8670-55a19237569e@FreeBSD.org> In-Reply-To: <202008281825.07SIPkBa029646@repo.freebsd.org> References: <202008281825.07SIPkBa029646@repo.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 28/08/2020 21:25, Emmanuel Vadot wrote: > Author: manu > Date: Fri Aug 28 18:25:45 2020 > New Revision: 364927 > URL: https://svnweb.freebsd.org/changeset/base/364927 > > Log: > arm: allwinner: clk: Add printfs when we cannot set the correct freq > > For some unknown reason this seems to fix this function when we printf > the best variable. This isn't a delay problem as doing a printf without > it doesn't solve this problem. > This is way above my pay grade so add some printf that shouldn't be printed > in 99% of the case anyway. > Fix booting on most Allwinner boards as the mmc IP uses a NM clock. Just so that our IRC conversation does not get lost to time. I think that the real problem with the code is that it passes a difference between two uint64_t-s, which is uint64_t itself, to abs() which takes an int and returns an int. I am not sure what liberties compilers (especially, clang) can take with that incorrect code -- and they have some options, because abs() is an inline function -- and how the magic printf-s affect those liberties, but I think that it is better to make the code correct. I think that abs(x - y) can be replaced with a local function like: static inline uint64_t distance(uint64_t x, uint64_t y) { return (x >= y ? x - y : y - x); } > Reported by: Alexander Mishin <mishin@mh.net.ru> > MFC after: 3 days > X-MFC-With: 363887 > > Modified: > head/sys/arm/allwinner/clkng/aw_clk_nm.c > > Modified: head/sys/arm/allwinner/clkng/aw_clk_nm.c > ============================================================================== > --- head/sys/arm/allwinner/clkng/aw_clk_nm.c Fri Aug 28 17:55:54 2020 (r364926) > +++ head/sys/arm/allwinner/clkng/aw_clk_nm.c Fri Aug 28 18:25:45 2020 (r364927) > @@ -221,11 +221,15 @@ aw_clk_nm_set_freq(struct clknode *clk, uint64_t fpare > if ((best < *fout) && > ((flags & CLK_SET_ROUND_DOWN) == 0)) { > *stop = 1; > + printf("best freq (%llu) < requested freq(%llu)\n", > + best, *fout); > return (ERANGE); > } > if ((best > *fout) && > ((flags & CLK_SET_ROUND_UP) == 0)) { > *stop = 1; > + printf("best freq (%llu) > requested freq(%llu)\n", > + best, *fout); > return (ERANGE); > } > > -- Andriy Gapon
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?31f105d3-e67a-7b81-8670-55a19237569e>