02 May, 2013

1 commit

  • Errata Titles:
    i103: Delay needed to read some GP timer, WD timer and sync timer
    registers after wakeup (OMAP3/4)
    i767: Delay needed to read some GP timer registers after wakeup (OMAP5)

    Description (i103/i767):
    If a General Purpose Timer (GPTimer) is in posted mode
    (TSICR [2].POSTED=1), due to internal resynchronizations, values read in
    TCRR, TCAR1 and TCAR2 registers right after the timer interface clock
    (L4) goes from stopped to active may not return the expected values. The
    most common event leading to this situation occurs upon wake up from
    idle.

    GPTimer non-posted synchronization mode is not impacted by this
    limitation.

    Workarounds:
    1). Disable posted mode
    2). Use static dependency between timer clock domain and MPUSS clock
    domain
    3). Use no-idle mode when the timer is active

    Workarounds #2 and #3 are not pratical from a power standpoint and so
    workaround #1 has been implemented. Disabling posted mode adds some CPU
    overhead for configuring and reading the timers as the CPU has to wait
    for accesses to be re-synchronised within the timer. However, disabling
    posted mode guarantees correct operation.

    Please note that it is safe to use posted mode for timers if the counter
    (TCRR) and capture (TCARx) registers will never be read. An example of
    this is the clock-event system timer. This is used by the kernel to
    schedule events however, the timers counter is never read and capture
    registers are not used. Given that the kernel configures this timer
    often yet never reads the counter register it is safe to enable posted
    mode in this case. Hence, for the timer used for kernel clock-events,
    posted mode is enabled by overriding the errata for devices that are
    impacted by this defect.

    For drivers using the timers that do not read the counter or capture
    registers and wish to use posted mode, can override the errata and
    enable posted mode by making the following function calls.

    __omap_dm_timer_override_errata(timer, OMAP_TIMER_ERRATA_I103_I767);
    __omap_dm_timer_enable_posted(timer);

    Both dmtimers and watchdogs are impacted by this defect this patch only
    implements the workaround for the dmtimer. Currently the watchdog driver
    does not read the counter register and so no workaround is necessary.

    Posted mode will be disabled for all OMAP2+ devices (including AM33xx)
    using a GP timer as a clock-source timer to guarantee correct operation.
    This is not necessary for OMAP24xx devices but the default clock-source
    timer for OMAP24xx devices is the 32k-sync timer and not the GP timer
    and so should not have any impact. This should be re-visited for future
    devices if this errata is fixed.

    Confirmed with Vaibhav Hiremath that this bug also impacts AM33xx
    devices.

    Signed-off-by: Jon Hunter
    Acked-by: Santosh Shilimkar
    [hvaibhav@ti.com: Backported to v3.2 PSP kernel, also merged
    commit 7b44cf2c15f (ARM: OMAP: Fix timer posted mode support)]
    Signed-off-by: Vaibhav Hiremath

    Jon Hunter
     

28 Feb, 2013

2 commits

  • The timer TISTAT register is a read-only register and therefore restoring the
    context is not needed. Furthermore, the context of TISTAT is never saved
    anywhere in the current code. The TISTAT register is read-only for all OMAP
    devices from OMAP1 to OMAP4. OMAP5 timers no longer have this register.

    [akshay.s@ti.com: Observed a crash when adding support for the
    DMTIMER wakeup for standby mode.
    This crash occurred during context restore when restoring values
    to TIOCP_CFG and TISTAT registers in the function
    omap_timer_restore_context().
    This issue was fixed in the mainline. So backporting it to fix the same]

    Signed-off-by: Jon Hunter
    Acked-by: Santosh Shilimkar
    Signed-off-by: ShankarMurthy, Akshay
    Signed-off-by: Satyanarayana Sandhya

    Jon Hunter
     
  • Since hwmod framework now manages sysconfig context save/restore
    there is no more need to touch this register in driver. Hence,
    remove restore of sysconfig register in omap_timer_restore_context.
    This was causing incorrect context restore of sysconfig register.

    [akshay.s@ti.com: Observed a warning when adding support for the
    DMTIMER wakeup for standby mode.

    WARNING: at arch/arm/plat-omap/dmtimer.c:77
    omap_dm_timer_write_reg+0x6c/0x74()

    This issue was fixed in the mainline. So backporting this patch
    to fix the same]

    Signed-off-by: Tarun Kanti DebBarma
    Acked-by: Santosh Shilimkar
    Acked-by: Kevin Hilman
    Signed-off-by: Tony Lindgren
    Signed-off-by: ShankarMurthy, Akshay
    Signed-off-by: Satyanarayana Sandhya

    Tarun Kanti DebBarma
     

