Date: Mon, 24 Apr 2023 11:34:11 GMT From: Andrew Turner <andrew@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 7029f2c887a1 - main - Allow pci_host_generic attachments to manage registers Message-ID: <202304241134.33OBYBwu071123@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=7029f2c887a16c823faf08e8a79dc0d3887989ab commit 7029f2c887a16c823faf08e8a79dc0d3887989ab Author: Andrew Turner <andrew@FreeBSD.org> AuthorDate: 2022-06-04 10:59:46 +0000 Commit: Andrew Turner <andrew@FreeBSD.org> CommitDate: 2023-04-24 11:33:50 +0000 Allow pci_host_generic attachments to manage registers To allow for attachments that don't use memory mapped registers add a flag they can set when the base driver shouldn't map them. Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D39227 --- sys/dev/pci/pci_host_generic.c | 45 +++++++++++++++++++++++------------------- sys/dev/pci/pci_host_generic.h | 2 ++ 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/sys/dev/pci/pci_host_generic.c b/sys/dev/pci/pci_host_generic.c index 986318548eab..ca74b0c650c3 100644 --- a/sys/dev/pci/pci_host_generic.c +++ b/sys/dev/pci/pci_host_generic.c @@ -106,27 +106,30 @@ pci_host_generic_core_attach(device_t dev) if (error != 0) return (error); - rid = 0; - sc->res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, - PCI_RF_FLAGS | RF_ACTIVE); - if (sc->res == NULL) { - device_printf(dev, "could not allocate memory.\n"); - error = ENXIO; - goto err_resource; - } + if ((sc->quirks & PCIE_CUSTOM_CONFIG_SPACE_QUIRK) == 0) { + rid = 0; + sc->res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, + PCI_RF_FLAGS | RF_ACTIVE); + if (sc->res == NULL) { + device_printf(dev, "could not allocate memory.\n"); + error = ENXIO; + goto err_resource; + } #ifdef PCI_UNMAPPED - resource_init_map_request(&req); - req.memattr = VM_MEMATTR_DEVICE_NP; - error = bus_map_resource(dev, SYS_RES_MEMORY, sc->res, &req, &map); - if (error != 0) { - device_printf(dev, "could not map memory.\n"); - return (error); - } - rman_set_mapping(sc->res, &map); + resource_init_map_request(&req); + req.memattr = VM_MEMATTR_DEVICE_NP; + error = bus_map_resource(dev, SYS_RES_MEMORY, sc->res, &req, + &map); + if (error != 0) { + device_printf(dev, "could not map memory.\n"); + return (error); + } + rman_set_mapping(sc->res, &map); #endif - sc->bst = rman_get_bustag(sc->res); - sc->bsh = rman_get_bushandle(sc->res); + sc->bst = rman_get_bustag(sc->res); + sc->bsh = rman_get_bushandle(sc->res); + } sc->has_pmem = false; sc->pmem_rman.rm_type = RMAN_ARRAY; @@ -196,7 +199,8 @@ err_io_rman: err_mem_rman: rman_fini(&sc->pmem_rman); err_pmem_rman: - bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->res); + if (sc->res != NULL) + bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->res); err_resource: bus_dma_tag_destroy(sc->dmat); return (error); @@ -217,7 +221,8 @@ pci_host_generic_core_detach(device_t dev) rman_fini(&sc->io_rman); rman_fini(&sc->mem_rman); rman_fini(&sc->pmem_rman); - bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->res); + if (sc->res != NULL) + bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->res); bus_dma_tag_destroy(sc->dmat); return (0); diff --git a/sys/dev/pci/pci_host_generic.h b/sys/dev/pci/pci_host_generic.h index 80da4f523165..b3242c8bdaf5 100644 --- a/sys/dev/pci/pci_host_generic.h +++ b/sys/dev/pci/pci_host_generic.h @@ -90,6 +90,8 @@ struct generic_pcie_core_softc { /* Quirks */ #define PCIE_ECAM_DESIGNWARE_QUIRK (1 << 0) +/* Child will map resources to access config registers */ +#define PCIE_CUSTOM_CONFIG_SPACE_QUIRK (1 << 1) DECLARE_CLASS(generic_pcie_core_driver);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202304241134.33OBYBwu071123>