svn commit: r304631 - projects/powernv/powerpc/powernv
Nathan Whitehorn
nwhitehorn at FreeBSD.org
Mon Aug 22 19:47:30 UTC 2016
Author: nwhitehorn
Date: Mon Aug 22 19:47:29 2016
New Revision: 304631
URL: https://svnweb.freebsd.org/changeset/base/304631
Log:
Add support for 32-bit only MSI.
Modified:
projects/powernv/powerpc/powernv/opal_pci.c
Modified: projects/powernv/powerpc/powernv/opal_pci.c
==============================================================================
--- projects/powernv/powerpc/powernv/opal_pci.c Mon Aug 22 19:35:12 2016 (r304630)
+++ projects/powernv/powerpc/powernv/opal_pci.c Mon Aug 22 19:47:29 2016 (r304631)
@@ -32,6 +32,10 @@ __FBSDID("$FreeBSD$");
#include <sys/bus.h>
#include <sys/conf.h>
#include <sys/kernel.h>
+#include <sys/pciio.h>
+#include <sys/endian.h>
+#include <sys/rman.h>
+#include <sys/vmem.h>
#include <dev/ofw/openfirm.h>
#include <dev/ofw/ofw_pci.h>
@@ -44,13 +48,6 @@ __FBSDID("$FreeBSD$");
#include <machine/bus.h>
#include <machine/intr_machdep.h>
#include <machine/md_var.h>
-#include <machine/pio.h>
-#include <machine/resource.h>
-#include <machine/rtas.h>
-
-#include <sys/endian.h>
-#include <sys/rman.h>
-#include <sys/vmem.h>
#include <vm/vm.h>
#include <vm/pmap.h>
@@ -520,6 +517,7 @@ opalpci_map_msi(device_t dev, device_t c
uint32_t *data)
{
struct opalpci_softc *sc;
+ struct pci_devinfo *dinfo;
int err, xive;
sc = device_get_softc(dev);
@@ -528,9 +526,20 @@ opalpci_map_msi(device_t dev, device_t c
xive = irq - sc->base_msi_irq - sc->msi_base;
opal_call(OPAL_PCI_SET_XIVE_PE, sc->phb_id, OPAL_PCI_DEFAULT_PE, xive);
- err = opal_call(OPAL_GET_MSI_64, sc->phb_id, OPAL_PCI_DEFAULT_PE, xive,
- 1, vtophys(addr), vtophys(data));
- *addr = be64toh(*addr);
+
+ dinfo = device_get_ivars(child);
+ if (dinfo->cfg.msi.msi_alloc > 0 &&
+ (dinfo->cfg.msi.msi_ctrl & PCIM_MSICTRL_64BIT) == 0) {
+ uint32_t msi32;
+ err = opal_call(OPAL_GET_MSI_32, sc->phb_id,
+ OPAL_PCI_DEFAULT_PE, xive, 1, vtophys(&msi32),
+ vtophys(data));
+ *addr = be32toh(msi32);
+ } else {
+ err = opal_call(OPAL_GET_MSI_64, sc->phb_id,
+ OPAL_PCI_DEFAULT_PE, xive, 1, vtophys(addr), vtophys(data));
+ *addr = be64toh(*addr);
+ }
*data = be32toh(*data);
if (bootverbose && err != 0)
More information about the svn-src-projects
mailing list