summaryrefslogtreecommitdiff
path: root/firmware/target/arm
diff options
context:
space:
mode:
authorTobias Diedrich <ranma+coreboot@tdiedrich.de>2010-06-01 19:29:01 +0000
committerTobias Diedrich <ranma+coreboot@tdiedrich.de>2010-06-01 19:29:01 +0000
commit253cfbcd47adfe3d7ccbd6f1646b1486397682df (patch)
tree3caac18832bc2b1f296afdd6b0b02c92facf4e4a /firmware/target/arm
parent47cd8786ba46a0d0d1c0f931363ca36181e8547e (diff)
downloadrockbox-253cfbcd47adfe3d7ccbd6f1646b1486397682df.tar.gz
rockbox-253cfbcd47adfe3d7ccbd6f1646b1486397682df.zip
Prevent a race condition when writing VIC_INT_EN_CLEAR. Should be very difficult to hit in this case though...
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26451 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm')
-rw-r--r--firmware/target/arm/as3525/usb-drv-as3525.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/firmware/target/arm/as3525/usb-drv-as3525.c b/firmware/target/arm/as3525/usb-drv-as3525.c
index ca1d8cbb07..f50713efbb 100644
--- a/firmware/target/arm/as3525/usb-drv-as3525.c
+++ b/firmware/target/arm/as3525/usb-drv-as3525.c
@@ -544,6 +544,14 @@ void usb_drv_init(void)
544void usb_drv_exit(void) 544void usb_drv_exit(void)
545{ 545{
546 USB_DEV_CTRL |= (1<<10); /* soft disconnect */ 546 USB_DEV_CTRL |= (1<<10); /* soft disconnect */
547 /*
548 * mask all interrupts _before_ writing to VIC_INT_EN_CLEAR,
549 * or else the core might latch the interrupt while
550 * the write ot VIC_INT_EN_CLEAR is in the pipeline and
551 * so cause a fake spurious interrupt.
552 */
553 USB_DEV_EP_INTR_MASK = 0xffffffff;
554 USB_DEV_INTR_MASK = 0xffffffff;
547 VIC_INT_EN_CLEAR = INTERRUPT_USB; 555 VIC_INT_EN_CLEAR = INTERRUPT_USB;
548 CGU_USB &= ~(1<<5); 556 CGU_USB &= ~(1<<5);
549 CGU_PERI &= ~CGU_USB_CLOCK_ENABLE; 557 CGU_PERI &= ~CGU_USB_CLOCK_ENABLE;