The ARM generic timer keeps ticking even if disabled or it expired.
In case of updating it with a very low value it might expire again after writing the tval but before updating ctrl. In that case we do lose the status bit saying that the timer expired and we will consequently not get an interrupt for it, leaving the timer in a "dead" state. In order to solve this increase the minimum period with what the timer can be loaded to something higher. Found & analysed with: gem5 Debugged with: andrew Sponsored by: DARPA/AFRL Reviewed by: andrew MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D6202
This commit is contained in:
parent
730ba5a1aa
commit
83655449f5
@ -417,7 +417,7 @@ arm_tmr_attach(device_t dev)
|
||||
sc->et.et_quality = 1000;
|
||||
|
||||
sc->et.et_frequency = sc->clkfreq;
|
||||
sc->et.et_min_period = (0x00000002LLU << 32) / sc->et.et_frequency;
|
||||
sc->et.et_min_period = (0x00000010LLU << 32) / sc->et.et_frequency;
|
||||
sc->et.et_max_period = (0xfffffffeLLU << 32) / sc->et.et_frequency;
|
||||
sc->et.et_start = arm_tmr_start;
|
||||
sc->et.et_stop = arm_tmr_stop;
|
||||
|
Loading…
Reference in New Issue
Block a user