_CPU_Counter_frequency() can be called by the rtems_counter initialization before arm_gt_clock_initialize() initializes the value used in _CPU_Counter_frequency().
Update #3456. --- bsps/arm/shared/clock/clock-generic-timer.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/bsps/arm/shared/clock/clock-generic-timer.c b/bsps/arm/shared/clock/clock-generic-timer.c index 1f39632ba6..a0efb9c7ed 100644 --- a/bsps/arm/shared/clock/clock-generic-timer.c +++ b/bsps/arm/shared/clock/clock-generic-timer.c @@ -161,7 +161,6 @@ static void arm_gt_clock_initialize(void) tc = &arm_gt_clock_instance.tc; tc->tc_get_timecount = arm_gt_clock_get_timecount; tc->tc_counter_mask = 0xffffffff; - tc->tc_frequency = frequency; tc->tc_quality = RTEMS_TIMECOUNTER_QUALITY_CLOCK_DRIVER; rtems_timecounter_install(tc); } @@ -178,12 +177,19 @@ CPU_Counter_ticks _CPU_Counter_read(void) static void arm_gt_clock_early_init(void) { + uint32_t frequency; arm_gt_clock_set_control(0x3); arm_generic_timer_get_config( - &arm_gt_clock_instance.interval, + &frequency, &arm_gt_clock_instance.irq ); + + /* Used by _CPU_Counter_frequency before arm_gt_clock_initialize is called */ + arm_gt_clock_instance.tc.tc_frequency = frequency; + + /* overwritten with the calculated interval by arm_gt_clock_initialize */ + arm_gt_clock_instance.interval = frequency; } RTEMS_SYSINIT_ITEM( -- 2.16.4 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel