[U-Boot] [PATCH] arm: timer: sunxi: fix a64 spurious timeout issues

Samuel Holland samuel at sholland.org
Sun Mar 17 18:54:32 UTC 2019


On 03/17/19 13:41, Oskari Lemmelä wrote:
> On 3/17/19 6:04 PM, Peter Robinson wrote:
>> On Sun, Mar 17, 2019 at 2:56 PM Oskari Lemmela <oskari at lemmela.net> wrote:
>>> Fixes spurious timeouts which have been seen during testing
>>> SPI_SUNXI driver. The false timeouts disappear when number of
>>> bits reduced to 10 in workaround.
>>>
>>> The false timeouts are caused by timer backward jumps.
>> Wouldn't it be best to apply the same fix as the kernel uses here [1]
>> as a more permanent fix?
>>
>> [1] https://www.spinics.net/lists/arm-kernel/msg699622.html

This _is_ the same fix as the kernel uses.

> Sure. Difference is that retry counter was added to while loop in kernel side.

And the retry counter isn't needed here, since there is no preemption in u-boot.

> Only CNTPCT is used in u-boot.
> So CNTVCT part of kernel patch is currently not needed?

Correct.

>>
>>> Signed-off-by: Oskari Lemmela <oskari at lemmela.net>
>>> ---
>>>   arch/arm/cpu/armv8/generic_timer.c | 2 +-
>>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/arch/arm/cpu/armv8/generic_timer.c
>>> b/arch/arm/cpu/armv8/generic_timer.c
>>> index c1706dcec1..2e06ee4ed2 100644
>>> --- a/arch/arm/cpu/armv8/generic_timer.c
>>> +++ b/arch/arm/cpu/armv8/generic_timer.c
>>> @@ -66,7 +66,7 @@ unsigned long timer_read_counter(void)
>>>          isb();
>>>          do {
>>>                  asm volatile("mrs %0, cntpct_el0" : "=r" (cntpct));
>>> -       } while (((cntpct + 1) & GENMASK(10, 0)) <= 1);
>>> +       } while (((cntpct + 1) & GENMASK(9, 0)) <= 1);

Please update the 11 to 10 in the comment above as well.

>>>          return cntpct;
>>>   }
>>> -- 
>>> 2.17.1

Thanks,
Samuel



More information about the U-Boot mailing list