|
@@ -949,6 +949,15 @@ static int isr_setup_status_phase(struct ci_hdrc *ci)
|
|
int retval;
|
|
int retval;
|
|
struct ci_hw_ep *hwep;
|
|
struct ci_hw_ep *hwep;
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Unexpected USB controller behavior, caused by bad signal integrity
|
|
|
|
+ * or ground reference problems, can lead to isr_setup_status_phase
|
|
|
|
+ * being called with ci->status equal to NULL.
|
|
|
|
+ * If this situation occurs, you should review your USB hardware design.
|
|
|
|
+ */
|
|
|
|
+ if (WARN_ON_ONCE(!ci->status))
|
|
|
|
+ return -EPIPE;
|
|
|
|
+
|
|
hwep = (ci->ep0_dir == TX) ? ci->ep0out : ci->ep0in;
|
|
hwep = (ci->ep0_dir == TX) ? ci->ep0out : ci->ep0in;
|
|
ci->status->context = ci;
|
|
ci->status->context = ci;
|
|
ci->status->complete = isr_setup_status_complete;
|
|
ci->status->complete = isr_setup_status_complete;
|