Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

clocksource/drivers/sp804: Avoid error on multiple instances

When a machine sports more than one SP804 timer instance, we only bring
up the first one, since multiple timers of the same kind are not useful
to Linux. As this is intentional behaviour, we should not return an
error message, as we do today:
===============
[ 0.000800] Failed to initialize '/bus@8000000/motherboard-bus@8000000/iofpga-bus@300000000/timer@120000': -22
===============

Replace the -EINVAL return with a debug message and return 0 instead.

Also we do not reach the init function anymore if the DT node is
disabled (as this is now handled by OF_DECLARE), so remove the explicit
check for that case.

This fixes a long standing bogus error when booting ARM's fastmodels.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Reviewed-by: Robin Murphy <robin.murphy@arm.com>
Link: https://lore.kernel.org/r/20220506162522.3675399-1-andre.przywara@arm.com
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>

authored by

Andre Przywara and committed by
Daniel Lezcano
a98399cb 232ccac1

+5 -5
+5 -5
drivers/clocksource/timer-sp804.c
··· 259 259 struct clk *clk1, *clk2; 260 260 const char *name = of_get_property(np, "compatible", NULL); 261 261 262 + if (initialized) { 263 + pr_debug("%pOF: skipping further SP804 timer device\n", np); 264 + return 0; 265 + } 266 + 262 267 base = of_iomap(np, 0); 263 268 if (!base) 264 269 return -ENXIO; ··· 274 269 /* Ensure timers are disabled */ 275 270 writel(0, timer1_base + timer->ctrl); 276 271 writel(0, timer2_base + timer->ctrl); 277 - 278 - if (initialized || !of_device_is_available(np)) { 279 - ret = -EINVAL; 280 - goto err; 281 - } 282 272 283 273 clk1 = of_clk_get(np, 0); 284 274 if (IS_ERR(clk1))