24 Jan, 2012

1 commit

  • This patch is added to route CPSW interrupts through ICSS module.
    CPSW CPSW_RX and CPSW_TX interrupts are not directly used from CPSW
    and instead they are routed through Timer module. This is done as an
    software workaround for enabling interrupt pacing feature. As interrupt
    Pacing works on C0_RX_PULSE interrupt connection to A8 INTC, which is
    not connected to Cortex A8 interrupt controller directly due to hw issue,
    it prevents interrupt pacing to work in AM33xx EVM. Therefore, Timer
    capture module is used to pickup these interrupts and routed to A8 INTC.

    Signed-off-by: Chandan Nath
    Signed-off-by: Afzal Mohammed
    Signed-off-by: Vaibhav Hiremath

    Vaibhav Hiremath
     

05 Nov, 2011

1 commit

  • Include linux/module.h to fix below build error:

    CC arch/arm/plat-omap/dmtimer.o
    arch/arm/plat-omap/dmtimer.c:184: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:184: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
    arch/arm/plat-omap/dmtimer.c:184: warning: parameter names (without types) in function declaration
    arch/arm/plat-omap/dmtimer.c:215: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:215: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
    arch/arm/plat-omap/dmtimer.c:215: warning: parameter names (without types) in function declaration
    arch/arm/plat-omap/dmtimer.c:228: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:228: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
    arch/arm/plat-omap/dmtimer.c:228: warning: parameter names (without types) in function declaration
    arch/arm/plat-omap/dmtimer.c:234: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:234: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
    arch/arm/plat-omap/dmtimer.c:234: warning: parameter names (without types) in function declaration
    arch/arm/plat-omap/dmtimer.c:240: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:240: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
    arch/arm/plat-omap/dmtimer.c:240: warning: parameter names (without types) in function declaration
    arch/arm/plat-omap/dmtimer.c:248: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:248: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
    arch/arm/plat-omap/dmtimer.c:248: warning: parameter names (without types) in function declaration
    arch/arm/plat-omap/dmtimer.c:294: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:294: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
    arch/arm/plat-omap/dmtimer.c:294: warning: parameter names (without types) in function declaration
    arch/arm/plat-omap/dmtimer.c:302: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:302: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
    arch/arm/plat-omap/dmtimer.c:302: warning: parameter names (without types) in function declaration
    arch/arm/plat-omap/dmtimer.c:316: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:316: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
    arch/arm/plat-omap/dmtimer.c:316: warning: parameter names (without types) in function declaration
    arch/arm/plat-omap/dmtimer.c:344: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:344: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
    arch/arm/plat-omap/dmtimer.c:344: warning: parameter names (without types) in function declaration
    arch/arm/plat-omap/dmtimer.c:361: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:361: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
    arch/arm/plat-omap/dmtimer.c:361: warning: parameter names (without types) in function declaration
    arch/arm/plat-omap/dmtimer.c:380: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:380: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
    arch/arm/plat-omap/dmtimer.c:380: warning: parameter names (without types) in function declaration
    arch/arm/plat-omap/dmtimer.c:406: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:406: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
    arch/arm/plat-omap/dmtimer.c:406: warning: parameter names (without types) in function declaration
    arch/arm/plat-omap/dmtimer.c:443: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:443: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
    arch/arm/plat-omap/dmtimer.c:443: warning: parameter names (without types) in function declaration
    arch/arm/plat-omap/dmtimer.c:468: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:468: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
    arch/arm/plat-omap/dmtimer.c:468: warning: parameter names (without types) in function declaration
    arch/arm/plat-omap/dmtimer.c:494: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:494: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
    arch/arm/plat-omap/dmtimer.c:494: warning: parameter names (without types) in function declaration
    arch/arm/plat-omap/dmtimer.c:517: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:517: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
    arch/arm/plat-omap/dmtimer.c:517: warning: parameter names (without types) in function declaration
    arch/arm/plat-omap/dmtimer.c:534: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:534: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
    arch/arm/plat-omap/dmtimer.c:534: warning: parameter names (without types) in function declaration
    arch/arm/plat-omap/dmtimer.c:549: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:549: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
    arch/arm/plat-omap/dmtimer.c:549: warning: parameter names (without types) in function declaration
    arch/arm/plat-omap/dmtimer.c:561: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:561: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
    arch/arm/plat-omap/dmtimer.c:561: warning: parameter names (without types) in function declaration
    arch/arm/plat-omap/dmtimer.c:572: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:572: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
    arch/arm/plat-omap/dmtimer.c:572: warning: parameter names (without types) in function declaration
    arch/arm/plat-omap/dmtimer.c:587: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:587: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
    arch/arm/plat-omap/dmtimer.c:587: warning: parameter names (without types) in function declaration
    arch/arm/plat-omap/dmtimer.c:604: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:604: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
    arch/arm/plat-omap/dmtimer.c:604: warning: parameter names (without types) in function declaration
    arch/arm/plat-omap/dmtimer.c:746: error: expected declaration specifiers or '...' before string constant
    arch/arm/plat-omap/dmtimer.c:746: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:746: warning: type defaults to 'int' in declaration of 'MODULE_DESCRIPTION'
    arch/arm/plat-omap/dmtimer.c:746: warning: function declaration isn't a prototype
    arch/arm/plat-omap/dmtimer.c:747: error: expected declaration specifiers or '...' before string constant
    arch/arm/plat-omap/dmtimer.c:747: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:747: warning: type defaults to 'int' in declaration of 'MODULE_LICENSE'
    arch/arm/plat-omap/dmtimer.c:747: warning: function declaration isn't a prototype
    arch/arm/plat-omap/dmtimer.c:748: error: expected declaration specifiers or '...' before string constant
    arch/arm/plat-omap/dmtimer.c:748: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:748: warning: type defaults to 'int' in declaration of 'MODULE_ALIAS'
    arch/arm/plat-omap/dmtimer.c:748: warning: function declaration isn't a prototype
    arch/arm/plat-omap/dmtimer.c:749: error: expected declaration specifiers or '...' before string constant
    arch/arm/plat-omap/dmtimer.c:749: warning: data definition has no type or storage class
    arch/arm/plat-omap/dmtimer.c:749: warning: type defaults to 'int' in declaration of 'MODULE_AUTHOR'
    arch/arm/plat-omap/dmtimer.c:749: warning: function declaration isn't a prototype
    make[1]: *** [arch/arm/plat-omap/dmtimer.o] Error 1
    make: *** [arch/arm/plat-omap] Error 2

    Signed-off-by: Axel Lin
    Signed-off-by: Tony Lindgren

    Axel Lin
     

