summaryrefslogtreecommitdiffstats
path: root/bsps/sparc/erc32
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2018-05-23 14:17:25 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-06-15 13:02:44 +0200
commit65f868cac6f7fd5c3ad02046574c19f8f4673255 (patch)
tree15103fb87ed2e7161c17006e2c077f35e3506a95 /bsps/sparc/erc32
parentAdd RTEMS_SYSINIT_CPU_COUNTER (diff)
downloadrtems-65f868cac6f7fd5c3ad02046574c19f8f4673255.tar.bz2
Add _CPU_Counter_frequency()
Add rtems_counter_frequency() API function. Use it to initialize the counter value converter via the new system initialization step (RTEMS_SYSINIT_CPU_COUNTER). This decouples the counter implementation and the counter converter. It avoids an unnecessary pull in of the 64-bit integer division from libgcc. Update #3456.
Diffstat (limited to 'bsps/sparc/erc32')
-rw-r--r--bsps/sparc/erc32/clock/ckinit.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/bsps/sparc/erc32/clock/ckinit.c b/bsps/sparc/erc32/clock/ckinit.c
index 7f8c0f5aad..e54061abac 100644
--- a/bsps/sparc/erc32/clock/ckinit.c
+++ b/bsps/sparc/erc32/clock/ckinit.c
@@ -28,6 +28,8 @@
#include <rtems/timecounter.h>
#include <rtems/score/sparcimpl.h>
+#define ERC32_REAL_TIME_CLOCK_FREQUENCY 1000000
+
/*
* The Real Time Clock Counter Timer uses this trap type.
*/
@@ -78,19 +80,22 @@ static void erc32_tc_tick( void )
);
}
-static void erc32_counter_initialize( uint32_t frequency )
+static void erc32_counter_initialize( void )
{
_SPARC_Counter_initialize(
_SPARC_Counter_read_address,
_SPARC_Counter_difference_clock_period,
&ERC32_MEC.Real_Time_Clock_Counter
);
- rtems_counter_initialize_converter( frequency );
+}
+
+uint32_t _CPU_Counter_frequency(void)
+{
+ return ERC32_REAL_TIME_CLOCK_FREQUENCY;
}
#define Clock_driver_support_initialize_hardware() \
do { \
- uint32_t frequency = 1000000; \
/* approximately 1 us per countdown */ \
ERC32_MEC.Real_Time_Clock_Scalar = CLOCK_SPEED - 1; \
ERC32_MEC.Real_Time_Clock_Counter = \
@@ -108,11 +113,11 @@ static void erc32_counter_initialize( uint32_t frequency )
); \
rtems_timecounter_simple_install( \
&erc32_tc, \
- frequency, \
+ ERC32_REAL_TIME_CLOCK_FREQUENCY, \
rtems_configuration_get_microseconds_per_tick(), \
erc32_tc_get_timecount \
); \
- erc32_counter_initialize( frequency ); \
+ erc32_counter_initialize(); \
} while (0)
#define Clock_driver_timecounter_tick() erc32_tc_tick()