Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F143132587
D30079.id103045.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
D30079.id103045.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D30079: Map arm64 pci config memory as non-posted
Attached
Detach File
Event Timeline
Log In to Comment