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

André Przywara andre.przywara at arm.com
Sun Mar 17 21:14:43 UTC 2019


On 17/03/2019 18: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.

So in general I am fine with this patch, if it fixes things for you, but
still scratching my head about this.
AFAIK Samuel has never seen less than 11 identical bits in his testing,
and I am using the new SPI driver for some weeks now (without the patch)
and never had any issues. I am on the Pine64 LTS (with that "R18" SoC).

So Oskari, can you share how exactly you triggered this problem?
I'd rather know what's going on before papering over the issue,
especially if that leaves the much more important Linux kernel still at
risk.

Cheers,
Andre.

>>>
>>> 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
> 
> Sure. Difference is that retry counter was added to while loop in kernel
> side.
> 
> Only CNTPCT is used in u-boot.
> So CNTVCT part of kernel patch is currently not needed?
> 
>>
>>> 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);
>>>
>>>          return cntpct;
>>>   }
>>> -- 
>>> 2.17.1
>>>
>>> _______________________________________________
>>> U-Boot mailing list
>>> U-Boot at lists.denx.de
>>> https://lists.denx.de/listinfo/u-boot
> 
> Oskari
> 



More information about the U-Boot mailing list