Hello Martin,
thanks for the review.
On 19.10.23 12:22, Martin Åberg wrote:
On 2023-10-13 13:00, Sebastian Huber wrote:
Hello Martin,
On 13.10.23 12:09, Martin Åberg wrote:
What are the implications when using RTEMS_MULTIPROCESSING together
with "use_gptimer"?
In bsps/sparc/leon3/include/bsp/leon3.h, we have:
> #if defined(RTEMS_MULTIPROCESSING)
> #define LEON3_CLOCK_INDEX \
> ( rtems_configuration_get_user_multiprocessing_table() ?
LEON3_Cpu_Index : 0 )
> #else
> #define LEON3_CLOCK_INDEX 0
> #endif
Can LEON3_COUNTER_GPTIMER_INDEX of CPU0 be equal to LEON3_CLOCK_INDEX
of CPU1 here?
The individual RTEMS instances could share the GPTIMER configured in
free-running mode.
LEON3_Timer_Regs is probed in amba.c. There is a link time option to set
GPTIMER core index (leon3_timer_core_index). Instances could have unique
GPTIMER cores associated.
The preprocessor symbols LEON3_CLOCK_INDEX (clock driver) and
LEON3_COUNTER_GPTIMER_INDEX (timecounter) are used as subtimer index of
the GPTIMER core LEON3_Timer_Regs.
For CPU0 these are:
- LEON3_CLOCK_INDEX is 0 (equal to hardware processor index)
- LEON3_COUNTER_GPTIMER_INDEX is 1 (LEON3_CLOCK_INDEX+1)
For CPU1 these are:
- LEON3_CLOCK_INDEX is 1 (equal to hardware processor index)
- LEON3_COUNTER_GPTIMER_INDEX is 2 (LEON3_CLOCK_INDEX+1)
etc...
In the case when LEON3_Timer_Regs is different on CPU0 and CPU1, there
is no conflict but will leave low-numbered subtimers unused. (Behavior
not introduced by this patch.)
In the case when LEON3_Timer_Regs is equal on the CPU0 and CPU1
instances, it appears there is now a conflict between
CPU0:LEON3_COUNTER_GPTIMER_INDEX and CPU1:LEON3_CLOCK_INDEX.
Ok, I suggest to change the LEON3_CLOCK_INDEX definition to:
/**
* @brief This constant defines the index of the GPTIMER timer used by the
* clock driver.
*/
#if defined(RTEMS_MULTIPROCESSING)
#define LEON3_CLOCK_INDEX \
( leon3_timer_core_index != 0 ? 0 : 2 * LEON3_Cpu_Index )
#else
#define LEON3_CLOCK_INDEX 0
#endif
/**
* @brief This constant defines the index of the GPTIMER timer used by the
* CPU counter if the CPU counter uses the GPTIMER.
*/
#if defined(RTEMS_SMP)
#define LEON3_COUNTER_GPTIMER_INDEX ( LEON3_CLOCK_INDEX + 1 )
#else
#define LEON3_COUNTER_GPTIMER_INDEX LEON3_CLOCK_INDEX
#endif
The rtems_configuration_get_user_multiprocessing_table() is always !=
NULL if RTEMS_MULTIPROCESSING is defined.
--
embedded brains GmbH
Herr Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.hu...@embedded-brains.de
phone: +49-89-18 94 741 - 16
fax: +49-89-18 94 741 - 08
Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier:
https://embedded-brains.de/datenschutzerklaerung/
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel