[PATCH] sparc: Fix CPU counter support
Sebastian Huber
sebastian.huber at embedded-brains.de
Mon Feb 24 15:58:31 UTC 2014
On 2014-02-24 16:45, Daniel Hellstrom wrote:
> On 02/24/2014 04:16 PM, Sebastian Huber wrote:
>> On 2014-02-24 15:20, Daniel Hellstrom wrote:
>>> Sebastian, I think it's a good solution to rely on the GPTIMER[0].timer0 as a
>>> fallback.
>>>
>>> Looks good to me, and should work on the TSIM/GRSIM and LEON3 hardware.
>>>
>>> Assuming that the frequency has been initialized to 1MHz for secondary GPTIMER
>>> may be wrong when invoked from a boot loader, however this can be fixed later
>>> if determined a problem.
>>
>> Thanks for the quick review. I checked in a slightly different version that
>> uses now only the first GPTIMER to determine the frequency:
>>
>> http://git.rtems.org/rtems/commit/?id=a4bc90af4ee55e72b18de4b64da6338634490760
>
>
> Ok. that is much better I think. But it is not 100% correct, you can not be
> sure that the timers are clocked at the same frequency. To your help is the
> function call:
>
> freq_hz = ambapp_freq_get(&ambapp_plb, adev_gptimer1);
>
> That will return the frequency of any APB or AHB device in the system, the call
> can be made after the frequency of the AMBA bus have been initialized in
> amba_initialize() calling ambapp_freq_init().
Ok, I used the clock driver as a reference:
#define Clock_driver_support_initialize_hardware() \
do { \
LEON3_Timer_Regs->timer[LEON3_CLOCK_INDEX].reload = \
rtems_configuration_get_microseconds_per_tick() - 1; \
\
LEON3_Timer_Regs->timer[LEON3_CLOCK_INDEX].ctrl = \
LEON3_GPTIMER_EN | LEON3_GPTIMER_RL | \
LEON3_GPTIMER_LD | LEON3_GPTIMER_IRQEN; \
} while (0)
It simply assumes that the frequency is 1MHz. Is it possible to use
ambapp_freq_get() here also?
Has the ambapp_freq_get() any dependencies to the boot loader?
>
> Basically we don't have to use AMBA PnP to search for GPTIMER[0], since we
> assume that initialization has been performed by the system clock driver we
> could might as well assume that the LEON3_Timer_Regs variable is initialized
> too? The problem is that the CPU cycle counter is initialized before the timer
> driver, but is that working for all other platform also or are we really sure
> no other platform depend upon the system clock initialisation to complete?
The CPU counter should work before drivers are initialized.
--
Sebastian Huber, embedded brains GmbH
Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone : +49 89 189 47 41-16
Fax : +49 89 189 47 41-09
E-Mail : sebastian.huber at embedded-brains.de
PGP : Public key available on request.
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
More information about the devel
mailing list