Hi Marek,

Thank you for the patch.

On dim., juin 09, 2024 at 23:32, Marek Vasut <marek.vasut+rene...@mailbox.org> 
wrote:

> Use the .match_ep() callback instead of workaround in core code.
> Replace descriptor parsing with ch9 macros with the same effect.
> Drop the SPL specific behavior, it is unclear why SPL should even
> be special.

Li, Peng,

Is this good for you as well?

You seem to be the author/committer of:
c93edbf5385e ("usb: gadget: don't change ep name for dwc3 while ep autoconfig")

I'd like to make sure this patch does not break your use-case.
Please let me know within 2 weeks or so, otherwise I'll apply the changes.

>
> Signed-off-by: Marek Vasut <marek.vasut+rene...@mailbox.org>

To me, this looks good.

Reviewed-by: Mattijs Korpershoek <mkorpersh...@baylibre.com>
Tested-by: Mattijs Korpershoek <mkorpersh...@baylibre.com> # on vim3

> ---
> Cc: Alexander Sverdlin <alexander.sverd...@siemens.com>
> Cc: Felipe Balbi <felipe.ba...@linux.intel.com>
> Cc: Lukasz Majewski <lu...@denx.de>
> Cc: Mattijs Korpershoek <mkorpersh...@baylibre.com>
> Cc: Nishanth Menon <n...@ti.com>
> Cc: Simon Glass <s...@chromium.org>
> Cc: Thinh Nguyen <thinh.ngu...@synopsys.com>
> Cc: Tom Rini <tr...@konsulko.com>
> Cc: u-boot@lists.denx.de
> ---
>  drivers/usb/dwc3/gadget.c       | 33 +++++++++++++++++++++++
>  drivers/usb/gadget/epautoconf.c | 46 +--------------------------------
>  2 files changed, 34 insertions(+), 45 deletions(-)
>
> diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
> index fab32575647..3ef2f016a60 100644
> --- a/drivers/usb/dwc3/gadget.c
> +++ b/drivers/usb/dwc3/gadget.c
> @@ -1606,6 +1606,38 @@ static int dwc3_gadget_stop(struct usb_gadget *g)
>       return 0;
>  }
>  
> +static struct usb_ep *dwc3_find_ep(struct usb_gadget *gadget, const char 
> *name)
> +{
> +     struct usb_ep *ep;
> +
> +     list_for_each_entry(ep, &gadget->ep_list, ep_list)
> +             if (!strcmp(ep->name, name))
> +                     return ep;
> +
> +     return NULL;
> +}
> +
> +static struct
> +usb_ep *dwc3_gadget_match_ep(struct usb_gadget *gadget,
> +                          struct usb_endpoint_descriptor *desc,
> +                          struct usb_ss_ep_comp_descriptor *comp_desc)
> +{
> +     /*
> +      * First try standard, common configuration: ep1in-bulk,
> +      * ep2out-bulk, ep3in-int to match other udc drivers to avoid
> +      * confusion in already deployed software (endpoint numbers
> +      * hardcoded in userspace software/drivers)
> +      */
> +     if (usb_endpoint_is_bulk_in(desc))
> +             return dwc3_find_ep(gadget, "ep1in");
> +     if (usb_endpoint_is_bulk_out(desc))
> +             return dwc3_find_ep(gadget, "ep2out");
> +     if (usb_endpoint_is_int_in(desc))
> +             return dwc3_find_ep(gadget, "ep3in");
> +
> +     return NULL;
> +}
> +
>  static const struct usb_gadget_ops dwc3_gadget_ops = {
>       .get_frame              = dwc3_gadget_get_frame,
>       .wakeup                 = dwc3_gadget_wakeup,
> @@ -1613,6 +1645,7 @@ static const struct usb_gadget_ops dwc3_gadget_ops = {
>       .pullup                 = dwc3_gadget_pullup,
>       .udc_start              = dwc3_gadget_start,
>       .udc_stop               = dwc3_gadget_stop,
> +     .match_ep               = dwc3_gadget_match_ep,
>  };
>  
>  /* 
> -------------------------------------------------------------------------- */
> diff --git a/drivers/usb/gadget/epautoconf.c b/drivers/usb/gadget/epautoconf.c
> index 66599ce8efa..a4da4f72de9 100644
> --- a/drivers/usb/gadget/epautoconf.c
> +++ b/drivers/usb/gadget/epautoconf.c
> @@ -166,18 +166,6 @@ static int ep_matches(
>       return 1;
>  }
>  
> -static struct usb_ep *
> -find_ep(struct usb_gadget *gadget, const char *name)
> -{
> -     struct usb_ep   *ep;
> -
> -     list_for_each_entry(ep, &gadget->ep_list, ep_list) {
> -             if (0 == strcmp(ep->name, name))
> -                     return ep;
> -     }
> -     return NULL;
> -}
> -
>  /**
>   * usb_ep_autoconfig - choose an endpoint matching the descriptor
>   * @gadget: The device to which the endpoint must belong.
> @@ -213,39 +201,7 @@ struct usb_ep *usb_ep_autoconfig(
>       struct usb_endpoint_descriptor  *desc
>  )
>  {
> -     struct usb_ep   *ep = NULL;
> -     u8              type;
> -
> -     type = desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
> -
> -     /* First, apply chip-specific "best usage" knowledge.
> -      * This might make a good usb_gadget_ops hook ...
> -      */
> -     if (!IS_ENABLED(CONFIG_SPL_BUILD) &&
> -         IS_ENABLED(CONFIG_USB_DWC3_GADGET) &&
> -         !strcmp("dwc3-gadget", gadget->name)) {
> -             const char *name = NULL;
> -             /*
> -              * First try standard, common configuration: ep1in-bulk,
> -              * ep2out-bulk, ep3in-int to match other udc drivers to avoid
> -              * confusion in already deployed software (endpoint numbers
> -              * hardcoded in userspace software/drivers)
> -              */
> -             if ((desc->bEndpointAddress & USB_DIR_IN) &&
> -                 type == USB_ENDPOINT_XFER_BULK)
> -                     name = "ep1in";
> -             else if ((desc->bEndpointAddress & USB_DIR_IN) == 0 &&
> -                      type == USB_ENDPOINT_XFER_BULK)
> -                     name = "ep2out";
> -             else if ((desc->bEndpointAddress & USB_DIR_IN) &&
> -                      type == USB_ENDPOINT_XFER_INT)
> -                     name = "ep3in";
> -
> -             if (name)
> -                     ep = find_ep(gadget, name);
> -             if (ep && ep_matches(gadget, ep, desc))
> -                     return ep;
> -     }
> +     struct usb_ep *ep;
>  
>       if (gadget->ops->match_ep) {
>               ep = gadget->ops->match_ep(gadget, desc, NULL);
> -- 
> 2.43.0

Reply via email to