{
        u32 max_bw = 0;
        u32 bw;
-       int i;
-       int j;
+       int i, j, k;
 
        for (i = 0; i < sch_ep->num_esit; i++) {
                u32 base = offset + i * sch_ep->esit;
 
                for (j = 0; j < sch_ep->num_budget_microframes; j++) {
-                       bw = sch_bw->bus_bw[base + j] +
-                                       sch_ep->bw_budget_table[j];
+                       k = XHCI_MTK_BW_INDEX(base + j);
+                       bw = sch_bw->bus_bw[k] + sch_ep->bw_budget_table[j];
                        if (bw > max_bw)
                                max_bw = bw;
                }
        struct mu3h_sch_ep_info *sch_ep, bool used)
 {
        u32 base;
-       int i;
-       int j;
+       int i, j, k;
 
        for (i = 0; i < sch_ep->num_esit; i++) {
                base = sch_ep->offset + i * sch_ep->esit;
                for (j = 0; j < sch_ep->num_budget_microframes; j++) {
+                       k = XHCI_MTK_BW_INDEX(base + j);
                        if (used)
-                               sch_bw->bus_bw[base + j] +=
-                                       sch_ep->bw_budget_table[j];
+                               sch_bw->bus_bw[k] += sch_ep->bw_budget_table[j];
                        else
-                               sch_bw->bus_bw[base + j] -=
-                                       sch_ep->bw_budget_table[j];
+                               sch_bw->bus_bw[k] -= sch_ep->bw_budget_table[j];
                }
        }
 }
        struct mu3h_sch_tt *tt = sch_ep->sch_tt;
        u32 tmp;
        int base;
-       int i, j;
+       int i, j, k;
 
        for (i = 0; i < sch_ep->num_esit; i++) {
                base = offset + i * sch_ep->esit;
                 * the hub will always delay one uframe to send data
                 */
                for (j = 0; j < sch_ep->num_budget_microframes; j++) {
-                       tmp = tt->fs_bus_bw[base + j] + sch_ep->bw_budget_table[j];
+                       k = XHCI_MTK_BW_INDEX(base + j);
+                       tmp = tt->fs_bus_bw[k] + sch_ep->bw_budget_table[j];
                        if (tmp > FS_PAYLOAD_MAX)
                                return -ESCH_BW_OVERFLOW;
                }
 {
        struct mu3h_sch_tt *tt = sch_ep->sch_tt;
        u32 base;
-       int i, j;
+       int i, j, k;
 
        for (i = 0; i < sch_ep->num_esit; i++) {
                base = sch_ep->offset + i * sch_ep->esit;
 
-               for (j = 0; j < sch_ep->num_budget_microframes; j++)
+               for (j = 0; j < sch_ep->num_budget_microframes; j++) {
+                       k = XHCI_MTK_BW_INDEX(base + j);
                        if (used)
-                               tt->fs_bus_bw[base + j] += sch_ep->bw_budget_table[j];
+                               tt->fs_bus_bw[k] += sch_ep->bw_budget_table[j];
                        else
-                               tt->fs_bus_bw[base + j] -= sch_ep->bw_budget_table[j];
+                               tt->fs_bus_bw[k] -= sch_ep->bw_budget_table[j];
+               }
        }
 
        if (used)
        return 0;
 }
 
-static u32 get_esit_boundary(struct mu3h_sch_ep_info *sch_ep)
-{
-       u32 boundary = sch_ep->esit;
-
-       if (sch_ep->sch_tt) { /* LS/FS with TT */
-               /*
-                * tune for CS, normally esit >= 8 for FS/LS,
-                * not add one for other types to avoid access array
-                * out of boundary
-                */
-               if (sch_ep->ep_type == ISOC_OUT_EP && boundary > 1)
-                       boundary--;
-       }
-
-       return boundary;
-}
-
 static int check_sch_bw(struct mu3h_sch_ep_info *sch_ep)
 {
        struct mu3h_sch_bw_info *sch_bw = sch_ep->bw_info;
-       const u32 esit_boundary = get_esit_boundary(sch_ep);
        const u32 bw_boundary = get_bw_boundary(sch_ep->speed);
        u32 offset;
        u32 worst_bw;
         * and find a microframe where its worst bandwidth is minimum.
         */
        for (offset = 0; offset < sch_ep->esit; offset++) {
-
-               if ((offset + sch_ep->num_budget_microframes) > esit_boundary)
-                       break;
-
                ret = check_sch_tt(sch_ep, offset);
                if (ret)
                        continue;