On 16/04/2020 14:21, Christian Mauderer wrote:
_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 */
Please use func() in the comments.
+  arm_gt_clock_instance.tc.tc_frequency = frequency;
+
+  /* overwritten with the calculated interval by arm_gt_clock_initialize */
+  arm_gt_clock_instance.interval = frequency;
I would remove this assignment here and read the frequency in arm_gt_clock_initialize() like this:

  tc = &arm_gt_clock_instance.tc;
  frequency = (uint32_t) tc->tc_frequency;
  }
RTEMS_SYSINIT_ITEM(
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to