projects
/
bbb-usb.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
cb17423
)
map DMA & queue controllers into amusbss' space and write _detach
author
kremlin
<ian@kremlin.cc>
Sun, 12 Feb 2017 02:56:35 +0000
(20:56 -0600)
committer
kremlin
<ian@kremlin.cc>
Sun, 12 Feb 2017 02:56:35 +0000
(20:56 -0600)
src/sys/arch/armv7/omap/amusbss.c
patch
|
blob
|
blame
|
history
diff --git
a/src/sys/arch/armv7/omap/amusbss.c
b/src/sys/arch/armv7/omap/amusbss.c
index d18796710edd9e213a71fdf992acdb2c1c1562ce..67fade6ee6d8dc064a1cca2fb70416f2e32ac64b 100644
(file)
--- a/
src/sys/arch/armv7/omap/amusbss.c
+++ b/
src/sys/arch/armv7/omap/amusbss.c
@@
-87,19
+87,26
@@
int amusbss_debug = 20;
struct amusbss_softc {
struct device sc_dev;
bus_space_tag_t sc_iot;
struct amusbss_softc {
struct device sc_dev;
bus_space_tag_t sc_iot;
+ void *sc_ih;
+ bus_dma_tag_t sc_dmat;
bus_space_handle_t sc_ioh;
bus_space_handle_t sc_ioh;
+ bus_size_t sc_ios;
+ bus_space_handle_t sc_ioh_dma_ctl;
+ bus_size_t sc_ios_dma_ctl;
+ bus_space_handle_t sc_ioh_dma_sched;
+ bus_size_t sc_ios_dma_sched;
+ bus_space_handle_t sc_ioh_queue;
+ bus_size_t sc_ios_queue;
};
};
-/* Needed in attaching ammusb devices via config_search(9) */
-extern struct cfattach ammusb_ca;
-//extern void simplebus_attach_node(struct device *, int);
-
/* core decl */
int amusbss_match(struct device *, void *, void *);
void amusbss_attach(struct device *, struct device *, void *);
int amusbss_detach(struct device *, int);
void amusbss_reset(struct amusbss_softc *);
/* core decl */
int amusbss_match(struct device *, void *, void *);
void amusbss_attach(struct device *, struct device *, void *);
int amusbss_detach(struct device *, int);
void amusbss_reset(struct amusbss_softc *);
+void amusbss_map_dma(int);
+
/* debug decl */
void amusbss_preg(uint32_t, char *, struct amusbss_softc *);
void amusbss_dumpregs(struct amusbss_softc *);
/* debug decl */
void amusbss_preg(uint32_t, char *, struct amusbss_softc *);
void amusbss_dumpregs(struct amusbss_softc *);
@@
-133,6
+140,8
@@
amusbss_attach(struct device *parent, struct device *self, void *args)
&sc->sc_ioh))
panic("%s: bus_space_map failed!", __func__);
&sc->sc_ioh))
panic("%s: bus_space_map failed!", __func__);
+ sc->sc_ios = faa->fa_reg[0].size;
+
/* Enable device clocks */
prcm_enablemodule(PRCM_USB);
/* Enable device clocks */
prcm_enablemodule(PRCM_USB);
@@
-151,14
+160,35
@@
amusbss_attach(struct device *parent, struct device *self, void *args)
rev = HREAD4(sc, USBSS_REVREG);
printf(": rev %d.%d\n", rev >> 4 &0xf, rev & 0xf);
rev = HREAD4(sc, USBSS_REVREG);
printf(": rev %d.%d\n", rev >> 4 &0xf, rev & 0xf);
- /* Walk the OFW tree and attach top-level devices */
- for (node = OF_child(faa->fa_node); node > 0; node = OF_peer(node))
- simplebus_attach_node(parent, node);
+ /* Walk FDT child nodes to attach ammusb devices, map DMA controllers */
+ for (node = OF_child(faa->fa_node); node > 0; node = OF_peer(node)) {
+ if (OF_is_compatible(node, "ti,am3359-cppi41")) {
+ amusbss_map_dma(node);
+ } else {
+ simplebus_attach_node(parent, node);
+ }
+ }
}
int
amusbss_detach(struct device *self, int flags)
{
}
int
amusbss_detach(struct device *self, int flags)
{
- return 0; /* XXX */
+ struct amusbss_softc *sc = (struct amusbss_softc *) self;
+
+ bus_space_unmap(sc->sc_iot, sc->sc_ioh, sc->sc_ios);
+
+ if (sc->sc_ioh_dma_ctl)
+ bus_space_unmap(sc->sc_iot, sc->sc_ioh_dma_ctl, sc->sc_ios_dma_ctl);
+ if (sc->sc_ioh_dma_sched)
+ bus_space_unmap(sc->sc_iot, sc->sc_ioh_dma_sched, sc->sc_ios_dma_sched);
+ if (sc->sc_ioh_queue)
+ bus_space_unmap(sc->sc_iot, sc->sc_ioh_queue, sc->sc_ios_queue);
+
+ return 0;
}
}
+void
+amusbss_map_dma(int node)
+{
+ /* XXX TODO */
+}