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

Reply via email to