02 Oct, 2011

1 commit


22 Sep, 2011

7 commits

  • Add error handling code to export APIs.

    Signed-off-by: Tarun Kanti DebBarma
    Reviewed-by: Santosh Shilimkar
    Signed-off-by: Tony Lindgren

    Tarun Kanti DebBarma
     
  • Clock is enabled only when timer is started and disabled when the the timer
    is stopped. Therefore before accessing registers in functions clock is enabled
    and then disabled back at the end of access. Context save is done dynamically
    whenever the registers are modified. Context restore is called when context is
    lost.

    Signed-off-by: Tarun Kanti DebBarma
    Reviewed-by: Santosh Shilimkar
    [tony@atomide.com: updated to use revision instead of tidr]
    Signed-off-by: Tony Lindgren

    Tarun Kanti DebBarma
     
  • Pass the reserved flag in pdata and use it. We can
    now make sys_timer_reserved static to mach-omap2/timer.c.

    Signed-off-by: Tony Lindgren

    Tony Lindgren
     
  • Add pm_runtime feature to dmtimer whereby *_runtime_get_sync()
    is called within omap_dm_timer_enable(), pm_runtime_put()
    is called in omap_dm_timer_disable(). In addition to calling
    pm_runtime_enable, we are calling pm_runtime_irq_safe so that
    they can be called from interrupt context.

    Signed-off-by: Tarun Kanti DebBarma
    Signed-off-by: Partha Basak
    Reviewed-by: Santosh Shilimkar
    Acked-by: Cousson, Benoit
    Signed-off-by: Tony Lindgren

    Tarun Kanti DebBarma
     
  • Register timer devices by going through hwmod database using
    hwmod API. The driver probes each of the registered devices.
    Functionality which are already performed by hwmod framework
    are removed from timer code. New set of timers present on
    OMAP4 are now supported.

    Signed-off-by: Tarun Kanti DebBarma
    Acked-by: Cousson, Benoit
    [tony@atomide.com: folded in spinlock changes, left out is_omap2]
    Signed-off-by: Tony Lindgren

    Tarun Kanti DebBarma
     
  • Add dmtimer platform driver functions which include:
    (1) platform driver initialization
    (2) driver probe function
    (3) driver remove function

    Signed-off-by: Tarun Kanti DebBarma
    Signed-off-by: Thara Gopinath
    Reviewed-by: Santosh Shilimkar
    Acked-by: Cousson, Benoit
    Signed-off-by: Tony Lindgren

    Tarun Kanti DebBarma
     
  • Convert OMAP1 dmtimers into a platform devices and then registers with
    device model framework so that it can be bound to corresponding driver.

    Signed-off-by: Thara Gopinath
    Signed-off-by: Tarun Kanti DebBarma
    Reviewed-by: Santosh Shilimkar
    Acked-by: Cousson, Benoit
    Signed-off-by: Tony Lindgren

    Tarun Kanti DebBarma
     

