Skip to content

Commit

Permalink
clocksource/drivers/meson6_timer.c: Convert init function to return e…
Browse files Browse the repository at this point in the history
…rror

The init functions do not return any error. They behave as the following:

  - panic, thus leading to a kernel crash while another timer may work and
       make the system boot up correctly

  or

  - print an error and let the caller unaware if the state of the system

Change that by converting the init functions to return an error conforming
to the CLOCKSOURCE_OF_RET prototype.

Proper error handling (rollback, errno value) will be changed later case
by case, thus this change just return back an error or success in the init
function.

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
  • Loading branch information
Daniel Lezcano committed Jun 28, 2016
1 parent f2f9900 commit ca46acb
Showing 1 changed file with 14 additions and 7 deletions.
21 changes: 14 additions & 7 deletions drivers/clocksource/meson6_timer.c
Original file line number Diff line number Diff line change
Expand Up @@ -126,18 +126,22 @@ static struct irqaction meson6_timer_irq = {
.dev_id = &meson6_clockevent,
};

static void __init meson6_timer_init(struct device_node *node)
static int __init meson6_timer_init(struct device_node *node)
{
u32 val;
int ret, irq;

timer_base = of_io_request_and_map(node, 0, "meson6-timer");
if (IS_ERR(timer_base))
panic("Can't map registers");
if (IS_ERR(timer_base)) {
pr_err("Can't map registers");
return -ENXIO;
}

irq = irq_of_parse_and_map(node, 0);
if (irq <= 0)
panic("Can't parse IRQ");
if (irq <= 0) {
pr_err("Can't parse IRQ");
return -EINVAL;
}

/* Set 1us for timer E */
val = readl(timer_base + TIMER_ISA_MUX);
Expand All @@ -158,14 +162,17 @@ static void __init meson6_timer_init(struct device_node *node)
meson6_clkevt_time_stop(CED_ID);

ret = setup_irq(irq, &meson6_timer_irq);
if (ret)
if (ret) {
pr_warn("failed to setup irq %d\n", irq);
return ret;
}

meson6_clockevent.cpumask = cpu_possible_mask;
meson6_clockevent.irq = irq;

clockevents_config_and_register(&meson6_clockevent, USEC_PER_SEC,
1, 0xfffe);
return 0;
}
CLOCKSOURCE_OF_DECLARE(meson6, "amlogic,meson6-timer",
CLOCKSOURCE_OF_DECLARE_RET(meson6, "amlogic,meson6-timer",
meson6_timer_init);

0 comments on commit ca46acb

Please sign in to comment.