sparc: leon: Fix a retry loop in leon_init_timers()
The original code causes a static checker warning because it has a
continue inside a do { } while (0); loop. In that context, a continue
and a break are equivalent. The intent was to go back to the start of
the loop so the continue was a bug.
I've added a retry label at the start and changed the continue to a goto
retry. Then I removed the do { } while (0) loop and pulled the code in
one indent level.
Fixes: 2791c1a439
("SPARC/LEON: added support for selecting Timer Core and Timer within core")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
b5c3206190
Коммит
601e6e3cc5
|
@ -349,37 +349,37 @@ void __init leon_init_timers(void)
|
|||
|
||||
/* Find GPTIMER Timer Registers base address otherwise bail out. */
|
||||
nnp = rootnp;
|
||||
do {
|
||||
np = of_find_node_by_name(nnp, "GAISLER_GPTIMER");
|
||||
if (!np) {
|
||||
np = of_find_node_by_name(nnp, "01_011");
|
||||
if (!np)
|
||||
goto bad;
|
||||
|
||||
retry:
|
||||
np = of_find_node_by_name(nnp, "GAISLER_GPTIMER");
|
||||
if (!np) {
|
||||
np = of_find_node_by_name(nnp, "01_011");
|
||||
if (!np)
|
||||
goto bad;
|
||||
}
|
||||
|
||||
ampopts = 0;
|
||||
pp = of_find_property(np, "ampopts", &len);
|
||||
if (pp) {
|
||||
ampopts = *(int *)pp->value;
|
||||
if (ampopts == 0) {
|
||||
/* Skip this instance, resource already
|
||||
* allocated by other OS */
|
||||
nnp = np;
|
||||
goto retry;
|
||||
}
|
||||
}
|
||||
|
||||
ampopts = 0;
|
||||
pp = of_find_property(np, "ampopts", &len);
|
||||
if (pp) {
|
||||
ampopts = *(int *)pp->value;
|
||||
if (ampopts == 0) {
|
||||
/* Skip this instance, resource already
|
||||
* allocated by other OS */
|
||||
nnp = np;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
/* Select Timer-Instance on Timer Core. Default is zero */
|
||||
leon3_gptimer_idx = ampopts & 0x7;
|
||||
|
||||
/* Select Timer-Instance on Timer Core. Default is zero */
|
||||
leon3_gptimer_idx = ampopts & 0x7;
|
||||
|
||||
pp = of_find_property(np, "reg", &len);
|
||||
if (pp)
|
||||
leon3_gptimer_regs = *(struct leon3_gptimer_regs_map **)
|
||||
pp->value;
|
||||
pp = of_find_property(np, "interrupts", &len);
|
||||
if (pp)
|
||||
leon3_gptimer_irq = *(unsigned int *)pp->value;
|
||||
} while (0);
|
||||
pp = of_find_property(np, "reg", &len);
|
||||
if (pp)
|
||||
leon3_gptimer_regs = *(struct leon3_gptimer_regs_map **)
|
||||
pp->value;
|
||||
pp = of_find_property(np, "interrupts", &len);
|
||||
if (pp)
|
||||
leon3_gptimer_irq = *(unsigned int *)pp->value;
|
||||
|
||||
if (!(leon3_gptimer_regs && leon3_irqctrl_regs && leon3_gptimer_irq))
|
||||
goto bad;
|
||||
|
|
Загрузка…
Ссылка в новой задаче