• Jun Li's avatar
    usb: chipidea: udc: protect usb interrupt enable · 72dc8df7
    Jun Li authored
    We hit the problem with below sequence:
    - ci_udc_vbus_session() update vbus_active flag and ci->driver
    is valid,
    - before calling the ci_hdrc_gadget_connect(),
    usb_gadget_udc_stop() is called by application remove gadget
    driver,
    - ci_udc_vbus_session() will contine do ci_hdrc_gadget_connect() as
    gadget_ready is 1, so udc interrupt is enabled, but ci->driver is
    NULL.
    - USB connection irq generated but ci->driver is NULL.
    
    As udc irq only should be enabled when gadget driver is binded, so
    add spinlock to protect the usb irq enable for vbus session handling.
    Signed-off-by: default avatarJun Li <jun.li@nxp.com>
    Signed-off-by: default avatarPeter Chen <peter.chen@nxp.com>
    72dc8df7
udc.c 49.4 KB