aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/bhnd/bhndb/bhndb.c9
-rw-r--r--sys/mips/broadcom/bhnd_nexus.c5
2 files changed, 11 insertions, 3 deletions
diff --git a/sys/dev/bhnd/bhndb/bhndb.c b/sys/dev/bhnd/bhndb/bhndb.c
index c477193a4d46..af9ed008615e 100644
--- a/sys/dev/bhnd/bhndb/bhndb.c
+++ b/sys/dev/bhnd/bhndb/bhndb.c
@@ -2128,7 +2128,14 @@ bhndb_get_dma_translation(device_t dev, device_t child, u_int width,
if (sc->bus_res->res->dma_tags == NULL)
return (ENODEV);
- /* Find the best matching descriptor for the requested type */
+ /* Is the requested width supported? */
+ if (width > BHND_DMA_ADDR_32BIT) {
+ /* Backplane must support 64-bit addressing */
+ if (!(sc->chipid.chip_caps & BHND_CAP_BP64))
+ width = BHND_DMA_ADDR_32BIT;
+ }
+
+ /* Find the best matching descriptor for the requested width */
addr_mask = BHND_DMA_ADDR_BITMASK(width);
match = NULL;
diff --git a/sys/mips/broadcom/bhnd_nexus.c b/sys/mips/broadcom/bhnd_nexus.c
index 97ca497e9c9c..b3888c48e39f 100644
--- a/sys/mips/broadcom/bhnd_nexus.c
+++ b/sys/mips/broadcom/bhnd_nexus.c
@@ -234,10 +234,11 @@ bhnd_nexus_get_dma_translation(device_t dev, device_t child,
KASSERT(width > 0 && width <= BHND_DMA_ADDR_64BIT,
("invalid width %u", width));
+ /* Is the requested width supported? */
if (width > BHND_DMA_ADDR_32BIT) {
/* Backplane must support 64-bit addressing */
- if (!(bp->cc_caps & CHIPC_CAP_BKPLN64))
- return (ENOENT);
+ if (!(bp->cid.chip_caps & BHND_CAP_BP64))
+ width = BHND_DMA_ADDR_32BIT;
}
/* No DMA address translation required */