Author: mw
Date: Wed Apr  4 12:36:55 2018
New Revision: 332014
URL: https://svnweb.freebsd.org/changeset/base/332014

Log:
  Add support of PCI_RES_BUS to Marvell PCI driver
  
  GENERIC ARM config use NEW_PCIB driver (https://wiki.freebsd.org/NEW_PCIB).
  To satisfy it, allocation and deallocation of PCI_RES_BUS is necessary.
  Conditional compilation is added for backward compatibility with ARMv5
  configs.
  
  Submitted by: Rafal Kozik <r...@semihalf.com>
  Reviewed by: jhb
  Obtained from: Semihalf
  Sponsored by: Stormshield
  Differential Revision: https://reviews.freebsd.org/D14748

Modified:
  head/sys/arm/mv/mv_pci.c

Modified: head/sys/arm/mv/mv_pci.c
==============================================================================
--- head/sys/arm/mv/mv_pci.c    Wed Apr  4 12:35:28 2018        (r332013)
+++ head/sys/arm/mv/mv_pci.c    Wed Apr  4 12:36:55 2018        (r332014)
@@ -312,6 +312,8 @@ struct mv_pcib_softc {
        int             sc_skip_enable_procedure;
        int             sc_enable_find_root_slot;
        struct ofw_bus_iinfo    sc_pci_iinfo;
+
+       int             ap_segment;             /* PCI domain */
 };
 
 /* Local forward prototypes */
@@ -441,6 +443,8 @@ mv_pcib_attach(device_t self)
                        return(ENXIO);
        }
 
+       sc->ap_segment = port_id;
+
        if (ofw_bus_node_is_compatible(node, "mrvl,pcie")) {
                sc->sc_type = MV_TYPE_PCIE;
                if (ofw_bus_node_is_compatible(parnode, 
"marvell,armada-370-pcie")) {
@@ -879,6 +883,11 @@ mv_pcib_alloc_resource(device_t dev, device_t child, i
        case SYS_RES_MEMORY:
                rm = &sc->sc_mem_rman;
                break;
+#ifdef PCI_RES_BUS
+       case PCI_RES_BUS:
+               return (pci_domain_alloc_bus(sc->ap_segment, child, rid, start,
+                   end, count, flags));
+#endif
        default:
                return (BUS_ALLOC_RESOURCE(device_get_parent(dev), dev,
                    type, rid, start, end, count, flags));
@@ -915,7 +924,12 @@ static int
 mv_pcib_release_resource(device_t dev, device_t child, int type, int rid,
     struct resource *res)
 {
+#ifdef PCI_RES_BUS
+       struct mv_pcib_softc *sc = device_get_softc(dev);
 
+       if (type == PCI_RES_BUS)
+               return (pci_domain_release_bus(sc->ap_segment, child, rid, 
res));
+#endif
        if (type != SYS_RES_IOPORT && type != SYS_RES_MEMORY)
                return (BUS_RELEASE_RESOURCE(device_get_parent(dev), child,
                    type, rid, res));
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to