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 <drinkcat@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/744282
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
This commit is contained in:
Nicolas Boichat
2017-10-30 10:01:26 -07:00
committed by chrome-bot
parent 7b5b83055c
commit 6432c52a72

View File

@@ -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();