From 6432c52a72cdc58ccdd16b0a045bcf578d889bbe Mon Sep 17 00:00:00 2001 From: Nicolas Boichat Date: Mon, 30 Oct 2017 10:01:26 -0700 Subject: [PATCH] stm32/usb: usb_wake: Update STM32_USB_CNTR with interrupts off STM32_USB_CNTR may be written from both interrupt context, and usb_wake (not necessarily in interrupt context). Let's disable interrupts to make sure the operation is atomic. BRANCH=none BUG=b:35775088 BUG=b:67766202 BUG=b:71688150 TEST=Flash hammer, hammer can wake from USB autosuspend Change-Id: I9c2a3259902ecb759a6d0d89c7746c7aa72ae73d Signed-off-by: Nicolas Boichat Reviewed-on: https://chromium-review.googlesource.com/744282 Reviewed-by: Vincent Palatin --- chip/stm32/usb.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/chip/stm32/usb.c b/chip/stm32/usb.c index c97c68f03c..dfec42b5f8 100644 --- a/chip/stm32/usb.c +++ b/chip/stm32/usb.c @@ -456,8 +456,12 @@ void usb_wake(void) * 2 and 3 ms. */ esof_count = 3; + + /* STM32_USB_CNTR can also be updated from interrupt context. */ + interrupt_disable(); STM32_USB_CNTR |= STM32_USB_CNTR_RESUME | - STM32_USB_CNTR_ESOFM | STM32_USB_CNTR_SOFM; + STM32_USB_CNTR_ESOFM | STM32_USB_CNTR_SOFM; + interrupt_enable(); /* Try side-band wake as well. */ board_usb_wake();