Skip to content

Commit 12a3670

Browse files
Guangbin Huangdavem330
authored andcommitted
net: hns3: fix tm port shapping of fibre port is incorrect after driver initialization
Currently in driver initialization process, driver will set shapping parameters of tm port to default speed read from firmware. However, the speed of SFP module may not be default speed, so shapping parameters of tm port may be incorrect. To fix this problem, driver sets new shapping parameters for tm port after getting exact speed of SFP module in this case. Fixes: 88d10bd ("net: hns3: add support for multiple media type") Signed-off-by: Guangbin Huang <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 71b215f commit 12a3670

File tree

3 files changed

+10
-4
lines changed

3 files changed

+10
-4
lines changed

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3268,7 +3268,7 @@ static int hclge_tp_port_init(struct hclge_dev *hdev)
32683268
static int hclge_update_port_info(struct hclge_dev *hdev)
32693269
{
32703270
struct hclge_mac *mac = &hdev->hw.mac;
3271-
int speed = HCLGE_MAC_SPEED_UNKNOWN;
3271+
int speed;
32723272
int ret;
32733273

32743274
/* get the port info from SFP cmd if not copper port */
@@ -3279,10 +3279,13 @@ static int hclge_update_port_info(struct hclge_dev *hdev)
32793279
if (!hdev->support_sfp_query)
32803280
return 0;
32813281

3282-
if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2)
3282+
if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2) {
3283+
speed = mac->speed;
32833284
ret = hclge_get_sfp_info(hdev, mac);
3284-
else
3285+
} else {
3286+
speed = HCLGE_MAC_SPEED_UNKNOWN;
32853287
ret = hclge_get_sfp_speed(hdev, &speed);
3288+
}
32863289

32873290
if (ret == -EOPNOTSUPP) {
32883291
hdev->support_sfp_query = false;
@@ -3294,6 +3297,8 @@ static int hclge_update_port_info(struct hclge_dev *hdev)
32943297
if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2) {
32953298
if (mac->speed_type == QUERY_ACTIVE_SPEED) {
32963299
hclge_update_port_capability(hdev, mac);
3300+
if (mac->speed != speed)
3301+
(void)hclge_tm_port_shaper_cfg(hdev);
32973302
return 0;
32983303
}
32993304
return hclge_cfg_mac_speed_dup(hdev, mac->speed,

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ static int hclge_tm_pg_shapping_cfg(struct hclge_dev *hdev,
420420
return hclge_cmd_send(&hdev->hw, &desc, 1);
421421
}
422422

423-
static int hclge_tm_port_shaper_cfg(struct hclge_dev *hdev)
423+
int hclge_tm_port_shaper_cfg(struct hclge_dev *hdev)
424424
{
425425
struct hclge_port_shapping_cmd *shap_cfg_cmd;
426426
struct hclge_shaper_ir_para ir_para;

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,7 @@ int hclge_pause_addr_cfg(struct hclge_dev *hdev, const u8 *mac_addr);
237237
void hclge_pfc_rx_stats_get(struct hclge_dev *hdev, u64 *stats);
238238
void hclge_pfc_tx_stats_get(struct hclge_dev *hdev, u64 *stats);
239239
int hclge_tm_qs_shaper_cfg(struct hclge_vport *vport, int max_tx_rate);
240+
int hclge_tm_port_shaper_cfg(struct hclge_dev *hdev);
240241
int hclge_tm_get_qset_num(struct hclge_dev *hdev, u16 *qset_num);
241242
int hclge_tm_get_pri_num(struct hclge_dev *hdev, u8 *pri_num);
242243
int hclge_tm_get_qset_map_pri(struct hclge_dev *hdev, u16 qset_id, u8 *priority,

0 commit comments

Comments
 (0)