[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CACRpkdan96Vj58s=g9jiAoyLBpZqPCKcjqD82mgDj5WqRP7vDQ@mail.gmail.com>
Date: Tue, 20 Nov 2018 09:56:58 +0100
From: Linus Walleij <linus.walleij@...aro.org>
To: Marc Zyngier <marc.zyngier@....com>
Cc: Manivannan Sadhasivam <manivannan.sadhasivam@...aro.org>,
Olof Johansson <olof@...om.net>, Arnd Bergmann <arnd@...db.de>,
Rob Herring <robh+dt@...nel.org>,
Thomas Gleixner <tglx@...utronix.de>,
Jason Cooper <jason@...edaemon.net>,
Daniel Lezcano <daniel.lezcano@...aro.org>,
Linux ARM <linux-arm-kernel@...ts.infradead.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
"open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS"
<devicetree@...r.kernel.org>,
Amit Kucheria <amit.kucheria@...aro.org>, zhao_steven@....net,
Andreas Färber <afaerber@...e.de>
Subject: Re: [PATCH 12/16] clocksource: Add clock driver for RDA8810PL SoC
On Tue, Nov 20, 2018 at 9:17 AM Marc Zyngier <marc.zyngier@....com> wrote:
> How does this change anything with the fact that the above code is
> broken? 56 or 64 bit, you cannot read this counter with a single
> access, or two. The canonical way of reading such a counter is
> something like this:
>
> do {
> lo = readl_relaxed(LO);
> hi = readl_relaxed(HI);
> } while (hi != read_relaxed(HI));
To be fair, I have seen hardware that employ a logic latch
such that when a read access is done to the LO register,
the value of the whole counter is latched, also for the HI
register, so when you read the HI register in the second
step, it is never subject to wrapping. (Conversely reading
the HI before the LO will always give you insane values
:D)
However the above code should be fine unless you know
for sure the hardware was constructed with a clever latch.
Yours,
Linus Walleij
Powered by blists - more mailing lists