[PATCH v2 3/9] bsps/leon3: Make GPTIMER fall back mandatory

Martin Åberg maberg at gaisler.com
Thu Oct 19 10:22:23 UTC 2023


Hello Sebastian,

Thank you for the clarifications.

We have discussed this internally, and there were two main discussion 
points:
1. Users of custom GRLIB+LEON3 systems (FPGA/ASIC) may be affected by 
the RTEMS hardware requirement change of needing one more subtimer.
2. The application will have access to one less subtimer. This affects 
for example the UT700 LEON3 component.

The conclusion is that we are positive to the change proposed in this 
patch. It is also in line with LEON3 hardware requirements for other 
operating systems.

After the AMP scenario (see below) has been clarified, this commit is OK.


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.


> The GR712RC and GR740 do not need the additional GPTIMER subtimer. Which 
> products would be affected by this change? I hope that all future 
> Gaisler products provide a free-running counter device with a capture 
> feature for PPS.

Thank you for the input. I have created an internal ticket on the 
free-running counter.

-- 
Best regards,

Martin Åberg
Software Engineer
Frontgrade Gaisler
martin.aberg at gaisler.com

Frontgrade Gaisler AB, Kungsgatan 12, SE-411 19 GÖTEBORG, Sweden.
+46 (0) 31 775 8650, www.gaisler.com



More information about the devel mailing list