[PATCH v4 0/6] clocksource: rework Atmel TCB timer driver

Sebastian Andrzej Siewior bigeasy at linutronix.de
Thu Apr 26 09:46:23 PDT 2018


On 2018-04-18 12:51:37 [+0200], Alexandre Belloni wrote:
> Hi,

Hi,

please keep on Cc if you intend to repost this.

> This series gets back on the TCB drivers rework. It introduces a new driver to
> handle the clocksource and clockevent devices.

So you don't want the old thing we have in -RT. I remember you (the
atmel folks) wanted something different the last time I posted the
patches.

> As a reminder, this is necessary because:
>  - the current tcb_clksrc driver is probed too late to be able to be used at
>    boot and we now have SoCs that don't have a PIT. They currently are not able
>    to boot a mainline kernel.
>  - using the PIT doesn't work well with preempt-rt because its interrupt is
>    shared (in particular with the UART and their interrupt flags are
>    incompatible)

If you could get rid of this:
| clocksource: Switched to clocksource timer at f0010000:0
| BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:974
| in_atomic(): 1, irqs_disabled(): 128, pid: 1, name: swapper
| Preemption disabled at:
| [<c014f7ac>] __handle_domain_irq+0x40/0xdc
| Hardware name: Atmel SAMA5
| [<c010e14c>] (unwind_backtrace) from [<c010bd74>] (show_stack+0x10/0x14)
| [<c010bd74>] (show_stack) from [<c013b314>] (___might_sleep+0x16c/0x1c0)
| [<c013b314>] (___might_sleep) from [<c06696f0>] (rt_spin_lock+0x40/0x80)
| [<c06696f0>] (rt_spin_lock) from [<c046e030>] (clk_enable_lock+0x30/0xe4)
| [<c046e030>] (clk_enable_lock) from [<c046ea4c>] (clk_core_disable_lock+0xc/0x1c)
| [<c046ea4c>] (clk_core_disable_lock) from [<c059d07c>] (tc_clkevt2_shutdown+0x64/0x6c)
| [<c059d07c>] (tc_clkevt2_shutdown) from [<c059d09c>] (tc_clkevt2_set_oneshot+0x18/0x78)
| [<c059d09c>] (tc_clkevt2_set_oneshot) from [<c0172a00>] (clockevents_switch_state+0xb8/0x130)
| [<c0172a00>] (clockevents_switch_state) from [<c0173a60>] (tick_switch_to_oneshot+0x48/0xb8)
| [<c0173a60>] (tick_switch_to_oneshot) from [<c0165a0c>] (hrtimer_run_queues+0xf0/0x15c)
| [<c0165a0c>] (hrtimer_run_queues) from [<c0164010>] (run_local_timers+0x8/0x38)
| [<c0164010>] (run_local_timers) from [<c0164070>] (update_process_times+0x30/0x60)
| [<c0164070>] (update_process_times) from [<c0173008>] (tick_handle_periodic+0x1c/0x90)
| [<c0173008>] (tick_handle_periodic) from [<c059c954>] (tc_clkevt2_irq+0x38/0x48)
| [<c059c954>] (tc_clkevt2_irq) from [<c014fe6c>] (__handle_irq_event_percpu+0x7c/0x28c)

that would be so awesome.

>  - the current solution is wasting some TCB channels
> 
> The plan is to get this driver upstream, then convert the TCB PWM driver to be
> able to get rid of the tcb_clksrc driver along with atmel_tclib.

The config options are now less than optimal (for me at least). On
oldconfig it asks you for PIT and I say selected no because I wanted the
new one. So I end up with nothing.
Not sure you want do something about it…

Is the resolution more or the same compared what we have in -RT? On an
idle system this clocks goes up to 180us/ 190us while the old clock
started at 160us and moved to around 180us after one hackbench
invocation. This could be nothing, it could be a lower frequency of the
clockevents device.

If you intend to stick with this driver then I would replace the current
hack in -RT with this series.

Sebastian



More information about the linux-arm-kernel mailing list