mirror of https://gitee.com/openkylin/linux.git
usb: musb: dsps: remove babble check from dsps irq handler
musb->int_usb already contains the correct information for musb-core to handle babble. In fact, this very check was just causing a nonsensical babble interrupt storm. With this I can get test.sh to run and, even though all tests fail with timeout, that's still better than locking up the system due to IRQ storm. Also, if I remove g_zero and load g_mass_storage, then everything works fine again. Tested-by: Bin Liu <b-liu@ti.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
parent
b2c7361bd0
commit
52b9e6eb07
|
@ -879,7 +879,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
|
|||
* the session.
|
||||
*/
|
||||
if (power & MUSB_POWER_HSMODE) {
|
||||
ERR("Stopping host session -- babble\n");
|
||||
dev_err(musb->controller, "Babble\n");
|
||||
musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
|
||||
|
||||
if (is_host_active(musb)) {
|
||||
|
|
|
@ -330,28 +330,6 @@ static irqreturn_t dsps_interrupt(int irq, void *hci)
|
|||
|
||||
dev_dbg(musb->controller, "usbintr (%x) epintr(%x)\n",
|
||||
usbintr, epintr);
|
||||
/*
|
||||
* DRVVBUS IRQs are the only proxy we have (a very poor one!) for
|
||||
* DSPS IP's missing ID change IRQ. We need an ID change IRQ to
|
||||
* switch appropriately between halves of the OTG state machine.
|
||||
* Managing DEVCTL.SESSION per Mentor docs requires that we know its
|
||||
* value but DEVCTL.BDEVICE is invalid without DEVCTL.SESSION set.
|
||||
* Also, DRVVBUS pulses for SRP (but not at 5V) ...
|
||||
*/
|
||||
if (is_host_active(musb) && usbintr & MUSB_INTR_BABBLE) {
|
||||
pr_info("CAUTION: musb: Babble Interrupt Occurred\n");
|
||||
|
||||
/*
|
||||
* When a babble condition occurs, the musb controller removes
|
||||
* the session and is no longer in host mode. Hence, all
|
||||
* devices connected to its root hub get disconnected.
|
||||
*
|
||||
* Hand this error down to the musb core isr, so it can
|
||||
* recover.
|
||||
*/
|
||||
musb->int_usb = MUSB_INTR_BABBLE | MUSB_INTR_DISCONNECT;
|
||||
musb->int_tx = musb->int_rx = 0;
|
||||
}
|
||||
|
||||
if (usbintr & ((1 << wrp->drvvbus) << wrp->usb_shift)) {
|
||||
int drvvbus = dsps_readl(reg_base, wrp->status);
|
||||
|
|
Loading…
Reference in New Issue