Message ID | 1568207756-22325-2-git-send-email-external.veeraiyan.c@de.adit-jv.com (mailing list archive) |
---|---|
State | Mainlined |
Commit | 8b20d00f0f089b72f0a1e08d602a29f874bb0a35 |
Headers | show |
Series | [v5,1/3] usb: renesas_usbhs: simplify usbhs_status_get_device_state() | expand |
Hi Veeraiyan-san, > From: Veeraiyan Chidambaram, Sent: Wednesday, September 11, 2019 10:16 PM > > From: Eugeniu Rosca <erosca@de.adit-jv.com> > > Commit [1] enabled the possibility of checking the DVST (Device State > Transition) bit of INTSTS0 (Interrupt Status Register 0) and calling > the irq_dev_state() handler if the DVST bit is set. But neither > commit [1] nor commit [2] actually enabled the DVSE (Device State > Transition Interrupt Enable) bit in the INTENB0 (Interrupt Enable > Register 0). As a consequence, irq_dev_state() handler is getting > called as a side effect of other (non-DVSE) interrupts being fired, > which definitely can't be relied upon, if DVST notifications are of > any value. > > Why this doesn't hurt is because usbhsg_irq_dev_state() currently > doesn't do much except of a dev_dbg(). Once more work is added to > the handler (e.g. detecting device "Suspended" state and notifying > other USB gadget components about it), enabling DVSE becomes a hard > requirement. Do it in a standalone commit for better visibility and > clear explanation. > > [1] commit f1407d5c6624 ("usb: renesas_usbhs: Add Renesas USBHS common > code") > [2] commit 2f98382dcdfe ("usb: renesas_usbhs: Add Renesas USBHS Gadget") > > Signed-off-by: Eugeniu Rosca <erosca@de.adit-jv.com> > Signed-off-by: Veeraiyan Chidambaram <veeraiyan.chidambaram@in.bosch.com> > --- > v5: fixed checkpatch warning > v4: https://patchwork.kernel.org/patch/11138201/ Thank you for the patch. So, Reviewed-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> Best regards, Yoshihiro Shimoda
diff --git a/drivers/usb/renesas_usbhs/mod.c b/drivers/usb/renesas_usbhs/mod.c index 4fbb1d538b82..3384308169f5 100644 --- a/drivers/usb/renesas_usbhs/mod.c +++ b/drivers/usb/renesas_usbhs/mod.c @@ -339,10 +339,6 @@ void usbhs_irq_callback_update(struct usbhs_priv *priv, struct usbhs_mod *mod) * usbhs_interrupt */ - /* - * it don't enable DVSE (intenb0) here - * but "mod->irq_dev_state" will be called. - */ if (info->irq_vbus) intenb0 |= VBSE; @@ -353,6 +349,9 @@ void usbhs_irq_callback_update(struct usbhs_priv *priv, struct usbhs_mod *mod) if (mod->irq_ctrl_stage) intenb0 |= CTRE; + if (mod->irq_dev_state) + intenb0 |= DVSE; + if (mod->irq_empty && mod->irq_bempsts) { usbhs_write(priv, BEMPENB, mod->irq_bempsts); intenb0 |= BEMPE;