mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 09:19:51 +00:00
usb: xhci-mtk: update fs bus bandwidth by bw_budget_table
Use @bw_budget_table[] to update fs bus bandwidth due to not all microframes consume @bw_cost_per_microframe, see setup_sch_info(). Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com> Link: https://lore.kernel.org/r/1629189389-18779-6-git-send-email-chunfeng.yun@mediatek.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
de5107f473
commit
451d391258
1 changed files with 7 additions and 10 deletions
|
@ -458,8 +458,8 @@ static int check_fs_bus_bw(struct mu3h_sch_ep_info *sch_ep, int offset)
|
||||||
* Compared with hs bus, no matter what ep type,
|
* Compared with hs bus, no matter what ep type,
|
||||||
* the hub will always delay one uframe to send data
|
* the hub will always delay one uframe to send data
|
||||||
*/
|
*/
|
||||||
for (j = 0; j < sch_ep->cs_count; j++) {
|
for (j = 0; j < sch_ep->num_budget_microframes; j++) {
|
||||||
tmp = tt->fs_bus_bw[base + j] + sch_ep->bw_cost_per_microframe;
|
tmp = tt->fs_bus_bw[base + j] + sch_ep->bw_budget_table[j];
|
||||||
if (tmp > FS_PAYLOAD_MAX)
|
if (tmp > FS_PAYLOAD_MAX)
|
||||||
return -ESCH_BW_OVERFLOW;
|
return -ESCH_BW_OVERFLOW;
|
||||||
}
|
}
|
||||||
|
@ -534,21 +534,18 @@ static void update_sch_tt(struct mu3h_sch_ep_info *sch_ep, bool used)
|
||||||
{
|
{
|
||||||
struct mu3h_sch_tt *tt = sch_ep->sch_tt;
|
struct mu3h_sch_tt *tt = sch_ep->sch_tt;
|
||||||
u32 base, num_esit;
|
u32 base, num_esit;
|
||||||
int bw_updated;
|
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
num_esit = XHCI_MTK_MAX_ESIT / sch_ep->esit;
|
num_esit = XHCI_MTK_MAX_ESIT / sch_ep->esit;
|
||||||
|
|
||||||
if (used)
|
|
||||||
bw_updated = sch_ep->bw_cost_per_microframe;
|
|
||||||
else
|
|
||||||
bw_updated = -sch_ep->bw_cost_per_microframe;
|
|
||||||
|
|
||||||
for (i = 0; i < num_esit; i++) {
|
for (i = 0; i < num_esit; i++) {
|
||||||
base = sch_ep->offset + i * sch_ep->esit;
|
base = sch_ep->offset + i * sch_ep->esit;
|
||||||
|
|
||||||
for (j = 0; j < sch_ep->cs_count; j++)
|
for (j = 0; j < sch_ep->num_budget_microframes; j++)
|
||||||
tt->fs_bus_bw[base + j] += bw_updated;
|
if (used)
|
||||||
|
tt->fs_bus_bw[base + j] += sch_ep->bw_budget_table[j];
|
||||||
|
else
|
||||||
|
tt->fs_bus_bw[base + j] -= sch_ep->bw_budget_table[j];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (used)
|
if (used)
|
||||||
|
|
Loading…
Reference in a new issue