From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sergei Shtylyov Subject: Re: [PATCH 4/4] usb: atmel_usba_udc: mask status with enabled irqs Date: Mon, 15 Dec 2014 16:32:10 +0300 Message-ID: <548EE2DA.6050408@cogentembedded.com> References: <1418648588-17872-1-git-send-email-boris.brezillon@free-electrons.com> <1418648588-17872-5-git-send-email-boris.brezillon@free-electrons.com> Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1418648588-17872-5-git-send-email-boris.brezillon-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org> Sender: linux-usb-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: Boris Brezillon , Felipe Balbi , Greg Kroah-Hartman , linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Nicolas Ferre , Jean-Christophe Plagniol-Villard , Alexandre Belloni , Andrew Victor Cc: Rob Herring , Pawel Moll , Mark Rutland , Ian Campbell , Kumar Gala , devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-Id: devicetree@vger.kernel.org Hello. On 12/15/2014 4:03 PM, Boris Brezillon wrote: > Avoid interpreting useless status flags when we're not waiting for such > events by masking the status variable with the interrupt enabled register > value. > Reported-by: Patrice VILCHEZ > Signed-off-by: Boris Brezillon > --- > drivers/usb/gadget/udc/atmel_usba_udc.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > diff --git a/drivers/usb/gadget/udc/atmel_usba_udc.c b/drivers/usb/gadget/udc/atmel_usba_udc.c > index 55c8dde..bc3a532 100644 > --- a/drivers/usb/gadget/udc/atmel_usba_udc.c > +++ b/drivers/usb/gadget/udc/atmel_usba_udc.c > @@ -1612,12 +1612,14 @@ static irqreturn_t usba_udc_irq(int irq, void *devid) > > spin_lock(&udc->lock); > > - status = usba_readl(udc, INT_STA); > + status = usba_readl(udc, INT_STA) & usba_readl(udc, INT_ENB); > DBG(DBG_INT, "irq, status=%#08x\n", status); > > if (status & USBA_DET_SUSPEND) { > toggle_bias(udc, 0); > usba_writel(udc, INT_CLR, USBA_DET_SUSPEND); > + usba_writel(udc, INT_ENB, > + usba_readl(udc, INT_ENB) | USBA_WAKE_UP); > udc->bias_pulse_needed = true; > DBG(DBG_BUS, "Suspend detected\n"); > if (udc->gadget.speed != USB_SPEED_UNKNOWN > @@ -1631,6 +1633,8 @@ static irqreturn_t usba_udc_irq(int irq, void *devid) > if (status & USBA_WAKE_UP) { > toggle_bias(udc, 1); > usba_writel(udc, INT_CLR, USBA_WAKE_UP); > + usba_writel(udc, INT_ENB, > + usba_readl(udc, INT_ENB) & ~USBA_WAKE_UP); > DBG(DBG_BUS, "Wake Up CPU detected\n"); > } Looks like t make sense to read the INT_ENB register into a separate variable, to save on extra reads? WBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html