mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-12 23:54:19 +08:00
net: hns3: add ETS TC weight setting in SSU module
This patch sets the TC weight in SSU module according to info in tm_info. Also, zero weight of TC weight in SSU ETS module means enabling strict priority, so do not allow zero weight when in ETS mode. Signed-off-by: Yunsheng Lin <linyunsheng@huawei.com> Signed-off-by: Peng Li <lipeng321@huawei.com> Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
44e59e375b
commit
330baff542
@ -947,6 +947,36 @@ static int hclge_tm_pri_tc_base_dwrr_cfg(struct hclge_dev *hdev)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int hclge_tm_ets_tc_dwrr_cfg(struct hclge_dev *hdev)
|
||||||
|
{
|
||||||
|
#define DEFAULT_TC_WEIGHT 1
|
||||||
|
#define DEFAULT_TC_OFFSET 14
|
||||||
|
|
||||||
|
struct hclge_ets_tc_weight_cmd *ets_weight;
|
||||||
|
struct hclge_desc desc;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_ETS_TC_WEIGHT, false);
|
||||||
|
ets_weight = (struct hclge_ets_tc_weight_cmd *)desc.data;
|
||||||
|
|
||||||
|
for (i = 0; i < HNAE3_MAX_TC; i++) {
|
||||||
|
struct hclge_pg_info *pg_info;
|
||||||
|
|
||||||
|
ets_weight->tc_weight[i] = DEFAULT_TC_WEIGHT;
|
||||||
|
|
||||||
|
if (!(hdev->hw_tc_map & BIT(i)))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
pg_info =
|
||||||
|
&hdev->tm_info.pg_info[hdev->tm_info.tc_info[i].pgid];
|
||||||
|
ets_weight->tc_weight[i] = pg_info->tc_dwrr[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
ets_weight->weight_offset = DEFAULT_TC_OFFSET;
|
||||||
|
|
||||||
|
return hclge_cmd_send(&hdev->hw, &desc, 1);
|
||||||
|
}
|
||||||
|
|
||||||
static int hclge_tm_pri_vnet_base_dwrr_pri_cfg(struct hclge_vport *vport)
|
static int hclge_tm_pri_vnet_base_dwrr_pri_cfg(struct hclge_vport *vport)
|
||||||
{
|
{
|
||||||
struct hnae3_knic_private_info *kinfo = &vport->nic.kinfo;
|
struct hnae3_knic_private_info *kinfo = &vport->nic.kinfo;
|
||||||
@ -996,6 +1026,19 @@ static int hclge_tm_pri_dwrr_cfg(struct hclge_dev *hdev)
|
|||||||
ret = hclge_tm_pri_tc_base_dwrr_cfg(hdev);
|
ret = hclge_tm_pri_tc_base_dwrr_cfg(hdev);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
if (!hnae3_dev_dcb_supported(hdev))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
ret = hclge_tm_ets_tc_dwrr_cfg(hdev);
|
||||||
|
if (ret == -EOPNOTSUPP) {
|
||||||
|
dev_warn(&hdev->pdev->dev,
|
||||||
|
"fw %08x does't support ets tc weight cmd\n",
|
||||||
|
hdev->fw_version);
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
} else {
|
} else {
|
||||||
ret = hclge_tm_pri_vnet_base_dwrr_cfg(hdev);
|
ret = hclge_tm_pri_vnet_base_dwrr_cfg(hdev);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
Loading…
Reference in New Issue
Block a user