Merge branch 'hns3-fixes'
Jijie Shao says: ==================== There are some bugfix for the HNS3 ethernet driver There are some bugfix for the HNS3 ethernet driver ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
19cfdc0d57
@ -388,6 +388,7 @@ struct hnae3_dev_specs {
|
||||
u16 mc_mac_size;
|
||||
u32 mac_stats_num;
|
||||
u8 tnl_num;
|
||||
u8 hilink_version;
|
||||
};
|
||||
|
||||
struct hnae3_client_ops {
|
||||
@ -819,6 +820,7 @@ struct hnae3_tc_info {
|
||||
u8 max_tc; /* Total number of TCs */
|
||||
u8 num_tc; /* Total number of enabled TCs */
|
||||
bool mqprio_active;
|
||||
bool mqprio_destroy;
|
||||
bool dcb_ets_active;
|
||||
};
|
||||
|
||||
|
@ -351,7 +351,7 @@ static int hclge_comm_cmd_csq_done(struct hclge_comm_hw *hw)
|
||||
static u32 hclge_get_cmdq_tx_timeout(u16 opcode, u32 tx_timeout)
|
||||
{
|
||||
static const struct hclge_cmdq_tx_timeout_map cmdq_tx_timeout_map[] = {
|
||||
{HCLGE_OPC_CFG_RST_TRIGGER, HCLGE_COMM_CMDQ_TX_TIMEOUT_500MS},
|
||||
{HCLGE_OPC_CFG_RST_TRIGGER, HCLGE_COMM_CMDQ_CFG_RST_TIMEOUT},
|
||||
};
|
||||
u32 i;
|
||||
|
||||
|
@ -55,7 +55,7 @@
|
||||
#define HCLGE_COMM_NIC_CMQ_DESC_NUM_S 3
|
||||
#define HCLGE_COMM_NIC_CMQ_DESC_NUM 1024
|
||||
#define HCLGE_COMM_CMDQ_TX_TIMEOUT_DEFAULT 30000
|
||||
#define HCLGE_COMM_CMDQ_TX_TIMEOUT_500MS 500000
|
||||
#define HCLGE_COMM_CMDQ_CFG_RST_TIMEOUT 1000000
|
||||
|
||||
enum hclge_opcode_type {
|
||||
/* Generic commands */
|
||||
|
@ -76,7 +76,7 @@ static int hns3_dcbnl_ieee_delapp(struct net_device *ndev, struct dcb_app *app)
|
||||
if (hns3_nic_resetting(ndev))
|
||||
return -EBUSY;
|
||||
|
||||
if (h->kinfo.dcb_ops->ieee_setapp)
|
||||
if (h->kinfo.dcb_ops->ieee_delapp)
|
||||
return h->kinfo.dcb_ops->ieee_delapp(h, app);
|
||||
|
||||
return -EOPNOTSUPP;
|
||||
|
@ -1097,6 +1097,8 @@ hns3_dbg_dev_specs(struct hnae3_handle *h, char *buf, int len, int *pos)
|
||||
*pos += scnprintf(buf + *pos, len - *pos,
|
||||
"TX timeout threshold: %d seconds\n",
|
||||
dev->watchdog_timeo / HZ);
|
||||
*pos += scnprintf(buf + *pos, len - *pos, "Hilink Version: %u\n",
|
||||
dev_specs->hilink_version);
|
||||
}
|
||||
|
||||
static int hns3_dbg_dev_info(struct hnae3_handle *h, char *buf, int len)
|
||||
|
@ -828,7 +828,8 @@ struct hclge_dev_specs_1_cmd {
|
||||
__le16 mc_mac_size;
|
||||
u8 rsv1[6];
|
||||
u8 tnl_num;
|
||||
u8 rsv2[5];
|
||||
u8 hilink_version;
|
||||
u8 rsv2[4];
|
||||
};
|
||||
|
||||
/* mac speed type defined in firmware command */
|
||||
|
@ -619,6 +619,8 @@ static int hclge_setup_tc(struct hnae3_handle *h,
|
||||
return ret;
|
||||
}
|
||||
|
||||
kinfo->tc_info.mqprio_destroy = !tc;
|
||||
|
||||
ret = hclge_notify_down_uinit(hdev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
@ -645,8 +645,12 @@ static int hclge_get_sset_count(struct hnae3_handle *handle, int stringset)
|
||||
handle->flags |= HNAE3_SUPPORT_APP_LOOPBACK;
|
||||
}
|
||||
|
||||
count += 1;
|
||||
handle->flags |= HNAE3_SUPPORT_SERDES_SERIAL_LOOPBACK;
|
||||
if (hdev->ae_dev->dev_specs.hilink_version !=
|
||||
HCLGE_HILINK_H60) {
|
||||
count += 1;
|
||||
handle->flags |= HNAE3_SUPPORT_SERDES_SERIAL_LOOPBACK;
|
||||
}
|
||||
|
||||
count += 1;
|
||||
handle->flags |= HNAE3_SUPPORT_SERDES_PARALLEL_LOOPBACK;
|
||||
count += 1;
|
||||
@ -884,7 +888,7 @@ static const struct hclge_speed_bit_map speed_bit_map[] = {
|
||||
{HCLGE_MAC_SPEED_40G, HCLGE_SUPPORT_40G_BIT},
|
||||
{HCLGE_MAC_SPEED_50G, HCLGE_SUPPORT_50G_BITS},
|
||||
{HCLGE_MAC_SPEED_100G, HCLGE_SUPPORT_100G_BITS},
|
||||
{HCLGE_MAC_SPEED_200G, HCLGE_SUPPORT_200G_BIT},
|
||||
{HCLGE_MAC_SPEED_200G, HCLGE_SUPPORT_200G_BITS},
|
||||
};
|
||||
|
||||
static int hclge_get_speed_bit(u32 speed, u32 *speed_bit)
|
||||
@ -940,7 +944,7 @@ static void hclge_update_fec_support(struct hclge_mac *mac)
|
||||
mac->supported);
|
||||
}
|
||||
|
||||
static const struct hclge_link_mode_bmap hclge_sr_link_mode_bmap[8] = {
|
||||
static const struct hclge_link_mode_bmap hclge_sr_link_mode_bmap[] = {
|
||||
{HCLGE_SUPPORT_10G_BIT, ETHTOOL_LINK_MODE_10000baseSR_Full_BIT},
|
||||
{HCLGE_SUPPORT_25G_BIT, ETHTOOL_LINK_MODE_25000baseSR_Full_BIT},
|
||||
{HCLGE_SUPPORT_40G_BIT, ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT},
|
||||
@ -948,10 +952,12 @@ static const struct hclge_link_mode_bmap hclge_sr_link_mode_bmap[8] = {
|
||||
{HCLGE_SUPPORT_50G_R1_BIT, ETHTOOL_LINK_MODE_50000baseSR_Full_BIT},
|
||||
{HCLGE_SUPPORT_100G_R4_BIT, ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT},
|
||||
{HCLGE_SUPPORT_100G_R2_BIT, ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT},
|
||||
{HCLGE_SUPPORT_200G_BIT, ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT},
|
||||
{HCLGE_SUPPORT_200G_R4_EXT_BIT,
|
||||
ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT},
|
||||
{HCLGE_SUPPORT_200G_R4_BIT, ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT},
|
||||
};
|
||||
|
||||
static const struct hclge_link_mode_bmap hclge_lr_link_mode_bmap[6] = {
|
||||
static const struct hclge_link_mode_bmap hclge_lr_link_mode_bmap[] = {
|
||||
{HCLGE_SUPPORT_10G_BIT, ETHTOOL_LINK_MODE_10000baseLR_Full_BIT},
|
||||
{HCLGE_SUPPORT_40G_BIT, ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT},
|
||||
{HCLGE_SUPPORT_50G_R1_BIT, ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT},
|
||||
@ -959,11 +965,13 @@ static const struct hclge_link_mode_bmap hclge_lr_link_mode_bmap[6] = {
|
||||
ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT},
|
||||
{HCLGE_SUPPORT_100G_R2_BIT,
|
||||
ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT},
|
||||
{HCLGE_SUPPORT_200G_BIT,
|
||||
{HCLGE_SUPPORT_200G_R4_EXT_BIT,
|
||||
ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT},
|
||||
{HCLGE_SUPPORT_200G_R4_BIT,
|
||||
ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT},
|
||||
};
|
||||
|
||||
static const struct hclge_link_mode_bmap hclge_cr_link_mode_bmap[8] = {
|
||||
static const struct hclge_link_mode_bmap hclge_cr_link_mode_bmap[] = {
|
||||
{HCLGE_SUPPORT_10G_BIT, ETHTOOL_LINK_MODE_10000baseCR_Full_BIT},
|
||||
{HCLGE_SUPPORT_25G_BIT, ETHTOOL_LINK_MODE_25000baseCR_Full_BIT},
|
||||
{HCLGE_SUPPORT_40G_BIT, ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT},
|
||||
@ -971,10 +979,12 @@ static const struct hclge_link_mode_bmap hclge_cr_link_mode_bmap[8] = {
|
||||
{HCLGE_SUPPORT_50G_R1_BIT, ETHTOOL_LINK_MODE_50000baseCR_Full_BIT},
|
||||
{HCLGE_SUPPORT_100G_R4_BIT, ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT},
|
||||
{HCLGE_SUPPORT_100G_R2_BIT, ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT},
|
||||
{HCLGE_SUPPORT_200G_BIT, ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT},
|
||||
{HCLGE_SUPPORT_200G_R4_EXT_BIT,
|
||||
ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT},
|
||||
{HCLGE_SUPPORT_200G_R4_BIT, ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT},
|
||||
};
|
||||
|
||||
static const struct hclge_link_mode_bmap hclge_kr_link_mode_bmap[9] = {
|
||||
static const struct hclge_link_mode_bmap hclge_kr_link_mode_bmap[] = {
|
||||
{HCLGE_SUPPORT_1G_BIT, ETHTOOL_LINK_MODE_1000baseKX_Full_BIT},
|
||||
{HCLGE_SUPPORT_10G_BIT, ETHTOOL_LINK_MODE_10000baseKR_Full_BIT},
|
||||
{HCLGE_SUPPORT_25G_BIT, ETHTOOL_LINK_MODE_25000baseKR_Full_BIT},
|
||||
@ -983,7 +993,9 @@ static const struct hclge_link_mode_bmap hclge_kr_link_mode_bmap[9] = {
|
||||
{HCLGE_SUPPORT_50G_R1_BIT, ETHTOOL_LINK_MODE_50000baseKR_Full_BIT},
|
||||
{HCLGE_SUPPORT_100G_R4_BIT, ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT},
|
||||
{HCLGE_SUPPORT_100G_R2_BIT, ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT},
|
||||
{HCLGE_SUPPORT_200G_BIT, ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT},
|
||||
{HCLGE_SUPPORT_200G_R4_EXT_BIT,
|
||||
ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT},
|
||||
{HCLGE_SUPPORT_200G_R4_BIT, ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT},
|
||||
};
|
||||
|
||||
static void hclge_convert_setting_sr(u16 speed_ability,
|
||||
@ -1154,7 +1166,7 @@ static void hclge_parse_link_mode(struct hclge_dev *hdev, u16 speed_ability)
|
||||
|
||||
static u32 hclge_get_max_speed(u16 speed_ability)
|
||||
{
|
||||
if (speed_ability & HCLGE_SUPPORT_200G_BIT)
|
||||
if (speed_ability & HCLGE_SUPPORT_200G_BITS)
|
||||
return HCLGE_MAC_SPEED_200G;
|
||||
|
||||
if (speed_ability & HCLGE_SUPPORT_100G_BITS)
|
||||
@ -1350,6 +1362,7 @@ static void hclge_parse_dev_specs(struct hclge_dev *hdev,
|
||||
ae_dev->dev_specs.umv_size = le16_to_cpu(req1->umv_size);
|
||||
ae_dev->dev_specs.mc_mac_size = le16_to_cpu(req1->mc_mac_size);
|
||||
ae_dev->dev_specs.tnl_num = req1->tnl_num;
|
||||
ae_dev->dev_specs.hilink_version = req1->hilink_version;
|
||||
}
|
||||
|
||||
static void hclge_check_dev_specs(struct hclge_dev *hdev)
|
||||
@ -2890,7 +2903,10 @@ static int hclge_mac_init(struct hclge_dev *hdev)
|
||||
int ret;
|
||||
|
||||
hdev->support_sfp_query = true;
|
||||
hdev->hw.mac.duplex = HCLGE_MAC_FULL;
|
||||
|
||||
if (!test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state))
|
||||
hdev->hw.mac.duplex = HCLGE_MAC_FULL;
|
||||
|
||||
ret = hclge_cfg_mac_speed_dup_hw(hdev, hdev->hw.mac.speed,
|
||||
hdev->hw.mac.duplex, hdev->hw.mac.lane_num);
|
||||
if (ret)
|
||||
@ -12092,6 +12108,8 @@ static int hclge_reset_ae_dev(struct hnae3_ae_dev *ae_dev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
hclge_reset_tc_config(hdev);
|
||||
|
||||
ret = hclge_tm_init_hw(hdev, true);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "tm init hw fail, ret =%d\n", ret);
|
||||
|
@ -191,9 +191,10 @@ enum HLCGE_PORT_TYPE {
|
||||
#define HCLGE_SUPPORT_40G_BIT BIT(5)
|
||||
#define HCLGE_SUPPORT_100M_BIT BIT(6)
|
||||
#define HCLGE_SUPPORT_10M_BIT BIT(7)
|
||||
#define HCLGE_SUPPORT_200G_BIT BIT(8)
|
||||
#define HCLGE_SUPPORT_200G_R4_EXT_BIT BIT(8)
|
||||
#define HCLGE_SUPPORT_50G_R1_BIT BIT(9)
|
||||
#define HCLGE_SUPPORT_100G_R2_BIT BIT(10)
|
||||
#define HCLGE_SUPPORT_200G_R4_BIT BIT(11)
|
||||
|
||||
#define HCLGE_SUPPORT_GE \
|
||||
(HCLGE_SUPPORT_1G_BIT | HCLGE_SUPPORT_100M_BIT | HCLGE_SUPPORT_10M_BIT)
|
||||
@ -201,6 +202,8 @@ enum HLCGE_PORT_TYPE {
|
||||
(HCLGE_SUPPORT_50G_R2_BIT | HCLGE_SUPPORT_50G_R1_BIT)
|
||||
#define HCLGE_SUPPORT_100G_BITS \
|
||||
(HCLGE_SUPPORT_100G_R4_BIT | HCLGE_SUPPORT_100G_R2_BIT)
|
||||
#define HCLGE_SUPPORT_200G_BITS \
|
||||
(HCLGE_SUPPORT_200G_R4_EXT_BIT | HCLGE_SUPPORT_200G_R4_BIT)
|
||||
|
||||
enum HCLGE_DEV_STATE {
|
||||
HCLGE_STATE_REINITING,
|
||||
@ -253,6 +256,12 @@ enum HCLGE_MAC_DUPLEX {
|
||||
HCLGE_MAC_FULL
|
||||
};
|
||||
|
||||
/* hilink version */
|
||||
enum hclge_hilink_version {
|
||||
HCLGE_HILINK_H32 = 0,
|
||||
HCLGE_HILINK_H60 = 1,
|
||||
};
|
||||
|
||||
#define QUERY_SFP_SPEED 0
|
||||
#define QUERY_ACTIVE_SPEED 1
|
||||
|
||||
|
@ -1123,10 +1123,11 @@ void hclge_mbx_handler(struct hclge_dev *hdev)
|
||||
req = (struct hclge_mbx_vf_to_pf_cmd *)desc->data;
|
||||
|
||||
flag = le16_to_cpu(crq->desc[crq->next_to_use].flag);
|
||||
if (unlikely(!hnae3_get_bit(flag, HCLGE_CMDQ_RX_OUTVLD_B))) {
|
||||
if (unlikely(!hnae3_get_bit(flag, HCLGE_CMDQ_RX_OUTVLD_B) ||
|
||||
req->mbx_src_vfid > hdev->num_req_vfs)) {
|
||||
dev_warn(&hdev->pdev->dev,
|
||||
"dropped invalid mailbox message, code = %u\n",
|
||||
req->msg.code);
|
||||
"dropped invalid mailbox message, code = %u, vfid = %u\n",
|
||||
req->msg.code, req->mbx_src_vfid);
|
||||
|
||||
/* dropping/not processing this invalid message */
|
||||
crq->desc[crq->next_to_use].flag = 0;
|
||||
|
@ -108,7 +108,7 @@ void hclge_ptp_get_rx_hwts(struct hnae3_handle *handle, struct sk_buff *skb,
|
||||
u64 ns = nsec;
|
||||
u32 sec_h;
|
||||
|
||||
if (!test_bit(HCLGE_PTP_FLAG_RX_EN, &hdev->ptp->flags))
|
||||
if (!hdev->ptp || !test_bit(HCLGE_PTP_FLAG_RX_EN, &hdev->ptp->flags))
|
||||
return;
|
||||
|
||||
/* Since the BD does not have enough space for the higher 16 bits of
|
||||
|
@ -2143,3 +2143,19 @@ int hclge_tm_flush_cfg(struct hclge_dev *hdev, bool enable)
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void hclge_reset_tc_config(struct hclge_dev *hdev)
|
||||
{
|
||||
struct hclge_vport *vport = &hdev->vport[0];
|
||||
struct hnae3_knic_private_info *kinfo;
|
||||
|
||||
kinfo = &vport->nic.kinfo;
|
||||
|
||||
if (!kinfo->tc_info.mqprio_destroy)
|
||||
return;
|
||||
|
||||
/* clear tc info, including mqprio_destroy and mqprio_active */
|
||||
memset(&kinfo->tc_info, 0, sizeof(kinfo->tc_info));
|
||||
hclge_tm_schd_info_update(hdev, 0);
|
||||
hclge_comm_rss_indir_init_cfg(hdev->ae_dev, &hdev->rss_cfg);
|
||||
}
|
||||
|
@ -277,4 +277,5 @@ int hclge_tm_get_port_shaper(struct hclge_dev *hdev,
|
||||
int hclge_up_to_tc_map(struct hclge_dev *hdev);
|
||||
int hclge_dscp_to_tc_map(struct hclge_dev *hdev);
|
||||
int hclge_tm_flush_cfg(struct hclge_dev *hdev, bool enable);
|
||||
void hclge_reset_tc_config(struct hclge_dev *hdev);
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user