Because pipe buffer allocation is very picky and difficult,
current renesas_usbhs driver is not caring pipe re-allocation.
In this situation, driver will create new pipe without caring old pipe
if "usbhsg_ep_enable" is called after "usbhsg_ep_disable" on current driver.
This mean the limited pipe and buffer will be used as waste.
But it is possible to re-use same buffer to same pipe.
By this patch, driver will initialize pipe when it detected new connection or
new gadget, and doesn't try re-allocation for same pipe in above case.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
usbhsg_queue_pop(uep, ureq, -ECONNRESET);
}
- uep->pipe->mod_private = NULL;
- uep->pipe = NULL;
-
return 0;
}
+static void usbhsg_uep_init(struct usbhsg_gpriv *gpriv)
+{
+ int i;
+ struct usbhsg_uep *uep;
+
+ usbhsg_for_each_uep_with_dcp(uep, gpriv, i)
+ uep->pipe = NULL;
+}
+
/*
*
* usb_ep_ops
unsigned long flags;
int ret = -EIO;
+ /*
+ * if it already have pipe,
+ * nothing to do
+ */
+ if (uep->pipe)
+ return 0;
+
/******************** spin lock ********************/
spin_lock_irqsave(lock, flags);
* pipe initialize and enable DCP
*/
usbhs_pipe_init(priv);
+ usbhsg_uep_init(gpriv);
usbhsg_dcp_enable(dcp);
/*