Message ID | 20250610091357.2983085-1-krishna.kurapati@oss.qualcomm.com |
---|---|
Headers | show |
Series | usb: dwc3: Modify role-switching QC drd usb controllers | expand |
On 6/10/2025 2:43 PM, Krishna Kurapati wrote: [...] > > changes in v2: > Rebased on top of usb-next. One correction. The series is based on top of (acked commit): https://lore.kernel.org/all/20250604060019.2174029-1-krishna.kurapati@oss.qualcomm.com/ Sorry for the above mistake. Regards, Krishna. > Removed glue's extcon handling and made use of in-core handling. > > Link to v1: > https://lore.kernel.org/all/20231017131851.8299-1-quic_kriskura@quicinc.com/ > > Krishna Kurapati (4): > usb: dwc3: core: Introduce glue callbacks for flattened > implementations > usb: dwc3: qcom: Implement glue callbacks to facilitate runtime > suspend > usb: dwc3: qcom: Facilitate autosuspend during host mode > usb: dwc3: qcom: Remove extcon functionality from glue > > drivers/usb/dwc3/core.c | 1 + > drivers/usb/dwc3/core.h | 26 +++++ > drivers/usb/dwc3/drd.c | 1 + > drivers/usb/dwc3/dwc3-qcom.c | 219 +++++++++++++++++++---------------- > drivers/usb/dwc3/gadget.c | 1 + > 5 files changed, 150 insertions(+), 98 deletions(-) >
On Tue, Jun 10, 2025 at 10:10:33PM +0530, Krishna Kurapati wrote: > > > On 6/10/2025 4:30 PM, Dmitry Baryshkov wrote: > > On Tue, Jun 10, 2025 at 02:43:56PM +0530, Krishna Kurapati wrote: > > > When in host mode, it is intended that the controller goes to suspend > > > state to save power and wait for interrupts from connected peripheral > > > to wake it up. This is particularly used in cases where a HID or Audio > > > device is connected. In such scenarios, the usb controller can enter > > > auto suspend and resume action after getting interrupts from the > > > connected device. > > > > > > Allow autosuspend for and xhci device and allow userspace to decide > > > whether to enable this functionality. > > > > > > a) Register to usb-core notifications in set_role vendor callback to > > > identify when root hubs are being created. Configure them to > > > use_autosuspend. > > > > > > b) Identify usb core notifications where the HCD is being added and > > > enable autosuspend for that particular xhci device. > > > > > > Signed-off-by: Krishna Kurapati <krishna.kurapati@oss.qualcomm.com> > > > --- > > > drivers/usb/dwc3/dwc3-qcom.c | 62 ++++++++++++++++++++++++++++++++---- > > > 1 file changed, 56 insertions(+), 6 deletions(-) > > > > > > diff --git a/drivers/usb/dwc3/dwc3-qcom.c b/drivers/usb/dwc3/dwc3-qcom.c > > > index d40b52e2ba01..17bbd5a06c08 100644 > > > --- a/drivers/usb/dwc3/dwc3-qcom.c > > > +++ b/drivers/usb/dwc3/dwc3-qcom.c > > > @@ -95,6 +95,8 @@ struct dwc3_qcom { > > > * internally by mutex lock. > > > */ > > > enum usb_role current_role; > > > + > > > + struct notifier_block xhci_nb; > > > }; > > > #define to_dwc3_qcom(d) container_of((d), struct dwc3_qcom, dwc) > > > @@ -647,6 +649,39 @@ static int dwc3_qcom_setup_irq(struct dwc3_qcom *qcom, struct platform_device *p > > > return 0; > > > } > > > +static int dwc3_xhci_event_notifier(struct notifier_block *nb, > > > + unsigned long event, void *ptr) > > > +{ > > > + struct dwc3_qcom *qcom = container_of(nb, struct dwc3_qcom, xhci_nb); > > > + struct dwc3 *dwc = &qcom->dwc; > > > + struct usb_bus *ubus = ptr; > > > + struct usb_hcd *hcd; > > > + > > > + if (!dwc->xhci) > > > + goto done; > > > + > > > + hcd = platform_get_drvdata(dwc->xhci); > > > + if (!hcd) > > > + goto done; > > > + > > > + if (event != USB_BUS_ADD) > > > + goto done; > > > + > > > + if (strcmp(dev_name(ubus->sysdev), dev_name(dwc->sysdev)) != 0) > > > + goto done; > > > + > > > + if (event == USB_BUS_ADD) { > > > + /* > > > + * Identify instant of creation of primary hcd and > > > + * mark xhci as autosuspend capable at this point. > > > + */ > > > + pm_runtime_use_autosuspend(&dwc->xhci->dev); > > > > This feels like an overkill, using notifiers to set autosuspend flag. > > Please extend platform data and/or other static code in order to set the > > flag on the created xHCI devices. > > > > Do you mean modifying pdev of xhci from dwc3/host.c ? Or adding the > use_autosuspend call in xhci-plat.c ? The latter one. > > I thought adding this notifier would be a better way to identify when the > xhci probe is in progress instead of touching pdev of xhci device from dwc3 > layer. > > Regards, > Krishna,