Page MenuHomeFreeBSD

D11202.id29627.diff
No OneTemporary

D11202.id29627.diff

Index: sys/dev/fdt/simplebus.h
===================================================================
--- sys/dev/fdt/simplebus.h
+++ sys/dev/fdt/simplebus.h
@@ -49,6 +49,8 @@
int nranges;
pcell_t acells, scells;
+
+ bus_dma_tag_t dmat;
};
struct simplebus_devinfo {
Index: sys/dev/fdt/simplebus.c
===================================================================
--- sys/dev/fdt/simplebus.c
+++ sys/dev/fdt/simplebus.c
@@ -34,6 +34,7 @@
#include <sys/kernel.h>
#include <sys/rman.h>
+#include <machine/bus.h>
#include <dev/ofw/openfirm.h>
#include <dev/ofw/ofw_bus.h>
#include <dev/ofw/ofw_bus_subr.h>
@@ -65,6 +66,7 @@
static int simplebus_fill_ranges(phandle_t node,
struct simplebus_softc *sc);
+static bus_dma_tag_t simplebus_get_dma_tag(device_t, device_t);
/*
* Driver methods.
@@ -96,6 +98,8 @@
DEVMETHOD(bus_child_pnpinfo_str, ofw_bus_gen_child_pnpinfo_str),
DEVMETHOD(bus_get_resource_list, simplebus_get_resource_list),
+ DEVMETHOD(bus_get_dma_tag, simplebus_get_dma_tag),
+
/* ofw_bus interface */
DEVMETHOD(ofw_bus_get_devinfo, simplebus_get_devinfo),
DEVMETHOD(ofw_bus_get_compat, ofw_bus_gen_get_compat),
@@ -144,6 +148,7 @@
{
struct simplebus_softc *sc;
phandle_t node;
+ int flags = 0;
sc = device_get_softc(dev);
simplebus_init(dev, 0);
@@ -152,6 +157,22 @@
return (ENXIO);
}
+ if (ofw_bus_has_prop(dev, "dma-coherent"))
+ flags |= BUS_DMA_COHERENT;
+
+ /* Create the parent DMA tag to pass down the coherent flag */
+ bus_dma_tag_create(bus_get_dma_tag(dev), /* parent */
+ 1, 0, /* alignment, bounds */
+ BUS_SPACE_MAXADDR, /* lowaddr */
+ BUS_SPACE_MAXADDR, /* highaddr */
+ NULL, NULL, /* filter, filterarg */
+ BUS_SPACE_MAXSIZE, /* maxsize */
+ BUS_SPACE_UNRESTRICTED, /* nsegments */
+ BUS_SPACE_MAXSIZE, /* maxsegsize */
+ flags, /* flags */
+ NULL, NULL, /* lockfunc, lockarg */
+ &sc->dmat);
+
/*
* In principle, simplebus could have an interrupt map, but ignore that
* for now
@@ -162,6 +183,15 @@
return (bus_generic_attach(dev));
}
+static bus_dma_tag_t
+simplebus_get_dma_tag(device_t dev, device_t child)
+{
+ struct simplebus_softc *sc;
+
+ sc = device_get_softc(dev);
+ return (sc->dmat);
+}
+
void
simplebus_init(device_t dev, phandle_t node)
{

File Metadata

Mime Type
text/plain
Expires
Mon, Feb 9, 11:39 AM (4 h, 19 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28574911
Default Alt Text
D11202.id29627.diff (2 KB)

Event Timeline