Re: [PATCH v7 0/5] clocksource/timer-econet-en751221: Support irq number per timer
Caleb James DeLisle <[email protected]>
| Newsgroups | org.kernel.vger.linux-mips,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
On 12/08/2026 10:26, Daniel Lezcano wrote:
> On 7/31/26 14:02, Caleb James DeLisle wrote:
>> This timer appears on both the EcoNet EN751221 (34Kc) and on the
>> EN751627 / EN7528 (1004Kc) SoCs. On the 34Kc the interrupt controller
>> uses a percpu interrupt while on the others it uses an individual
>> IRQ number for each CPU timer. Add support for EN751627 and EN7528.
>> Add support for IRQ number for each CPU timer under the
>> econet,en751627-timer compatible.
>>
>> Changes since v6:
>> * Rebase to tip/timers/core (base-commit below)
>
> Got this:
>
> In file included from
> /home/dlezcano/Work/src/linux/timers/include/asm-generic/bug.h:31,
> from
> /home/dlezcano/Work/src/linux/timers/arch/arm64/include/asm/bug.h:26,
> from
> /home/dlezcano/Work/src/linux/timers/arch/arm64/include/asm/pgtable.h:8,
> from
> /home/dlezcano/Work/src/linux/timers/include/linux/pgtable.h:6,
> from
> /home/dlezcano/Work/src/linux/timers/arch/arm64/include/asm/io.h:12,
> from
> /home/dlezcano/Work/src/linux/timers/include/linux/io.h:12,
> from
> /home/dlezcano/Work/src/linux/timers/drivers/clocksource/timer-econet-en751221.c:8:
> /home/dlezcano/Work/src/linux/timers/drivers/clocksource/timer-econet-en751221.c:
> In function ‘timer_init’:
> /home/dlezcano/Work/src/linux/timers/include/linux/kern_levels.h:5:25:
> warning: format ‘%d’ expects argument of type ‘int’, but argument 3
> has type ‘long unsigned int’ [-Wformat=]
> 5 | #define KERN_SOH "\001" /* ASCII Start Of
> Header */
> | ^~~~~~
> /home/dlezcano/Work/src/linux/timers/include/linux/printk.h:483:25:
> note: in definition of macro ‘printk_index_wrap’
> 483 | _p_func(_fmt, ##__VA_ARGS__); \
> | ^~~~
> /home/dlezcano/Work/src/linux/timers/include/linux/printk.h:554:9:
> note: in expansion of macro ‘printk’
> 554 | printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
> | ^~~~~~
> /home/dlezcano/Work/src/linux/timers/include/linux/kern_levels.h:11:25:
> note: in expansion of macro ‘KERN_SOH’
> 11 | #define KERN_ERR KERN_SOH "3" /* error conditions */
> | ^~~~~~~~
> /home/dlezcano/Work/src/linux/timers/include/linux/printk.h:554:16:
> note: in expansion of macro ‘KERN_ERR’
> 554 | printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
> | ^~~~~~~~
> /home/dlezcano/Work/src/linux/timers/drivers/clocksource/timer-econet-en751221.c:201:17:
> note: in expansion of macro ‘pr_err’
> 201 | pr_err("%pOFn: Too many IRQs max %d got %d\n",
> np,
> | ^~~~~~
> /home/dlezcano/Work/src/linux/timers/include/linux/kern_levels.h:5:25:
> warning: format ‘%d’ expects argument of type ‘int’, but argument 3
> has type ‘long unsigned int’ [-Wformat=]
> 5 | #define KERN_SOH "\001" /* ASCII Start Of
> Header */
> | ^~~~~~
> /home/dlezcano/Work/src/linux/timers/include/linux/printk.h:483:25:
> note: in definition of macro ‘printk_index_wrap’
> 483 | _p_func(_fmt, ##__VA_ARGS__); \
> | ^~~~
> /home/dlezcano/Work/src/linux/timers/include/linux/printk.h:554:9:
> note: in expansion of macro ‘printk’
> 554 | printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
> | ^~~~~~
> /home/dlezcano/Work/src/linux/timers/include/linux/kern_levels.h:11:25:
> note: in expansion of macro ‘KERN_SOH’
> 11 | #define KERN_ERR KERN_SOH "3" /* error conditions */
> | ^~~~~~~~
> /home/dlezcano/Work/src/linux/timers/include/linux/printk.h:554:16:
> note: in expansion of macro ‘KERN_ERR’
> 554 | printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
> | ^~~~~~~~
> /home/dlezcano/Work/src/linux/timers/drivers/clocksource/timer-econet-en751221.c:206:17:
> note: in expansion of macro ‘pr_err’
> 206 | pr_err("%pOFn: Too many regs: max %d got
> %d\n", np,
> | ^~~~~~
>
I gather you must have built this on a 64 bit machine, so the size_t of
ARRAY_SIZE() is a uint64_t (?)
I just double-checked building it for MIPS 24Kc GCC and it all passes.
This is a built-in CPU timer for EcoNet MIPS SoCs. Those were all 32 bit
and they're not making any more of them so we don't need to worry about
a future 64 bit port.
But I'm not that knowledgeable in best practices, perhaps its expected
to compile on 64 bit? Or perhaps I should forbid 64 bit in the Kconfig?
There is no way to get CONFIG_ECONET and 64 bit, but through
TEST_COMPILE I suppose it is.
Any suggestions would be appreciated.
Thanks,
Caleb
>
>> Changes since v5:
>> * Integrate patch fix refcount leak from:
>> Link:
>> https://lore.kernel.org/linux-mips/[email protected]/
>> * NULL econet_timer.membase after unmapping
>> * NULL check dev->event_handler in case clockevents_config_and_register
>> failed to fully register.
>> * v5:
>> https://lore.kernel.org/linux-mips/[email protected]/
>>
>> Changes from v4:
>> * Fixed incorrect compatible in DT schema
>> * Bracing in out_irq_free if statement
>> * I did not move cpuhp_setup_state past the point of no return
>> * v4:
>> https://lore.kernel.org/linux-mips/[email protected]
>>
>> Changes from v3:
>> * off-by-one in out_irq_free
>> * Gracefully fail if too many address resources are provided in the DT
>> * Allow fewer actual timers than num_possible_cpus, as long as they
>> never start
>> * v3:
>> https://lore.kernel.org/linux-mips/[email protected]
>>
>> v3 note:
>>
>> I decided to take this patchset in a slightly different direction from
>> v2. There is a certain amount of initialization that once it has run,
>> it cannot be reverted in case of error. The original driver init was a
>> mixture of revertible and non-revertible code which made it too easy
>> for code which is designed with best practices in mind to in fact
>> introduce a bug. Therefore I start by making the init process more
>> legible but without any business logic changes, then fix a race
>> condition by keeping IRQ disabled until after cevt is setup, then
>> finally add non-percpu IRQ support.
>>
>> * v2:
>> https://lore.kernel.org/linux-mips/[email protected]
>>
>> Changes from v1:
>> * Split changes over 3 refactoring patches + main patch
>> * Remove driver discussion from dt commit message
>> * v1:
>> https://lore.kernel.org/linux-mips/[email protected]/
>>
>>
>> Alexander A. Klimov (1):
>> clocksource/timer-econet-en751221: fix refcount leak
>>
>> Caleb James DeLisle (4):
>> dt-bindings: timer: econet: Update EN751627 for multi-IRQ
>> clocksource/timer-econet-en751221: Init teardown on error if possible
>> clocksource/timer-econet-en751221: Disable IRQ until cevt registered
>> clocksource/timer-econet-en751221: Support EN751627 without percpu
>> IRQ
>>
>> .../bindings/timer/econet,en751221-timer.yaml | 31 +--
>> drivers/clocksource/timer-econet-en751221.c | 181 ++++++++++++++----
>> 2 files changed, 159 insertions(+), 53 deletions(-)
>>
>>
>> base-commit: ecc330e3096173f433659aa64ab3674d0d48440e
>
>