summaryrefslogtreecommitdiffstats
path: root/sys/arm
diff options
context:
space:
mode:
authorian <ian@FreeBSD.org>2015-11-02 22:49:39 +0000
committerian <ian@FreeBSD.org>2015-11-02 22:49:39 +0000
commit4070a7c2a03ef5837cb99a2aa4f6ad9ff332ecfe (patch)
tree3be930e3ae1578d0dbb2994e705742fe28f8b98c /sys/arm
parentac99afcf9666808d9ff0d10f5f7c9ffca374bc97 (diff)
downloadFreeBSD-src-4070a7c2a03ef5837cb99a2aa4f6ad9ff332ecfe.zip
FreeBSD-src-4070a7c2a03ef5837cb99a2aa4f6ad9ff332ecfe.tar.gz
Eliminate the last dregs of the old global arm_root_dma_tag.
In the old days, device drivers passed NULL for the parent tag when creating a new tag, and on arm platforms that resulted in a global tag representing overall platform constraints being substituted in the busdma code. Now all drivers use bus_get_dma_tag() and if there is a need to represent overall platform constraints they will be inherited from a tag supplied by nexus or some bus driver in the hierarchy. The only arm platforms still relying on the old global-tag scheme were some xscale boards with special PCI-bus constraints. This change provides those constraints through a tag supplied by the xscale PCI bus driver, and eliminates the few remaining references to the old global var. Reviewed by: cognet
Diffstat (limited to 'sys/arm')
-rw-r--r--sys/arm/arm/busdma_machdep-v6.c5
-rw-r--r--sys/arm/arm/busdma_machdep.c5
-rw-r--r--sys/arm/include/bus_dma.h2
-rw-r--r--sys/arm/xscale/ixp425/ixp425_pci.c18
4 files changed, 9 insertions, 21 deletions
diff --git a/sys/arm/arm/busdma_machdep-v6.c b/sys/arm/arm/busdma_machdep-v6.c
index d62522e..a755740 100644
--- a/sys/arm/arm/busdma_machdep-v6.c
+++ b/sys/arm/arm/busdma_machdep-v6.c
@@ -473,11 +473,6 @@ bus_dma_tag_create(bus_dma_tag_t parent, bus_size_t alignment,
bus_dma_tag_t newtag;
int error = 0;
-#if 0
- if (!parent)
- parent = arm_root_dma_tag;
-#endif
-
/* Basic sanity checking. */
KASSERT(boundary == 0 || powerof2(boundary),
("dma tag boundary %lu, must be a power of 2", boundary));
diff --git a/sys/arm/arm/busdma_machdep.c b/sys/arm/arm/busdma_machdep.c
index d2f517a..f7e0e26 100644
--- a/sys/arm/arm/busdma_machdep.c
+++ b/sys/arm/arm/busdma_machdep.c
@@ -224,9 +224,6 @@ static void free_bounce_page(bus_dma_tag_t dmat, struct bounce_page *bpage);
static void bus_dmamap_sync_sl(struct sync_list *sl, bus_dmasync_op_t op,
int bufaligned);
-/* Default tag, as most drivers provide no parent tag. */
-bus_dma_tag_t arm_root_dma_tag;
-
/*
* ----------------------------------------------------------------------------
* Begin block of code useful to transplant to other implementations.
@@ -406,8 +403,6 @@ bus_dma_tag_create(bus_dma_tag_t parent, bus_size_t alignment,
int error = 0;
/* Return a NULL tag on failure */
*dmat = NULL;
- if (!parent)
- parent = arm_root_dma_tag;
newtag = (bus_dma_tag_t)malloc(sizeof(*newtag), M_BUSDMA, M_NOWAIT);
if (newtag == NULL) {
diff --git a/sys/arm/include/bus_dma.h b/sys/arm/include/bus_dma.h
index 98803ef..ddf5504 100644
--- a/sys/arm/include/bus_dma.h
+++ b/sys/arm/include/bus_dma.h
@@ -94,8 +94,6 @@ struct arm32_dma_range {
struct arm32_dma_range *bus_dma_get_range(void);
int bus_dma_get_range_nb(void);
-extern bus_dma_tag_t arm_root_dma_tag;
-
#endif /* _ARM32_BUS_DMA_PRIVATE */
#endif /* _ARM_BUS_DMA_H */
diff --git a/sys/arm/xscale/ixp425/ixp425_pci.c b/sys/arm/xscale/ixp425/ixp425_pci.c
index 5a13218..9bda385 100644
--- a/sys/arm/xscale/ixp425/ixp425_pci.c
+++ b/sys/arm/xscale/ixp425/ixp425_pci.c
@@ -136,14 +136,6 @@ ixppcib_attach(device_t dev)
NULL, NULL, &sc->sc_dmat))
panic("couldn't create the PCI dma tag !");
/*
- * The PCI bus can only address 64MB. However, due to the way our
- * implementation of busdma works, busdma can't tell if a device
- * is a PCI device or not. So defaults to the PCI dma tag, which
- * restrict the DMA'able memory to the first 64MB, and explicitely
- * create less restrictive tags for non-PCI devices.
- */
- arm_root_dma_tag = sc->sc_dmat;
- /*
* Initialize the bus space tags.
*/
ixp425_io_bs_init(&sc->sc_pci_iot, sc);
@@ -361,6 +353,14 @@ ixppcib_release_resource(device_t bus, device_t child, int type, int rid,
return (ENXIO);
}
+static bus_dma_tag_t
+ixppcib_get_dma_tag(device_t bus, device_t child)
+{
+ struct ixppcib_softc *sc = device_get_softc(bus);
+
+ return (sc->sc_dmat);
+}
+
static void
ixppcib_conf_setup(struct ixppcib_softc *sc, int bus, int slot, int func,
int reg)
@@ -459,7 +459,7 @@ static device_method_t ixppcib_methods[] = {
DEVMETHOD(bus_activate_resource, ixppcib_activate_resource),
DEVMETHOD(bus_deactivate_resource, ixppcib_deactivate_resource),
DEVMETHOD(bus_release_resource, ixppcib_release_resource),
- /* DEVMETHOD(bus_get_dma_tag, ixppcib_get_dma_tag), */
+ DEVMETHOD(bus_get_dma_tag, ixppcib_get_dma_tag),
/* pcib interface */
DEVMETHOD(pcib_maxslots, ixppcib_maxslots),
OpenPOWER on IntegriCloud