Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 52b9e6eb authored by Felipe Balbi's avatar Felipe Balbi
Browse files

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: default avatarBin Liu <b-liu@ti.com>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent b2c7361b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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)) {
+0 −22
Original line number Diff line number Diff line
@@ -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);