Message ID | 7ECE325975663D2D+20250104155111.100597-1-wangyuli@uniontech.com |
---|---|
State | Superseded |
Headers | show |
Series | [v2] usb: host: xhci-plat: Assign shared_hcd->rsrc_start | expand |
On Sat, Jan 04, 2025 at 11:51:11PM +0800, WangYuli wrote: > When inserting a USB device, examining hcd->rsrc_start can be > helpful in identifying which hcd is mounted, as the physical > address represented here is typically unique. > > The following code snippet demonstrates this: > struct usb_hcd *hcd = bus_to_hcd(udev->bus); > unsigned long long usb_hcd_addr = (unsigned long long)hcd->rsrc_start; > > However, this approach has limitations now. For USB hosts with an > MMIO interface, the effectiveness of this method is restricted to > USB 2.0. > > Becase commit 3429e91a661e ("usb: host: xhci: add platform driver > support") assigned res->start to hcd->rsrc_start. But > shared_hcd->rsrc_start remains unassigned, which is also necessary > in certain scenarios. > > Co-developed-by: Xu Rao <raoxu@uniontech.com> > Signed-off-by: Xu Rao <raoxu@uniontech.com> > Signed-off-by: WangYuli <wangyuli@uniontech.com> > -- > Changlog: > v1 -> v2: Move code changes for commit e0fe986972f5 ("usb: host: > xhci-plat: prepare operation w/o shared hcd"). > --- What commit id does this fix? thanks, greg k-h
On 2025/1/7 18:36, Greg KH wrote: > What commit id does this fix? Hi Greg, I'm not sure if this can be considered a bugfix for a specific commit. Please see the commit message for more details. If it is, then it does fix 3429e91a661e1 ("usb: host: xhci: add platform driver support"). > thanks, > > greg k-h >
On 4.1.2025 17.51, WangYuli wrote: > When inserting a USB device, examining hcd->rsrc_start can be > helpful in identifying which hcd is mounted, as the physical > address represented here is typically unique. > > The following code snippet demonstrates this: > struct usb_hcd *hcd = bus_to_hcd(udev->bus); > unsigned long long usb_hcd_addr = (unsigned long long)hcd->rsrc_start; > > However, this approach has limitations now. For USB hosts with an > MMIO interface, the effectiveness of this method is restricted to > USB 2.0. > > Becase commit 3429e91a661e ("usb: host: xhci: add platform driver > support") assigned res->start to hcd->rsrc_start. But > shared_hcd->rsrc_start remains unassigned, which is also necessary > in certain scenarios. Could you expand on those scenarios? Is it possible those could be solved with something like: unsigned long long usb_hcd_addr; struct usb_hcd *hcd = bus_to_hcd(udev->bus); if (!usb_hcd_is_primary_hcd(hcd)) hcd = hcd->primary_hcd; usb_hcd_addr = (unsigned long long)hcd->rsrc_start; That should work for all hcds. Thanks Mathias
diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c index e6c9006bd568..457e839b9b53 100644 --- a/drivers/usb/host/xhci-plat.c +++ b/drivers/usb/host/xhci-plat.c @@ -329,6 +329,8 @@ int xhci_plat_probe(struct platform_device *pdev, struct device *sysdev, const s usb3_hcd->can_do_streams = 1; if (xhci->shared_hcd) { + xhci->shared_hcd->rsrc_start = hcd->rsrc_start; + xhci->shared_hcd->rsrc_len = hcd->rsrc_len; ret = usb_add_hcd(xhci->shared_hcd, irq, IRQF_SHARED); if (ret) goto put_usb3_hcd;