[PATCH 1/5] [POWERPC] sysdev: implement FSL GTM support
Kumar Gala
galak at kernel.crashing.org
Fri Apr 18 14:19:39 EST 2008
On Apr 17, 2008, at 5:47 PM, Anton Vorontsov wrote:
> On Thu, Apr 17, 2008 at 11:28:32PM +0400, Anton Vorontsov wrote:
>> GTM stands for General-purpose Timers Module and able to generate
>> timer{1,2,3,4} interrupts. These timers are used by the drivers that
>> need time precise interrupts (like for USB transactions scheduling
>> for
>> the Freescale USB Host controller as found in some QE and CPM chips),
>> or these timers could be used as wakeup events from the CPU deep-
>> sleep
>> mode.
>>
>> Things unimplemented:
>> 1. Cascaded (32 bit) timers (1-2, 3-4).
>> This is straightforward to implement when needed, two timers should
>> be marked as "requested" and configured as appropriate.
>> 2. Super-cascaded (64 bit) timers (1-2-3-4).
>> This is also straightforward to implement when needed, all timers
>> should be marked as "requested" and configured as appropriate.
>>
>> Signed-off-by: Anton Vorontsov <avorontsov at ru.mvista.com>
>> ---
>> Documentation/powerpc/booting-without-of.txt | 32 +++-
>> arch/powerpc/Kconfig | 5 +
>> arch/powerpc/sysdev/Makefile | 1 +
>> arch/powerpc/sysdev/fsl_gtm.c | 362 ++++++++++++++++
>> ++++++++++
>> include/asm-powerpc/fsl_gtm.h | 108 ++++++++
>> 5 files changed, 507 insertions(+), 1 deletions(-)
>> create mode 100644 arch/powerpc/sysdev/fsl_gtm.c
>> create mode 100644 include/asm-powerpc/fsl_gtm.h
>>
>> diff --git a/Documentation/powerpc/booting-without-of.txt b/
>> Documentation/powerpc/booting-without-of.txt
>> index 4cc7800..827b630 100644
>> --- a/Documentation/powerpc/booting-without-of.txt
>> +++ b/Documentation/powerpc/booting-without-of.txt
> [...]
>> +/**
>> + * gtm_reset_timer16 - reset 16 bit timer with arbitrary precision
>> + * @tmr: pointer to the gtm_timer structure obtained from
>> gtm_get_timer
>> + * @usec: timer interval in microseconds
>> + * @reload: if set, the timer will reset upon expiry rather than
>> + * continue running free.
>> + *
>> + * This function (re)sets the GTM timer so that it counts up to
>> the requested
>> + * interval value, and fires the interrupt when the value is
>> reached. This
>> + * function will reduce the precision of the timer as needed in
>> order for the
>> + * requested timeout to fit in a 16-bit register.
>> + */
>> +int gtm_reset_timer16(struct gtm_timer *tmr, unsigned long usec,
>> bool reload)
>> +{
>> + /* quite obvious, frequency which is enough for µSec precision */
>> + int freq = 1000000;
>> + unsigned int bit;
>> +
>> + bit = fls_long(usec);
>> + if (bit > 15) {
>> + freq >>= bit - 15;
>> + usec >>= bit - 15;
>> + }
>
> if (!freq)
> return -EINVAL;
do you want me to fix this up on commit or are you going to respin the
patch set based on feedback?
- k
More information about the Linuxppc-dev
mailing list