mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 02:53:36 +02:00
usb: dwc3: gadget: Refactor loop to avoid NULL endpoints
Prepare the gadget driver to handle the reserved endpoints that will be not allocated at the initialisation time. While at it, add a warning where the NULL endpoint should never happen. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Tested-by: Ferry Toth <fntoth@gmail.com> Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com> Link: https://lore.kernel.org/r/20250212193116.2487289-3-andriy.shevchenko@linux.intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
8bc8a32a28
commit
eafba02054
|
|
@ -547,6 +547,7 @@ static int dwc3_gadget_set_xfer_resource(struct dwc3_ep *dep)
|
|||
int dwc3_gadget_start_config(struct dwc3 *dwc, unsigned int resource_index)
|
||||
{
|
||||
struct dwc3_gadget_ep_cmd_params params;
|
||||
struct dwc3_ep *dep;
|
||||
u32 cmd;
|
||||
int i;
|
||||
int ret;
|
||||
|
|
@ -563,8 +564,13 @@ int dwc3_gadget_start_config(struct dwc3 *dwc, unsigned int resource_index)
|
|||
return ret;
|
||||
|
||||
/* Reset resource allocation flags */
|
||||
for (i = resource_index; i < dwc->num_eps && dwc->eps[i]; i++)
|
||||
dwc->eps[i]->flags &= ~DWC3_EP_RESOURCE_ALLOCATED;
|
||||
for (i = resource_index; i < dwc->num_eps; i++) {
|
||||
dep = dwc->eps[i];
|
||||
if (!dep)
|
||||
continue;
|
||||
|
||||
dep->flags &= ~DWC3_EP_RESOURCE_ALLOCATED;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -751,9 +757,11 @@ void dwc3_gadget_clear_tx_fifos(struct dwc3 *dwc)
|
|||
|
||||
dwc->last_fifo_depth = fifo_depth;
|
||||
/* Clear existing TXFIFO for all IN eps except ep0 */
|
||||
for (num = 3; num < min_t(int, dwc->num_eps, DWC3_ENDPOINTS_NUM);
|
||||
num += 2) {
|
||||
for (num = 3; num < min_t(int, dwc->num_eps, DWC3_ENDPOINTS_NUM); num += 2) {
|
||||
dep = dwc->eps[num];
|
||||
if (!dep)
|
||||
continue;
|
||||
|
||||
/* Don't change TXFRAMNUM on usb31 version */
|
||||
size = DWC3_IP_IS(DWC3) ? 0 :
|
||||
dwc3_readl(dwc->regs, DWC3_GTXFIFOSIZ(num >> 1)) &
|
||||
|
|
@ -3669,6 +3677,8 @@ static bool dwc3_gadget_endpoint_trbs_complete(struct dwc3_ep *dep,
|
|||
|
||||
for (i = 0; i < DWC3_ENDPOINTS_NUM; i++) {
|
||||
dep = dwc->eps[i];
|
||||
if (!dep)
|
||||
continue;
|
||||
|
||||
if (!(dep->flags & DWC3_EP_ENABLED))
|
||||
continue;
|
||||
|
|
@ -3818,6 +3828,10 @@ static void dwc3_endpoint_interrupt(struct dwc3 *dwc,
|
|||
u8 epnum = event->endpoint_number;
|
||||
|
||||
dep = dwc->eps[epnum];
|
||||
if (!dep) {
|
||||
dev_warn(dwc->dev, "spurious event, endpoint %u is not allocated\n", epnum);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(dep->flags & DWC3_EP_ENABLED)) {
|
||||
if ((epnum > 1) && !(dep->flags & DWC3_EP_TRANSFER_STARTED))
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user