diff --git a/arch/arm64/src/imx9/imx9_usbdev.c b/arch/arm64/src/imx9/imx9_usbdev.c index e641c6e2536..803bb229a00 100644 --- a/arch/arm64/src/imx9/imx9_usbdev.c +++ b/arch/arm64/src/imx9/imx9_usbdev.c @@ -1974,6 +1974,10 @@ static int imx9_usbinterrupt(int irq, void *context, void *arg) usbtrace(TRACE_INTENTRY(IMX9_TRACEINTID_USB), 0); +#ifdef CONFIG_SMP + irqstate_t flags = enter_critical_section(); +#endif + /* Read the interrupts and then clear them */ disr = imx9_getreg(priv, IMX9_USBDEV_USBSTS_OFFSET); @@ -1985,6 +1989,10 @@ static int imx9_usbinterrupt(int irq, void *context, void *arg) imx9_usbreset(priv); +#ifdef CONFIG_SMP + leave_critical_section(flags); +#endif + usbtrace(TRACE_INTEXIT(IMX9_TRACEINTID_USB), 0); return OK; } @@ -2153,6 +2161,10 @@ static int imx9_usbinterrupt(int irq, void *context, void *arg) imx9_putreg(priv, IMX9_USBDEV_ENDPTNAK_OFFSET, pending); } +#ifdef CONFIG_SMP + leave_critical_section(flags); +#endif + usbtrace(TRACE_INTEXIT(IMX9_TRACEINTID_USB), 0); return OK; }