- Clock driver initialization for secondary cores had to take less than one tick - If tick time is small (i.e. <= 1ms) setting up all cores could take too long and a fatal error is thrown. - Give at least 10 ms time for clock initialization to avoid this error --- bsps/riscv/riscv/clock/clockdrv.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/bsps/riscv/riscv/clock/clockdrv.c b/bsps/riscv/riscv/clock/clockdrv.c index 3afe86576f..102137aeab 100644 --- a/bsps/riscv/riscv/clock/clockdrv.c +++ b/bsps/riscv/riscv/clock/clockdrv.c @@ -211,7 +211,13 @@ static void riscv_clock_initialize(void) tc->interval = interval; cmpval = riscv_clock_read_mtime(&clint->mtime); - cmpval += interval; + /* + * For very short intervals the time of 1 tick is not enough to + * set up the timer on all cores in SMP systems. + * Give the CPU at least 10 ms. + */ + interval = (10000 / us_per_tick) * interval; + cmpval += interval; riscv_clock_clint_init(clint, cmpval, 0); riscv_clock_secondary_initialization(clint, cmpval, interval); -- 2.17.1 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel