[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