Improve attachment of the ehci_mv driver
Driver was modified to ensure it attaches properly to "marvell,orion-ehci" node, which doesn't have error interrupt line defined. Neccessary ofw_compat_data struct was added and probe procedure was altered. Reviewed by: andrew, ian Obtained from: Semihalf Sponsored by: Stormshield Submitted by: Bartosz Szczepanek <bsz@semihalf.com> Differential revision: https://reviews.freebsd.org/D4369
This commit is contained in:
parent
223e0cfd9a
commit
5c8fae4064
@ -99,6 +99,12 @@ static void *ih_err;
|
||||
#define MV_USB_HOST_OVERFLOW (1 << 2)
|
||||
#define MV_USB_DEVICE_UNDERFLOW (1 << 3)
|
||||
|
||||
static struct ofw_compat_data compat_data[] = {
|
||||
{"mrvl,usb-ehci", true},
|
||||
{"marvell,orion-ehci", true},
|
||||
{NULL, false}
|
||||
};
|
||||
|
||||
static int
|
||||
mv_ehci_probe(device_t self)
|
||||
{
|
||||
@ -106,7 +112,7 @@ mv_ehci_probe(device_t self)
|
||||
if (!ofw_bus_status_okay(self))
|
||||
return (ENXIO);
|
||||
|
||||
if (!ofw_bus_is_compatible(self, "mrvl,usb-ehci"))
|
||||
if (!ofw_bus_search_compatible(self, compat_data)->ocd_data)
|
||||
return (ENXIO);
|
||||
|
||||
device_set_desc(self, EHCI_HC_DEVSTR);
|
||||
@ -156,12 +162,15 @@ mv_ehci_attach(device_t self)
|
||||
device_get_name(self));
|
||||
|
||||
rid = 0;
|
||||
irq_err = bus_alloc_resource_any(self, SYS_RES_IRQ, &rid,
|
||||
RF_SHAREABLE | RF_ACTIVE);
|
||||
if (irq_err == NULL) {
|
||||
device_printf(self, "Could not allocate error irq\n");
|
||||
mv_ehci_detach(self);
|
||||
return (ENXIO);
|
||||
if (!ofw_bus_is_compatible(self, "marvell,orion-ehci")) {
|
||||
irq_err = bus_alloc_resource_any(self, SYS_RES_IRQ, &rid,
|
||||
RF_SHAREABLE | RF_ACTIVE);
|
||||
if (irq_err == NULL) {
|
||||
device_printf(self, "Could not allocate error irq\n");
|
||||
mv_ehci_detach(self);
|
||||
return (ENXIO);
|
||||
}
|
||||
rid = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -169,7 +178,6 @@ mv_ehci_attach(device_t self)
|
||||
* sure to use the correct rid for the main one (controller interrupt)
|
||||
* -- refer to DTS for the right resource number to use here.
|
||||
*/
|
||||
rid = 1;
|
||||
sc->sc_irq_res = bus_alloc_resource_any(self, SYS_RES_IRQ, &rid,
|
||||
RF_SHAREABLE | RF_ACTIVE);
|
||||
if (sc->sc_irq_res == NULL) {
|
||||
@ -187,12 +195,14 @@ mv_ehci_attach(device_t self)
|
||||
|
||||
sprintf(sc->sc_vendor, "Marvell");
|
||||
|
||||
err = bus_setup_intr(self, irq_err, INTR_TYPE_BIO,
|
||||
err_intr, NULL, sc, &ih_err);
|
||||
if (err) {
|
||||
device_printf(self, "Could not setup error irq, %d\n", err);
|
||||
ih_err = NULL;
|
||||
goto error;
|
||||
if (!ofw_bus_is_compatible(self, "marvell,orion-ehci")) {
|
||||
err = bus_setup_intr(self, irq_err, INTR_TYPE_BIO,
|
||||
err_intr, NULL, sc, &ih_err);
|
||||
if (err) {
|
||||
device_printf(self, "Could not setup error irq, %d\n", err);
|
||||
ih_err = NULL;
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
|
||||
EWRITE4(sc, USB_BRIDGE_INTR_MASK, MV_USB_ADDR_DECODE_ERR |
|
||||
|
Loading…
x
Reference in New Issue
Block a user