20 Sep, 2011

1 commit

  • The registers are slightly different between v1 and v2 ip that
    is available in omap4 and later for some timers.

    Add support for v2 ip by mapping the interrupt related registers
    separately and adding func_base for the functional registers.

    Also disable dmtimer driver features on omap4 for now as
    those need the hwmod conversion series to deal with enabling
    the timers properly in omap_dm_timer_init.

    Signed-off-by: Afzal Mohammed
    Tested-by: Hemant Pedanekar
    Signed-off-by: Tony Lindgren

    Tony Lindgren
     

04 Jul, 2011

1 commit

  • Currently autoidle is only enabled for OMAP2/3; by enabling autoidle,
    the automatic L4 clock gating strategy is applied based on L4 activity,
    otherwise L4 clock to module will be a free running.

    Signed-off-by: Ambresh K
    [tony@atomide.com: updated for timer init changes]
    Signed-off-by: Tony Lindgren

    Ambresh K
     

28 Jun, 2011

1 commit


20 Jun, 2011

2 commits

  • This will allow us to share the code between system timer and
    dmtimer device driver code without having to initialize all the
    dmtimers early. This change will also make the timer_set_next_event
    more efficient as the inline functions will optimize the code
    better for the timer reprogramming.

    Signed-off-by: Tony Lindgren
    Reviewed-by: Kevin Hilman

    Tony Lindgren
     
  • These will be needed when dmtimer platform init code gets split
    for omap1 and omap2+. These will also be needed for separate
    sys_timer init and driver init for the rest of the hardware timers
    in the following patches. No functional changes.

    Signed-off-by: Tony Lindgren
    Reviewed-by: Kevin Hilman

    Tony Lindgren
     

10 Mar, 2011

1 commit


24 Sep, 2010

