powerpc/powernv: Increase opal-irqchip initcall priority
authorAlistair Popple <alistair@popple.id.au>
Wed, 17 Jun 2015 01:36:57 +0000 (11:36 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 17 Jun 2015 21:16:01 +0000 (07:16 +1000)
The eeh subsystem for powernv requires the opal event irqchip to be
initialised prior to initialisation or the following errors are
produced (and eeh doesn't work as expected):

irq: XICS didn't like hwirq-0x9 to VIRQ17 mapping (rc=-22)
pnv_eeh_post_init: Can't request OPAL event interrupt (0)

On powernv eeh is initialised from a subsys_initcall due to a check
for machine_is(powernv) in eeh_init(). This patch increases the
initcall priority of opal_event_init() to an arch_initcall to ensure
the opal event interface is initialised prior to any users of it.

Signed-off-by: Alistair Popple <alistair@popple.id.au>
Reported-by: Daniel Axtens <dja@axtens.net>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/platforms/powernv/opal-irqchip.c
arch/powerpc/platforms/powernv/opal.c

index 841135f4898110215ce42dbb10001afd2e80b410..e2e7d75f52f39234487e1ba51c9014f2c3427b78 100644 (file)
@@ -231,6 +231,7 @@ out:
        of_node_put(opal_node);
        return rc;
 }
+machine_arch_initcall(powernv, opal_event_init);
 
 /**
  * opal_event_request(unsigned int opal_event_nr) - Request an event
@@ -244,6 +245,9 @@ out:
  */
 int opal_event_request(unsigned int opal_event_nr)
 {
+       if (WARN_ON_ONCE(!opal_event_irqchip.domain))
+               return NO_IRQ;
+
        return irq_create_mapping(opal_event_irqchip.domain, opal_event_nr);
 }
 EXPORT_SYMBOL(opal_event_request);
index 9e9c483eee4de4db40b7286ddeafed59d63d75c2..f084afa0e3baeb776ec3c653f093000509da1ee2 100644 (file)
@@ -657,9 +657,6 @@ static int __init opal_init(void)
                return -ENODEV;
        }
 
-       /* Initialise OPAL events */
-       opal_event_init();
-
        /* Register OPAL consoles if any ports */
        if (firmware_has_feature(FW_FEATURE_OPALv2))
                consoles = of_find_node_by_path("/ibm,opal/consoles");