Page MenuHomeFreeBSD

D30079.id103045.diff
No OneTemporary

D30079.id103045.diff

Index: sys/arm64/cavium/thunder_pcie_pem.c
===================================================================
--- sys/arm64/cavium/thunder_pcie_pem.c
+++ sys/arm64/cavium/thunder_pcie_pem.c
@@ -746,6 +746,8 @@
static int
thunder_pem_attach(device_t dev)
{
+ struct resource_map_request req;
+ struct resource_map map;
devclass_t pci_class;
device_t parent;
struct thunder_pem_softc *sc;
@@ -767,11 +769,20 @@
rid = RID_PEM_SPACE;
sc->reg = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
- &rid, RF_ACTIVE);
+ &rid, RF_ACTIVE | RF_UNMAPPED);
if (sc->reg == NULL) {
device_printf(dev, "Failed to allocate resource\n");
return (ENXIO);
}
+ resource_init_map_request(&req);
+ req.memattr = VM_MEMATTR_DEVICE_NP;
+ error = bus_map_resource(dev, SYS_RES_MEMORY, sc->reg, &req, &map);
+ if (error != 0) {
+ device_printf(dev, "could not map memory.\n");
+ return (error);
+ }
+ rman_set_mapping(sc->reg, &map);
+
sc->reg_bst = rman_get_bustag(sc->reg);
sc->reg_bsh = rman_get_bushandle(sc->reg);
Index: sys/arm64/qoriq/qoriq_dw_pci.c
===================================================================
--- sys/arm64/qoriq/qoriq_dw_pci.c
+++ sys/arm64/qoriq/qoriq_dw_pci.c
@@ -188,6 +188,8 @@
static int
qorif_dw_pci_attach(device_t dev)
{
+ struct resource_map_request req;
+ struct resource_map map;
struct qorif_dw_pci_softc *sc;
phandle_t node;
int rv;
@@ -202,13 +204,23 @@
rid = 0;
sc->dw_sc.dbi_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
- RF_ACTIVE);
+ RF_ACTIVE | RF_UNMAPPED);
if (sc->dw_sc.dbi_res == NULL) {
device_printf(dev, "Cannot allocate DBI memory\n");
rv = ENXIO;
goto out;
}
+ resource_init_map_request(&req);
+ req.memattr = VM_MEMATTR_DEVICE_NP;
+ rv = bus_map_resource(dev, SYS_RES_MEMORY, sc->dw_sc.dbi_res, &req,
+ &map);
+ if (rv != 0) {
+ device_printf(dev, "could not map memory.\n");
+ return (rv);
+ }
+ rman_set_mapping(sc->dw_sc.dbi_res, &map);
+
/* PCI interrupt */
rid = 0;
sc->irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
Index: sys/arm64/rockchip/rk_pcie.c
===================================================================
--- sys/arm64/rockchip/rk_pcie.c
+++ sys/arm64/rockchip/rk_pcie.c
@@ -1143,7 +1143,10 @@
static int
rk_pcie_attach(device_t dev)
-{ struct rk_pcie_softc *sc;
+{
+ struct resource_map_request req;
+ struct resource_map map;
+ struct rk_pcie_softc *sc;
uint32_t val;
int rv, rid, max_speed;
@@ -1192,13 +1195,24 @@
goto out;
}
sc->axi_mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
- RF_ACTIVE);
+ RF_ACTIVE | RF_UNMAPPED);
if (sc->axi_mem_res == NULL) {
device_printf(dev, "Cannot allocate 'axi-base' (rid: %d)\n",
rid);
rv = ENXIO;
goto out;
}
+ resource_init_map_request(&req);
+ req.memattr = VM_MEMATTR_DEVICE_NP;
+ rv = bus_map_resource(dev, SYS_RES_MEMORY, sc->axi_mem_res, &req,
+ &map);
+ if (rv != 0) {
+ device_printf(dev, "Cannot map 'axi-base' (rid: %d)\n",
+ rid);
+ goto out;
+ }
+ rman_set_mapping(sc->axi_mem_res, &map);
+
rv = ofw_bus_find_string_index(sc->node, "reg-names", "apb-base", &rid);
if (rv != 0) {
device_printf(dev, "Cannot get 'apb-base' memory\n");
Index: sys/dev/pci/pci_dw_mv.c
===================================================================
--- sys/dev/pci/pci_dw_mv.c
+++ sys/dev/pci/pci_dw_mv.c
@@ -221,6 +221,8 @@
static int
pci_mv_attach(device_t dev)
{
+ struct resource_map_request req;
+ struct resource_map map;
struct pci_mv_softc *sc;
phandle_t node;
int rv;
@@ -233,13 +235,23 @@
rid = 0;
sc->dw_sc.dbi_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
- RF_ACTIVE);
+ RF_ACTIVE | RF_UNMAPPED);
if (sc->dw_sc.dbi_res == NULL) {
device_printf(dev, "Cannot allocate DBI memory\n");
rv = ENXIO;
goto out;
}
+ resource_init_map_request(&req);
+ req.memattr = VM_MEMATTR_DEVICE_NP;
+ rv = bus_map_resource(dev, SYS_RES_MEMORY, sc->dw_sc.dbi_res, &req,
+ &map);
+ if (rv != 0) {
+ device_printf(dev, "could not map memory.\n");
+ return (rv);
+ }
+ rman_set_mapping(sc->dw_sc.dbi_res, &map);
+
/* PCI interrupt */
rid = 0;
sc->irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
Index: sys/dev/pci/pci_host_generic.c
===================================================================
--- sys/dev/pci/pci_host_generic.c
+++ sys/dev/pci/pci_host_generic.c
@@ -54,6 +54,15 @@
#include "pcib_if.h"
+#if defined(VM_MEMATTR_DEVICE_NP)
+#define PCI_UNMAPPED
+#define PCI_RF_FLAGS RF_UNMAPPED
+#else
+#error
+#define PCI_RF_FLAGS 0
+#endif
+
+
/* Forward prototypes */
static uint32_t generic_pcie_read_config(device_t dev, u_int bus, u_int slot,
@@ -69,6 +78,10 @@
int
pci_host_generic_core_attach(device_t dev)
{
+#ifdef PCI_UNMAPPED
+ struct resource_map_request req;
+ struct resource_map map;
+#endif
struct generic_pcie_core_softc *sc;
uint64_t phys_base;
uint64_t pci_base;
@@ -95,11 +108,22 @@
return (error);
rid = 0;
- sc->res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE);
+ 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 map memory.\n");
+ device_printf(dev, "could not allocate memory.\n");
return (ENXIO);
}
+#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);
+#endif
sc->bst = rman_get_bustag(sc->res);
sc->bsh = rman_get_bushandle(sc->res);

File Metadata

Mime Type
text/plain
Expires
Tue, Jan 27, 9:40 AM (43 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28053874
Default Alt Text
D30079.id103045.diff (5 KB)

Event Timeline