summaryrefslogtreecommitdiffstats
path: root/bsps/powerpc
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/powerpc
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/powerpc')
-rw-r--r--bsps/powerpc/beatnik/start/bspstart.c8
-rw-r--r--bsps/powerpc/gen5200/start/bspstart.c6
-rw-r--r--bsps/powerpc/gen83xx/start/bspstart.c6
-rw-r--r--bsps/powerpc/haleakala/start/bspstart.c6
-rw-r--r--bsps/powerpc/motorola_powerpc/start/bspstart.c8
-rw-r--r--bsps/powerpc/mpc55xxevb/start/bspstart.c6
-rw-r--r--bsps/powerpc/mpc8260ads/start/bspstart.c6
-rw-r--r--bsps/powerpc/mvme3100/start/bspstart.c8
-rw-r--r--bsps/powerpc/mvme5500/start/bspstart.c8
-rw-r--r--bsps/powerpc/psim/start/bspstart.c6
-rw-r--r--bsps/powerpc/qemuppc/start/bspstart.c6
-rw-r--r--bsps/powerpc/qoriq/start/bspstart.c10
-rw-r--r--bsps/powerpc/ss555/start/bspstart.c6
-rw-r--r--bsps/powerpc/t32mppc/start/bspstart.c8
-rw-r--r--bsps/powerpc/tqm8xx/start/bspstart.c6
-rw-r--r--bsps/powerpc/virtex/start/bspstart.c7
-rw-r--r--bsps/powerpc/virtex4/start/bspstart.c5
-rw-r--r--bsps/powerpc/virtex5/start/bspstart.c7
18 files changed, 92 insertions, 31 deletions
diff --git a/bsps/powerpc/beatnik/start/bspstart.c b/bsps/powerpc/beatnik/start/bspstart.c
index c3f2c0ceda..83c6d2efa6 100644
--- a/bsps/powerpc/beatnik/start/bspstart.c
+++ b/bsps/powerpc/beatnik/start/bspstart.c
@@ -162,6 +162,11 @@ BSP_getBoardType( void )
return board_type;
}
+uint32_t _CPU_Counter_frequency(void)
+{
+ return BSP_bus_frequency / (BSP_time_base_divisor / 1000);
+}
+
/*
* bsp_start
*
@@ -330,9 +335,6 @@ void bsp_start( void )
*/
bsp_clicks_per_usec = BSP_bus_frequency/(BSP_time_base_divisor * 1000);
- rtems_counter_initialize_converter(
- BSP_bus_frequency / (BSP_time_base_divisor / 1000)
- );
#ifdef SHOW_MORE_INIT_SETTINGS
printk(
diff --git a/bsps/powerpc/gen5200/start/bspstart.c b/bsps/powerpc/gen5200/start/bspstart.c
index 209cc7738e..8b1558ce7b 100644
--- a/bsps/powerpc/gen5200/start/bspstart.c
+++ b/bsps/powerpc/gen5200/start/bspstart.c
@@ -112,6 +112,11 @@ uint32_t bsp_time_base_frequency;
/* Legacy */
uint32_t bsp_clicks_per_usec;
+uint32_t _CPU_Counter_frequency(void)
+{
+ return bsp_time_base_frequency;
+}
+
void bsp_start(void)
{
/*
@@ -145,7 +150,6 @@ void bsp_start(void)
bsp_time_base_frequency = XLB_CLOCK / 4;
bsp_clicks_per_usec = (XLB_CLOCK/4000000);
- rtems_counter_initialize_converter(bsp_time_base_frequency);
/* Initialize exception handler */
ppc_exc_cache_wb_check = 0;
diff --git a/bsps/powerpc/gen83xx/start/bspstart.c b/bsps/powerpc/gen83xx/start/bspstart.c
index cd729a8e17..4070c56347 100644
--- a/bsps/powerpc/gen83xx/start/bspstart.c
+++ b/bsps/powerpc/gen83xx/start/bspstart.c
@@ -51,6 +51,11 @@ static int mpc83xx_decrementer_exception_handler( BSP_Exception_frame *frame, un
return 0;
}
+uint32_t _CPU_Counter_frequency(void)
+{
+ return bsp_time_base_frequency;
+}
+
void bsp_start( void)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
@@ -92,7 +97,6 @@ void bsp_start( void)
#endif /* HAS_UBOOT */
bsp_time_base_frequency = BSP_bus_frequency / 4;
bsp_clicks_per_usec = bsp_time_base_frequency / 1000000;
- rtems_counter_initialize_converter(bsp_time_base_frequency);
/* Initialize some console parameters */
for (i = 0; i < console_device_count; ++i) {
diff --git a/bsps/powerpc/haleakala/start/bspstart.c b/bsps/powerpc/haleakala/start/bspstart.c
index 18b45f33df..5f7f5efb95 100644
--- a/bsps/powerpc/haleakala/start/bspstart.c
+++ b/bsps/powerpc/haleakala/start/bspstart.c
@@ -153,6 +153,11 @@ DirectUARTWrite(const char c)
BSP_output_char_function_type BSP_output_char = DirectUARTWrite;
BSP_polling_getchar_function_type BSP_poll_char = NULL;
+uint32_t _CPU_Counter_frequency(void)
+{
+ return bsp_clicks_per_usec * 1000000;
+}
+
/*===================================================================*/
void bsp_start( void )
@@ -178,7 +183,6 @@ void bsp_start( void )
/* Set globals visible to clock.c */
/* timebase register ticks/microsecond = CPU Clk in MHz */
bsp_clicks_per_usec = 400;
- rtems_counter_initialize_converter(bsp_clicks_per_usec * 1000000);
/*
* Initialize default raw exception handlers.
diff --git a/bsps/powerpc/motorola_powerpc/start/bspstart.c b/bsps/powerpc/motorola_powerpc/start/bspstart.c
index 3ab9588af0..7fb684c759 100644
--- a/bsps/powerpc/motorola_powerpc/start/bspstart.c
+++ b/bsps/powerpc/motorola_powerpc/start/bspstart.c
@@ -119,6 +119,11 @@ static unsigned int get_eumbbar(void) {
}
#endif
+uint32_t _CPU_Counter_frequency(void)
+{
+ return BSP_bus_frequency / (BSP_time_base_divisor / 1000);
+}
+
/*
* bsp_start
*
@@ -346,9 +351,6 @@ void bsp_start( void )
* initialize the device driver parameters
*/
bsp_clicks_per_usec = BSP_bus_frequency/(BSP_time_base_divisor * 1000);
- rtems_counter_initialize_converter(
- BSP_bus_frequency / (BSP_time_base_divisor / 1000)
- );
/*
* Initalize RTEMS IRQ system
diff --git a/bsps/powerpc/mpc55xxevb/start/bspstart.c b/bsps/powerpc/mpc55xxevb/start/bspstart.c
index 9042fc3864..34d59a9ac2 100644
--- a/bsps/powerpc/mpc55xxevb/start/bspstart.c
+++ b/bsps/powerpc/mpc55xxevb/start/bspstart.c
@@ -63,6 +63,11 @@ static void null_pointer_protection(void)
#endif
}
+uint32_t _CPU_Counter_frequency(void)
+{
+ return bsp_clock_speed;
+}
+
void bsp_start(void)
{
null_pointer_protection();
@@ -82,7 +87,6 @@ void bsp_start(void)
/* Time reference value */
bsp_clicks_per_usec = bsp_clock_speed / 1000000;
- rtems_counter_initialize_converter(bsp_clock_speed);
/* Initialize exceptions */
ppc_exc_initialize_with_vector_base(
diff --git a/bsps/powerpc/mpc8260ads/start/bspstart.c b/bsps/powerpc/mpc8260ads/start/bspstart.c
index 44ec072775..6f1cc72a2c 100644
--- a/bsps/powerpc/mpc8260ads/start/bspstart.c
+++ b/bsps/powerpc/mpc8260ads/start/bspstart.c
@@ -114,6 +114,11 @@ static void _BSP_Uart2_enable(void)
csr->bcsr1 &= ~UART2_E; /* Enable Uart2 */
}
+uint32_t _CPU_Counter_frequency(void)
+{
+ return bsp_clock_speed;
+}
+
void bsp_start(void)
{
/* Set MPC8260ADS board LEDS and Uart enable lines */
@@ -171,7 +176,6 @@ void bsp_start(void)
bsp_serial_cts_rts = 0;
bsp_serial_rate = 9600;
bsp_clock_speed = 40000000;
- rtems_counter_initialize_converter(bsp_clock_speed);
#ifdef REV_0_2
/* set up some board specific registers */
diff --git a/bsps/powerpc/mvme3100/start/bspstart.c b/bsps/powerpc/mvme3100/start/bspstart.c
index 27b483332c..a073baa784 100644
--- a/bsps/powerpc/mvme3100/start/bspstart.c
+++ b/bsps/powerpc/mvme3100/start/bspstart.c
@@ -192,6 +192,11 @@ BSP_calc_freqs( void )
printk("CPU Clock Freq: %10u Hz\n", BSP_processor_frequency);
}
+uint32_t _CPU_Counter_frequency(void)
+{
+ return BSP_bus_frequency / (BSP_time_base_divisor / 1000);
+}
+
/*
* bsp_start
*
@@ -367,9 +372,6 @@ VpdBufRec vpdData [] = {
_BSP_clear_hostbridge_errors(0 /* enableMCP */, 0/*quiet*/);
bsp_clicks_per_usec = BSP_bus_frequency/(BSP_time_base_divisor * 1000);
- rtems_counter_initialize_converter(
- BSP_bus_frequency / (BSP_time_base_divisor / 1000)
- );
/*
* Initalize RTEMS IRQ system
diff --git a/bsps/powerpc/mvme5500/start/bspstart.c b/bsps/powerpc/mvme5500/start/bspstart.c
index 279524eb8f..fc7057613a 100644
--- a/bsps/powerpc/mvme5500/start/bspstart.c
+++ b/bsps/powerpc/mvme5500/start/bspstart.c
@@ -169,6 +169,11 @@ save_boot_params(
return cmdline_buf;
}
+uint32_t _CPU_Counter_frequency(void)
+{
+ return BSP_bus_frequency / (BSP_time_base_divisor / 1000);
+}
+
void bsp_start( void )
{
#ifdef CONF_VPD
@@ -265,9 +270,6 @@ void bsp_start( void )
/* P94 : 7455 TB/DECR is clocked by the system bus clock frequency */
bsp_clicks_per_usec = BSP_bus_frequency/(BSP_time_base_divisor * 1000);
- rtems_counter_initialize_converter(
- BSP_bus_frequency / (BSP_time_base_divisor / 1000)
- );
/*
* Initalize RTEMS IRQ system
diff --git a/bsps/powerpc/psim/start/bspstart.c b/bsps/powerpc/psim/start/bspstart.c
index 3a9809c022..1250715275 100644
--- a/bsps/powerpc/psim/start/bspstart.c
+++ b/bsps/powerpc/psim/start/bspstart.c
@@ -60,6 +60,11 @@ unsigned int BSP_time_base_divisor;
extern unsigned long __rtems_end[];
+uint32_t _CPU_Counter_frequency(void)
+{
+ return bsp_clicks_per_usec * 1000000;
+}
+
/*
* bsp_start
*
@@ -81,7 +86,6 @@ void bsp_start( void )
BSP_bus_frequency = (unsigned int)PSIM_INSTRUCTIONS_PER_MICROSECOND;
bsp_clicks_per_usec = BSP_bus_frequency;
BSP_time_base_divisor = 1;
- rtems_counter_initialize_converter(bsp_clicks_per_usec * 1000000);
/*
* Initialize default raw exception handlers.
diff --git a/bsps/powerpc/qemuppc/start/bspstart.c b/bsps/powerpc/qemuppc/start/bspstart.c
index 94d7f4b84d..15cf9d4207 100644
--- a/bsps/powerpc/qemuppc/start/bspstart.c
+++ b/bsps/powerpc/qemuppc/start/bspstart.c
@@ -54,6 +54,11 @@ static int default_decrementer_exception_handler( BSP_Exception_frame *frame, un
return 0;
}
+uint32_t _CPU_Counter_frequency(void)
+{
+ return bsp_time_base_frequency;
+}
+
/*
* bsp_start
*
@@ -80,7 +85,6 @@ void bsp_start( void )
BSP_bus_frequency = 20;
bsp_time_base_frequency = 20000000;
bsp_clicks_per_usec = BSP_bus_frequency;
- rtems_counter_initialize_converter(bsp_time_base_frequency);
/*
* Initialize the interrupt related settings.
diff --git a/bsps/powerpc/qoriq/start/bspstart.c b/bsps/powerpc/qoriq/start/bspstart.c
index 7d9fa0d3c7..cc7902428b 100644
--- a/bsps/powerpc/qoriq/start/bspstart.c
+++ b/bsps/powerpc/qoriq/start/bspstart.c
@@ -54,6 +54,15 @@ uint32_t bsp_time_base_frequency;
uint32_t qoriq_clock_frequency;
+uint32_t _CPU_Counter_frequency(void)
+{
+#ifdef __PPC_CPU_E6500__
+ return qoriq_clock_frequency;
+#else
+ return bsp_time_base_frequency;
+#endif
+}
+
static void initialize_frequency_parameters(void)
{
const void *fdt = bsp_fdt_get();
@@ -82,7 +91,6 @@ static void initialize_frequency_parameters(void)
}
qoriq_clock_frequency = fdt32_to_cpu(*val_fdt);
#endif
- rtems_counter_initialize_converter(fdt32_to_cpu(*val_fdt));
}
#define MTIVPR(base) \
diff --git a/bsps/powerpc/ss555/start/bspstart.c b/bsps/powerpc/ss555/start/bspstart.c
index f47ca7d5be..cf54d61d9e 100644
--- a/bsps/powerpc/ss555/start/bspstart.c
+++ b/bsps/powerpc/ss555/start/bspstart.c
@@ -40,6 +40,11 @@ extern unsigned long intrStackPtr;
uint32_t bsp_clicks_per_usec;
uint32_t bsp_clock_speed; /* Serial clocks per second */
+uint32_t _CPU_Counter_frequency(void)
+{
+ return BSP_CRYSTAL_HZ / 4;
+}
+
/*
* bsp_start()
*
@@ -88,7 +93,6 @@ void bsp_start(void)
*/
bsp_clicks_per_usec = BSP_CRYSTAL_HZ / 4 / 1000000;
bsp_clock_speed = BSP_CLOCK_HZ; /* for SCI baud rate generator */
- rtems_counter_initialize_converter(BSP_CRYSTAL_HZ / 4);
/*
* Initalize RTEMS IRQ system
diff --git a/bsps/powerpc/t32mppc/start/bspstart.c b/bsps/powerpc/t32mppc/start/bspstart.c
index 5fc36b4019..e8f288df59 100644
--- a/bsps/powerpc/t32mppc/start/bspstart.c
+++ b/bsps/powerpc/t32mppc/start/bspstart.c
@@ -77,13 +77,15 @@ static void t32mppc_initialize_exceptions(void *interrupt_stack_begin)
MTIVOR(BOOKE_IVOR35, addr);
}
+uint32_t _CPU_Counter_frequency(void)
+{
+ return bsp_time_base_frequency;
+}
+
void bsp_start(void)
{
get_ppc_cpu_type();
get_ppc_cpu_revision();
-
- rtems_counter_initialize_converter(bsp_time_base_frequency);
-
t32mppc_initialize_exceptions(bsp_section_work_begin);
bsp_interrupt_initialize();
}
diff --git a/bsps/powerpc/tqm8xx/start/bspstart.c b/bsps/powerpc/tqm8xx/start/bspstart.c
index df0581ce77..b2d765c9c4 100644
--- a/bsps/powerpc/tqm8xx/start/bspstart.c
+++ b/bsps/powerpc/tqm8xx/start/bspstart.c
@@ -92,6 +92,11 @@ static rtems_status_code bsp_tqm_get_cib_uint32( const char *cib_id,
return RTEMS_SUCCESSFUL;
}
+uint32_t _CPU_Counter_frequency(void)
+{
+ return bsp_time_base_frequency;
+}
+
void bsp_start( void)
{
@@ -142,7 +147,6 @@ void bsp_start( void)
bsp_time_base_frequency = BSP_bus_frequency / 16;
bsp_clicks_per_usec = bsp_time_base_frequency / 1000000;
- rtems_counter_initialize_converter(bsp_time_base_frequency);
/* Initialize exception handler */
ppc_exc_initialize(interrupt_stack_start, interrupt_stack_size);
diff --git a/bsps/powerpc/virtex/start/bspstart.c b/bsps/powerpc/virtex/start/bspstart.c
index 5b4a4a135f..be7f00437a 100644
--- a/bsps/powerpc/virtex/start/bspstart.c
+++ b/bsps/powerpc/virtex/start/bspstart.c
@@ -74,6 +74,11 @@ LINKER_SYMBOL(virtex_exc_vector_base);
*/
uint32_t bsp_time_base_frequency = XPAR_CPU_PPC405_CORE_CLOCK_FREQ_HZ;
+uint32_t _CPU_Counter_frequency(void)
+{
+ return bsp_time_base_frequency;
+}
+
/*
* bsp_start
*
@@ -89,8 +94,6 @@ void bsp_start( void )
get_ppc_cpu_type();
get_ppc_cpu_revision();
- rtems_counter_initialize_converter(bsp_time_base_frequency);
-
/*
* Initialize default raw exception handlers.
*/
diff --git a/bsps/powerpc/virtex4/start/bspstart.c b/bsps/powerpc/virtex4/start/bspstart.c
index d5c255be6d..40cd710a58 100644
--- a/bsps/powerpc/virtex4/start/bspstart.c
+++ b/bsps/powerpc/virtex4/start/bspstart.c
@@ -130,6 +130,10 @@ void BSP_ask_for_reset(void)
for(;;);
}
+uint32_t _CPU_Counter_frequency(void)
+{
+ return bsp_clicks_per_usec * 1000000;
+}
/*===================================================================*/
@@ -166,7 +170,6 @@ void bsp_start(void)
/* Timebase register ticks/microsecond; The application may override these */
bsp_clicks_per_usec = 350;
- rtems_counter_initialize_converter(bsp_clicks_per_usec * 1000000);
/*
* Initialize the interrupt related settings.
diff --git a/bsps/powerpc/virtex5/start/bspstart.c b/bsps/powerpc/virtex5/start/bspstart.c
index ff821574a9..6457143d20 100644
--- a/bsps/powerpc/virtex5/start/bspstart.c
+++ b/bsps/powerpc/virtex5/start/bspstart.c
@@ -144,6 +144,10 @@ void BSP_ask_for_reset(void)
for(;;);
}
+uint32_t _CPU_Counter_frequency(void)
+{
+ return BSP_bus_frequency / (BSP_time_base_divisor / 1000);
+}
/*===================================================================*/
@@ -185,9 +189,6 @@ void bsp_start(void)
/* Timebase register ticks/microsecond; The application may override these */
bsp_clicks_per_usec = BSP_bus_frequency/(BSP_time_base_divisor * 1000);
- rtems_counter_initialize_converter(
- BSP_bus_frequency / (BSP_time_base_divisor / 1000)
- );
/*
* Initialize the interrupt related settings.