From 690158b7490ffc8fc49941792d299071a99b283a Mon Sep 17 00:00:00 2001 From: Mikhail Avkhimenia Date: Wed, 25 Mar 2015 18:14:29 +0300 Subject: [PATCH] Guard fiq_fsm_spin_lock with fiq_enable check --- drivers/usb/host/dwc_otg/dwc_otg_hcd.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c index 68534d48656098..6a006c532380c0 100644 --- a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c +++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c @@ -1414,8 +1414,12 @@ static void assign_and_init_hc(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh) dwc_otg_hc_init(hcd->core_if, hc); local_irq_save(flags); - local_fiq_disable(); - fiq_fsm_spin_lock(&hcd->fiq_state->lock); + + if (fiq_enable) { + local_fiq_disable(); + fiq_fsm_spin_lock(&hcd->fiq_state->lock); + } + /* Enable the top level host channel interrupt. */ intr_enable = (1 << hc->hc_num); DWC_MODIFY_REG32(&hcd->core_if->host_if->host_global_regs->haintmsk, 0, intr_enable); @@ -1423,8 +1427,12 @@ static void assign_and_init_hc(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh) /* Make sure host channel interrupts are enabled. */ gintmsk.b.hcintr = 1; DWC_MODIFY_REG32(&hcd->core_if->core_global_regs->gintmsk, 0, gintmsk.d32); - fiq_fsm_spin_unlock(&hcd->fiq_state->lock); - local_fiq_enable(); + + if (fiq_enable) { + fiq_fsm_spin_unlock(&hcd->fiq_state->lock); + local_fiq_enable(); + } + local_irq_restore(flags); hc->qh = qh; }