All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Ellerman <michael@ellerman.id.au>
To: <linuxppc-dev@ozlabs.org>
Cc: linux-pci@atrey.karlin.mff.cuni.cz
Subject: [PATCH 2/7] Powerpc MSI infrastructure
Date: Thu, 19 Apr 2007 17:35:26 +1000	[thread overview]
Message-ID: <20070419073553.5F2ABDDE3C@ozlabs.org> (raw)
In-Reply-To: <1176968125.531108.326168797246.qpush@cradle>

This patch provides the architecture specific hooks to support MSI on
powerpc. We implement the newly added arch_setup_msi_irqs() and
arch_teardown_msi_irqs(), and then delegate to ppc_md routines.

Platforms that don't implement MSI will leave the ppc_md calls blank,
arch_msi_check_device() will detect this and return ENOSYS. Drivers
should detect this error and continue to use LSI.

Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
---

 arch/powerpc/Kconfig          |    1 +
 arch/powerpc/kernel/Makefile  |    1 +
 arch/powerpc/kernel/msi.c     |   38 ++++++++++++++++++++++++++++++++++++++
 include/asm-powerpc/machdep.h |    6 ++++++
 4 files changed, 46 insertions(+)

Index: msi-new/arch/powerpc/Kconfig
===================================================================
--- msi-new.orig/arch/powerpc/Kconfig
+++ msi-new/arch/powerpc/Kconfig
@@ -662,6 +662,7 @@ config PCI
 		&& !PPC_85xx && !PPC_86xx
 	default PCI_PERMEDIA if !4xx && !CPM2 && !8xx && APUS
 	default PCI_QSPAN if !4xx && !CPM2 && 8xx
+	select ARCH_SUPPORTS_MSI
 	help
 	  Find out whether your system includes a PCI bus. PCI is the name of
 	  a bus system, i.e. the way the CPU talks to the other stuff inside
Index: msi-new/arch/powerpc/kernel/Makefile
===================================================================
--- msi-new.orig/arch/powerpc/kernel/Makefile
+++ msi-new/arch/powerpc/kernel/Makefile
@@ -66,6 +66,7 @@ obj-$(CONFIG_MODULES)		+= $(module-y)
 pci64-$(CONFIG_PPC64)		+= pci_64.o pci_dn.o
 pci32-$(CONFIG_PPC32)		:= pci_32.o
 obj-$(CONFIG_PCI)		+= $(pci64-y) $(pci32-y)
+obj-$(CONFIG_PCI_MSI)		+= msi.o
 kexec-$(CONFIG_PPC64)		:= machine_kexec_64.o
 kexec-$(CONFIG_PPC32)		:= machine_kexec_32.o
 obj-$(CONFIG_KEXEC)		+= machine_kexec.o crash.o $(kexec-y)
Index: msi-new/arch/powerpc/kernel/msi.c
===================================================================
--- /dev/null
+++ msi-new/arch/powerpc/kernel/msi.c
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2006-2007, Michael Ellerman, IBM Corporation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+
+#include <linux/kernel.h>
+#include <linux/msi.h>
+
+#include <asm/machdep.h>
+
+int arch_msi_check_device(struct pci_dev* dev, int nvec, int type)
+{
+	if (ppc_md.msi_check_device) {
+		pr_debug("msi: Using platform check routine.\n");
+		return ppc_md.msi_check_device(dev, nvec, type);
+	}
+
+	if (!ppc_md.setup_msi_irqs || !ppc_md.teardown_msi_irqs) {
+		pr_debug("msi: Platform doesn't provide MSI callbacks.\n");
+		return -ENOSYS;
+	}
+
+        return 0;
+}
+
+int arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
+{
+	return ppc_md.setup_msi_irqs(dev, nvec, type);
+}
+
+void arch_teardown_msi_irqs(struct pci_dev *dev)
+{
+	return ppc_md.teardown_msi_irqs(dev);
+}
Index: msi-new/include/asm-powerpc/machdep.h
===================================================================
--- msi-new.orig/include/asm-powerpc/machdep.h
+++ msi-new/include/asm-powerpc/machdep.h
@@ -115,6 +115,12 @@ struct machdep_calls {
 	/* To setup PHBs when using automatic OF platform driver for PCI */
 	int		(*pci_setup_phb)(struct pci_controller *host);
 
+#ifdef CONFIG_PCI_MSI
+	int		(*msi_check_device)(struct pci_dev* dev, int nvec, int type);
+	int		(*setup_msi_irqs)(struct pci_dev *dev, int nvec, int type);
+	void		(*teardown_msi_irqs)(struct pci_dev *dev);
+#endif
+
 	void		(*restart)(char *cmd);
 	void		(*power_off)(void);
 	void		(*halt)(void);

  reply	other threads:[~2007-04-19  7:35 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-04-19  7:35 [PATCH 1/7] Rip out the existing powerpc msi stubs Michael Ellerman
2007-04-19  7:35 ` Michael Ellerman [this message]
2007-04-21 23:15   ` [PATCH 2/7] Powerpc MSI infrastructure Milton Miller
2007-04-23  4:28     ` Michael Ellerman
2007-04-19  7:35 ` [PATCH 3/7] RTAS MSI implementation Michael Ellerman
2007-04-19  7:35 ` [PATCH 4/7] Tell Phyp we support MSI Michael Ellerman
2007-04-19  7:35 ` [PATCH 5/7] Enable MSI mappings for MPIC Michael Ellerman
2007-04-21 23:16   ` Milton Miller
2007-04-22  0:06     ` Benjamin Herrenschmidt
2007-04-22  4:53       ` Milton Miller
2007-04-23  4:10         ` Michael Ellerman
2007-04-19  7:35 ` [PATCH 6/7] MPIC MSI allocator Michael Ellerman
2007-04-21 23:17   ` Milton Miller
2007-04-23  4:04     ` Michael Ellerman
2007-04-23  6:20       ` Milton Miller
2007-04-23  3:50   ` Olof Johansson
2007-04-23  3:53     ` Michael Ellerman
2007-04-24  1:29     ` Benjamin Herrenschmidt
2007-04-24  9:26       ` Segher Boessenkool
2007-04-24  9:39         ` Benjamin Herrenschmidt
2007-04-24  9:44           ` Segher Boessenkool
2007-04-24  9:51             ` Benjamin Herrenschmidt
2007-04-19  7:35 ` [PATCH 7/7] MPIC MSI backend Michael Ellerman
2007-04-20  8:40   ` Segher Boessenkool
2007-04-20 14:39     ` Michael Ellerman
2007-04-21 23:17   ` Milton Miller
2007-04-22  7:06     ` Segher Boessenkool
2007-04-22 19:30       ` Olof Johansson
2007-04-23  4:24         ` Michael Ellerman
2007-04-23  8:24         ` Segher Boessenkool
2007-04-23  8:31           ` Michael Ellerman
2007-04-23 17:33             ` Segher Boessenkool
2007-04-23  3:45     ` Michael Ellerman
  -- strict thread matches above, loose matches on Subject: below --
2007-05-08  2:58 [PATCH 1/7] Rip out the existing powerpc msi stubs Michael Ellerman
2007-05-08  2:58 ` [PATCH 2/7] Powerpc MSI infrastructure Michael Ellerman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070419073553.5F2ABDDE3C@ozlabs.org \
    --to=michael@ellerman.id.au \
    --cc=linux-pci@atrey.karlin.mff.cuni.cz \
    --cc=linuxppc-dev@ozlabs.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.