powernv/opal: Convert opal message events to opal irq domain
authorAlistair Popple <alistair@popple.id.au>
Fri, 15 May 2015 04:06:41 +0000 (14:06 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Fri, 22 May 2015 05:14:38 +0000 (15:14 +1000)
This patch converts the opal message event to use the new opal irq
domain.

Signed-off-by: Alistair Popple <alistair@popple.id.au>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/platforms/powernv/opal.c

index 3baca718261a13f41eddf710795b899bd8fd02be..cd5718b74d7ccde4bc6657309857e88fc3c6b730 100644 (file)
@@ -362,33 +362,34 @@ static void opal_handle_message(void)
        opal_message_do_notify(type, (void *)&msg);
 }
 
-static int opal_message_notify(struct notifier_block *nb,
-                         unsigned long events, void *change)
+static irqreturn_t opal_message_notify(int irq, void *data)
 {
-       if (events & OPAL_EVENT_MSG_PENDING)
-               opal_handle_message();
-       return 0;
+       opal_handle_message();
+       return IRQ_HANDLED;
 }
 
-static struct notifier_block opal_message_nb = {
-       .notifier_call  = opal_message_notify,
-       .next           = NULL,
-       .priority       = 0,
-};
-
 static int __init opal_message_init(void)
 {
-       int ret, i;
+       int ret, i, irq;
 
        for (i = 0; i < OPAL_MSG_TYPE_MAX; i++)
                ATOMIC_INIT_NOTIFIER_HEAD(&opal_msg_notifier_head[i]);
 
-       ret = opal_notifier_register(&opal_message_nb);
+       irq = opal_event_request(ilog2(OPAL_EVENT_MSG_PENDING));
+       if (!irq) {
+               pr_err("%s: Can't register OPAL event irq (%d)\n",
+                      __func__, irq);
+               return irq;
+       }
+
+       ret = request_irq(irq, opal_message_notify,
+                       IRQ_TYPE_LEVEL_HIGH, "opal-msg", NULL);
        if (ret) {
-               pr_err("%s: Can't register OPAL event notifier (%d)\n",
+               pr_err("%s: Can't request OPAL event irq (%d)\n",
                       __func__, ret);
                return ret;
        }
+
        return 0;
 }