1 commit

  • This patch is temporary fix to below crash. This is observed when
    CPU is clocked more than 600 MHz.

    Unhandled fault: imprecise external abort (0x1406) at 0xbf9ef65c
    Internal error: : 1406 [#1] PREEMPT SMP
    last sysfs file:
    Modules linked in:
    CPU: 0 Not tainted (2.6.36-rc3+ #18)
    PC is at kernel_thread_helper+0x0/0x14
    LR is at kernel_thread_helper+0x0/0x14
    pc : [] lr : [] psr: 00000093
    sp : dc83bff8 ip : 00000000 fp : 00000000
    r10: 00000000 r9 : 00000000 r8 : 00000000
    r7 : 00000013 r6 : c003ce28 r5 : c008935c r4 : 00000000
    r3 : 00000000 r2 : 00000000 r1 : 00000000 r0 : 00000000
    Flags: nzcv IRQs off FIQs on Mode SVC_32 ISA ARM Segment kernel
    Control: 10c53c7f Table: 8000404a DAC: 00000017
    Process swapper (pid: 2, stack limit = 0xdc83a2f0)
    Stack: (0xdc83bff8 to 0xdc83c000)
    bfe0: 00000000 ffffffff
    [] (kernel_thread_helper+0x0/0x14) from [] (0xfffffffe)
    Code: c03a0ba3 c03a5fcb c045c880 c0394035 (eb017701)
    ---[ end trace 1b75b31a2719ed1c ]---

    The timer hwmod adaptation will eventually fix it in a proper way.

    Signed-off-by: Rajendra Nayak
    Signed-off-by: Santosh Shilimkar

    Santosh Shilimkar
     

10 Jun, 2010

1 commit

  • The kernel timer queue is being run currently from a GP timer running in a one
    shot mode, which works in a way that when it expires, it will also stop.
    Usually during this situation, the interrupt handler will ack the interrupt,
    load a new value to the timer and start it again. During suspend, the
    situation is slightly different, as we disable interrupts just before
    timekeeping is suspended, which leaves a small window where the timer can
    expire before it is stopped, and will leave the interrupt flag pending.
    This pending interrupt will prevent ARM sleep entry, thus now we ack it always
    when we are attempting to stop a timer.

    Signed-off-by: Tero Kristo
    Acked-by: Kevin Hilman
    [tony@atomide.com: removed the ifdef to make the patch cover omap1 also]
    Signed-off-by: Tony Lindgren

    Tero Kristo
     

21 May, 2010

1 commit


24 Feb, 2010

1 commit

  • This patch removes all the omap4 specific irq line
    defines from plat/irqs.h and includes auto-generated
    irqs-44xx.h
    All the legacy naming style defines are replaced with the one
    from irqs-44xx.h

    Signed-off-by: Santosh Shilimkar
    Reviewed-by: Kevin Hilman
    Reviewed-by: Paul Walmsley
    [tony@atomide.com: updated to compile with usb-musb.c]
    Signed-off-by: Tony Lindgren

    Santosh Shilimkar
     

16 Feb, 2010

2 commits


22 Jan, 2010

1 commit

  • OMAP GP timers keep running for a few cycles after they are stopped,
    which can cause the timer to expire and generate an interrupt. The
    pending interrupt will prevent e.g. OMAP from entering suspend, thus
    we ack it manually. Only applicable on OMAP2/3/4.

    Signed-off-by: Tero Kristo
    Signed-off-by: Kevin Hilman
    Signed-off-by: Tony Lindgren

    Tero Kristo
     

21 Oct, 2009

1 commit

  • Move the remaining headers under plat-omap/include/mach
    to plat-omap/include/plat. Also search and replace the
    files using these headers to include using the right path.

    This was done with:

    #!/bin/bash
    mach_dir_old="arch/arm/plat-omap/include/mach"
    plat_dir_new="arch/arm/plat-omap/include/plat"
    headers=$(cd $mach_dir_old && ls *.h)
    omap_dirs="arch/arm/*omap*/ \
    drivers/video/omap \
    sound/soc/omap"
    other_files="drivers/leds/leds-ams-delta.c \
    drivers/mfd/menelaus.c \
    drivers/mfd/twl4030-core.c \
    drivers/mtd/nand/ams-delta.c"

    for header in $headers; do
    old="#include

    Tony Lindgren
     

20 Oct, 2009

1 commit


29 Aug, 2009

1 commit


29 May, 2009

1 commit

  • This patch adds the support for OMAP4. The platform and machine specific
    headers and sources updated for OMAP4430 SDP platform.

    OMAP4430 is Texas Instrument's SOC based on ARM Cortex-A9 SMP architecture.
    It's a dual core SOC with GIC used for interrupt handling and SCU for cache
    coherency.

    Signed-off-by: Santosh Shilimkar
    Signed-off-by: Tony Lindgren

    Santosh Shilimkar
     

26 May, 2009

1 commit


24 Apr, 2009

3 commits

  • Add a function omap2_gp_clockevent_set_gptimer() for board-*.c files
    to use in .init_irq functions to configure the system tick GPTIMER.
    Practical choices at this point are GPTIMER1 or GPTIMER12. Both of
    these timers are in the WKUP powerdomain, and so are unaffected by
    chip power management. GPTIMER1 can use sys_clk as a source, for
    applications where a high-resolution timer is more important than
    power management. GPTIMER12 has the special property that it has the
    secure 32kHz oscillator as its source clock, which may be less prone
    to glitches than the off-chip 32kHz oscillator. But on HS devices, it
    may not be available for Linux use.

    It appears that most boards are fine with GPTIMER1, but BeagleBoard
    should use GPTIMER12 when using a 32KiHz timer source, due to hardware bugs
    in revisions B4 and below. Modify board-omap3beagle.c to use GPTIMER12.

    This patch originally used a Kbuild config option to select the GPTIMER,
    but was changed to allow this to be specified in board-*.c files, per
    Tony's request.

    Kalle Vallo found a bug in an earlier version of
    this patch - thanks Kalle.

    Tested on Beagle rev B4 ES2.1, with and without CONFIG_OMAP_32K_TIMER, and
    3430SDP.

    Signed-off-by: Paul Walmsley
    Signed-off-by: Tony Lindgren
    Cc: Kalle Valo

    Paul Walmsley
     
  • All GP timers on OMAP2/3 can generate wakeup events. The wakeup status is
    cleared in the PRCM interrupt handler.

    Signed-off-by: Kevin Hilman
    Signed-off-by: Paul Walmsley

    Kevin Hilman
     
  • GPTIMER12 IRQ is at IRQ 95 on OMAP3, unlike OMAP2. (ref: OMAP34xx
    Multimedia High Security (HS) Device Silicon Revision 3.0 Security
    Addendum Rev. B, SWPU119B)

    Signed-off-by: Paul Walmsley
    Signed-off-by: Tony Lindgren

    Paul Walmsley
     

24 Mar, 2009

1 commit


11 Dec, 2008

2 commits

  • The GPTIMER TLDR register does not need to be written if the GPTIMER
    is not in autoreload mode. This is the usual case for dynamic tick-enabled
    kernels.

    Simulation data indicate that skipping the read that occurs as part of
    the write should save at least 300-320 ns for each GPTIMER1 timer
    reprogram. (This assumes L4-Wakeup is at 19MHz and GPTIMER write
    posting is enabled.) Skipping the write itself probably won't have
    much impact since it should be posted on the OCP interconnect.

    Tested on 2430SDP and 3430SDP.

    Signed-off-by: Paul Walmsley
    Cc: Richard Woodruff
    Acked-by: Kevin Hilman
    Signed-off-by: Tony Lindgren

    Paul Walmsley
     
  • omap_dm_timer_write_reg() already waits for pending writes to complete,
    so the extra wait in omap_dm_timer_set_load() is superfluous.

    Signed-off-by: Paul Walmsley
    Cc: Richard Woodruff
    Acked-by: Kevin Hilman
    Signed-off-by: Tony Lindgren

    Paul Walmsley
     

15 Oct, 2008

1 commit


06 Sep, 2008

2 commits

  • Signed-off-by: Russell King

    Russell King
     
  • OMAP1_IO_ADDRESS(), OMAP2_IO_ADDRESS() and IO_ADDRESS() returns cookies
    for use with __raw_{read|write}* for accessing registers. Therefore,
    these macros should return (void __iomem *) cookies, not integer values.

    Doing this improves typechecking, and means we can find those places
    where, eg, DMA controllers are incorrectly given virtual addresses to
    DMA to, or physical addresses are thrown through a virtual to physical
    address translation.

    Signed-off-by: Russell King

    Russell King