usb: xhci-mtk: rebuild the way to get bandwidth domain
Rebuild the function get_bw_index(), get the bandwidth domain directly instead its index of domain array. Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com> Link: https://lore.kernel.org/r/de618970301702c57bd352bf87df48bc17c699dd.1615170625.git.chunfeng.yun@mediatek.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
11fdcc3937
commit
bf7da03ae4
|
@ -57,7 +57,7 @@ static u32 get_bw_boundary(enum usb_device_speed speed)
|
|||
}
|
||||
|
||||
/*
|
||||
* get the index of bandwidth domains array which @ep belongs to.
|
||||
* get the bandwidth domain which @ep belongs to.
|
||||
*
|
||||
* the bandwidth domain array is saved to @sch_array of struct xhci_hcd_mtk,
|
||||
* each HS root port is treated as a single bandwidth domain,
|
||||
|
@ -68,9 +68,11 @@ static u32 get_bw_boundary(enum usb_device_speed speed)
|
|||
* so the bandwidth domain array is organized as follow for simplification:
|
||||
* SSport0-OUT, SSport0-IN, ..., SSportX-OUT, SSportX-IN, HSport0, ..., HSportY
|
||||
*/
|
||||
static int get_bw_index(struct xhci_hcd *xhci, struct usb_device *udev,
|
||||
struct usb_host_endpoint *ep)
|
||||
static struct mu3h_sch_bw_info *
|
||||
get_bw_info(struct xhci_hcd_mtk *mtk, struct usb_device *udev,
|
||||
struct usb_host_endpoint *ep)
|
||||
{
|
||||
struct xhci_hcd *xhci = hcd_to_xhci(mtk->hcd);
|
||||
struct xhci_virt_device *virt_dev;
|
||||
int bw_index;
|
||||
|
||||
|
@ -86,7 +88,7 @@ static int get_bw_index(struct xhci_hcd *xhci, struct usb_device *udev,
|
|||
bw_index = virt_dev->real_port + xhci->usb3_rhub.num_ports - 1;
|
||||
}
|
||||
|
||||
return bw_index;
|
||||
return &mtk->sch_array[bw_index];
|
||||
}
|
||||
|
||||
static u32 get_esit(struct xhci_ep_ctx *ep_ctx)
|
||||
|
@ -722,14 +724,11 @@ void xhci_mtk_drop_ep_quirk(struct usb_hcd *hcd, struct usb_device *udev,
|
|||
struct xhci_hcd_mtk *mtk = hcd_to_mtk(hcd);
|
||||
struct xhci_hcd *xhci;
|
||||
struct xhci_virt_device *virt_dev;
|
||||
struct mu3h_sch_bw_info *sch_array;
|
||||
struct mu3h_sch_bw_info *sch_bw;
|
||||
struct mu3h_sch_ep_info *sch_ep, *tmp;
|
||||
int bw_index;
|
||||
|
||||
xhci = hcd_to_xhci(hcd);
|
||||
virt_dev = xhci->devs[udev->slot_id];
|
||||
sch_array = mtk->sch_array;
|
||||
|
||||
xhci_dbg(xhci, "%s() type:%d, speed:%d, mpks:%d, dir:%d, ep:%p\n",
|
||||
__func__, usb_endpoint_type(&ep->desc), udev->speed,
|
||||
|
@ -739,8 +738,7 @@ void xhci_mtk_drop_ep_quirk(struct usb_hcd *hcd, struct usb_device *udev,
|
|||
if (!need_bw_sch(ep, udev->speed, !!virt_dev->tt_info))
|
||||
return;
|
||||
|
||||
bw_index = get_bw_index(xhci, udev, ep);
|
||||
sch_bw = &sch_array[bw_index];
|
||||
sch_bw = get_bw_info(mtk, udev, ep);
|
||||
|
||||
list_for_each_entry_safe(sch_ep, tmp, &sch_bw->bw_ep_list, endpoint) {
|
||||
if (sch_ep->ep == ep) {
|
||||
|
@ -758,13 +756,12 @@ int xhci_mtk_check_bandwidth(struct usb_hcd *hcd, struct usb_device *udev)
|
|||
struct xhci_virt_device *virt_dev = xhci->devs[udev->slot_id];
|
||||
struct mu3h_sch_bw_info *sch_bw;
|
||||
struct mu3h_sch_ep_info *sch_ep, *tmp;
|
||||
int bw_index, ret;
|
||||
int ret;
|
||||
|
||||
xhci_dbg(xhci, "%s() udev %s\n", __func__, dev_name(&udev->dev));
|
||||
|
||||
list_for_each_entry(sch_ep, &mtk->bw_ep_chk_list, endpoint) {
|
||||
bw_index = get_bw_index(xhci, udev, sch_ep->ep);
|
||||
sch_bw = &mtk->sch_array[bw_index];
|
||||
sch_bw = get_bw_info(mtk, udev, sch_ep->ep);
|
||||
|
||||
ret = check_sch_bw(sch_bw, sch_ep);
|
||||
if (ret) {
|
||||
|
@ -778,9 +775,7 @@ int xhci_mtk_check_bandwidth(struct usb_hcd *hcd, struct usb_device *udev)
|
|||
struct usb_host_endpoint *ep = sch_ep->ep;
|
||||
unsigned int ep_index = xhci_get_endpoint_index(&ep->desc);
|
||||
|
||||
bw_index = get_bw_index(xhci, udev, ep);
|
||||
sch_bw = &mtk->sch_array[bw_index];
|
||||
|
||||
sch_bw = get_bw_info(mtk, udev, ep);
|
||||
list_move_tail(&sch_ep->endpoint, &sch_bw->bw_ep_list);
|
||||
|
||||
ep_ctx = xhci_get_ep_ctx(xhci, virt_dev->in_ctx, ep_index);
|
||||
|
@ -805,13 +800,11 @@ void xhci_mtk_reset_bandwidth(struct usb_hcd *hcd, struct usb_device *udev)
|
|||
struct xhci_hcd *xhci = hcd_to_xhci(hcd);
|
||||
struct mu3h_sch_bw_info *sch_bw;
|
||||
struct mu3h_sch_ep_info *sch_ep, *tmp;
|
||||
int bw_index;
|
||||
|
||||
xhci_dbg(xhci, "%s() udev %s\n", __func__, dev_name(&udev->dev));
|
||||
|
||||
list_for_each_entry_safe(sch_ep, tmp, &mtk->bw_ep_chk_list, endpoint) {
|
||||
bw_index = get_bw_index(xhci, udev, sch_ep->ep);
|
||||
sch_bw = &mtk->sch_array[bw_index];
|
||||
sch_bw = get_bw_info(mtk, udev, sch_ep->ep);
|
||||
destroy_sch_ep(udev, sch_bw, sch_ep);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue