X-Git-Url: https://uglyman.kremlin.cc/gitweb/gitweb.cgi?p=bbb-usb.git;a=blobdiff_plain;f=src%2Fsys%2Farch%2Farmv7%2Fomap%2Fammusb.c;h=727312b91eb0f1ba9cc218a3755fa5c58be19eb0;hp=455b2fba94429fad228496c4452195b758af5788;hb=007cf0f6055355fcb2780a7bcb0de352f9839585;hpb=efe0ef7bfeab92bb4b5e6df74cafd09debfb145e diff --git a/src/sys/arch/armv7/omap/ammusb.c b/src/sys/arch/armv7/omap/ammusb.c index 455b2fb..727312b 100644 --- a/src/sys/arch/armv7/omap/ammusb.c +++ b/src/sys/arch/armv7/omap/ammusb.c @@ -28,12 +28,21 @@ #include #include #include +#include + +#include #include #include - #include +#include +#include +#include +#include +#include +#include + #include #include @@ -50,20 +59,34 @@ int ammusb_debug = 20; #define DPRINTF(n,s) do {} #endif -#define HREAD4(sc, reg) \ - (bus_space_read_4((sc)->sc_iot, (sc)->sc_ioh, (reg))) -#define HWRITE4(sc, reg, val) \ - bus_space_write_4((sc)->sc_iot, (sc)->sc_ioh, (reg), (val)) -#define HSET4(sc, reg, bits) \ - HWRITE4((sc), (reg), HREAD4((sc), (reg)) | (bits)) -#define HCLR4(sc, reg, bits) \ - HWRITE4((sc), (reg), HREAD4((sc), (reg)) & ~(bits)) +#define HREAD4(sc, handle, reg) \ + (bus_space_read_4((sc)->sc_iot, (handle), (reg))) +#define HWRITE4(sc, handle, reg, val) \ + bus_space_write_4((sc)->sc_iot, (handle), (reg), (val)) +#define HSET4(sc, handle, reg, bits) \ + HWRITE4((sc), (handle), (reg), HREAD4((sc), (reg)) | (bits)) +#define HCLR4(sc, handle, reg, bits) \ + HWRITE4((sc), (handle), (reg), HREAD4((sc), (reg)) & ~(bits)) + +enum OTG_STATE { + OTG_HOST, + OTG_CLIENT, +}; struct ammusb_softc { struct device sc_dev; bus_space_tag_t sc_iot; - bus_space_handle_t sc_ioh; void *sc_ih; + + bus_space_handle_t sc_ioh_ctl; + bus_size_t sc_ios_ctl; + bus_space_handle_t sc_ioh_core; + bus_size_t sc_ios_core; + bus_space_handle_t sc_ioh_phy; + bus_size_t sc_ios_phy; + + char sc_phys[32]; + enum OTG_STATE sc_otg_state; }; /* core decl */ @@ -90,16 +113,6 @@ int ammusb_match(struct device *parent, void *v, void *aux) { struct fdt_attach_args *faa = aux; -/* int node; - char name[32]; - - if (OF_is_compatible(faa->fa_node, "ti,am33xx-usb")) { - printf("!!HIT!!\n"); - for (node = OF_child(faa->fa_node); node; node = OF_peer(node)) { - - } - }*/ - printf("MAYBE: %d\n", faa->fa_node); return OF_is_compatible(faa->fa_node, "ti,musb-am33xx"); } @@ -109,17 +122,39 @@ ammusb_attach(struct device *parent, struct device *self, void *args) struct ammusb_softc *sc = (struct ammusb_softc *) self; struct fdt_attach_args *faa = args; - uint32_t rev; + uint32_t rev, phy_reg[2]; + int phy_node; + + phy_node = -1; sc->sc_iot = faa->fa_iot; + + /* find our corresponding PHY regs */ + if ((phy_node = OF_getnodebyphandle(0x3c)) == -1) { + printf(": couldn't find PHY\n"); + return; + } + + OF_getpropintarray(phy_node, "reg", phy_reg, sizeof(phy_reg)); + + if (bus_space_map(sc->sc_iot, phy_reg[0], phy_reg[1], 0, + &sc->sc_ioh_phy)) + panic("%s: bus_space_map failed!", __func__); if (bus_space_map(sc->sc_iot, faa->fa_reg[0].addr, faa->fa_reg[0].size, 0, - &sc->sc_ioh)) + &sc->sc_ioh_core)) panic("%s: bus_space_map failed!", __func__); + if (bus_space_map(sc->sc_iot, faa->fa_reg[1].addr, faa->fa_reg[1].size, 0, + &sc->sc_ioh_ctl)) + panic("%s: bus_space_map failed!", __func__); + + /* not the right revision number XXX */ + rev = HREAD4(sc, sc->sc_ioh_ctl, 0x0); + printf(": rev %d.%d\n", rev >> 4 &0xf, rev & 0xf); + + sc->sc_ih = arm_intr_establish_fdt(faa->fa_node, IPL_USB, ehci_intr, + &sc->sc_dev, DEVNAME(sc)); - rev = HREAD4(sc, 0x0); - printf(" rev 0x%08x\n", rev); - printf("%s: phys: 0x%08llx, size: %08llx\n", DEVNAME(sc), faa->fa_reg[0].addr, - faa->fa_reg[0].size); + /* XXX set OTG state here */ } int