diff --git a/arch/arm/src/cxd56xx/cxd56_usbdev.c b/arch/arm/src/cxd56xx/cxd56_usbdev.c index 8a966368ca7..a0e70fdf996 100644 --- a/arch/arm/src/cxd56xx/cxd56_usbdev.c +++ b/arch/arm/src/cxd56xx/cxd56_usbdev.c @@ -1540,6 +1540,10 @@ static int cxd56_epinterrupt(int irq, FAR void *context) uint16_t len; int n; +#ifdef CONFIG_SMP + irqstate_t flags = enter_critical_section(); +#endif + eps = getreg32(CXD56_USB_DEV_EP_INTR); { for (n = 0; n < CXD56_NENDPOINTS; n++) @@ -1813,6 +1817,10 @@ static int cxd56_epinterrupt(int irq, FAR void *context) } } +#ifdef CONFIG_SMP + leave_critical_section(flags); +#endif + return OK; } @@ -2585,6 +2593,10 @@ static int cxd56_epstall(FAR struct usbdev_ep_s *ep, bool resume) uint32_t ctrl; uint32_t addr; +#ifdef CONFIG_SMP + irqstate_t flags = enter_critical_section(); +#endif + addr = USB_ISEPIN(ep->eplog) ? CXD56_USB_IN_EP_CONTROL(privep->epphy) : CXD56_USB_OUT_EP_CONTROL(privep->epphy); @@ -2603,6 +2615,10 @@ static int cxd56_epstall(FAR struct usbdev_ep_s *ep, bool resume) privep->stalled = 1; } +#ifdef CONFIG_SMP + leave_critical_section(flags); +#endif + return OK; }