diff --git a/drivers/usb/dwc3/dwc3-msm.c b/drivers/usb/dwc3/dwc3-msm.c index 6b0f1d0bebc7..c529b73b43f9 100644 --- a/drivers/usb/dwc3/dwc3-msm.c +++ b/drivers/usb/dwc3/dwc3-msm.c @@ -1673,6 +1673,7 @@ static void gsi_set_clear_dbell(struct usb_ep *ep, struct dwc3 *dwc = dep->dwc; struct dwc3_msm *mdwc = dev_get_drvdata(dwc->dev->parent); + dbg_log_string("block_db(%d)", block_db); dwc3_msm_write_reg_field(mdwc->base, GSI_GENERAL_CFG_REG(mdwc->gsi_reg), BLOCK_GSI_WR_GO_MASK, block_db); } @@ -1807,6 +1808,14 @@ int usb_gsi_ep_op(struct usb_ep *ep, void *op_data, enum gsi_ep_op op) break; case GSI_EP_OP_SET_CLR_BLOCK_DBL: block_db = *((bool *)op_data); + spin_lock_irqsave(&dwc->lock, flags); + if (!dwc->pullups_connected && !block_db) { + dbg_log_string("No Pullup\n"); + spin_unlock_irqrestore(&dwc->lock, flags); + return -ESHUTDOWN; + } + + spin_unlock_irqrestore(&dwc->lock, flags); gsi_set_clear_dbell(ep, block_db); break; case GSI_EP_OP_CHECK_FOR_SUSPEND: