1 // SPDX-License-Identifier: GPL-2.0+ 2 // Copyright (c) 2016-2017 Hisilicon Limited. 3 4 #include <linux/acpi.h> 5 #include <linux/device.h> 6 #include <linux/etherdevice.h> 7 #include <linux/init.h> 8 #include <linux/interrupt.h> 9 #include <linux/kernel.h> 10 #include <linux/module.h> 11 #include <linux/netdevice.h> 12 #include <linux/pci.h> 13 #include <linux/platform_device.h> 14 #include <linux/if_vlan.h> 15 #include <linux/crash_dump.h> 16 #include <net/ipv6.h> 17 #include <net/rtnetlink.h> 18 #include "hclge_cmd.h" 19 #include "hclge_dcb.h" 20 #include "hclge_main.h" 21 #include "hclge_mbx.h" 22 #include "hclge_mdio.h" 23 #include "hclge_tm.h" 24 #include "hclge_err.h" 25 #include "hnae3.h" 26 #include "hclge_devlink.h" 27 28 #define HCLGE_NAME "hclge" 29 #define HCLGE_STATS_READ(p, offset) (*(u64 *)((u8 *)(p) + (offset))) 30 #define HCLGE_MAC_STATS_FIELD_OFF(f) (offsetof(struct hclge_mac_stats, f)) 31 32 #define HCLGE_BUF_SIZE_UNIT 256U 33 #define HCLGE_BUF_MUL_BY 2 34 #define HCLGE_BUF_DIV_BY 2 35 #define NEED_RESERVE_TC_NUM 2 36 #define BUF_MAX_PERCENT 100 37 #define BUF_RESERVE_PERCENT 90 38 39 #define HCLGE_RESET_MAX_FAIL_CNT 5 40 #define HCLGE_RESET_SYNC_TIME 100 41 #define HCLGE_PF_RESET_SYNC_TIME 20 42 #define HCLGE_PF_RESET_SYNC_CNT 1500 43 44 /* Get DFX BD number offset */ 45 #define HCLGE_DFX_BIOS_BD_OFFSET 1 46 #define HCLGE_DFX_SSU_0_BD_OFFSET 2 47 #define HCLGE_DFX_SSU_1_BD_OFFSET 3 48 #define HCLGE_DFX_IGU_BD_OFFSET 4 49 #define HCLGE_DFX_RPU_0_BD_OFFSET 5 50 #define HCLGE_DFX_RPU_1_BD_OFFSET 6 51 #define HCLGE_DFX_NCSI_BD_OFFSET 7 52 #define HCLGE_DFX_RTC_BD_OFFSET 8 53 #define HCLGE_DFX_PPP_BD_OFFSET 9 54 #define HCLGE_DFX_RCB_BD_OFFSET 10 55 #define HCLGE_DFX_TQP_BD_OFFSET 11 56 #define HCLGE_DFX_SSU_2_BD_OFFSET 12 57 58 #define HCLGE_LINK_STATUS_MS 10 59 60 static int hclge_set_mac_mtu(struct hclge_dev *hdev, int new_mps); 61 static int hclge_init_vlan_config(struct hclge_dev *hdev); 62 static void hclge_sync_vlan_filter(struct hclge_dev *hdev); 63 static int hclge_reset_ae_dev(struct hnae3_ae_dev *ae_dev); 64 static bool hclge_get_hw_reset_stat(struct hnae3_handle *handle); 65 static void hclge_rfs_filter_expire(struct hclge_dev *hdev); 66 static int hclge_clear_arfs_rules(struct hclge_dev *hdev); 67 static enum hnae3_reset_type hclge_get_reset_level(struct hnae3_ae_dev *ae_dev, 68 unsigned long *addr); 69 static int hclge_set_default_loopback(struct hclge_dev *hdev); 70 71 static void hclge_sync_mac_table(struct hclge_dev *hdev); 72 static void hclge_restore_hw_table(struct hclge_dev *hdev); 73 static void hclge_sync_promisc_mode(struct hclge_dev *hdev); 74 static void hclge_sync_fd_table(struct hclge_dev *hdev); 75 76 static struct hnae3_ae_algo ae_algo; 77 78 static struct workqueue_struct *hclge_wq; 79 80 static const struct pci_device_id ae_algo_pci_tbl[] = { 81 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_GE), 0}, 82 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_25GE), 0}, 83 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_25GE_RDMA), 0}, 84 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_25GE_RDMA_MACSEC), 0}, 85 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_50GE_RDMA), 0}, 86 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_50GE_RDMA_MACSEC), 0}, 87 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_100G_RDMA_MACSEC), 0}, 88 {PCI_VDEVICE(HUAWEI, HNAE3_DEV_ID_200G_RDMA), 0}, 89 /* required last entry */ 90 {0, } 91 }; 92 93 MODULE_DEVICE_TABLE(pci, ae_algo_pci_tbl); 94 95 static const u32 cmdq_reg_addr_list[] = {HCLGE_NIC_CSQ_BASEADDR_L_REG, 96 HCLGE_NIC_CSQ_BASEADDR_H_REG, 97 HCLGE_NIC_CSQ_DEPTH_REG, 98 HCLGE_NIC_CSQ_TAIL_REG, 99 HCLGE_NIC_CSQ_HEAD_REG, 100 HCLGE_NIC_CRQ_BASEADDR_L_REG, 101 HCLGE_NIC_CRQ_BASEADDR_H_REG, 102 HCLGE_NIC_CRQ_DEPTH_REG, 103 HCLGE_NIC_CRQ_TAIL_REG, 104 HCLGE_NIC_CRQ_HEAD_REG, 105 HCLGE_VECTOR0_CMDQ_SRC_REG, 106 HCLGE_CMDQ_INTR_STS_REG, 107 HCLGE_CMDQ_INTR_EN_REG, 108 HCLGE_CMDQ_INTR_GEN_REG}; 109 110 static const u32 common_reg_addr_list[] = {HCLGE_MISC_VECTOR_REG_BASE, 111 HCLGE_PF_OTHER_INT_REG, 112 HCLGE_MISC_RESET_STS_REG, 113 HCLGE_MISC_VECTOR_INT_STS, 114 HCLGE_GLOBAL_RESET_REG, 115 HCLGE_FUN_RST_ING, 116 HCLGE_GRO_EN_REG}; 117 118 static const u32 ring_reg_addr_list[] = {HCLGE_RING_RX_ADDR_L_REG, 119 HCLGE_RING_RX_ADDR_H_REG, 120 HCLGE_RING_RX_BD_NUM_REG, 121 HCLGE_RING_RX_BD_LENGTH_REG, 122 HCLGE_RING_RX_MERGE_EN_REG, 123 HCLGE_RING_RX_TAIL_REG, 124 HCLGE_RING_RX_HEAD_REG, 125 HCLGE_RING_RX_FBD_NUM_REG, 126 HCLGE_RING_RX_OFFSET_REG, 127 HCLGE_RING_RX_FBD_OFFSET_REG, 128 HCLGE_RING_RX_STASH_REG, 129 HCLGE_RING_RX_BD_ERR_REG, 130 HCLGE_RING_TX_ADDR_L_REG, 131 HCLGE_RING_TX_ADDR_H_REG, 132 HCLGE_RING_TX_BD_NUM_REG, 133 HCLGE_RING_TX_PRIORITY_REG, 134 HCLGE_RING_TX_TC_REG, 135 HCLGE_RING_TX_MERGE_EN_REG, 136 HCLGE_RING_TX_TAIL_REG, 137 HCLGE_RING_TX_HEAD_REG, 138 HCLGE_RING_TX_FBD_NUM_REG, 139 HCLGE_RING_TX_OFFSET_REG, 140 HCLGE_RING_TX_EBD_NUM_REG, 141 HCLGE_RING_TX_EBD_OFFSET_REG, 142 HCLGE_RING_TX_BD_ERR_REG, 143 HCLGE_RING_EN_REG}; 144 145 static const u32 tqp_intr_reg_addr_list[] = {HCLGE_TQP_INTR_CTRL_REG, 146 HCLGE_TQP_INTR_GL0_REG, 147 HCLGE_TQP_INTR_GL1_REG, 148 HCLGE_TQP_INTR_GL2_REG, 149 HCLGE_TQP_INTR_RL_REG}; 150 151 static const char hns3_nic_test_strs[][ETH_GSTRING_LEN] = { 152 "App Loopback test", 153 "Serdes serial Loopback test", 154 "Serdes parallel Loopback test", 155 "Phy Loopback test" 156 }; 157 158 static const struct hclge_comm_stats_str g_mac_stats_string[] = { 159 {"mac_tx_mac_pause_num", 160 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_mac_pause_num)}, 161 {"mac_rx_mac_pause_num", 162 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_mac_pause_num)}, 163 {"mac_tx_control_pkt_num", 164 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_ctrl_pkt_num)}, 165 {"mac_rx_control_pkt_num", 166 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_ctrl_pkt_num)}, 167 {"mac_tx_pfc_pkt_num", 168 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pause_pkt_num)}, 169 {"mac_tx_pfc_pri0_pkt_num", 170 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pri0_pkt_num)}, 171 {"mac_tx_pfc_pri1_pkt_num", 172 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pri1_pkt_num)}, 173 {"mac_tx_pfc_pri2_pkt_num", 174 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pri2_pkt_num)}, 175 {"mac_tx_pfc_pri3_pkt_num", 176 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pri3_pkt_num)}, 177 {"mac_tx_pfc_pri4_pkt_num", 178 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pri4_pkt_num)}, 179 {"mac_tx_pfc_pri5_pkt_num", 180 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pri5_pkt_num)}, 181 {"mac_tx_pfc_pri6_pkt_num", 182 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pri6_pkt_num)}, 183 {"mac_tx_pfc_pri7_pkt_num", 184 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_pfc_pri7_pkt_num)}, 185 {"mac_rx_pfc_pkt_num", 186 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pause_pkt_num)}, 187 {"mac_rx_pfc_pri0_pkt_num", 188 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pri0_pkt_num)}, 189 {"mac_rx_pfc_pri1_pkt_num", 190 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pri1_pkt_num)}, 191 {"mac_rx_pfc_pri2_pkt_num", 192 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pri2_pkt_num)}, 193 {"mac_rx_pfc_pri3_pkt_num", 194 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pri3_pkt_num)}, 195 {"mac_rx_pfc_pri4_pkt_num", 196 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pri4_pkt_num)}, 197 {"mac_rx_pfc_pri5_pkt_num", 198 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pri5_pkt_num)}, 199 {"mac_rx_pfc_pri6_pkt_num", 200 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pri6_pkt_num)}, 201 {"mac_rx_pfc_pri7_pkt_num", 202 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_pfc_pri7_pkt_num)}, 203 {"mac_tx_total_pkt_num", 204 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_total_pkt_num)}, 205 {"mac_tx_total_oct_num", 206 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_total_oct_num)}, 207 {"mac_tx_good_pkt_num", 208 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_good_pkt_num)}, 209 {"mac_tx_bad_pkt_num", 210 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_bad_pkt_num)}, 211 {"mac_tx_good_oct_num", 212 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_good_oct_num)}, 213 {"mac_tx_bad_oct_num", 214 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_bad_oct_num)}, 215 {"mac_tx_uni_pkt_num", 216 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_uni_pkt_num)}, 217 {"mac_tx_multi_pkt_num", 218 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_multi_pkt_num)}, 219 {"mac_tx_broad_pkt_num", 220 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_broad_pkt_num)}, 221 {"mac_tx_undersize_pkt_num", 222 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_undersize_pkt_num)}, 223 {"mac_tx_oversize_pkt_num", 224 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_oversize_pkt_num)}, 225 {"mac_tx_64_oct_pkt_num", 226 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_64_oct_pkt_num)}, 227 {"mac_tx_65_127_oct_pkt_num", 228 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_65_127_oct_pkt_num)}, 229 {"mac_tx_128_255_oct_pkt_num", 230 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_128_255_oct_pkt_num)}, 231 {"mac_tx_256_511_oct_pkt_num", 232 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_256_511_oct_pkt_num)}, 233 {"mac_tx_512_1023_oct_pkt_num", 234 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_512_1023_oct_pkt_num)}, 235 {"mac_tx_1024_1518_oct_pkt_num", 236 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_1024_1518_oct_pkt_num)}, 237 {"mac_tx_1519_2047_oct_pkt_num", 238 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_1519_2047_oct_pkt_num)}, 239 {"mac_tx_2048_4095_oct_pkt_num", 240 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_2048_4095_oct_pkt_num)}, 241 {"mac_tx_4096_8191_oct_pkt_num", 242 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_4096_8191_oct_pkt_num)}, 243 {"mac_tx_8192_9216_oct_pkt_num", 244 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_8192_9216_oct_pkt_num)}, 245 {"mac_tx_9217_12287_oct_pkt_num", 246 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_9217_12287_oct_pkt_num)}, 247 {"mac_tx_12288_16383_oct_pkt_num", 248 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_12288_16383_oct_pkt_num)}, 249 {"mac_tx_1519_max_good_pkt_num", 250 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_1519_max_good_oct_pkt_num)}, 251 {"mac_tx_1519_max_bad_pkt_num", 252 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_1519_max_bad_oct_pkt_num)}, 253 {"mac_rx_total_pkt_num", 254 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_total_pkt_num)}, 255 {"mac_rx_total_oct_num", 256 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_total_oct_num)}, 257 {"mac_rx_good_pkt_num", 258 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_good_pkt_num)}, 259 {"mac_rx_bad_pkt_num", 260 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_bad_pkt_num)}, 261 {"mac_rx_good_oct_num", 262 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_good_oct_num)}, 263 {"mac_rx_bad_oct_num", 264 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_bad_oct_num)}, 265 {"mac_rx_uni_pkt_num", 266 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_uni_pkt_num)}, 267 {"mac_rx_multi_pkt_num", 268 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_multi_pkt_num)}, 269 {"mac_rx_broad_pkt_num", 270 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_broad_pkt_num)}, 271 {"mac_rx_undersize_pkt_num", 272 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_undersize_pkt_num)}, 273 {"mac_rx_oversize_pkt_num", 274 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_oversize_pkt_num)}, 275 {"mac_rx_64_oct_pkt_num", 276 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_64_oct_pkt_num)}, 277 {"mac_rx_65_127_oct_pkt_num", 278 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_65_127_oct_pkt_num)}, 279 {"mac_rx_128_255_oct_pkt_num", 280 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_128_255_oct_pkt_num)}, 281 {"mac_rx_256_511_oct_pkt_num", 282 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_256_511_oct_pkt_num)}, 283 {"mac_rx_512_1023_oct_pkt_num", 284 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_512_1023_oct_pkt_num)}, 285 {"mac_rx_1024_1518_oct_pkt_num", 286 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_1024_1518_oct_pkt_num)}, 287 {"mac_rx_1519_2047_oct_pkt_num", 288 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_1519_2047_oct_pkt_num)}, 289 {"mac_rx_2048_4095_oct_pkt_num", 290 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_2048_4095_oct_pkt_num)}, 291 {"mac_rx_4096_8191_oct_pkt_num", 292 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_4096_8191_oct_pkt_num)}, 293 {"mac_rx_8192_9216_oct_pkt_num", 294 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_8192_9216_oct_pkt_num)}, 295 {"mac_rx_9217_12287_oct_pkt_num", 296 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_9217_12287_oct_pkt_num)}, 297 {"mac_rx_12288_16383_oct_pkt_num", 298 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_12288_16383_oct_pkt_num)}, 299 {"mac_rx_1519_max_good_pkt_num", 300 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_1519_max_good_oct_pkt_num)}, 301 {"mac_rx_1519_max_bad_pkt_num", 302 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_1519_max_bad_oct_pkt_num)}, 303 304 {"mac_tx_fragment_pkt_num", 305 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_fragment_pkt_num)}, 306 {"mac_tx_undermin_pkt_num", 307 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_undermin_pkt_num)}, 308 {"mac_tx_jabber_pkt_num", 309 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_jabber_pkt_num)}, 310 {"mac_tx_err_all_pkt_num", 311 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_err_all_pkt_num)}, 312 {"mac_tx_from_app_good_pkt_num", 313 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_from_app_good_pkt_num)}, 314 {"mac_tx_from_app_bad_pkt_num", 315 HCLGE_MAC_STATS_FIELD_OFF(mac_tx_from_app_bad_pkt_num)}, 316 {"mac_rx_fragment_pkt_num", 317 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_fragment_pkt_num)}, 318 {"mac_rx_undermin_pkt_num", 319 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_undermin_pkt_num)}, 320 {"mac_rx_jabber_pkt_num", 321 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_jabber_pkt_num)}, 322 {"mac_rx_fcs_err_pkt_num", 323 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_fcs_err_pkt_num)}, 324 {"mac_rx_send_app_good_pkt_num", 325 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_send_app_good_pkt_num)}, 326 {"mac_rx_send_app_bad_pkt_num", 327 HCLGE_MAC_STATS_FIELD_OFF(mac_rx_send_app_bad_pkt_num)} 328 }; 329 330 static const struct hclge_mac_mgr_tbl_entry_cmd hclge_mgr_table[] = { 331 { 332 .flags = HCLGE_MAC_MGR_MASK_VLAN_B, 333 .ethter_type = cpu_to_le16(ETH_P_LLDP), 334 .mac_addr = {0x01, 0x80, 0xc2, 0x00, 0x00, 0x0e}, 335 .i_port_bitmap = 0x1, 336 }, 337 }; 338 339 static const u8 hclge_hash_key[] = { 340 0x6D, 0x5A, 0x56, 0xDA, 0x25, 0x5B, 0x0E, 0xC2, 341 0x41, 0x67, 0x25, 0x3D, 0x43, 0xA3, 0x8F, 0xB0, 342 0xD0, 0xCA, 0x2B, 0xCB, 0xAE, 0x7B, 0x30, 0xB4, 343 0x77, 0xCB, 0x2D, 0xA3, 0x80, 0x30, 0xF2, 0x0C, 344 0x6A, 0x42, 0xB7, 0x3B, 0xBE, 0xAC, 0x01, 0xFA 345 }; 346 347 static const u32 hclge_dfx_bd_offset_list[] = { 348 HCLGE_DFX_BIOS_BD_OFFSET, 349 HCLGE_DFX_SSU_0_BD_OFFSET, 350 HCLGE_DFX_SSU_1_BD_OFFSET, 351 HCLGE_DFX_IGU_BD_OFFSET, 352 HCLGE_DFX_RPU_0_BD_OFFSET, 353 HCLGE_DFX_RPU_1_BD_OFFSET, 354 HCLGE_DFX_NCSI_BD_OFFSET, 355 HCLGE_DFX_RTC_BD_OFFSET, 356 HCLGE_DFX_PPP_BD_OFFSET, 357 HCLGE_DFX_RCB_BD_OFFSET, 358 HCLGE_DFX_TQP_BD_OFFSET, 359 HCLGE_DFX_SSU_2_BD_OFFSET 360 }; 361 362 static const enum hclge_opcode_type hclge_dfx_reg_opcode_list[] = { 363 HCLGE_OPC_DFX_BIOS_COMMON_REG, 364 HCLGE_OPC_DFX_SSU_REG_0, 365 HCLGE_OPC_DFX_SSU_REG_1, 366 HCLGE_OPC_DFX_IGU_EGU_REG, 367 HCLGE_OPC_DFX_RPU_REG_0, 368 HCLGE_OPC_DFX_RPU_REG_1, 369 HCLGE_OPC_DFX_NCSI_REG, 370 HCLGE_OPC_DFX_RTC_REG, 371 HCLGE_OPC_DFX_PPP_REG, 372 HCLGE_OPC_DFX_RCB_REG, 373 HCLGE_OPC_DFX_TQP_REG, 374 HCLGE_OPC_DFX_SSU_REG_2 375 }; 376 377 static const struct key_info meta_data_key_info[] = { 378 { PACKET_TYPE_ID, 6 }, 379 { IP_FRAGEMENT, 1 }, 380 { ROCE_TYPE, 1 }, 381 { NEXT_KEY, 5 }, 382 { VLAN_NUMBER, 2 }, 383 { SRC_VPORT, 12 }, 384 { DST_VPORT, 12 }, 385 { TUNNEL_PACKET, 1 }, 386 }; 387 388 static const struct key_info tuple_key_info[] = { 389 { OUTER_DST_MAC, 48, KEY_OPT_MAC, -1, -1 }, 390 { OUTER_SRC_MAC, 48, KEY_OPT_MAC, -1, -1 }, 391 { OUTER_VLAN_TAG_FST, 16, KEY_OPT_LE16, -1, -1 }, 392 { OUTER_VLAN_TAG_SEC, 16, KEY_OPT_LE16, -1, -1 }, 393 { OUTER_ETH_TYPE, 16, KEY_OPT_LE16, -1, -1 }, 394 { OUTER_L2_RSV, 16, KEY_OPT_LE16, -1, -1 }, 395 { OUTER_IP_TOS, 8, KEY_OPT_U8, -1, -1 }, 396 { OUTER_IP_PROTO, 8, KEY_OPT_U8, -1, -1 }, 397 { OUTER_SRC_IP, 32, KEY_OPT_IP, -1, -1 }, 398 { OUTER_DST_IP, 32, KEY_OPT_IP, -1, -1 }, 399 { OUTER_L3_RSV, 16, KEY_OPT_LE16, -1, -1 }, 400 { OUTER_SRC_PORT, 16, KEY_OPT_LE16, -1, -1 }, 401 { OUTER_DST_PORT, 16, KEY_OPT_LE16, -1, -1 }, 402 { OUTER_L4_RSV, 32, KEY_OPT_LE32, -1, -1 }, 403 { OUTER_TUN_VNI, 24, KEY_OPT_VNI, -1, -1 }, 404 { OUTER_TUN_FLOW_ID, 8, KEY_OPT_U8, -1, -1 }, 405 { INNER_DST_MAC, 48, KEY_OPT_MAC, 406 offsetof(struct hclge_fd_rule, tuples.dst_mac), 407 offsetof(struct hclge_fd_rule, tuples_mask.dst_mac) }, 408 { INNER_SRC_MAC, 48, KEY_OPT_MAC, 409 offsetof(struct hclge_fd_rule, tuples.src_mac), 410 offsetof(struct hclge_fd_rule, tuples_mask.src_mac) }, 411 { INNER_VLAN_TAG_FST, 16, KEY_OPT_LE16, 412 offsetof(struct hclge_fd_rule, tuples.vlan_tag1), 413 offsetof(struct hclge_fd_rule, tuples_mask.vlan_tag1) }, 414 { INNER_VLAN_TAG_SEC, 16, KEY_OPT_LE16, -1, -1 }, 415 { INNER_ETH_TYPE, 16, KEY_OPT_LE16, 416 offsetof(struct hclge_fd_rule, tuples.ether_proto), 417 offsetof(struct hclge_fd_rule, tuples_mask.ether_proto) }, 418 { INNER_L2_RSV, 16, KEY_OPT_LE16, 419 offsetof(struct hclge_fd_rule, tuples.l2_user_def), 420 offsetof(struct hclge_fd_rule, tuples_mask.l2_user_def) }, 421 { INNER_IP_TOS, 8, KEY_OPT_U8, 422 offsetof(struct hclge_fd_rule, tuples.ip_tos), 423 offsetof(struct hclge_fd_rule, tuples_mask.ip_tos) }, 424 { INNER_IP_PROTO, 8, KEY_OPT_U8, 425 offsetof(struct hclge_fd_rule, tuples.ip_proto), 426 offsetof(struct hclge_fd_rule, tuples_mask.ip_proto) }, 427 { INNER_SRC_IP, 32, KEY_OPT_IP, 428 offsetof(struct hclge_fd_rule, tuples.src_ip), 429 offsetof(struct hclge_fd_rule, tuples_mask.src_ip) }, 430 { INNER_DST_IP, 32, KEY_OPT_IP, 431 offsetof(struct hclge_fd_rule, tuples.dst_ip), 432 offsetof(struct hclge_fd_rule, tuples_mask.dst_ip) }, 433 { INNER_L3_RSV, 16, KEY_OPT_LE16, 434 offsetof(struct hclge_fd_rule, tuples.l3_user_def), 435 offsetof(struct hclge_fd_rule, tuples_mask.l3_user_def) }, 436 { INNER_SRC_PORT, 16, KEY_OPT_LE16, 437 offsetof(struct hclge_fd_rule, tuples.src_port), 438 offsetof(struct hclge_fd_rule, tuples_mask.src_port) }, 439 { INNER_DST_PORT, 16, KEY_OPT_LE16, 440 offsetof(struct hclge_fd_rule, tuples.dst_port), 441 offsetof(struct hclge_fd_rule, tuples_mask.dst_port) }, 442 { INNER_L4_RSV, 32, KEY_OPT_LE32, 443 offsetof(struct hclge_fd_rule, tuples.l4_user_def), 444 offsetof(struct hclge_fd_rule, tuples_mask.l4_user_def) }, 445 }; 446 447 static int hclge_mac_update_stats_defective(struct hclge_dev *hdev) 448 { 449 #define HCLGE_MAC_CMD_NUM 21 450 451 u64 *data = (u64 *)(&hdev->mac_stats); 452 struct hclge_desc desc[HCLGE_MAC_CMD_NUM]; 453 __le64 *desc_data; 454 int i, k, n; 455 int ret; 456 457 hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_STATS_MAC, true); 458 ret = hclge_cmd_send(&hdev->hw, desc, HCLGE_MAC_CMD_NUM); 459 if (ret) { 460 dev_err(&hdev->pdev->dev, 461 "Get MAC pkt stats fail, status = %d.\n", ret); 462 463 return ret; 464 } 465 466 for (i = 0; i < HCLGE_MAC_CMD_NUM; i++) { 467 /* for special opcode 0032, only the first desc has the head */ 468 if (unlikely(i == 0)) { 469 desc_data = (__le64 *)(&desc[i].data[0]); 470 n = HCLGE_RD_FIRST_STATS_NUM; 471 } else { 472 desc_data = (__le64 *)(&desc[i]); 473 n = HCLGE_RD_OTHER_STATS_NUM; 474 } 475 476 for (k = 0; k < n; k++) { 477 *data += le64_to_cpu(*desc_data); 478 data++; 479 desc_data++; 480 } 481 } 482 483 return 0; 484 } 485 486 static int hclge_mac_update_stats_complete(struct hclge_dev *hdev, u32 desc_num) 487 { 488 u64 *data = (u64 *)(&hdev->mac_stats); 489 struct hclge_desc *desc; 490 __le64 *desc_data; 491 u16 i, k, n; 492 int ret; 493 494 /* This may be called inside atomic sections, 495 * so GFP_ATOMIC is more suitalbe here 496 */ 497 desc = kcalloc(desc_num, sizeof(struct hclge_desc), GFP_ATOMIC); 498 if (!desc) 499 return -ENOMEM; 500 501 hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_STATS_MAC_ALL, true); 502 ret = hclge_cmd_send(&hdev->hw, desc, desc_num); 503 if (ret) { 504 kfree(desc); 505 return ret; 506 } 507 508 for (i = 0; i < desc_num; i++) { 509 /* for special opcode 0034, only the first desc has the head */ 510 if (i == 0) { 511 desc_data = (__le64 *)(&desc[i].data[0]); 512 n = HCLGE_RD_FIRST_STATS_NUM; 513 } else { 514 desc_data = (__le64 *)(&desc[i]); 515 n = HCLGE_RD_OTHER_STATS_NUM; 516 } 517 518 for (k = 0; k < n; k++) { 519 *data += le64_to_cpu(*desc_data); 520 data++; 521 desc_data++; 522 } 523 } 524 525 kfree(desc); 526 527 return 0; 528 } 529 530 static int hclge_mac_query_reg_num(struct hclge_dev *hdev, u32 *desc_num) 531 { 532 struct hclge_desc desc; 533 __le32 *desc_data; 534 u32 reg_num; 535 int ret; 536 537 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_MAC_REG_NUM, true); 538 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 539 if (ret) 540 return ret; 541 542 desc_data = (__le32 *)(&desc.data[0]); 543 reg_num = le32_to_cpu(*desc_data); 544 545 *desc_num = 1 + ((reg_num - 3) >> 2) + 546 (u32)(((reg_num - 3) & 0x3) ? 1 : 0); 547 548 return 0; 549 } 550 551 static int hclge_mac_update_stats(struct hclge_dev *hdev) 552 { 553 u32 desc_num; 554 int ret; 555 556 ret = hclge_mac_query_reg_num(hdev, &desc_num); 557 /* The firmware supports the new statistics acquisition method */ 558 if (!ret) 559 ret = hclge_mac_update_stats_complete(hdev, desc_num); 560 else if (ret == -EOPNOTSUPP) 561 ret = hclge_mac_update_stats_defective(hdev); 562 else 563 dev_err(&hdev->pdev->dev, "query mac reg num fail!\n"); 564 565 return ret; 566 } 567 568 static int hclge_tqps_update_stats(struct hnae3_handle *handle) 569 { 570 struct hnae3_knic_private_info *kinfo = &handle->kinfo; 571 struct hclge_vport *vport = hclge_get_vport(handle); 572 struct hclge_dev *hdev = vport->back; 573 struct hnae3_queue *queue; 574 struct hclge_desc desc[1]; 575 struct hclge_tqp *tqp; 576 int ret, i; 577 578 for (i = 0; i < kinfo->num_tqps; i++) { 579 queue = handle->kinfo.tqp[i]; 580 tqp = container_of(queue, struct hclge_tqp, q); 581 /* command : HCLGE_OPC_QUERY_IGU_STAT */ 582 hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_QUERY_RX_STATS, 583 true); 584 585 desc[0].data[0] = cpu_to_le32(tqp->index); 586 ret = hclge_cmd_send(&hdev->hw, desc, 1); 587 if (ret) { 588 dev_err(&hdev->pdev->dev, 589 "Query tqp stat fail, status = %d,queue = %d\n", 590 ret, i); 591 return ret; 592 } 593 tqp->tqp_stats.rcb_rx_ring_pktnum_rcd += 594 le32_to_cpu(desc[0].data[1]); 595 } 596 597 for (i = 0; i < kinfo->num_tqps; i++) { 598 queue = handle->kinfo.tqp[i]; 599 tqp = container_of(queue, struct hclge_tqp, q); 600 /* command : HCLGE_OPC_QUERY_IGU_STAT */ 601 hclge_cmd_setup_basic_desc(&desc[0], 602 HCLGE_OPC_QUERY_TX_STATS, 603 true); 604 605 desc[0].data[0] = cpu_to_le32(tqp->index); 606 ret = hclge_cmd_send(&hdev->hw, desc, 1); 607 if (ret) { 608 dev_err(&hdev->pdev->dev, 609 "Query tqp stat fail, status = %d,queue = %d\n", 610 ret, i); 611 return ret; 612 } 613 tqp->tqp_stats.rcb_tx_ring_pktnum_rcd += 614 le32_to_cpu(desc[0].data[1]); 615 } 616 617 return 0; 618 } 619 620 static u64 *hclge_tqps_get_stats(struct hnae3_handle *handle, u64 *data) 621 { 622 struct hnae3_knic_private_info *kinfo = &handle->kinfo; 623 struct hclge_tqp *tqp; 624 u64 *buff = data; 625 int i; 626 627 for (i = 0; i < kinfo->num_tqps; i++) { 628 tqp = container_of(kinfo->tqp[i], struct hclge_tqp, q); 629 *buff++ = tqp->tqp_stats.rcb_tx_ring_pktnum_rcd; 630 } 631 632 for (i = 0; i < kinfo->num_tqps; i++) { 633 tqp = container_of(kinfo->tqp[i], struct hclge_tqp, q); 634 *buff++ = tqp->tqp_stats.rcb_rx_ring_pktnum_rcd; 635 } 636 637 return buff; 638 } 639 640 static int hclge_tqps_get_sset_count(struct hnae3_handle *handle, int stringset) 641 { 642 struct hnae3_knic_private_info *kinfo = &handle->kinfo; 643 644 /* each tqp has TX & RX two queues */ 645 return kinfo->num_tqps * (2); 646 } 647 648 static u8 *hclge_tqps_get_strings(struct hnae3_handle *handle, u8 *data) 649 { 650 struct hnae3_knic_private_info *kinfo = &handle->kinfo; 651 u8 *buff = data; 652 int i; 653 654 for (i = 0; i < kinfo->num_tqps; i++) { 655 struct hclge_tqp *tqp = container_of(handle->kinfo.tqp[i], 656 struct hclge_tqp, q); 657 snprintf(buff, ETH_GSTRING_LEN, "txq%u_pktnum_rcd", 658 tqp->index); 659 buff = buff + ETH_GSTRING_LEN; 660 } 661 662 for (i = 0; i < kinfo->num_tqps; i++) { 663 struct hclge_tqp *tqp = container_of(kinfo->tqp[i], 664 struct hclge_tqp, q); 665 snprintf(buff, ETH_GSTRING_LEN, "rxq%u_pktnum_rcd", 666 tqp->index); 667 buff = buff + ETH_GSTRING_LEN; 668 } 669 670 return buff; 671 } 672 673 static u64 *hclge_comm_get_stats(const void *comm_stats, 674 const struct hclge_comm_stats_str strs[], 675 int size, u64 *data) 676 { 677 u64 *buf = data; 678 u32 i; 679 680 for (i = 0; i < size; i++) 681 buf[i] = HCLGE_STATS_READ(comm_stats, strs[i].offset); 682 683 return buf + size; 684 } 685 686 static u8 *hclge_comm_get_strings(u32 stringset, 687 const struct hclge_comm_stats_str strs[], 688 int size, u8 *data) 689 { 690 char *buff = (char *)data; 691 u32 i; 692 693 if (stringset != ETH_SS_STATS) 694 return buff; 695 696 for (i = 0; i < size; i++) { 697 snprintf(buff, ETH_GSTRING_LEN, "%s", strs[i].desc); 698 buff = buff + ETH_GSTRING_LEN; 699 } 700 701 return (u8 *)buff; 702 } 703 704 static void hclge_update_stats_for_all(struct hclge_dev *hdev) 705 { 706 struct hnae3_handle *handle; 707 int status; 708 709 handle = &hdev->vport[0].nic; 710 if (handle->client) { 711 status = hclge_tqps_update_stats(handle); 712 if (status) { 713 dev_err(&hdev->pdev->dev, 714 "Update TQPS stats fail, status = %d.\n", 715 status); 716 } 717 } 718 719 status = hclge_mac_update_stats(hdev); 720 if (status) 721 dev_err(&hdev->pdev->dev, 722 "Update MAC stats fail, status = %d.\n", status); 723 } 724 725 static void hclge_update_stats(struct hnae3_handle *handle, 726 struct net_device_stats *net_stats) 727 { 728 struct hclge_vport *vport = hclge_get_vport(handle); 729 struct hclge_dev *hdev = vport->back; 730 int status; 731 732 if (test_and_set_bit(HCLGE_STATE_STATISTICS_UPDATING, &hdev->state)) 733 return; 734 735 status = hclge_mac_update_stats(hdev); 736 if (status) 737 dev_err(&hdev->pdev->dev, 738 "Update MAC stats fail, status = %d.\n", 739 status); 740 741 status = hclge_tqps_update_stats(handle); 742 if (status) 743 dev_err(&hdev->pdev->dev, 744 "Update TQPS stats fail, status = %d.\n", 745 status); 746 747 clear_bit(HCLGE_STATE_STATISTICS_UPDATING, &hdev->state); 748 } 749 750 static int hclge_get_sset_count(struct hnae3_handle *handle, int stringset) 751 { 752 #define HCLGE_LOOPBACK_TEST_FLAGS (HNAE3_SUPPORT_APP_LOOPBACK | \ 753 HNAE3_SUPPORT_PHY_LOOPBACK | \ 754 HNAE3_SUPPORT_SERDES_SERIAL_LOOPBACK | \ 755 HNAE3_SUPPORT_SERDES_PARALLEL_LOOPBACK) 756 757 struct hclge_vport *vport = hclge_get_vport(handle); 758 struct hclge_dev *hdev = vport->back; 759 int count = 0; 760 761 /* Loopback test support rules: 762 * mac: only GE mode support 763 * serdes: all mac mode will support include GE/XGE/LGE/CGE 764 * phy: only support when phy device exist on board 765 */ 766 if (stringset == ETH_SS_TEST) { 767 /* clear loopback bit flags at first */ 768 handle->flags = (handle->flags & (~HCLGE_LOOPBACK_TEST_FLAGS)); 769 if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2 || 770 hdev->hw.mac.speed == HCLGE_MAC_SPEED_10M || 771 hdev->hw.mac.speed == HCLGE_MAC_SPEED_100M || 772 hdev->hw.mac.speed == HCLGE_MAC_SPEED_1G) { 773 count += 1; 774 handle->flags |= HNAE3_SUPPORT_APP_LOOPBACK; 775 } 776 777 count += 2; 778 handle->flags |= HNAE3_SUPPORT_SERDES_SERIAL_LOOPBACK; 779 handle->flags |= HNAE3_SUPPORT_SERDES_PARALLEL_LOOPBACK; 780 781 if ((hdev->hw.mac.phydev && hdev->hw.mac.phydev->drv && 782 hdev->hw.mac.phydev->drv->set_loopback) || 783 hnae3_dev_phy_imp_supported(hdev)) { 784 count += 1; 785 handle->flags |= HNAE3_SUPPORT_PHY_LOOPBACK; 786 } 787 } else if (stringset == ETH_SS_STATS) { 788 count = ARRAY_SIZE(g_mac_stats_string) + 789 hclge_tqps_get_sset_count(handle, stringset); 790 } 791 792 return count; 793 } 794 795 static void hclge_get_strings(struct hnae3_handle *handle, u32 stringset, 796 u8 *data) 797 { 798 u8 *p = (char *)data; 799 int size; 800 801 if (stringset == ETH_SS_STATS) { 802 size = ARRAY_SIZE(g_mac_stats_string); 803 p = hclge_comm_get_strings(stringset, g_mac_stats_string, 804 size, p); 805 p = hclge_tqps_get_strings(handle, p); 806 } else if (stringset == ETH_SS_TEST) { 807 if (handle->flags & HNAE3_SUPPORT_APP_LOOPBACK) { 808 memcpy(p, hns3_nic_test_strs[HNAE3_LOOP_APP], 809 ETH_GSTRING_LEN); 810 p += ETH_GSTRING_LEN; 811 } 812 if (handle->flags & HNAE3_SUPPORT_SERDES_SERIAL_LOOPBACK) { 813 memcpy(p, hns3_nic_test_strs[HNAE3_LOOP_SERIAL_SERDES], 814 ETH_GSTRING_LEN); 815 p += ETH_GSTRING_LEN; 816 } 817 if (handle->flags & HNAE3_SUPPORT_SERDES_PARALLEL_LOOPBACK) { 818 memcpy(p, 819 hns3_nic_test_strs[HNAE3_LOOP_PARALLEL_SERDES], 820 ETH_GSTRING_LEN); 821 p += ETH_GSTRING_LEN; 822 } 823 if (handle->flags & HNAE3_SUPPORT_PHY_LOOPBACK) { 824 memcpy(p, hns3_nic_test_strs[HNAE3_LOOP_PHY], 825 ETH_GSTRING_LEN); 826 p += ETH_GSTRING_LEN; 827 } 828 } 829 } 830 831 static void hclge_get_stats(struct hnae3_handle *handle, u64 *data) 832 { 833 struct hclge_vport *vport = hclge_get_vport(handle); 834 struct hclge_dev *hdev = vport->back; 835 u64 *p; 836 837 p = hclge_comm_get_stats(&hdev->mac_stats, g_mac_stats_string, 838 ARRAY_SIZE(g_mac_stats_string), data); 839 p = hclge_tqps_get_stats(handle, p); 840 } 841 842 static void hclge_get_mac_stat(struct hnae3_handle *handle, 843 struct hns3_mac_stats *mac_stats) 844 { 845 struct hclge_vport *vport = hclge_get_vport(handle); 846 struct hclge_dev *hdev = vport->back; 847 848 hclge_update_stats(handle, NULL); 849 850 mac_stats->tx_pause_cnt = hdev->mac_stats.mac_tx_mac_pause_num; 851 mac_stats->rx_pause_cnt = hdev->mac_stats.mac_rx_mac_pause_num; 852 } 853 854 static int hclge_parse_func_status(struct hclge_dev *hdev, 855 struct hclge_func_status_cmd *status) 856 { 857 #define HCLGE_MAC_ID_MASK 0xF 858 859 if (!(status->pf_state & HCLGE_PF_STATE_DONE)) 860 return -EINVAL; 861 862 /* Set the pf to main pf */ 863 if (status->pf_state & HCLGE_PF_STATE_MAIN) 864 hdev->flag |= HCLGE_FLAG_MAIN; 865 else 866 hdev->flag &= ~HCLGE_FLAG_MAIN; 867 868 hdev->hw.mac.mac_id = status->mac_id & HCLGE_MAC_ID_MASK; 869 return 0; 870 } 871 872 static int hclge_query_function_status(struct hclge_dev *hdev) 873 { 874 #define HCLGE_QUERY_MAX_CNT 5 875 876 struct hclge_func_status_cmd *req; 877 struct hclge_desc desc; 878 int timeout = 0; 879 int ret; 880 881 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_FUNC_STATUS, true); 882 req = (struct hclge_func_status_cmd *)desc.data; 883 884 do { 885 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 886 if (ret) { 887 dev_err(&hdev->pdev->dev, 888 "query function status failed %d.\n", ret); 889 return ret; 890 } 891 892 /* Check pf reset is done */ 893 if (req->pf_state) 894 break; 895 usleep_range(1000, 2000); 896 } while (timeout++ < HCLGE_QUERY_MAX_CNT); 897 898 return hclge_parse_func_status(hdev, req); 899 } 900 901 static int hclge_query_pf_resource(struct hclge_dev *hdev) 902 { 903 struct hclge_pf_res_cmd *req; 904 struct hclge_desc desc; 905 int ret; 906 907 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_PF_RSRC, true); 908 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 909 if (ret) { 910 dev_err(&hdev->pdev->dev, 911 "query pf resource failed %d.\n", ret); 912 return ret; 913 } 914 915 req = (struct hclge_pf_res_cmd *)desc.data; 916 hdev->num_tqps = le16_to_cpu(req->tqp_num) + 917 le16_to_cpu(req->ext_tqp_num); 918 hdev->pkt_buf_size = le16_to_cpu(req->buf_size) << HCLGE_BUF_UNIT_S; 919 920 if (req->tx_buf_size) 921 hdev->tx_buf_size = 922 le16_to_cpu(req->tx_buf_size) << HCLGE_BUF_UNIT_S; 923 else 924 hdev->tx_buf_size = HCLGE_DEFAULT_TX_BUF; 925 926 hdev->tx_buf_size = roundup(hdev->tx_buf_size, HCLGE_BUF_SIZE_UNIT); 927 928 if (req->dv_buf_size) 929 hdev->dv_buf_size = 930 le16_to_cpu(req->dv_buf_size) << HCLGE_BUF_UNIT_S; 931 else 932 hdev->dv_buf_size = HCLGE_DEFAULT_DV; 933 934 hdev->dv_buf_size = roundup(hdev->dv_buf_size, HCLGE_BUF_SIZE_UNIT); 935 936 hdev->num_nic_msi = le16_to_cpu(req->msixcap_localid_number_nic); 937 if (hdev->num_nic_msi < HNAE3_MIN_VECTOR_NUM) { 938 dev_err(&hdev->pdev->dev, 939 "only %u msi resources available, not enough for pf(min:2).\n", 940 hdev->num_nic_msi); 941 return -EINVAL; 942 } 943 944 if (hnae3_dev_roce_supported(hdev)) { 945 hdev->num_roce_msi = 946 le16_to_cpu(req->pf_intr_vector_number_roce); 947 948 /* PF should have NIC vectors and Roce vectors, 949 * NIC vectors are queued before Roce vectors. 950 */ 951 hdev->num_msi = hdev->num_nic_msi + hdev->num_roce_msi; 952 } else { 953 hdev->num_msi = hdev->num_nic_msi; 954 } 955 956 return 0; 957 } 958 959 static int hclge_parse_speed(u8 speed_cmd, u32 *speed) 960 { 961 switch (speed_cmd) { 962 case HCLGE_FW_MAC_SPEED_10M: 963 *speed = HCLGE_MAC_SPEED_10M; 964 break; 965 case HCLGE_FW_MAC_SPEED_100M: 966 *speed = HCLGE_MAC_SPEED_100M; 967 break; 968 case HCLGE_FW_MAC_SPEED_1G: 969 *speed = HCLGE_MAC_SPEED_1G; 970 break; 971 case HCLGE_FW_MAC_SPEED_10G: 972 *speed = HCLGE_MAC_SPEED_10G; 973 break; 974 case HCLGE_FW_MAC_SPEED_25G: 975 *speed = HCLGE_MAC_SPEED_25G; 976 break; 977 case HCLGE_FW_MAC_SPEED_40G: 978 *speed = HCLGE_MAC_SPEED_40G; 979 break; 980 case HCLGE_FW_MAC_SPEED_50G: 981 *speed = HCLGE_MAC_SPEED_50G; 982 break; 983 case HCLGE_FW_MAC_SPEED_100G: 984 *speed = HCLGE_MAC_SPEED_100G; 985 break; 986 case HCLGE_FW_MAC_SPEED_200G: 987 *speed = HCLGE_MAC_SPEED_200G; 988 break; 989 default: 990 return -EINVAL; 991 } 992 993 return 0; 994 } 995 996 static const struct hclge_speed_bit_map speed_bit_map[] = { 997 {HCLGE_MAC_SPEED_10M, HCLGE_SUPPORT_10M_BIT}, 998 {HCLGE_MAC_SPEED_100M, HCLGE_SUPPORT_100M_BIT}, 999 {HCLGE_MAC_SPEED_1G, HCLGE_SUPPORT_1G_BIT}, 1000 {HCLGE_MAC_SPEED_10G, HCLGE_SUPPORT_10G_BIT}, 1001 {HCLGE_MAC_SPEED_25G, HCLGE_SUPPORT_25G_BIT}, 1002 {HCLGE_MAC_SPEED_40G, HCLGE_SUPPORT_40G_BIT}, 1003 {HCLGE_MAC_SPEED_50G, HCLGE_SUPPORT_50G_BIT}, 1004 {HCLGE_MAC_SPEED_100G, HCLGE_SUPPORT_100G_BIT}, 1005 {HCLGE_MAC_SPEED_200G, HCLGE_SUPPORT_200G_BIT}, 1006 }; 1007 1008 static int hclge_get_speed_bit(u32 speed, u32 *speed_bit) 1009 { 1010 u16 i; 1011 1012 for (i = 0; i < ARRAY_SIZE(speed_bit_map); i++) { 1013 if (speed == speed_bit_map[i].speed) { 1014 *speed_bit = speed_bit_map[i].speed_bit; 1015 return 0; 1016 } 1017 } 1018 1019 return -EINVAL; 1020 } 1021 1022 static int hclge_check_port_speed(struct hnae3_handle *handle, u32 speed) 1023 { 1024 struct hclge_vport *vport = hclge_get_vport(handle); 1025 struct hclge_dev *hdev = vport->back; 1026 u32 speed_ability = hdev->hw.mac.speed_ability; 1027 u32 speed_bit = 0; 1028 int ret; 1029 1030 ret = hclge_get_speed_bit(speed, &speed_bit); 1031 if (ret) 1032 return ret; 1033 1034 if (speed_bit & speed_ability) 1035 return 0; 1036 1037 return -EINVAL; 1038 } 1039 1040 static void hclge_convert_setting_sr(struct hclge_mac *mac, u16 speed_ability) 1041 { 1042 if (speed_ability & HCLGE_SUPPORT_10G_BIT) 1043 linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseSR_Full_BIT, 1044 mac->supported); 1045 if (speed_ability & HCLGE_SUPPORT_25G_BIT) 1046 linkmode_set_bit(ETHTOOL_LINK_MODE_25000baseSR_Full_BIT, 1047 mac->supported); 1048 if (speed_ability & HCLGE_SUPPORT_40G_BIT) 1049 linkmode_set_bit(ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT, 1050 mac->supported); 1051 if (speed_ability & HCLGE_SUPPORT_50G_BIT) 1052 linkmode_set_bit(ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT, 1053 mac->supported); 1054 if (speed_ability & HCLGE_SUPPORT_100G_BIT) 1055 linkmode_set_bit(ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT, 1056 mac->supported); 1057 if (speed_ability & HCLGE_SUPPORT_200G_BIT) 1058 linkmode_set_bit(ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT, 1059 mac->supported); 1060 } 1061 1062 static void hclge_convert_setting_lr(struct hclge_mac *mac, u16 speed_ability) 1063 { 1064 if (speed_ability & HCLGE_SUPPORT_10G_BIT) 1065 linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseLR_Full_BIT, 1066 mac->supported); 1067 if (speed_ability & HCLGE_SUPPORT_25G_BIT) 1068 linkmode_set_bit(ETHTOOL_LINK_MODE_25000baseSR_Full_BIT, 1069 mac->supported); 1070 if (speed_ability & HCLGE_SUPPORT_50G_BIT) 1071 linkmode_set_bit(ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT, 1072 mac->supported); 1073 if (speed_ability & HCLGE_SUPPORT_40G_BIT) 1074 linkmode_set_bit(ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT, 1075 mac->supported); 1076 if (speed_ability & HCLGE_SUPPORT_100G_BIT) 1077 linkmode_set_bit(ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT, 1078 mac->supported); 1079 if (speed_ability & HCLGE_SUPPORT_200G_BIT) 1080 linkmode_set_bit( 1081 ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT, 1082 mac->supported); 1083 } 1084 1085 static void hclge_convert_setting_cr(struct hclge_mac *mac, u16 speed_ability) 1086 { 1087 if (speed_ability & HCLGE_SUPPORT_10G_BIT) 1088 linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseCR_Full_BIT, 1089 mac->supported); 1090 if (speed_ability & HCLGE_SUPPORT_25G_BIT) 1091 linkmode_set_bit(ETHTOOL_LINK_MODE_25000baseCR_Full_BIT, 1092 mac->supported); 1093 if (speed_ability & HCLGE_SUPPORT_40G_BIT) 1094 linkmode_set_bit(ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT, 1095 mac->supported); 1096 if (speed_ability & HCLGE_SUPPORT_50G_BIT) 1097 linkmode_set_bit(ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT, 1098 mac->supported); 1099 if (speed_ability & HCLGE_SUPPORT_100G_BIT) 1100 linkmode_set_bit(ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT, 1101 mac->supported); 1102 if (speed_ability & HCLGE_SUPPORT_200G_BIT) 1103 linkmode_set_bit(ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT, 1104 mac->supported); 1105 } 1106 1107 static void hclge_convert_setting_kr(struct hclge_mac *mac, u16 speed_ability) 1108 { 1109 if (speed_ability & HCLGE_SUPPORT_1G_BIT) 1110 linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseKX_Full_BIT, 1111 mac->supported); 1112 if (speed_ability & HCLGE_SUPPORT_10G_BIT) 1113 linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseKR_Full_BIT, 1114 mac->supported); 1115 if (speed_ability & HCLGE_SUPPORT_25G_BIT) 1116 linkmode_set_bit(ETHTOOL_LINK_MODE_25000baseKR_Full_BIT, 1117 mac->supported); 1118 if (speed_ability & HCLGE_SUPPORT_40G_BIT) 1119 linkmode_set_bit(ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT, 1120 mac->supported); 1121 if (speed_ability & HCLGE_SUPPORT_50G_BIT) 1122 linkmode_set_bit(ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT, 1123 mac->supported); 1124 if (speed_ability & HCLGE_SUPPORT_100G_BIT) 1125 linkmode_set_bit(ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT, 1126 mac->supported); 1127 if (speed_ability & HCLGE_SUPPORT_200G_BIT) 1128 linkmode_set_bit(ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT, 1129 mac->supported); 1130 } 1131 1132 static void hclge_convert_setting_fec(struct hclge_mac *mac) 1133 { 1134 linkmode_clear_bit(ETHTOOL_LINK_MODE_FEC_BASER_BIT, mac->supported); 1135 linkmode_clear_bit(ETHTOOL_LINK_MODE_FEC_RS_BIT, mac->supported); 1136 1137 switch (mac->speed) { 1138 case HCLGE_MAC_SPEED_10G: 1139 case HCLGE_MAC_SPEED_40G: 1140 linkmode_set_bit(ETHTOOL_LINK_MODE_FEC_BASER_BIT, 1141 mac->supported); 1142 mac->fec_ability = 1143 BIT(HNAE3_FEC_BASER) | BIT(HNAE3_FEC_AUTO); 1144 break; 1145 case HCLGE_MAC_SPEED_25G: 1146 case HCLGE_MAC_SPEED_50G: 1147 linkmode_set_bit(ETHTOOL_LINK_MODE_FEC_RS_BIT, 1148 mac->supported); 1149 mac->fec_ability = 1150 BIT(HNAE3_FEC_BASER) | BIT(HNAE3_FEC_RS) | 1151 BIT(HNAE3_FEC_AUTO); 1152 break; 1153 case HCLGE_MAC_SPEED_100G: 1154 case HCLGE_MAC_SPEED_200G: 1155 linkmode_set_bit(ETHTOOL_LINK_MODE_FEC_RS_BIT, mac->supported); 1156 mac->fec_ability = BIT(HNAE3_FEC_RS) | BIT(HNAE3_FEC_AUTO); 1157 break; 1158 default: 1159 mac->fec_ability = 0; 1160 break; 1161 } 1162 } 1163 1164 static void hclge_parse_fiber_link_mode(struct hclge_dev *hdev, 1165 u16 speed_ability) 1166 { 1167 struct hclge_mac *mac = &hdev->hw.mac; 1168 1169 if (speed_ability & HCLGE_SUPPORT_1G_BIT) 1170 linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseX_Full_BIT, 1171 mac->supported); 1172 1173 hclge_convert_setting_sr(mac, speed_ability); 1174 hclge_convert_setting_lr(mac, speed_ability); 1175 hclge_convert_setting_cr(mac, speed_ability); 1176 if (hnae3_dev_fec_supported(hdev)) 1177 hclge_convert_setting_fec(mac); 1178 1179 if (hnae3_dev_pause_supported(hdev)) 1180 linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT, mac->supported); 1181 1182 linkmode_set_bit(ETHTOOL_LINK_MODE_FIBRE_BIT, mac->supported); 1183 linkmode_set_bit(ETHTOOL_LINK_MODE_FEC_NONE_BIT, mac->supported); 1184 } 1185 1186 static void hclge_parse_backplane_link_mode(struct hclge_dev *hdev, 1187 u16 speed_ability) 1188 { 1189 struct hclge_mac *mac = &hdev->hw.mac; 1190 1191 hclge_convert_setting_kr(mac, speed_ability); 1192 if (hnae3_dev_fec_supported(hdev)) 1193 hclge_convert_setting_fec(mac); 1194 1195 if (hnae3_dev_pause_supported(hdev)) 1196 linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT, mac->supported); 1197 1198 linkmode_set_bit(ETHTOOL_LINK_MODE_Backplane_BIT, mac->supported); 1199 linkmode_set_bit(ETHTOOL_LINK_MODE_FEC_NONE_BIT, mac->supported); 1200 } 1201 1202 static void hclge_parse_copper_link_mode(struct hclge_dev *hdev, 1203 u16 speed_ability) 1204 { 1205 unsigned long *supported = hdev->hw.mac.supported; 1206 1207 /* default to support all speed for GE port */ 1208 if (!speed_ability) 1209 speed_ability = HCLGE_SUPPORT_GE; 1210 1211 if (speed_ability & HCLGE_SUPPORT_1G_BIT) 1212 linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT, 1213 supported); 1214 1215 if (speed_ability & HCLGE_SUPPORT_100M_BIT) { 1216 linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, 1217 supported); 1218 linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT, 1219 supported); 1220 } 1221 1222 if (speed_ability & HCLGE_SUPPORT_10M_BIT) { 1223 linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT, supported); 1224 linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT, supported); 1225 } 1226 1227 if (hnae3_dev_pause_supported(hdev)) { 1228 linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT, supported); 1229 linkmode_set_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, supported); 1230 } 1231 1232 linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, supported); 1233 linkmode_set_bit(ETHTOOL_LINK_MODE_TP_BIT, supported); 1234 } 1235 1236 static void hclge_parse_link_mode(struct hclge_dev *hdev, u16 speed_ability) 1237 { 1238 u8 media_type = hdev->hw.mac.media_type; 1239 1240 if (media_type == HNAE3_MEDIA_TYPE_FIBER) 1241 hclge_parse_fiber_link_mode(hdev, speed_ability); 1242 else if (media_type == HNAE3_MEDIA_TYPE_COPPER) 1243 hclge_parse_copper_link_mode(hdev, speed_ability); 1244 else if (media_type == HNAE3_MEDIA_TYPE_BACKPLANE) 1245 hclge_parse_backplane_link_mode(hdev, speed_ability); 1246 } 1247 1248 static u32 hclge_get_max_speed(u16 speed_ability) 1249 { 1250 if (speed_ability & HCLGE_SUPPORT_200G_BIT) 1251 return HCLGE_MAC_SPEED_200G; 1252 1253 if (speed_ability & HCLGE_SUPPORT_100G_BIT) 1254 return HCLGE_MAC_SPEED_100G; 1255 1256 if (speed_ability & HCLGE_SUPPORT_50G_BIT) 1257 return HCLGE_MAC_SPEED_50G; 1258 1259 if (speed_ability & HCLGE_SUPPORT_40G_BIT) 1260 return HCLGE_MAC_SPEED_40G; 1261 1262 if (speed_ability & HCLGE_SUPPORT_25G_BIT) 1263 return HCLGE_MAC_SPEED_25G; 1264 1265 if (speed_ability & HCLGE_SUPPORT_10G_BIT) 1266 return HCLGE_MAC_SPEED_10G; 1267 1268 if (speed_ability & HCLGE_SUPPORT_1G_BIT) 1269 return HCLGE_MAC_SPEED_1G; 1270 1271 if (speed_ability & HCLGE_SUPPORT_100M_BIT) 1272 return HCLGE_MAC_SPEED_100M; 1273 1274 if (speed_ability & HCLGE_SUPPORT_10M_BIT) 1275 return HCLGE_MAC_SPEED_10M; 1276 1277 return HCLGE_MAC_SPEED_1G; 1278 } 1279 1280 static void hclge_parse_cfg(struct hclge_cfg *cfg, struct hclge_desc *desc) 1281 { 1282 #define HCLGE_TX_SPARE_SIZE_UNIT 4096 1283 #define SPEED_ABILITY_EXT_SHIFT 8 1284 1285 struct hclge_cfg_param_cmd *req; 1286 u64 mac_addr_tmp_high; 1287 u16 speed_ability_ext; 1288 u64 mac_addr_tmp; 1289 unsigned int i; 1290 1291 req = (struct hclge_cfg_param_cmd *)desc[0].data; 1292 1293 /* get the configuration */ 1294 cfg->tc_num = hnae3_get_field(__le32_to_cpu(req->param[0]), 1295 HCLGE_CFG_TC_NUM_M, HCLGE_CFG_TC_NUM_S); 1296 cfg->tqp_desc_num = hnae3_get_field(__le32_to_cpu(req->param[0]), 1297 HCLGE_CFG_TQP_DESC_N_M, 1298 HCLGE_CFG_TQP_DESC_N_S); 1299 1300 cfg->phy_addr = hnae3_get_field(__le32_to_cpu(req->param[1]), 1301 HCLGE_CFG_PHY_ADDR_M, 1302 HCLGE_CFG_PHY_ADDR_S); 1303 cfg->media_type = hnae3_get_field(__le32_to_cpu(req->param[1]), 1304 HCLGE_CFG_MEDIA_TP_M, 1305 HCLGE_CFG_MEDIA_TP_S); 1306 cfg->rx_buf_len = hnae3_get_field(__le32_to_cpu(req->param[1]), 1307 HCLGE_CFG_RX_BUF_LEN_M, 1308 HCLGE_CFG_RX_BUF_LEN_S); 1309 /* get mac_address */ 1310 mac_addr_tmp = __le32_to_cpu(req->param[2]); 1311 mac_addr_tmp_high = hnae3_get_field(__le32_to_cpu(req->param[3]), 1312 HCLGE_CFG_MAC_ADDR_H_M, 1313 HCLGE_CFG_MAC_ADDR_H_S); 1314 1315 mac_addr_tmp |= (mac_addr_tmp_high << 31) << 1; 1316 1317 cfg->default_speed = hnae3_get_field(__le32_to_cpu(req->param[3]), 1318 HCLGE_CFG_DEFAULT_SPEED_M, 1319 HCLGE_CFG_DEFAULT_SPEED_S); 1320 cfg->vf_rss_size_max = hnae3_get_field(__le32_to_cpu(req->param[3]), 1321 HCLGE_CFG_RSS_SIZE_M, 1322 HCLGE_CFG_RSS_SIZE_S); 1323 1324 for (i = 0; i < ETH_ALEN; i++) 1325 cfg->mac_addr[i] = (mac_addr_tmp >> (8 * i)) & 0xff; 1326 1327 req = (struct hclge_cfg_param_cmd *)desc[1].data; 1328 cfg->numa_node_map = __le32_to_cpu(req->param[0]); 1329 1330 cfg->speed_ability = hnae3_get_field(__le32_to_cpu(req->param[1]), 1331 HCLGE_CFG_SPEED_ABILITY_M, 1332 HCLGE_CFG_SPEED_ABILITY_S); 1333 speed_ability_ext = hnae3_get_field(__le32_to_cpu(req->param[1]), 1334 HCLGE_CFG_SPEED_ABILITY_EXT_M, 1335 HCLGE_CFG_SPEED_ABILITY_EXT_S); 1336 cfg->speed_ability |= speed_ability_ext << SPEED_ABILITY_EXT_SHIFT; 1337 1338 cfg->vlan_fliter_cap = hnae3_get_field(__le32_to_cpu(req->param[1]), 1339 HCLGE_CFG_VLAN_FLTR_CAP_M, 1340 HCLGE_CFG_VLAN_FLTR_CAP_S); 1341 1342 cfg->umv_space = hnae3_get_field(__le32_to_cpu(req->param[1]), 1343 HCLGE_CFG_UMV_TBL_SPACE_M, 1344 HCLGE_CFG_UMV_TBL_SPACE_S); 1345 if (!cfg->umv_space) 1346 cfg->umv_space = HCLGE_DEFAULT_UMV_SPACE_PER_PF; 1347 1348 cfg->pf_rss_size_max = hnae3_get_field(__le32_to_cpu(req->param[2]), 1349 HCLGE_CFG_PF_RSS_SIZE_M, 1350 HCLGE_CFG_PF_RSS_SIZE_S); 1351 1352 /* HCLGE_CFG_PF_RSS_SIZE_M is the PF max rss size, which is a 1353 * power of 2, instead of reading out directly. This would 1354 * be more flexible for future changes and expansions. 1355 * When VF max rss size field is HCLGE_CFG_RSS_SIZE_S, 1356 * it does not make sense if PF's field is 0. In this case, PF and VF 1357 * has the same max rss size filed: HCLGE_CFG_RSS_SIZE_S. 1358 */ 1359 cfg->pf_rss_size_max = cfg->pf_rss_size_max ? 1360 1U << cfg->pf_rss_size_max : 1361 cfg->vf_rss_size_max; 1362 1363 /* The unit of the tx spare buffer size queried from configuration 1364 * file is HCLGE_TX_SPARE_SIZE_UNIT(4096) bytes, so a conversion is 1365 * needed here. 1366 */ 1367 cfg->tx_spare_buf_size = hnae3_get_field(__le32_to_cpu(req->param[2]), 1368 HCLGE_CFG_TX_SPARE_BUF_SIZE_M, 1369 HCLGE_CFG_TX_SPARE_BUF_SIZE_S); 1370 cfg->tx_spare_buf_size *= HCLGE_TX_SPARE_SIZE_UNIT; 1371 } 1372 1373 /* hclge_get_cfg: query the static parameter from flash 1374 * @hdev: pointer to struct hclge_dev 1375 * @hcfg: the config structure to be getted 1376 */ 1377 static int hclge_get_cfg(struct hclge_dev *hdev, struct hclge_cfg *hcfg) 1378 { 1379 struct hclge_desc desc[HCLGE_PF_CFG_DESC_NUM]; 1380 struct hclge_cfg_param_cmd *req; 1381 unsigned int i; 1382 int ret; 1383 1384 for (i = 0; i < HCLGE_PF_CFG_DESC_NUM; i++) { 1385 u32 offset = 0; 1386 1387 req = (struct hclge_cfg_param_cmd *)desc[i].data; 1388 hclge_cmd_setup_basic_desc(&desc[i], HCLGE_OPC_GET_CFG_PARAM, 1389 true); 1390 hnae3_set_field(offset, HCLGE_CFG_OFFSET_M, 1391 HCLGE_CFG_OFFSET_S, i * HCLGE_CFG_RD_LEN_BYTES); 1392 /* Len should be united by 4 bytes when send to hardware */ 1393 hnae3_set_field(offset, HCLGE_CFG_RD_LEN_M, HCLGE_CFG_RD_LEN_S, 1394 HCLGE_CFG_RD_LEN_BYTES / HCLGE_CFG_RD_LEN_UNIT); 1395 req->offset = cpu_to_le32(offset); 1396 } 1397 1398 ret = hclge_cmd_send(&hdev->hw, desc, HCLGE_PF_CFG_DESC_NUM); 1399 if (ret) { 1400 dev_err(&hdev->pdev->dev, "get config failed %d.\n", ret); 1401 return ret; 1402 } 1403 1404 hclge_parse_cfg(hcfg, desc); 1405 1406 return 0; 1407 } 1408 1409 static void hclge_set_default_dev_specs(struct hclge_dev *hdev) 1410 { 1411 #define HCLGE_MAX_NON_TSO_BD_NUM 8U 1412 1413 struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev); 1414 1415 ae_dev->dev_specs.max_non_tso_bd_num = HCLGE_MAX_NON_TSO_BD_NUM; 1416 ae_dev->dev_specs.rss_ind_tbl_size = HCLGE_RSS_IND_TBL_SIZE; 1417 ae_dev->dev_specs.rss_key_size = HCLGE_RSS_KEY_SIZE; 1418 ae_dev->dev_specs.max_tm_rate = HCLGE_ETHER_MAX_RATE; 1419 ae_dev->dev_specs.max_int_gl = HCLGE_DEF_MAX_INT_GL; 1420 ae_dev->dev_specs.max_frm_size = HCLGE_MAC_MAX_FRAME; 1421 ae_dev->dev_specs.max_qset_num = HCLGE_MAX_QSET_NUM; 1422 } 1423 1424 static void hclge_parse_dev_specs(struct hclge_dev *hdev, 1425 struct hclge_desc *desc) 1426 { 1427 struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev); 1428 struct hclge_dev_specs_0_cmd *req0; 1429 struct hclge_dev_specs_1_cmd *req1; 1430 1431 req0 = (struct hclge_dev_specs_0_cmd *)desc[0].data; 1432 req1 = (struct hclge_dev_specs_1_cmd *)desc[1].data; 1433 1434 ae_dev->dev_specs.max_non_tso_bd_num = req0->max_non_tso_bd_num; 1435 ae_dev->dev_specs.rss_ind_tbl_size = 1436 le16_to_cpu(req0->rss_ind_tbl_size); 1437 ae_dev->dev_specs.int_ql_max = le16_to_cpu(req0->int_ql_max); 1438 ae_dev->dev_specs.rss_key_size = le16_to_cpu(req0->rss_key_size); 1439 ae_dev->dev_specs.max_tm_rate = le32_to_cpu(req0->max_tm_rate); 1440 ae_dev->dev_specs.max_qset_num = le16_to_cpu(req1->max_qset_num); 1441 ae_dev->dev_specs.max_int_gl = le16_to_cpu(req1->max_int_gl); 1442 ae_dev->dev_specs.max_frm_size = le16_to_cpu(req1->max_frm_size); 1443 } 1444 1445 static void hclge_check_dev_specs(struct hclge_dev *hdev) 1446 { 1447 struct hnae3_dev_specs *dev_specs = &hdev->ae_dev->dev_specs; 1448 1449 if (!dev_specs->max_non_tso_bd_num) 1450 dev_specs->max_non_tso_bd_num = HCLGE_MAX_NON_TSO_BD_NUM; 1451 if (!dev_specs->rss_ind_tbl_size) 1452 dev_specs->rss_ind_tbl_size = HCLGE_RSS_IND_TBL_SIZE; 1453 if (!dev_specs->rss_key_size) 1454 dev_specs->rss_key_size = HCLGE_RSS_KEY_SIZE; 1455 if (!dev_specs->max_tm_rate) 1456 dev_specs->max_tm_rate = HCLGE_ETHER_MAX_RATE; 1457 if (!dev_specs->max_qset_num) 1458 dev_specs->max_qset_num = HCLGE_MAX_QSET_NUM; 1459 if (!dev_specs->max_int_gl) 1460 dev_specs->max_int_gl = HCLGE_DEF_MAX_INT_GL; 1461 if (!dev_specs->max_frm_size) 1462 dev_specs->max_frm_size = HCLGE_MAC_MAX_FRAME; 1463 } 1464 1465 static int hclge_query_dev_specs(struct hclge_dev *hdev) 1466 { 1467 struct hclge_desc desc[HCLGE_QUERY_DEV_SPECS_BD_NUM]; 1468 int ret; 1469 int i; 1470 1471 /* set default specifications as devices lower than version V3 do not 1472 * support querying specifications from firmware. 1473 */ 1474 if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V3) { 1475 hclge_set_default_dev_specs(hdev); 1476 return 0; 1477 } 1478 1479 for (i = 0; i < HCLGE_QUERY_DEV_SPECS_BD_NUM - 1; i++) { 1480 hclge_cmd_setup_basic_desc(&desc[i], HCLGE_OPC_QUERY_DEV_SPECS, 1481 true); 1482 desc[i].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT); 1483 } 1484 hclge_cmd_setup_basic_desc(&desc[i], HCLGE_OPC_QUERY_DEV_SPECS, true); 1485 1486 ret = hclge_cmd_send(&hdev->hw, desc, HCLGE_QUERY_DEV_SPECS_BD_NUM); 1487 if (ret) 1488 return ret; 1489 1490 hclge_parse_dev_specs(hdev, desc); 1491 hclge_check_dev_specs(hdev); 1492 1493 return 0; 1494 } 1495 1496 static int hclge_get_cap(struct hclge_dev *hdev) 1497 { 1498 int ret; 1499 1500 ret = hclge_query_function_status(hdev); 1501 if (ret) { 1502 dev_err(&hdev->pdev->dev, 1503 "query function status error %d.\n", ret); 1504 return ret; 1505 } 1506 1507 /* get pf resource */ 1508 return hclge_query_pf_resource(hdev); 1509 } 1510 1511 static void hclge_init_kdump_kernel_config(struct hclge_dev *hdev) 1512 { 1513 #define HCLGE_MIN_TX_DESC 64 1514 #define HCLGE_MIN_RX_DESC 64 1515 1516 if (!is_kdump_kernel()) 1517 return; 1518 1519 dev_info(&hdev->pdev->dev, 1520 "Running kdump kernel. Using minimal resources\n"); 1521 1522 /* minimal queue pairs equals to the number of vports */ 1523 hdev->num_tqps = hdev->num_req_vfs + 1; 1524 hdev->num_tx_desc = HCLGE_MIN_TX_DESC; 1525 hdev->num_rx_desc = HCLGE_MIN_RX_DESC; 1526 } 1527 1528 static int hclge_configure(struct hclge_dev *hdev) 1529 { 1530 struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev); 1531 const struct cpumask *cpumask = cpu_online_mask; 1532 struct hclge_cfg cfg; 1533 unsigned int i; 1534 int node, ret; 1535 1536 ret = hclge_get_cfg(hdev, &cfg); 1537 if (ret) 1538 return ret; 1539 1540 hdev->base_tqp_pid = 0; 1541 hdev->vf_rss_size_max = cfg.vf_rss_size_max; 1542 hdev->pf_rss_size_max = cfg.pf_rss_size_max; 1543 hdev->rx_buf_len = cfg.rx_buf_len; 1544 ether_addr_copy(hdev->hw.mac.mac_addr, cfg.mac_addr); 1545 hdev->hw.mac.media_type = cfg.media_type; 1546 hdev->hw.mac.phy_addr = cfg.phy_addr; 1547 hdev->num_tx_desc = cfg.tqp_desc_num; 1548 hdev->num_rx_desc = cfg.tqp_desc_num; 1549 hdev->tm_info.num_pg = 1; 1550 hdev->tc_max = cfg.tc_num; 1551 hdev->tm_info.hw_pfc_map = 0; 1552 hdev->wanted_umv_size = cfg.umv_space; 1553 hdev->tx_spare_buf_size = cfg.tx_spare_buf_size; 1554 hdev->gro_en = true; 1555 if (cfg.vlan_fliter_cap == HCLGE_VLAN_FLTR_CAN_MDF) 1556 set_bit(HNAE3_DEV_SUPPORT_VLAN_FLTR_MDF_B, ae_dev->caps); 1557 1558 if (hnae3_dev_fd_supported(hdev)) { 1559 hdev->fd_en = true; 1560 hdev->fd_active_type = HCLGE_FD_RULE_NONE; 1561 } 1562 1563 ret = hclge_parse_speed(cfg.default_speed, &hdev->hw.mac.speed); 1564 if (ret) { 1565 dev_err(&hdev->pdev->dev, "failed to parse speed %u, ret = %d\n", 1566 cfg.default_speed, ret); 1567 return ret; 1568 } 1569 1570 hclge_parse_link_mode(hdev, cfg.speed_ability); 1571 1572 hdev->hw.mac.max_speed = hclge_get_max_speed(cfg.speed_ability); 1573 1574 if ((hdev->tc_max > HNAE3_MAX_TC) || 1575 (hdev->tc_max < 1)) { 1576 dev_warn(&hdev->pdev->dev, "TC num = %u.\n", 1577 hdev->tc_max); 1578 hdev->tc_max = 1; 1579 } 1580 1581 /* Dev does not support DCB */ 1582 if (!hnae3_dev_dcb_supported(hdev)) { 1583 hdev->tc_max = 1; 1584 hdev->pfc_max = 0; 1585 } else { 1586 hdev->pfc_max = hdev->tc_max; 1587 } 1588 1589 hdev->tm_info.num_tc = 1; 1590 1591 /* Currently not support uncontiuous tc */ 1592 for (i = 0; i < hdev->tm_info.num_tc; i++) 1593 hnae3_set_bit(hdev->hw_tc_map, i, 1); 1594 1595 hdev->tx_sch_mode = HCLGE_FLAG_TC_BASE_SCH_MODE; 1596 1597 hclge_init_kdump_kernel_config(hdev); 1598 1599 /* Set the affinity based on numa node */ 1600 node = dev_to_node(&hdev->pdev->dev); 1601 if (node != NUMA_NO_NODE) 1602 cpumask = cpumask_of_node(node); 1603 1604 cpumask_copy(&hdev->affinity_mask, cpumask); 1605 1606 return ret; 1607 } 1608 1609 static int hclge_config_tso(struct hclge_dev *hdev, u16 tso_mss_min, 1610 u16 tso_mss_max) 1611 { 1612 struct hclge_cfg_tso_status_cmd *req; 1613 struct hclge_desc desc; 1614 1615 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_TSO_GENERIC_CONFIG, false); 1616 1617 req = (struct hclge_cfg_tso_status_cmd *)desc.data; 1618 req->tso_mss_min = cpu_to_le16(tso_mss_min); 1619 req->tso_mss_max = cpu_to_le16(tso_mss_max); 1620 1621 return hclge_cmd_send(&hdev->hw, &desc, 1); 1622 } 1623 1624 static int hclge_config_gro(struct hclge_dev *hdev) 1625 { 1626 struct hclge_cfg_gro_status_cmd *req; 1627 struct hclge_desc desc; 1628 int ret; 1629 1630 if (!hnae3_dev_gro_supported(hdev)) 1631 return 0; 1632 1633 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_GRO_GENERIC_CONFIG, false); 1634 req = (struct hclge_cfg_gro_status_cmd *)desc.data; 1635 1636 req->gro_en = hdev->gro_en ? 1 : 0; 1637 1638 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 1639 if (ret) 1640 dev_err(&hdev->pdev->dev, 1641 "GRO hardware config cmd failed, ret = %d\n", ret); 1642 1643 return ret; 1644 } 1645 1646 static int hclge_alloc_tqps(struct hclge_dev *hdev) 1647 { 1648 struct hclge_tqp *tqp; 1649 int i; 1650 1651 hdev->htqp = devm_kcalloc(&hdev->pdev->dev, hdev->num_tqps, 1652 sizeof(struct hclge_tqp), GFP_KERNEL); 1653 if (!hdev->htqp) 1654 return -ENOMEM; 1655 1656 tqp = hdev->htqp; 1657 1658 for (i = 0; i < hdev->num_tqps; i++) { 1659 tqp->dev = &hdev->pdev->dev; 1660 tqp->index = i; 1661 1662 tqp->q.ae_algo = &ae_algo; 1663 tqp->q.buf_size = hdev->rx_buf_len; 1664 tqp->q.tx_desc_num = hdev->num_tx_desc; 1665 tqp->q.rx_desc_num = hdev->num_rx_desc; 1666 1667 /* need an extended offset to configure queues >= 1668 * HCLGE_TQP_MAX_SIZE_DEV_V2 1669 */ 1670 if (i < HCLGE_TQP_MAX_SIZE_DEV_V2) 1671 tqp->q.io_base = hdev->hw.io_base + 1672 HCLGE_TQP_REG_OFFSET + 1673 i * HCLGE_TQP_REG_SIZE; 1674 else 1675 tqp->q.io_base = hdev->hw.io_base + 1676 HCLGE_TQP_REG_OFFSET + 1677 HCLGE_TQP_EXT_REG_OFFSET + 1678 (i - HCLGE_TQP_MAX_SIZE_DEV_V2) * 1679 HCLGE_TQP_REG_SIZE; 1680 1681 tqp++; 1682 } 1683 1684 return 0; 1685 } 1686 1687 static int hclge_map_tqps_to_func(struct hclge_dev *hdev, u16 func_id, 1688 u16 tqp_pid, u16 tqp_vid, bool is_pf) 1689 { 1690 struct hclge_tqp_map_cmd *req; 1691 struct hclge_desc desc; 1692 int ret; 1693 1694 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_SET_TQP_MAP, false); 1695 1696 req = (struct hclge_tqp_map_cmd *)desc.data; 1697 req->tqp_id = cpu_to_le16(tqp_pid); 1698 req->tqp_vf = func_id; 1699 req->tqp_flag = 1U << HCLGE_TQP_MAP_EN_B; 1700 if (!is_pf) 1701 req->tqp_flag |= 1U << HCLGE_TQP_MAP_TYPE_B; 1702 req->tqp_vid = cpu_to_le16(tqp_vid); 1703 1704 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 1705 if (ret) 1706 dev_err(&hdev->pdev->dev, "TQP map failed %d.\n", ret); 1707 1708 return ret; 1709 } 1710 1711 static int hclge_assign_tqp(struct hclge_vport *vport, u16 num_tqps) 1712 { 1713 struct hnae3_knic_private_info *kinfo = &vport->nic.kinfo; 1714 struct hclge_dev *hdev = vport->back; 1715 int i, alloced; 1716 1717 for (i = 0, alloced = 0; i < hdev->num_tqps && 1718 alloced < num_tqps; i++) { 1719 if (!hdev->htqp[i].alloced) { 1720 hdev->htqp[i].q.handle = &vport->nic; 1721 hdev->htqp[i].q.tqp_index = alloced; 1722 hdev->htqp[i].q.tx_desc_num = kinfo->num_tx_desc; 1723 hdev->htqp[i].q.rx_desc_num = kinfo->num_rx_desc; 1724 kinfo->tqp[alloced] = &hdev->htqp[i].q; 1725 hdev->htqp[i].alloced = true; 1726 alloced++; 1727 } 1728 } 1729 vport->alloc_tqps = alloced; 1730 kinfo->rss_size = min_t(u16, hdev->pf_rss_size_max, 1731 vport->alloc_tqps / hdev->tm_info.num_tc); 1732 1733 /* ensure one to one mapping between irq and queue at default */ 1734 kinfo->rss_size = min_t(u16, kinfo->rss_size, 1735 (hdev->num_nic_msi - 1) / hdev->tm_info.num_tc); 1736 1737 return 0; 1738 } 1739 1740 static int hclge_knic_setup(struct hclge_vport *vport, u16 num_tqps, 1741 u16 num_tx_desc, u16 num_rx_desc) 1742 1743 { 1744 struct hnae3_handle *nic = &vport->nic; 1745 struct hnae3_knic_private_info *kinfo = &nic->kinfo; 1746 struct hclge_dev *hdev = vport->back; 1747 int ret; 1748 1749 kinfo->num_tx_desc = num_tx_desc; 1750 kinfo->num_rx_desc = num_rx_desc; 1751 1752 kinfo->rx_buf_len = hdev->rx_buf_len; 1753 kinfo->tx_spare_buf_size = hdev->tx_spare_buf_size; 1754 1755 kinfo->tqp = devm_kcalloc(&hdev->pdev->dev, num_tqps, 1756 sizeof(struct hnae3_queue *), GFP_KERNEL); 1757 if (!kinfo->tqp) 1758 return -ENOMEM; 1759 1760 ret = hclge_assign_tqp(vport, num_tqps); 1761 if (ret) 1762 dev_err(&hdev->pdev->dev, "fail to assign TQPs %d.\n", ret); 1763 1764 return ret; 1765 } 1766 1767 static int hclge_map_tqp_to_vport(struct hclge_dev *hdev, 1768 struct hclge_vport *vport) 1769 { 1770 struct hnae3_handle *nic = &vport->nic; 1771 struct hnae3_knic_private_info *kinfo; 1772 u16 i; 1773 1774 kinfo = &nic->kinfo; 1775 for (i = 0; i < vport->alloc_tqps; i++) { 1776 struct hclge_tqp *q = 1777 container_of(kinfo->tqp[i], struct hclge_tqp, q); 1778 bool is_pf; 1779 int ret; 1780 1781 is_pf = !(vport->vport_id); 1782 ret = hclge_map_tqps_to_func(hdev, vport->vport_id, q->index, 1783 i, is_pf); 1784 if (ret) 1785 return ret; 1786 } 1787 1788 return 0; 1789 } 1790 1791 static int hclge_map_tqp(struct hclge_dev *hdev) 1792 { 1793 struct hclge_vport *vport = hdev->vport; 1794 u16 i, num_vport; 1795 1796 num_vport = hdev->num_req_vfs + 1; 1797 for (i = 0; i < num_vport; i++) { 1798 int ret; 1799 1800 ret = hclge_map_tqp_to_vport(hdev, vport); 1801 if (ret) 1802 return ret; 1803 1804 vport++; 1805 } 1806 1807 return 0; 1808 } 1809 1810 static int hclge_vport_setup(struct hclge_vport *vport, u16 num_tqps) 1811 { 1812 struct hnae3_handle *nic = &vport->nic; 1813 struct hclge_dev *hdev = vport->back; 1814 int ret; 1815 1816 nic->pdev = hdev->pdev; 1817 nic->ae_algo = &ae_algo; 1818 nic->numa_node_mask = hdev->numa_node_mask; 1819 nic->kinfo.io_base = hdev->hw.io_base; 1820 1821 ret = hclge_knic_setup(vport, num_tqps, 1822 hdev->num_tx_desc, hdev->num_rx_desc); 1823 if (ret) 1824 dev_err(&hdev->pdev->dev, "knic setup failed %d\n", ret); 1825 1826 return ret; 1827 } 1828 1829 static int hclge_alloc_vport(struct hclge_dev *hdev) 1830 { 1831 struct pci_dev *pdev = hdev->pdev; 1832 struct hclge_vport *vport; 1833 u32 tqp_main_vport; 1834 u32 tqp_per_vport; 1835 int num_vport, i; 1836 int ret; 1837 1838 /* We need to alloc a vport for main NIC of PF */ 1839 num_vport = hdev->num_req_vfs + 1; 1840 1841 if (hdev->num_tqps < num_vport) { 1842 dev_err(&hdev->pdev->dev, "tqps(%u) is less than vports(%d)", 1843 hdev->num_tqps, num_vport); 1844 return -EINVAL; 1845 } 1846 1847 /* Alloc the same number of TQPs for every vport */ 1848 tqp_per_vport = hdev->num_tqps / num_vport; 1849 tqp_main_vport = tqp_per_vport + hdev->num_tqps % num_vport; 1850 1851 vport = devm_kcalloc(&pdev->dev, num_vport, sizeof(struct hclge_vport), 1852 GFP_KERNEL); 1853 if (!vport) 1854 return -ENOMEM; 1855 1856 hdev->vport = vport; 1857 hdev->num_alloc_vport = num_vport; 1858 1859 if (IS_ENABLED(CONFIG_PCI_IOV)) 1860 hdev->num_alloc_vfs = hdev->num_req_vfs; 1861 1862 for (i = 0; i < num_vport; i++) { 1863 vport->back = hdev; 1864 vport->vport_id = i; 1865 vport->vf_info.link_state = IFLA_VF_LINK_STATE_AUTO; 1866 vport->mps = HCLGE_MAC_DEFAULT_FRAME; 1867 vport->port_base_vlan_cfg.state = HNAE3_PORT_BASE_VLAN_DISABLE; 1868 vport->rxvlan_cfg.rx_vlan_offload_en = true; 1869 vport->req_vlan_fltr_en = true; 1870 INIT_LIST_HEAD(&vport->vlan_list); 1871 INIT_LIST_HEAD(&vport->uc_mac_list); 1872 INIT_LIST_HEAD(&vport->mc_mac_list); 1873 spin_lock_init(&vport->mac_list_lock); 1874 1875 if (i == 0) 1876 ret = hclge_vport_setup(vport, tqp_main_vport); 1877 else 1878 ret = hclge_vport_setup(vport, tqp_per_vport); 1879 if (ret) { 1880 dev_err(&pdev->dev, 1881 "vport setup failed for vport %d, %d\n", 1882 i, ret); 1883 return ret; 1884 } 1885 1886 vport++; 1887 } 1888 1889 return 0; 1890 } 1891 1892 static int hclge_cmd_alloc_tx_buff(struct hclge_dev *hdev, 1893 struct hclge_pkt_buf_alloc *buf_alloc) 1894 { 1895 /* TX buffer size is unit by 128 byte */ 1896 #define HCLGE_BUF_SIZE_UNIT_SHIFT 7 1897 #define HCLGE_BUF_SIZE_UPDATE_EN_MSK BIT(15) 1898 struct hclge_tx_buff_alloc_cmd *req; 1899 struct hclge_desc desc; 1900 int ret; 1901 u8 i; 1902 1903 req = (struct hclge_tx_buff_alloc_cmd *)desc.data; 1904 1905 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_TX_BUFF_ALLOC, 0); 1906 for (i = 0; i < HCLGE_MAX_TC_NUM; i++) { 1907 u32 buf_size = buf_alloc->priv_buf[i].tx_buf_size; 1908 1909 req->tx_pkt_buff[i] = 1910 cpu_to_le16((buf_size >> HCLGE_BUF_SIZE_UNIT_SHIFT) | 1911 HCLGE_BUF_SIZE_UPDATE_EN_MSK); 1912 } 1913 1914 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 1915 if (ret) 1916 dev_err(&hdev->pdev->dev, "tx buffer alloc cmd failed %d.\n", 1917 ret); 1918 1919 return ret; 1920 } 1921 1922 static int hclge_tx_buffer_alloc(struct hclge_dev *hdev, 1923 struct hclge_pkt_buf_alloc *buf_alloc) 1924 { 1925 int ret = hclge_cmd_alloc_tx_buff(hdev, buf_alloc); 1926 1927 if (ret) 1928 dev_err(&hdev->pdev->dev, "tx buffer alloc failed %d\n", ret); 1929 1930 return ret; 1931 } 1932 1933 static u32 hclge_get_tc_num(struct hclge_dev *hdev) 1934 { 1935 unsigned int i; 1936 u32 cnt = 0; 1937 1938 for (i = 0; i < HCLGE_MAX_TC_NUM; i++) 1939 if (hdev->hw_tc_map & BIT(i)) 1940 cnt++; 1941 return cnt; 1942 } 1943 1944 /* Get the number of pfc enabled TCs, which have private buffer */ 1945 static int hclge_get_pfc_priv_num(struct hclge_dev *hdev, 1946 struct hclge_pkt_buf_alloc *buf_alloc) 1947 { 1948 struct hclge_priv_buf *priv; 1949 unsigned int i; 1950 int cnt = 0; 1951 1952 for (i = 0; i < HCLGE_MAX_TC_NUM; i++) { 1953 priv = &buf_alloc->priv_buf[i]; 1954 if ((hdev->tm_info.hw_pfc_map & BIT(i)) && 1955 priv->enable) 1956 cnt++; 1957 } 1958 1959 return cnt; 1960 } 1961 1962 /* Get the number of pfc disabled TCs, which have private buffer */ 1963 static int hclge_get_no_pfc_priv_num(struct hclge_dev *hdev, 1964 struct hclge_pkt_buf_alloc *buf_alloc) 1965 { 1966 struct hclge_priv_buf *priv; 1967 unsigned int i; 1968 int cnt = 0; 1969 1970 for (i = 0; i < HCLGE_MAX_TC_NUM; i++) { 1971 priv = &buf_alloc->priv_buf[i]; 1972 if (hdev->hw_tc_map & BIT(i) && 1973 !(hdev->tm_info.hw_pfc_map & BIT(i)) && 1974 priv->enable) 1975 cnt++; 1976 } 1977 1978 return cnt; 1979 } 1980 1981 static u32 hclge_get_rx_priv_buff_alloced(struct hclge_pkt_buf_alloc *buf_alloc) 1982 { 1983 struct hclge_priv_buf *priv; 1984 u32 rx_priv = 0; 1985 int i; 1986 1987 for (i = 0; i < HCLGE_MAX_TC_NUM; i++) { 1988 priv = &buf_alloc->priv_buf[i]; 1989 if (priv->enable) 1990 rx_priv += priv->buf_size; 1991 } 1992 return rx_priv; 1993 } 1994 1995 static u32 hclge_get_tx_buff_alloced(struct hclge_pkt_buf_alloc *buf_alloc) 1996 { 1997 u32 i, total_tx_size = 0; 1998 1999 for (i = 0; i < HCLGE_MAX_TC_NUM; i++) 2000 total_tx_size += buf_alloc->priv_buf[i].tx_buf_size; 2001 2002 return total_tx_size; 2003 } 2004 2005 static bool hclge_is_rx_buf_ok(struct hclge_dev *hdev, 2006 struct hclge_pkt_buf_alloc *buf_alloc, 2007 u32 rx_all) 2008 { 2009 u32 shared_buf_min, shared_buf_tc, shared_std, hi_thrd, lo_thrd; 2010 u32 tc_num = hclge_get_tc_num(hdev); 2011 u32 shared_buf, aligned_mps; 2012 u32 rx_priv; 2013 int i; 2014 2015 aligned_mps = roundup(hdev->mps, HCLGE_BUF_SIZE_UNIT); 2016 2017 if (hnae3_dev_dcb_supported(hdev)) 2018 shared_buf_min = HCLGE_BUF_MUL_BY * aligned_mps + 2019 hdev->dv_buf_size; 2020 else 2021 shared_buf_min = aligned_mps + HCLGE_NON_DCB_ADDITIONAL_BUF 2022 + hdev->dv_buf_size; 2023 2024 shared_buf_tc = tc_num * aligned_mps + aligned_mps; 2025 shared_std = roundup(max_t(u32, shared_buf_min, shared_buf_tc), 2026 HCLGE_BUF_SIZE_UNIT); 2027 2028 rx_priv = hclge_get_rx_priv_buff_alloced(buf_alloc); 2029 if (rx_all < rx_priv + shared_std) 2030 return false; 2031 2032 shared_buf = rounddown(rx_all - rx_priv, HCLGE_BUF_SIZE_UNIT); 2033 buf_alloc->s_buf.buf_size = shared_buf; 2034 if (hnae3_dev_dcb_supported(hdev)) { 2035 buf_alloc->s_buf.self.high = shared_buf - hdev->dv_buf_size; 2036 buf_alloc->s_buf.self.low = buf_alloc->s_buf.self.high 2037 - roundup(aligned_mps / HCLGE_BUF_DIV_BY, 2038 HCLGE_BUF_SIZE_UNIT); 2039 } else { 2040 buf_alloc->s_buf.self.high = aligned_mps + 2041 HCLGE_NON_DCB_ADDITIONAL_BUF; 2042 buf_alloc->s_buf.self.low = aligned_mps; 2043 } 2044 2045 if (hnae3_dev_dcb_supported(hdev)) { 2046 hi_thrd = shared_buf - hdev->dv_buf_size; 2047 2048 if (tc_num <= NEED_RESERVE_TC_NUM) 2049 hi_thrd = hi_thrd * BUF_RESERVE_PERCENT 2050 / BUF_MAX_PERCENT; 2051 2052 if (tc_num) 2053 hi_thrd = hi_thrd / tc_num; 2054 2055 hi_thrd = max_t(u32, hi_thrd, HCLGE_BUF_MUL_BY * aligned_mps); 2056 hi_thrd = rounddown(hi_thrd, HCLGE_BUF_SIZE_UNIT); 2057 lo_thrd = hi_thrd - aligned_mps / HCLGE_BUF_DIV_BY; 2058 } else { 2059 hi_thrd = aligned_mps + HCLGE_NON_DCB_ADDITIONAL_BUF; 2060 lo_thrd = aligned_mps; 2061 } 2062 2063 for (i = 0; i < HCLGE_MAX_TC_NUM; i++) { 2064 buf_alloc->s_buf.tc_thrd[i].low = lo_thrd; 2065 buf_alloc->s_buf.tc_thrd[i].high = hi_thrd; 2066 } 2067 2068 return true; 2069 } 2070 2071 static int hclge_tx_buffer_calc(struct hclge_dev *hdev, 2072 struct hclge_pkt_buf_alloc *buf_alloc) 2073 { 2074 u32 i, total_size; 2075 2076 total_size = hdev->pkt_buf_size; 2077 2078 /* alloc tx buffer for all enabled tc */ 2079 for (i = 0; i < HCLGE_MAX_TC_NUM; i++) { 2080 struct hclge_priv_buf *priv = &buf_alloc->priv_buf[i]; 2081 2082 if (hdev->hw_tc_map & BIT(i)) { 2083 if (total_size < hdev->tx_buf_size) 2084 return -ENOMEM; 2085 2086 priv->tx_buf_size = hdev->tx_buf_size; 2087 } else { 2088 priv->tx_buf_size = 0; 2089 } 2090 2091 total_size -= priv->tx_buf_size; 2092 } 2093 2094 return 0; 2095 } 2096 2097 static bool hclge_rx_buf_calc_all(struct hclge_dev *hdev, bool max, 2098 struct hclge_pkt_buf_alloc *buf_alloc) 2099 { 2100 u32 rx_all = hdev->pkt_buf_size - hclge_get_tx_buff_alloced(buf_alloc); 2101 u32 aligned_mps = round_up(hdev->mps, HCLGE_BUF_SIZE_UNIT); 2102 unsigned int i; 2103 2104 for (i = 0; i < HCLGE_MAX_TC_NUM; i++) { 2105 struct hclge_priv_buf *priv = &buf_alloc->priv_buf[i]; 2106 2107 priv->enable = 0; 2108 priv->wl.low = 0; 2109 priv->wl.high = 0; 2110 priv->buf_size = 0; 2111 2112 if (!(hdev->hw_tc_map & BIT(i))) 2113 continue; 2114 2115 priv->enable = 1; 2116 2117 if (hdev->tm_info.hw_pfc_map & BIT(i)) { 2118 priv->wl.low = max ? aligned_mps : HCLGE_BUF_SIZE_UNIT; 2119 priv->wl.high = roundup(priv->wl.low + aligned_mps, 2120 HCLGE_BUF_SIZE_UNIT); 2121 } else { 2122 priv->wl.low = 0; 2123 priv->wl.high = max ? (aligned_mps * HCLGE_BUF_MUL_BY) : 2124 aligned_mps; 2125 } 2126 2127 priv->buf_size = priv->wl.high + hdev->dv_buf_size; 2128 } 2129 2130 return hclge_is_rx_buf_ok(hdev, buf_alloc, rx_all); 2131 } 2132 2133 static bool hclge_drop_nopfc_buf_till_fit(struct hclge_dev *hdev, 2134 struct hclge_pkt_buf_alloc *buf_alloc) 2135 { 2136 u32 rx_all = hdev->pkt_buf_size - hclge_get_tx_buff_alloced(buf_alloc); 2137 int no_pfc_priv_num = hclge_get_no_pfc_priv_num(hdev, buf_alloc); 2138 int i; 2139 2140 /* let the last to be cleared first */ 2141 for (i = HCLGE_MAX_TC_NUM - 1; i >= 0; i--) { 2142 struct hclge_priv_buf *priv = &buf_alloc->priv_buf[i]; 2143 unsigned int mask = BIT((unsigned int)i); 2144 2145 if (hdev->hw_tc_map & mask && 2146 !(hdev->tm_info.hw_pfc_map & mask)) { 2147 /* Clear the no pfc TC private buffer */ 2148 priv->wl.low = 0; 2149 priv->wl.high = 0; 2150 priv->buf_size = 0; 2151 priv->enable = 0; 2152 no_pfc_priv_num--; 2153 } 2154 2155 if (hclge_is_rx_buf_ok(hdev, buf_alloc, rx_all) || 2156 no_pfc_priv_num == 0) 2157 break; 2158 } 2159 2160 return hclge_is_rx_buf_ok(hdev, buf_alloc, rx_all); 2161 } 2162 2163 static bool hclge_drop_pfc_buf_till_fit(struct hclge_dev *hdev, 2164 struct hclge_pkt_buf_alloc *buf_alloc) 2165 { 2166 u32 rx_all = hdev->pkt_buf_size - hclge_get_tx_buff_alloced(buf_alloc); 2167 int pfc_priv_num = hclge_get_pfc_priv_num(hdev, buf_alloc); 2168 int i; 2169 2170 /* let the last to be cleared first */ 2171 for (i = HCLGE_MAX_TC_NUM - 1; i >= 0; i--) { 2172 struct hclge_priv_buf *priv = &buf_alloc->priv_buf[i]; 2173 unsigned int mask = BIT((unsigned int)i); 2174 2175 if (hdev->hw_tc_map & mask && 2176 hdev->tm_info.hw_pfc_map & mask) { 2177 /* Reduce the number of pfc TC with private buffer */ 2178 priv->wl.low = 0; 2179 priv->enable = 0; 2180 priv->wl.high = 0; 2181 priv->buf_size = 0; 2182 pfc_priv_num--; 2183 } 2184 2185 if (hclge_is_rx_buf_ok(hdev, buf_alloc, rx_all) || 2186 pfc_priv_num == 0) 2187 break; 2188 } 2189 2190 return hclge_is_rx_buf_ok(hdev, buf_alloc, rx_all); 2191 } 2192 2193 static int hclge_only_alloc_priv_buff(struct hclge_dev *hdev, 2194 struct hclge_pkt_buf_alloc *buf_alloc) 2195 { 2196 #define COMPENSATE_BUFFER 0x3C00 2197 #define COMPENSATE_HALF_MPS_NUM 5 2198 #define PRIV_WL_GAP 0x1800 2199 2200 u32 rx_priv = hdev->pkt_buf_size - hclge_get_tx_buff_alloced(buf_alloc); 2201 u32 tc_num = hclge_get_tc_num(hdev); 2202 u32 half_mps = hdev->mps >> 1; 2203 u32 min_rx_priv; 2204 unsigned int i; 2205 2206 if (tc_num) 2207 rx_priv = rx_priv / tc_num; 2208 2209 if (tc_num <= NEED_RESERVE_TC_NUM) 2210 rx_priv = rx_priv * BUF_RESERVE_PERCENT / BUF_MAX_PERCENT; 2211 2212 min_rx_priv = hdev->dv_buf_size + COMPENSATE_BUFFER + 2213 COMPENSATE_HALF_MPS_NUM * half_mps; 2214 min_rx_priv = round_up(min_rx_priv, HCLGE_BUF_SIZE_UNIT); 2215 rx_priv = round_down(rx_priv, HCLGE_BUF_SIZE_UNIT); 2216 if (rx_priv < min_rx_priv) 2217 return false; 2218 2219 for (i = 0; i < HCLGE_MAX_TC_NUM; i++) { 2220 struct hclge_priv_buf *priv = &buf_alloc->priv_buf[i]; 2221 2222 priv->enable = 0; 2223 priv->wl.low = 0; 2224 priv->wl.high = 0; 2225 priv->buf_size = 0; 2226 2227 if (!(hdev->hw_tc_map & BIT(i))) 2228 continue; 2229 2230 priv->enable = 1; 2231 priv->buf_size = rx_priv; 2232 priv->wl.high = rx_priv - hdev->dv_buf_size; 2233 priv->wl.low = priv->wl.high - PRIV_WL_GAP; 2234 } 2235 2236 buf_alloc->s_buf.buf_size = 0; 2237 2238 return true; 2239 } 2240 2241 /* hclge_rx_buffer_calc: calculate the rx private buffer size for all TCs 2242 * @hdev: pointer to struct hclge_dev 2243 * @buf_alloc: pointer to buffer calculation data 2244 * @return: 0: calculate successful, negative: fail 2245 */ 2246 static int hclge_rx_buffer_calc(struct hclge_dev *hdev, 2247 struct hclge_pkt_buf_alloc *buf_alloc) 2248 { 2249 /* When DCB is not supported, rx private buffer is not allocated. */ 2250 if (!hnae3_dev_dcb_supported(hdev)) { 2251 u32 rx_all = hdev->pkt_buf_size; 2252 2253 rx_all -= hclge_get_tx_buff_alloced(buf_alloc); 2254 if (!hclge_is_rx_buf_ok(hdev, buf_alloc, rx_all)) 2255 return -ENOMEM; 2256 2257 return 0; 2258 } 2259 2260 if (hclge_only_alloc_priv_buff(hdev, buf_alloc)) 2261 return 0; 2262 2263 if (hclge_rx_buf_calc_all(hdev, true, buf_alloc)) 2264 return 0; 2265 2266 /* try to decrease the buffer size */ 2267 if (hclge_rx_buf_calc_all(hdev, false, buf_alloc)) 2268 return 0; 2269 2270 if (hclge_drop_nopfc_buf_till_fit(hdev, buf_alloc)) 2271 return 0; 2272 2273 if (hclge_drop_pfc_buf_till_fit(hdev, buf_alloc)) 2274 return 0; 2275 2276 return -ENOMEM; 2277 } 2278 2279 static int hclge_rx_priv_buf_alloc(struct hclge_dev *hdev, 2280 struct hclge_pkt_buf_alloc *buf_alloc) 2281 { 2282 struct hclge_rx_priv_buff_cmd *req; 2283 struct hclge_desc desc; 2284 int ret; 2285 int i; 2286 2287 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_RX_PRIV_BUFF_ALLOC, false); 2288 req = (struct hclge_rx_priv_buff_cmd *)desc.data; 2289 2290 /* Alloc private buffer TCs */ 2291 for (i = 0; i < HCLGE_MAX_TC_NUM; i++) { 2292 struct hclge_priv_buf *priv = &buf_alloc->priv_buf[i]; 2293 2294 req->buf_num[i] = 2295 cpu_to_le16(priv->buf_size >> HCLGE_BUF_UNIT_S); 2296 req->buf_num[i] |= 2297 cpu_to_le16(1 << HCLGE_TC0_PRI_BUF_EN_B); 2298 } 2299 2300 req->shared_buf = 2301 cpu_to_le16((buf_alloc->s_buf.buf_size >> HCLGE_BUF_UNIT_S) | 2302 (1 << HCLGE_TC0_PRI_BUF_EN_B)); 2303 2304 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 2305 if (ret) 2306 dev_err(&hdev->pdev->dev, 2307 "rx private buffer alloc cmd failed %d\n", ret); 2308 2309 return ret; 2310 } 2311 2312 static int hclge_rx_priv_wl_config(struct hclge_dev *hdev, 2313 struct hclge_pkt_buf_alloc *buf_alloc) 2314 { 2315 struct hclge_rx_priv_wl_buf *req; 2316 struct hclge_priv_buf *priv; 2317 struct hclge_desc desc[2]; 2318 int i, j; 2319 int ret; 2320 2321 for (i = 0; i < 2; i++) { 2322 hclge_cmd_setup_basic_desc(&desc[i], HCLGE_OPC_RX_PRIV_WL_ALLOC, 2323 false); 2324 req = (struct hclge_rx_priv_wl_buf *)desc[i].data; 2325 2326 /* The first descriptor set the NEXT bit to 1 */ 2327 if (i == 0) 2328 desc[i].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT); 2329 else 2330 desc[i].flag &= ~cpu_to_le16(HCLGE_CMD_FLAG_NEXT); 2331 2332 for (j = 0; j < HCLGE_TC_NUM_ONE_DESC; j++) { 2333 u32 idx = i * HCLGE_TC_NUM_ONE_DESC + j; 2334 2335 priv = &buf_alloc->priv_buf[idx]; 2336 req->tc_wl[j].high = 2337 cpu_to_le16(priv->wl.high >> HCLGE_BUF_UNIT_S); 2338 req->tc_wl[j].high |= 2339 cpu_to_le16(BIT(HCLGE_RX_PRIV_EN_B)); 2340 req->tc_wl[j].low = 2341 cpu_to_le16(priv->wl.low >> HCLGE_BUF_UNIT_S); 2342 req->tc_wl[j].low |= 2343 cpu_to_le16(BIT(HCLGE_RX_PRIV_EN_B)); 2344 } 2345 } 2346 2347 /* Send 2 descriptor at one time */ 2348 ret = hclge_cmd_send(&hdev->hw, desc, 2); 2349 if (ret) 2350 dev_err(&hdev->pdev->dev, 2351 "rx private waterline config cmd failed %d\n", 2352 ret); 2353 return ret; 2354 } 2355 2356 static int hclge_common_thrd_config(struct hclge_dev *hdev, 2357 struct hclge_pkt_buf_alloc *buf_alloc) 2358 { 2359 struct hclge_shared_buf *s_buf = &buf_alloc->s_buf; 2360 struct hclge_rx_com_thrd *req; 2361 struct hclge_desc desc[2]; 2362 struct hclge_tc_thrd *tc; 2363 int i, j; 2364 int ret; 2365 2366 for (i = 0; i < 2; i++) { 2367 hclge_cmd_setup_basic_desc(&desc[i], 2368 HCLGE_OPC_RX_COM_THRD_ALLOC, false); 2369 req = (struct hclge_rx_com_thrd *)&desc[i].data; 2370 2371 /* The first descriptor set the NEXT bit to 1 */ 2372 if (i == 0) 2373 desc[i].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT); 2374 else 2375 desc[i].flag &= ~cpu_to_le16(HCLGE_CMD_FLAG_NEXT); 2376 2377 for (j = 0; j < HCLGE_TC_NUM_ONE_DESC; j++) { 2378 tc = &s_buf->tc_thrd[i * HCLGE_TC_NUM_ONE_DESC + j]; 2379 2380 req->com_thrd[j].high = 2381 cpu_to_le16(tc->high >> HCLGE_BUF_UNIT_S); 2382 req->com_thrd[j].high |= 2383 cpu_to_le16(BIT(HCLGE_RX_PRIV_EN_B)); 2384 req->com_thrd[j].low = 2385 cpu_to_le16(tc->low >> HCLGE_BUF_UNIT_S); 2386 req->com_thrd[j].low |= 2387 cpu_to_le16(BIT(HCLGE_RX_PRIV_EN_B)); 2388 } 2389 } 2390 2391 /* Send 2 descriptors at one time */ 2392 ret = hclge_cmd_send(&hdev->hw, desc, 2); 2393 if (ret) 2394 dev_err(&hdev->pdev->dev, 2395 "common threshold config cmd failed %d\n", ret); 2396 return ret; 2397 } 2398 2399 static int hclge_common_wl_config(struct hclge_dev *hdev, 2400 struct hclge_pkt_buf_alloc *buf_alloc) 2401 { 2402 struct hclge_shared_buf *buf = &buf_alloc->s_buf; 2403 struct hclge_rx_com_wl *req; 2404 struct hclge_desc desc; 2405 int ret; 2406 2407 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_RX_COM_WL_ALLOC, false); 2408 2409 req = (struct hclge_rx_com_wl *)desc.data; 2410 req->com_wl.high = cpu_to_le16(buf->self.high >> HCLGE_BUF_UNIT_S); 2411 req->com_wl.high |= cpu_to_le16(BIT(HCLGE_RX_PRIV_EN_B)); 2412 2413 req->com_wl.low = cpu_to_le16(buf->self.low >> HCLGE_BUF_UNIT_S); 2414 req->com_wl.low |= cpu_to_le16(BIT(HCLGE_RX_PRIV_EN_B)); 2415 2416 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 2417 if (ret) 2418 dev_err(&hdev->pdev->dev, 2419 "common waterline config cmd failed %d\n", ret); 2420 2421 return ret; 2422 } 2423 2424 int hclge_buffer_alloc(struct hclge_dev *hdev) 2425 { 2426 struct hclge_pkt_buf_alloc *pkt_buf; 2427 int ret; 2428 2429 pkt_buf = kzalloc(sizeof(*pkt_buf), GFP_KERNEL); 2430 if (!pkt_buf) 2431 return -ENOMEM; 2432 2433 ret = hclge_tx_buffer_calc(hdev, pkt_buf); 2434 if (ret) { 2435 dev_err(&hdev->pdev->dev, 2436 "could not calc tx buffer size for all TCs %d\n", ret); 2437 goto out; 2438 } 2439 2440 ret = hclge_tx_buffer_alloc(hdev, pkt_buf); 2441 if (ret) { 2442 dev_err(&hdev->pdev->dev, 2443 "could not alloc tx buffers %d\n", ret); 2444 goto out; 2445 } 2446 2447 ret = hclge_rx_buffer_calc(hdev, pkt_buf); 2448 if (ret) { 2449 dev_err(&hdev->pdev->dev, 2450 "could not calc rx priv buffer size for all TCs %d\n", 2451 ret); 2452 goto out; 2453 } 2454 2455 ret = hclge_rx_priv_buf_alloc(hdev, pkt_buf); 2456 if (ret) { 2457 dev_err(&hdev->pdev->dev, "could not alloc rx priv buffer %d\n", 2458 ret); 2459 goto out; 2460 } 2461 2462 if (hnae3_dev_dcb_supported(hdev)) { 2463 ret = hclge_rx_priv_wl_config(hdev, pkt_buf); 2464 if (ret) { 2465 dev_err(&hdev->pdev->dev, 2466 "could not configure rx private waterline %d\n", 2467 ret); 2468 goto out; 2469 } 2470 2471 ret = hclge_common_thrd_config(hdev, pkt_buf); 2472 if (ret) { 2473 dev_err(&hdev->pdev->dev, 2474 "could not configure common threshold %d\n", 2475 ret); 2476 goto out; 2477 } 2478 } 2479 2480 ret = hclge_common_wl_config(hdev, pkt_buf); 2481 if (ret) 2482 dev_err(&hdev->pdev->dev, 2483 "could not configure common waterline %d\n", ret); 2484 2485 out: 2486 kfree(pkt_buf); 2487 return ret; 2488 } 2489 2490 static int hclge_init_roce_base_info(struct hclge_vport *vport) 2491 { 2492 struct hnae3_handle *roce = &vport->roce; 2493 struct hnae3_handle *nic = &vport->nic; 2494 struct hclge_dev *hdev = vport->back; 2495 2496 roce->rinfo.num_vectors = vport->back->num_roce_msi; 2497 2498 if (hdev->num_msi < hdev->num_nic_msi + hdev->num_roce_msi) 2499 return -EINVAL; 2500 2501 roce->rinfo.base_vector = hdev->roce_base_vector; 2502 2503 roce->rinfo.netdev = nic->kinfo.netdev; 2504 roce->rinfo.roce_io_base = hdev->hw.io_base; 2505 roce->rinfo.roce_mem_base = hdev->hw.mem_base; 2506 2507 roce->pdev = nic->pdev; 2508 roce->ae_algo = nic->ae_algo; 2509 roce->numa_node_mask = nic->numa_node_mask; 2510 2511 return 0; 2512 } 2513 2514 static int hclge_init_msi(struct hclge_dev *hdev) 2515 { 2516 struct pci_dev *pdev = hdev->pdev; 2517 int vectors; 2518 int i; 2519 2520 vectors = pci_alloc_irq_vectors(pdev, HNAE3_MIN_VECTOR_NUM, 2521 hdev->num_msi, 2522 PCI_IRQ_MSI | PCI_IRQ_MSIX); 2523 if (vectors < 0) { 2524 dev_err(&pdev->dev, 2525 "failed(%d) to allocate MSI/MSI-X vectors\n", 2526 vectors); 2527 return vectors; 2528 } 2529 if (vectors < hdev->num_msi) 2530 dev_warn(&hdev->pdev->dev, 2531 "requested %u MSI/MSI-X, but allocated %d MSI/MSI-X\n", 2532 hdev->num_msi, vectors); 2533 2534 hdev->num_msi = vectors; 2535 hdev->num_msi_left = vectors; 2536 2537 hdev->base_msi_vector = pdev->irq; 2538 hdev->roce_base_vector = hdev->base_msi_vector + 2539 hdev->num_nic_msi; 2540 2541 hdev->vector_status = devm_kcalloc(&pdev->dev, hdev->num_msi, 2542 sizeof(u16), GFP_KERNEL); 2543 if (!hdev->vector_status) { 2544 pci_free_irq_vectors(pdev); 2545 return -ENOMEM; 2546 } 2547 2548 for (i = 0; i < hdev->num_msi; i++) 2549 hdev->vector_status[i] = HCLGE_INVALID_VPORT; 2550 2551 hdev->vector_irq = devm_kcalloc(&pdev->dev, hdev->num_msi, 2552 sizeof(int), GFP_KERNEL); 2553 if (!hdev->vector_irq) { 2554 pci_free_irq_vectors(pdev); 2555 return -ENOMEM; 2556 } 2557 2558 return 0; 2559 } 2560 2561 static u8 hclge_check_speed_dup(u8 duplex, int speed) 2562 { 2563 if (!(speed == HCLGE_MAC_SPEED_10M || speed == HCLGE_MAC_SPEED_100M)) 2564 duplex = HCLGE_MAC_FULL; 2565 2566 return duplex; 2567 } 2568 2569 static int hclge_cfg_mac_speed_dup_hw(struct hclge_dev *hdev, int speed, 2570 u8 duplex) 2571 { 2572 struct hclge_config_mac_speed_dup_cmd *req; 2573 struct hclge_desc desc; 2574 int ret; 2575 2576 req = (struct hclge_config_mac_speed_dup_cmd *)desc.data; 2577 2578 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CONFIG_SPEED_DUP, false); 2579 2580 if (duplex) 2581 hnae3_set_bit(req->speed_dup, HCLGE_CFG_DUPLEX_B, 1); 2582 2583 switch (speed) { 2584 case HCLGE_MAC_SPEED_10M: 2585 hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M, 2586 HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_10M); 2587 break; 2588 case HCLGE_MAC_SPEED_100M: 2589 hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M, 2590 HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_100M); 2591 break; 2592 case HCLGE_MAC_SPEED_1G: 2593 hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M, 2594 HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_1G); 2595 break; 2596 case HCLGE_MAC_SPEED_10G: 2597 hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M, 2598 HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_10G); 2599 break; 2600 case HCLGE_MAC_SPEED_25G: 2601 hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M, 2602 HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_25G); 2603 break; 2604 case HCLGE_MAC_SPEED_40G: 2605 hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M, 2606 HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_40G); 2607 break; 2608 case HCLGE_MAC_SPEED_50G: 2609 hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M, 2610 HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_50G); 2611 break; 2612 case HCLGE_MAC_SPEED_100G: 2613 hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M, 2614 HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_100G); 2615 break; 2616 case HCLGE_MAC_SPEED_200G: 2617 hnae3_set_field(req->speed_dup, HCLGE_CFG_SPEED_M, 2618 HCLGE_CFG_SPEED_S, HCLGE_FW_MAC_SPEED_200G); 2619 break; 2620 default: 2621 dev_err(&hdev->pdev->dev, "invalid speed (%d)\n", speed); 2622 return -EINVAL; 2623 } 2624 2625 hnae3_set_bit(req->mac_change_fec_en, HCLGE_CFG_MAC_SPEED_CHANGE_EN_B, 2626 1); 2627 2628 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 2629 if (ret) { 2630 dev_err(&hdev->pdev->dev, 2631 "mac speed/duplex config cmd failed %d.\n", ret); 2632 return ret; 2633 } 2634 2635 return 0; 2636 } 2637 2638 int hclge_cfg_mac_speed_dup(struct hclge_dev *hdev, int speed, u8 duplex) 2639 { 2640 struct hclge_mac *mac = &hdev->hw.mac; 2641 int ret; 2642 2643 duplex = hclge_check_speed_dup(duplex, speed); 2644 if (!mac->support_autoneg && mac->speed == speed && 2645 mac->duplex == duplex) 2646 return 0; 2647 2648 ret = hclge_cfg_mac_speed_dup_hw(hdev, speed, duplex); 2649 if (ret) 2650 return ret; 2651 2652 hdev->hw.mac.speed = speed; 2653 hdev->hw.mac.duplex = duplex; 2654 2655 return 0; 2656 } 2657 2658 static int hclge_cfg_mac_speed_dup_h(struct hnae3_handle *handle, int speed, 2659 u8 duplex) 2660 { 2661 struct hclge_vport *vport = hclge_get_vport(handle); 2662 struct hclge_dev *hdev = vport->back; 2663 2664 return hclge_cfg_mac_speed_dup(hdev, speed, duplex); 2665 } 2666 2667 static int hclge_set_autoneg_en(struct hclge_dev *hdev, bool enable) 2668 { 2669 struct hclge_config_auto_neg_cmd *req; 2670 struct hclge_desc desc; 2671 u32 flag = 0; 2672 int ret; 2673 2674 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CONFIG_AN_MODE, false); 2675 2676 req = (struct hclge_config_auto_neg_cmd *)desc.data; 2677 if (enable) 2678 hnae3_set_bit(flag, HCLGE_MAC_CFG_AN_EN_B, 1U); 2679 req->cfg_an_cmd_flag = cpu_to_le32(flag); 2680 2681 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 2682 if (ret) 2683 dev_err(&hdev->pdev->dev, "auto neg set cmd failed %d.\n", 2684 ret); 2685 2686 return ret; 2687 } 2688 2689 static int hclge_set_autoneg(struct hnae3_handle *handle, bool enable) 2690 { 2691 struct hclge_vport *vport = hclge_get_vport(handle); 2692 struct hclge_dev *hdev = vport->back; 2693 2694 if (!hdev->hw.mac.support_autoneg) { 2695 if (enable) { 2696 dev_err(&hdev->pdev->dev, 2697 "autoneg is not supported by current port\n"); 2698 return -EOPNOTSUPP; 2699 } else { 2700 return 0; 2701 } 2702 } 2703 2704 return hclge_set_autoneg_en(hdev, enable); 2705 } 2706 2707 static int hclge_get_autoneg(struct hnae3_handle *handle) 2708 { 2709 struct hclge_vport *vport = hclge_get_vport(handle); 2710 struct hclge_dev *hdev = vport->back; 2711 struct phy_device *phydev = hdev->hw.mac.phydev; 2712 2713 if (phydev) 2714 return phydev->autoneg; 2715 2716 return hdev->hw.mac.autoneg; 2717 } 2718 2719 static int hclge_restart_autoneg(struct hnae3_handle *handle) 2720 { 2721 struct hclge_vport *vport = hclge_get_vport(handle); 2722 struct hclge_dev *hdev = vport->back; 2723 int ret; 2724 2725 dev_dbg(&hdev->pdev->dev, "restart autoneg\n"); 2726 2727 ret = hclge_notify_client(hdev, HNAE3_DOWN_CLIENT); 2728 if (ret) 2729 return ret; 2730 return hclge_notify_client(hdev, HNAE3_UP_CLIENT); 2731 } 2732 2733 static int hclge_halt_autoneg(struct hnae3_handle *handle, bool halt) 2734 { 2735 struct hclge_vport *vport = hclge_get_vport(handle); 2736 struct hclge_dev *hdev = vport->back; 2737 2738 if (hdev->hw.mac.support_autoneg && hdev->hw.mac.autoneg) 2739 return hclge_set_autoneg_en(hdev, !halt); 2740 2741 return 0; 2742 } 2743 2744 static int hclge_set_fec_hw(struct hclge_dev *hdev, u32 fec_mode) 2745 { 2746 struct hclge_config_fec_cmd *req; 2747 struct hclge_desc desc; 2748 int ret; 2749 2750 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CONFIG_FEC_MODE, false); 2751 2752 req = (struct hclge_config_fec_cmd *)desc.data; 2753 if (fec_mode & BIT(HNAE3_FEC_AUTO)) 2754 hnae3_set_bit(req->fec_mode, HCLGE_MAC_CFG_FEC_AUTO_EN_B, 1); 2755 if (fec_mode & BIT(HNAE3_FEC_RS)) 2756 hnae3_set_field(req->fec_mode, HCLGE_MAC_CFG_FEC_MODE_M, 2757 HCLGE_MAC_CFG_FEC_MODE_S, HCLGE_MAC_FEC_RS); 2758 if (fec_mode & BIT(HNAE3_FEC_BASER)) 2759 hnae3_set_field(req->fec_mode, HCLGE_MAC_CFG_FEC_MODE_M, 2760 HCLGE_MAC_CFG_FEC_MODE_S, HCLGE_MAC_FEC_BASER); 2761 2762 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 2763 if (ret) 2764 dev_err(&hdev->pdev->dev, "set fec mode failed %d.\n", ret); 2765 2766 return ret; 2767 } 2768 2769 static int hclge_set_fec(struct hnae3_handle *handle, u32 fec_mode) 2770 { 2771 struct hclge_vport *vport = hclge_get_vport(handle); 2772 struct hclge_dev *hdev = vport->back; 2773 struct hclge_mac *mac = &hdev->hw.mac; 2774 int ret; 2775 2776 if (fec_mode && !(mac->fec_ability & fec_mode)) { 2777 dev_err(&hdev->pdev->dev, "unsupported fec mode\n"); 2778 return -EINVAL; 2779 } 2780 2781 ret = hclge_set_fec_hw(hdev, fec_mode); 2782 if (ret) 2783 return ret; 2784 2785 mac->user_fec_mode = fec_mode | BIT(HNAE3_FEC_USER_DEF); 2786 return 0; 2787 } 2788 2789 static void hclge_get_fec(struct hnae3_handle *handle, u8 *fec_ability, 2790 u8 *fec_mode) 2791 { 2792 struct hclge_vport *vport = hclge_get_vport(handle); 2793 struct hclge_dev *hdev = vport->back; 2794 struct hclge_mac *mac = &hdev->hw.mac; 2795 2796 if (fec_ability) 2797 *fec_ability = mac->fec_ability; 2798 if (fec_mode) 2799 *fec_mode = mac->fec_mode; 2800 } 2801 2802 static int hclge_mac_init(struct hclge_dev *hdev) 2803 { 2804 struct hclge_mac *mac = &hdev->hw.mac; 2805 int ret; 2806 2807 hdev->support_sfp_query = true; 2808 hdev->hw.mac.duplex = HCLGE_MAC_FULL; 2809 ret = hclge_cfg_mac_speed_dup_hw(hdev, hdev->hw.mac.speed, 2810 hdev->hw.mac.duplex); 2811 if (ret) 2812 return ret; 2813 2814 if (hdev->hw.mac.support_autoneg) { 2815 ret = hclge_set_autoneg_en(hdev, hdev->hw.mac.autoneg); 2816 if (ret) 2817 return ret; 2818 } 2819 2820 mac->link = 0; 2821 2822 if (mac->user_fec_mode & BIT(HNAE3_FEC_USER_DEF)) { 2823 ret = hclge_set_fec_hw(hdev, mac->user_fec_mode); 2824 if (ret) 2825 return ret; 2826 } 2827 2828 ret = hclge_set_mac_mtu(hdev, hdev->mps); 2829 if (ret) { 2830 dev_err(&hdev->pdev->dev, "set mtu failed ret=%d\n", ret); 2831 return ret; 2832 } 2833 2834 ret = hclge_set_default_loopback(hdev); 2835 if (ret) 2836 return ret; 2837 2838 ret = hclge_buffer_alloc(hdev); 2839 if (ret) 2840 dev_err(&hdev->pdev->dev, 2841 "allocate buffer fail, ret=%d\n", ret); 2842 2843 return ret; 2844 } 2845 2846 static void hclge_mbx_task_schedule(struct hclge_dev *hdev) 2847 { 2848 if (!test_bit(HCLGE_STATE_REMOVING, &hdev->state) && 2849 !test_and_set_bit(HCLGE_STATE_MBX_SERVICE_SCHED, &hdev->state)) 2850 mod_delayed_work_on(cpumask_first(&hdev->affinity_mask), 2851 hclge_wq, &hdev->service_task, 0); 2852 } 2853 2854 static void hclge_reset_task_schedule(struct hclge_dev *hdev) 2855 { 2856 if (!test_bit(HCLGE_STATE_REMOVING, &hdev->state) && 2857 !test_and_set_bit(HCLGE_STATE_RST_SERVICE_SCHED, &hdev->state)) 2858 mod_delayed_work_on(cpumask_first(&hdev->affinity_mask), 2859 hclge_wq, &hdev->service_task, 0); 2860 } 2861 2862 static void hclge_errhand_task_schedule(struct hclge_dev *hdev) 2863 { 2864 if (!test_bit(HCLGE_STATE_REMOVING, &hdev->state) && 2865 !test_and_set_bit(HCLGE_STATE_ERR_SERVICE_SCHED, &hdev->state)) 2866 mod_delayed_work_on(cpumask_first(&hdev->affinity_mask), 2867 hclge_wq, &hdev->service_task, 0); 2868 } 2869 2870 void hclge_task_schedule(struct hclge_dev *hdev, unsigned long delay_time) 2871 { 2872 if (!test_bit(HCLGE_STATE_REMOVING, &hdev->state) && 2873 !test_bit(HCLGE_STATE_RST_FAIL, &hdev->state)) 2874 mod_delayed_work_on(cpumask_first(&hdev->affinity_mask), 2875 hclge_wq, &hdev->service_task, 2876 delay_time); 2877 } 2878 2879 static int hclge_get_mac_link_status(struct hclge_dev *hdev, int *link_status) 2880 { 2881 struct hclge_link_status_cmd *req; 2882 struct hclge_desc desc; 2883 int ret; 2884 2885 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_LINK_STATUS, true); 2886 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 2887 if (ret) { 2888 dev_err(&hdev->pdev->dev, "get link status cmd failed %d\n", 2889 ret); 2890 return ret; 2891 } 2892 2893 req = (struct hclge_link_status_cmd *)desc.data; 2894 *link_status = (req->status & HCLGE_LINK_STATUS_UP_M) > 0 ? 2895 HCLGE_LINK_STATUS_UP : HCLGE_LINK_STATUS_DOWN; 2896 2897 return 0; 2898 } 2899 2900 static int hclge_get_mac_phy_link(struct hclge_dev *hdev, int *link_status) 2901 { 2902 struct phy_device *phydev = hdev->hw.mac.phydev; 2903 2904 *link_status = HCLGE_LINK_STATUS_DOWN; 2905 2906 if (test_bit(HCLGE_STATE_DOWN, &hdev->state)) 2907 return 0; 2908 2909 if (phydev && (phydev->state != PHY_RUNNING || !phydev->link)) 2910 return 0; 2911 2912 return hclge_get_mac_link_status(hdev, link_status); 2913 } 2914 2915 static void hclge_push_link_status(struct hclge_dev *hdev) 2916 { 2917 struct hclge_vport *vport; 2918 int ret; 2919 u16 i; 2920 2921 for (i = 0; i < pci_num_vf(hdev->pdev); i++) { 2922 vport = &hdev->vport[i + HCLGE_VF_VPORT_START_NUM]; 2923 2924 if (!test_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state) || 2925 vport->vf_info.link_state != IFLA_VF_LINK_STATE_AUTO) 2926 continue; 2927 2928 ret = hclge_push_vf_link_status(vport); 2929 if (ret) { 2930 dev_err(&hdev->pdev->dev, 2931 "failed to push link status to vf%u, ret = %d\n", 2932 i, ret); 2933 } 2934 } 2935 } 2936 2937 static void hclge_update_link_status(struct hclge_dev *hdev) 2938 { 2939 struct hnae3_handle *rhandle = &hdev->vport[0].roce; 2940 struct hnae3_handle *handle = &hdev->vport[0].nic; 2941 struct hnae3_client *rclient = hdev->roce_client; 2942 struct hnae3_client *client = hdev->nic_client; 2943 int state; 2944 int ret; 2945 2946 if (!client) 2947 return; 2948 2949 if (test_and_set_bit(HCLGE_STATE_LINK_UPDATING, &hdev->state)) 2950 return; 2951 2952 ret = hclge_get_mac_phy_link(hdev, &state); 2953 if (ret) { 2954 clear_bit(HCLGE_STATE_LINK_UPDATING, &hdev->state); 2955 return; 2956 } 2957 2958 if (state != hdev->hw.mac.link) { 2959 hdev->hw.mac.link = state; 2960 client->ops->link_status_change(handle, state); 2961 hclge_config_mac_tnl_int(hdev, state); 2962 if (rclient && rclient->ops->link_status_change) 2963 rclient->ops->link_status_change(rhandle, state); 2964 2965 hclge_push_link_status(hdev); 2966 } 2967 2968 clear_bit(HCLGE_STATE_LINK_UPDATING, &hdev->state); 2969 } 2970 2971 static void hclge_update_port_capability(struct hclge_dev *hdev, 2972 struct hclge_mac *mac) 2973 { 2974 if (hnae3_dev_fec_supported(hdev)) 2975 /* update fec ability by speed */ 2976 hclge_convert_setting_fec(mac); 2977 2978 /* firmware can not identify back plane type, the media type 2979 * read from configuration can help deal it 2980 */ 2981 if (mac->media_type == HNAE3_MEDIA_TYPE_BACKPLANE && 2982 mac->module_type == HNAE3_MODULE_TYPE_UNKNOWN) 2983 mac->module_type = HNAE3_MODULE_TYPE_KR; 2984 else if (mac->media_type == HNAE3_MEDIA_TYPE_COPPER) 2985 mac->module_type = HNAE3_MODULE_TYPE_TP; 2986 2987 if (mac->support_autoneg) { 2988 linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, mac->supported); 2989 linkmode_copy(mac->advertising, mac->supported); 2990 } else { 2991 linkmode_clear_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, 2992 mac->supported); 2993 linkmode_zero(mac->advertising); 2994 } 2995 } 2996 2997 static int hclge_get_sfp_speed(struct hclge_dev *hdev, u32 *speed) 2998 { 2999 struct hclge_sfp_info_cmd *resp; 3000 struct hclge_desc desc; 3001 int ret; 3002 3003 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_GET_SFP_INFO, true); 3004 resp = (struct hclge_sfp_info_cmd *)desc.data; 3005 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 3006 if (ret == -EOPNOTSUPP) { 3007 dev_warn(&hdev->pdev->dev, 3008 "IMP do not support get SFP speed %d\n", ret); 3009 return ret; 3010 } else if (ret) { 3011 dev_err(&hdev->pdev->dev, "get sfp speed failed %d\n", ret); 3012 return ret; 3013 } 3014 3015 *speed = le32_to_cpu(resp->speed); 3016 3017 return 0; 3018 } 3019 3020 static int hclge_get_sfp_info(struct hclge_dev *hdev, struct hclge_mac *mac) 3021 { 3022 struct hclge_sfp_info_cmd *resp; 3023 struct hclge_desc desc; 3024 int ret; 3025 3026 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_GET_SFP_INFO, true); 3027 resp = (struct hclge_sfp_info_cmd *)desc.data; 3028 3029 resp->query_type = QUERY_ACTIVE_SPEED; 3030 3031 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 3032 if (ret == -EOPNOTSUPP) { 3033 dev_warn(&hdev->pdev->dev, 3034 "IMP does not support get SFP info %d\n", ret); 3035 return ret; 3036 } else if (ret) { 3037 dev_err(&hdev->pdev->dev, "get sfp info failed %d\n", ret); 3038 return ret; 3039 } 3040 3041 /* In some case, mac speed get from IMP may be 0, it shouldn't be 3042 * set to mac->speed. 3043 */ 3044 if (!le32_to_cpu(resp->speed)) 3045 return 0; 3046 3047 mac->speed = le32_to_cpu(resp->speed); 3048 /* if resp->speed_ability is 0, it means it's an old version 3049 * firmware, do not update these params 3050 */ 3051 if (resp->speed_ability) { 3052 mac->module_type = le32_to_cpu(resp->module_type); 3053 mac->speed_ability = le32_to_cpu(resp->speed_ability); 3054 mac->autoneg = resp->autoneg; 3055 mac->support_autoneg = resp->autoneg_ability; 3056 mac->speed_type = QUERY_ACTIVE_SPEED; 3057 if (!resp->active_fec) 3058 mac->fec_mode = 0; 3059 else 3060 mac->fec_mode = BIT(resp->active_fec); 3061 } else { 3062 mac->speed_type = QUERY_SFP_SPEED; 3063 } 3064 3065 return 0; 3066 } 3067 3068 static int hclge_get_phy_link_ksettings(struct hnae3_handle *handle, 3069 struct ethtool_link_ksettings *cmd) 3070 { 3071 struct hclge_desc desc[HCLGE_PHY_LINK_SETTING_BD_NUM]; 3072 struct hclge_vport *vport = hclge_get_vport(handle); 3073 struct hclge_phy_link_ksetting_0_cmd *req0; 3074 struct hclge_phy_link_ksetting_1_cmd *req1; 3075 u32 supported, advertising, lp_advertising; 3076 struct hclge_dev *hdev = vport->back; 3077 int ret; 3078 3079 hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_PHY_LINK_KSETTING, 3080 true); 3081 desc[0].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT); 3082 hclge_cmd_setup_basic_desc(&desc[1], HCLGE_OPC_PHY_LINK_KSETTING, 3083 true); 3084 3085 ret = hclge_cmd_send(&hdev->hw, desc, HCLGE_PHY_LINK_SETTING_BD_NUM); 3086 if (ret) { 3087 dev_err(&hdev->pdev->dev, 3088 "failed to get phy link ksetting, ret = %d.\n", ret); 3089 return ret; 3090 } 3091 3092 req0 = (struct hclge_phy_link_ksetting_0_cmd *)desc[0].data; 3093 cmd->base.autoneg = req0->autoneg; 3094 cmd->base.speed = le32_to_cpu(req0->speed); 3095 cmd->base.duplex = req0->duplex; 3096 cmd->base.port = req0->port; 3097 cmd->base.transceiver = req0->transceiver; 3098 cmd->base.phy_address = req0->phy_address; 3099 cmd->base.eth_tp_mdix = req0->eth_tp_mdix; 3100 cmd->base.eth_tp_mdix_ctrl = req0->eth_tp_mdix_ctrl; 3101 supported = le32_to_cpu(req0->supported); 3102 advertising = le32_to_cpu(req0->advertising); 3103 lp_advertising = le32_to_cpu(req0->lp_advertising); 3104 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported, 3105 supported); 3106 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising, 3107 advertising); 3108 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.lp_advertising, 3109 lp_advertising); 3110 3111 req1 = (struct hclge_phy_link_ksetting_1_cmd *)desc[1].data; 3112 cmd->base.master_slave_cfg = req1->master_slave_cfg; 3113 cmd->base.master_slave_state = req1->master_slave_state; 3114 3115 return 0; 3116 } 3117 3118 static int 3119 hclge_set_phy_link_ksettings(struct hnae3_handle *handle, 3120 const struct ethtool_link_ksettings *cmd) 3121 { 3122 struct hclge_desc desc[HCLGE_PHY_LINK_SETTING_BD_NUM]; 3123 struct hclge_vport *vport = hclge_get_vport(handle); 3124 struct hclge_phy_link_ksetting_0_cmd *req0; 3125 struct hclge_phy_link_ksetting_1_cmd *req1; 3126 struct hclge_dev *hdev = vport->back; 3127 u32 advertising; 3128 int ret; 3129 3130 if (cmd->base.autoneg == AUTONEG_DISABLE && 3131 ((cmd->base.speed != SPEED_100 && cmd->base.speed != SPEED_10) || 3132 (cmd->base.duplex != DUPLEX_HALF && 3133 cmd->base.duplex != DUPLEX_FULL))) 3134 return -EINVAL; 3135 3136 hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_PHY_LINK_KSETTING, 3137 false); 3138 desc[0].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT); 3139 hclge_cmd_setup_basic_desc(&desc[1], HCLGE_OPC_PHY_LINK_KSETTING, 3140 false); 3141 3142 req0 = (struct hclge_phy_link_ksetting_0_cmd *)desc[0].data; 3143 req0->autoneg = cmd->base.autoneg; 3144 req0->speed = cpu_to_le32(cmd->base.speed); 3145 req0->duplex = cmd->base.duplex; 3146 ethtool_convert_link_mode_to_legacy_u32(&advertising, 3147 cmd->link_modes.advertising); 3148 req0->advertising = cpu_to_le32(advertising); 3149 req0->eth_tp_mdix_ctrl = cmd->base.eth_tp_mdix_ctrl; 3150 3151 req1 = (struct hclge_phy_link_ksetting_1_cmd *)desc[1].data; 3152 req1->master_slave_cfg = cmd->base.master_slave_cfg; 3153 3154 ret = hclge_cmd_send(&hdev->hw, desc, HCLGE_PHY_LINK_SETTING_BD_NUM); 3155 if (ret) { 3156 dev_err(&hdev->pdev->dev, 3157 "failed to set phy link ksettings, ret = %d.\n", ret); 3158 return ret; 3159 } 3160 3161 hdev->hw.mac.autoneg = cmd->base.autoneg; 3162 hdev->hw.mac.speed = cmd->base.speed; 3163 hdev->hw.mac.duplex = cmd->base.duplex; 3164 linkmode_copy(hdev->hw.mac.advertising, cmd->link_modes.advertising); 3165 3166 return 0; 3167 } 3168 3169 static int hclge_update_tp_port_info(struct hclge_dev *hdev) 3170 { 3171 struct ethtool_link_ksettings cmd; 3172 int ret; 3173 3174 if (!hnae3_dev_phy_imp_supported(hdev)) 3175 return 0; 3176 3177 ret = hclge_get_phy_link_ksettings(&hdev->vport->nic, &cmd); 3178 if (ret) 3179 return ret; 3180 3181 hdev->hw.mac.autoneg = cmd.base.autoneg; 3182 hdev->hw.mac.speed = cmd.base.speed; 3183 hdev->hw.mac.duplex = cmd.base.duplex; 3184 3185 return 0; 3186 } 3187 3188 static int hclge_tp_port_init(struct hclge_dev *hdev) 3189 { 3190 struct ethtool_link_ksettings cmd; 3191 3192 if (!hnae3_dev_phy_imp_supported(hdev)) 3193 return 0; 3194 3195 cmd.base.autoneg = hdev->hw.mac.autoneg; 3196 cmd.base.speed = hdev->hw.mac.speed; 3197 cmd.base.duplex = hdev->hw.mac.duplex; 3198 linkmode_copy(cmd.link_modes.advertising, hdev->hw.mac.advertising); 3199 3200 return hclge_set_phy_link_ksettings(&hdev->vport->nic, &cmd); 3201 } 3202 3203 static int hclge_update_port_info(struct hclge_dev *hdev) 3204 { 3205 struct hclge_mac *mac = &hdev->hw.mac; 3206 int speed = HCLGE_MAC_SPEED_UNKNOWN; 3207 int ret; 3208 3209 /* get the port info from SFP cmd if not copper port */ 3210 if (mac->media_type == HNAE3_MEDIA_TYPE_COPPER) 3211 return hclge_update_tp_port_info(hdev); 3212 3213 /* if IMP does not support get SFP/qSFP info, return directly */ 3214 if (!hdev->support_sfp_query) 3215 return 0; 3216 3217 if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2) 3218 ret = hclge_get_sfp_info(hdev, mac); 3219 else 3220 ret = hclge_get_sfp_speed(hdev, &speed); 3221 3222 if (ret == -EOPNOTSUPP) { 3223 hdev->support_sfp_query = false; 3224 return ret; 3225 } else if (ret) { 3226 return ret; 3227 } 3228 3229 if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2) { 3230 if (mac->speed_type == QUERY_ACTIVE_SPEED) { 3231 hclge_update_port_capability(hdev, mac); 3232 return 0; 3233 } 3234 return hclge_cfg_mac_speed_dup(hdev, mac->speed, 3235 HCLGE_MAC_FULL); 3236 } else { 3237 if (speed == HCLGE_MAC_SPEED_UNKNOWN) 3238 return 0; /* do nothing if no SFP */ 3239 3240 /* must config full duplex for SFP */ 3241 return hclge_cfg_mac_speed_dup(hdev, speed, HCLGE_MAC_FULL); 3242 } 3243 } 3244 3245 static int hclge_get_status(struct hnae3_handle *handle) 3246 { 3247 struct hclge_vport *vport = hclge_get_vport(handle); 3248 struct hclge_dev *hdev = vport->back; 3249 3250 hclge_update_link_status(hdev); 3251 3252 return hdev->hw.mac.link; 3253 } 3254 3255 static struct hclge_vport *hclge_get_vf_vport(struct hclge_dev *hdev, int vf) 3256 { 3257 if (!pci_num_vf(hdev->pdev)) { 3258 dev_err(&hdev->pdev->dev, 3259 "SRIOV is disabled, can not get vport(%d) info.\n", vf); 3260 return NULL; 3261 } 3262 3263 if (vf < 0 || vf >= pci_num_vf(hdev->pdev)) { 3264 dev_err(&hdev->pdev->dev, 3265 "vf id(%d) is out of range(0 <= vfid < %d)\n", 3266 vf, pci_num_vf(hdev->pdev)); 3267 return NULL; 3268 } 3269 3270 /* VF start from 1 in vport */ 3271 vf += HCLGE_VF_VPORT_START_NUM; 3272 return &hdev->vport[vf]; 3273 } 3274 3275 static int hclge_get_vf_config(struct hnae3_handle *handle, int vf, 3276 struct ifla_vf_info *ivf) 3277 { 3278 struct hclge_vport *vport = hclge_get_vport(handle); 3279 struct hclge_dev *hdev = vport->back; 3280 3281 vport = hclge_get_vf_vport(hdev, vf); 3282 if (!vport) 3283 return -EINVAL; 3284 3285 ivf->vf = vf; 3286 ivf->linkstate = vport->vf_info.link_state; 3287 ivf->spoofchk = vport->vf_info.spoofchk; 3288 ivf->trusted = vport->vf_info.trusted; 3289 ivf->min_tx_rate = 0; 3290 ivf->max_tx_rate = vport->vf_info.max_tx_rate; 3291 ivf->vlan = vport->port_base_vlan_cfg.vlan_info.vlan_tag; 3292 ivf->vlan_proto = htons(vport->port_base_vlan_cfg.vlan_info.vlan_proto); 3293 ivf->qos = vport->port_base_vlan_cfg.vlan_info.qos; 3294 ether_addr_copy(ivf->mac, vport->vf_info.mac); 3295 3296 return 0; 3297 } 3298 3299 static int hclge_set_vf_link_state(struct hnae3_handle *handle, int vf, 3300 int link_state) 3301 { 3302 struct hclge_vport *vport = hclge_get_vport(handle); 3303 struct hclge_dev *hdev = vport->back; 3304 int link_state_old; 3305 int ret; 3306 3307 vport = hclge_get_vf_vport(hdev, vf); 3308 if (!vport) 3309 return -EINVAL; 3310 3311 link_state_old = vport->vf_info.link_state; 3312 vport->vf_info.link_state = link_state; 3313 3314 ret = hclge_push_vf_link_status(vport); 3315 if (ret) { 3316 vport->vf_info.link_state = link_state_old; 3317 dev_err(&hdev->pdev->dev, 3318 "failed to push vf%d link status, ret = %d\n", vf, ret); 3319 } 3320 3321 return ret; 3322 } 3323 3324 static u32 hclge_check_event_cause(struct hclge_dev *hdev, u32 *clearval) 3325 { 3326 u32 cmdq_src_reg, msix_src_reg, hw_err_src_reg; 3327 3328 /* fetch the events from their corresponding regs */ 3329 cmdq_src_reg = hclge_read_dev(&hdev->hw, HCLGE_VECTOR0_CMDQ_SRC_REG); 3330 msix_src_reg = hclge_read_dev(&hdev->hw, HCLGE_MISC_VECTOR_INT_STS); 3331 hw_err_src_reg = hclge_read_dev(&hdev->hw, 3332 HCLGE_RAS_PF_OTHER_INT_STS_REG); 3333 3334 /* Assumption: If by any chance reset and mailbox events are reported 3335 * together then we will only process reset event in this go and will 3336 * defer the processing of the mailbox events. Since, we would have not 3337 * cleared RX CMDQ event this time we would receive again another 3338 * interrupt from H/W just for the mailbox. 3339 * 3340 * check for vector0 reset event sources 3341 */ 3342 if (BIT(HCLGE_VECTOR0_IMPRESET_INT_B) & msix_src_reg) { 3343 dev_info(&hdev->pdev->dev, "IMP reset interrupt\n"); 3344 set_bit(HNAE3_IMP_RESET, &hdev->reset_pending); 3345 set_bit(HCLGE_STATE_CMD_DISABLE, &hdev->state); 3346 *clearval = BIT(HCLGE_VECTOR0_IMPRESET_INT_B); 3347 hdev->rst_stats.imp_rst_cnt++; 3348 return HCLGE_VECTOR0_EVENT_RST; 3349 } 3350 3351 if (BIT(HCLGE_VECTOR0_GLOBALRESET_INT_B) & msix_src_reg) { 3352 dev_info(&hdev->pdev->dev, "global reset interrupt\n"); 3353 set_bit(HCLGE_STATE_CMD_DISABLE, &hdev->state); 3354 set_bit(HNAE3_GLOBAL_RESET, &hdev->reset_pending); 3355 *clearval = BIT(HCLGE_VECTOR0_GLOBALRESET_INT_B); 3356 hdev->rst_stats.global_rst_cnt++; 3357 return HCLGE_VECTOR0_EVENT_RST; 3358 } 3359 3360 /* check for vector0 msix event and hardware error event source */ 3361 if (msix_src_reg & HCLGE_VECTOR0_REG_MSIX_MASK || 3362 hw_err_src_reg & HCLGE_RAS_REG_ERR_MASK) 3363 return HCLGE_VECTOR0_EVENT_ERR; 3364 3365 /* check for vector0 ptp event source */ 3366 if (BIT(HCLGE_VECTOR0_REG_PTP_INT_B) & msix_src_reg) { 3367 *clearval = msix_src_reg; 3368 return HCLGE_VECTOR0_EVENT_PTP; 3369 } 3370 3371 /* check for vector0 mailbox(=CMDQ RX) event source */ 3372 if (BIT(HCLGE_VECTOR0_RX_CMDQ_INT_B) & cmdq_src_reg) { 3373 cmdq_src_reg &= ~BIT(HCLGE_VECTOR0_RX_CMDQ_INT_B); 3374 *clearval = cmdq_src_reg; 3375 return HCLGE_VECTOR0_EVENT_MBX; 3376 } 3377 3378 /* print other vector0 event source */ 3379 dev_info(&hdev->pdev->dev, 3380 "INT status: CMDQ(%#x) HW errors(%#x) other(%#x)\n", 3381 cmdq_src_reg, hw_err_src_reg, msix_src_reg); 3382 3383 return HCLGE_VECTOR0_EVENT_OTHER; 3384 } 3385 3386 static void hclge_clear_event_cause(struct hclge_dev *hdev, u32 event_type, 3387 u32 regclr) 3388 { 3389 switch (event_type) { 3390 case HCLGE_VECTOR0_EVENT_PTP: 3391 case HCLGE_VECTOR0_EVENT_RST: 3392 hclge_write_dev(&hdev->hw, HCLGE_MISC_RESET_STS_REG, regclr); 3393 break; 3394 case HCLGE_VECTOR0_EVENT_MBX: 3395 hclge_write_dev(&hdev->hw, HCLGE_VECTOR0_CMDQ_SRC_REG, regclr); 3396 break; 3397 default: 3398 break; 3399 } 3400 } 3401 3402 static void hclge_clear_all_event_cause(struct hclge_dev *hdev) 3403 { 3404 hclge_clear_event_cause(hdev, HCLGE_VECTOR0_EVENT_RST, 3405 BIT(HCLGE_VECTOR0_GLOBALRESET_INT_B) | 3406 BIT(HCLGE_VECTOR0_CORERESET_INT_B) | 3407 BIT(HCLGE_VECTOR0_IMPRESET_INT_B)); 3408 hclge_clear_event_cause(hdev, HCLGE_VECTOR0_EVENT_MBX, 0); 3409 } 3410 3411 static void hclge_enable_vector(struct hclge_misc_vector *vector, bool enable) 3412 { 3413 writel(enable ? 1 : 0, vector->addr); 3414 } 3415 3416 static irqreturn_t hclge_misc_irq_handle(int irq, void *data) 3417 { 3418 struct hclge_dev *hdev = data; 3419 unsigned long flags; 3420 u32 clearval = 0; 3421 u32 event_cause; 3422 3423 hclge_enable_vector(&hdev->misc_vector, false); 3424 event_cause = hclge_check_event_cause(hdev, &clearval); 3425 3426 /* vector 0 interrupt is shared with reset and mailbox source events. */ 3427 switch (event_cause) { 3428 case HCLGE_VECTOR0_EVENT_ERR: 3429 hclge_errhand_task_schedule(hdev); 3430 break; 3431 case HCLGE_VECTOR0_EVENT_RST: 3432 hclge_reset_task_schedule(hdev); 3433 break; 3434 case HCLGE_VECTOR0_EVENT_PTP: 3435 spin_lock_irqsave(&hdev->ptp->lock, flags); 3436 hclge_ptp_clean_tx_hwts(hdev); 3437 spin_unlock_irqrestore(&hdev->ptp->lock, flags); 3438 break; 3439 case HCLGE_VECTOR0_EVENT_MBX: 3440 /* If we are here then, 3441 * 1. Either we are not handling any mbx task and we are not 3442 * scheduled as well 3443 * OR 3444 * 2. We could be handling a mbx task but nothing more is 3445 * scheduled. 3446 * In both cases, we should schedule mbx task as there are more 3447 * mbx messages reported by this interrupt. 3448 */ 3449 hclge_mbx_task_schedule(hdev); 3450 break; 3451 default: 3452 dev_warn(&hdev->pdev->dev, 3453 "received unknown or unhandled event of vector0\n"); 3454 break; 3455 } 3456 3457 hclge_clear_event_cause(hdev, event_cause, clearval); 3458 3459 /* Enable interrupt if it is not caused by reset event or error event */ 3460 if (event_cause == HCLGE_VECTOR0_EVENT_PTP || 3461 event_cause == HCLGE_VECTOR0_EVENT_MBX || 3462 event_cause == HCLGE_VECTOR0_EVENT_OTHER) 3463 hclge_enable_vector(&hdev->misc_vector, true); 3464 3465 return IRQ_HANDLED; 3466 } 3467 3468 static void hclge_free_vector(struct hclge_dev *hdev, int vector_id) 3469 { 3470 if (hdev->vector_status[vector_id] == HCLGE_INVALID_VPORT) { 3471 dev_warn(&hdev->pdev->dev, 3472 "vector(vector_id %d) has been freed.\n", vector_id); 3473 return; 3474 } 3475 3476 hdev->vector_status[vector_id] = HCLGE_INVALID_VPORT; 3477 hdev->num_msi_left += 1; 3478 hdev->num_msi_used -= 1; 3479 } 3480 3481 static void hclge_get_misc_vector(struct hclge_dev *hdev) 3482 { 3483 struct hclge_misc_vector *vector = &hdev->misc_vector; 3484 3485 vector->vector_irq = pci_irq_vector(hdev->pdev, 0); 3486 3487 vector->addr = hdev->hw.io_base + HCLGE_MISC_VECTOR_REG_BASE; 3488 hdev->vector_status[0] = 0; 3489 3490 hdev->num_msi_left -= 1; 3491 hdev->num_msi_used += 1; 3492 } 3493 3494 static void hclge_irq_affinity_notify(struct irq_affinity_notify *notify, 3495 const cpumask_t *mask) 3496 { 3497 struct hclge_dev *hdev = container_of(notify, struct hclge_dev, 3498 affinity_notify); 3499 3500 cpumask_copy(&hdev->affinity_mask, mask); 3501 } 3502 3503 static void hclge_irq_affinity_release(struct kref *ref) 3504 { 3505 } 3506 3507 static void hclge_misc_affinity_setup(struct hclge_dev *hdev) 3508 { 3509 irq_set_affinity_hint(hdev->misc_vector.vector_irq, 3510 &hdev->affinity_mask); 3511 3512 hdev->affinity_notify.notify = hclge_irq_affinity_notify; 3513 hdev->affinity_notify.release = hclge_irq_affinity_release; 3514 irq_set_affinity_notifier(hdev->misc_vector.vector_irq, 3515 &hdev->affinity_notify); 3516 } 3517 3518 static void hclge_misc_affinity_teardown(struct hclge_dev *hdev) 3519 { 3520 irq_set_affinity_notifier(hdev->misc_vector.vector_irq, NULL); 3521 irq_set_affinity_hint(hdev->misc_vector.vector_irq, NULL); 3522 } 3523 3524 static int hclge_misc_irq_init(struct hclge_dev *hdev) 3525 { 3526 int ret; 3527 3528 hclge_get_misc_vector(hdev); 3529 3530 /* this would be explicitly freed in the end */ 3531 snprintf(hdev->misc_vector.name, HNAE3_INT_NAME_LEN, "%s-misc-%s", 3532 HCLGE_NAME, pci_name(hdev->pdev)); 3533 ret = request_irq(hdev->misc_vector.vector_irq, hclge_misc_irq_handle, 3534 0, hdev->misc_vector.name, hdev); 3535 if (ret) { 3536 hclge_free_vector(hdev, 0); 3537 dev_err(&hdev->pdev->dev, "request misc irq(%d) fail\n", 3538 hdev->misc_vector.vector_irq); 3539 } 3540 3541 return ret; 3542 } 3543 3544 static void hclge_misc_irq_uninit(struct hclge_dev *hdev) 3545 { 3546 free_irq(hdev->misc_vector.vector_irq, hdev); 3547 hclge_free_vector(hdev, 0); 3548 } 3549 3550 int hclge_notify_client(struct hclge_dev *hdev, 3551 enum hnae3_reset_notify_type type) 3552 { 3553 struct hnae3_handle *handle = &hdev->vport[0].nic; 3554 struct hnae3_client *client = hdev->nic_client; 3555 int ret; 3556 3557 if (!test_bit(HCLGE_STATE_NIC_REGISTERED, &hdev->state) || !client) 3558 return 0; 3559 3560 if (!client->ops->reset_notify) 3561 return -EOPNOTSUPP; 3562 3563 ret = client->ops->reset_notify(handle, type); 3564 if (ret) 3565 dev_err(&hdev->pdev->dev, "notify nic client failed %d(%d)\n", 3566 type, ret); 3567 3568 return ret; 3569 } 3570 3571 static int hclge_notify_roce_client(struct hclge_dev *hdev, 3572 enum hnae3_reset_notify_type type) 3573 { 3574 struct hnae3_handle *handle = &hdev->vport[0].roce; 3575 struct hnae3_client *client = hdev->roce_client; 3576 int ret; 3577 3578 if (!test_bit(HCLGE_STATE_ROCE_REGISTERED, &hdev->state) || !client) 3579 return 0; 3580 3581 if (!client->ops->reset_notify) 3582 return -EOPNOTSUPP; 3583 3584 ret = client->ops->reset_notify(handle, type); 3585 if (ret) 3586 dev_err(&hdev->pdev->dev, "notify roce client failed %d(%d)", 3587 type, ret); 3588 3589 return ret; 3590 } 3591 3592 static int hclge_reset_wait(struct hclge_dev *hdev) 3593 { 3594 #define HCLGE_RESET_WATI_MS 100 3595 #define HCLGE_RESET_WAIT_CNT 350 3596 3597 u32 val, reg, reg_bit; 3598 u32 cnt = 0; 3599 3600 switch (hdev->reset_type) { 3601 case HNAE3_IMP_RESET: 3602 reg = HCLGE_GLOBAL_RESET_REG; 3603 reg_bit = HCLGE_IMP_RESET_BIT; 3604 break; 3605 case HNAE3_GLOBAL_RESET: 3606 reg = HCLGE_GLOBAL_RESET_REG; 3607 reg_bit = HCLGE_GLOBAL_RESET_BIT; 3608 break; 3609 case HNAE3_FUNC_RESET: 3610 reg = HCLGE_FUN_RST_ING; 3611 reg_bit = HCLGE_FUN_RST_ING_B; 3612 break; 3613 default: 3614 dev_err(&hdev->pdev->dev, 3615 "Wait for unsupported reset type: %d\n", 3616 hdev->reset_type); 3617 return -EINVAL; 3618 } 3619 3620 val = hclge_read_dev(&hdev->hw, reg); 3621 while (hnae3_get_bit(val, reg_bit) && cnt < HCLGE_RESET_WAIT_CNT) { 3622 msleep(HCLGE_RESET_WATI_MS); 3623 val = hclge_read_dev(&hdev->hw, reg); 3624 cnt++; 3625 } 3626 3627 if (cnt >= HCLGE_RESET_WAIT_CNT) { 3628 dev_warn(&hdev->pdev->dev, 3629 "Wait for reset timeout: %d\n", hdev->reset_type); 3630 return -EBUSY; 3631 } 3632 3633 return 0; 3634 } 3635 3636 static int hclge_set_vf_rst(struct hclge_dev *hdev, int func_id, bool reset) 3637 { 3638 struct hclge_vf_rst_cmd *req; 3639 struct hclge_desc desc; 3640 3641 req = (struct hclge_vf_rst_cmd *)desc.data; 3642 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_GBL_RST_STATUS, false); 3643 req->dest_vfid = func_id; 3644 3645 if (reset) 3646 req->vf_rst = 0x1; 3647 3648 return hclge_cmd_send(&hdev->hw, &desc, 1); 3649 } 3650 3651 static int hclge_set_all_vf_rst(struct hclge_dev *hdev, bool reset) 3652 { 3653 int i; 3654 3655 for (i = HCLGE_VF_VPORT_START_NUM; i < hdev->num_alloc_vport; i++) { 3656 struct hclge_vport *vport = &hdev->vport[i]; 3657 int ret; 3658 3659 /* Send cmd to set/clear VF's FUNC_RST_ING */ 3660 ret = hclge_set_vf_rst(hdev, vport->vport_id, reset); 3661 if (ret) { 3662 dev_err(&hdev->pdev->dev, 3663 "set vf(%u) rst failed %d!\n", 3664 vport->vport_id - HCLGE_VF_VPORT_START_NUM, 3665 ret); 3666 return ret; 3667 } 3668 3669 if (!reset || !test_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state)) 3670 continue; 3671 3672 /* Inform VF to process the reset. 3673 * hclge_inform_reset_assert_to_vf may fail if VF 3674 * driver is not loaded. 3675 */ 3676 ret = hclge_inform_reset_assert_to_vf(vport); 3677 if (ret) 3678 dev_warn(&hdev->pdev->dev, 3679 "inform reset to vf(%u) failed %d!\n", 3680 vport->vport_id - HCLGE_VF_VPORT_START_NUM, 3681 ret); 3682 } 3683 3684 return 0; 3685 } 3686 3687 static void hclge_mailbox_service_task(struct hclge_dev *hdev) 3688 { 3689 if (!test_and_clear_bit(HCLGE_STATE_MBX_SERVICE_SCHED, &hdev->state) || 3690 test_bit(HCLGE_STATE_CMD_DISABLE, &hdev->state) || 3691 test_and_set_bit(HCLGE_STATE_MBX_HANDLING, &hdev->state)) 3692 return; 3693 3694 hclge_mbx_handler(hdev); 3695 3696 clear_bit(HCLGE_STATE_MBX_HANDLING, &hdev->state); 3697 } 3698 3699 static void hclge_func_reset_sync_vf(struct hclge_dev *hdev) 3700 { 3701 struct hclge_pf_rst_sync_cmd *req; 3702 struct hclge_desc desc; 3703 int cnt = 0; 3704 int ret; 3705 3706 req = (struct hclge_pf_rst_sync_cmd *)desc.data; 3707 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_VF_RST_RDY, true); 3708 3709 do { 3710 /* vf need to down netdev by mbx during PF or FLR reset */ 3711 hclge_mailbox_service_task(hdev); 3712 3713 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 3714 /* for compatible with old firmware, wait 3715 * 100 ms for VF to stop IO 3716 */ 3717 if (ret == -EOPNOTSUPP) { 3718 msleep(HCLGE_RESET_SYNC_TIME); 3719 return; 3720 } else if (ret) { 3721 dev_warn(&hdev->pdev->dev, "sync with VF fail %d!\n", 3722 ret); 3723 return; 3724 } else if (req->all_vf_ready) { 3725 return; 3726 } 3727 msleep(HCLGE_PF_RESET_SYNC_TIME); 3728 hclge_cmd_reuse_desc(&desc, true); 3729 } while (cnt++ < HCLGE_PF_RESET_SYNC_CNT); 3730 3731 dev_warn(&hdev->pdev->dev, "sync with VF timeout!\n"); 3732 } 3733 3734 void hclge_report_hw_error(struct hclge_dev *hdev, 3735 enum hnae3_hw_error_type type) 3736 { 3737 struct hnae3_client *client = hdev->nic_client; 3738 3739 if (!client || !client->ops->process_hw_error || 3740 !test_bit(HCLGE_STATE_NIC_REGISTERED, &hdev->state)) 3741 return; 3742 3743 client->ops->process_hw_error(&hdev->vport[0].nic, type); 3744 } 3745 3746 static void hclge_handle_imp_error(struct hclge_dev *hdev) 3747 { 3748 u32 reg_val; 3749 3750 reg_val = hclge_read_dev(&hdev->hw, HCLGE_PF_OTHER_INT_REG); 3751 if (reg_val & BIT(HCLGE_VECTOR0_IMP_RD_POISON_B)) { 3752 hclge_report_hw_error(hdev, HNAE3_IMP_RD_POISON_ERROR); 3753 reg_val &= ~BIT(HCLGE_VECTOR0_IMP_RD_POISON_B); 3754 hclge_write_dev(&hdev->hw, HCLGE_PF_OTHER_INT_REG, reg_val); 3755 } 3756 3757 if (reg_val & BIT(HCLGE_VECTOR0_IMP_CMDQ_ERR_B)) { 3758 hclge_report_hw_error(hdev, HNAE3_CMDQ_ECC_ERROR); 3759 reg_val &= ~BIT(HCLGE_VECTOR0_IMP_CMDQ_ERR_B); 3760 hclge_write_dev(&hdev->hw, HCLGE_PF_OTHER_INT_REG, reg_val); 3761 } 3762 } 3763 3764 int hclge_func_reset_cmd(struct hclge_dev *hdev, int func_id) 3765 { 3766 struct hclge_desc desc; 3767 struct hclge_reset_cmd *req = (struct hclge_reset_cmd *)desc.data; 3768 int ret; 3769 3770 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CFG_RST_TRIGGER, false); 3771 hnae3_set_bit(req->mac_func_reset, HCLGE_CFG_RESET_FUNC_B, 1); 3772 req->fun_reset_vfid = func_id; 3773 3774 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 3775 if (ret) 3776 dev_err(&hdev->pdev->dev, 3777 "send function reset cmd fail, status =%d\n", ret); 3778 3779 return ret; 3780 } 3781 3782 static void hclge_do_reset(struct hclge_dev *hdev) 3783 { 3784 struct hnae3_handle *handle = &hdev->vport[0].nic; 3785 struct pci_dev *pdev = hdev->pdev; 3786 u32 val; 3787 3788 if (hclge_get_hw_reset_stat(handle)) { 3789 dev_info(&pdev->dev, "hardware reset not finish\n"); 3790 dev_info(&pdev->dev, "func_rst_reg:0x%x, global_rst_reg:0x%x\n", 3791 hclge_read_dev(&hdev->hw, HCLGE_FUN_RST_ING), 3792 hclge_read_dev(&hdev->hw, HCLGE_GLOBAL_RESET_REG)); 3793 return; 3794 } 3795 3796 switch (hdev->reset_type) { 3797 case HNAE3_IMP_RESET: 3798 dev_info(&pdev->dev, "IMP reset requested\n"); 3799 val = hclge_read_dev(&hdev->hw, HCLGE_PF_OTHER_INT_REG); 3800 hnae3_set_bit(val, HCLGE_TRIGGER_IMP_RESET_B, 1); 3801 hclge_write_dev(&hdev->hw, HCLGE_PF_OTHER_INT_REG, val); 3802 break; 3803 case HNAE3_GLOBAL_RESET: 3804 dev_info(&pdev->dev, "global reset requested\n"); 3805 val = hclge_read_dev(&hdev->hw, HCLGE_GLOBAL_RESET_REG); 3806 hnae3_set_bit(val, HCLGE_GLOBAL_RESET_BIT, 1); 3807 hclge_write_dev(&hdev->hw, HCLGE_GLOBAL_RESET_REG, val); 3808 break; 3809 case HNAE3_FUNC_RESET: 3810 dev_info(&pdev->dev, "PF reset requested\n"); 3811 /* schedule again to check later */ 3812 set_bit(HNAE3_FUNC_RESET, &hdev->reset_pending); 3813 hclge_reset_task_schedule(hdev); 3814 break; 3815 default: 3816 dev_warn(&pdev->dev, 3817 "unsupported reset type: %d\n", hdev->reset_type); 3818 break; 3819 } 3820 } 3821 3822 static enum hnae3_reset_type hclge_get_reset_level(struct hnae3_ae_dev *ae_dev, 3823 unsigned long *addr) 3824 { 3825 enum hnae3_reset_type rst_level = HNAE3_NONE_RESET; 3826 struct hclge_dev *hdev = ae_dev->priv; 3827 3828 /* return the highest priority reset level amongst all */ 3829 if (test_bit(HNAE3_IMP_RESET, addr)) { 3830 rst_level = HNAE3_IMP_RESET; 3831 clear_bit(HNAE3_IMP_RESET, addr); 3832 clear_bit(HNAE3_GLOBAL_RESET, addr); 3833 clear_bit(HNAE3_FUNC_RESET, addr); 3834 } else if (test_bit(HNAE3_GLOBAL_RESET, addr)) { 3835 rst_level = HNAE3_GLOBAL_RESET; 3836 clear_bit(HNAE3_GLOBAL_RESET, addr); 3837 clear_bit(HNAE3_FUNC_RESET, addr); 3838 } else if (test_bit(HNAE3_FUNC_RESET, addr)) { 3839 rst_level = HNAE3_FUNC_RESET; 3840 clear_bit(HNAE3_FUNC_RESET, addr); 3841 } else if (test_bit(HNAE3_FLR_RESET, addr)) { 3842 rst_level = HNAE3_FLR_RESET; 3843 clear_bit(HNAE3_FLR_RESET, addr); 3844 } 3845 3846 if (hdev->reset_type != HNAE3_NONE_RESET && 3847 rst_level < hdev->reset_type) 3848 return HNAE3_NONE_RESET; 3849 3850 return rst_level; 3851 } 3852 3853 static void hclge_clear_reset_cause(struct hclge_dev *hdev) 3854 { 3855 u32 clearval = 0; 3856 3857 switch (hdev->reset_type) { 3858 case HNAE3_IMP_RESET: 3859 clearval = BIT(HCLGE_VECTOR0_IMPRESET_INT_B); 3860 break; 3861 case HNAE3_GLOBAL_RESET: 3862 clearval = BIT(HCLGE_VECTOR0_GLOBALRESET_INT_B); 3863 break; 3864 default: 3865 break; 3866 } 3867 3868 if (!clearval) 3869 return; 3870 3871 /* For revision 0x20, the reset interrupt source 3872 * can only be cleared after hardware reset done 3873 */ 3874 if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2) 3875 hclge_write_dev(&hdev->hw, HCLGE_MISC_RESET_STS_REG, 3876 clearval); 3877 3878 hclge_enable_vector(&hdev->misc_vector, true); 3879 } 3880 3881 static void hclge_reset_handshake(struct hclge_dev *hdev, bool enable) 3882 { 3883 u32 reg_val; 3884 3885 reg_val = hclge_read_dev(&hdev->hw, HCLGE_NIC_CSQ_DEPTH_REG); 3886 if (enable) 3887 reg_val |= HCLGE_NIC_SW_RST_RDY; 3888 else 3889 reg_val &= ~HCLGE_NIC_SW_RST_RDY; 3890 3891 hclge_write_dev(&hdev->hw, HCLGE_NIC_CSQ_DEPTH_REG, reg_val); 3892 } 3893 3894 static int hclge_func_reset_notify_vf(struct hclge_dev *hdev) 3895 { 3896 int ret; 3897 3898 ret = hclge_set_all_vf_rst(hdev, true); 3899 if (ret) 3900 return ret; 3901 3902 hclge_func_reset_sync_vf(hdev); 3903 3904 return 0; 3905 } 3906 3907 static int hclge_reset_prepare_wait(struct hclge_dev *hdev) 3908 { 3909 u32 reg_val; 3910 int ret = 0; 3911 3912 switch (hdev->reset_type) { 3913 case HNAE3_FUNC_RESET: 3914 ret = hclge_func_reset_notify_vf(hdev); 3915 if (ret) 3916 return ret; 3917 3918 ret = hclge_func_reset_cmd(hdev, 0); 3919 if (ret) { 3920 dev_err(&hdev->pdev->dev, 3921 "asserting function reset fail %d!\n", ret); 3922 return ret; 3923 } 3924 3925 /* After performaning pf reset, it is not necessary to do the 3926 * mailbox handling or send any command to firmware, because 3927 * any mailbox handling or command to firmware is only valid 3928 * after hclge_cmd_init is called. 3929 */ 3930 set_bit(HCLGE_STATE_CMD_DISABLE, &hdev->state); 3931 hdev->rst_stats.pf_rst_cnt++; 3932 break; 3933 case HNAE3_FLR_RESET: 3934 ret = hclge_func_reset_notify_vf(hdev); 3935 if (ret) 3936 return ret; 3937 break; 3938 case HNAE3_IMP_RESET: 3939 hclge_handle_imp_error(hdev); 3940 reg_val = hclge_read_dev(&hdev->hw, HCLGE_PF_OTHER_INT_REG); 3941 hclge_write_dev(&hdev->hw, HCLGE_PF_OTHER_INT_REG, 3942 BIT(HCLGE_VECTOR0_IMP_RESET_INT_B) | reg_val); 3943 break; 3944 default: 3945 break; 3946 } 3947 3948 /* inform hardware that preparatory work is done */ 3949 msleep(HCLGE_RESET_SYNC_TIME); 3950 hclge_reset_handshake(hdev, true); 3951 dev_info(&hdev->pdev->dev, "prepare wait ok\n"); 3952 3953 return ret; 3954 } 3955 3956 static void hclge_show_rst_info(struct hclge_dev *hdev) 3957 { 3958 char *buf; 3959 3960 buf = kzalloc(HCLGE_DBG_RESET_INFO_LEN, GFP_KERNEL); 3961 if (!buf) 3962 return; 3963 3964 hclge_dbg_dump_rst_info(hdev, buf, HCLGE_DBG_RESET_INFO_LEN); 3965 3966 dev_info(&hdev->pdev->dev, "dump reset info:\n%s", buf); 3967 3968 kfree(buf); 3969 } 3970 3971 static bool hclge_reset_err_handle(struct hclge_dev *hdev) 3972 { 3973 #define MAX_RESET_FAIL_CNT 5 3974 3975 if (hdev->reset_pending) { 3976 dev_info(&hdev->pdev->dev, "Reset pending %lu\n", 3977 hdev->reset_pending); 3978 return true; 3979 } else if (hclge_read_dev(&hdev->hw, HCLGE_MISC_VECTOR_INT_STS) & 3980 HCLGE_RESET_INT_M) { 3981 dev_info(&hdev->pdev->dev, 3982 "reset failed because new reset interrupt\n"); 3983 hclge_clear_reset_cause(hdev); 3984 return false; 3985 } else if (hdev->rst_stats.reset_fail_cnt < MAX_RESET_FAIL_CNT) { 3986 hdev->rst_stats.reset_fail_cnt++; 3987 set_bit(hdev->reset_type, &hdev->reset_pending); 3988 dev_info(&hdev->pdev->dev, 3989 "re-schedule reset task(%u)\n", 3990 hdev->rst_stats.reset_fail_cnt); 3991 return true; 3992 } 3993 3994 hclge_clear_reset_cause(hdev); 3995 3996 /* recover the handshake status when reset fail */ 3997 hclge_reset_handshake(hdev, true); 3998 3999 dev_err(&hdev->pdev->dev, "Reset fail!\n"); 4000 4001 hclge_show_rst_info(hdev); 4002 4003 set_bit(HCLGE_STATE_RST_FAIL, &hdev->state); 4004 4005 return false; 4006 } 4007 4008 static void hclge_update_reset_level(struct hclge_dev *hdev) 4009 { 4010 struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev); 4011 enum hnae3_reset_type reset_level; 4012 4013 /* reset request will not be set during reset, so clear 4014 * pending reset request to avoid unnecessary reset 4015 * caused by the same reason. 4016 */ 4017 hclge_get_reset_level(ae_dev, &hdev->reset_request); 4018 4019 /* if default_reset_request has a higher level reset request, 4020 * it should be handled as soon as possible. since some errors 4021 * need this kind of reset to fix. 4022 */ 4023 reset_level = hclge_get_reset_level(ae_dev, 4024 &hdev->default_reset_request); 4025 if (reset_level != HNAE3_NONE_RESET) 4026 set_bit(reset_level, &hdev->reset_request); 4027 } 4028 4029 static int hclge_set_rst_done(struct hclge_dev *hdev) 4030 { 4031 struct hclge_pf_rst_done_cmd *req; 4032 struct hclge_desc desc; 4033 int ret; 4034 4035 req = (struct hclge_pf_rst_done_cmd *)desc.data; 4036 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_PF_RST_DONE, false); 4037 req->pf_rst_done |= HCLGE_PF_RESET_DONE_BIT; 4038 4039 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 4040 /* To be compatible with the old firmware, which does not support 4041 * command HCLGE_OPC_PF_RST_DONE, just print a warning and 4042 * return success 4043 */ 4044 if (ret == -EOPNOTSUPP) { 4045 dev_warn(&hdev->pdev->dev, 4046 "current firmware does not support command(0x%x)!\n", 4047 HCLGE_OPC_PF_RST_DONE); 4048 return 0; 4049 } else if (ret) { 4050 dev_err(&hdev->pdev->dev, "assert PF reset done fail %d!\n", 4051 ret); 4052 } 4053 4054 return ret; 4055 } 4056 4057 static int hclge_reset_prepare_up(struct hclge_dev *hdev) 4058 { 4059 int ret = 0; 4060 4061 switch (hdev->reset_type) { 4062 case HNAE3_FUNC_RESET: 4063 case HNAE3_FLR_RESET: 4064 ret = hclge_set_all_vf_rst(hdev, false); 4065 break; 4066 case HNAE3_GLOBAL_RESET: 4067 case HNAE3_IMP_RESET: 4068 ret = hclge_set_rst_done(hdev); 4069 break; 4070 default: 4071 break; 4072 } 4073 4074 /* clear up the handshake status after re-initialize done */ 4075 hclge_reset_handshake(hdev, false); 4076 4077 return ret; 4078 } 4079 4080 static int hclge_reset_stack(struct hclge_dev *hdev) 4081 { 4082 int ret; 4083 4084 ret = hclge_notify_client(hdev, HNAE3_UNINIT_CLIENT); 4085 if (ret) 4086 return ret; 4087 4088 ret = hclge_reset_ae_dev(hdev->ae_dev); 4089 if (ret) 4090 return ret; 4091 4092 return hclge_notify_client(hdev, HNAE3_INIT_CLIENT); 4093 } 4094 4095 static int hclge_reset_prepare(struct hclge_dev *hdev) 4096 { 4097 int ret; 4098 4099 hdev->rst_stats.reset_cnt++; 4100 /* perform reset of the stack & ae device for a client */ 4101 ret = hclge_notify_roce_client(hdev, HNAE3_DOWN_CLIENT); 4102 if (ret) 4103 return ret; 4104 4105 rtnl_lock(); 4106 ret = hclge_notify_client(hdev, HNAE3_DOWN_CLIENT); 4107 rtnl_unlock(); 4108 if (ret) 4109 return ret; 4110 4111 return hclge_reset_prepare_wait(hdev); 4112 } 4113 4114 static int hclge_reset_rebuild(struct hclge_dev *hdev) 4115 { 4116 int ret; 4117 4118 hdev->rst_stats.hw_reset_done_cnt++; 4119 4120 ret = hclge_notify_roce_client(hdev, HNAE3_UNINIT_CLIENT); 4121 if (ret) 4122 return ret; 4123 4124 rtnl_lock(); 4125 ret = hclge_reset_stack(hdev); 4126 rtnl_unlock(); 4127 if (ret) 4128 return ret; 4129 4130 hclge_clear_reset_cause(hdev); 4131 4132 ret = hclge_notify_roce_client(hdev, HNAE3_INIT_CLIENT); 4133 /* ignore RoCE notify error if it fails HCLGE_RESET_MAX_FAIL_CNT - 1 4134 * times 4135 */ 4136 if (ret && 4137 hdev->rst_stats.reset_fail_cnt < HCLGE_RESET_MAX_FAIL_CNT - 1) 4138 return ret; 4139 4140 ret = hclge_reset_prepare_up(hdev); 4141 if (ret) 4142 return ret; 4143 4144 rtnl_lock(); 4145 ret = hclge_notify_client(hdev, HNAE3_UP_CLIENT); 4146 rtnl_unlock(); 4147 if (ret) 4148 return ret; 4149 4150 ret = hclge_notify_roce_client(hdev, HNAE3_UP_CLIENT); 4151 if (ret) 4152 return ret; 4153 4154 hdev->last_reset_time = jiffies; 4155 hdev->rst_stats.reset_fail_cnt = 0; 4156 hdev->rst_stats.reset_done_cnt++; 4157 clear_bit(HCLGE_STATE_RST_FAIL, &hdev->state); 4158 4159 hclge_update_reset_level(hdev); 4160 4161 return 0; 4162 } 4163 4164 static void hclge_reset(struct hclge_dev *hdev) 4165 { 4166 if (hclge_reset_prepare(hdev)) 4167 goto err_reset; 4168 4169 if (hclge_reset_wait(hdev)) 4170 goto err_reset; 4171 4172 if (hclge_reset_rebuild(hdev)) 4173 goto err_reset; 4174 4175 return; 4176 4177 err_reset: 4178 if (hclge_reset_err_handle(hdev)) 4179 hclge_reset_task_schedule(hdev); 4180 } 4181 4182 static void hclge_reset_event(struct pci_dev *pdev, struct hnae3_handle *handle) 4183 { 4184 struct hnae3_ae_dev *ae_dev = pci_get_drvdata(pdev); 4185 struct hclge_dev *hdev = ae_dev->priv; 4186 4187 /* We might end up getting called broadly because of 2 below cases: 4188 * 1. Recoverable error was conveyed through APEI and only way to bring 4189 * normalcy is to reset. 4190 * 2. A new reset request from the stack due to timeout 4191 * 4192 * check if this is a new reset request and we are not here just because 4193 * last reset attempt did not succeed and watchdog hit us again. We will 4194 * know this if last reset request did not occur very recently (watchdog 4195 * timer = 5*HZ, let us check after sufficiently large time, say 4*5*Hz) 4196 * In case of new request we reset the "reset level" to PF reset. 4197 * And if it is a repeat reset request of the most recent one then we 4198 * want to make sure we throttle the reset request. Therefore, we will 4199 * not allow it again before 3*HZ times. 4200 */ 4201 4202 if (time_before(jiffies, (hdev->last_reset_time + 4203 HCLGE_RESET_INTERVAL))) { 4204 mod_timer(&hdev->reset_timer, jiffies + HCLGE_RESET_INTERVAL); 4205 return; 4206 } 4207 4208 if (hdev->default_reset_request) { 4209 hdev->reset_level = 4210 hclge_get_reset_level(ae_dev, 4211 &hdev->default_reset_request); 4212 } else if (time_after(jiffies, (hdev->last_reset_time + 4 * 5 * HZ))) { 4213 hdev->reset_level = HNAE3_FUNC_RESET; 4214 } 4215 4216 dev_info(&hdev->pdev->dev, "received reset event, reset type is %d\n", 4217 hdev->reset_level); 4218 4219 /* request reset & schedule reset task */ 4220 set_bit(hdev->reset_level, &hdev->reset_request); 4221 hclge_reset_task_schedule(hdev); 4222 4223 if (hdev->reset_level < HNAE3_GLOBAL_RESET) 4224 hdev->reset_level++; 4225 } 4226 4227 static void hclge_set_def_reset_request(struct hnae3_ae_dev *ae_dev, 4228 enum hnae3_reset_type rst_type) 4229 { 4230 struct hclge_dev *hdev = ae_dev->priv; 4231 4232 set_bit(rst_type, &hdev->default_reset_request); 4233 } 4234 4235 static void hclge_reset_timer(struct timer_list *t) 4236 { 4237 struct hclge_dev *hdev = from_timer(hdev, t, reset_timer); 4238 4239 /* if default_reset_request has no value, it means that this reset 4240 * request has already be handled, so just return here 4241 */ 4242 if (!hdev->default_reset_request) 4243 return; 4244 4245 dev_info(&hdev->pdev->dev, 4246 "triggering reset in reset timer\n"); 4247 hclge_reset_event(hdev->pdev, NULL); 4248 } 4249 4250 static void hclge_reset_subtask(struct hclge_dev *hdev) 4251 { 4252 struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev); 4253 4254 /* check if there is any ongoing reset in the hardware. This status can 4255 * be checked from reset_pending. If there is then, we need to wait for 4256 * hardware to complete reset. 4257 * a. If we are able to figure out in reasonable time that hardware 4258 * has fully resetted then, we can proceed with driver, client 4259 * reset. 4260 * b. else, we can come back later to check this status so re-sched 4261 * now. 4262 */ 4263 hdev->last_reset_time = jiffies; 4264 hdev->reset_type = hclge_get_reset_level(ae_dev, &hdev->reset_pending); 4265 if (hdev->reset_type != HNAE3_NONE_RESET) 4266 hclge_reset(hdev); 4267 4268 /* check if we got any *new* reset requests to be honored */ 4269 hdev->reset_type = hclge_get_reset_level(ae_dev, &hdev->reset_request); 4270 if (hdev->reset_type != HNAE3_NONE_RESET) 4271 hclge_do_reset(hdev); 4272 4273 hdev->reset_type = HNAE3_NONE_RESET; 4274 } 4275 4276 static void hclge_handle_err_reset_request(struct hclge_dev *hdev) 4277 { 4278 struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev); 4279 enum hnae3_reset_type reset_type; 4280 4281 if (ae_dev->hw_err_reset_req) { 4282 reset_type = hclge_get_reset_level(ae_dev, 4283 &ae_dev->hw_err_reset_req); 4284 hclge_set_def_reset_request(ae_dev, reset_type); 4285 } 4286 4287 if (hdev->default_reset_request && ae_dev->ops->reset_event) 4288 ae_dev->ops->reset_event(hdev->pdev, NULL); 4289 4290 /* enable interrupt after error handling complete */ 4291 hclge_enable_vector(&hdev->misc_vector, true); 4292 } 4293 4294 static void hclge_handle_err_recovery(struct hclge_dev *hdev) 4295 { 4296 struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev); 4297 4298 ae_dev->hw_err_reset_req = 0; 4299 4300 if (hclge_find_error_source(hdev)) { 4301 hclge_handle_error_info_log(ae_dev); 4302 hclge_handle_mac_tnl(hdev); 4303 } 4304 4305 hclge_handle_err_reset_request(hdev); 4306 } 4307 4308 static void hclge_misc_err_recovery(struct hclge_dev *hdev) 4309 { 4310 struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev); 4311 struct device *dev = &hdev->pdev->dev; 4312 u32 msix_sts_reg; 4313 4314 msix_sts_reg = hclge_read_dev(&hdev->hw, HCLGE_MISC_VECTOR_INT_STS); 4315 if (msix_sts_reg & HCLGE_VECTOR0_REG_MSIX_MASK) { 4316 if (hclge_handle_hw_msix_error 4317 (hdev, &hdev->default_reset_request)) 4318 dev_info(dev, "received msix interrupt 0x%x\n", 4319 msix_sts_reg); 4320 } 4321 4322 hclge_handle_hw_ras_error(ae_dev); 4323 4324 hclge_handle_err_reset_request(hdev); 4325 } 4326 4327 static void hclge_errhand_service_task(struct hclge_dev *hdev) 4328 { 4329 if (!test_and_clear_bit(HCLGE_STATE_ERR_SERVICE_SCHED, &hdev->state)) 4330 return; 4331 4332 if (hnae3_dev_ras_imp_supported(hdev)) 4333 hclge_handle_err_recovery(hdev); 4334 else 4335 hclge_misc_err_recovery(hdev); 4336 } 4337 4338 static void hclge_reset_service_task(struct hclge_dev *hdev) 4339 { 4340 if (!test_and_clear_bit(HCLGE_STATE_RST_SERVICE_SCHED, &hdev->state)) 4341 return; 4342 4343 down(&hdev->reset_sem); 4344 set_bit(HCLGE_STATE_RST_HANDLING, &hdev->state); 4345 4346 hclge_reset_subtask(hdev); 4347 4348 clear_bit(HCLGE_STATE_RST_HANDLING, &hdev->state); 4349 up(&hdev->reset_sem); 4350 } 4351 4352 static void hclge_update_vport_alive(struct hclge_dev *hdev) 4353 { 4354 int i; 4355 4356 /* start from vport 1 for PF is always alive */ 4357 for (i = 1; i < hdev->num_alloc_vport; i++) { 4358 struct hclge_vport *vport = &hdev->vport[i]; 4359 4360 if (time_after(jiffies, vport->last_active_jiffies + 8 * HZ)) 4361 clear_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state); 4362 4363 /* If vf is not alive, set to default value */ 4364 if (!test_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state)) 4365 vport->mps = HCLGE_MAC_DEFAULT_FRAME; 4366 } 4367 } 4368 4369 static void hclge_periodic_service_task(struct hclge_dev *hdev) 4370 { 4371 unsigned long delta = round_jiffies_relative(HZ); 4372 4373 if (test_bit(HCLGE_STATE_RST_FAIL, &hdev->state)) 4374 return; 4375 4376 /* Always handle the link updating to make sure link state is 4377 * updated when it is triggered by mbx. 4378 */ 4379 hclge_update_link_status(hdev); 4380 hclge_sync_mac_table(hdev); 4381 hclge_sync_promisc_mode(hdev); 4382 hclge_sync_fd_table(hdev); 4383 4384 if (time_is_after_jiffies(hdev->last_serv_processed + HZ)) { 4385 delta = jiffies - hdev->last_serv_processed; 4386 4387 if (delta < round_jiffies_relative(HZ)) { 4388 delta = round_jiffies_relative(HZ) - delta; 4389 goto out; 4390 } 4391 } 4392 4393 hdev->serv_processed_cnt++; 4394 hclge_update_vport_alive(hdev); 4395 4396 if (test_bit(HCLGE_STATE_DOWN, &hdev->state)) { 4397 hdev->last_serv_processed = jiffies; 4398 goto out; 4399 } 4400 4401 if (!(hdev->serv_processed_cnt % HCLGE_STATS_TIMER_INTERVAL)) 4402 hclge_update_stats_for_all(hdev); 4403 4404 hclge_update_port_info(hdev); 4405 hclge_sync_vlan_filter(hdev); 4406 4407 if (!(hdev->serv_processed_cnt % HCLGE_ARFS_EXPIRE_INTERVAL)) 4408 hclge_rfs_filter_expire(hdev); 4409 4410 hdev->last_serv_processed = jiffies; 4411 4412 out: 4413 hclge_task_schedule(hdev, delta); 4414 } 4415 4416 static void hclge_ptp_service_task(struct hclge_dev *hdev) 4417 { 4418 unsigned long flags; 4419 4420 if (!test_bit(HCLGE_STATE_PTP_EN, &hdev->state) || 4421 !test_bit(HCLGE_STATE_PTP_TX_HANDLING, &hdev->state) || 4422 !time_is_before_jiffies(hdev->ptp->tx_start + HZ)) 4423 return; 4424 4425 /* to prevent concurrence with the irq handler */ 4426 spin_lock_irqsave(&hdev->ptp->lock, flags); 4427 4428 /* check HCLGE_STATE_PTP_TX_HANDLING here again, since the irq 4429 * handler may handle it just before spin_lock_irqsave(). 4430 */ 4431 if (test_bit(HCLGE_STATE_PTP_TX_HANDLING, &hdev->state)) 4432 hclge_ptp_clean_tx_hwts(hdev); 4433 4434 spin_unlock_irqrestore(&hdev->ptp->lock, flags); 4435 } 4436 4437 static void hclge_service_task(struct work_struct *work) 4438 { 4439 struct hclge_dev *hdev = 4440 container_of(work, struct hclge_dev, service_task.work); 4441 4442 hclge_errhand_service_task(hdev); 4443 hclge_reset_service_task(hdev); 4444 hclge_ptp_service_task(hdev); 4445 hclge_mailbox_service_task(hdev); 4446 hclge_periodic_service_task(hdev); 4447 4448 /* Handle error recovery, reset and mbx again in case periodical task 4449 * delays the handling by calling hclge_task_schedule() in 4450 * hclge_periodic_service_task(). 4451 */ 4452 hclge_errhand_service_task(hdev); 4453 hclge_reset_service_task(hdev); 4454 hclge_mailbox_service_task(hdev); 4455 } 4456 4457 struct hclge_vport *hclge_get_vport(struct hnae3_handle *handle) 4458 { 4459 /* VF handle has no client */ 4460 if (!handle->client) 4461 return container_of(handle, struct hclge_vport, nic); 4462 else if (handle->client->type == HNAE3_CLIENT_ROCE) 4463 return container_of(handle, struct hclge_vport, roce); 4464 else 4465 return container_of(handle, struct hclge_vport, nic); 4466 } 4467 4468 static void hclge_get_vector_info(struct hclge_dev *hdev, u16 idx, 4469 struct hnae3_vector_info *vector_info) 4470 { 4471 #define HCLGE_PF_MAX_VECTOR_NUM_DEV_V2 64 4472 4473 vector_info->vector = pci_irq_vector(hdev->pdev, idx); 4474 4475 /* need an extend offset to config vector >= 64 */ 4476 if (idx - 1 < HCLGE_PF_MAX_VECTOR_NUM_DEV_V2) 4477 vector_info->io_addr = hdev->hw.io_base + 4478 HCLGE_VECTOR_REG_BASE + 4479 (idx - 1) * HCLGE_VECTOR_REG_OFFSET; 4480 else 4481 vector_info->io_addr = hdev->hw.io_base + 4482 HCLGE_VECTOR_EXT_REG_BASE + 4483 (idx - 1) / HCLGE_PF_MAX_VECTOR_NUM_DEV_V2 * 4484 HCLGE_VECTOR_REG_OFFSET_H + 4485 (idx - 1) % HCLGE_PF_MAX_VECTOR_NUM_DEV_V2 * 4486 HCLGE_VECTOR_REG_OFFSET; 4487 4488 hdev->vector_status[idx] = hdev->vport[0].vport_id; 4489 hdev->vector_irq[idx] = vector_info->vector; 4490 } 4491 4492 static int hclge_get_vector(struct hnae3_handle *handle, u16 vector_num, 4493 struct hnae3_vector_info *vector_info) 4494 { 4495 struct hclge_vport *vport = hclge_get_vport(handle); 4496 struct hnae3_vector_info *vector = vector_info; 4497 struct hclge_dev *hdev = vport->back; 4498 int alloc = 0; 4499 u16 i = 0; 4500 u16 j; 4501 4502 vector_num = min_t(u16, hdev->num_nic_msi - 1, vector_num); 4503 vector_num = min(hdev->num_msi_left, vector_num); 4504 4505 for (j = 0; j < vector_num; j++) { 4506 while (++i < hdev->num_nic_msi) { 4507 if (hdev->vector_status[i] == HCLGE_INVALID_VPORT) { 4508 hclge_get_vector_info(hdev, i, vector); 4509 vector++; 4510 alloc++; 4511 4512 break; 4513 } 4514 } 4515 } 4516 hdev->num_msi_left -= alloc; 4517 hdev->num_msi_used += alloc; 4518 4519 return alloc; 4520 } 4521 4522 static int hclge_get_vector_index(struct hclge_dev *hdev, int vector) 4523 { 4524 int i; 4525 4526 for (i = 0; i < hdev->num_msi; i++) 4527 if (vector == hdev->vector_irq[i]) 4528 return i; 4529 4530 return -EINVAL; 4531 } 4532 4533 static int hclge_put_vector(struct hnae3_handle *handle, int vector) 4534 { 4535 struct hclge_vport *vport = hclge_get_vport(handle); 4536 struct hclge_dev *hdev = vport->back; 4537 int vector_id; 4538 4539 vector_id = hclge_get_vector_index(hdev, vector); 4540 if (vector_id < 0) { 4541 dev_err(&hdev->pdev->dev, 4542 "Get vector index fail. vector = %d\n", vector); 4543 return vector_id; 4544 } 4545 4546 hclge_free_vector(hdev, vector_id); 4547 4548 return 0; 4549 } 4550 4551 static u32 hclge_get_rss_key_size(struct hnae3_handle *handle) 4552 { 4553 return HCLGE_RSS_KEY_SIZE; 4554 } 4555 4556 static int hclge_set_rss_algo_key(struct hclge_dev *hdev, 4557 const u8 hfunc, const u8 *key) 4558 { 4559 struct hclge_rss_config_cmd *req; 4560 unsigned int key_offset = 0; 4561 struct hclge_desc desc; 4562 int key_counts; 4563 int key_size; 4564 int ret; 4565 4566 key_counts = HCLGE_RSS_KEY_SIZE; 4567 req = (struct hclge_rss_config_cmd *)desc.data; 4568 4569 while (key_counts) { 4570 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_RSS_GENERIC_CONFIG, 4571 false); 4572 4573 req->hash_config |= (hfunc & HCLGE_RSS_HASH_ALGO_MASK); 4574 req->hash_config |= (key_offset << HCLGE_RSS_HASH_KEY_OFFSET_B); 4575 4576 key_size = min(HCLGE_RSS_HASH_KEY_NUM, key_counts); 4577 memcpy(req->hash_key, 4578 key + key_offset * HCLGE_RSS_HASH_KEY_NUM, key_size); 4579 4580 key_counts -= key_size; 4581 key_offset++; 4582 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 4583 if (ret) { 4584 dev_err(&hdev->pdev->dev, 4585 "Configure RSS config fail, status = %d\n", 4586 ret); 4587 return ret; 4588 } 4589 } 4590 return 0; 4591 } 4592 4593 static int hclge_set_rss_indir_table(struct hclge_dev *hdev, const u16 *indir) 4594 { 4595 struct hclge_rss_indirection_table_cmd *req; 4596 struct hclge_desc desc; 4597 int rss_cfg_tbl_num; 4598 u8 rss_msb_oft; 4599 u8 rss_msb_val; 4600 int ret; 4601 u16 qid; 4602 int i; 4603 u32 j; 4604 4605 req = (struct hclge_rss_indirection_table_cmd *)desc.data; 4606 rss_cfg_tbl_num = hdev->ae_dev->dev_specs.rss_ind_tbl_size / 4607 HCLGE_RSS_CFG_TBL_SIZE; 4608 4609 for (i = 0; i < rss_cfg_tbl_num; i++) { 4610 hclge_cmd_setup_basic_desc 4611 (&desc, HCLGE_OPC_RSS_INDIR_TABLE, false); 4612 4613 req->start_table_index = 4614 cpu_to_le16(i * HCLGE_RSS_CFG_TBL_SIZE); 4615 req->rss_set_bitmap = cpu_to_le16(HCLGE_RSS_SET_BITMAP_MSK); 4616 for (j = 0; j < HCLGE_RSS_CFG_TBL_SIZE; j++) { 4617 qid = indir[i * HCLGE_RSS_CFG_TBL_SIZE + j]; 4618 req->rss_qid_l[j] = qid & 0xff; 4619 rss_msb_oft = 4620 j * HCLGE_RSS_CFG_TBL_BW_H / BITS_PER_BYTE; 4621 rss_msb_val = (qid >> HCLGE_RSS_CFG_TBL_BW_L & 0x1) << 4622 (j * HCLGE_RSS_CFG_TBL_BW_H % BITS_PER_BYTE); 4623 req->rss_qid_h[rss_msb_oft] |= rss_msb_val; 4624 } 4625 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 4626 if (ret) { 4627 dev_err(&hdev->pdev->dev, 4628 "Configure rss indir table fail,status = %d\n", 4629 ret); 4630 return ret; 4631 } 4632 } 4633 return 0; 4634 } 4635 4636 static int hclge_set_rss_tc_mode(struct hclge_dev *hdev, u16 *tc_valid, 4637 u16 *tc_size, u16 *tc_offset) 4638 { 4639 struct hclge_rss_tc_mode_cmd *req; 4640 struct hclge_desc desc; 4641 int ret; 4642 int i; 4643 4644 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_RSS_TC_MODE, false); 4645 req = (struct hclge_rss_tc_mode_cmd *)desc.data; 4646 4647 for (i = 0; i < HCLGE_MAX_TC_NUM; i++) { 4648 u16 mode = 0; 4649 4650 hnae3_set_bit(mode, HCLGE_RSS_TC_VALID_B, (tc_valid[i] & 0x1)); 4651 hnae3_set_field(mode, HCLGE_RSS_TC_SIZE_M, 4652 HCLGE_RSS_TC_SIZE_S, tc_size[i]); 4653 hnae3_set_bit(mode, HCLGE_RSS_TC_SIZE_MSB_B, 4654 tc_size[i] >> HCLGE_RSS_TC_SIZE_MSB_OFFSET & 0x1); 4655 hnae3_set_field(mode, HCLGE_RSS_TC_OFFSET_M, 4656 HCLGE_RSS_TC_OFFSET_S, tc_offset[i]); 4657 4658 req->rss_tc_mode[i] = cpu_to_le16(mode); 4659 } 4660 4661 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 4662 if (ret) 4663 dev_err(&hdev->pdev->dev, 4664 "Configure rss tc mode fail, status = %d\n", ret); 4665 4666 return ret; 4667 } 4668 4669 static void hclge_get_rss_type(struct hclge_vport *vport) 4670 { 4671 if (vport->rss_tuple_sets.ipv4_tcp_en || 4672 vport->rss_tuple_sets.ipv4_udp_en || 4673 vport->rss_tuple_sets.ipv4_sctp_en || 4674 vport->rss_tuple_sets.ipv6_tcp_en || 4675 vport->rss_tuple_sets.ipv6_udp_en || 4676 vport->rss_tuple_sets.ipv6_sctp_en) 4677 vport->nic.kinfo.rss_type = PKT_HASH_TYPE_L4; 4678 else if (vport->rss_tuple_sets.ipv4_fragment_en || 4679 vport->rss_tuple_sets.ipv6_fragment_en) 4680 vport->nic.kinfo.rss_type = PKT_HASH_TYPE_L3; 4681 else 4682 vport->nic.kinfo.rss_type = PKT_HASH_TYPE_NONE; 4683 } 4684 4685 static int hclge_set_rss_input_tuple(struct hclge_dev *hdev) 4686 { 4687 struct hclge_rss_input_tuple_cmd *req; 4688 struct hclge_desc desc; 4689 int ret; 4690 4691 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_RSS_INPUT_TUPLE, false); 4692 4693 req = (struct hclge_rss_input_tuple_cmd *)desc.data; 4694 4695 /* Get the tuple cfg from pf */ 4696 req->ipv4_tcp_en = hdev->vport[0].rss_tuple_sets.ipv4_tcp_en; 4697 req->ipv4_udp_en = hdev->vport[0].rss_tuple_sets.ipv4_udp_en; 4698 req->ipv4_sctp_en = hdev->vport[0].rss_tuple_sets.ipv4_sctp_en; 4699 req->ipv4_fragment_en = hdev->vport[0].rss_tuple_sets.ipv4_fragment_en; 4700 req->ipv6_tcp_en = hdev->vport[0].rss_tuple_sets.ipv6_tcp_en; 4701 req->ipv6_udp_en = hdev->vport[0].rss_tuple_sets.ipv6_udp_en; 4702 req->ipv6_sctp_en = hdev->vport[0].rss_tuple_sets.ipv6_sctp_en; 4703 req->ipv6_fragment_en = hdev->vport[0].rss_tuple_sets.ipv6_fragment_en; 4704 hclge_get_rss_type(&hdev->vport[0]); 4705 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 4706 if (ret) 4707 dev_err(&hdev->pdev->dev, 4708 "Configure rss input fail, status = %d\n", ret); 4709 return ret; 4710 } 4711 4712 static int hclge_get_rss(struct hnae3_handle *handle, u32 *indir, 4713 u8 *key, u8 *hfunc) 4714 { 4715 struct hnae3_ae_dev *ae_dev = pci_get_drvdata(handle->pdev); 4716 struct hclge_vport *vport = hclge_get_vport(handle); 4717 int i; 4718 4719 /* Get hash algorithm */ 4720 if (hfunc) { 4721 switch (vport->rss_algo) { 4722 case HCLGE_RSS_HASH_ALGO_TOEPLITZ: 4723 *hfunc = ETH_RSS_HASH_TOP; 4724 break; 4725 case HCLGE_RSS_HASH_ALGO_SIMPLE: 4726 *hfunc = ETH_RSS_HASH_XOR; 4727 break; 4728 default: 4729 *hfunc = ETH_RSS_HASH_UNKNOWN; 4730 break; 4731 } 4732 } 4733 4734 /* Get the RSS Key required by the user */ 4735 if (key) 4736 memcpy(key, vport->rss_hash_key, HCLGE_RSS_KEY_SIZE); 4737 4738 /* Get indirect table */ 4739 if (indir) 4740 for (i = 0; i < ae_dev->dev_specs.rss_ind_tbl_size; i++) 4741 indir[i] = vport->rss_indirection_tbl[i]; 4742 4743 return 0; 4744 } 4745 4746 static int hclge_parse_rss_hfunc(struct hclge_vport *vport, const u8 hfunc, 4747 u8 *hash_algo) 4748 { 4749 switch (hfunc) { 4750 case ETH_RSS_HASH_TOP: 4751 *hash_algo = HCLGE_RSS_HASH_ALGO_TOEPLITZ; 4752 return 0; 4753 case ETH_RSS_HASH_XOR: 4754 *hash_algo = HCLGE_RSS_HASH_ALGO_SIMPLE; 4755 return 0; 4756 case ETH_RSS_HASH_NO_CHANGE: 4757 *hash_algo = vport->rss_algo; 4758 return 0; 4759 default: 4760 return -EINVAL; 4761 } 4762 } 4763 4764 static int hclge_set_rss(struct hnae3_handle *handle, const u32 *indir, 4765 const u8 *key, const u8 hfunc) 4766 { 4767 struct hnae3_ae_dev *ae_dev = pci_get_drvdata(handle->pdev); 4768 struct hclge_vport *vport = hclge_get_vport(handle); 4769 struct hclge_dev *hdev = vport->back; 4770 u8 hash_algo; 4771 int ret, i; 4772 4773 ret = hclge_parse_rss_hfunc(vport, hfunc, &hash_algo); 4774 if (ret) { 4775 dev_err(&hdev->pdev->dev, "invalid hfunc type %u\n", hfunc); 4776 return ret; 4777 } 4778 4779 /* Set the RSS Hash Key if specififed by the user */ 4780 if (key) { 4781 ret = hclge_set_rss_algo_key(hdev, hash_algo, key); 4782 if (ret) 4783 return ret; 4784 4785 /* Update the shadow RSS key with user specified qids */ 4786 memcpy(vport->rss_hash_key, key, HCLGE_RSS_KEY_SIZE); 4787 } else { 4788 ret = hclge_set_rss_algo_key(hdev, hash_algo, 4789 vport->rss_hash_key); 4790 if (ret) 4791 return ret; 4792 } 4793 vport->rss_algo = hash_algo; 4794 4795 /* Update the shadow RSS table with user specified qids */ 4796 for (i = 0; i < ae_dev->dev_specs.rss_ind_tbl_size; i++) 4797 vport->rss_indirection_tbl[i] = indir[i]; 4798 4799 /* Update the hardware */ 4800 return hclge_set_rss_indir_table(hdev, vport->rss_indirection_tbl); 4801 } 4802 4803 static u8 hclge_get_rss_hash_bits(struct ethtool_rxnfc *nfc) 4804 { 4805 u8 hash_sets = nfc->data & RXH_L4_B_0_1 ? HCLGE_S_PORT_BIT : 0; 4806 4807 if (nfc->data & RXH_L4_B_2_3) 4808 hash_sets |= HCLGE_D_PORT_BIT; 4809 else 4810 hash_sets &= ~HCLGE_D_PORT_BIT; 4811 4812 if (nfc->data & RXH_IP_SRC) 4813 hash_sets |= HCLGE_S_IP_BIT; 4814 else 4815 hash_sets &= ~HCLGE_S_IP_BIT; 4816 4817 if (nfc->data & RXH_IP_DST) 4818 hash_sets |= HCLGE_D_IP_BIT; 4819 else 4820 hash_sets &= ~HCLGE_D_IP_BIT; 4821 4822 if (nfc->flow_type == SCTP_V4_FLOW || nfc->flow_type == SCTP_V6_FLOW) 4823 hash_sets |= HCLGE_V_TAG_BIT; 4824 4825 return hash_sets; 4826 } 4827 4828 static int hclge_init_rss_tuple_cmd(struct hclge_vport *vport, 4829 struct ethtool_rxnfc *nfc, 4830 struct hclge_rss_input_tuple_cmd *req) 4831 { 4832 struct hclge_dev *hdev = vport->back; 4833 u8 tuple_sets; 4834 4835 req->ipv4_tcp_en = vport->rss_tuple_sets.ipv4_tcp_en; 4836 req->ipv4_udp_en = vport->rss_tuple_sets.ipv4_udp_en; 4837 req->ipv4_sctp_en = vport->rss_tuple_sets.ipv4_sctp_en; 4838 req->ipv4_fragment_en = vport->rss_tuple_sets.ipv4_fragment_en; 4839 req->ipv6_tcp_en = vport->rss_tuple_sets.ipv6_tcp_en; 4840 req->ipv6_udp_en = vport->rss_tuple_sets.ipv6_udp_en; 4841 req->ipv6_sctp_en = vport->rss_tuple_sets.ipv6_sctp_en; 4842 req->ipv6_fragment_en = vport->rss_tuple_sets.ipv6_fragment_en; 4843 4844 tuple_sets = hclge_get_rss_hash_bits(nfc); 4845 switch (nfc->flow_type) { 4846 case TCP_V4_FLOW: 4847 req->ipv4_tcp_en = tuple_sets; 4848 break; 4849 case TCP_V6_FLOW: 4850 req->ipv6_tcp_en = tuple_sets; 4851 break; 4852 case UDP_V4_FLOW: 4853 req->ipv4_udp_en = tuple_sets; 4854 break; 4855 case UDP_V6_FLOW: 4856 req->ipv6_udp_en = tuple_sets; 4857 break; 4858 case SCTP_V4_FLOW: 4859 req->ipv4_sctp_en = tuple_sets; 4860 break; 4861 case SCTP_V6_FLOW: 4862 if (hdev->ae_dev->dev_version <= HNAE3_DEVICE_VERSION_V2 && 4863 (nfc->data & (RXH_L4_B_0_1 | RXH_L4_B_2_3))) 4864 return -EINVAL; 4865 4866 req->ipv6_sctp_en = tuple_sets; 4867 break; 4868 case IPV4_FLOW: 4869 req->ipv4_fragment_en = HCLGE_RSS_INPUT_TUPLE_OTHER; 4870 break; 4871 case IPV6_FLOW: 4872 req->ipv6_fragment_en = HCLGE_RSS_INPUT_TUPLE_OTHER; 4873 break; 4874 default: 4875 return -EINVAL; 4876 } 4877 4878 return 0; 4879 } 4880 4881 static int hclge_set_rss_tuple(struct hnae3_handle *handle, 4882 struct ethtool_rxnfc *nfc) 4883 { 4884 struct hclge_vport *vport = hclge_get_vport(handle); 4885 struct hclge_dev *hdev = vport->back; 4886 struct hclge_rss_input_tuple_cmd *req; 4887 struct hclge_desc desc; 4888 int ret; 4889 4890 if (nfc->data & ~(RXH_IP_SRC | RXH_IP_DST | 4891 RXH_L4_B_0_1 | RXH_L4_B_2_3)) 4892 return -EINVAL; 4893 4894 req = (struct hclge_rss_input_tuple_cmd *)desc.data; 4895 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_RSS_INPUT_TUPLE, false); 4896 4897 ret = hclge_init_rss_tuple_cmd(vport, nfc, req); 4898 if (ret) { 4899 dev_err(&hdev->pdev->dev, 4900 "failed to init rss tuple cmd, ret = %d\n", ret); 4901 return ret; 4902 } 4903 4904 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 4905 if (ret) { 4906 dev_err(&hdev->pdev->dev, 4907 "Set rss tuple fail, status = %d\n", ret); 4908 return ret; 4909 } 4910 4911 vport->rss_tuple_sets.ipv4_tcp_en = req->ipv4_tcp_en; 4912 vport->rss_tuple_sets.ipv4_udp_en = req->ipv4_udp_en; 4913 vport->rss_tuple_sets.ipv4_sctp_en = req->ipv4_sctp_en; 4914 vport->rss_tuple_sets.ipv4_fragment_en = req->ipv4_fragment_en; 4915 vport->rss_tuple_sets.ipv6_tcp_en = req->ipv6_tcp_en; 4916 vport->rss_tuple_sets.ipv6_udp_en = req->ipv6_udp_en; 4917 vport->rss_tuple_sets.ipv6_sctp_en = req->ipv6_sctp_en; 4918 vport->rss_tuple_sets.ipv6_fragment_en = req->ipv6_fragment_en; 4919 hclge_get_rss_type(vport); 4920 return 0; 4921 } 4922 4923 static int hclge_get_vport_rss_tuple(struct hclge_vport *vport, int flow_type, 4924 u8 *tuple_sets) 4925 { 4926 switch (flow_type) { 4927 case TCP_V4_FLOW: 4928 *tuple_sets = vport->rss_tuple_sets.ipv4_tcp_en; 4929 break; 4930 case UDP_V4_FLOW: 4931 *tuple_sets = vport->rss_tuple_sets.ipv4_udp_en; 4932 break; 4933 case TCP_V6_FLOW: 4934 *tuple_sets = vport->rss_tuple_sets.ipv6_tcp_en; 4935 break; 4936 case UDP_V6_FLOW: 4937 *tuple_sets = vport->rss_tuple_sets.ipv6_udp_en; 4938 break; 4939 case SCTP_V4_FLOW: 4940 *tuple_sets = vport->rss_tuple_sets.ipv4_sctp_en; 4941 break; 4942 case SCTP_V6_FLOW: 4943 *tuple_sets = vport->rss_tuple_sets.ipv6_sctp_en; 4944 break; 4945 case IPV4_FLOW: 4946 case IPV6_FLOW: 4947 *tuple_sets = HCLGE_S_IP_BIT | HCLGE_D_IP_BIT; 4948 break; 4949 default: 4950 return -EINVAL; 4951 } 4952 4953 return 0; 4954 } 4955 4956 static u64 hclge_convert_rss_tuple(u8 tuple_sets) 4957 { 4958 u64 tuple_data = 0; 4959 4960 if (tuple_sets & HCLGE_D_PORT_BIT) 4961 tuple_data |= RXH_L4_B_2_3; 4962 if (tuple_sets & HCLGE_S_PORT_BIT) 4963 tuple_data |= RXH_L4_B_0_1; 4964 if (tuple_sets & HCLGE_D_IP_BIT) 4965 tuple_data |= RXH_IP_DST; 4966 if (tuple_sets & HCLGE_S_IP_BIT) 4967 tuple_data |= RXH_IP_SRC; 4968 4969 return tuple_data; 4970 } 4971 4972 static int hclge_get_rss_tuple(struct hnae3_handle *handle, 4973 struct ethtool_rxnfc *nfc) 4974 { 4975 struct hclge_vport *vport = hclge_get_vport(handle); 4976 u8 tuple_sets; 4977 int ret; 4978 4979 nfc->data = 0; 4980 4981 ret = hclge_get_vport_rss_tuple(vport, nfc->flow_type, &tuple_sets); 4982 if (ret || !tuple_sets) 4983 return ret; 4984 4985 nfc->data = hclge_convert_rss_tuple(tuple_sets); 4986 4987 return 0; 4988 } 4989 4990 static int hclge_get_tc_size(struct hnae3_handle *handle) 4991 { 4992 struct hclge_vport *vport = hclge_get_vport(handle); 4993 struct hclge_dev *hdev = vport->back; 4994 4995 return hdev->pf_rss_size_max; 4996 } 4997 4998 static int hclge_init_rss_tc_mode(struct hclge_dev *hdev) 4999 { 5000 struct hnae3_ae_dev *ae_dev = hdev->ae_dev; 5001 struct hclge_vport *vport = hdev->vport; 5002 u16 tc_offset[HCLGE_MAX_TC_NUM] = {0}; 5003 u16 tc_valid[HCLGE_MAX_TC_NUM] = {0}; 5004 u16 tc_size[HCLGE_MAX_TC_NUM] = {0}; 5005 struct hnae3_tc_info *tc_info; 5006 u16 roundup_size; 5007 u16 rss_size; 5008 int i; 5009 5010 tc_info = &vport->nic.kinfo.tc_info; 5011 for (i = 0; i < HCLGE_MAX_TC_NUM; i++) { 5012 rss_size = tc_info->tqp_count[i]; 5013 tc_valid[i] = 0; 5014 5015 if (!(hdev->hw_tc_map & BIT(i))) 5016 continue; 5017 5018 /* tc_size set to hardware is the log2 of roundup power of two 5019 * of rss_size, the acutal queue size is limited by indirection 5020 * table. 5021 */ 5022 if (rss_size > ae_dev->dev_specs.rss_ind_tbl_size || 5023 rss_size == 0) { 5024 dev_err(&hdev->pdev->dev, 5025 "Configure rss tc size failed, invalid TC_SIZE = %u\n", 5026 rss_size); 5027 return -EINVAL; 5028 } 5029 5030 roundup_size = roundup_pow_of_two(rss_size); 5031 roundup_size = ilog2(roundup_size); 5032 5033 tc_valid[i] = 1; 5034 tc_size[i] = roundup_size; 5035 tc_offset[i] = tc_info->tqp_offset[i]; 5036 } 5037 5038 return hclge_set_rss_tc_mode(hdev, tc_valid, tc_size, tc_offset); 5039 } 5040 5041 int hclge_rss_init_hw(struct hclge_dev *hdev) 5042 { 5043 struct hclge_vport *vport = hdev->vport; 5044 u16 *rss_indir = vport[0].rss_indirection_tbl; 5045 u8 *key = vport[0].rss_hash_key; 5046 u8 hfunc = vport[0].rss_algo; 5047 int ret; 5048 5049 ret = hclge_set_rss_indir_table(hdev, rss_indir); 5050 if (ret) 5051 return ret; 5052 5053 ret = hclge_set_rss_algo_key(hdev, hfunc, key); 5054 if (ret) 5055 return ret; 5056 5057 ret = hclge_set_rss_input_tuple(hdev); 5058 if (ret) 5059 return ret; 5060 5061 return hclge_init_rss_tc_mode(hdev); 5062 } 5063 5064 void hclge_rss_indir_init_cfg(struct hclge_dev *hdev) 5065 { 5066 struct hclge_vport *vport = &hdev->vport[0]; 5067 int i; 5068 5069 for (i = 0; i < hdev->ae_dev->dev_specs.rss_ind_tbl_size; i++) 5070 vport->rss_indirection_tbl[i] = i % vport->alloc_rss_size; 5071 } 5072 5073 static int hclge_rss_init_cfg(struct hclge_dev *hdev) 5074 { 5075 u16 rss_ind_tbl_size = hdev->ae_dev->dev_specs.rss_ind_tbl_size; 5076 int rss_algo = HCLGE_RSS_HASH_ALGO_TOEPLITZ; 5077 struct hclge_vport *vport = &hdev->vport[0]; 5078 u16 *rss_ind_tbl; 5079 5080 if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2) 5081 rss_algo = HCLGE_RSS_HASH_ALGO_SIMPLE; 5082 5083 vport->rss_tuple_sets.ipv4_tcp_en = HCLGE_RSS_INPUT_TUPLE_OTHER; 5084 vport->rss_tuple_sets.ipv4_udp_en = HCLGE_RSS_INPUT_TUPLE_OTHER; 5085 vport->rss_tuple_sets.ipv4_sctp_en = HCLGE_RSS_INPUT_TUPLE_SCTP; 5086 vport->rss_tuple_sets.ipv4_fragment_en = HCLGE_RSS_INPUT_TUPLE_OTHER; 5087 vport->rss_tuple_sets.ipv6_tcp_en = HCLGE_RSS_INPUT_TUPLE_OTHER; 5088 vport->rss_tuple_sets.ipv6_udp_en = HCLGE_RSS_INPUT_TUPLE_OTHER; 5089 vport->rss_tuple_sets.ipv6_sctp_en = 5090 hdev->ae_dev->dev_version <= HNAE3_DEVICE_VERSION_V2 ? 5091 HCLGE_RSS_INPUT_TUPLE_SCTP_NO_PORT : 5092 HCLGE_RSS_INPUT_TUPLE_SCTP; 5093 vport->rss_tuple_sets.ipv6_fragment_en = HCLGE_RSS_INPUT_TUPLE_OTHER; 5094 5095 vport->rss_algo = rss_algo; 5096 5097 rss_ind_tbl = devm_kcalloc(&hdev->pdev->dev, rss_ind_tbl_size, 5098 sizeof(*rss_ind_tbl), GFP_KERNEL); 5099 if (!rss_ind_tbl) 5100 return -ENOMEM; 5101 5102 vport->rss_indirection_tbl = rss_ind_tbl; 5103 memcpy(vport->rss_hash_key, hclge_hash_key, HCLGE_RSS_KEY_SIZE); 5104 5105 hclge_rss_indir_init_cfg(hdev); 5106 5107 return 0; 5108 } 5109 5110 int hclge_bind_ring_with_vector(struct hclge_vport *vport, 5111 int vector_id, bool en, 5112 struct hnae3_ring_chain_node *ring_chain) 5113 { 5114 struct hclge_dev *hdev = vport->back; 5115 struct hnae3_ring_chain_node *node; 5116 struct hclge_desc desc; 5117 struct hclge_ctrl_vector_chain_cmd *req = 5118 (struct hclge_ctrl_vector_chain_cmd *)desc.data; 5119 enum hclge_cmd_status status; 5120 enum hclge_opcode_type op; 5121 u16 tqp_type_and_id; 5122 int i; 5123 5124 op = en ? HCLGE_OPC_ADD_RING_TO_VECTOR : HCLGE_OPC_DEL_RING_TO_VECTOR; 5125 hclge_cmd_setup_basic_desc(&desc, op, false); 5126 req->int_vector_id_l = hnae3_get_field(vector_id, 5127 HCLGE_VECTOR_ID_L_M, 5128 HCLGE_VECTOR_ID_L_S); 5129 req->int_vector_id_h = hnae3_get_field(vector_id, 5130 HCLGE_VECTOR_ID_H_M, 5131 HCLGE_VECTOR_ID_H_S); 5132 5133 i = 0; 5134 for (node = ring_chain; node; node = node->next) { 5135 tqp_type_and_id = le16_to_cpu(req->tqp_type_and_id[i]); 5136 hnae3_set_field(tqp_type_and_id, HCLGE_INT_TYPE_M, 5137 HCLGE_INT_TYPE_S, 5138 hnae3_get_bit(node->flag, HNAE3_RING_TYPE_B)); 5139 hnae3_set_field(tqp_type_and_id, HCLGE_TQP_ID_M, 5140 HCLGE_TQP_ID_S, node->tqp_index); 5141 hnae3_set_field(tqp_type_and_id, HCLGE_INT_GL_IDX_M, 5142 HCLGE_INT_GL_IDX_S, 5143 hnae3_get_field(node->int_gl_idx, 5144 HNAE3_RING_GL_IDX_M, 5145 HNAE3_RING_GL_IDX_S)); 5146 req->tqp_type_and_id[i] = cpu_to_le16(tqp_type_and_id); 5147 if (++i >= HCLGE_VECTOR_ELEMENTS_PER_CMD) { 5148 req->int_cause_num = HCLGE_VECTOR_ELEMENTS_PER_CMD; 5149 req->vfid = vport->vport_id; 5150 5151 status = hclge_cmd_send(&hdev->hw, &desc, 1); 5152 if (status) { 5153 dev_err(&hdev->pdev->dev, 5154 "Map TQP fail, status is %d.\n", 5155 status); 5156 return -EIO; 5157 } 5158 i = 0; 5159 5160 hclge_cmd_setup_basic_desc(&desc, 5161 op, 5162 false); 5163 req->int_vector_id_l = 5164 hnae3_get_field(vector_id, 5165 HCLGE_VECTOR_ID_L_M, 5166 HCLGE_VECTOR_ID_L_S); 5167 req->int_vector_id_h = 5168 hnae3_get_field(vector_id, 5169 HCLGE_VECTOR_ID_H_M, 5170 HCLGE_VECTOR_ID_H_S); 5171 } 5172 } 5173 5174 if (i > 0) { 5175 req->int_cause_num = i; 5176 req->vfid = vport->vport_id; 5177 status = hclge_cmd_send(&hdev->hw, &desc, 1); 5178 if (status) { 5179 dev_err(&hdev->pdev->dev, 5180 "Map TQP fail, status is %d.\n", status); 5181 return -EIO; 5182 } 5183 } 5184 5185 return 0; 5186 } 5187 5188 static int hclge_map_ring_to_vector(struct hnae3_handle *handle, int vector, 5189 struct hnae3_ring_chain_node *ring_chain) 5190 { 5191 struct hclge_vport *vport = hclge_get_vport(handle); 5192 struct hclge_dev *hdev = vport->back; 5193 int vector_id; 5194 5195 vector_id = hclge_get_vector_index(hdev, vector); 5196 if (vector_id < 0) { 5197 dev_err(&hdev->pdev->dev, 5198 "failed to get vector index. vector=%d\n", vector); 5199 return vector_id; 5200 } 5201 5202 return hclge_bind_ring_with_vector(vport, vector_id, true, ring_chain); 5203 } 5204 5205 static int hclge_unmap_ring_frm_vector(struct hnae3_handle *handle, int vector, 5206 struct hnae3_ring_chain_node *ring_chain) 5207 { 5208 struct hclge_vport *vport = hclge_get_vport(handle); 5209 struct hclge_dev *hdev = vport->back; 5210 int vector_id, ret; 5211 5212 if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state)) 5213 return 0; 5214 5215 vector_id = hclge_get_vector_index(hdev, vector); 5216 if (vector_id < 0) { 5217 dev_err(&handle->pdev->dev, 5218 "Get vector index fail. ret =%d\n", vector_id); 5219 return vector_id; 5220 } 5221 5222 ret = hclge_bind_ring_with_vector(vport, vector_id, false, ring_chain); 5223 if (ret) 5224 dev_err(&handle->pdev->dev, 5225 "Unmap ring from vector fail. vectorid=%d, ret =%d\n", 5226 vector_id, ret); 5227 5228 return ret; 5229 } 5230 5231 static int hclge_cmd_set_promisc_mode(struct hclge_dev *hdev, u8 vf_id, 5232 bool en_uc, bool en_mc, bool en_bc) 5233 { 5234 struct hclge_vport *vport = &hdev->vport[vf_id]; 5235 struct hnae3_handle *handle = &vport->nic; 5236 struct hclge_promisc_cfg_cmd *req; 5237 struct hclge_desc desc; 5238 bool uc_tx_en = en_uc; 5239 u8 promisc_cfg = 0; 5240 int ret; 5241 5242 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CFG_PROMISC_MODE, false); 5243 5244 req = (struct hclge_promisc_cfg_cmd *)desc.data; 5245 req->vf_id = vf_id; 5246 5247 if (test_bit(HNAE3_PFLAG_LIMIT_PROMISC, &handle->priv_flags)) 5248 uc_tx_en = false; 5249 5250 hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_UC_RX_EN, en_uc ? 1 : 0); 5251 hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_MC_RX_EN, en_mc ? 1 : 0); 5252 hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_BC_RX_EN, en_bc ? 1 : 0); 5253 hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_UC_TX_EN, uc_tx_en ? 1 : 0); 5254 hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_MC_TX_EN, en_mc ? 1 : 0); 5255 hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_BC_TX_EN, en_bc ? 1 : 0); 5256 req->extend_promisc = promisc_cfg; 5257 5258 /* to be compatible with DEVICE_VERSION_V1/2 */ 5259 promisc_cfg = 0; 5260 hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_EN_UC, en_uc ? 1 : 0); 5261 hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_EN_MC, en_mc ? 1 : 0); 5262 hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_EN_BC, en_bc ? 1 : 0); 5263 hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_TX_EN, 1); 5264 hnae3_set_bit(promisc_cfg, HCLGE_PROMISC_RX_EN, 1); 5265 req->promisc = promisc_cfg; 5266 5267 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 5268 if (ret) 5269 dev_err(&hdev->pdev->dev, 5270 "failed to set vport %u promisc mode, ret = %d.\n", 5271 vf_id, ret); 5272 5273 return ret; 5274 } 5275 5276 int hclge_set_vport_promisc_mode(struct hclge_vport *vport, bool en_uc_pmc, 5277 bool en_mc_pmc, bool en_bc_pmc) 5278 { 5279 return hclge_cmd_set_promisc_mode(vport->back, vport->vport_id, 5280 en_uc_pmc, en_mc_pmc, en_bc_pmc); 5281 } 5282 5283 static int hclge_set_promisc_mode(struct hnae3_handle *handle, bool en_uc_pmc, 5284 bool en_mc_pmc) 5285 { 5286 struct hclge_vport *vport = hclge_get_vport(handle); 5287 struct hclge_dev *hdev = vport->back; 5288 bool en_bc_pmc = true; 5289 5290 /* For device whose version below V2, if broadcast promisc enabled, 5291 * vlan filter is always bypassed. So broadcast promisc should be 5292 * disabled until user enable promisc mode 5293 */ 5294 if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2) 5295 en_bc_pmc = handle->netdev_flags & HNAE3_BPE ? true : false; 5296 5297 return hclge_set_vport_promisc_mode(vport, en_uc_pmc, en_mc_pmc, 5298 en_bc_pmc); 5299 } 5300 5301 static void hclge_request_update_promisc_mode(struct hnae3_handle *handle) 5302 { 5303 struct hclge_vport *vport = hclge_get_vport(handle); 5304 5305 set_bit(HCLGE_VPORT_STATE_PROMISC_CHANGE, &vport->state); 5306 } 5307 5308 static void hclge_sync_fd_state(struct hclge_dev *hdev) 5309 { 5310 if (hlist_empty(&hdev->fd_rule_list)) 5311 hdev->fd_active_type = HCLGE_FD_RULE_NONE; 5312 } 5313 5314 static void hclge_fd_inc_rule_cnt(struct hclge_dev *hdev, u16 location) 5315 { 5316 if (!test_bit(location, hdev->fd_bmap)) { 5317 set_bit(location, hdev->fd_bmap); 5318 hdev->hclge_fd_rule_num++; 5319 } 5320 } 5321 5322 static void hclge_fd_dec_rule_cnt(struct hclge_dev *hdev, u16 location) 5323 { 5324 if (test_bit(location, hdev->fd_bmap)) { 5325 clear_bit(location, hdev->fd_bmap); 5326 hdev->hclge_fd_rule_num--; 5327 } 5328 } 5329 5330 static void hclge_fd_free_node(struct hclge_dev *hdev, 5331 struct hclge_fd_rule *rule) 5332 { 5333 hlist_del(&rule->rule_node); 5334 kfree(rule); 5335 hclge_sync_fd_state(hdev); 5336 } 5337 5338 static void hclge_update_fd_rule_node(struct hclge_dev *hdev, 5339 struct hclge_fd_rule *old_rule, 5340 struct hclge_fd_rule *new_rule, 5341 enum HCLGE_FD_NODE_STATE state) 5342 { 5343 switch (state) { 5344 case HCLGE_FD_TO_ADD: 5345 case HCLGE_FD_ACTIVE: 5346 /* 1) if the new state is TO_ADD, just replace the old rule 5347 * with the same location, no matter its state, because the 5348 * new rule will be configured to the hardware. 5349 * 2) if the new state is ACTIVE, it means the new rule 5350 * has been configured to the hardware, so just replace 5351 * the old rule node with the same location. 5352 * 3) for it doesn't add a new node to the list, so it's 5353 * unnecessary to update the rule number and fd_bmap. 5354 */ 5355 new_rule->rule_node.next = old_rule->rule_node.next; 5356 new_rule->rule_node.pprev = old_rule->rule_node.pprev; 5357 memcpy(old_rule, new_rule, sizeof(*old_rule)); 5358 kfree(new_rule); 5359 break; 5360 case HCLGE_FD_DELETED: 5361 hclge_fd_dec_rule_cnt(hdev, old_rule->location); 5362 hclge_fd_free_node(hdev, old_rule); 5363 break; 5364 case HCLGE_FD_TO_DEL: 5365 /* if new request is TO_DEL, and old rule is existent 5366 * 1) the state of old rule is TO_DEL, we need do nothing, 5367 * because we delete rule by location, other rule content 5368 * is unncessary. 5369 * 2) the state of old rule is ACTIVE, we need to change its 5370 * state to TO_DEL, so the rule will be deleted when periodic 5371 * task being scheduled. 5372 * 3) the state of old rule is TO_ADD, it means the rule hasn't 5373 * been added to hardware, so we just delete the rule node from 5374 * fd_rule_list directly. 5375 */ 5376 if (old_rule->state == HCLGE_FD_TO_ADD) { 5377 hclge_fd_dec_rule_cnt(hdev, old_rule->location); 5378 hclge_fd_free_node(hdev, old_rule); 5379 return; 5380 } 5381 old_rule->state = HCLGE_FD_TO_DEL; 5382 break; 5383 } 5384 } 5385 5386 static struct hclge_fd_rule *hclge_find_fd_rule(struct hlist_head *hlist, 5387 u16 location, 5388 struct hclge_fd_rule **parent) 5389 { 5390 struct hclge_fd_rule *rule; 5391 struct hlist_node *node; 5392 5393 hlist_for_each_entry_safe(rule, node, hlist, rule_node) { 5394 if (rule->location == location) 5395 return rule; 5396 else if (rule->location > location) 5397 return NULL; 5398 /* record the parent node, use to keep the nodes in fd_rule_list 5399 * in ascend order. 5400 */ 5401 *parent = rule; 5402 } 5403 5404 return NULL; 5405 } 5406 5407 /* insert fd rule node in ascend order according to rule->location */ 5408 static void hclge_fd_insert_rule_node(struct hlist_head *hlist, 5409 struct hclge_fd_rule *rule, 5410 struct hclge_fd_rule *parent) 5411 { 5412 INIT_HLIST_NODE(&rule->rule_node); 5413 5414 if (parent) 5415 hlist_add_behind(&rule->rule_node, &parent->rule_node); 5416 else 5417 hlist_add_head(&rule->rule_node, hlist); 5418 } 5419 5420 static int hclge_fd_set_user_def_cmd(struct hclge_dev *hdev, 5421 struct hclge_fd_user_def_cfg *cfg) 5422 { 5423 struct hclge_fd_user_def_cfg_cmd *req; 5424 struct hclge_desc desc; 5425 u16 data = 0; 5426 int ret; 5427 5428 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_FD_USER_DEF_OP, false); 5429 5430 req = (struct hclge_fd_user_def_cfg_cmd *)desc.data; 5431 5432 hnae3_set_bit(data, HCLGE_FD_USER_DEF_EN_B, cfg[0].ref_cnt > 0); 5433 hnae3_set_field(data, HCLGE_FD_USER_DEF_OFT_M, 5434 HCLGE_FD_USER_DEF_OFT_S, cfg[0].offset); 5435 req->ol2_cfg = cpu_to_le16(data); 5436 5437 data = 0; 5438 hnae3_set_bit(data, HCLGE_FD_USER_DEF_EN_B, cfg[1].ref_cnt > 0); 5439 hnae3_set_field(data, HCLGE_FD_USER_DEF_OFT_M, 5440 HCLGE_FD_USER_DEF_OFT_S, cfg[1].offset); 5441 req->ol3_cfg = cpu_to_le16(data); 5442 5443 data = 0; 5444 hnae3_set_bit(data, HCLGE_FD_USER_DEF_EN_B, cfg[2].ref_cnt > 0); 5445 hnae3_set_field(data, HCLGE_FD_USER_DEF_OFT_M, 5446 HCLGE_FD_USER_DEF_OFT_S, cfg[2].offset); 5447 req->ol4_cfg = cpu_to_le16(data); 5448 5449 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 5450 if (ret) 5451 dev_err(&hdev->pdev->dev, 5452 "failed to set fd user def data, ret= %d\n", ret); 5453 return ret; 5454 } 5455 5456 static void hclge_sync_fd_user_def_cfg(struct hclge_dev *hdev, bool locked) 5457 { 5458 int ret; 5459 5460 if (!test_and_clear_bit(HCLGE_STATE_FD_USER_DEF_CHANGED, &hdev->state)) 5461 return; 5462 5463 if (!locked) 5464 spin_lock_bh(&hdev->fd_rule_lock); 5465 5466 ret = hclge_fd_set_user_def_cmd(hdev, hdev->fd_cfg.user_def_cfg); 5467 if (ret) 5468 set_bit(HCLGE_STATE_FD_USER_DEF_CHANGED, &hdev->state); 5469 5470 if (!locked) 5471 spin_unlock_bh(&hdev->fd_rule_lock); 5472 } 5473 5474 static int hclge_fd_check_user_def_refcnt(struct hclge_dev *hdev, 5475 struct hclge_fd_rule *rule) 5476 { 5477 struct hlist_head *hlist = &hdev->fd_rule_list; 5478 struct hclge_fd_rule *fd_rule, *parent = NULL; 5479 struct hclge_fd_user_def_info *info, *old_info; 5480 struct hclge_fd_user_def_cfg *cfg; 5481 5482 if (!rule || rule->rule_type != HCLGE_FD_EP_ACTIVE || 5483 rule->ep.user_def.layer == HCLGE_FD_USER_DEF_NONE) 5484 return 0; 5485 5486 /* for valid layer is start from 1, so need minus 1 to get the cfg */ 5487 cfg = &hdev->fd_cfg.user_def_cfg[rule->ep.user_def.layer - 1]; 5488 info = &rule->ep.user_def; 5489 5490 if (!cfg->ref_cnt || cfg->offset == info->offset) 5491 return 0; 5492 5493 if (cfg->ref_cnt > 1) 5494 goto error; 5495 5496 fd_rule = hclge_find_fd_rule(hlist, rule->location, &parent); 5497 if (fd_rule) { 5498 old_info = &fd_rule->ep.user_def; 5499 if (info->layer == old_info->layer) 5500 return 0; 5501 } 5502 5503 error: 5504 dev_err(&hdev->pdev->dev, 5505 "No available offset for layer%d fd rule, each layer only support one user def offset.\n", 5506 info->layer + 1); 5507 return -ENOSPC; 5508 } 5509 5510 static void hclge_fd_inc_user_def_refcnt(struct hclge_dev *hdev, 5511 struct hclge_fd_rule *rule) 5512 { 5513 struct hclge_fd_user_def_cfg *cfg; 5514 5515 if (!rule || rule->rule_type != HCLGE_FD_EP_ACTIVE || 5516 rule->ep.user_def.layer == HCLGE_FD_USER_DEF_NONE) 5517 return; 5518 5519 cfg = &hdev->fd_cfg.user_def_cfg[rule->ep.user_def.layer - 1]; 5520 if (!cfg->ref_cnt) { 5521 cfg->offset = rule->ep.user_def.offset; 5522 set_bit(HCLGE_STATE_FD_USER_DEF_CHANGED, &hdev->state); 5523 } 5524 cfg->ref_cnt++; 5525 } 5526 5527 static void hclge_fd_dec_user_def_refcnt(struct hclge_dev *hdev, 5528 struct hclge_fd_rule *rule) 5529 { 5530 struct hclge_fd_user_def_cfg *cfg; 5531 5532 if (!rule || rule->rule_type != HCLGE_FD_EP_ACTIVE || 5533 rule->ep.user_def.layer == HCLGE_FD_USER_DEF_NONE) 5534 return; 5535 5536 cfg = &hdev->fd_cfg.user_def_cfg[rule->ep.user_def.layer - 1]; 5537 if (!cfg->ref_cnt) 5538 return; 5539 5540 cfg->ref_cnt--; 5541 if (!cfg->ref_cnt) { 5542 cfg->offset = 0; 5543 set_bit(HCLGE_STATE_FD_USER_DEF_CHANGED, &hdev->state); 5544 } 5545 } 5546 5547 static void hclge_update_fd_list(struct hclge_dev *hdev, 5548 enum HCLGE_FD_NODE_STATE state, u16 location, 5549 struct hclge_fd_rule *new_rule) 5550 { 5551 struct hlist_head *hlist = &hdev->fd_rule_list; 5552 struct hclge_fd_rule *fd_rule, *parent = NULL; 5553 5554 fd_rule = hclge_find_fd_rule(hlist, location, &parent); 5555 if (fd_rule) { 5556 hclge_fd_dec_user_def_refcnt(hdev, fd_rule); 5557 if (state == HCLGE_FD_ACTIVE) 5558 hclge_fd_inc_user_def_refcnt(hdev, new_rule); 5559 hclge_sync_fd_user_def_cfg(hdev, true); 5560 5561 hclge_update_fd_rule_node(hdev, fd_rule, new_rule, state); 5562 return; 5563 } 5564 5565 /* it's unlikely to fail here, because we have checked the rule 5566 * exist before. 5567 */ 5568 if (unlikely(state == HCLGE_FD_TO_DEL || state == HCLGE_FD_DELETED)) { 5569 dev_warn(&hdev->pdev->dev, 5570 "failed to delete fd rule %u, it's inexistent\n", 5571 location); 5572 return; 5573 } 5574 5575 hclge_fd_inc_user_def_refcnt(hdev, new_rule); 5576 hclge_sync_fd_user_def_cfg(hdev, true); 5577 5578 hclge_fd_insert_rule_node(hlist, new_rule, parent); 5579 hclge_fd_inc_rule_cnt(hdev, new_rule->location); 5580 5581 if (state == HCLGE_FD_TO_ADD) { 5582 set_bit(HCLGE_STATE_FD_TBL_CHANGED, &hdev->state); 5583 hclge_task_schedule(hdev, 0); 5584 } 5585 } 5586 5587 static int hclge_get_fd_mode(struct hclge_dev *hdev, u8 *fd_mode) 5588 { 5589 struct hclge_get_fd_mode_cmd *req; 5590 struct hclge_desc desc; 5591 int ret; 5592 5593 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_FD_MODE_CTRL, true); 5594 5595 req = (struct hclge_get_fd_mode_cmd *)desc.data; 5596 5597 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 5598 if (ret) { 5599 dev_err(&hdev->pdev->dev, "get fd mode fail, ret=%d\n", ret); 5600 return ret; 5601 } 5602 5603 *fd_mode = req->mode; 5604 5605 return ret; 5606 } 5607 5608 static int hclge_get_fd_allocation(struct hclge_dev *hdev, 5609 u32 *stage1_entry_num, 5610 u32 *stage2_entry_num, 5611 u16 *stage1_counter_num, 5612 u16 *stage2_counter_num) 5613 { 5614 struct hclge_get_fd_allocation_cmd *req; 5615 struct hclge_desc desc; 5616 int ret; 5617 5618 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_FD_GET_ALLOCATION, true); 5619 5620 req = (struct hclge_get_fd_allocation_cmd *)desc.data; 5621 5622 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 5623 if (ret) { 5624 dev_err(&hdev->pdev->dev, "query fd allocation fail, ret=%d\n", 5625 ret); 5626 return ret; 5627 } 5628 5629 *stage1_entry_num = le32_to_cpu(req->stage1_entry_num); 5630 *stage2_entry_num = le32_to_cpu(req->stage2_entry_num); 5631 *stage1_counter_num = le16_to_cpu(req->stage1_counter_num); 5632 *stage2_counter_num = le16_to_cpu(req->stage2_counter_num); 5633 5634 return ret; 5635 } 5636 5637 static int hclge_set_fd_key_config(struct hclge_dev *hdev, 5638 enum HCLGE_FD_STAGE stage_num) 5639 { 5640 struct hclge_set_fd_key_config_cmd *req; 5641 struct hclge_fd_key_cfg *stage; 5642 struct hclge_desc desc; 5643 int ret; 5644 5645 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_FD_KEY_CONFIG, false); 5646 5647 req = (struct hclge_set_fd_key_config_cmd *)desc.data; 5648 stage = &hdev->fd_cfg.key_cfg[stage_num]; 5649 req->stage = stage_num; 5650 req->key_select = stage->key_sel; 5651 req->inner_sipv6_word_en = stage->inner_sipv6_word_en; 5652 req->inner_dipv6_word_en = stage->inner_dipv6_word_en; 5653 req->outer_sipv6_word_en = stage->outer_sipv6_word_en; 5654 req->outer_dipv6_word_en = stage->outer_dipv6_word_en; 5655 req->tuple_mask = cpu_to_le32(~stage->tuple_active); 5656 req->meta_data_mask = cpu_to_le32(~stage->meta_data_active); 5657 5658 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 5659 if (ret) 5660 dev_err(&hdev->pdev->dev, "set fd key fail, ret=%d\n", ret); 5661 5662 return ret; 5663 } 5664 5665 static void hclge_fd_disable_user_def(struct hclge_dev *hdev) 5666 { 5667 struct hclge_fd_user_def_cfg *cfg = hdev->fd_cfg.user_def_cfg; 5668 5669 spin_lock_bh(&hdev->fd_rule_lock); 5670 memset(cfg, 0, sizeof(hdev->fd_cfg.user_def_cfg)); 5671 spin_unlock_bh(&hdev->fd_rule_lock); 5672 5673 hclge_fd_set_user_def_cmd(hdev, cfg); 5674 } 5675 5676 static int hclge_init_fd_config(struct hclge_dev *hdev) 5677 { 5678 #define LOW_2_WORDS 0x03 5679 struct hclge_fd_key_cfg *key_cfg; 5680 int ret; 5681 5682 if (!hnae3_dev_fd_supported(hdev)) 5683 return 0; 5684 5685 ret = hclge_get_fd_mode(hdev, &hdev->fd_cfg.fd_mode); 5686 if (ret) 5687 return ret; 5688 5689 switch (hdev->fd_cfg.fd_mode) { 5690 case HCLGE_FD_MODE_DEPTH_2K_WIDTH_400B_STAGE_1: 5691 hdev->fd_cfg.max_key_length = MAX_KEY_LENGTH; 5692 break; 5693 case HCLGE_FD_MODE_DEPTH_4K_WIDTH_200B_STAGE_1: 5694 hdev->fd_cfg.max_key_length = MAX_KEY_LENGTH / 2; 5695 break; 5696 default: 5697 dev_err(&hdev->pdev->dev, 5698 "Unsupported flow director mode %u\n", 5699 hdev->fd_cfg.fd_mode); 5700 return -EOPNOTSUPP; 5701 } 5702 5703 key_cfg = &hdev->fd_cfg.key_cfg[HCLGE_FD_STAGE_1]; 5704 key_cfg->key_sel = HCLGE_FD_KEY_BASE_ON_TUPLE; 5705 key_cfg->inner_sipv6_word_en = LOW_2_WORDS; 5706 key_cfg->inner_dipv6_word_en = LOW_2_WORDS; 5707 key_cfg->outer_sipv6_word_en = 0; 5708 key_cfg->outer_dipv6_word_en = 0; 5709 5710 key_cfg->tuple_active = BIT(INNER_VLAN_TAG_FST) | BIT(INNER_ETH_TYPE) | 5711 BIT(INNER_IP_PROTO) | BIT(INNER_IP_TOS) | 5712 BIT(INNER_SRC_IP) | BIT(INNER_DST_IP) | 5713 BIT(INNER_SRC_PORT) | BIT(INNER_DST_PORT); 5714 5715 /* If use max 400bit key, we can support tuples for ether type */ 5716 if (hdev->fd_cfg.fd_mode == HCLGE_FD_MODE_DEPTH_2K_WIDTH_400B_STAGE_1) { 5717 key_cfg->tuple_active |= 5718 BIT(INNER_DST_MAC) | BIT(INNER_SRC_MAC); 5719 if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V3) 5720 key_cfg->tuple_active |= HCLGE_FD_TUPLE_USER_DEF_TUPLES; 5721 } 5722 5723 /* roce_type is used to filter roce frames 5724 * dst_vport is used to specify the rule 5725 */ 5726 key_cfg->meta_data_active = BIT(ROCE_TYPE) | BIT(DST_VPORT); 5727 5728 ret = hclge_get_fd_allocation(hdev, 5729 &hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1], 5730 &hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_2], 5731 &hdev->fd_cfg.cnt_num[HCLGE_FD_STAGE_1], 5732 &hdev->fd_cfg.cnt_num[HCLGE_FD_STAGE_2]); 5733 if (ret) 5734 return ret; 5735 5736 return hclge_set_fd_key_config(hdev, HCLGE_FD_STAGE_1); 5737 } 5738 5739 static int hclge_fd_tcam_config(struct hclge_dev *hdev, u8 stage, bool sel_x, 5740 int loc, u8 *key, bool is_add) 5741 { 5742 struct hclge_fd_tcam_config_1_cmd *req1; 5743 struct hclge_fd_tcam_config_2_cmd *req2; 5744 struct hclge_fd_tcam_config_3_cmd *req3; 5745 struct hclge_desc desc[3]; 5746 int ret; 5747 5748 hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_FD_TCAM_OP, false); 5749 desc[0].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT); 5750 hclge_cmd_setup_basic_desc(&desc[1], HCLGE_OPC_FD_TCAM_OP, false); 5751 desc[1].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT); 5752 hclge_cmd_setup_basic_desc(&desc[2], HCLGE_OPC_FD_TCAM_OP, false); 5753 5754 req1 = (struct hclge_fd_tcam_config_1_cmd *)desc[0].data; 5755 req2 = (struct hclge_fd_tcam_config_2_cmd *)desc[1].data; 5756 req3 = (struct hclge_fd_tcam_config_3_cmd *)desc[2].data; 5757 5758 req1->stage = stage; 5759 req1->xy_sel = sel_x ? 1 : 0; 5760 hnae3_set_bit(req1->port_info, HCLGE_FD_EPORT_SW_EN_B, 0); 5761 req1->index = cpu_to_le32(loc); 5762 req1->entry_vld = sel_x ? is_add : 0; 5763 5764 if (key) { 5765 memcpy(req1->tcam_data, &key[0], sizeof(req1->tcam_data)); 5766 memcpy(req2->tcam_data, &key[sizeof(req1->tcam_data)], 5767 sizeof(req2->tcam_data)); 5768 memcpy(req3->tcam_data, &key[sizeof(req1->tcam_data) + 5769 sizeof(req2->tcam_data)], sizeof(req3->tcam_data)); 5770 } 5771 5772 ret = hclge_cmd_send(&hdev->hw, desc, 3); 5773 if (ret) 5774 dev_err(&hdev->pdev->dev, 5775 "config tcam key fail, ret=%d\n", 5776 ret); 5777 5778 return ret; 5779 } 5780 5781 static int hclge_fd_ad_config(struct hclge_dev *hdev, u8 stage, int loc, 5782 struct hclge_fd_ad_data *action) 5783 { 5784 struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev); 5785 struct hclge_fd_ad_config_cmd *req; 5786 struct hclge_desc desc; 5787 u64 ad_data = 0; 5788 int ret; 5789 5790 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_FD_AD_OP, false); 5791 5792 req = (struct hclge_fd_ad_config_cmd *)desc.data; 5793 req->index = cpu_to_le32(loc); 5794 req->stage = stage; 5795 5796 hnae3_set_bit(ad_data, HCLGE_FD_AD_WR_RULE_ID_B, 5797 action->write_rule_id_to_bd); 5798 hnae3_set_field(ad_data, HCLGE_FD_AD_RULE_ID_M, HCLGE_FD_AD_RULE_ID_S, 5799 action->rule_id); 5800 if (test_bit(HNAE3_DEV_SUPPORT_FD_FORWARD_TC_B, ae_dev->caps)) { 5801 hnae3_set_bit(ad_data, HCLGE_FD_AD_TC_OVRD_B, 5802 action->override_tc); 5803 hnae3_set_field(ad_data, HCLGE_FD_AD_TC_SIZE_M, 5804 HCLGE_FD_AD_TC_SIZE_S, (u32)action->tc_size); 5805 } 5806 ad_data <<= 32; 5807 hnae3_set_bit(ad_data, HCLGE_FD_AD_DROP_B, action->drop_packet); 5808 hnae3_set_bit(ad_data, HCLGE_FD_AD_DIRECT_QID_B, 5809 action->forward_to_direct_queue); 5810 hnae3_set_field(ad_data, HCLGE_FD_AD_QID_M, HCLGE_FD_AD_QID_S, 5811 action->queue_id); 5812 hnae3_set_bit(ad_data, HCLGE_FD_AD_USE_COUNTER_B, action->use_counter); 5813 hnae3_set_field(ad_data, HCLGE_FD_AD_COUNTER_NUM_M, 5814 HCLGE_FD_AD_COUNTER_NUM_S, action->counter_id); 5815 hnae3_set_bit(ad_data, HCLGE_FD_AD_NXT_STEP_B, action->use_next_stage); 5816 hnae3_set_field(ad_data, HCLGE_FD_AD_NXT_KEY_M, HCLGE_FD_AD_NXT_KEY_S, 5817 action->counter_id); 5818 5819 req->ad_data = cpu_to_le64(ad_data); 5820 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 5821 if (ret) 5822 dev_err(&hdev->pdev->dev, "fd ad config fail, ret=%d\n", ret); 5823 5824 return ret; 5825 } 5826 5827 static bool hclge_fd_convert_tuple(u32 tuple_bit, u8 *key_x, u8 *key_y, 5828 struct hclge_fd_rule *rule) 5829 { 5830 int offset, moffset, ip_offset; 5831 enum HCLGE_FD_KEY_OPT key_opt; 5832 u16 tmp_x_s, tmp_y_s; 5833 u32 tmp_x_l, tmp_y_l; 5834 u8 *p = (u8 *)rule; 5835 int i; 5836 5837 if (rule->unused_tuple & BIT(tuple_bit)) 5838 return true; 5839 5840 key_opt = tuple_key_info[tuple_bit].key_opt; 5841 offset = tuple_key_info[tuple_bit].offset; 5842 moffset = tuple_key_info[tuple_bit].moffset; 5843 5844 switch (key_opt) { 5845 case KEY_OPT_U8: 5846 calc_x(*key_x, p[offset], p[moffset]); 5847 calc_y(*key_y, p[offset], p[moffset]); 5848 5849 return true; 5850 case KEY_OPT_LE16: 5851 calc_x(tmp_x_s, *(u16 *)(&p[offset]), *(u16 *)(&p[moffset])); 5852 calc_y(tmp_y_s, *(u16 *)(&p[offset]), *(u16 *)(&p[moffset])); 5853 *(__le16 *)key_x = cpu_to_le16(tmp_x_s); 5854 *(__le16 *)key_y = cpu_to_le16(tmp_y_s); 5855 5856 return true; 5857 case KEY_OPT_LE32: 5858 calc_x(tmp_x_l, *(u32 *)(&p[offset]), *(u32 *)(&p[moffset])); 5859 calc_y(tmp_y_l, *(u32 *)(&p[offset]), *(u32 *)(&p[moffset])); 5860 *(__le32 *)key_x = cpu_to_le32(tmp_x_l); 5861 *(__le32 *)key_y = cpu_to_le32(tmp_y_l); 5862 5863 return true; 5864 case KEY_OPT_MAC: 5865 for (i = 0; i < ETH_ALEN; i++) { 5866 calc_x(key_x[ETH_ALEN - 1 - i], p[offset + i], 5867 p[moffset + i]); 5868 calc_y(key_y[ETH_ALEN - 1 - i], p[offset + i], 5869 p[moffset + i]); 5870 } 5871 5872 return true; 5873 case KEY_OPT_IP: 5874 ip_offset = IPV4_INDEX * sizeof(u32); 5875 calc_x(tmp_x_l, *(u32 *)(&p[offset + ip_offset]), 5876 *(u32 *)(&p[moffset + ip_offset])); 5877 calc_y(tmp_y_l, *(u32 *)(&p[offset + ip_offset]), 5878 *(u32 *)(&p[moffset + ip_offset])); 5879 *(__le32 *)key_x = cpu_to_le32(tmp_x_l); 5880 *(__le32 *)key_y = cpu_to_le32(tmp_y_l); 5881 5882 return true; 5883 default: 5884 return false; 5885 } 5886 } 5887 5888 static u32 hclge_get_port_number(enum HLCGE_PORT_TYPE port_type, u8 pf_id, 5889 u8 vf_id, u8 network_port_id) 5890 { 5891 u32 port_number = 0; 5892 5893 if (port_type == HOST_PORT) { 5894 hnae3_set_field(port_number, HCLGE_PF_ID_M, HCLGE_PF_ID_S, 5895 pf_id); 5896 hnae3_set_field(port_number, HCLGE_VF_ID_M, HCLGE_VF_ID_S, 5897 vf_id); 5898 hnae3_set_bit(port_number, HCLGE_PORT_TYPE_B, HOST_PORT); 5899 } else { 5900 hnae3_set_field(port_number, HCLGE_NETWORK_PORT_ID_M, 5901 HCLGE_NETWORK_PORT_ID_S, network_port_id); 5902 hnae3_set_bit(port_number, HCLGE_PORT_TYPE_B, NETWORK_PORT); 5903 } 5904 5905 return port_number; 5906 } 5907 5908 static void hclge_fd_convert_meta_data(struct hclge_fd_key_cfg *key_cfg, 5909 __le32 *key_x, __le32 *key_y, 5910 struct hclge_fd_rule *rule) 5911 { 5912 u32 tuple_bit, meta_data = 0, tmp_x, tmp_y, port_number; 5913 u8 cur_pos = 0, tuple_size, shift_bits; 5914 unsigned int i; 5915 5916 for (i = 0; i < MAX_META_DATA; i++) { 5917 tuple_size = meta_data_key_info[i].key_length; 5918 tuple_bit = key_cfg->meta_data_active & BIT(i); 5919 5920 switch (tuple_bit) { 5921 case BIT(ROCE_TYPE): 5922 hnae3_set_bit(meta_data, cur_pos, NIC_PACKET); 5923 cur_pos += tuple_size; 5924 break; 5925 case BIT(DST_VPORT): 5926 port_number = hclge_get_port_number(HOST_PORT, 0, 5927 rule->vf_id, 0); 5928 hnae3_set_field(meta_data, 5929 GENMASK(cur_pos + tuple_size, cur_pos), 5930 cur_pos, port_number); 5931 cur_pos += tuple_size; 5932 break; 5933 default: 5934 break; 5935 } 5936 } 5937 5938 calc_x(tmp_x, meta_data, 0xFFFFFFFF); 5939 calc_y(tmp_y, meta_data, 0xFFFFFFFF); 5940 shift_bits = sizeof(meta_data) * 8 - cur_pos; 5941 5942 *key_x = cpu_to_le32(tmp_x << shift_bits); 5943 *key_y = cpu_to_le32(tmp_y << shift_bits); 5944 } 5945 5946 /* A complete key is combined with meta data key and tuple key. 5947 * Meta data key is stored at the MSB region, and tuple key is stored at 5948 * the LSB region, unused bits will be filled 0. 5949 */ 5950 static int hclge_config_key(struct hclge_dev *hdev, u8 stage, 5951 struct hclge_fd_rule *rule) 5952 { 5953 struct hclge_fd_key_cfg *key_cfg = &hdev->fd_cfg.key_cfg[stage]; 5954 u8 key_x[MAX_KEY_BYTES], key_y[MAX_KEY_BYTES]; 5955 u8 *cur_key_x, *cur_key_y; 5956 u8 meta_data_region; 5957 u8 tuple_size; 5958 int ret; 5959 u32 i; 5960 5961 memset(key_x, 0, sizeof(key_x)); 5962 memset(key_y, 0, sizeof(key_y)); 5963 cur_key_x = key_x; 5964 cur_key_y = key_y; 5965 5966 for (i = 0; i < MAX_TUPLE; i++) { 5967 bool tuple_valid; 5968 5969 tuple_size = tuple_key_info[i].key_length / 8; 5970 if (!(key_cfg->tuple_active & BIT(i))) 5971 continue; 5972 5973 tuple_valid = hclge_fd_convert_tuple(i, cur_key_x, 5974 cur_key_y, rule); 5975 if (tuple_valid) { 5976 cur_key_x += tuple_size; 5977 cur_key_y += tuple_size; 5978 } 5979 } 5980 5981 meta_data_region = hdev->fd_cfg.max_key_length / 8 - 5982 MAX_META_DATA_LENGTH / 8; 5983 5984 hclge_fd_convert_meta_data(key_cfg, 5985 (__le32 *)(key_x + meta_data_region), 5986 (__le32 *)(key_y + meta_data_region), 5987 rule); 5988 5989 ret = hclge_fd_tcam_config(hdev, stage, false, rule->location, key_y, 5990 true); 5991 if (ret) { 5992 dev_err(&hdev->pdev->dev, 5993 "fd key_y config fail, loc=%u, ret=%d\n", 5994 rule->queue_id, ret); 5995 return ret; 5996 } 5997 5998 ret = hclge_fd_tcam_config(hdev, stage, true, rule->location, key_x, 5999 true); 6000 if (ret) 6001 dev_err(&hdev->pdev->dev, 6002 "fd key_x config fail, loc=%u, ret=%d\n", 6003 rule->queue_id, ret); 6004 return ret; 6005 } 6006 6007 static int hclge_config_action(struct hclge_dev *hdev, u8 stage, 6008 struct hclge_fd_rule *rule) 6009 { 6010 struct hclge_vport *vport = hdev->vport; 6011 struct hnae3_knic_private_info *kinfo = &vport->nic.kinfo; 6012 struct hclge_fd_ad_data ad_data; 6013 6014 memset(&ad_data, 0, sizeof(struct hclge_fd_ad_data)); 6015 ad_data.ad_id = rule->location; 6016 6017 if (rule->action == HCLGE_FD_ACTION_DROP_PACKET) { 6018 ad_data.drop_packet = true; 6019 } else if (rule->action == HCLGE_FD_ACTION_SELECT_TC) { 6020 ad_data.override_tc = true; 6021 ad_data.queue_id = 6022 kinfo->tc_info.tqp_offset[rule->cls_flower.tc]; 6023 ad_data.tc_size = 6024 ilog2(kinfo->tc_info.tqp_count[rule->cls_flower.tc]); 6025 } else { 6026 ad_data.forward_to_direct_queue = true; 6027 ad_data.queue_id = rule->queue_id; 6028 } 6029 6030 if (hdev->fd_cfg.cnt_num[HCLGE_FD_STAGE_1]) { 6031 ad_data.use_counter = true; 6032 ad_data.counter_id = rule->vf_id % 6033 hdev->fd_cfg.cnt_num[HCLGE_FD_STAGE_1]; 6034 } else { 6035 ad_data.use_counter = false; 6036 ad_data.counter_id = 0; 6037 } 6038 6039 ad_data.use_next_stage = false; 6040 ad_data.next_input_key = 0; 6041 6042 ad_data.write_rule_id_to_bd = true; 6043 ad_data.rule_id = rule->location; 6044 6045 return hclge_fd_ad_config(hdev, stage, ad_data.ad_id, &ad_data); 6046 } 6047 6048 static int hclge_fd_check_tcpip4_tuple(struct ethtool_tcpip4_spec *spec, 6049 u32 *unused_tuple) 6050 { 6051 if (!spec || !unused_tuple) 6052 return -EINVAL; 6053 6054 *unused_tuple |= BIT(INNER_SRC_MAC) | BIT(INNER_DST_MAC); 6055 6056 if (!spec->ip4src) 6057 *unused_tuple |= BIT(INNER_SRC_IP); 6058 6059 if (!spec->ip4dst) 6060 *unused_tuple |= BIT(INNER_DST_IP); 6061 6062 if (!spec->psrc) 6063 *unused_tuple |= BIT(INNER_SRC_PORT); 6064 6065 if (!spec->pdst) 6066 *unused_tuple |= BIT(INNER_DST_PORT); 6067 6068 if (!spec->tos) 6069 *unused_tuple |= BIT(INNER_IP_TOS); 6070 6071 return 0; 6072 } 6073 6074 static int hclge_fd_check_ip4_tuple(struct ethtool_usrip4_spec *spec, 6075 u32 *unused_tuple) 6076 { 6077 if (!spec || !unused_tuple) 6078 return -EINVAL; 6079 6080 *unused_tuple |= BIT(INNER_SRC_MAC) | BIT(INNER_DST_MAC) | 6081 BIT(INNER_SRC_PORT) | BIT(INNER_DST_PORT); 6082 6083 if (!spec->ip4src) 6084 *unused_tuple |= BIT(INNER_SRC_IP); 6085 6086 if (!spec->ip4dst) 6087 *unused_tuple |= BIT(INNER_DST_IP); 6088 6089 if (!spec->tos) 6090 *unused_tuple |= BIT(INNER_IP_TOS); 6091 6092 if (!spec->proto) 6093 *unused_tuple |= BIT(INNER_IP_PROTO); 6094 6095 if (spec->l4_4_bytes) 6096 return -EOPNOTSUPP; 6097 6098 if (spec->ip_ver != ETH_RX_NFC_IP4) 6099 return -EOPNOTSUPP; 6100 6101 return 0; 6102 } 6103 6104 static int hclge_fd_check_tcpip6_tuple(struct ethtool_tcpip6_spec *spec, 6105 u32 *unused_tuple) 6106 { 6107 if (!spec || !unused_tuple) 6108 return -EINVAL; 6109 6110 *unused_tuple |= BIT(INNER_SRC_MAC) | BIT(INNER_DST_MAC); 6111 6112 /* check whether src/dst ip address used */ 6113 if (ipv6_addr_any((struct in6_addr *)spec->ip6src)) 6114 *unused_tuple |= BIT(INNER_SRC_IP); 6115 6116 if (ipv6_addr_any((struct in6_addr *)spec->ip6dst)) 6117 *unused_tuple |= BIT(INNER_DST_IP); 6118 6119 if (!spec->psrc) 6120 *unused_tuple |= BIT(INNER_SRC_PORT); 6121 6122 if (!spec->pdst) 6123 *unused_tuple |= BIT(INNER_DST_PORT); 6124 6125 if (!spec->tclass) 6126 *unused_tuple |= BIT(INNER_IP_TOS); 6127 6128 return 0; 6129 } 6130 6131 static int hclge_fd_check_ip6_tuple(struct ethtool_usrip6_spec *spec, 6132 u32 *unused_tuple) 6133 { 6134 if (!spec || !unused_tuple) 6135 return -EINVAL; 6136 6137 *unused_tuple |= BIT(INNER_SRC_MAC) | BIT(INNER_DST_MAC) | 6138 BIT(INNER_SRC_PORT) | BIT(INNER_DST_PORT); 6139 6140 /* check whether src/dst ip address used */ 6141 if (ipv6_addr_any((struct in6_addr *)spec->ip6src)) 6142 *unused_tuple |= BIT(INNER_SRC_IP); 6143 6144 if (ipv6_addr_any((struct in6_addr *)spec->ip6dst)) 6145 *unused_tuple |= BIT(INNER_DST_IP); 6146 6147 if (!spec->l4_proto) 6148 *unused_tuple |= BIT(INNER_IP_PROTO); 6149 6150 if (!spec->tclass) 6151 *unused_tuple |= BIT(INNER_IP_TOS); 6152 6153 if (spec->l4_4_bytes) 6154 return -EOPNOTSUPP; 6155 6156 return 0; 6157 } 6158 6159 static int hclge_fd_check_ether_tuple(struct ethhdr *spec, u32 *unused_tuple) 6160 { 6161 if (!spec || !unused_tuple) 6162 return -EINVAL; 6163 6164 *unused_tuple |= BIT(INNER_SRC_IP) | BIT(INNER_DST_IP) | 6165 BIT(INNER_SRC_PORT) | BIT(INNER_DST_PORT) | 6166 BIT(INNER_IP_TOS) | BIT(INNER_IP_PROTO); 6167 6168 if (is_zero_ether_addr(spec->h_source)) 6169 *unused_tuple |= BIT(INNER_SRC_MAC); 6170 6171 if (is_zero_ether_addr(spec->h_dest)) 6172 *unused_tuple |= BIT(INNER_DST_MAC); 6173 6174 if (!spec->h_proto) 6175 *unused_tuple |= BIT(INNER_ETH_TYPE); 6176 6177 return 0; 6178 } 6179 6180 static int hclge_fd_check_ext_tuple(struct hclge_dev *hdev, 6181 struct ethtool_rx_flow_spec *fs, 6182 u32 *unused_tuple) 6183 { 6184 if (fs->flow_type & FLOW_EXT) { 6185 if (fs->h_ext.vlan_etype) { 6186 dev_err(&hdev->pdev->dev, "vlan-etype is not supported!\n"); 6187 return -EOPNOTSUPP; 6188 } 6189 6190 if (!fs->h_ext.vlan_tci) 6191 *unused_tuple |= BIT(INNER_VLAN_TAG_FST); 6192 6193 if (fs->m_ext.vlan_tci && 6194 be16_to_cpu(fs->h_ext.vlan_tci) >= VLAN_N_VID) { 6195 dev_err(&hdev->pdev->dev, 6196 "failed to config vlan_tci, invalid vlan_tci: %u, max is %d.\n", 6197 ntohs(fs->h_ext.vlan_tci), VLAN_N_VID - 1); 6198 return -EINVAL; 6199 } 6200 } else { 6201 *unused_tuple |= BIT(INNER_VLAN_TAG_FST); 6202 } 6203 6204 if (fs->flow_type & FLOW_MAC_EXT) { 6205 if (hdev->fd_cfg.fd_mode != 6206 HCLGE_FD_MODE_DEPTH_2K_WIDTH_400B_STAGE_1) { 6207 dev_err(&hdev->pdev->dev, 6208 "FLOW_MAC_EXT is not supported in current fd mode!\n"); 6209 return -EOPNOTSUPP; 6210 } 6211 6212 if (is_zero_ether_addr(fs->h_ext.h_dest)) 6213 *unused_tuple |= BIT(INNER_DST_MAC); 6214 else 6215 *unused_tuple &= ~BIT(INNER_DST_MAC); 6216 } 6217 6218 return 0; 6219 } 6220 6221 static int hclge_fd_get_user_def_layer(u32 flow_type, u32 *unused_tuple, 6222 struct hclge_fd_user_def_info *info) 6223 { 6224 switch (flow_type) { 6225 case ETHER_FLOW: 6226 info->layer = HCLGE_FD_USER_DEF_L2; 6227 *unused_tuple &= ~BIT(INNER_L2_RSV); 6228 break; 6229 case IP_USER_FLOW: 6230 case IPV6_USER_FLOW: 6231 info->layer = HCLGE_FD_USER_DEF_L3; 6232 *unused_tuple &= ~BIT(INNER_L3_RSV); 6233 break; 6234 case TCP_V4_FLOW: 6235 case UDP_V4_FLOW: 6236 case TCP_V6_FLOW: 6237 case UDP_V6_FLOW: 6238 info->layer = HCLGE_FD_USER_DEF_L4; 6239 *unused_tuple &= ~BIT(INNER_L4_RSV); 6240 break; 6241 default: 6242 return -EOPNOTSUPP; 6243 } 6244 6245 return 0; 6246 } 6247 6248 static bool hclge_fd_is_user_def_all_masked(struct ethtool_rx_flow_spec *fs) 6249 { 6250 return be32_to_cpu(fs->m_ext.data[1] | fs->m_ext.data[0]) == 0; 6251 } 6252 6253 static int hclge_fd_parse_user_def_field(struct hclge_dev *hdev, 6254 struct ethtool_rx_flow_spec *fs, 6255 u32 *unused_tuple, 6256 struct hclge_fd_user_def_info *info) 6257 { 6258 u32 tuple_active = hdev->fd_cfg.key_cfg[HCLGE_FD_STAGE_1].tuple_active; 6259 u32 flow_type = fs->flow_type & ~(FLOW_EXT | FLOW_MAC_EXT); 6260 u16 data, offset, data_mask, offset_mask; 6261 int ret; 6262 6263 info->layer = HCLGE_FD_USER_DEF_NONE; 6264 *unused_tuple |= HCLGE_FD_TUPLE_USER_DEF_TUPLES; 6265 6266 if (!(fs->flow_type & FLOW_EXT) || hclge_fd_is_user_def_all_masked(fs)) 6267 return 0; 6268 6269 /* user-def data from ethtool is 64 bit value, the bit0~15 is used 6270 * for data, and bit32~47 is used for offset. 6271 */ 6272 data = be32_to_cpu(fs->h_ext.data[1]) & HCLGE_FD_USER_DEF_DATA; 6273 data_mask = be32_to_cpu(fs->m_ext.data[1]) & HCLGE_FD_USER_DEF_DATA; 6274 offset = be32_to_cpu(fs->h_ext.data[0]) & HCLGE_FD_USER_DEF_OFFSET; 6275 offset_mask = be32_to_cpu(fs->m_ext.data[0]) & HCLGE_FD_USER_DEF_OFFSET; 6276 6277 if (!(tuple_active & HCLGE_FD_TUPLE_USER_DEF_TUPLES)) { 6278 dev_err(&hdev->pdev->dev, "user-def bytes are not supported\n"); 6279 return -EOPNOTSUPP; 6280 } 6281 6282 if (offset > HCLGE_FD_MAX_USER_DEF_OFFSET) { 6283 dev_err(&hdev->pdev->dev, 6284 "user-def offset[%u] should be no more than %u\n", 6285 offset, HCLGE_FD_MAX_USER_DEF_OFFSET); 6286 return -EINVAL; 6287 } 6288 6289 if (offset_mask != HCLGE_FD_USER_DEF_OFFSET_UNMASK) { 6290 dev_err(&hdev->pdev->dev, "user-def offset can't be masked\n"); 6291 return -EINVAL; 6292 } 6293 6294 ret = hclge_fd_get_user_def_layer(flow_type, unused_tuple, info); 6295 if (ret) { 6296 dev_err(&hdev->pdev->dev, 6297 "unsupported flow type for user-def bytes, ret = %d\n", 6298 ret); 6299 return ret; 6300 } 6301 6302 info->data = data; 6303 info->data_mask = data_mask; 6304 info->offset = offset; 6305 6306 return 0; 6307 } 6308 6309 static int hclge_fd_check_spec(struct hclge_dev *hdev, 6310 struct ethtool_rx_flow_spec *fs, 6311 u32 *unused_tuple, 6312 struct hclge_fd_user_def_info *info) 6313 { 6314 u32 flow_type; 6315 int ret; 6316 6317 if (fs->location >= hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1]) { 6318 dev_err(&hdev->pdev->dev, 6319 "failed to config fd rules, invalid rule location: %u, max is %u\n.", 6320 fs->location, 6321 hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1] - 1); 6322 return -EINVAL; 6323 } 6324 6325 ret = hclge_fd_parse_user_def_field(hdev, fs, unused_tuple, info); 6326 if (ret) 6327 return ret; 6328 6329 flow_type = fs->flow_type & ~(FLOW_EXT | FLOW_MAC_EXT); 6330 switch (flow_type) { 6331 case SCTP_V4_FLOW: 6332 case TCP_V4_FLOW: 6333 case UDP_V4_FLOW: 6334 ret = hclge_fd_check_tcpip4_tuple(&fs->h_u.tcp_ip4_spec, 6335 unused_tuple); 6336 break; 6337 case IP_USER_FLOW: 6338 ret = hclge_fd_check_ip4_tuple(&fs->h_u.usr_ip4_spec, 6339 unused_tuple); 6340 break; 6341 case SCTP_V6_FLOW: 6342 case TCP_V6_FLOW: 6343 case UDP_V6_FLOW: 6344 ret = hclge_fd_check_tcpip6_tuple(&fs->h_u.tcp_ip6_spec, 6345 unused_tuple); 6346 break; 6347 case IPV6_USER_FLOW: 6348 ret = hclge_fd_check_ip6_tuple(&fs->h_u.usr_ip6_spec, 6349 unused_tuple); 6350 break; 6351 case ETHER_FLOW: 6352 if (hdev->fd_cfg.fd_mode != 6353 HCLGE_FD_MODE_DEPTH_2K_WIDTH_400B_STAGE_1) { 6354 dev_err(&hdev->pdev->dev, 6355 "ETHER_FLOW is not supported in current fd mode!\n"); 6356 return -EOPNOTSUPP; 6357 } 6358 6359 ret = hclge_fd_check_ether_tuple(&fs->h_u.ether_spec, 6360 unused_tuple); 6361 break; 6362 default: 6363 dev_err(&hdev->pdev->dev, 6364 "unsupported protocol type, protocol type = %#x\n", 6365 flow_type); 6366 return -EOPNOTSUPP; 6367 } 6368 6369 if (ret) { 6370 dev_err(&hdev->pdev->dev, 6371 "failed to check flow union tuple, ret = %d\n", 6372 ret); 6373 return ret; 6374 } 6375 6376 return hclge_fd_check_ext_tuple(hdev, fs, unused_tuple); 6377 } 6378 6379 static void hclge_fd_get_tcpip4_tuple(struct hclge_dev *hdev, 6380 struct ethtool_rx_flow_spec *fs, 6381 struct hclge_fd_rule *rule, u8 ip_proto) 6382 { 6383 rule->tuples.src_ip[IPV4_INDEX] = 6384 be32_to_cpu(fs->h_u.tcp_ip4_spec.ip4src); 6385 rule->tuples_mask.src_ip[IPV4_INDEX] = 6386 be32_to_cpu(fs->m_u.tcp_ip4_spec.ip4src); 6387 6388 rule->tuples.dst_ip[IPV4_INDEX] = 6389 be32_to_cpu(fs->h_u.tcp_ip4_spec.ip4dst); 6390 rule->tuples_mask.dst_ip[IPV4_INDEX] = 6391 be32_to_cpu(fs->m_u.tcp_ip4_spec.ip4dst); 6392 6393 rule->tuples.src_port = be16_to_cpu(fs->h_u.tcp_ip4_spec.psrc); 6394 rule->tuples_mask.src_port = be16_to_cpu(fs->m_u.tcp_ip4_spec.psrc); 6395 6396 rule->tuples.dst_port = be16_to_cpu(fs->h_u.tcp_ip4_spec.pdst); 6397 rule->tuples_mask.dst_port = be16_to_cpu(fs->m_u.tcp_ip4_spec.pdst); 6398 6399 rule->tuples.ip_tos = fs->h_u.tcp_ip4_spec.tos; 6400 rule->tuples_mask.ip_tos = fs->m_u.tcp_ip4_spec.tos; 6401 6402 rule->tuples.ether_proto = ETH_P_IP; 6403 rule->tuples_mask.ether_proto = 0xFFFF; 6404 6405 rule->tuples.ip_proto = ip_proto; 6406 rule->tuples_mask.ip_proto = 0xFF; 6407 } 6408 6409 static void hclge_fd_get_ip4_tuple(struct hclge_dev *hdev, 6410 struct ethtool_rx_flow_spec *fs, 6411 struct hclge_fd_rule *rule) 6412 { 6413 rule->tuples.src_ip[IPV4_INDEX] = 6414 be32_to_cpu(fs->h_u.usr_ip4_spec.ip4src); 6415 rule->tuples_mask.src_ip[IPV4_INDEX] = 6416 be32_to_cpu(fs->m_u.usr_ip4_spec.ip4src); 6417 6418 rule->tuples.dst_ip[IPV4_INDEX] = 6419 be32_to_cpu(fs->h_u.usr_ip4_spec.ip4dst); 6420 rule->tuples_mask.dst_ip[IPV4_INDEX] = 6421 be32_to_cpu(fs->m_u.usr_ip4_spec.ip4dst); 6422 6423 rule->tuples.ip_tos = fs->h_u.usr_ip4_spec.tos; 6424 rule->tuples_mask.ip_tos = fs->m_u.usr_ip4_spec.tos; 6425 6426 rule->tuples.ip_proto = fs->h_u.usr_ip4_spec.proto; 6427 rule->tuples_mask.ip_proto = fs->m_u.usr_ip4_spec.proto; 6428 6429 rule->tuples.ether_proto = ETH_P_IP; 6430 rule->tuples_mask.ether_proto = 0xFFFF; 6431 } 6432 6433 static void hclge_fd_get_tcpip6_tuple(struct hclge_dev *hdev, 6434 struct ethtool_rx_flow_spec *fs, 6435 struct hclge_fd_rule *rule, u8 ip_proto) 6436 { 6437 be32_to_cpu_array(rule->tuples.src_ip, fs->h_u.tcp_ip6_spec.ip6src, 6438 IPV6_SIZE); 6439 be32_to_cpu_array(rule->tuples_mask.src_ip, fs->m_u.tcp_ip6_spec.ip6src, 6440 IPV6_SIZE); 6441 6442 be32_to_cpu_array(rule->tuples.dst_ip, fs->h_u.tcp_ip6_spec.ip6dst, 6443 IPV6_SIZE); 6444 be32_to_cpu_array(rule->tuples_mask.dst_ip, fs->m_u.tcp_ip6_spec.ip6dst, 6445 IPV6_SIZE); 6446 6447 rule->tuples.src_port = be16_to_cpu(fs->h_u.tcp_ip6_spec.psrc); 6448 rule->tuples_mask.src_port = be16_to_cpu(fs->m_u.tcp_ip6_spec.psrc); 6449 6450 rule->tuples.dst_port = be16_to_cpu(fs->h_u.tcp_ip6_spec.pdst); 6451 rule->tuples_mask.dst_port = be16_to_cpu(fs->m_u.tcp_ip6_spec.pdst); 6452 6453 rule->tuples.ether_proto = ETH_P_IPV6; 6454 rule->tuples_mask.ether_proto = 0xFFFF; 6455 6456 rule->tuples.ip_tos = fs->h_u.tcp_ip6_spec.tclass; 6457 rule->tuples_mask.ip_tos = fs->m_u.tcp_ip6_spec.tclass; 6458 6459 rule->tuples.ip_proto = ip_proto; 6460 rule->tuples_mask.ip_proto = 0xFF; 6461 } 6462 6463 static void hclge_fd_get_ip6_tuple(struct hclge_dev *hdev, 6464 struct ethtool_rx_flow_spec *fs, 6465 struct hclge_fd_rule *rule) 6466 { 6467 be32_to_cpu_array(rule->tuples.src_ip, fs->h_u.usr_ip6_spec.ip6src, 6468 IPV6_SIZE); 6469 be32_to_cpu_array(rule->tuples_mask.src_ip, fs->m_u.usr_ip6_spec.ip6src, 6470 IPV6_SIZE); 6471 6472 be32_to_cpu_array(rule->tuples.dst_ip, fs->h_u.usr_ip6_spec.ip6dst, 6473 IPV6_SIZE); 6474 be32_to_cpu_array(rule->tuples_mask.dst_ip, fs->m_u.usr_ip6_spec.ip6dst, 6475 IPV6_SIZE); 6476 6477 rule->tuples.ip_proto = fs->h_u.usr_ip6_spec.l4_proto; 6478 rule->tuples_mask.ip_proto = fs->m_u.usr_ip6_spec.l4_proto; 6479 6480 rule->tuples.ip_tos = fs->h_u.tcp_ip6_spec.tclass; 6481 rule->tuples_mask.ip_tos = fs->m_u.tcp_ip6_spec.tclass; 6482 6483 rule->tuples.ether_proto = ETH_P_IPV6; 6484 rule->tuples_mask.ether_proto = 0xFFFF; 6485 } 6486 6487 static void hclge_fd_get_ether_tuple(struct hclge_dev *hdev, 6488 struct ethtool_rx_flow_spec *fs, 6489 struct hclge_fd_rule *rule) 6490 { 6491 ether_addr_copy(rule->tuples.src_mac, fs->h_u.ether_spec.h_source); 6492 ether_addr_copy(rule->tuples_mask.src_mac, fs->m_u.ether_spec.h_source); 6493 6494 ether_addr_copy(rule->tuples.dst_mac, fs->h_u.ether_spec.h_dest); 6495 ether_addr_copy(rule->tuples_mask.dst_mac, fs->m_u.ether_spec.h_dest); 6496 6497 rule->tuples.ether_proto = be16_to_cpu(fs->h_u.ether_spec.h_proto); 6498 rule->tuples_mask.ether_proto = be16_to_cpu(fs->m_u.ether_spec.h_proto); 6499 } 6500 6501 static void hclge_fd_get_user_def_tuple(struct hclge_fd_user_def_info *info, 6502 struct hclge_fd_rule *rule) 6503 { 6504 switch (info->layer) { 6505 case HCLGE_FD_USER_DEF_L2: 6506 rule->tuples.l2_user_def = info->data; 6507 rule->tuples_mask.l2_user_def = info->data_mask; 6508 break; 6509 case HCLGE_FD_USER_DEF_L3: 6510 rule->tuples.l3_user_def = info->data; 6511 rule->tuples_mask.l3_user_def = info->data_mask; 6512 break; 6513 case HCLGE_FD_USER_DEF_L4: 6514 rule->tuples.l4_user_def = (u32)info->data << 16; 6515 rule->tuples_mask.l4_user_def = (u32)info->data_mask << 16; 6516 break; 6517 default: 6518 break; 6519 } 6520 6521 rule->ep.user_def = *info; 6522 } 6523 6524 static int hclge_fd_get_tuple(struct hclge_dev *hdev, 6525 struct ethtool_rx_flow_spec *fs, 6526 struct hclge_fd_rule *rule, 6527 struct hclge_fd_user_def_info *info) 6528 { 6529 u32 flow_type = fs->flow_type & ~(FLOW_EXT | FLOW_MAC_EXT); 6530 6531 switch (flow_type) { 6532 case SCTP_V4_FLOW: 6533 hclge_fd_get_tcpip4_tuple(hdev, fs, rule, IPPROTO_SCTP); 6534 break; 6535 case TCP_V4_FLOW: 6536 hclge_fd_get_tcpip4_tuple(hdev, fs, rule, IPPROTO_TCP); 6537 break; 6538 case UDP_V4_FLOW: 6539 hclge_fd_get_tcpip4_tuple(hdev, fs, rule, IPPROTO_UDP); 6540 break; 6541 case IP_USER_FLOW: 6542 hclge_fd_get_ip4_tuple(hdev, fs, rule); 6543 break; 6544 case SCTP_V6_FLOW: 6545 hclge_fd_get_tcpip6_tuple(hdev, fs, rule, IPPROTO_SCTP); 6546 break; 6547 case TCP_V6_FLOW: 6548 hclge_fd_get_tcpip6_tuple(hdev, fs, rule, IPPROTO_TCP); 6549 break; 6550 case UDP_V6_FLOW: 6551 hclge_fd_get_tcpip6_tuple(hdev, fs, rule, IPPROTO_UDP); 6552 break; 6553 case IPV6_USER_FLOW: 6554 hclge_fd_get_ip6_tuple(hdev, fs, rule); 6555 break; 6556 case ETHER_FLOW: 6557 hclge_fd_get_ether_tuple(hdev, fs, rule); 6558 break; 6559 default: 6560 return -EOPNOTSUPP; 6561 } 6562 6563 if (fs->flow_type & FLOW_EXT) { 6564 rule->tuples.vlan_tag1 = be16_to_cpu(fs->h_ext.vlan_tci); 6565 rule->tuples_mask.vlan_tag1 = be16_to_cpu(fs->m_ext.vlan_tci); 6566 hclge_fd_get_user_def_tuple(info, rule); 6567 } 6568 6569 if (fs->flow_type & FLOW_MAC_EXT) { 6570 ether_addr_copy(rule->tuples.dst_mac, fs->h_ext.h_dest); 6571 ether_addr_copy(rule->tuples_mask.dst_mac, fs->m_ext.h_dest); 6572 } 6573 6574 return 0; 6575 } 6576 6577 static int hclge_fd_config_rule(struct hclge_dev *hdev, 6578 struct hclge_fd_rule *rule) 6579 { 6580 int ret; 6581 6582 ret = hclge_config_action(hdev, HCLGE_FD_STAGE_1, rule); 6583 if (ret) 6584 return ret; 6585 6586 return hclge_config_key(hdev, HCLGE_FD_STAGE_1, rule); 6587 } 6588 6589 static int hclge_add_fd_entry_common(struct hclge_dev *hdev, 6590 struct hclge_fd_rule *rule) 6591 { 6592 int ret; 6593 6594 spin_lock_bh(&hdev->fd_rule_lock); 6595 6596 if (hdev->fd_active_type != rule->rule_type && 6597 (hdev->fd_active_type == HCLGE_FD_TC_FLOWER_ACTIVE || 6598 hdev->fd_active_type == HCLGE_FD_EP_ACTIVE)) { 6599 dev_err(&hdev->pdev->dev, 6600 "mode conflict(new type %d, active type %d), please delete existent rules first\n", 6601 rule->rule_type, hdev->fd_active_type); 6602 spin_unlock_bh(&hdev->fd_rule_lock); 6603 return -EINVAL; 6604 } 6605 6606 ret = hclge_fd_check_user_def_refcnt(hdev, rule); 6607 if (ret) 6608 goto out; 6609 6610 ret = hclge_clear_arfs_rules(hdev); 6611 if (ret) 6612 goto out; 6613 6614 ret = hclge_fd_config_rule(hdev, rule); 6615 if (ret) 6616 goto out; 6617 6618 rule->state = HCLGE_FD_ACTIVE; 6619 hdev->fd_active_type = rule->rule_type; 6620 hclge_update_fd_list(hdev, rule->state, rule->location, rule); 6621 6622 out: 6623 spin_unlock_bh(&hdev->fd_rule_lock); 6624 return ret; 6625 } 6626 6627 static bool hclge_is_cls_flower_active(struct hnae3_handle *handle) 6628 { 6629 struct hclge_vport *vport = hclge_get_vport(handle); 6630 struct hclge_dev *hdev = vport->back; 6631 6632 return hdev->fd_active_type == HCLGE_FD_TC_FLOWER_ACTIVE; 6633 } 6634 6635 static int hclge_fd_parse_ring_cookie(struct hclge_dev *hdev, u64 ring_cookie, 6636 u16 *vport_id, u8 *action, u16 *queue_id) 6637 { 6638 struct hclge_vport *vport = hdev->vport; 6639 6640 if (ring_cookie == RX_CLS_FLOW_DISC) { 6641 *action = HCLGE_FD_ACTION_DROP_PACKET; 6642 } else { 6643 u32 ring = ethtool_get_flow_spec_ring(ring_cookie); 6644 u8 vf = ethtool_get_flow_spec_ring_vf(ring_cookie); 6645 u16 tqps; 6646 6647 /* To keep consistent with user's configuration, minus 1 when 6648 * printing 'vf', because vf id from ethtool is added 1 for vf. 6649 */ 6650 if (vf > hdev->num_req_vfs) { 6651 dev_err(&hdev->pdev->dev, 6652 "Error: vf id (%u) should be less than %u\n", 6653 vf - 1, hdev->num_req_vfs); 6654 return -EINVAL; 6655 } 6656 6657 *vport_id = vf ? hdev->vport[vf].vport_id : vport->vport_id; 6658 tqps = hdev->vport[vf].nic.kinfo.num_tqps; 6659 6660 if (ring >= tqps) { 6661 dev_err(&hdev->pdev->dev, 6662 "Error: queue id (%u) > max tqp num (%u)\n", 6663 ring, tqps - 1); 6664 return -EINVAL; 6665 } 6666 6667 *action = HCLGE_FD_ACTION_SELECT_QUEUE; 6668 *queue_id = ring; 6669 } 6670 6671 return 0; 6672 } 6673 6674 static int hclge_add_fd_entry(struct hnae3_handle *handle, 6675 struct ethtool_rxnfc *cmd) 6676 { 6677 struct hclge_vport *vport = hclge_get_vport(handle); 6678 struct hclge_dev *hdev = vport->back; 6679 struct hclge_fd_user_def_info info; 6680 u16 dst_vport_id = 0, q_index = 0; 6681 struct ethtool_rx_flow_spec *fs; 6682 struct hclge_fd_rule *rule; 6683 u32 unused = 0; 6684 u8 action; 6685 int ret; 6686 6687 if (!hnae3_dev_fd_supported(hdev)) { 6688 dev_err(&hdev->pdev->dev, 6689 "flow table director is not supported\n"); 6690 return -EOPNOTSUPP; 6691 } 6692 6693 if (!hdev->fd_en) { 6694 dev_err(&hdev->pdev->dev, 6695 "please enable flow director first\n"); 6696 return -EOPNOTSUPP; 6697 } 6698 6699 fs = (struct ethtool_rx_flow_spec *)&cmd->fs; 6700 6701 ret = hclge_fd_check_spec(hdev, fs, &unused, &info); 6702 if (ret) 6703 return ret; 6704 6705 ret = hclge_fd_parse_ring_cookie(hdev, fs->ring_cookie, &dst_vport_id, 6706 &action, &q_index); 6707 if (ret) 6708 return ret; 6709 6710 rule = kzalloc(sizeof(*rule), GFP_KERNEL); 6711 if (!rule) 6712 return -ENOMEM; 6713 6714 ret = hclge_fd_get_tuple(hdev, fs, rule, &info); 6715 if (ret) { 6716 kfree(rule); 6717 return ret; 6718 } 6719 6720 rule->flow_type = fs->flow_type; 6721 rule->location = fs->location; 6722 rule->unused_tuple = unused; 6723 rule->vf_id = dst_vport_id; 6724 rule->queue_id = q_index; 6725 rule->action = action; 6726 rule->rule_type = HCLGE_FD_EP_ACTIVE; 6727 6728 ret = hclge_add_fd_entry_common(hdev, rule); 6729 if (ret) 6730 kfree(rule); 6731 6732 return ret; 6733 } 6734 6735 static int hclge_del_fd_entry(struct hnae3_handle *handle, 6736 struct ethtool_rxnfc *cmd) 6737 { 6738 struct hclge_vport *vport = hclge_get_vport(handle); 6739 struct hclge_dev *hdev = vport->back; 6740 struct ethtool_rx_flow_spec *fs; 6741 int ret; 6742 6743 if (!hnae3_dev_fd_supported(hdev)) 6744 return -EOPNOTSUPP; 6745 6746 fs = (struct ethtool_rx_flow_spec *)&cmd->fs; 6747 6748 if (fs->location >= hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1]) 6749 return -EINVAL; 6750 6751 spin_lock_bh(&hdev->fd_rule_lock); 6752 if (hdev->fd_active_type == HCLGE_FD_TC_FLOWER_ACTIVE || 6753 !test_bit(fs->location, hdev->fd_bmap)) { 6754 dev_err(&hdev->pdev->dev, 6755 "Delete fail, rule %u is inexistent\n", fs->location); 6756 spin_unlock_bh(&hdev->fd_rule_lock); 6757 return -ENOENT; 6758 } 6759 6760 ret = hclge_fd_tcam_config(hdev, HCLGE_FD_STAGE_1, true, fs->location, 6761 NULL, false); 6762 if (ret) 6763 goto out; 6764 6765 hclge_update_fd_list(hdev, HCLGE_FD_DELETED, fs->location, NULL); 6766 6767 out: 6768 spin_unlock_bh(&hdev->fd_rule_lock); 6769 return ret; 6770 } 6771 6772 static void hclge_clear_fd_rules_in_list(struct hclge_dev *hdev, 6773 bool clear_list) 6774 { 6775 struct hclge_fd_rule *rule; 6776 struct hlist_node *node; 6777 u16 location; 6778 6779 if (!hnae3_dev_fd_supported(hdev)) 6780 return; 6781 6782 spin_lock_bh(&hdev->fd_rule_lock); 6783 6784 for_each_set_bit(location, hdev->fd_bmap, 6785 hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1]) 6786 hclge_fd_tcam_config(hdev, HCLGE_FD_STAGE_1, true, location, 6787 NULL, false); 6788 6789 if (clear_list) { 6790 hlist_for_each_entry_safe(rule, node, &hdev->fd_rule_list, 6791 rule_node) { 6792 hlist_del(&rule->rule_node); 6793 kfree(rule); 6794 } 6795 hdev->fd_active_type = HCLGE_FD_RULE_NONE; 6796 hdev->hclge_fd_rule_num = 0; 6797 bitmap_zero(hdev->fd_bmap, 6798 hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1]); 6799 } 6800 6801 spin_unlock_bh(&hdev->fd_rule_lock); 6802 } 6803 6804 static void hclge_del_all_fd_entries(struct hclge_dev *hdev) 6805 { 6806 hclge_clear_fd_rules_in_list(hdev, true); 6807 hclge_fd_disable_user_def(hdev); 6808 } 6809 6810 static int hclge_restore_fd_entries(struct hnae3_handle *handle) 6811 { 6812 struct hclge_vport *vport = hclge_get_vport(handle); 6813 struct hclge_dev *hdev = vport->back; 6814 struct hclge_fd_rule *rule; 6815 struct hlist_node *node; 6816 6817 /* Return ok here, because reset error handling will check this 6818 * return value. If error is returned here, the reset process will 6819 * fail. 6820 */ 6821 if (!hnae3_dev_fd_supported(hdev)) 6822 return 0; 6823 6824 /* if fd is disabled, should not restore it when reset */ 6825 if (!hdev->fd_en) 6826 return 0; 6827 6828 spin_lock_bh(&hdev->fd_rule_lock); 6829 hlist_for_each_entry_safe(rule, node, &hdev->fd_rule_list, rule_node) { 6830 if (rule->state == HCLGE_FD_ACTIVE) 6831 rule->state = HCLGE_FD_TO_ADD; 6832 } 6833 spin_unlock_bh(&hdev->fd_rule_lock); 6834 set_bit(HCLGE_STATE_FD_TBL_CHANGED, &hdev->state); 6835 6836 return 0; 6837 } 6838 6839 static int hclge_get_fd_rule_cnt(struct hnae3_handle *handle, 6840 struct ethtool_rxnfc *cmd) 6841 { 6842 struct hclge_vport *vport = hclge_get_vport(handle); 6843 struct hclge_dev *hdev = vport->back; 6844 6845 if (!hnae3_dev_fd_supported(hdev) || hclge_is_cls_flower_active(handle)) 6846 return -EOPNOTSUPP; 6847 6848 cmd->rule_cnt = hdev->hclge_fd_rule_num; 6849 cmd->data = hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1]; 6850 6851 return 0; 6852 } 6853 6854 static void hclge_fd_get_tcpip4_info(struct hclge_fd_rule *rule, 6855 struct ethtool_tcpip4_spec *spec, 6856 struct ethtool_tcpip4_spec *spec_mask) 6857 { 6858 spec->ip4src = cpu_to_be32(rule->tuples.src_ip[IPV4_INDEX]); 6859 spec_mask->ip4src = rule->unused_tuple & BIT(INNER_SRC_IP) ? 6860 0 : cpu_to_be32(rule->tuples_mask.src_ip[IPV4_INDEX]); 6861 6862 spec->ip4dst = cpu_to_be32(rule->tuples.dst_ip[IPV4_INDEX]); 6863 spec_mask->ip4dst = rule->unused_tuple & BIT(INNER_DST_IP) ? 6864 0 : cpu_to_be32(rule->tuples_mask.dst_ip[IPV4_INDEX]); 6865 6866 spec->psrc = cpu_to_be16(rule->tuples.src_port); 6867 spec_mask->psrc = rule->unused_tuple & BIT(INNER_SRC_PORT) ? 6868 0 : cpu_to_be16(rule->tuples_mask.src_port); 6869 6870 spec->pdst = cpu_to_be16(rule->tuples.dst_port); 6871 spec_mask->pdst = rule->unused_tuple & BIT(INNER_DST_PORT) ? 6872 0 : cpu_to_be16(rule->tuples_mask.dst_port); 6873 6874 spec->tos = rule->tuples.ip_tos; 6875 spec_mask->tos = rule->unused_tuple & BIT(INNER_IP_TOS) ? 6876 0 : rule->tuples_mask.ip_tos; 6877 } 6878 6879 static void hclge_fd_get_ip4_info(struct hclge_fd_rule *rule, 6880 struct ethtool_usrip4_spec *spec, 6881 struct ethtool_usrip4_spec *spec_mask) 6882 { 6883 spec->ip4src = cpu_to_be32(rule->tuples.src_ip[IPV4_INDEX]); 6884 spec_mask->ip4src = rule->unused_tuple & BIT(INNER_SRC_IP) ? 6885 0 : cpu_to_be32(rule->tuples_mask.src_ip[IPV4_INDEX]); 6886 6887 spec->ip4dst = cpu_to_be32(rule->tuples.dst_ip[IPV4_INDEX]); 6888 spec_mask->ip4dst = rule->unused_tuple & BIT(INNER_DST_IP) ? 6889 0 : cpu_to_be32(rule->tuples_mask.dst_ip[IPV4_INDEX]); 6890 6891 spec->tos = rule->tuples.ip_tos; 6892 spec_mask->tos = rule->unused_tuple & BIT(INNER_IP_TOS) ? 6893 0 : rule->tuples_mask.ip_tos; 6894 6895 spec->proto = rule->tuples.ip_proto; 6896 spec_mask->proto = rule->unused_tuple & BIT(INNER_IP_PROTO) ? 6897 0 : rule->tuples_mask.ip_proto; 6898 6899 spec->ip_ver = ETH_RX_NFC_IP4; 6900 } 6901 6902 static void hclge_fd_get_tcpip6_info(struct hclge_fd_rule *rule, 6903 struct ethtool_tcpip6_spec *spec, 6904 struct ethtool_tcpip6_spec *spec_mask) 6905 { 6906 cpu_to_be32_array(spec->ip6src, 6907 rule->tuples.src_ip, IPV6_SIZE); 6908 cpu_to_be32_array(spec->ip6dst, 6909 rule->tuples.dst_ip, IPV6_SIZE); 6910 if (rule->unused_tuple & BIT(INNER_SRC_IP)) 6911 memset(spec_mask->ip6src, 0, sizeof(spec_mask->ip6src)); 6912 else 6913 cpu_to_be32_array(spec_mask->ip6src, rule->tuples_mask.src_ip, 6914 IPV6_SIZE); 6915 6916 if (rule->unused_tuple & BIT(INNER_DST_IP)) 6917 memset(spec_mask->ip6dst, 0, sizeof(spec_mask->ip6dst)); 6918 else 6919 cpu_to_be32_array(spec_mask->ip6dst, rule->tuples_mask.dst_ip, 6920 IPV6_SIZE); 6921 6922 spec->tclass = rule->tuples.ip_tos; 6923 spec_mask->tclass = rule->unused_tuple & BIT(INNER_IP_TOS) ? 6924 0 : rule->tuples_mask.ip_tos; 6925 6926 spec->psrc = cpu_to_be16(rule->tuples.src_port); 6927 spec_mask->psrc = rule->unused_tuple & BIT(INNER_SRC_PORT) ? 6928 0 : cpu_to_be16(rule->tuples_mask.src_port); 6929 6930 spec->pdst = cpu_to_be16(rule->tuples.dst_port); 6931 spec_mask->pdst = rule->unused_tuple & BIT(INNER_DST_PORT) ? 6932 0 : cpu_to_be16(rule->tuples_mask.dst_port); 6933 } 6934 6935 static void hclge_fd_get_ip6_info(struct hclge_fd_rule *rule, 6936 struct ethtool_usrip6_spec *spec, 6937 struct ethtool_usrip6_spec *spec_mask) 6938 { 6939 cpu_to_be32_array(spec->ip6src, rule->tuples.src_ip, IPV6_SIZE); 6940 cpu_to_be32_array(spec->ip6dst, rule->tuples.dst_ip, IPV6_SIZE); 6941 if (rule->unused_tuple & BIT(INNER_SRC_IP)) 6942 memset(spec_mask->ip6src, 0, sizeof(spec_mask->ip6src)); 6943 else 6944 cpu_to_be32_array(spec_mask->ip6src, 6945 rule->tuples_mask.src_ip, IPV6_SIZE); 6946 6947 if (rule->unused_tuple & BIT(INNER_DST_IP)) 6948 memset(spec_mask->ip6dst, 0, sizeof(spec_mask->ip6dst)); 6949 else 6950 cpu_to_be32_array(spec_mask->ip6dst, 6951 rule->tuples_mask.dst_ip, IPV6_SIZE); 6952 6953 spec->tclass = rule->tuples.ip_tos; 6954 spec_mask->tclass = rule->unused_tuple & BIT(INNER_IP_TOS) ? 6955 0 : rule->tuples_mask.ip_tos; 6956 6957 spec->l4_proto = rule->tuples.ip_proto; 6958 spec_mask->l4_proto = rule->unused_tuple & BIT(INNER_IP_PROTO) ? 6959 0 : rule->tuples_mask.ip_proto; 6960 } 6961 6962 static void hclge_fd_get_ether_info(struct hclge_fd_rule *rule, 6963 struct ethhdr *spec, 6964 struct ethhdr *spec_mask) 6965 { 6966 ether_addr_copy(spec->h_source, rule->tuples.src_mac); 6967 ether_addr_copy(spec->h_dest, rule->tuples.dst_mac); 6968 6969 if (rule->unused_tuple & BIT(INNER_SRC_MAC)) 6970 eth_zero_addr(spec_mask->h_source); 6971 else 6972 ether_addr_copy(spec_mask->h_source, rule->tuples_mask.src_mac); 6973 6974 if (rule->unused_tuple & BIT(INNER_DST_MAC)) 6975 eth_zero_addr(spec_mask->h_dest); 6976 else 6977 ether_addr_copy(spec_mask->h_dest, rule->tuples_mask.dst_mac); 6978 6979 spec->h_proto = cpu_to_be16(rule->tuples.ether_proto); 6980 spec_mask->h_proto = rule->unused_tuple & BIT(INNER_ETH_TYPE) ? 6981 0 : cpu_to_be16(rule->tuples_mask.ether_proto); 6982 } 6983 6984 static void hclge_fd_get_user_def_info(struct ethtool_rx_flow_spec *fs, 6985 struct hclge_fd_rule *rule) 6986 { 6987 if ((rule->unused_tuple & HCLGE_FD_TUPLE_USER_DEF_TUPLES) == 6988 HCLGE_FD_TUPLE_USER_DEF_TUPLES) { 6989 fs->h_ext.data[0] = 0; 6990 fs->h_ext.data[1] = 0; 6991 fs->m_ext.data[0] = 0; 6992 fs->m_ext.data[1] = 0; 6993 } else { 6994 fs->h_ext.data[0] = cpu_to_be32(rule->ep.user_def.offset); 6995 fs->h_ext.data[1] = cpu_to_be32(rule->ep.user_def.data); 6996 fs->m_ext.data[0] = 6997 cpu_to_be32(HCLGE_FD_USER_DEF_OFFSET_UNMASK); 6998 fs->m_ext.data[1] = cpu_to_be32(rule->ep.user_def.data_mask); 6999 } 7000 } 7001 7002 static void hclge_fd_get_ext_info(struct ethtool_rx_flow_spec *fs, 7003 struct hclge_fd_rule *rule) 7004 { 7005 if (fs->flow_type & FLOW_EXT) { 7006 fs->h_ext.vlan_tci = cpu_to_be16(rule->tuples.vlan_tag1); 7007 fs->m_ext.vlan_tci = 7008 rule->unused_tuple & BIT(INNER_VLAN_TAG_FST) ? 7009 0 : cpu_to_be16(rule->tuples_mask.vlan_tag1); 7010 7011 hclge_fd_get_user_def_info(fs, rule); 7012 } 7013 7014 if (fs->flow_type & FLOW_MAC_EXT) { 7015 ether_addr_copy(fs->h_ext.h_dest, rule->tuples.dst_mac); 7016 if (rule->unused_tuple & BIT(INNER_DST_MAC)) 7017 eth_zero_addr(fs->m_u.ether_spec.h_dest); 7018 else 7019 ether_addr_copy(fs->m_u.ether_spec.h_dest, 7020 rule->tuples_mask.dst_mac); 7021 } 7022 } 7023 7024 static int hclge_get_fd_rule_info(struct hnae3_handle *handle, 7025 struct ethtool_rxnfc *cmd) 7026 { 7027 struct hclge_vport *vport = hclge_get_vport(handle); 7028 struct hclge_fd_rule *rule = NULL; 7029 struct hclge_dev *hdev = vport->back; 7030 struct ethtool_rx_flow_spec *fs; 7031 struct hlist_node *node2; 7032 7033 if (!hnae3_dev_fd_supported(hdev)) 7034 return -EOPNOTSUPP; 7035 7036 fs = (struct ethtool_rx_flow_spec *)&cmd->fs; 7037 7038 spin_lock_bh(&hdev->fd_rule_lock); 7039 7040 hlist_for_each_entry_safe(rule, node2, &hdev->fd_rule_list, rule_node) { 7041 if (rule->location >= fs->location) 7042 break; 7043 } 7044 7045 if (!rule || fs->location != rule->location) { 7046 spin_unlock_bh(&hdev->fd_rule_lock); 7047 7048 return -ENOENT; 7049 } 7050 7051 fs->flow_type = rule->flow_type; 7052 switch (fs->flow_type & ~(FLOW_EXT | FLOW_MAC_EXT)) { 7053 case SCTP_V4_FLOW: 7054 case TCP_V4_FLOW: 7055 case UDP_V4_FLOW: 7056 hclge_fd_get_tcpip4_info(rule, &fs->h_u.tcp_ip4_spec, 7057 &fs->m_u.tcp_ip4_spec); 7058 break; 7059 case IP_USER_FLOW: 7060 hclge_fd_get_ip4_info(rule, &fs->h_u.usr_ip4_spec, 7061 &fs->m_u.usr_ip4_spec); 7062 break; 7063 case SCTP_V6_FLOW: 7064 case TCP_V6_FLOW: 7065 case UDP_V6_FLOW: 7066 hclge_fd_get_tcpip6_info(rule, &fs->h_u.tcp_ip6_spec, 7067 &fs->m_u.tcp_ip6_spec); 7068 break; 7069 case IPV6_USER_FLOW: 7070 hclge_fd_get_ip6_info(rule, &fs->h_u.usr_ip6_spec, 7071 &fs->m_u.usr_ip6_spec); 7072 break; 7073 /* The flow type of fd rule has been checked before adding in to rule 7074 * list. As other flow types have been handled, it must be ETHER_FLOW 7075 * for the default case 7076 */ 7077 default: 7078 hclge_fd_get_ether_info(rule, &fs->h_u.ether_spec, 7079 &fs->m_u.ether_spec); 7080 break; 7081 } 7082 7083 hclge_fd_get_ext_info(fs, rule); 7084 7085 if (rule->action == HCLGE_FD_ACTION_DROP_PACKET) { 7086 fs->ring_cookie = RX_CLS_FLOW_DISC; 7087 } else { 7088 u64 vf_id; 7089 7090 fs->ring_cookie = rule->queue_id; 7091 vf_id = rule->vf_id; 7092 vf_id <<= ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF; 7093 fs->ring_cookie |= vf_id; 7094 } 7095 7096 spin_unlock_bh(&hdev->fd_rule_lock); 7097 7098 return 0; 7099 } 7100 7101 static int hclge_get_all_rules(struct hnae3_handle *handle, 7102 struct ethtool_rxnfc *cmd, u32 *rule_locs) 7103 { 7104 struct hclge_vport *vport = hclge_get_vport(handle); 7105 struct hclge_dev *hdev = vport->back; 7106 struct hclge_fd_rule *rule; 7107 struct hlist_node *node2; 7108 int cnt = 0; 7109 7110 if (!hnae3_dev_fd_supported(hdev)) 7111 return -EOPNOTSUPP; 7112 7113 cmd->data = hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1]; 7114 7115 spin_lock_bh(&hdev->fd_rule_lock); 7116 hlist_for_each_entry_safe(rule, node2, 7117 &hdev->fd_rule_list, rule_node) { 7118 if (cnt == cmd->rule_cnt) { 7119 spin_unlock_bh(&hdev->fd_rule_lock); 7120 return -EMSGSIZE; 7121 } 7122 7123 if (rule->state == HCLGE_FD_TO_DEL) 7124 continue; 7125 7126 rule_locs[cnt] = rule->location; 7127 cnt++; 7128 } 7129 7130 spin_unlock_bh(&hdev->fd_rule_lock); 7131 7132 cmd->rule_cnt = cnt; 7133 7134 return 0; 7135 } 7136 7137 static void hclge_fd_get_flow_tuples(const struct flow_keys *fkeys, 7138 struct hclge_fd_rule_tuples *tuples) 7139 { 7140 #define flow_ip6_src fkeys->addrs.v6addrs.src.in6_u.u6_addr32 7141 #define flow_ip6_dst fkeys->addrs.v6addrs.dst.in6_u.u6_addr32 7142 7143 tuples->ether_proto = be16_to_cpu(fkeys->basic.n_proto); 7144 tuples->ip_proto = fkeys->basic.ip_proto; 7145 tuples->dst_port = be16_to_cpu(fkeys->ports.dst); 7146 7147 if (fkeys->basic.n_proto == htons(ETH_P_IP)) { 7148 tuples->src_ip[3] = be32_to_cpu(fkeys->addrs.v4addrs.src); 7149 tuples->dst_ip[3] = be32_to_cpu(fkeys->addrs.v4addrs.dst); 7150 } else { 7151 int i; 7152 7153 for (i = 0; i < IPV6_SIZE; i++) { 7154 tuples->src_ip[i] = be32_to_cpu(flow_ip6_src[i]); 7155 tuples->dst_ip[i] = be32_to_cpu(flow_ip6_dst[i]); 7156 } 7157 } 7158 } 7159 7160 /* traverse all rules, check whether an existed rule has the same tuples */ 7161 static struct hclge_fd_rule * 7162 hclge_fd_search_flow_keys(struct hclge_dev *hdev, 7163 const struct hclge_fd_rule_tuples *tuples) 7164 { 7165 struct hclge_fd_rule *rule = NULL; 7166 struct hlist_node *node; 7167 7168 hlist_for_each_entry_safe(rule, node, &hdev->fd_rule_list, rule_node) { 7169 if (!memcmp(tuples, &rule->tuples, sizeof(*tuples))) 7170 return rule; 7171 } 7172 7173 return NULL; 7174 } 7175 7176 static void hclge_fd_build_arfs_rule(const struct hclge_fd_rule_tuples *tuples, 7177 struct hclge_fd_rule *rule) 7178 { 7179 rule->unused_tuple = BIT(INNER_SRC_MAC) | BIT(INNER_DST_MAC) | 7180 BIT(INNER_VLAN_TAG_FST) | BIT(INNER_IP_TOS) | 7181 BIT(INNER_SRC_PORT); 7182 rule->action = 0; 7183 rule->vf_id = 0; 7184 rule->rule_type = HCLGE_FD_ARFS_ACTIVE; 7185 rule->state = HCLGE_FD_TO_ADD; 7186 if (tuples->ether_proto == ETH_P_IP) { 7187 if (tuples->ip_proto == IPPROTO_TCP) 7188 rule->flow_type = TCP_V4_FLOW; 7189 else 7190 rule->flow_type = UDP_V4_FLOW; 7191 } else { 7192 if (tuples->ip_proto == IPPROTO_TCP) 7193 rule->flow_type = TCP_V6_FLOW; 7194 else 7195 rule->flow_type = UDP_V6_FLOW; 7196 } 7197 memcpy(&rule->tuples, tuples, sizeof(rule->tuples)); 7198 memset(&rule->tuples_mask, 0xFF, sizeof(rule->tuples_mask)); 7199 } 7200 7201 static int hclge_add_fd_entry_by_arfs(struct hnae3_handle *handle, u16 queue_id, 7202 u16 flow_id, struct flow_keys *fkeys) 7203 { 7204 struct hclge_vport *vport = hclge_get_vport(handle); 7205 struct hclge_fd_rule_tuples new_tuples = {}; 7206 struct hclge_dev *hdev = vport->back; 7207 struct hclge_fd_rule *rule; 7208 u16 bit_id; 7209 7210 if (!hnae3_dev_fd_supported(hdev)) 7211 return -EOPNOTSUPP; 7212 7213 /* when there is already fd rule existed add by user, 7214 * arfs should not work 7215 */ 7216 spin_lock_bh(&hdev->fd_rule_lock); 7217 if (hdev->fd_active_type != HCLGE_FD_ARFS_ACTIVE && 7218 hdev->fd_active_type != HCLGE_FD_RULE_NONE) { 7219 spin_unlock_bh(&hdev->fd_rule_lock); 7220 return -EOPNOTSUPP; 7221 } 7222 7223 hclge_fd_get_flow_tuples(fkeys, &new_tuples); 7224 7225 /* check is there flow director filter existed for this flow, 7226 * if not, create a new filter for it; 7227 * if filter exist with different queue id, modify the filter; 7228 * if filter exist with same queue id, do nothing 7229 */ 7230 rule = hclge_fd_search_flow_keys(hdev, &new_tuples); 7231 if (!rule) { 7232 bit_id = find_first_zero_bit(hdev->fd_bmap, MAX_FD_FILTER_NUM); 7233 if (bit_id >= hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1]) { 7234 spin_unlock_bh(&hdev->fd_rule_lock); 7235 return -ENOSPC; 7236 } 7237 7238 rule = kzalloc(sizeof(*rule), GFP_ATOMIC); 7239 if (!rule) { 7240 spin_unlock_bh(&hdev->fd_rule_lock); 7241 return -ENOMEM; 7242 } 7243 7244 rule->location = bit_id; 7245 rule->arfs.flow_id = flow_id; 7246 rule->queue_id = queue_id; 7247 hclge_fd_build_arfs_rule(&new_tuples, rule); 7248 hclge_update_fd_list(hdev, rule->state, rule->location, rule); 7249 hdev->fd_active_type = HCLGE_FD_ARFS_ACTIVE; 7250 } else if (rule->queue_id != queue_id) { 7251 rule->queue_id = queue_id; 7252 rule->state = HCLGE_FD_TO_ADD; 7253 set_bit(HCLGE_STATE_FD_TBL_CHANGED, &hdev->state); 7254 hclge_task_schedule(hdev, 0); 7255 } 7256 spin_unlock_bh(&hdev->fd_rule_lock); 7257 return rule->location; 7258 } 7259 7260 static void hclge_rfs_filter_expire(struct hclge_dev *hdev) 7261 { 7262 #ifdef CONFIG_RFS_ACCEL 7263 struct hnae3_handle *handle = &hdev->vport[0].nic; 7264 struct hclge_fd_rule *rule; 7265 struct hlist_node *node; 7266 7267 spin_lock_bh(&hdev->fd_rule_lock); 7268 if (hdev->fd_active_type != HCLGE_FD_ARFS_ACTIVE) { 7269 spin_unlock_bh(&hdev->fd_rule_lock); 7270 return; 7271 } 7272 hlist_for_each_entry_safe(rule, node, &hdev->fd_rule_list, rule_node) { 7273 if (rule->state != HCLGE_FD_ACTIVE) 7274 continue; 7275 if (rps_may_expire_flow(handle->netdev, rule->queue_id, 7276 rule->arfs.flow_id, rule->location)) { 7277 rule->state = HCLGE_FD_TO_DEL; 7278 set_bit(HCLGE_STATE_FD_TBL_CHANGED, &hdev->state); 7279 } 7280 } 7281 spin_unlock_bh(&hdev->fd_rule_lock); 7282 #endif 7283 } 7284 7285 /* make sure being called after lock up with fd_rule_lock */ 7286 static int hclge_clear_arfs_rules(struct hclge_dev *hdev) 7287 { 7288 #ifdef CONFIG_RFS_ACCEL 7289 struct hclge_fd_rule *rule; 7290 struct hlist_node *node; 7291 int ret; 7292 7293 if (hdev->fd_active_type != HCLGE_FD_ARFS_ACTIVE) 7294 return 0; 7295 7296 hlist_for_each_entry_safe(rule, node, &hdev->fd_rule_list, rule_node) { 7297 switch (rule->state) { 7298 case HCLGE_FD_TO_DEL: 7299 case HCLGE_FD_ACTIVE: 7300 ret = hclge_fd_tcam_config(hdev, HCLGE_FD_STAGE_1, true, 7301 rule->location, NULL, false); 7302 if (ret) 7303 return ret; 7304 fallthrough; 7305 case HCLGE_FD_TO_ADD: 7306 hclge_fd_dec_rule_cnt(hdev, rule->location); 7307 hlist_del(&rule->rule_node); 7308 kfree(rule); 7309 break; 7310 default: 7311 break; 7312 } 7313 } 7314 hclge_sync_fd_state(hdev); 7315 7316 #endif 7317 return 0; 7318 } 7319 7320 static void hclge_get_cls_key_basic(const struct flow_rule *flow, 7321 struct hclge_fd_rule *rule) 7322 { 7323 if (flow_rule_match_key(flow, FLOW_DISSECTOR_KEY_BASIC)) { 7324 struct flow_match_basic match; 7325 u16 ethtype_key, ethtype_mask; 7326 7327 flow_rule_match_basic(flow, &match); 7328 ethtype_key = ntohs(match.key->n_proto); 7329 ethtype_mask = ntohs(match.mask->n_proto); 7330 7331 if (ethtype_key == ETH_P_ALL) { 7332 ethtype_key = 0; 7333 ethtype_mask = 0; 7334 } 7335 rule->tuples.ether_proto = ethtype_key; 7336 rule->tuples_mask.ether_proto = ethtype_mask; 7337 rule->tuples.ip_proto = match.key->ip_proto; 7338 rule->tuples_mask.ip_proto = match.mask->ip_proto; 7339 } else { 7340 rule->unused_tuple |= BIT(INNER_IP_PROTO); 7341 rule->unused_tuple |= BIT(INNER_ETH_TYPE); 7342 } 7343 } 7344 7345 static void hclge_get_cls_key_mac(const struct flow_rule *flow, 7346 struct hclge_fd_rule *rule) 7347 { 7348 if (flow_rule_match_key(flow, FLOW_DISSECTOR_KEY_ETH_ADDRS)) { 7349 struct flow_match_eth_addrs match; 7350 7351 flow_rule_match_eth_addrs(flow, &match); 7352 ether_addr_copy(rule->tuples.dst_mac, match.key->dst); 7353 ether_addr_copy(rule->tuples_mask.dst_mac, match.mask->dst); 7354 ether_addr_copy(rule->tuples.src_mac, match.key->src); 7355 ether_addr_copy(rule->tuples_mask.src_mac, match.mask->src); 7356 } else { 7357 rule->unused_tuple |= BIT(INNER_DST_MAC); 7358 rule->unused_tuple |= BIT(INNER_SRC_MAC); 7359 } 7360 } 7361 7362 static void hclge_get_cls_key_vlan(const struct flow_rule *flow, 7363 struct hclge_fd_rule *rule) 7364 { 7365 if (flow_rule_match_key(flow, FLOW_DISSECTOR_KEY_VLAN)) { 7366 struct flow_match_vlan match; 7367 7368 flow_rule_match_vlan(flow, &match); 7369 rule->tuples.vlan_tag1 = match.key->vlan_id | 7370 (match.key->vlan_priority << VLAN_PRIO_SHIFT); 7371 rule->tuples_mask.vlan_tag1 = match.mask->vlan_id | 7372 (match.mask->vlan_priority << VLAN_PRIO_SHIFT); 7373 } else { 7374 rule->unused_tuple |= BIT(INNER_VLAN_TAG_FST); 7375 } 7376 } 7377 7378 static void hclge_get_cls_key_ip(const struct flow_rule *flow, 7379 struct hclge_fd_rule *rule) 7380 { 7381 u16 addr_type = 0; 7382 7383 if (flow_rule_match_key(flow, FLOW_DISSECTOR_KEY_CONTROL)) { 7384 struct flow_match_control match; 7385 7386 flow_rule_match_control(flow, &match); 7387 addr_type = match.key->addr_type; 7388 } 7389 7390 if (addr_type == FLOW_DISSECTOR_KEY_IPV4_ADDRS) { 7391 struct flow_match_ipv4_addrs match; 7392 7393 flow_rule_match_ipv4_addrs(flow, &match); 7394 rule->tuples.src_ip[IPV4_INDEX] = be32_to_cpu(match.key->src); 7395 rule->tuples_mask.src_ip[IPV4_INDEX] = 7396 be32_to_cpu(match.mask->src); 7397 rule->tuples.dst_ip[IPV4_INDEX] = be32_to_cpu(match.key->dst); 7398 rule->tuples_mask.dst_ip[IPV4_INDEX] = 7399 be32_to_cpu(match.mask->dst); 7400 } else if (addr_type == FLOW_DISSECTOR_KEY_IPV6_ADDRS) { 7401 struct flow_match_ipv6_addrs match; 7402 7403 flow_rule_match_ipv6_addrs(flow, &match); 7404 be32_to_cpu_array(rule->tuples.src_ip, match.key->src.s6_addr32, 7405 IPV6_SIZE); 7406 be32_to_cpu_array(rule->tuples_mask.src_ip, 7407 match.mask->src.s6_addr32, IPV6_SIZE); 7408 be32_to_cpu_array(rule->tuples.dst_ip, match.key->dst.s6_addr32, 7409 IPV6_SIZE); 7410 be32_to_cpu_array(rule->tuples_mask.dst_ip, 7411 match.mask->dst.s6_addr32, IPV6_SIZE); 7412 } else { 7413 rule->unused_tuple |= BIT(INNER_SRC_IP); 7414 rule->unused_tuple |= BIT(INNER_DST_IP); 7415 } 7416 } 7417 7418 static void hclge_get_cls_key_port(const struct flow_rule *flow, 7419 struct hclge_fd_rule *rule) 7420 { 7421 if (flow_rule_match_key(flow, FLOW_DISSECTOR_KEY_PORTS)) { 7422 struct flow_match_ports match; 7423 7424 flow_rule_match_ports(flow, &match); 7425 7426 rule->tuples.src_port = be16_to_cpu(match.key->src); 7427 rule->tuples_mask.src_port = be16_to_cpu(match.mask->src); 7428 rule->tuples.dst_port = be16_to_cpu(match.key->dst); 7429 rule->tuples_mask.dst_port = be16_to_cpu(match.mask->dst); 7430 } else { 7431 rule->unused_tuple |= BIT(INNER_SRC_PORT); 7432 rule->unused_tuple |= BIT(INNER_DST_PORT); 7433 } 7434 } 7435 7436 static int hclge_parse_cls_flower(struct hclge_dev *hdev, 7437 struct flow_cls_offload *cls_flower, 7438 struct hclge_fd_rule *rule) 7439 { 7440 struct flow_rule *flow = flow_cls_offload_flow_rule(cls_flower); 7441 struct flow_dissector *dissector = flow->match.dissector; 7442 7443 if (dissector->used_keys & 7444 ~(BIT(FLOW_DISSECTOR_KEY_CONTROL) | 7445 BIT(FLOW_DISSECTOR_KEY_BASIC) | 7446 BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS) | 7447 BIT(FLOW_DISSECTOR_KEY_VLAN) | 7448 BIT(FLOW_DISSECTOR_KEY_IPV4_ADDRS) | 7449 BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS) | 7450 BIT(FLOW_DISSECTOR_KEY_PORTS))) { 7451 dev_err(&hdev->pdev->dev, "unsupported key set: %#x\n", 7452 dissector->used_keys); 7453 return -EOPNOTSUPP; 7454 } 7455 7456 hclge_get_cls_key_basic(flow, rule); 7457 hclge_get_cls_key_mac(flow, rule); 7458 hclge_get_cls_key_vlan(flow, rule); 7459 hclge_get_cls_key_ip(flow, rule); 7460 hclge_get_cls_key_port(flow, rule); 7461 7462 return 0; 7463 } 7464 7465 static int hclge_check_cls_flower(struct hclge_dev *hdev, 7466 struct flow_cls_offload *cls_flower, int tc) 7467 { 7468 u32 prio = cls_flower->common.prio; 7469 7470 if (tc < 0 || tc > hdev->tc_max) { 7471 dev_err(&hdev->pdev->dev, "invalid traffic class\n"); 7472 return -EINVAL; 7473 } 7474 7475 if (prio == 0 || 7476 prio > hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1]) { 7477 dev_err(&hdev->pdev->dev, 7478 "prio %u should be in range[1, %u]\n", 7479 prio, hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1]); 7480 return -EINVAL; 7481 } 7482 7483 if (test_bit(prio - 1, hdev->fd_bmap)) { 7484 dev_err(&hdev->pdev->dev, "prio %u is already used\n", prio); 7485 return -EINVAL; 7486 } 7487 return 0; 7488 } 7489 7490 static int hclge_add_cls_flower(struct hnae3_handle *handle, 7491 struct flow_cls_offload *cls_flower, 7492 int tc) 7493 { 7494 struct hclge_vport *vport = hclge_get_vport(handle); 7495 struct hclge_dev *hdev = vport->back; 7496 struct hclge_fd_rule *rule; 7497 int ret; 7498 7499 ret = hclge_check_cls_flower(hdev, cls_flower, tc); 7500 if (ret) { 7501 dev_err(&hdev->pdev->dev, 7502 "failed to check cls flower params, ret = %d\n", ret); 7503 return ret; 7504 } 7505 7506 rule = kzalloc(sizeof(*rule), GFP_KERNEL); 7507 if (!rule) 7508 return -ENOMEM; 7509 7510 ret = hclge_parse_cls_flower(hdev, cls_flower, rule); 7511 if (ret) { 7512 kfree(rule); 7513 return ret; 7514 } 7515 7516 rule->action = HCLGE_FD_ACTION_SELECT_TC; 7517 rule->cls_flower.tc = tc; 7518 rule->location = cls_flower->common.prio - 1; 7519 rule->vf_id = 0; 7520 rule->cls_flower.cookie = cls_flower->cookie; 7521 rule->rule_type = HCLGE_FD_TC_FLOWER_ACTIVE; 7522 7523 ret = hclge_add_fd_entry_common(hdev, rule); 7524 if (ret) 7525 kfree(rule); 7526 7527 return ret; 7528 } 7529 7530 static struct hclge_fd_rule *hclge_find_cls_flower(struct hclge_dev *hdev, 7531 unsigned long cookie) 7532 { 7533 struct hclge_fd_rule *rule; 7534 struct hlist_node *node; 7535 7536 hlist_for_each_entry_safe(rule, node, &hdev->fd_rule_list, rule_node) { 7537 if (rule->cls_flower.cookie == cookie) 7538 return rule; 7539 } 7540 7541 return NULL; 7542 } 7543 7544 static int hclge_del_cls_flower(struct hnae3_handle *handle, 7545 struct flow_cls_offload *cls_flower) 7546 { 7547 struct hclge_vport *vport = hclge_get_vport(handle); 7548 struct hclge_dev *hdev = vport->back; 7549 struct hclge_fd_rule *rule; 7550 int ret; 7551 7552 spin_lock_bh(&hdev->fd_rule_lock); 7553 7554 rule = hclge_find_cls_flower(hdev, cls_flower->cookie); 7555 if (!rule) { 7556 spin_unlock_bh(&hdev->fd_rule_lock); 7557 return -EINVAL; 7558 } 7559 7560 ret = hclge_fd_tcam_config(hdev, HCLGE_FD_STAGE_1, true, rule->location, 7561 NULL, false); 7562 if (ret) { 7563 spin_unlock_bh(&hdev->fd_rule_lock); 7564 return ret; 7565 } 7566 7567 hclge_update_fd_list(hdev, HCLGE_FD_DELETED, rule->location, NULL); 7568 spin_unlock_bh(&hdev->fd_rule_lock); 7569 7570 return 0; 7571 } 7572 7573 static void hclge_sync_fd_list(struct hclge_dev *hdev, struct hlist_head *hlist) 7574 { 7575 struct hclge_fd_rule *rule; 7576 struct hlist_node *node; 7577 int ret = 0; 7578 7579 if (!test_and_clear_bit(HCLGE_STATE_FD_TBL_CHANGED, &hdev->state)) 7580 return; 7581 7582 spin_lock_bh(&hdev->fd_rule_lock); 7583 7584 hlist_for_each_entry_safe(rule, node, hlist, rule_node) { 7585 switch (rule->state) { 7586 case HCLGE_FD_TO_ADD: 7587 ret = hclge_fd_config_rule(hdev, rule); 7588 if (ret) 7589 goto out; 7590 rule->state = HCLGE_FD_ACTIVE; 7591 break; 7592 case HCLGE_FD_TO_DEL: 7593 ret = hclge_fd_tcam_config(hdev, HCLGE_FD_STAGE_1, true, 7594 rule->location, NULL, false); 7595 if (ret) 7596 goto out; 7597 hclge_fd_dec_rule_cnt(hdev, rule->location); 7598 hclge_fd_free_node(hdev, rule); 7599 break; 7600 default: 7601 break; 7602 } 7603 } 7604 7605 out: 7606 if (ret) 7607 set_bit(HCLGE_STATE_FD_TBL_CHANGED, &hdev->state); 7608 7609 spin_unlock_bh(&hdev->fd_rule_lock); 7610 } 7611 7612 static void hclge_sync_fd_table(struct hclge_dev *hdev) 7613 { 7614 if (test_and_clear_bit(HCLGE_STATE_FD_CLEAR_ALL, &hdev->state)) { 7615 bool clear_list = hdev->fd_active_type == HCLGE_FD_ARFS_ACTIVE; 7616 7617 hclge_clear_fd_rules_in_list(hdev, clear_list); 7618 } 7619 7620 hclge_sync_fd_user_def_cfg(hdev, false); 7621 7622 hclge_sync_fd_list(hdev, &hdev->fd_rule_list); 7623 } 7624 7625 static bool hclge_get_hw_reset_stat(struct hnae3_handle *handle) 7626 { 7627 struct hclge_vport *vport = hclge_get_vport(handle); 7628 struct hclge_dev *hdev = vport->back; 7629 7630 return hclge_read_dev(&hdev->hw, HCLGE_GLOBAL_RESET_REG) || 7631 hclge_read_dev(&hdev->hw, HCLGE_FUN_RST_ING); 7632 } 7633 7634 static bool hclge_get_cmdq_stat(struct hnae3_handle *handle) 7635 { 7636 struct hclge_vport *vport = hclge_get_vport(handle); 7637 struct hclge_dev *hdev = vport->back; 7638 7639 return test_bit(HCLGE_STATE_CMD_DISABLE, &hdev->state); 7640 } 7641 7642 static bool hclge_ae_dev_resetting(struct hnae3_handle *handle) 7643 { 7644 struct hclge_vport *vport = hclge_get_vport(handle); 7645 struct hclge_dev *hdev = vport->back; 7646 7647 return test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state); 7648 } 7649 7650 static unsigned long hclge_ae_dev_reset_cnt(struct hnae3_handle *handle) 7651 { 7652 struct hclge_vport *vport = hclge_get_vport(handle); 7653 struct hclge_dev *hdev = vport->back; 7654 7655 return hdev->rst_stats.hw_reset_done_cnt; 7656 } 7657 7658 static void hclge_enable_fd(struct hnae3_handle *handle, bool enable) 7659 { 7660 struct hclge_vport *vport = hclge_get_vport(handle); 7661 struct hclge_dev *hdev = vport->back; 7662 7663 hdev->fd_en = enable; 7664 7665 if (!enable) 7666 set_bit(HCLGE_STATE_FD_CLEAR_ALL, &hdev->state); 7667 else 7668 hclge_restore_fd_entries(handle); 7669 7670 hclge_task_schedule(hdev, 0); 7671 } 7672 7673 static void hclge_cfg_mac_mode(struct hclge_dev *hdev, bool enable) 7674 { 7675 struct hclge_desc desc; 7676 struct hclge_config_mac_mode_cmd *req = 7677 (struct hclge_config_mac_mode_cmd *)desc.data; 7678 u32 loop_en = 0; 7679 int ret; 7680 7681 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CONFIG_MAC_MODE, false); 7682 7683 if (enable) { 7684 hnae3_set_bit(loop_en, HCLGE_MAC_TX_EN_B, 1U); 7685 hnae3_set_bit(loop_en, HCLGE_MAC_RX_EN_B, 1U); 7686 hnae3_set_bit(loop_en, HCLGE_MAC_PAD_TX_B, 1U); 7687 hnae3_set_bit(loop_en, HCLGE_MAC_PAD_RX_B, 1U); 7688 hnae3_set_bit(loop_en, HCLGE_MAC_FCS_TX_B, 1U); 7689 hnae3_set_bit(loop_en, HCLGE_MAC_RX_FCS_B, 1U); 7690 hnae3_set_bit(loop_en, HCLGE_MAC_RX_FCS_STRIP_B, 1U); 7691 hnae3_set_bit(loop_en, HCLGE_MAC_TX_OVERSIZE_TRUNCATE_B, 1U); 7692 hnae3_set_bit(loop_en, HCLGE_MAC_RX_OVERSIZE_TRUNCATE_B, 1U); 7693 hnae3_set_bit(loop_en, HCLGE_MAC_TX_UNDER_MIN_ERR_B, 1U); 7694 } 7695 7696 req->txrx_pad_fcs_loop_en = cpu_to_le32(loop_en); 7697 7698 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 7699 if (ret) 7700 dev_err(&hdev->pdev->dev, 7701 "mac enable fail, ret =%d.\n", ret); 7702 } 7703 7704 static int hclge_config_switch_param(struct hclge_dev *hdev, int vfid, 7705 u8 switch_param, u8 param_mask) 7706 { 7707 struct hclge_mac_vlan_switch_cmd *req; 7708 struct hclge_desc desc; 7709 u32 func_id; 7710 int ret; 7711 7712 func_id = hclge_get_port_number(HOST_PORT, 0, vfid, 0); 7713 req = (struct hclge_mac_vlan_switch_cmd *)desc.data; 7714 7715 /* read current config parameter */ 7716 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_MAC_VLAN_SWITCH_PARAM, 7717 true); 7718 req->roce_sel = HCLGE_MAC_VLAN_NIC_SEL; 7719 req->func_id = cpu_to_le32(func_id); 7720 7721 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 7722 if (ret) { 7723 dev_err(&hdev->pdev->dev, 7724 "read mac vlan switch parameter fail, ret = %d\n", ret); 7725 return ret; 7726 } 7727 7728 /* modify and write new config parameter */ 7729 hclge_cmd_reuse_desc(&desc, false); 7730 req->switch_param = (req->switch_param & param_mask) | switch_param; 7731 req->param_mask = param_mask; 7732 7733 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 7734 if (ret) 7735 dev_err(&hdev->pdev->dev, 7736 "set mac vlan switch parameter fail, ret = %d\n", ret); 7737 return ret; 7738 } 7739 7740 static void hclge_phy_link_status_wait(struct hclge_dev *hdev, 7741 int link_ret) 7742 { 7743 #define HCLGE_PHY_LINK_STATUS_NUM 200 7744 7745 struct phy_device *phydev = hdev->hw.mac.phydev; 7746 int i = 0; 7747 int ret; 7748 7749 do { 7750 ret = phy_read_status(phydev); 7751 if (ret) { 7752 dev_err(&hdev->pdev->dev, 7753 "phy update link status fail, ret = %d\n", ret); 7754 return; 7755 } 7756 7757 if (phydev->link == link_ret) 7758 break; 7759 7760 msleep(HCLGE_LINK_STATUS_MS); 7761 } while (++i < HCLGE_PHY_LINK_STATUS_NUM); 7762 } 7763 7764 static int hclge_mac_link_status_wait(struct hclge_dev *hdev, int link_ret) 7765 { 7766 #define HCLGE_MAC_LINK_STATUS_NUM 100 7767 7768 int link_status; 7769 int i = 0; 7770 int ret; 7771 7772 do { 7773 ret = hclge_get_mac_link_status(hdev, &link_status); 7774 if (ret) 7775 return ret; 7776 if (link_status == link_ret) 7777 return 0; 7778 7779 msleep(HCLGE_LINK_STATUS_MS); 7780 } while (++i < HCLGE_MAC_LINK_STATUS_NUM); 7781 return -EBUSY; 7782 } 7783 7784 static int hclge_mac_phy_link_status_wait(struct hclge_dev *hdev, bool en, 7785 bool is_phy) 7786 { 7787 int link_ret; 7788 7789 link_ret = en ? HCLGE_LINK_STATUS_UP : HCLGE_LINK_STATUS_DOWN; 7790 7791 if (is_phy) 7792 hclge_phy_link_status_wait(hdev, link_ret); 7793 7794 return hclge_mac_link_status_wait(hdev, link_ret); 7795 } 7796 7797 static int hclge_set_app_loopback(struct hclge_dev *hdev, bool en) 7798 { 7799 struct hclge_config_mac_mode_cmd *req; 7800 struct hclge_desc desc; 7801 u32 loop_en; 7802 int ret; 7803 7804 req = (struct hclge_config_mac_mode_cmd *)&desc.data[0]; 7805 /* 1 Read out the MAC mode config at first */ 7806 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CONFIG_MAC_MODE, true); 7807 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 7808 if (ret) { 7809 dev_err(&hdev->pdev->dev, 7810 "mac loopback get fail, ret =%d.\n", ret); 7811 return ret; 7812 } 7813 7814 /* 2 Then setup the loopback flag */ 7815 loop_en = le32_to_cpu(req->txrx_pad_fcs_loop_en); 7816 hnae3_set_bit(loop_en, HCLGE_MAC_APP_LP_B, en ? 1 : 0); 7817 7818 req->txrx_pad_fcs_loop_en = cpu_to_le32(loop_en); 7819 7820 /* 3 Config mac work mode with loopback flag 7821 * and its original configure parameters 7822 */ 7823 hclge_cmd_reuse_desc(&desc, false); 7824 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 7825 if (ret) 7826 dev_err(&hdev->pdev->dev, 7827 "mac loopback set fail, ret =%d.\n", ret); 7828 return ret; 7829 } 7830 7831 static int hclge_cfg_common_loopback(struct hclge_dev *hdev, bool en, 7832 enum hnae3_loop loop_mode) 7833 { 7834 #define HCLGE_COMMON_LB_RETRY_MS 10 7835 #define HCLGE_COMMON_LB_RETRY_NUM 100 7836 7837 struct hclge_common_lb_cmd *req; 7838 struct hclge_desc desc; 7839 int ret, i = 0; 7840 u8 loop_mode_b; 7841 7842 req = (struct hclge_common_lb_cmd *)desc.data; 7843 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_COMMON_LOOPBACK, false); 7844 7845 switch (loop_mode) { 7846 case HNAE3_LOOP_SERIAL_SERDES: 7847 loop_mode_b = HCLGE_CMD_SERDES_SERIAL_INNER_LOOP_B; 7848 break; 7849 case HNAE3_LOOP_PARALLEL_SERDES: 7850 loop_mode_b = HCLGE_CMD_SERDES_PARALLEL_INNER_LOOP_B; 7851 break; 7852 case HNAE3_LOOP_PHY: 7853 loop_mode_b = HCLGE_CMD_GE_PHY_INNER_LOOP_B; 7854 break; 7855 default: 7856 dev_err(&hdev->pdev->dev, 7857 "unsupported common loopback mode %d\n", loop_mode); 7858 return -ENOTSUPP; 7859 } 7860 7861 if (en) { 7862 req->enable = loop_mode_b; 7863 req->mask = loop_mode_b; 7864 } else { 7865 req->mask = loop_mode_b; 7866 } 7867 7868 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 7869 if (ret) { 7870 dev_err(&hdev->pdev->dev, 7871 "common loopback set fail, ret = %d\n", ret); 7872 return ret; 7873 } 7874 7875 do { 7876 msleep(HCLGE_COMMON_LB_RETRY_MS); 7877 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_COMMON_LOOPBACK, 7878 true); 7879 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 7880 if (ret) { 7881 dev_err(&hdev->pdev->dev, 7882 "common loopback get, ret = %d\n", ret); 7883 return ret; 7884 } 7885 } while (++i < HCLGE_COMMON_LB_RETRY_NUM && 7886 !(req->result & HCLGE_CMD_COMMON_LB_DONE_B)); 7887 7888 if (!(req->result & HCLGE_CMD_COMMON_LB_DONE_B)) { 7889 dev_err(&hdev->pdev->dev, "common loopback set timeout\n"); 7890 return -EBUSY; 7891 } else if (!(req->result & HCLGE_CMD_COMMON_LB_SUCCESS_B)) { 7892 dev_err(&hdev->pdev->dev, "common loopback set failed in fw\n"); 7893 return -EIO; 7894 } 7895 return ret; 7896 } 7897 7898 static int hclge_set_common_loopback(struct hclge_dev *hdev, bool en, 7899 enum hnae3_loop loop_mode) 7900 { 7901 int ret; 7902 7903 ret = hclge_cfg_common_loopback(hdev, en, loop_mode); 7904 if (ret) 7905 return ret; 7906 7907 hclge_cfg_mac_mode(hdev, en); 7908 7909 ret = hclge_mac_phy_link_status_wait(hdev, en, false); 7910 if (ret) 7911 dev_err(&hdev->pdev->dev, 7912 "serdes loopback config mac mode timeout\n"); 7913 7914 return ret; 7915 } 7916 7917 static int hclge_enable_phy_loopback(struct hclge_dev *hdev, 7918 struct phy_device *phydev) 7919 { 7920 int ret; 7921 7922 if (!phydev->suspended) { 7923 ret = phy_suspend(phydev); 7924 if (ret) 7925 return ret; 7926 } 7927 7928 ret = phy_resume(phydev); 7929 if (ret) 7930 return ret; 7931 7932 return phy_loopback(phydev, true); 7933 } 7934 7935 static int hclge_disable_phy_loopback(struct hclge_dev *hdev, 7936 struct phy_device *phydev) 7937 { 7938 int ret; 7939 7940 ret = phy_loopback(phydev, false); 7941 if (ret) 7942 return ret; 7943 7944 return phy_suspend(phydev); 7945 } 7946 7947 static int hclge_set_phy_loopback(struct hclge_dev *hdev, bool en) 7948 { 7949 struct phy_device *phydev = hdev->hw.mac.phydev; 7950 int ret; 7951 7952 if (!phydev) { 7953 if (hnae3_dev_phy_imp_supported(hdev)) 7954 return hclge_set_common_loopback(hdev, en, 7955 HNAE3_LOOP_PHY); 7956 return -ENOTSUPP; 7957 } 7958 7959 if (en) 7960 ret = hclge_enable_phy_loopback(hdev, phydev); 7961 else 7962 ret = hclge_disable_phy_loopback(hdev, phydev); 7963 if (ret) { 7964 dev_err(&hdev->pdev->dev, 7965 "set phy loopback fail, ret = %d\n", ret); 7966 return ret; 7967 } 7968 7969 hclge_cfg_mac_mode(hdev, en); 7970 7971 ret = hclge_mac_phy_link_status_wait(hdev, en, true); 7972 if (ret) 7973 dev_err(&hdev->pdev->dev, 7974 "phy loopback config mac mode timeout\n"); 7975 7976 return ret; 7977 } 7978 7979 static int hclge_tqp_enable_cmd_send(struct hclge_dev *hdev, u16 tqp_id, 7980 u16 stream_id, bool enable) 7981 { 7982 struct hclge_desc desc; 7983 struct hclge_cfg_com_tqp_queue_cmd *req = 7984 (struct hclge_cfg_com_tqp_queue_cmd *)desc.data; 7985 7986 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CFG_COM_TQP_QUEUE, false); 7987 req->tqp_id = cpu_to_le16(tqp_id); 7988 req->stream_id = cpu_to_le16(stream_id); 7989 if (enable) 7990 req->enable |= 1U << HCLGE_TQP_ENABLE_B; 7991 7992 return hclge_cmd_send(&hdev->hw, &desc, 1); 7993 } 7994 7995 static int hclge_tqp_enable(struct hnae3_handle *handle, bool enable) 7996 { 7997 struct hclge_vport *vport = hclge_get_vport(handle); 7998 struct hclge_dev *hdev = vport->back; 7999 int ret; 8000 u16 i; 8001 8002 for (i = 0; i < handle->kinfo.num_tqps; i++) { 8003 ret = hclge_tqp_enable_cmd_send(hdev, i, 0, enable); 8004 if (ret) 8005 return ret; 8006 } 8007 return 0; 8008 } 8009 8010 static int hclge_set_loopback(struct hnae3_handle *handle, 8011 enum hnae3_loop loop_mode, bool en) 8012 { 8013 struct hclge_vport *vport = hclge_get_vport(handle); 8014 struct hclge_dev *hdev = vport->back; 8015 int ret; 8016 8017 /* Loopback can be enabled in three places: SSU, MAC, and serdes. By 8018 * default, SSU loopback is enabled, so if the SMAC and the DMAC are 8019 * the same, the packets are looped back in the SSU. If SSU loopback 8020 * is disabled, packets can reach MAC even if SMAC is the same as DMAC. 8021 */ 8022 if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2) { 8023 u8 switch_param = en ? 0 : BIT(HCLGE_SWITCH_ALW_LPBK_B); 8024 8025 ret = hclge_config_switch_param(hdev, PF_VPORT_ID, switch_param, 8026 HCLGE_SWITCH_ALW_LPBK_MASK); 8027 if (ret) 8028 return ret; 8029 } 8030 8031 switch (loop_mode) { 8032 case HNAE3_LOOP_APP: 8033 ret = hclge_set_app_loopback(hdev, en); 8034 break; 8035 case HNAE3_LOOP_SERIAL_SERDES: 8036 case HNAE3_LOOP_PARALLEL_SERDES: 8037 ret = hclge_set_common_loopback(hdev, en, loop_mode); 8038 break; 8039 case HNAE3_LOOP_PHY: 8040 ret = hclge_set_phy_loopback(hdev, en); 8041 break; 8042 default: 8043 ret = -ENOTSUPP; 8044 dev_err(&hdev->pdev->dev, 8045 "loop_mode %d is not supported\n", loop_mode); 8046 break; 8047 } 8048 8049 if (ret) 8050 return ret; 8051 8052 ret = hclge_tqp_enable(handle, en); 8053 if (ret) 8054 dev_err(&hdev->pdev->dev, "failed to %s tqp in loopback, ret = %d\n", 8055 en ? "enable" : "disable", ret); 8056 8057 return ret; 8058 } 8059 8060 static int hclge_set_default_loopback(struct hclge_dev *hdev) 8061 { 8062 int ret; 8063 8064 ret = hclge_set_app_loopback(hdev, false); 8065 if (ret) 8066 return ret; 8067 8068 ret = hclge_cfg_common_loopback(hdev, false, HNAE3_LOOP_SERIAL_SERDES); 8069 if (ret) 8070 return ret; 8071 8072 return hclge_cfg_common_loopback(hdev, false, 8073 HNAE3_LOOP_PARALLEL_SERDES); 8074 } 8075 8076 static void hclge_reset_tqp_stats(struct hnae3_handle *handle) 8077 { 8078 struct hclge_vport *vport = hclge_get_vport(handle); 8079 struct hnae3_knic_private_info *kinfo; 8080 struct hnae3_queue *queue; 8081 struct hclge_tqp *tqp; 8082 int i; 8083 8084 kinfo = &vport->nic.kinfo; 8085 for (i = 0; i < kinfo->num_tqps; i++) { 8086 queue = handle->kinfo.tqp[i]; 8087 tqp = container_of(queue, struct hclge_tqp, q); 8088 memset(&tqp->tqp_stats, 0, sizeof(tqp->tqp_stats)); 8089 } 8090 } 8091 8092 static void hclge_flush_link_update(struct hclge_dev *hdev) 8093 { 8094 #define HCLGE_FLUSH_LINK_TIMEOUT 100000 8095 8096 unsigned long last = hdev->serv_processed_cnt; 8097 int i = 0; 8098 8099 while (test_bit(HCLGE_STATE_LINK_UPDATING, &hdev->state) && 8100 i++ < HCLGE_FLUSH_LINK_TIMEOUT && 8101 last == hdev->serv_processed_cnt) 8102 usleep_range(1, 1); 8103 } 8104 8105 static void hclge_set_timer_task(struct hnae3_handle *handle, bool enable) 8106 { 8107 struct hclge_vport *vport = hclge_get_vport(handle); 8108 struct hclge_dev *hdev = vport->back; 8109 8110 if (enable) { 8111 hclge_task_schedule(hdev, 0); 8112 } else { 8113 /* Set the DOWN flag here to disable link updating */ 8114 set_bit(HCLGE_STATE_DOWN, &hdev->state); 8115 8116 /* flush memory to make sure DOWN is seen by service task */ 8117 smp_mb__before_atomic(); 8118 hclge_flush_link_update(hdev); 8119 } 8120 } 8121 8122 static int hclge_ae_start(struct hnae3_handle *handle) 8123 { 8124 struct hclge_vport *vport = hclge_get_vport(handle); 8125 struct hclge_dev *hdev = vport->back; 8126 8127 /* mac enable */ 8128 hclge_cfg_mac_mode(hdev, true); 8129 clear_bit(HCLGE_STATE_DOWN, &hdev->state); 8130 hdev->hw.mac.link = 0; 8131 8132 /* reset tqp stats */ 8133 hclge_reset_tqp_stats(handle); 8134 8135 hclge_mac_start_phy(hdev); 8136 8137 return 0; 8138 } 8139 8140 static void hclge_ae_stop(struct hnae3_handle *handle) 8141 { 8142 struct hclge_vport *vport = hclge_get_vport(handle); 8143 struct hclge_dev *hdev = vport->back; 8144 8145 set_bit(HCLGE_STATE_DOWN, &hdev->state); 8146 spin_lock_bh(&hdev->fd_rule_lock); 8147 hclge_clear_arfs_rules(hdev); 8148 spin_unlock_bh(&hdev->fd_rule_lock); 8149 8150 /* If it is not PF reset or FLR, the firmware will disable the MAC, 8151 * so it only need to stop phy here. 8152 */ 8153 if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state) && 8154 hdev->reset_type != HNAE3_FUNC_RESET && 8155 hdev->reset_type != HNAE3_FLR_RESET) { 8156 hclge_mac_stop_phy(hdev); 8157 hclge_update_link_status(hdev); 8158 return; 8159 } 8160 8161 hclge_reset_tqp(handle); 8162 8163 hclge_config_mac_tnl_int(hdev, false); 8164 8165 /* Mac disable */ 8166 hclge_cfg_mac_mode(hdev, false); 8167 8168 hclge_mac_stop_phy(hdev); 8169 8170 /* reset tqp stats */ 8171 hclge_reset_tqp_stats(handle); 8172 hclge_update_link_status(hdev); 8173 } 8174 8175 int hclge_vport_start(struct hclge_vport *vport) 8176 { 8177 struct hclge_dev *hdev = vport->back; 8178 8179 set_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state); 8180 set_bit(HCLGE_VPORT_STATE_PROMISC_CHANGE, &vport->state); 8181 vport->last_active_jiffies = jiffies; 8182 8183 if (test_bit(vport->vport_id, hdev->vport_config_block)) { 8184 if (vport->vport_id) { 8185 hclge_restore_mac_table_common(vport); 8186 hclge_restore_vport_vlan_table(vport); 8187 } else { 8188 hclge_restore_hw_table(hdev); 8189 } 8190 } 8191 8192 clear_bit(vport->vport_id, hdev->vport_config_block); 8193 8194 return 0; 8195 } 8196 8197 void hclge_vport_stop(struct hclge_vport *vport) 8198 { 8199 clear_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state); 8200 } 8201 8202 static int hclge_client_start(struct hnae3_handle *handle) 8203 { 8204 struct hclge_vport *vport = hclge_get_vport(handle); 8205 8206 return hclge_vport_start(vport); 8207 } 8208 8209 static void hclge_client_stop(struct hnae3_handle *handle) 8210 { 8211 struct hclge_vport *vport = hclge_get_vport(handle); 8212 8213 hclge_vport_stop(vport); 8214 } 8215 8216 static int hclge_get_mac_vlan_cmd_status(struct hclge_vport *vport, 8217 u16 cmdq_resp, u8 resp_code, 8218 enum hclge_mac_vlan_tbl_opcode op) 8219 { 8220 struct hclge_dev *hdev = vport->back; 8221 8222 if (cmdq_resp) { 8223 dev_err(&hdev->pdev->dev, 8224 "cmdq execute failed for get_mac_vlan_cmd_status,status=%u.\n", 8225 cmdq_resp); 8226 return -EIO; 8227 } 8228 8229 if (op == HCLGE_MAC_VLAN_ADD) { 8230 if (!resp_code || resp_code == 1) 8231 return 0; 8232 else if (resp_code == HCLGE_ADD_UC_OVERFLOW || 8233 resp_code == HCLGE_ADD_MC_OVERFLOW) 8234 return -ENOSPC; 8235 8236 dev_err(&hdev->pdev->dev, 8237 "add mac addr failed for undefined, code=%u.\n", 8238 resp_code); 8239 return -EIO; 8240 } else if (op == HCLGE_MAC_VLAN_REMOVE) { 8241 if (!resp_code) { 8242 return 0; 8243 } else if (resp_code == 1) { 8244 dev_dbg(&hdev->pdev->dev, 8245 "remove mac addr failed for miss.\n"); 8246 return -ENOENT; 8247 } 8248 8249 dev_err(&hdev->pdev->dev, 8250 "remove mac addr failed for undefined, code=%u.\n", 8251 resp_code); 8252 return -EIO; 8253 } else if (op == HCLGE_MAC_VLAN_LKUP) { 8254 if (!resp_code) { 8255 return 0; 8256 } else if (resp_code == 1) { 8257 dev_dbg(&hdev->pdev->dev, 8258 "lookup mac addr failed for miss.\n"); 8259 return -ENOENT; 8260 } 8261 8262 dev_err(&hdev->pdev->dev, 8263 "lookup mac addr failed for undefined, code=%u.\n", 8264 resp_code); 8265 return -EIO; 8266 } 8267 8268 dev_err(&hdev->pdev->dev, 8269 "unknown opcode for get_mac_vlan_cmd_status, opcode=%d.\n", op); 8270 8271 return -EINVAL; 8272 } 8273 8274 static int hclge_update_desc_vfid(struct hclge_desc *desc, int vfid, bool clr) 8275 { 8276 #define HCLGE_VF_NUM_IN_FIRST_DESC 192 8277 8278 unsigned int word_num; 8279 unsigned int bit_num; 8280 8281 if (vfid > 255 || vfid < 0) 8282 return -EIO; 8283 8284 if (vfid >= 0 && vfid < HCLGE_VF_NUM_IN_FIRST_DESC) { 8285 word_num = vfid / 32; 8286 bit_num = vfid % 32; 8287 if (clr) 8288 desc[1].data[word_num] &= cpu_to_le32(~(1 << bit_num)); 8289 else 8290 desc[1].data[word_num] |= cpu_to_le32(1 << bit_num); 8291 } else { 8292 word_num = (vfid - HCLGE_VF_NUM_IN_FIRST_DESC) / 32; 8293 bit_num = vfid % 32; 8294 if (clr) 8295 desc[2].data[word_num] &= cpu_to_le32(~(1 << bit_num)); 8296 else 8297 desc[2].data[word_num] |= cpu_to_le32(1 << bit_num); 8298 } 8299 8300 return 0; 8301 } 8302 8303 static bool hclge_is_all_function_id_zero(struct hclge_desc *desc) 8304 { 8305 #define HCLGE_DESC_NUMBER 3 8306 #define HCLGE_FUNC_NUMBER_PER_DESC 6 8307 int i, j; 8308 8309 for (i = 1; i < HCLGE_DESC_NUMBER; i++) 8310 for (j = 0; j < HCLGE_FUNC_NUMBER_PER_DESC; j++) 8311 if (desc[i].data[j]) 8312 return false; 8313 8314 return true; 8315 } 8316 8317 static void hclge_prepare_mac_addr(struct hclge_mac_vlan_tbl_entry_cmd *new_req, 8318 const u8 *addr, bool is_mc) 8319 { 8320 const unsigned char *mac_addr = addr; 8321 u32 high_val = mac_addr[2] << 16 | (mac_addr[3] << 24) | 8322 (mac_addr[0]) | (mac_addr[1] << 8); 8323 u32 low_val = mac_addr[4] | (mac_addr[5] << 8); 8324 8325 hnae3_set_bit(new_req->flags, HCLGE_MAC_VLAN_BIT0_EN_B, 1); 8326 if (is_mc) { 8327 hnae3_set_bit(new_req->entry_type, HCLGE_MAC_VLAN_BIT1_EN_B, 1); 8328 hnae3_set_bit(new_req->mc_mac_en, HCLGE_MAC_VLAN_BIT0_EN_B, 1); 8329 } 8330 8331 new_req->mac_addr_hi32 = cpu_to_le32(high_val); 8332 new_req->mac_addr_lo16 = cpu_to_le16(low_val & 0xffff); 8333 } 8334 8335 static int hclge_remove_mac_vlan_tbl(struct hclge_vport *vport, 8336 struct hclge_mac_vlan_tbl_entry_cmd *req) 8337 { 8338 struct hclge_dev *hdev = vport->back; 8339 struct hclge_desc desc; 8340 u8 resp_code; 8341 u16 retval; 8342 int ret; 8343 8344 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_MAC_VLAN_REMOVE, false); 8345 8346 memcpy(desc.data, req, sizeof(struct hclge_mac_vlan_tbl_entry_cmd)); 8347 8348 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 8349 if (ret) { 8350 dev_err(&hdev->pdev->dev, 8351 "del mac addr failed for cmd_send, ret =%d.\n", 8352 ret); 8353 return ret; 8354 } 8355 resp_code = (le32_to_cpu(desc.data[0]) >> 8) & 0xff; 8356 retval = le16_to_cpu(desc.retval); 8357 8358 return hclge_get_mac_vlan_cmd_status(vport, retval, resp_code, 8359 HCLGE_MAC_VLAN_REMOVE); 8360 } 8361 8362 static int hclge_lookup_mac_vlan_tbl(struct hclge_vport *vport, 8363 struct hclge_mac_vlan_tbl_entry_cmd *req, 8364 struct hclge_desc *desc, 8365 bool is_mc) 8366 { 8367 struct hclge_dev *hdev = vport->back; 8368 u8 resp_code; 8369 u16 retval; 8370 int ret; 8371 8372 hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_MAC_VLAN_ADD, true); 8373 if (is_mc) { 8374 desc[0].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT); 8375 memcpy(desc[0].data, 8376 req, 8377 sizeof(struct hclge_mac_vlan_tbl_entry_cmd)); 8378 hclge_cmd_setup_basic_desc(&desc[1], 8379 HCLGE_OPC_MAC_VLAN_ADD, 8380 true); 8381 desc[1].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT); 8382 hclge_cmd_setup_basic_desc(&desc[2], 8383 HCLGE_OPC_MAC_VLAN_ADD, 8384 true); 8385 ret = hclge_cmd_send(&hdev->hw, desc, 3); 8386 } else { 8387 memcpy(desc[0].data, 8388 req, 8389 sizeof(struct hclge_mac_vlan_tbl_entry_cmd)); 8390 ret = hclge_cmd_send(&hdev->hw, desc, 1); 8391 } 8392 if (ret) { 8393 dev_err(&hdev->pdev->dev, 8394 "lookup mac addr failed for cmd_send, ret =%d.\n", 8395 ret); 8396 return ret; 8397 } 8398 resp_code = (le32_to_cpu(desc[0].data[0]) >> 8) & 0xff; 8399 retval = le16_to_cpu(desc[0].retval); 8400 8401 return hclge_get_mac_vlan_cmd_status(vport, retval, resp_code, 8402 HCLGE_MAC_VLAN_LKUP); 8403 } 8404 8405 static int hclge_add_mac_vlan_tbl(struct hclge_vport *vport, 8406 struct hclge_mac_vlan_tbl_entry_cmd *req, 8407 struct hclge_desc *mc_desc) 8408 { 8409 struct hclge_dev *hdev = vport->back; 8410 int cfg_status; 8411 u8 resp_code; 8412 u16 retval; 8413 int ret; 8414 8415 if (!mc_desc) { 8416 struct hclge_desc desc; 8417 8418 hclge_cmd_setup_basic_desc(&desc, 8419 HCLGE_OPC_MAC_VLAN_ADD, 8420 false); 8421 memcpy(desc.data, req, 8422 sizeof(struct hclge_mac_vlan_tbl_entry_cmd)); 8423 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 8424 resp_code = (le32_to_cpu(desc.data[0]) >> 8) & 0xff; 8425 retval = le16_to_cpu(desc.retval); 8426 8427 cfg_status = hclge_get_mac_vlan_cmd_status(vport, retval, 8428 resp_code, 8429 HCLGE_MAC_VLAN_ADD); 8430 } else { 8431 hclge_cmd_reuse_desc(&mc_desc[0], false); 8432 mc_desc[0].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT); 8433 hclge_cmd_reuse_desc(&mc_desc[1], false); 8434 mc_desc[1].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT); 8435 hclge_cmd_reuse_desc(&mc_desc[2], false); 8436 mc_desc[2].flag &= cpu_to_le16(~HCLGE_CMD_FLAG_NEXT); 8437 memcpy(mc_desc[0].data, req, 8438 sizeof(struct hclge_mac_vlan_tbl_entry_cmd)); 8439 ret = hclge_cmd_send(&hdev->hw, mc_desc, 3); 8440 resp_code = (le32_to_cpu(mc_desc[0].data[0]) >> 8) & 0xff; 8441 retval = le16_to_cpu(mc_desc[0].retval); 8442 8443 cfg_status = hclge_get_mac_vlan_cmd_status(vport, retval, 8444 resp_code, 8445 HCLGE_MAC_VLAN_ADD); 8446 } 8447 8448 if (ret) { 8449 dev_err(&hdev->pdev->dev, 8450 "add mac addr failed for cmd_send, ret =%d.\n", 8451 ret); 8452 return ret; 8453 } 8454 8455 return cfg_status; 8456 } 8457 8458 static int hclge_set_umv_space(struct hclge_dev *hdev, u16 space_size, 8459 u16 *allocated_size) 8460 { 8461 struct hclge_umv_spc_alc_cmd *req; 8462 struct hclge_desc desc; 8463 int ret; 8464 8465 req = (struct hclge_umv_spc_alc_cmd *)desc.data; 8466 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_MAC_VLAN_ALLOCATE, false); 8467 8468 req->space_size = cpu_to_le32(space_size); 8469 8470 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 8471 if (ret) { 8472 dev_err(&hdev->pdev->dev, "failed to set umv space, ret = %d\n", 8473 ret); 8474 return ret; 8475 } 8476 8477 *allocated_size = le32_to_cpu(desc.data[1]); 8478 8479 return 0; 8480 } 8481 8482 static int hclge_init_umv_space(struct hclge_dev *hdev) 8483 { 8484 u16 allocated_size = 0; 8485 int ret; 8486 8487 ret = hclge_set_umv_space(hdev, hdev->wanted_umv_size, &allocated_size); 8488 if (ret) 8489 return ret; 8490 8491 if (allocated_size < hdev->wanted_umv_size) 8492 dev_warn(&hdev->pdev->dev, 8493 "failed to alloc umv space, want %u, get %u\n", 8494 hdev->wanted_umv_size, allocated_size); 8495 8496 hdev->max_umv_size = allocated_size; 8497 hdev->priv_umv_size = hdev->max_umv_size / (hdev->num_alloc_vport + 1); 8498 hdev->share_umv_size = hdev->priv_umv_size + 8499 hdev->max_umv_size % (hdev->num_alloc_vport + 1); 8500 8501 return 0; 8502 } 8503 8504 static void hclge_reset_umv_space(struct hclge_dev *hdev) 8505 { 8506 struct hclge_vport *vport; 8507 int i; 8508 8509 for (i = 0; i < hdev->num_alloc_vport; i++) { 8510 vport = &hdev->vport[i]; 8511 vport->used_umv_num = 0; 8512 } 8513 8514 mutex_lock(&hdev->vport_lock); 8515 hdev->share_umv_size = hdev->priv_umv_size + 8516 hdev->max_umv_size % (hdev->num_alloc_vport + 1); 8517 mutex_unlock(&hdev->vport_lock); 8518 } 8519 8520 static bool hclge_is_umv_space_full(struct hclge_vport *vport, bool need_lock) 8521 { 8522 struct hclge_dev *hdev = vport->back; 8523 bool is_full; 8524 8525 if (need_lock) 8526 mutex_lock(&hdev->vport_lock); 8527 8528 is_full = (vport->used_umv_num >= hdev->priv_umv_size && 8529 hdev->share_umv_size == 0); 8530 8531 if (need_lock) 8532 mutex_unlock(&hdev->vport_lock); 8533 8534 return is_full; 8535 } 8536 8537 static void hclge_update_umv_space(struct hclge_vport *vport, bool is_free) 8538 { 8539 struct hclge_dev *hdev = vport->back; 8540 8541 if (is_free) { 8542 if (vport->used_umv_num > hdev->priv_umv_size) 8543 hdev->share_umv_size++; 8544 8545 if (vport->used_umv_num > 0) 8546 vport->used_umv_num--; 8547 } else { 8548 if (vport->used_umv_num >= hdev->priv_umv_size && 8549 hdev->share_umv_size > 0) 8550 hdev->share_umv_size--; 8551 vport->used_umv_num++; 8552 } 8553 } 8554 8555 static struct hclge_mac_node *hclge_find_mac_node(struct list_head *list, 8556 const u8 *mac_addr) 8557 { 8558 struct hclge_mac_node *mac_node, *tmp; 8559 8560 list_for_each_entry_safe(mac_node, tmp, list, node) 8561 if (ether_addr_equal(mac_addr, mac_node->mac_addr)) 8562 return mac_node; 8563 8564 return NULL; 8565 } 8566 8567 static void hclge_update_mac_node(struct hclge_mac_node *mac_node, 8568 enum HCLGE_MAC_NODE_STATE state) 8569 { 8570 switch (state) { 8571 /* from set_rx_mode or tmp_add_list */ 8572 case HCLGE_MAC_TO_ADD: 8573 if (mac_node->state == HCLGE_MAC_TO_DEL) 8574 mac_node->state = HCLGE_MAC_ACTIVE; 8575 break; 8576 /* only from set_rx_mode */ 8577 case HCLGE_MAC_TO_DEL: 8578 if (mac_node->state == HCLGE_MAC_TO_ADD) { 8579 list_del(&mac_node->node); 8580 kfree(mac_node); 8581 } else { 8582 mac_node->state = HCLGE_MAC_TO_DEL; 8583 } 8584 break; 8585 /* only from tmp_add_list, the mac_node->state won't be 8586 * ACTIVE. 8587 */ 8588 case HCLGE_MAC_ACTIVE: 8589 if (mac_node->state == HCLGE_MAC_TO_ADD) 8590 mac_node->state = HCLGE_MAC_ACTIVE; 8591 8592 break; 8593 } 8594 } 8595 8596 int hclge_update_mac_list(struct hclge_vport *vport, 8597 enum HCLGE_MAC_NODE_STATE state, 8598 enum HCLGE_MAC_ADDR_TYPE mac_type, 8599 const unsigned char *addr) 8600 { 8601 struct hclge_dev *hdev = vport->back; 8602 struct hclge_mac_node *mac_node; 8603 struct list_head *list; 8604 8605 list = (mac_type == HCLGE_MAC_ADDR_UC) ? 8606 &vport->uc_mac_list : &vport->mc_mac_list; 8607 8608 spin_lock_bh(&vport->mac_list_lock); 8609 8610 /* if the mac addr is already in the mac list, no need to add a new 8611 * one into it, just check the mac addr state, convert it to a new 8612 * state, or just remove it, or do nothing. 8613 */ 8614 mac_node = hclge_find_mac_node(list, addr); 8615 if (mac_node) { 8616 hclge_update_mac_node(mac_node, state); 8617 spin_unlock_bh(&vport->mac_list_lock); 8618 set_bit(HCLGE_VPORT_STATE_MAC_TBL_CHANGE, &vport->state); 8619 return 0; 8620 } 8621 8622 /* if this address is never added, unnecessary to delete */ 8623 if (state == HCLGE_MAC_TO_DEL) { 8624 spin_unlock_bh(&vport->mac_list_lock); 8625 dev_err(&hdev->pdev->dev, 8626 "failed to delete address %pM from mac list\n", 8627 addr); 8628 return -ENOENT; 8629 } 8630 8631 mac_node = kzalloc(sizeof(*mac_node), GFP_ATOMIC); 8632 if (!mac_node) { 8633 spin_unlock_bh(&vport->mac_list_lock); 8634 return -ENOMEM; 8635 } 8636 8637 set_bit(HCLGE_VPORT_STATE_MAC_TBL_CHANGE, &vport->state); 8638 8639 mac_node->state = state; 8640 ether_addr_copy(mac_node->mac_addr, addr); 8641 list_add_tail(&mac_node->node, list); 8642 8643 spin_unlock_bh(&vport->mac_list_lock); 8644 8645 return 0; 8646 } 8647 8648 static int hclge_add_uc_addr(struct hnae3_handle *handle, 8649 const unsigned char *addr) 8650 { 8651 struct hclge_vport *vport = hclge_get_vport(handle); 8652 8653 return hclge_update_mac_list(vport, HCLGE_MAC_TO_ADD, HCLGE_MAC_ADDR_UC, 8654 addr); 8655 } 8656 8657 int hclge_add_uc_addr_common(struct hclge_vport *vport, 8658 const unsigned char *addr) 8659 { 8660 struct hclge_dev *hdev = vport->back; 8661 struct hclge_mac_vlan_tbl_entry_cmd req; 8662 struct hclge_desc desc; 8663 u16 egress_port = 0; 8664 int ret; 8665 8666 /* mac addr check */ 8667 if (is_zero_ether_addr(addr) || 8668 is_broadcast_ether_addr(addr) || 8669 is_multicast_ether_addr(addr)) { 8670 dev_err(&hdev->pdev->dev, 8671 "Set_uc mac err! invalid mac:%pM. is_zero:%d,is_br=%d,is_mul=%d\n", 8672 addr, is_zero_ether_addr(addr), 8673 is_broadcast_ether_addr(addr), 8674 is_multicast_ether_addr(addr)); 8675 return -EINVAL; 8676 } 8677 8678 memset(&req, 0, sizeof(req)); 8679 8680 hnae3_set_field(egress_port, HCLGE_MAC_EPORT_VFID_M, 8681 HCLGE_MAC_EPORT_VFID_S, vport->vport_id); 8682 8683 req.egress_port = cpu_to_le16(egress_port); 8684 8685 hclge_prepare_mac_addr(&req, addr, false); 8686 8687 /* Lookup the mac address in the mac_vlan table, and add 8688 * it if the entry is inexistent. Repeated unicast entry 8689 * is not allowed in the mac vlan table. 8690 */ 8691 ret = hclge_lookup_mac_vlan_tbl(vport, &req, &desc, false); 8692 if (ret == -ENOENT) { 8693 mutex_lock(&hdev->vport_lock); 8694 if (!hclge_is_umv_space_full(vport, false)) { 8695 ret = hclge_add_mac_vlan_tbl(vport, &req, NULL); 8696 if (!ret) 8697 hclge_update_umv_space(vport, false); 8698 mutex_unlock(&hdev->vport_lock); 8699 return ret; 8700 } 8701 mutex_unlock(&hdev->vport_lock); 8702 8703 if (!(vport->overflow_promisc_flags & HNAE3_OVERFLOW_UPE)) 8704 dev_err(&hdev->pdev->dev, "UC MAC table full(%u)\n", 8705 hdev->priv_umv_size); 8706 8707 return -ENOSPC; 8708 } 8709 8710 /* check if we just hit the duplicate */ 8711 if (!ret) 8712 return -EEXIST; 8713 8714 return ret; 8715 } 8716 8717 static int hclge_rm_uc_addr(struct hnae3_handle *handle, 8718 const unsigned char *addr) 8719 { 8720 struct hclge_vport *vport = hclge_get_vport(handle); 8721 8722 return hclge_update_mac_list(vport, HCLGE_MAC_TO_DEL, HCLGE_MAC_ADDR_UC, 8723 addr); 8724 } 8725 8726 int hclge_rm_uc_addr_common(struct hclge_vport *vport, 8727 const unsigned char *addr) 8728 { 8729 struct hclge_dev *hdev = vport->back; 8730 struct hclge_mac_vlan_tbl_entry_cmd req; 8731 int ret; 8732 8733 /* mac addr check */ 8734 if (is_zero_ether_addr(addr) || 8735 is_broadcast_ether_addr(addr) || 8736 is_multicast_ether_addr(addr)) { 8737 dev_dbg(&hdev->pdev->dev, "Remove mac err! invalid mac:%pM.\n", 8738 addr); 8739 return -EINVAL; 8740 } 8741 8742 memset(&req, 0, sizeof(req)); 8743 hnae3_set_bit(req.entry_type, HCLGE_MAC_VLAN_BIT0_EN_B, 0); 8744 hclge_prepare_mac_addr(&req, addr, false); 8745 ret = hclge_remove_mac_vlan_tbl(vport, &req); 8746 if (!ret) { 8747 mutex_lock(&hdev->vport_lock); 8748 hclge_update_umv_space(vport, true); 8749 mutex_unlock(&hdev->vport_lock); 8750 } else if (ret == -ENOENT) { 8751 ret = 0; 8752 } 8753 8754 return ret; 8755 } 8756 8757 static int hclge_add_mc_addr(struct hnae3_handle *handle, 8758 const unsigned char *addr) 8759 { 8760 struct hclge_vport *vport = hclge_get_vport(handle); 8761 8762 return hclge_update_mac_list(vport, HCLGE_MAC_TO_ADD, HCLGE_MAC_ADDR_MC, 8763 addr); 8764 } 8765 8766 int hclge_add_mc_addr_common(struct hclge_vport *vport, 8767 const unsigned char *addr) 8768 { 8769 struct hclge_dev *hdev = vport->back; 8770 struct hclge_mac_vlan_tbl_entry_cmd req; 8771 struct hclge_desc desc[3]; 8772 int status; 8773 8774 /* mac addr check */ 8775 if (!is_multicast_ether_addr(addr)) { 8776 dev_err(&hdev->pdev->dev, 8777 "Add mc mac err! invalid mac:%pM.\n", 8778 addr); 8779 return -EINVAL; 8780 } 8781 memset(&req, 0, sizeof(req)); 8782 hclge_prepare_mac_addr(&req, addr, true); 8783 status = hclge_lookup_mac_vlan_tbl(vport, &req, desc, true); 8784 if (status) { 8785 /* This mac addr do not exist, add new entry for it */ 8786 memset(desc[0].data, 0, sizeof(desc[0].data)); 8787 memset(desc[1].data, 0, sizeof(desc[0].data)); 8788 memset(desc[2].data, 0, sizeof(desc[0].data)); 8789 } 8790 status = hclge_update_desc_vfid(desc, vport->vport_id, false); 8791 if (status) 8792 return status; 8793 status = hclge_add_mac_vlan_tbl(vport, &req, desc); 8794 /* if already overflow, not to print each time */ 8795 if (status == -ENOSPC && 8796 !(vport->overflow_promisc_flags & HNAE3_OVERFLOW_MPE)) 8797 dev_err(&hdev->pdev->dev, "mc mac vlan table is full\n"); 8798 8799 return status; 8800 } 8801 8802 static int hclge_rm_mc_addr(struct hnae3_handle *handle, 8803 const unsigned char *addr) 8804 { 8805 struct hclge_vport *vport = hclge_get_vport(handle); 8806 8807 return hclge_update_mac_list(vport, HCLGE_MAC_TO_DEL, HCLGE_MAC_ADDR_MC, 8808 addr); 8809 } 8810 8811 int hclge_rm_mc_addr_common(struct hclge_vport *vport, 8812 const unsigned char *addr) 8813 { 8814 struct hclge_dev *hdev = vport->back; 8815 struct hclge_mac_vlan_tbl_entry_cmd req; 8816 enum hclge_cmd_status status; 8817 struct hclge_desc desc[3]; 8818 8819 /* mac addr check */ 8820 if (!is_multicast_ether_addr(addr)) { 8821 dev_dbg(&hdev->pdev->dev, 8822 "Remove mc mac err! invalid mac:%pM.\n", 8823 addr); 8824 return -EINVAL; 8825 } 8826 8827 memset(&req, 0, sizeof(req)); 8828 hclge_prepare_mac_addr(&req, addr, true); 8829 status = hclge_lookup_mac_vlan_tbl(vport, &req, desc, true); 8830 if (!status) { 8831 /* This mac addr exist, remove this handle's VFID for it */ 8832 status = hclge_update_desc_vfid(desc, vport->vport_id, true); 8833 if (status) 8834 return status; 8835 8836 if (hclge_is_all_function_id_zero(desc)) 8837 /* All the vfid is zero, so need to delete this entry */ 8838 status = hclge_remove_mac_vlan_tbl(vport, &req); 8839 else 8840 /* Not all the vfid is zero, update the vfid */ 8841 status = hclge_add_mac_vlan_tbl(vport, &req, desc); 8842 } else if (status == -ENOENT) { 8843 status = 0; 8844 } 8845 8846 return status; 8847 } 8848 8849 static void hclge_sync_vport_mac_list(struct hclge_vport *vport, 8850 struct list_head *list, 8851 int (*sync)(struct hclge_vport *, 8852 const unsigned char *)) 8853 { 8854 struct hclge_mac_node *mac_node, *tmp; 8855 int ret; 8856 8857 list_for_each_entry_safe(mac_node, tmp, list, node) { 8858 ret = sync(vport, mac_node->mac_addr); 8859 if (!ret) { 8860 mac_node->state = HCLGE_MAC_ACTIVE; 8861 } else { 8862 set_bit(HCLGE_VPORT_STATE_MAC_TBL_CHANGE, 8863 &vport->state); 8864 8865 /* If one unicast mac address is existing in hardware, 8866 * we need to try whether other unicast mac addresses 8867 * are new addresses that can be added. 8868 */ 8869 if (ret != -EEXIST) 8870 break; 8871 } 8872 } 8873 } 8874 8875 static void hclge_unsync_vport_mac_list(struct hclge_vport *vport, 8876 struct list_head *list, 8877 int (*unsync)(struct hclge_vport *, 8878 const unsigned char *)) 8879 { 8880 struct hclge_mac_node *mac_node, *tmp; 8881 int ret; 8882 8883 list_for_each_entry_safe(mac_node, tmp, list, node) { 8884 ret = unsync(vport, mac_node->mac_addr); 8885 if (!ret || ret == -ENOENT) { 8886 list_del(&mac_node->node); 8887 kfree(mac_node); 8888 } else { 8889 set_bit(HCLGE_VPORT_STATE_MAC_TBL_CHANGE, 8890 &vport->state); 8891 break; 8892 } 8893 } 8894 } 8895 8896 static bool hclge_sync_from_add_list(struct list_head *add_list, 8897 struct list_head *mac_list) 8898 { 8899 struct hclge_mac_node *mac_node, *tmp, *new_node; 8900 bool all_added = true; 8901 8902 list_for_each_entry_safe(mac_node, tmp, add_list, node) { 8903 if (mac_node->state == HCLGE_MAC_TO_ADD) 8904 all_added = false; 8905 8906 /* if the mac address from tmp_add_list is not in the 8907 * uc/mc_mac_list, it means have received a TO_DEL request 8908 * during the time window of adding the mac address into mac 8909 * table. if mac_node state is ACTIVE, then change it to TO_DEL, 8910 * then it will be removed at next time. else it must be TO_ADD, 8911 * this address hasn't been added into mac table, 8912 * so just remove the mac node. 8913 */ 8914 new_node = hclge_find_mac_node(mac_list, mac_node->mac_addr); 8915 if (new_node) { 8916 hclge_update_mac_node(new_node, mac_node->state); 8917 list_del(&mac_node->node); 8918 kfree(mac_node); 8919 } else if (mac_node->state == HCLGE_MAC_ACTIVE) { 8920 mac_node->state = HCLGE_MAC_TO_DEL; 8921 list_move_tail(&mac_node->node, mac_list); 8922 } else { 8923 list_del(&mac_node->node); 8924 kfree(mac_node); 8925 } 8926 } 8927 8928 return all_added; 8929 } 8930 8931 static void hclge_sync_from_del_list(struct list_head *del_list, 8932 struct list_head *mac_list) 8933 { 8934 struct hclge_mac_node *mac_node, *tmp, *new_node; 8935 8936 list_for_each_entry_safe(mac_node, tmp, del_list, node) { 8937 new_node = hclge_find_mac_node(mac_list, mac_node->mac_addr); 8938 if (new_node) { 8939 /* If the mac addr exists in the mac list, it means 8940 * received a new TO_ADD request during the time window 8941 * of configuring the mac address. For the mac node 8942 * state is TO_ADD, and the address is already in the 8943 * in the hardware(due to delete fail), so we just need 8944 * to change the mac node state to ACTIVE. 8945 */ 8946 new_node->state = HCLGE_MAC_ACTIVE; 8947 list_del(&mac_node->node); 8948 kfree(mac_node); 8949 } else { 8950 list_move_tail(&mac_node->node, mac_list); 8951 } 8952 } 8953 } 8954 8955 static void hclge_update_overflow_flags(struct hclge_vport *vport, 8956 enum HCLGE_MAC_ADDR_TYPE mac_type, 8957 bool is_all_added) 8958 { 8959 if (mac_type == HCLGE_MAC_ADDR_UC) { 8960 if (is_all_added) 8961 vport->overflow_promisc_flags &= ~HNAE3_OVERFLOW_UPE; 8962 else 8963 vport->overflow_promisc_flags |= HNAE3_OVERFLOW_UPE; 8964 } else { 8965 if (is_all_added) 8966 vport->overflow_promisc_flags &= ~HNAE3_OVERFLOW_MPE; 8967 else 8968 vport->overflow_promisc_flags |= HNAE3_OVERFLOW_MPE; 8969 } 8970 } 8971 8972 static void hclge_sync_vport_mac_table(struct hclge_vport *vport, 8973 enum HCLGE_MAC_ADDR_TYPE mac_type) 8974 { 8975 struct hclge_mac_node *mac_node, *tmp, *new_node; 8976 struct list_head tmp_add_list, tmp_del_list; 8977 struct list_head *list; 8978 bool all_added; 8979 8980 INIT_LIST_HEAD(&tmp_add_list); 8981 INIT_LIST_HEAD(&tmp_del_list); 8982 8983 /* move the mac addr to the tmp_add_list and tmp_del_list, then 8984 * we can add/delete these mac addr outside the spin lock 8985 */ 8986 list = (mac_type == HCLGE_MAC_ADDR_UC) ? 8987 &vport->uc_mac_list : &vport->mc_mac_list; 8988 8989 spin_lock_bh(&vport->mac_list_lock); 8990 8991 list_for_each_entry_safe(mac_node, tmp, list, node) { 8992 switch (mac_node->state) { 8993 case HCLGE_MAC_TO_DEL: 8994 list_move_tail(&mac_node->node, &tmp_del_list); 8995 break; 8996 case HCLGE_MAC_TO_ADD: 8997 new_node = kzalloc(sizeof(*new_node), GFP_ATOMIC); 8998 if (!new_node) 8999 goto stop_traverse; 9000 ether_addr_copy(new_node->mac_addr, mac_node->mac_addr); 9001 new_node->state = mac_node->state; 9002 list_add_tail(&new_node->node, &tmp_add_list); 9003 break; 9004 default: 9005 break; 9006 } 9007 } 9008 9009 stop_traverse: 9010 spin_unlock_bh(&vport->mac_list_lock); 9011 9012 /* delete first, in order to get max mac table space for adding */ 9013 if (mac_type == HCLGE_MAC_ADDR_UC) { 9014 hclge_unsync_vport_mac_list(vport, &tmp_del_list, 9015 hclge_rm_uc_addr_common); 9016 hclge_sync_vport_mac_list(vport, &tmp_add_list, 9017 hclge_add_uc_addr_common); 9018 } else { 9019 hclge_unsync_vport_mac_list(vport, &tmp_del_list, 9020 hclge_rm_mc_addr_common); 9021 hclge_sync_vport_mac_list(vport, &tmp_add_list, 9022 hclge_add_mc_addr_common); 9023 } 9024 9025 /* if some mac addresses were added/deleted fail, move back to the 9026 * mac_list, and retry at next time. 9027 */ 9028 spin_lock_bh(&vport->mac_list_lock); 9029 9030 hclge_sync_from_del_list(&tmp_del_list, list); 9031 all_added = hclge_sync_from_add_list(&tmp_add_list, list); 9032 9033 spin_unlock_bh(&vport->mac_list_lock); 9034 9035 hclge_update_overflow_flags(vport, mac_type, all_added); 9036 } 9037 9038 static bool hclge_need_sync_mac_table(struct hclge_vport *vport) 9039 { 9040 struct hclge_dev *hdev = vport->back; 9041 9042 if (test_bit(vport->vport_id, hdev->vport_config_block)) 9043 return false; 9044 9045 if (test_and_clear_bit(HCLGE_VPORT_STATE_MAC_TBL_CHANGE, &vport->state)) 9046 return true; 9047 9048 return false; 9049 } 9050 9051 static void hclge_sync_mac_table(struct hclge_dev *hdev) 9052 { 9053 int i; 9054 9055 for (i = 0; i < hdev->num_alloc_vport; i++) { 9056 struct hclge_vport *vport = &hdev->vport[i]; 9057 9058 if (!hclge_need_sync_mac_table(vport)) 9059 continue; 9060 9061 hclge_sync_vport_mac_table(vport, HCLGE_MAC_ADDR_UC); 9062 hclge_sync_vport_mac_table(vport, HCLGE_MAC_ADDR_MC); 9063 } 9064 } 9065 9066 static void hclge_build_del_list(struct list_head *list, 9067 bool is_del_list, 9068 struct list_head *tmp_del_list) 9069 { 9070 struct hclge_mac_node *mac_cfg, *tmp; 9071 9072 list_for_each_entry_safe(mac_cfg, tmp, list, node) { 9073 switch (mac_cfg->state) { 9074 case HCLGE_MAC_TO_DEL: 9075 case HCLGE_MAC_ACTIVE: 9076 list_move_tail(&mac_cfg->node, tmp_del_list); 9077 break; 9078 case HCLGE_MAC_TO_ADD: 9079 if (is_del_list) { 9080 list_del(&mac_cfg->node); 9081 kfree(mac_cfg); 9082 } 9083 break; 9084 } 9085 } 9086 } 9087 9088 static void hclge_unsync_del_list(struct hclge_vport *vport, 9089 int (*unsync)(struct hclge_vport *vport, 9090 const unsigned char *addr), 9091 bool is_del_list, 9092 struct list_head *tmp_del_list) 9093 { 9094 struct hclge_mac_node *mac_cfg, *tmp; 9095 int ret; 9096 9097 list_for_each_entry_safe(mac_cfg, tmp, tmp_del_list, node) { 9098 ret = unsync(vport, mac_cfg->mac_addr); 9099 if (!ret || ret == -ENOENT) { 9100 /* clear all mac addr from hardware, but remain these 9101 * mac addr in the mac list, and restore them after 9102 * vf reset finished. 9103 */ 9104 if (!is_del_list && 9105 mac_cfg->state == HCLGE_MAC_ACTIVE) { 9106 mac_cfg->state = HCLGE_MAC_TO_ADD; 9107 } else { 9108 list_del(&mac_cfg->node); 9109 kfree(mac_cfg); 9110 } 9111 } else if (is_del_list) { 9112 mac_cfg->state = HCLGE_MAC_TO_DEL; 9113 } 9114 } 9115 } 9116 9117 void hclge_rm_vport_all_mac_table(struct hclge_vport *vport, bool is_del_list, 9118 enum HCLGE_MAC_ADDR_TYPE mac_type) 9119 { 9120 int (*unsync)(struct hclge_vport *vport, const unsigned char *addr); 9121 struct hclge_dev *hdev = vport->back; 9122 struct list_head tmp_del_list, *list; 9123 9124 if (mac_type == HCLGE_MAC_ADDR_UC) { 9125 list = &vport->uc_mac_list; 9126 unsync = hclge_rm_uc_addr_common; 9127 } else { 9128 list = &vport->mc_mac_list; 9129 unsync = hclge_rm_mc_addr_common; 9130 } 9131 9132 INIT_LIST_HEAD(&tmp_del_list); 9133 9134 if (!is_del_list) 9135 set_bit(vport->vport_id, hdev->vport_config_block); 9136 9137 spin_lock_bh(&vport->mac_list_lock); 9138 9139 hclge_build_del_list(list, is_del_list, &tmp_del_list); 9140 9141 spin_unlock_bh(&vport->mac_list_lock); 9142 9143 hclge_unsync_del_list(vport, unsync, is_del_list, &tmp_del_list); 9144 9145 spin_lock_bh(&vport->mac_list_lock); 9146 9147 hclge_sync_from_del_list(&tmp_del_list, list); 9148 9149 spin_unlock_bh(&vport->mac_list_lock); 9150 } 9151 9152 /* remove all mac address when uninitailize */ 9153 static void hclge_uninit_vport_mac_list(struct hclge_vport *vport, 9154 enum HCLGE_MAC_ADDR_TYPE mac_type) 9155 { 9156 struct hclge_mac_node *mac_node, *tmp; 9157 struct hclge_dev *hdev = vport->back; 9158 struct list_head tmp_del_list, *list; 9159 9160 INIT_LIST_HEAD(&tmp_del_list); 9161 9162 list = (mac_type == HCLGE_MAC_ADDR_UC) ? 9163 &vport->uc_mac_list : &vport->mc_mac_list; 9164 9165 spin_lock_bh(&vport->mac_list_lock); 9166 9167 list_for_each_entry_safe(mac_node, tmp, list, node) { 9168 switch (mac_node->state) { 9169 case HCLGE_MAC_TO_DEL: 9170 case HCLGE_MAC_ACTIVE: 9171 list_move_tail(&mac_node->node, &tmp_del_list); 9172 break; 9173 case HCLGE_MAC_TO_ADD: 9174 list_del(&mac_node->node); 9175 kfree(mac_node); 9176 break; 9177 } 9178 } 9179 9180 spin_unlock_bh(&vport->mac_list_lock); 9181 9182 if (mac_type == HCLGE_MAC_ADDR_UC) 9183 hclge_unsync_vport_mac_list(vport, &tmp_del_list, 9184 hclge_rm_uc_addr_common); 9185 else 9186 hclge_unsync_vport_mac_list(vport, &tmp_del_list, 9187 hclge_rm_mc_addr_common); 9188 9189 if (!list_empty(&tmp_del_list)) 9190 dev_warn(&hdev->pdev->dev, 9191 "uninit %s mac list for vport %u not completely.\n", 9192 mac_type == HCLGE_MAC_ADDR_UC ? "uc" : "mc", 9193 vport->vport_id); 9194 9195 list_for_each_entry_safe(mac_node, tmp, &tmp_del_list, node) { 9196 list_del(&mac_node->node); 9197 kfree(mac_node); 9198 } 9199 } 9200 9201 static void hclge_uninit_mac_table(struct hclge_dev *hdev) 9202 { 9203 struct hclge_vport *vport; 9204 int i; 9205 9206 for (i = 0; i < hdev->num_alloc_vport; i++) { 9207 vport = &hdev->vport[i]; 9208 hclge_uninit_vport_mac_list(vport, HCLGE_MAC_ADDR_UC); 9209 hclge_uninit_vport_mac_list(vport, HCLGE_MAC_ADDR_MC); 9210 } 9211 } 9212 9213 static int hclge_get_mac_ethertype_cmd_status(struct hclge_dev *hdev, 9214 u16 cmdq_resp, u8 resp_code) 9215 { 9216 #define HCLGE_ETHERTYPE_SUCCESS_ADD 0 9217 #define HCLGE_ETHERTYPE_ALREADY_ADD 1 9218 #define HCLGE_ETHERTYPE_MGR_TBL_OVERFLOW 2 9219 #define HCLGE_ETHERTYPE_KEY_CONFLICT 3 9220 9221 int return_status; 9222 9223 if (cmdq_resp) { 9224 dev_err(&hdev->pdev->dev, 9225 "cmdq execute failed for get_mac_ethertype_cmd_status, status=%u.\n", 9226 cmdq_resp); 9227 return -EIO; 9228 } 9229 9230 switch (resp_code) { 9231 case HCLGE_ETHERTYPE_SUCCESS_ADD: 9232 case HCLGE_ETHERTYPE_ALREADY_ADD: 9233 return_status = 0; 9234 break; 9235 case HCLGE_ETHERTYPE_MGR_TBL_OVERFLOW: 9236 dev_err(&hdev->pdev->dev, 9237 "add mac ethertype failed for manager table overflow.\n"); 9238 return_status = -EIO; 9239 break; 9240 case HCLGE_ETHERTYPE_KEY_CONFLICT: 9241 dev_err(&hdev->pdev->dev, 9242 "add mac ethertype failed for key conflict.\n"); 9243 return_status = -EIO; 9244 break; 9245 default: 9246 dev_err(&hdev->pdev->dev, 9247 "add mac ethertype failed for undefined, code=%u.\n", 9248 resp_code); 9249 return_status = -EIO; 9250 } 9251 9252 return return_status; 9253 } 9254 9255 static bool hclge_check_vf_mac_exist(struct hclge_vport *vport, int vf_idx, 9256 u8 *mac_addr) 9257 { 9258 struct hclge_mac_vlan_tbl_entry_cmd req; 9259 struct hclge_dev *hdev = vport->back; 9260 struct hclge_desc desc; 9261 u16 egress_port = 0; 9262 int i; 9263 9264 if (is_zero_ether_addr(mac_addr)) 9265 return false; 9266 9267 memset(&req, 0, sizeof(req)); 9268 hnae3_set_field(egress_port, HCLGE_MAC_EPORT_VFID_M, 9269 HCLGE_MAC_EPORT_VFID_S, vport->vport_id); 9270 req.egress_port = cpu_to_le16(egress_port); 9271 hclge_prepare_mac_addr(&req, mac_addr, false); 9272 9273 if (hclge_lookup_mac_vlan_tbl(vport, &req, &desc, false) != -ENOENT) 9274 return true; 9275 9276 vf_idx += HCLGE_VF_VPORT_START_NUM; 9277 for (i = HCLGE_VF_VPORT_START_NUM; i < hdev->num_alloc_vport; i++) 9278 if (i != vf_idx && 9279 ether_addr_equal(mac_addr, hdev->vport[i].vf_info.mac)) 9280 return true; 9281 9282 return false; 9283 } 9284 9285 static int hclge_set_vf_mac(struct hnae3_handle *handle, int vf, 9286 u8 *mac_addr) 9287 { 9288 struct hclge_vport *vport = hclge_get_vport(handle); 9289 struct hclge_dev *hdev = vport->back; 9290 9291 vport = hclge_get_vf_vport(hdev, vf); 9292 if (!vport) 9293 return -EINVAL; 9294 9295 if (ether_addr_equal(mac_addr, vport->vf_info.mac)) { 9296 dev_info(&hdev->pdev->dev, 9297 "Specified MAC(=%pM) is same as before, no change committed!\n", 9298 mac_addr); 9299 return 0; 9300 } 9301 9302 if (hclge_check_vf_mac_exist(vport, vf, mac_addr)) { 9303 dev_err(&hdev->pdev->dev, "Specified MAC(=%pM) exists!\n", 9304 mac_addr); 9305 return -EEXIST; 9306 } 9307 9308 ether_addr_copy(vport->vf_info.mac, mac_addr); 9309 9310 if (test_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state)) { 9311 dev_info(&hdev->pdev->dev, 9312 "MAC of VF %d has been set to %pM, and it will be reinitialized!\n", 9313 vf, mac_addr); 9314 return hclge_inform_reset_assert_to_vf(vport); 9315 } 9316 9317 dev_info(&hdev->pdev->dev, "MAC of VF %d has been set to %pM\n", 9318 vf, mac_addr); 9319 return 0; 9320 } 9321 9322 static int hclge_add_mgr_tbl(struct hclge_dev *hdev, 9323 const struct hclge_mac_mgr_tbl_entry_cmd *req) 9324 { 9325 struct hclge_desc desc; 9326 u8 resp_code; 9327 u16 retval; 9328 int ret; 9329 9330 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_MAC_ETHTYPE_ADD, false); 9331 memcpy(desc.data, req, sizeof(struct hclge_mac_mgr_tbl_entry_cmd)); 9332 9333 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 9334 if (ret) { 9335 dev_err(&hdev->pdev->dev, 9336 "add mac ethertype failed for cmd_send, ret =%d.\n", 9337 ret); 9338 return ret; 9339 } 9340 9341 resp_code = (le32_to_cpu(desc.data[0]) >> 8) & 0xff; 9342 retval = le16_to_cpu(desc.retval); 9343 9344 return hclge_get_mac_ethertype_cmd_status(hdev, retval, resp_code); 9345 } 9346 9347 static int init_mgr_tbl(struct hclge_dev *hdev) 9348 { 9349 int ret; 9350 int i; 9351 9352 for (i = 0; i < ARRAY_SIZE(hclge_mgr_table); i++) { 9353 ret = hclge_add_mgr_tbl(hdev, &hclge_mgr_table[i]); 9354 if (ret) { 9355 dev_err(&hdev->pdev->dev, 9356 "add mac ethertype failed, ret =%d.\n", 9357 ret); 9358 return ret; 9359 } 9360 } 9361 9362 return 0; 9363 } 9364 9365 static void hclge_get_mac_addr(struct hnae3_handle *handle, u8 *p) 9366 { 9367 struct hclge_vport *vport = hclge_get_vport(handle); 9368 struct hclge_dev *hdev = vport->back; 9369 9370 ether_addr_copy(p, hdev->hw.mac.mac_addr); 9371 } 9372 9373 int hclge_update_mac_node_for_dev_addr(struct hclge_vport *vport, 9374 const u8 *old_addr, const u8 *new_addr) 9375 { 9376 struct list_head *list = &vport->uc_mac_list; 9377 struct hclge_mac_node *old_node, *new_node; 9378 9379 new_node = hclge_find_mac_node(list, new_addr); 9380 if (!new_node) { 9381 new_node = kzalloc(sizeof(*new_node), GFP_ATOMIC); 9382 if (!new_node) 9383 return -ENOMEM; 9384 9385 new_node->state = HCLGE_MAC_TO_ADD; 9386 ether_addr_copy(new_node->mac_addr, new_addr); 9387 list_add(&new_node->node, list); 9388 } else { 9389 if (new_node->state == HCLGE_MAC_TO_DEL) 9390 new_node->state = HCLGE_MAC_ACTIVE; 9391 9392 /* make sure the new addr is in the list head, avoid dev 9393 * addr may be not re-added into mac table for the umv space 9394 * limitation after global/imp reset which will clear mac 9395 * table by hardware. 9396 */ 9397 list_move(&new_node->node, list); 9398 } 9399 9400 if (old_addr && !ether_addr_equal(old_addr, new_addr)) { 9401 old_node = hclge_find_mac_node(list, old_addr); 9402 if (old_node) { 9403 if (old_node->state == HCLGE_MAC_TO_ADD) { 9404 list_del(&old_node->node); 9405 kfree(old_node); 9406 } else { 9407 old_node->state = HCLGE_MAC_TO_DEL; 9408 } 9409 } 9410 } 9411 9412 set_bit(HCLGE_VPORT_STATE_MAC_TBL_CHANGE, &vport->state); 9413 9414 return 0; 9415 } 9416 9417 static int hclge_set_mac_addr(struct hnae3_handle *handle, void *p, 9418 bool is_first) 9419 { 9420 const unsigned char *new_addr = (const unsigned char *)p; 9421 struct hclge_vport *vport = hclge_get_vport(handle); 9422 struct hclge_dev *hdev = vport->back; 9423 unsigned char *old_addr = NULL; 9424 int ret; 9425 9426 /* mac addr check */ 9427 if (is_zero_ether_addr(new_addr) || 9428 is_broadcast_ether_addr(new_addr) || 9429 is_multicast_ether_addr(new_addr)) { 9430 dev_err(&hdev->pdev->dev, 9431 "change uc mac err! invalid mac: %pM.\n", 9432 new_addr); 9433 return -EINVAL; 9434 } 9435 9436 ret = hclge_pause_addr_cfg(hdev, new_addr); 9437 if (ret) { 9438 dev_err(&hdev->pdev->dev, 9439 "failed to configure mac pause address, ret = %d\n", 9440 ret); 9441 return ret; 9442 } 9443 9444 if (!is_first) 9445 old_addr = hdev->hw.mac.mac_addr; 9446 9447 spin_lock_bh(&vport->mac_list_lock); 9448 ret = hclge_update_mac_node_for_dev_addr(vport, old_addr, new_addr); 9449 if (ret) { 9450 dev_err(&hdev->pdev->dev, 9451 "failed to change the mac addr:%pM, ret = %d\n", 9452 new_addr, ret); 9453 spin_unlock_bh(&vport->mac_list_lock); 9454 9455 if (!is_first) 9456 hclge_pause_addr_cfg(hdev, old_addr); 9457 9458 return ret; 9459 } 9460 /* we must update dev addr with spin lock protect, preventing dev addr 9461 * being removed by set_rx_mode path. 9462 */ 9463 ether_addr_copy(hdev->hw.mac.mac_addr, new_addr); 9464 spin_unlock_bh(&vport->mac_list_lock); 9465 9466 hclge_task_schedule(hdev, 0); 9467 9468 return 0; 9469 } 9470 9471 static int hclge_mii_ioctl(struct hclge_dev *hdev, struct ifreq *ifr, int cmd) 9472 { 9473 struct mii_ioctl_data *data = if_mii(ifr); 9474 9475 if (!hnae3_dev_phy_imp_supported(hdev)) 9476 return -EOPNOTSUPP; 9477 9478 switch (cmd) { 9479 case SIOCGMIIPHY: 9480 data->phy_id = hdev->hw.mac.phy_addr; 9481 /* this command reads phy id and register at the same time */ 9482 fallthrough; 9483 case SIOCGMIIREG: 9484 data->val_out = hclge_read_phy_reg(hdev, data->reg_num); 9485 return 0; 9486 9487 case SIOCSMIIREG: 9488 return hclge_write_phy_reg(hdev, data->reg_num, data->val_in); 9489 default: 9490 return -EOPNOTSUPP; 9491 } 9492 } 9493 9494 static int hclge_do_ioctl(struct hnae3_handle *handle, struct ifreq *ifr, 9495 int cmd) 9496 { 9497 struct hclge_vport *vport = hclge_get_vport(handle); 9498 struct hclge_dev *hdev = vport->back; 9499 9500 switch (cmd) { 9501 case SIOCGHWTSTAMP: 9502 return hclge_ptp_get_cfg(hdev, ifr); 9503 case SIOCSHWTSTAMP: 9504 return hclge_ptp_set_cfg(hdev, ifr); 9505 default: 9506 if (!hdev->hw.mac.phydev) 9507 return hclge_mii_ioctl(hdev, ifr, cmd); 9508 } 9509 9510 return phy_mii_ioctl(hdev->hw.mac.phydev, ifr, cmd); 9511 } 9512 9513 static int hclge_set_port_vlan_filter_bypass(struct hclge_dev *hdev, u8 vf_id, 9514 bool bypass_en) 9515 { 9516 struct hclge_port_vlan_filter_bypass_cmd *req; 9517 struct hclge_desc desc; 9518 int ret; 9519 9520 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_PORT_VLAN_BYPASS, false); 9521 req = (struct hclge_port_vlan_filter_bypass_cmd *)desc.data; 9522 req->vf_id = vf_id; 9523 hnae3_set_bit(req->bypass_state, HCLGE_INGRESS_BYPASS_B, 9524 bypass_en ? 1 : 0); 9525 9526 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 9527 if (ret) 9528 dev_err(&hdev->pdev->dev, 9529 "failed to set vport%u port vlan filter bypass state, ret = %d.\n", 9530 vf_id, ret); 9531 9532 return ret; 9533 } 9534 9535 static int hclge_set_vlan_filter_ctrl(struct hclge_dev *hdev, u8 vlan_type, 9536 u8 fe_type, bool filter_en, u8 vf_id) 9537 { 9538 struct hclge_vlan_filter_ctrl_cmd *req; 9539 struct hclge_desc desc; 9540 int ret; 9541 9542 /* read current vlan filter parameter */ 9543 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_VLAN_FILTER_CTRL, true); 9544 req = (struct hclge_vlan_filter_ctrl_cmd *)desc.data; 9545 req->vlan_type = vlan_type; 9546 req->vf_id = vf_id; 9547 9548 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 9549 if (ret) { 9550 dev_err(&hdev->pdev->dev, 9551 "failed to get vlan filter config, ret = %d.\n", ret); 9552 return ret; 9553 } 9554 9555 /* modify and write new config parameter */ 9556 hclge_cmd_reuse_desc(&desc, false); 9557 req->vlan_fe = filter_en ? 9558 (req->vlan_fe | fe_type) : (req->vlan_fe & ~fe_type); 9559 9560 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 9561 if (ret) 9562 dev_err(&hdev->pdev->dev, "failed to set vlan filter, ret = %d.\n", 9563 ret); 9564 9565 return ret; 9566 } 9567 9568 static int hclge_set_vport_vlan_filter(struct hclge_vport *vport, bool enable) 9569 { 9570 struct hclge_dev *hdev = vport->back; 9571 struct hnae3_ae_dev *ae_dev = hdev->ae_dev; 9572 int ret; 9573 9574 if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2) 9575 return hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_VF, 9576 HCLGE_FILTER_FE_EGRESS_V1_B, 9577 enable, vport->vport_id); 9578 9579 ret = hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_VF, 9580 HCLGE_FILTER_FE_EGRESS, enable, 9581 vport->vport_id); 9582 if (ret) 9583 return ret; 9584 9585 if (test_bit(HNAE3_DEV_SUPPORT_PORT_VLAN_BYPASS_B, ae_dev->caps)) { 9586 ret = hclge_set_port_vlan_filter_bypass(hdev, vport->vport_id, 9587 !enable); 9588 } else if (!vport->vport_id) { 9589 if (test_bit(HNAE3_DEV_SUPPORT_VLAN_FLTR_MDF_B, ae_dev->caps)) 9590 enable = false; 9591 9592 ret = hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_PORT, 9593 HCLGE_FILTER_FE_INGRESS, 9594 enable, 0); 9595 } 9596 9597 return ret; 9598 } 9599 9600 static bool hclge_need_enable_vport_vlan_filter(struct hclge_vport *vport) 9601 { 9602 struct hnae3_handle *handle = &vport->nic; 9603 struct hclge_vport_vlan_cfg *vlan, *tmp; 9604 struct hclge_dev *hdev = vport->back; 9605 9606 if (vport->vport_id) { 9607 if (vport->port_base_vlan_cfg.state != 9608 HNAE3_PORT_BASE_VLAN_DISABLE) 9609 return true; 9610 9611 if (vport->vf_info.trusted && vport->vf_info.request_uc_en) 9612 return false; 9613 } else if (handle->netdev_flags & HNAE3_USER_UPE) { 9614 return false; 9615 } 9616 9617 if (!vport->req_vlan_fltr_en) 9618 return false; 9619 9620 /* compatible with former device, always enable vlan filter */ 9621 if (!test_bit(HNAE3_DEV_SUPPORT_VLAN_FLTR_MDF_B, hdev->ae_dev->caps)) 9622 return true; 9623 9624 list_for_each_entry_safe(vlan, tmp, &vport->vlan_list, node) 9625 if (vlan->vlan_id != 0) 9626 return true; 9627 9628 return false; 9629 } 9630 9631 int hclge_enable_vport_vlan_filter(struct hclge_vport *vport, bool request_en) 9632 { 9633 struct hclge_dev *hdev = vport->back; 9634 bool need_en; 9635 int ret; 9636 9637 mutex_lock(&hdev->vport_lock); 9638 9639 vport->req_vlan_fltr_en = request_en; 9640 9641 need_en = hclge_need_enable_vport_vlan_filter(vport); 9642 if (need_en == vport->cur_vlan_fltr_en) { 9643 mutex_unlock(&hdev->vport_lock); 9644 return 0; 9645 } 9646 9647 ret = hclge_set_vport_vlan_filter(vport, need_en); 9648 if (ret) { 9649 mutex_unlock(&hdev->vport_lock); 9650 return ret; 9651 } 9652 9653 vport->cur_vlan_fltr_en = need_en; 9654 9655 mutex_unlock(&hdev->vport_lock); 9656 9657 return 0; 9658 } 9659 9660 static int hclge_enable_vlan_filter(struct hnae3_handle *handle, bool enable) 9661 { 9662 struct hclge_vport *vport = hclge_get_vport(handle); 9663 9664 return hclge_enable_vport_vlan_filter(vport, enable); 9665 } 9666 9667 static int hclge_set_vf_vlan_filter_cmd(struct hclge_dev *hdev, u16 vfid, 9668 bool is_kill, u16 vlan, 9669 struct hclge_desc *desc) 9670 { 9671 struct hclge_vlan_filter_vf_cfg_cmd *req0; 9672 struct hclge_vlan_filter_vf_cfg_cmd *req1; 9673 u8 vf_byte_val; 9674 u8 vf_byte_off; 9675 int ret; 9676 9677 hclge_cmd_setup_basic_desc(&desc[0], 9678 HCLGE_OPC_VLAN_FILTER_VF_CFG, false); 9679 hclge_cmd_setup_basic_desc(&desc[1], 9680 HCLGE_OPC_VLAN_FILTER_VF_CFG, false); 9681 9682 desc[0].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT); 9683 9684 vf_byte_off = vfid / 8; 9685 vf_byte_val = 1 << (vfid % 8); 9686 9687 req0 = (struct hclge_vlan_filter_vf_cfg_cmd *)desc[0].data; 9688 req1 = (struct hclge_vlan_filter_vf_cfg_cmd *)desc[1].data; 9689 9690 req0->vlan_id = cpu_to_le16(vlan); 9691 req0->vlan_cfg = is_kill; 9692 9693 if (vf_byte_off < HCLGE_MAX_VF_BYTES) 9694 req0->vf_bitmap[vf_byte_off] = vf_byte_val; 9695 else 9696 req1->vf_bitmap[vf_byte_off - HCLGE_MAX_VF_BYTES] = vf_byte_val; 9697 9698 ret = hclge_cmd_send(&hdev->hw, desc, 2); 9699 if (ret) { 9700 dev_err(&hdev->pdev->dev, 9701 "Send vf vlan command fail, ret =%d.\n", 9702 ret); 9703 return ret; 9704 } 9705 9706 return 0; 9707 } 9708 9709 static int hclge_check_vf_vlan_cmd_status(struct hclge_dev *hdev, u16 vfid, 9710 bool is_kill, struct hclge_desc *desc) 9711 { 9712 struct hclge_vlan_filter_vf_cfg_cmd *req; 9713 9714 req = (struct hclge_vlan_filter_vf_cfg_cmd *)desc[0].data; 9715 9716 if (!is_kill) { 9717 #define HCLGE_VF_VLAN_NO_ENTRY 2 9718 if (!req->resp_code || req->resp_code == 1) 9719 return 0; 9720 9721 if (req->resp_code == HCLGE_VF_VLAN_NO_ENTRY) { 9722 set_bit(vfid, hdev->vf_vlan_full); 9723 dev_warn(&hdev->pdev->dev, 9724 "vf vlan table is full, vf vlan filter is disabled\n"); 9725 return 0; 9726 } 9727 9728 dev_err(&hdev->pdev->dev, 9729 "Add vf vlan filter fail, ret =%u.\n", 9730 req->resp_code); 9731 } else { 9732 #define HCLGE_VF_VLAN_DEL_NO_FOUND 1 9733 if (!req->resp_code) 9734 return 0; 9735 9736 /* vf vlan filter is disabled when vf vlan table is full, 9737 * then new vlan id will not be added into vf vlan table. 9738 * Just return 0 without warning, avoid massive verbose 9739 * print logs when unload. 9740 */ 9741 if (req->resp_code == HCLGE_VF_VLAN_DEL_NO_FOUND) 9742 return 0; 9743 9744 dev_err(&hdev->pdev->dev, 9745 "Kill vf vlan filter fail, ret =%u.\n", 9746 req->resp_code); 9747 } 9748 9749 return -EIO; 9750 } 9751 9752 static int hclge_set_vf_vlan_common(struct hclge_dev *hdev, u16 vfid, 9753 bool is_kill, u16 vlan) 9754 { 9755 struct hclge_vport *vport = &hdev->vport[vfid]; 9756 struct hclge_desc desc[2]; 9757 int ret; 9758 9759 /* if vf vlan table is full, firmware will close vf vlan filter, it 9760 * is unable and unnecessary to add new vlan id to vf vlan filter. 9761 * If spoof check is enable, and vf vlan is full, it shouldn't add 9762 * new vlan, because tx packets with these vlan id will be dropped. 9763 */ 9764 if (test_bit(vfid, hdev->vf_vlan_full) && !is_kill) { 9765 if (vport->vf_info.spoofchk && vlan) { 9766 dev_err(&hdev->pdev->dev, 9767 "Can't add vlan due to spoof check is on and vf vlan table is full\n"); 9768 return -EPERM; 9769 } 9770 return 0; 9771 } 9772 9773 ret = hclge_set_vf_vlan_filter_cmd(hdev, vfid, is_kill, vlan, desc); 9774 if (ret) 9775 return ret; 9776 9777 return hclge_check_vf_vlan_cmd_status(hdev, vfid, is_kill, desc); 9778 } 9779 9780 static int hclge_set_port_vlan_filter(struct hclge_dev *hdev, __be16 proto, 9781 u16 vlan_id, bool is_kill) 9782 { 9783 struct hclge_vlan_filter_pf_cfg_cmd *req; 9784 struct hclge_desc desc; 9785 u8 vlan_offset_byte_val; 9786 u8 vlan_offset_byte; 9787 u8 vlan_offset_160; 9788 int ret; 9789 9790 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_VLAN_FILTER_PF_CFG, false); 9791 9792 vlan_offset_160 = vlan_id / HCLGE_VLAN_ID_OFFSET_STEP; 9793 vlan_offset_byte = (vlan_id % HCLGE_VLAN_ID_OFFSET_STEP) / 9794 HCLGE_VLAN_BYTE_SIZE; 9795 vlan_offset_byte_val = 1 << (vlan_id % HCLGE_VLAN_BYTE_SIZE); 9796 9797 req = (struct hclge_vlan_filter_pf_cfg_cmd *)desc.data; 9798 req->vlan_offset = vlan_offset_160; 9799 req->vlan_cfg = is_kill; 9800 req->vlan_offset_bitmap[vlan_offset_byte] = vlan_offset_byte_val; 9801 9802 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 9803 if (ret) 9804 dev_err(&hdev->pdev->dev, 9805 "port vlan command, send fail, ret =%d.\n", ret); 9806 return ret; 9807 } 9808 9809 static int hclge_set_vlan_filter_hw(struct hclge_dev *hdev, __be16 proto, 9810 u16 vport_id, u16 vlan_id, 9811 bool is_kill) 9812 { 9813 u16 vport_idx, vport_num = 0; 9814 int ret; 9815 9816 if (is_kill && !vlan_id) 9817 return 0; 9818 9819 if (vlan_id >= VLAN_N_VID) 9820 return -EINVAL; 9821 9822 ret = hclge_set_vf_vlan_common(hdev, vport_id, is_kill, vlan_id); 9823 if (ret) { 9824 dev_err(&hdev->pdev->dev, 9825 "Set %u vport vlan filter config fail, ret =%d.\n", 9826 vport_id, ret); 9827 return ret; 9828 } 9829 9830 /* vlan 0 may be added twice when 8021q module is enabled */ 9831 if (!is_kill && !vlan_id && 9832 test_bit(vport_id, hdev->vlan_table[vlan_id])) 9833 return 0; 9834 9835 if (!is_kill && test_and_set_bit(vport_id, hdev->vlan_table[vlan_id])) { 9836 dev_err(&hdev->pdev->dev, 9837 "Add port vlan failed, vport %u is already in vlan %u\n", 9838 vport_id, vlan_id); 9839 return -EINVAL; 9840 } 9841 9842 if (is_kill && 9843 !test_and_clear_bit(vport_id, hdev->vlan_table[vlan_id])) { 9844 dev_err(&hdev->pdev->dev, 9845 "Delete port vlan failed, vport %u is not in vlan %u\n", 9846 vport_id, vlan_id); 9847 return -EINVAL; 9848 } 9849 9850 for_each_set_bit(vport_idx, hdev->vlan_table[vlan_id], HCLGE_VPORT_NUM) 9851 vport_num++; 9852 9853 if ((is_kill && vport_num == 0) || (!is_kill && vport_num == 1)) 9854 ret = hclge_set_port_vlan_filter(hdev, proto, vlan_id, 9855 is_kill); 9856 9857 return ret; 9858 } 9859 9860 static int hclge_set_vlan_tx_offload_cfg(struct hclge_vport *vport) 9861 { 9862 struct hclge_tx_vtag_cfg *vcfg = &vport->txvlan_cfg; 9863 struct hclge_vport_vtag_tx_cfg_cmd *req; 9864 struct hclge_dev *hdev = vport->back; 9865 struct hclge_desc desc; 9866 u16 bmap_index; 9867 int status; 9868 9869 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_VLAN_PORT_TX_CFG, false); 9870 9871 req = (struct hclge_vport_vtag_tx_cfg_cmd *)desc.data; 9872 req->def_vlan_tag1 = cpu_to_le16(vcfg->default_tag1); 9873 req->def_vlan_tag2 = cpu_to_le16(vcfg->default_tag2); 9874 hnae3_set_bit(req->vport_vlan_cfg, HCLGE_ACCEPT_TAG1_B, 9875 vcfg->accept_tag1 ? 1 : 0); 9876 hnae3_set_bit(req->vport_vlan_cfg, HCLGE_ACCEPT_UNTAG1_B, 9877 vcfg->accept_untag1 ? 1 : 0); 9878 hnae3_set_bit(req->vport_vlan_cfg, HCLGE_ACCEPT_TAG2_B, 9879 vcfg->accept_tag2 ? 1 : 0); 9880 hnae3_set_bit(req->vport_vlan_cfg, HCLGE_ACCEPT_UNTAG2_B, 9881 vcfg->accept_untag2 ? 1 : 0); 9882 hnae3_set_bit(req->vport_vlan_cfg, HCLGE_PORT_INS_TAG1_EN_B, 9883 vcfg->insert_tag1_en ? 1 : 0); 9884 hnae3_set_bit(req->vport_vlan_cfg, HCLGE_PORT_INS_TAG2_EN_B, 9885 vcfg->insert_tag2_en ? 1 : 0); 9886 hnae3_set_bit(req->vport_vlan_cfg, HCLGE_TAG_SHIFT_MODE_EN_B, 9887 vcfg->tag_shift_mode_en ? 1 : 0); 9888 hnae3_set_bit(req->vport_vlan_cfg, HCLGE_CFG_NIC_ROCE_SEL_B, 0); 9889 9890 req->vf_offset = vport->vport_id / HCLGE_VF_NUM_PER_CMD; 9891 bmap_index = vport->vport_id % HCLGE_VF_NUM_PER_CMD / 9892 HCLGE_VF_NUM_PER_BYTE; 9893 req->vf_bitmap[bmap_index] = 9894 1U << (vport->vport_id % HCLGE_VF_NUM_PER_BYTE); 9895 9896 status = hclge_cmd_send(&hdev->hw, &desc, 1); 9897 if (status) 9898 dev_err(&hdev->pdev->dev, 9899 "Send port txvlan cfg command fail, ret =%d\n", 9900 status); 9901 9902 return status; 9903 } 9904 9905 static int hclge_set_vlan_rx_offload_cfg(struct hclge_vport *vport) 9906 { 9907 struct hclge_rx_vtag_cfg *vcfg = &vport->rxvlan_cfg; 9908 struct hclge_vport_vtag_rx_cfg_cmd *req; 9909 struct hclge_dev *hdev = vport->back; 9910 struct hclge_desc desc; 9911 u16 bmap_index; 9912 int status; 9913 9914 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_VLAN_PORT_RX_CFG, false); 9915 9916 req = (struct hclge_vport_vtag_rx_cfg_cmd *)desc.data; 9917 hnae3_set_bit(req->vport_vlan_cfg, HCLGE_REM_TAG1_EN_B, 9918 vcfg->strip_tag1_en ? 1 : 0); 9919 hnae3_set_bit(req->vport_vlan_cfg, HCLGE_REM_TAG2_EN_B, 9920 vcfg->strip_tag2_en ? 1 : 0); 9921 hnae3_set_bit(req->vport_vlan_cfg, HCLGE_SHOW_TAG1_EN_B, 9922 vcfg->vlan1_vlan_prionly ? 1 : 0); 9923 hnae3_set_bit(req->vport_vlan_cfg, HCLGE_SHOW_TAG2_EN_B, 9924 vcfg->vlan2_vlan_prionly ? 1 : 0); 9925 hnae3_set_bit(req->vport_vlan_cfg, HCLGE_DISCARD_TAG1_EN_B, 9926 vcfg->strip_tag1_discard_en ? 1 : 0); 9927 hnae3_set_bit(req->vport_vlan_cfg, HCLGE_DISCARD_TAG2_EN_B, 9928 vcfg->strip_tag2_discard_en ? 1 : 0); 9929 9930 req->vf_offset = vport->vport_id / HCLGE_VF_NUM_PER_CMD; 9931 bmap_index = vport->vport_id % HCLGE_VF_NUM_PER_CMD / 9932 HCLGE_VF_NUM_PER_BYTE; 9933 req->vf_bitmap[bmap_index] = 9934 1U << (vport->vport_id % HCLGE_VF_NUM_PER_BYTE); 9935 9936 status = hclge_cmd_send(&hdev->hw, &desc, 1); 9937 if (status) 9938 dev_err(&hdev->pdev->dev, 9939 "Send port rxvlan cfg command fail, ret =%d\n", 9940 status); 9941 9942 return status; 9943 } 9944 9945 static int hclge_vlan_offload_cfg(struct hclge_vport *vport, 9946 u16 port_base_vlan_state, 9947 u16 vlan_tag, u8 qos) 9948 { 9949 int ret; 9950 9951 if (port_base_vlan_state == HNAE3_PORT_BASE_VLAN_DISABLE) { 9952 vport->txvlan_cfg.accept_tag1 = true; 9953 vport->txvlan_cfg.insert_tag1_en = false; 9954 vport->txvlan_cfg.default_tag1 = 0; 9955 } else { 9956 struct hnae3_ae_dev *ae_dev = pci_get_drvdata(vport->nic.pdev); 9957 9958 vport->txvlan_cfg.accept_tag1 = 9959 ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V3; 9960 vport->txvlan_cfg.insert_tag1_en = true; 9961 vport->txvlan_cfg.default_tag1 = (qos << VLAN_PRIO_SHIFT) | 9962 vlan_tag; 9963 } 9964 9965 vport->txvlan_cfg.accept_untag1 = true; 9966 9967 /* accept_tag2 and accept_untag2 are not supported on 9968 * pdev revision(0x20), new revision support them, 9969 * this two fields can not be configured by user. 9970 */ 9971 vport->txvlan_cfg.accept_tag2 = true; 9972 vport->txvlan_cfg.accept_untag2 = true; 9973 vport->txvlan_cfg.insert_tag2_en = false; 9974 vport->txvlan_cfg.default_tag2 = 0; 9975 vport->txvlan_cfg.tag_shift_mode_en = true; 9976 9977 if (port_base_vlan_state == HNAE3_PORT_BASE_VLAN_DISABLE) { 9978 vport->rxvlan_cfg.strip_tag1_en = false; 9979 vport->rxvlan_cfg.strip_tag2_en = 9980 vport->rxvlan_cfg.rx_vlan_offload_en; 9981 vport->rxvlan_cfg.strip_tag2_discard_en = false; 9982 } else { 9983 vport->rxvlan_cfg.strip_tag1_en = 9984 vport->rxvlan_cfg.rx_vlan_offload_en; 9985 vport->rxvlan_cfg.strip_tag2_en = true; 9986 vport->rxvlan_cfg.strip_tag2_discard_en = true; 9987 } 9988 9989 vport->rxvlan_cfg.strip_tag1_discard_en = false; 9990 vport->rxvlan_cfg.vlan1_vlan_prionly = false; 9991 vport->rxvlan_cfg.vlan2_vlan_prionly = false; 9992 9993 ret = hclge_set_vlan_tx_offload_cfg(vport); 9994 if (ret) 9995 return ret; 9996 9997 return hclge_set_vlan_rx_offload_cfg(vport); 9998 } 9999 10000 static int hclge_set_vlan_protocol_type(struct hclge_dev *hdev) 10001 { 10002 struct hclge_rx_vlan_type_cfg_cmd *rx_req; 10003 struct hclge_tx_vlan_type_cfg_cmd *tx_req; 10004 struct hclge_desc desc; 10005 int status; 10006 10007 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_MAC_VLAN_TYPE_ID, false); 10008 rx_req = (struct hclge_rx_vlan_type_cfg_cmd *)desc.data; 10009 rx_req->ot_fst_vlan_type = 10010 cpu_to_le16(hdev->vlan_type_cfg.rx_ot_fst_vlan_type); 10011 rx_req->ot_sec_vlan_type = 10012 cpu_to_le16(hdev->vlan_type_cfg.rx_ot_sec_vlan_type); 10013 rx_req->in_fst_vlan_type = 10014 cpu_to_le16(hdev->vlan_type_cfg.rx_in_fst_vlan_type); 10015 rx_req->in_sec_vlan_type = 10016 cpu_to_le16(hdev->vlan_type_cfg.rx_in_sec_vlan_type); 10017 10018 status = hclge_cmd_send(&hdev->hw, &desc, 1); 10019 if (status) { 10020 dev_err(&hdev->pdev->dev, 10021 "Send rxvlan protocol type command fail, ret =%d\n", 10022 status); 10023 return status; 10024 } 10025 10026 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_MAC_VLAN_INSERT, false); 10027 10028 tx_req = (struct hclge_tx_vlan_type_cfg_cmd *)desc.data; 10029 tx_req->ot_vlan_type = cpu_to_le16(hdev->vlan_type_cfg.tx_ot_vlan_type); 10030 tx_req->in_vlan_type = cpu_to_le16(hdev->vlan_type_cfg.tx_in_vlan_type); 10031 10032 status = hclge_cmd_send(&hdev->hw, &desc, 1); 10033 if (status) 10034 dev_err(&hdev->pdev->dev, 10035 "Send txvlan protocol type command fail, ret =%d\n", 10036 status); 10037 10038 return status; 10039 } 10040 10041 static int hclge_init_vlan_config(struct hclge_dev *hdev) 10042 { 10043 #define HCLGE_DEF_VLAN_TYPE 0x8100 10044 10045 struct hnae3_handle *handle = &hdev->vport[0].nic; 10046 struct hclge_vport *vport; 10047 int ret; 10048 int i; 10049 10050 if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2) { 10051 /* for revision 0x21, vf vlan filter is per function */ 10052 for (i = 0; i < hdev->num_alloc_vport; i++) { 10053 vport = &hdev->vport[i]; 10054 ret = hclge_set_vlan_filter_ctrl(hdev, 10055 HCLGE_FILTER_TYPE_VF, 10056 HCLGE_FILTER_FE_EGRESS, 10057 true, 10058 vport->vport_id); 10059 if (ret) 10060 return ret; 10061 vport->cur_vlan_fltr_en = true; 10062 } 10063 10064 ret = hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_PORT, 10065 HCLGE_FILTER_FE_INGRESS, true, 10066 0); 10067 if (ret) 10068 return ret; 10069 } else { 10070 ret = hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_VF, 10071 HCLGE_FILTER_FE_EGRESS_V1_B, 10072 true, 0); 10073 if (ret) 10074 return ret; 10075 } 10076 10077 hdev->vlan_type_cfg.rx_in_fst_vlan_type = HCLGE_DEF_VLAN_TYPE; 10078 hdev->vlan_type_cfg.rx_in_sec_vlan_type = HCLGE_DEF_VLAN_TYPE; 10079 hdev->vlan_type_cfg.rx_ot_fst_vlan_type = HCLGE_DEF_VLAN_TYPE; 10080 hdev->vlan_type_cfg.rx_ot_sec_vlan_type = HCLGE_DEF_VLAN_TYPE; 10081 hdev->vlan_type_cfg.tx_ot_vlan_type = HCLGE_DEF_VLAN_TYPE; 10082 hdev->vlan_type_cfg.tx_in_vlan_type = HCLGE_DEF_VLAN_TYPE; 10083 10084 ret = hclge_set_vlan_protocol_type(hdev); 10085 if (ret) 10086 return ret; 10087 10088 for (i = 0; i < hdev->num_alloc_vport; i++) { 10089 u16 vlan_tag; 10090 u8 qos; 10091 10092 vport = &hdev->vport[i]; 10093 vlan_tag = vport->port_base_vlan_cfg.vlan_info.vlan_tag; 10094 qos = vport->port_base_vlan_cfg.vlan_info.qos; 10095 10096 ret = hclge_vlan_offload_cfg(vport, 10097 vport->port_base_vlan_cfg.state, 10098 vlan_tag, qos); 10099 if (ret) 10100 return ret; 10101 } 10102 10103 return hclge_set_vlan_filter(handle, htons(ETH_P_8021Q), 0, false); 10104 } 10105 10106 static void hclge_add_vport_vlan_table(struct hclge_vport *vport, u16 vlan_id, 10107 bool writen_to_tbl) 10108 { 10109 struct hclge_vport_vlan_cfg *vlan, *tmp; 10110 10111 list_for_each_entry_safe(vlan, tmp, &vport->vlan_list, node) 10112 if (vlan->vlan_id == vlan_id) 10113 return; 10114 10115 vlan = kzalloc(sizeof(*vlan), GFP_KERNEL); 10116 if (!vlan) 10117 return; 10118 10119 vlan->hd_tbl_status = writen_to_tbl; 10120 vlan->vlan_id = vlan_id; 10121 10122 list_add_tail(&vlan->node, &vport->vlan_list); 10123 } 10124 10125 static int hclge_add_vport_all_vlan_table(struct hclge_vport *vport) 10126 { 10127 struct hclge_vport_vlan_cfg *vlan, *tmp; 10128 struct hclge_dev *hdev = vport->back; 10129 int ret; 10130 10131 list_for_each_entry_safe(vlan, tmp, &vport->vlan_list, node) { 10132 if (!vlan->hd_tbl_status) { 10133 ret = hclge_set_vlan_filter_hw(hdev, htons(ETH_P_8021Q), 10134 vport->vport_id, 10135 vlan->vlan_id, false); 10136 if (ret) { 10137 dev_err(&hdev->pdev->dev, 10138 "restore vport vlan list failed, ret=%d\n", 10139 ret); 10140 return ret; 10141 } 10142 } 10143 vlan->hd_tbl_status = true; 10144 } 10145 10146 return 0; 10147 } 10148 10149 static void hclge_rm_vport_vlan_table(struct hclge_vport *vport, u16 vlan_id, 10150 bool is_write_tbl) 10151 { 10152 struct hclge_vport_vlan_cfg *vlan, *tmp; 10153 struct hclge_dev *hdev = vport->back; 10154 10155 list_for_each_entry_safe(vlan, tmp, &vport->vlan_list, node) { 10156 if (vlan->vlan_id == vlan_id) { 10157 if (is_write_tbl && vlan->hd_tbl_status) 10158 hclge_set_vlan_filter_hw(hdev, 10159 htons(ETH_P_8021Q), 10160 vport->vport_id, 10161 vlan_id, 10162 true); 10163 10164 list_del(&vlan->node); 10165 kfree(vlan); 10166 break; 10167 } 10168 } 10169 } 10170 10171 void hclge_rm_vport_all_vlan_table(struct hclge_vport *vport, bool is_del_list) 10172 { 10173 struct hclge_vport_vlan_cfg *vlan, *tmp; 10174 struct hclge_dev *hdev = vport->back; 10175 10176 list_for_each_entry_safe(vlan, tmp, &vport->vlan_list, node) { 10177 if (vlan->hd_tbl_status) 10178 hclge_set_vlan_filter_hw(hdev, 10179 htons(ETH_P_8021Q), 10180 vport->vport_id, 10181 vlan->vlan_id, 10182 true); 10183 10184 vlan->hd_tbl_status = false; 10185 if (is_del_list) { 10186 list_del(&vlan->node); 10187 kfree(vlan); 10188 } 10189 } 10190 clear_bit(vport->vport_id, hdev->vf_vlan_full); 10191 } 10192 10193 void hclge_uninit_vport_vlan_table(struct hclge_dev *hdev) 10194 { 10195 struct hclge_vport_vlan_cfg *vlan, *tmp; 10196 struct hclge_vport *vport; 10197 int i; 10198 10199 for (i = 0; i < hdev->num_alloc_vport; i++) { 10200 vport = &hdev->vport[i]; 10201 list_for_each_entry_safe(vlan, tmp, &vport->vlan_list, node) { 10202 list_del(&vlan->node); 10203 kfree(vlan); 10204 } 10205 } 10206 } 10207 10208 void hclge_restore_vport_vlan_table(struct hclge_vport *vport) 10209 { 10210 struct hclge_vport_vlan_cfg *vlan, *tmp; 10211 struct hclge_dev *hdev = vport->back; 10212 u16 vlan_proto; 10213 u16 vlan_id; 10214 u16 state; 10215 int ret; 10216 10217 vlan_proto = vport->port_base_vlan_cfg.vlan_info.vlan_proto; 10218 vlan_id = vport->port_base_vlan_cfg.vlan_info.vlan_tag; 10219 state = vport->port_base_vlan_cfg.state; 10220 10221 if (state != HNAE3_PORT_BASE_VLAN_DISABLE) { 10222 clear_bit(vport->vport_id, hdev->vlan_table[vlan_id]); 10223 hclge_set_vlan_filter_hw(hdev, htons(vlan_proto), 10224 vport->vport_id, vlan_id, 10225 false); 10226 return; 10227 } 10228 10229 list_for_each_entry_safe(vlan, tmp, &vport->vlan_list, node) { 10230 ret = hclge_set_vlan_filter_hw(hdev, htons(ETH_P_8021Q), 10231 vport->vport_id, 10232 vlan->vlan_id, false); 10233 if (ret) 10234 break; 10235 vlan->hd_tbl_status = true; 10236 } 10237 } 10238 10239 /* For global reset and imp reset, hardware will clear the mac table, 10240 * so we change the mac address state from ACTIVE to TO_ADD, then they 10241 * can be restored in the service task after reset complete. Furtherly, 10242 * the mac addresses with state TO_DEL or DEL_FAIL are unnecessary to 10243 * be restored after reset, so just remove these mac nodes from mac_list. 10244 */ 10245 static void hclge_mac_node_convert_for_reset(struct list_head *list) 10246 { 10247 struct hclge_mac_node *mac_node, *tmp; 10248 10249 list_for_each_entry_safe(mac_node, tmp, list, node) { 10250 if (mac_node->state == HCLGE_MAC_ACTIVE) { 10251 mac_node->state = HCLGE_MAC_TO_ADD; 10252 } else if (mac_node->state == HCLGE_MAC_TO_DEL) { 10253 list_del(&mac_node->node); 10254 kfree(mac_node); 10255 } 10256 } 10257 } 10258 10259 void hclge_restore_mac_table_common(struct hclge_vport *vport) 10260 { 10261 spin_lock_bh(&vport->mac_list_lock); 10262 10263 hclge_mac_node_convert_for_reset(&vport->uc_mac_list); 10264 hclge_mac_node_convert_for_reset(&vport->mc_mac_list); 10265 set_bit(HCLGE_VPORT_STATE_MAC_TBL_CHANGE, &vport->state); 10266 10267 spin_unlock_bh(&vport->mac_list_lock); 10268 } 10269 10270 static void hclge_restore_hw_table(struct hclge_dev *hdev) 10271 { 10272 struct hclge_vport *vport = &hdev->vport[0]; 10273 struct hnae3_handle *handle = &vport->nic; 10274 10275 hclge_restore_mac_table_common(vport); 10276 hclge_restore_vport_vlan_table(vport); 10277 set_bit(HCLGE_STATE_FD_USER_DEF_CHANGED, &hdev->state); 10278 hclge_restore_fd_entries(handle); 10279 } 10280 10281 int hclge_en_hw_strip_rxvtag(struct hnae3_handle *handle, bool enable) 10282 { 10283 struct hclge_vport *vport = hclge_get_vport(handle); 10284 10285 if (vport->port_base_vlan_cfg.state == HNAE3_PORT_BASE_VLAN_DISABLE) { 10286 vport->rxvlan_cfg.strip_tag1_en = false; 10287 vport->rxvlan_cfg.strip_tag2_en = enable; 10288 vport->rxvlan_cfg.strip_tag2_discard_en = false; 10289 } else { 10290 vport->rxvlan_cfg.strip_tag1_en = enable; 10291 vport->rxvlan_cfg.strip_tag2_en = true; 10292 vport->rxvlan_cfg.strip_tag2_discard_en = true; 10293 } 10294 10295 vport->rxvlan_cfg.strip_tag1_discard_en = false; 10296 vport->rxvlan_cfg.vlan1_vlan_prionly = false; 10297 vport->rxvlan_cfg.vlan2_vlan_prionly = false; 10298 vport->rxvlan_cfg.rx_vlan_offload_en = enable; 10299 10300 return hclge_set_vlan_rx_offload_cfg(vport); 10301 } 10302 10303 static void hclge_set_vport_vlan_fltr_change(struct hclge_vport *vport) 10304 { 10305 struct hclge_dev *hdev = vport->back; 10306 10307 if (test_bit(HNAE3_DEV_SUPPORT_VLAN_FLTR_MDF_B, hdev->ae_dev->caps)) 10308 set_bit(HCLGE_VPORT_STATE_VLAN_FLTR_CHANGE, &vport->state); 10309 } 10310 10311 static int hclge_update_vlan_filter_entries(struct hclge_vport *vport, 10312 u16 port_base_vlan_state, 10313 struct hclge_vlan_info *new_info, 10314 struct hclge_vlan_info *old_info) 10315 { 10316 struct hclge_dev *hdev = vport->back; 10317 int ret; 10318 10319 if (port_base_vlan_state == HNAE3_PORT_BASE_VLAN_ENABLE) { 10320 hclge_rm_vport_all_vlan_table(vport, false); 10321 /* force clear VLAN 0 */ 10322 ret = hclge_set_vf_vlan_common(hdev, vport->vport_id, true, 0); 10323 if (ret) 10324 return ret; 10325 return hclge_set_vlan_filter_hw(hdev, 10326 htons(new_info->vlan_proto), 10327 vport->vport_id, 10328 new_info->vlan_tag, 10329 false); 10330 } 10331 10332 /* force add VLAN 0 */ 10333 ret = hclge_set_vf_vlan_common(hdev, vport->vport_id, false, 0); 10334 if (ret) 10335 return ret; 10336 10337 ret = hclge_set_vlan_filter_hw(hdev, htons(old_info->vlan_proto), 10338 vport->vport_id, old_info->vlan_tag, 10339 true); 10340 if (ret) 10341 return ret; 10342 10343 return hclge_add_vport_all_vlan_table(vport); 10344 } 10345 10346 static bool hclge_need_update_vlan_filter(const struct hclge_vlan_info *new_cfg, 10347 const struct hclge_vlan_info *old_cfg) 10348 { 10349 if (new_cfg->vlan_tag != old_cfg->vlan_tag) 10350 return true; 10351 10352 if (new_cfg->vlan_tag == 0 && (new_cfg->qos == 0 || old_cfg->qos == 0)) 10353 return true; 10354 10355 return false; 10356 } 10357 10358 int hclge_update_port_base_vlan_cfg(struct hclge_vport *vport, u16 state, 10359 struct hclge_vlan_info *vlan_info) 10360 { 10361 struct hnae3_handle *nic = &vport->nic; 10362 struct hclge_vlan_info *old_vlan_info; 10363 struct hclge_dev *hdev = vport->back; 10364 int ret; 10365 10366 old_vlan_info = &vport->port_base_vlan_cfg.vlan_info; 10367 10368 ret = hclge_vlan_offload_cfg(vport, state, vlan_info->vlan_tag, 10369 vlan_info->qos); 10370 if (ret) 10371 return ret; 10372 10373 if (!hclge_need_update_vlan_filter(vlan_info, old_vlan_info)) 10374 goto out; 10375 10376 if (state == HNAE3_PORT_BASE_VLAN_MODIFY) { 10377 /* add new VLAN tag */ 10378 ret = hclge_set_vlan_filter_hw(hdev, 10379 htons(vlan_info->vlan_proto), 10380 vport->vport_id, 10381 vlan_info->vlan_tag, 10382 false); 10383 if (ret) 10384 return ret; 10385 10386 /* remove old VLAN tag */ 10387 if (old_vlan_info->vlan_tag == 0) 10388 ret = hclge_set_vf_vlan_common(hdev, vport->vport_id, 10389 true, 0); 10390 else 10391 ret = hclge_set_vlan_filter_hw(hdev, 10392 htons(ETH_P_8021Q), 10393 vport->vport_id, 10394 old_vlan_info->vlan_tag, 10395 true); 10396 if (ret) { 10397 dev_err(&hdev->pdev->dev, 10398 "failed to clear vport%u port base vlan %u, ret = %d.\n", 10399 vport->vport_id, old_vlan_info->vlan_tag, ret); 10400 return ret; 10401 } 10402 10403 goto out; 10404 } 10405 10406 ret = hclge_update_vlan_filter_entries(vport, state, vlan_info, 10407 old_vlan_info); 10408 if (ret) 10409 return ret; 10410 10411 out: 10412 vport->port_base_vlan_cfg.state = state; 10413 if (state == HNAE3_PORT_BASE_VLAN_DISABLE) 10414 nic->port_base_vlan_state = HNAE3_PORT_BASE_VLAN_DISABLE; 10415 else 10416 nic->port_base_vlan_state = HNAE3_PORT_BASE_VLAN_ENABLE; 10417 10418 vport->port_base_vlan_cfg.vlan_info = *vlan_info; 10419 hclge_set_vport_vlan_fltr_change(vport); 10420 10421 return 0; 10422 } 10423 10424 static u16 hclge_get_port_base_vlan_state(struct hclge_vport *vport, 10425 enum hnae3_port_base_vlan_state state, 10426 u16 vlan, u8 qos) 10427 { 10428 if (state == HNAE3_PORT_BASE_VLAN_DISABLE) { 10429 if (!vlan && !qos) 10430 return HNAE3_PORT_BASE_VLAN_NOCHANGE; 10431 10432 return HNAE3_PORT_BASE_VLAN_ENABLE; 10433 } 10434 10435 if (!vlan && !qos) 10436 return HNAE3_PORT_BASE_VLAN_DISABLE; 10437 10438 if (vport->port_base_vlan_cfg.vlan_info.vlan_tag == vlan && 10439 vport->port_base_vlan_cfg.vlan_info.qos == qos) 10440 return HNAE3_PORT_BASE_VLAN_NOCHANGE; 10441 10442 return HNAE3_PORT_BASE_VLAN_MODIFY; 10443 } 10444 10445 static int hclge_set_vf_vlan_filter(struct hnae3_handle *handle, int vfid, 10446 u16 vlan, u8 qos, __be16 proto) 10447 { 10448 struct hnae3_ae_dev *ae_dev = pci_get_drvdata(handle->pdev); 10449 struct hclge_vport *vport = hclge_get_vport(handle); 10450 struct hclge_dev *hdev = vport->back; 10451 struct hclge_vlan_info vlan_info; 10452 u16 state; 10453 int ret; 10454 10455 if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2) 10456 return -EOPNOTSUPP; 10457 10458 vport = hclge_get_vf_vport(hdev, vfid); 10459 if (!vport) 10460 return -EINVAL; 10461 10462 /* qos is a 3 bits value, so can not be bigger than 7 */ 10463 if (vlan > VLAN_N_VID - 1 || qos > 7) 10464 return -EINVAL; 10465 if (proto != htons(ETH_P_8021Q)) 10466 return -EPROTONOSUPPORT; 10467 10468 state = hclge_get_port_base_vlan_state(vport, 10469 vport->port_base_vlan_cfg.state, 10470 vlan, qos); 10471 if (state == HNAE3_PORT_BASE_VLAN_NOCHANGE) 10472 return 0; 10473 10474 vlan_info.vlan_tag = vlan; 10475 vlan_info.qos = qos; 10476 vlan_info.vlan_proto = ntohs(proto); 10477 10478 ret = hclge_update_port_base_vlan_cfg(vport, state, &vlan_info); 10479 if (ret) { 10480 dev_err(&hdev->pdev->dev, 10481 "failed to update port base vlan for vf %d, ret = %d\n", 10482 vfid, ret); 10483 return ret; 10484 } 10485 10486 /* for DEVICE_VERSION_V3, vf doesn't need to know about the port based 10487 * VLAN state. 10488 */ 10489 if (ae_dev->dev_version < HNAE3_DEVICE_VERSION_V3 && 10490 test_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state)) 10491 hclge_push_vf_port_base_vlan_info(&hdev->vport[0], 10492 vport->vport_id, state, 10493 &vlan_info); 10494 10495 return 0; 10496 } 10497 10498 static void hclge_clear_vf_vlan(struct hclge_dev *hdev) 10499 { 10500 struct hclge_vlan_info *vlan_info; 10501 struct hclge_vport *vport; 10502 int ret; 10503 int vf; 10504 10505 /* clear port base vlan for all vf */ 10506 for (vf = HCLGE_VF_VPORT_START_NUM; vf < hdev->num_alloc_vport; vf++) { 10507 vport = &hdev->vport[vf]; 10508 vlan_info = &vport->port_base_vlan_cfg.vlan_info; 10509 10510 ret = hclge_set_vlan_filter_hw(hdev, htons(ETH_P_8021Q), 10511 vport->vport_id, 10512 vlan_info->vlan_tag, true); 10513 if (ret) 10514 dev_err(&hdev->pdev->dev, 10515 "failed to clear vf vlan for vf%d, ret = %d\n", 10516 vf - HCLGE_VF_VPORT_START_NUM, ret); 10517 } 10518 } 10519 10520 int hclge_set_vlan_filter(struct hnae3_handle *handle, __be16 proto, 10521 u16 vlan_id, bool is_kill) 10522 { 10523 struct hclge_vport *vport = hclge_get_vport(handle); 10524 struct hclge_dev *hdev = vport->back; 10525 bool writen_to_tbl = false; 10526 int ret = 0; 10527 10528 /* When device is resetting or reset failed, firmware is unable to 10529 * handle mailbox. Just record the vlan id, and remove it after 10530 * reset finished. 10531 */ 10532 if ((test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state) || 10533 test_bit(HCLGE_STATE_RST_FAIL, &hdev->state)) && is_kill) { 10534 set_bit(vlan_id, vport->vlan_del_fail_bmap); 10535 return -EBUSY; 10536 } 10537 10538 /* when port base vlan enabled, we use port base vlan as the vlan 10539 * filter entry. In this case, we don't update vlan filter table 10540 * when user add new vlan or remove exist vlan, just update the vport 10541 * vlan list. The vlan id in vlan list will be writen in vlan filter 10542 * table until port base vlan disabled 10543 */ 10544 if (handle->port_base_vlan_state == HNAE3_PORT_BASE_VLAN_DISABLE) { 10545 ret = hclge_set_vlan_filter_hw(hdev, proto, vport->vport_id, 10546 vlan_id, is_kill); 10547 writen_to_tbl = true; 10548 } 10549 10550 if (!ret) { 10551 if (is_kill) 10552 hclge_rm_vport_vlan_table(vport, vlan_id, false); 10553 else 10554 hclge_add_vport_vlan_table(vport, vlan_id, 10555 writen_to_tbl); 10556 } else if (is_kill) { 10557 /* when remove hw vlan filter failed, record the vlan id, 10558 * and try to remove it from hw later, to be consistence 10559 * with stack 10560 */ 10561 set_bit(vlan_id, vport->vlan_del_fail_bmap); 10562 } 10563 10564 hclge_set_vport_vlan_fltr_change(vport); 10565 10566 return ret; 10567 } 10568 10569 static void hclge_sync_vlan_fltr_state(struct hclge_dev *hdev) 10570 { 10571 struct hclge_vport *vport; 10572 int ret; 10573 u16 i; 10574 10575 for (i = 0; i < hdev->num_alloc_vport; i++) { 10576 vport = &hdev->vport[i]; 10577 if (!test_and_clear_bit(HCLGE_VPORT_STATE_VLAN_FLTR_CHANGE, 10578 &vport->state)) 10579 continue; 10580 10581 ret = hclge_enable_vport_vlan_filter(vport, 10582 vport->req_vlan_fltr_en); 10583 if (ret) { 10584 dev_err(&hdev->pdev->dev, 10585 "failed to sync vlan filter state for vport%u, ret = %d\n", 10586 vport->vport_id, ret); 10587 set_bit(HCLGE_VPORT_STATE_VLAN_FLTR_CHANGE, 10588 &vport->state); 10589 return; 10590 } 10591 } 10592 } 10593 10594 static void hclge_sync_vlan_filter(struct hclge_dev *hdev) 10595 { 10596 #define HCLGE_MAX_SYNC_COUNT 60 10597 10598 int i, ret, sync_cnt = 0; 10599 u16 vlan_id; 10600 10601 /* start from vport 1 for PF is always alive */ 10602 for (i = 0; i < hdev->num_alloc_vport; i++) { 10603 struct hclge_vport *vport = &hdev->vport[i]; 10604 10605 vlan_id = find_first_bit(vport->vlan_del_fail_bmap, 10606 VLAN_N_VID); 10607 while (vlan_id != VLAN_N_VID) { 10608 ret = hclge_set_vlan_filter_hw(hdev, htons(ETH_P_8021Q), 10609 vport->vport_id, vlan_id, 10610 true); 10611 if (ret && ret != -EINVAL) 10612 return; 10613 10614 clear_bit(vlan_id, vport->vlan_del_fail_bmap); 10615 hclge_rm_vport_vlan_table(vport, vlan_id, false); 10616 hclge_set_vport_vlan_fltr_change(vport); 10617 10618 sync_cnt++; 10619 if (sync_cnt >= HCLGE_MAX_SYNC_COUNT) 10620 return; 10621 10622 vlan_id = find_first_bit(vport->vlan_del_fail_bmap, 10623 VLAN_N_VID); 10624 } 10625 } 10626 10627 hclge_sync_vlan_fltr_state(hdev); 10628 } 10629 10630 static int hclge_set_mac_mtu(struct hclge_dev *hdev, int new_mps) 10631 { 10632 struct hclge_config_max_frm_size_cmd *req; 10633 struct hclge_desc desc; 10634 10635 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CONFIG_MAX_FRM_SIZE, false); 10636 10637 req = (struct hclge_config_max_frm_size_cmd *)desc.data; 10638 req->max_frm_size = cpu_to_le16(new_mps); 10639 req->min_frm_size = HCLGE_MAC_MIN_FRAME; 10640 10641 return hclge_cmd_send(&hdev->hw, &desc, 1); 10642 } 10643 10644 static int hclge_set_mtu(struct hnae3_handle *handle, int new_mtu) 10645 { 10646 struct hclge_vport *vport = hclge_get_vport(handle); 10647 10648 return hclge_set_vport_mtu(vport, new_mtu); 10649 } 10650 10651 int hclge_set_vport_mtu(struct hclge_vport *vport, int new_mtu) 10652 { 10653 struct hclge_dev *hdev = vport->back; 10654 int i, max_frm_size, ret; 10655 10656 /* HW supprt 2 layer vlan */ 10657 max_frm_size = new_mtu + ETH_HLEN + ETH_FCS_LEN + 2 * VLAN_HLEN; 10658 if (max_frm_size < HCLGE_MAC_MIN_FRAME || 10659 max_frm_size > hdev->ae_dev->dev_specs.max_frm_size) 10660 return -EINVAL; 10661 10662 max_frm_size = max(max_frm_size, HCLGE_MAC_DEFAULT_FRAME); 10663 mutex_lock(&hdev->vport_lock); 10664 /* VF's mps must fit within hdev->mps */ 10665 if (vport->vport_id && max_frm_size > hdev->mps) { 10666 mutex_unlock(&hdev->vport_lock); 10667 return -EINVAL; 10668 } else if (vport->vport_id) { 10669 vport->mps = max_frm_size; 10670 mutex_unlock(&hdev->vport_lock); 10671 return 0; 10672 } 10673 10674 /* PF's mps must be greater then VF's mps */ 10675 for (i = 1; i < hdev->num_alloc_vport; i++) 10676 if (max_frm_size < hdev->vport[i].mps) { 10677 mutex_unlock(&hdev->vport_lock); 10678 return -EINVAL; 10679 } 10680 10681 hclge_notify_client(hdev, HNAE3_DOWN_CLIENT); 10682 10683 ret = hclge_set_mac_mtu(hdev, max_frm_size); 10684 if (ret) { 10685 dev_err(&hdev->pdev->dev, 10686 "Change mtu fail, ret =%d\n", ret); 10687 goto out; 10688 } 10689 10690 hdev->mps = max_frm_size; 10691 vport->mps = max_frm_size; 10692 10693 ret = hclge_buffer_alloc(hdev); 10694 if (ret) 10695 dev_err(&hdev->pdev->dev, 10696 "Allocate buffer fail, ret =%d\n", ret); 10697 10698 out: 10699 hclge_notify_client(hdev, HNAE3_UP_CLIENT); 10700 mutex_unlock(&hdev->vport_lock); 10701 return ret; 10702 } 10703 10704 static int hclge_reset_tqp_cmd_send(struct hclge_dev *hdev, u16 queue_id, 10705 bool enable) 10706 { 10707 struct hclge_reset_tqp_queue_cmd *req; 10708 struct hclge_desc desc; 10709 int ret; 10710 10711 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_RESET_TQP_QUEUE, false); 10712 10713 req = (struct hclge_reset_tqp_queue_cmd *)desc.data; 10714 req->tqp_id = cpu_to_le16(queue_id); 10715 if (enable) 10716 hnae3_set_bit(req->reset_req, HCLGE_TQP_RESET_B, 1U); 10717 10718 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 10719 if (ret) { 10720 dev_err(&hdev->pdev->dev, 10721 "Send tqp reset cmd error, status =%d\n", ret); 10722 return ret; 10723 } 10724 10725 return 0; 10726 } 10727 10728 static int hclge_get_reset_status(struct hclge_dev *hdev, u16 queue_id, 10729 u8 *reset_status) 10730 { 10731 struct hclge_reset_tqp_queue_cmd *req; 10732 struct hclge_desc desc; 10733 int ret; 10734 10735 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_RESET_TQP_QUEUE, true); 10736 10737 req = (struct hclge_reset_tqp_queue_cmd *)desc.data; 10738 req->tqp_id = cpu_to_le16(queue_id); 10739 10740 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 10741 if (ret) { 10742 dev_err(&hdev->pdev->dev, 10743 "Get reset status error, status =%d\n", ret); 10744 return ret; 10745 } 10746 10747 *reset_status = hnae3_get_bit(req->ready_to_reset, HCLGE_TQP_RESET_B); 10748 10749 return 0; 10750 } 10751 10752 u16 hclge_covert_handle_qid_global(struct hnae3_handle *handle, u16 queue_id) 10753 { 10754 struct hnae3_queue *queue; 10755 struct hclge_tqp *tqp; 10756 10757 queue = handle->kinfo.tqp[queue_id]; 10758 tqp = container_of(queue, struct hclge_tqp, q); 10759 10760 return tqp->index; 10761 } 10762 10763 static int hclge_reset_tqp_cmd(struct hnae3_handle *handle) 10764 { 10765 struct hclge_vport *vport = hclge_get_vport(handle); 10766 struct hclge_dev *hdev = vport->back; 10767 u16 reset_try_times = 0; 10768 u8 reset_status; 10769 u16 queue_gid; 10770 int ret; 10771 u16 i; 10772 10773 for (i = 0; i < handle->kinfo.num_tqps; i++) { 10774 queue_gid = hclge_covert_handle_qid_global(handle, i); 10775 ret = hclge_reset_tqp_cmd_send(hdev, queue_gid, true); 10776 if (ret) { 10777 dev_err(&hdev->pdev->dev, 10778 "failed to send reset tqp cmd, ret = %d\n", 10779 ret); 10780 return ret; 10781 } 10782 10783 while (reset_try_times++ < HCLGE_TQP_RESET_TRY_TIMES) { 10784 ret = hclge_get_reset_status(hdev, queue_gid, 10785 &reset_status); 10786 if (ret) 10787 return ret; 10788 10789 if (reset_status) 10790 break; 10791 10792 /* Wait for tqp hw reset */ 10793 usleep_range(1000, 1200); 10794 } 10795 10796 if (reset_try_times >= HCLGE_TQP_RESET_TRY_TIMES) { 10797 dev_err(&hdev->pdev->dev, 10798 "wait for tqp hw reset timeout\n"); 10799 return -ETIME; 10800 } 10801 10802 ret = hclge_reset_tqp_cmd_send(hdev, queue_gid, false); 10803 if (ret) { 10804 dev_err(&hdev->pdev->dev, 10805 "failed to deassert soft reset, ret = %d\n", 10806 ret); 10807 return ret; 10808 } 10809 reset_try_times = 0; 10810 } 10811 return 0; 10812 } 10813 10814 static int hclge_reset_rcb(struct hnae3_handle *handle) 10815 { 10816 #define HCLGE_RESET_RCB_NOT_SUPPORT 0U 10817 #define HCLGE_RESET_RCB_SUCCESS 1U 10818 10819 struct hclge_vport *vport = hclge_get_vport(handle); 10820 struct hclge_dev *hdev = vport->back; 10821 struct hclge_reset_cmd *req; 10822 struct hclge_desc desc; 10823 u8 return_status; 10824 u16 queue_gid; 10825 int ret; 10826 10827 queue_gid = hclge_covert_handle_qid_global(handle, 0); 10828 10829 req = (struct hclge_reset_cmd *)desc.data; 10830 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CFG_RST_TRIGGER, false); 10831 hnae3_set_bit(req->fun_reset_rcb, HCLGE_CFG_RESET_RCB_B, 1); 10832 req->fun_reset_rcb_vqid_start = cpu_to_le16(queue_gid); 10833 req->fun_reset_rcb_vqid_num = cpu_to_le16(handle->kinfo.num_tqps); 10834 10835 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 10836 if (ret) { 10837 dev_err(&hdev->pdev->dev, 10838 "failed to send rcb reset cmd, ret = %d\n", ret); 10839 return ret; 10840 } 10841 10842 return_status = req->fun_reset_rcb_return_status; 10843 if (return_status == HCLGE_RESET_RCB_SUCCESS) 10844 return 0; 10845 10846 if (return_status != HCLGE_RESET_RCB_NOT_SUPPORT) { 10847 dev_err(&hdev->pdev->dev, "failed to reset rcb, ret = %u\n", 10848 return_status); 10849 return -EIO; 10850 } 10851 10852 /* if reset rcb cmd is unsupported, we need to send reset tqp cmd 10853 * again to reset all tqps 10854 */ 10855 return hclge_reset_tqp_cmd(handle); 10856 } 10857 10858 int hclge_reset_tqp(struct hnae3_handle *handle) 10859 { 10860 struct hclge_vport *vport = hclge_get_vport(handle); 10861 struct hclge_dev *hdev = vport->back; 10862 int ret; 10863 10864 /* only need to disable PF's tqp */ 10865 if (!vport->vport_id) { 10866 ret = hclge_tqp_enable(handle, false); 10867 if (ret) { 10868 dev_err(&hdev->pdev->dev, 10869 "failed to disable tqp, ret = %d\n", ret); 10870 return ret; 10871 } 10872 } 10873 10874 return hclge_reset_rcb(handle); 10875 } 10876 10877 static u32 hclge_get_fw_version(struct hnae3_handle *handle) 10878 { 10879 struct hclge_vport *vport = hclge_get_vport(handle); 10880 struct hclge_dev *hdev = vport->back; 10881 10882 return hdev->fw_version; 10883 } 10884 10885 static void hclge_set_flowctrl_adv(struct hclge_dev *hdev, u32 rx_en, u32 tx_en) 10886 { 10887 struct phy_device *phydev = hdev->hw.mac.phydev; 10888 10889 if (!phydev) 10890 return; 10891 10892 phy_set_asym_pause(phydev, rx_en, tx_en); 10893 } 10894 10895 static int hclge_cfg_pauseparam(struct hclge_dev *hdev, u32 rx_en, u32 tx_en) 10896 { 10897 int ret; 10898 10899 if (hdev->tm_info.fc_mode == HCLGE_FC_PFC) 10900 return 0; 10901 10902 ret = hclge_mac_pause_en_cfg(hdev, tx_en, rx_en); 10903 if (ret) 10904 dev_err(&hdev->pdev->dev, 10905 "configure pauseparam error, ret = %d.\n", ret); 10906 10907 return ret; 10908 } 10909 10910 int hclge_cfg_flowctrl(struct hclge_dev *hdev) 10911 { 10912 struct phy_device *phydev = hdev->hw.mac.phydev; 10913 u16 remote_advertising = 0; 10914 u16 local_advertising; 10915 u32 rx_pause, tx_pause; 10916 u8 flowctl; 10917 10918 if (!phydev->link || !phydev->autoneg) 10919 return 0; 10920 10921 local_advertising = linkmode_adv_to_lcl_adv_t(phydev->advertising); 10922 10923 if (phydev->pause) 10924 remote_advertising = LPA_PAUSE_CAP; 10925 10926 if (phydev->asym_pause) 10927 remote_advertising |= LPA_PAUSE_ASYM; 10928 10929 flowctl = mii_resolve_flowctrl_fdx(local_advertising, 10930 remote_advertising); 10931 tx_pause = flowctl & FLOW_CTRL_TX; 10932 rx_pause = flowctl & FLOW_CTRL_RX; 10933 10934 if (phydev->duplex == HCLGE_MAC_HALF) { 10935 tx_pause = 0; 10936 rx_pause = 0; 10937 } 10938 10939 return hclge_cfg_pauseparam(hdev, rx_pause, tx_pause); 10940 } 10941 10942 static void hclge_get_pauseparam(struct hnae3_handle *handle, u32 *auto_neg, 10943 u32 *rx_en, u32 *tx_en) 10944 { 10945 struct hclge_vport *vport = hclge_get_vport(handle); 10946 struct hclge_dev *hdev = vport->back; 10947 u8 media_type = hdev->hw.mac.media_type; 10948 10949 *auto_neg = (media_type == HNAE3_MEDIA_TYPE_COPPER) ? 10950 hclge_get_autoneg(handle) : 0; 10951 10952 if (hdev->tm_info.fc_mode == HCLGE_FC_PFC) { 10953 *rx_en = 0; 10954 *tx_en = 0; 10955 return; 10956 } 10957 10958 if (hdev->tm_info.fc_mode == HCLGE_FC_RX_PAUSE) { 10959 *rx_en = 1; 10960 *tx_en = 0; 10961 } else if (hdev->tm_info.fc_mode == HCLGE_FC_TX_PAUSE) { 10962 *tx_en = 1; 10963 *rx_en = 0; 10964 } else if (hdev->tm_info.fc_mode == HCLGE_FC_FULL) { 10965 *rx_en = 1; 10966 *tx_en = 1; 10967 } else { 10968 *rx_en = 0; 10969 *tx_en = 0; 10970 } 10971 } 10972 10973 static void hclge_record_user_pauseparam(struct hclge_dev *hdev, 10974 u32 rx_en, u32 tx_en) 10975 { 10976 if (rx_en && tx_en) 10977 hdev->fc_mode_last_time = HCLGE_FC_FULL; 10978 else if (rx_en && !tx_en) 10979 hdev->fc_mode_last_time = HCLGE_FC_RX_PAUSE; 10980 else if (!rx_en && tx_en) 10981 hdev->fc_mode_last_time = HCLGE_FC_TX_PAUSE; 10982 else 10983 hdev->fc_mode_last_time = HCLGE_FC_NONE; 10984 10985 hdev->tm_info.fc_mode = hdev->fc_mode_last_time; 10986 } 10987 10988 static int hclge_set_pauseparam(struct hnae3_handle *handle, u32 auto_neg, 10989 u32 rx_en, u32 tx_en) 10990 { 10991 struct hclge_vport *vport = hclge_get_vport(handle); 10992 struct hclge_dev *hdev = vport->back; 10993 struct phy_device *phydev = hdev->hw.mac.phydev; 10994 u32 fc_autoneg; 10995 10996 if (phydev || hnae3_dev_phy_imp_supported(hdev)) { 10997 fc_autoneg = hclge_get_autoneg(handle); 10998 if (auto_neg != fc_autoneg) { 10999 dev_info(&hdev->pdev->dev, 11000 "To change autoneg please use: ethtool -s <dev> autoneg <on|off>\n"); 11001 return -EOPNOTSUPP; 11002 } 11003 } 11004 11005 if (hdev->tm_info.fc_mode == HCLGE_FC_PFC) { 11006 dev_info(&hdev->pdev->dev, 11007 "Priority flow control enabled. Cannot set link flow control.\n"); 11008 return -EOPNOTSUPP; 11009 } 11010 11011 hclge_set_flowctrl_adv(hdev, rx_en, tx_en); 11012 11013 hclge_record_user_pauseparam(hdev, rx_en, tx_en); 11014 11015 if (!auto_neg || hnae3_dev_phy_imp_supported(hdev)) 11016 return hclge_cfg_pauseparam(hdev, rx_en, tx_en); 11017 11018 if (phydev) 11019 return phy_start_aneg(phydev); 11020 11021 return -EOPNOTSUPP; 11022 } 11023 11024 static void hclge_get_ksettings_an_result(struct hnae3_handle *handle, 11025 u8 *auto_neg, u32 *speed, u8 *duplex) 11026 { 11027 struct hclge_vport *vport = hclge_get_vport(handle); 11028 struct hclge_dev *hdev = vport->back; 11029 11030 if (speed) 11031 *speed = hdev->hw.mac.speed; 11032 if (duplex) 11033 *duplex = hdev->hw.mac.duplex; 11034 if (auto_neg) 11035 *auto_neg = hdev->hw.mac.autoneg; 11036 } 11037 11038 static void hclge_get_media_type(struct hnae3_handle *handle, u8 *media_type, 11039 u8 *module_type) 11040 { 11041 struct hclge_vport *vport = hclge_get_vport(handle); 11042 struct hclge_dev *hdev = vport->back; 11043 11044 /* When nic is down, the service task is not running, doesn't update 11045 * the port information per second. Query the port information before 11046 * return the media type, ensure getting the correct media information. 11047 */ 11048 hclge_update_port_info(hdev); 11049 11050 if (media_type) 11051 *media_type = hdev->hw.mac.media_type; 11052 11053 if (module_type) 11054 *module_type = hdev->hw.mac.module_type; 11055 } 11056 11057 static void hclge_get_mdix_mode(struct hnae3_handle *handle, 11058 u8 *tp_mdix_ctrl, u8 *tp_mdix) 11059 { 11060 struct hclge_vport *vport = hclge_get_vport(handle); 11061 struct hclge_dev *hdev = vport->back; 11062 struct phy_device *phydev = hdev->hw.mac.phydev; 11063 int mdix_ctrl, mdix, is_resolved; 11064 unsigned int retval; 11065 11066 if (!phydev) { 11067 *tp_mdix_ctrl = ETH_TP_MDI_INVALID; 11068 *tp_mdix = ETH_TP_MDI_INVALID; 11069 return; 11070 } 11071 11072 phy_write(phydev, HCLGE_PHY_PAGE_REG, HCLGE_PHY_PAGE_MDIX); 11073 11074 retval = phy_read(phydev, HCLGE_PHY_CSC_REG); 11075 mdix_ctrl = hnae3_get_field(retval, HCLGE_PHY_MDIX_CTRL_M, 11076 HCLGE_PHY_MDIX_CTRL_S); 11077 11078 retval = phy_read(phydev, HCLGE_PHY_CSS_REG); 11079 mdix = hnae3_get_bit(retval, HCLGE_PHY_MDIX_STATUS_B); 11080 is_resolved = hnae3_get_bit(retval, HCLGE_PHY_SPEED_DUP_RESOLVE_B); 11081 11082 phy_write(phydev, HCLGE_PHY_PAGE_REG, HCLGE_PHY_PAGE_COPPER); 11083 11084 switch (mdix_ctrl) { 11085 case 0x0: 11086 *tp_mdix_ctrl = ETH_TP_MDI; 11087 break; 11088 case 0x1: 11089 *tp_mdix_ctrl = ETH_TP_MDI_X; 11090 break; 11091 case 0x3: 11092 *tp_mdix_ctrl = ETH_TP_MDI_AUTO; 11093 break; 11094 default: 11095 *tp_mdix_ctrl = ETH_TP_MDI_INVALID; 11096 break; 11097 } 11098 11099 if (!is_resolved) 11100 *tp_mdix = ETH_TP_MDI_INVALID; 11101 else if (mdix) 11102 *tp_mdix = ETH_TP_MDI_X; 11103 else 11104 *tp_mdix = ETH_TP_MDI; 11105 } 11106 11107 static void hclge_info_show(struct hclge_dev *hdev) 11108 { 11109 struct device *dev = &hdev->pdev->dev; 11110 11111 dev_info(dev, "PF info begin:\n"); 11112 11113 dev_info(dev, "Task queue pairs numbers: %u\n", hdev->num_tqps); 11114 dev_info(dev, "Desc num per TX queue: %u\n", hdev->num_tx_desc); 11115 dev_info(dev, "Desc num per RX queue: %u\n", hdev->num_rx_desc); 11116 dev_info(dev, "Numbers of vports: %u\n", hdev->num_alloc_vport); 11117 dev_info(dev, "Numbers of VF for this PF: %u\n", hdev->num_req_vfs); 11118 dev_info(dev, "HW tc map: 0x%x\n", hdev->hw_tc_map); 11119 dev_info(dev, "Total buffer size for TX/RX: %u\n", hdev->pkt_buf_size); 11120 dev_info(dev, "TX buffer size for each TC: %u\n", hdev->tx_buf_size); 11121 dev_info(dev, "DV buffer size for each TC: %u\n", hdev->dv_buf_size); 11122 dev_info(dev, "This is %s PF\n", 11123 hdev->flag & HCLGE_FLAG_MAIN ? "main" : "not main"); 11124 dev_info(dev, "DCB %s\n", 11125 hdev->flag & HCLGE_FLAG_DCB_ENABLE ? "enable" : "disable"); 11126 dev_info(dev, "MQPRIO %s\n", 11127 hdev->flag & HCLGE_FLAG_MQPRIO_ENABLE ? "enable" : "disable"); 11128 dev_info(dev, "Default tx spare buffer size: %u\n", 11129 hdev->tx_spare_buf_size); 11130 11131 dev_info(dev, "PF info end.\n"); 11132 } 11133 11134 static int hclge_init_nic_client_instance(struct hnae3_ae_dev *ae_dev, 11135 struct hclge_vport *vport) 11136 { 11137 struct hnae3_client *client = vport->nic.client; 11138 struct hclge_dev *hdev = ae_dev->priv; 11139 int rst_cnt = hdev->rst_stats.reset_cnt; 11140 int ret; 11141 11142 ret = client->ops->init_instance(&vport->nic); 11143 if (ret) 11144 return ret; 11145 11146 set_bit(HCLGE_STATE_NIC_REGISTERED, &hdev->state); 11147 if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state) || 11148 rst_cnt != hdev->rst_stats.reset_cnt) { 11149 ret = -EBUSY; 11150 goto init_nic_err; 11151 } 11152 11153 /* Enable nic hw error interrupts */ 11154 ret = hclge_config_nic_hw_error(hdev, true); 11155 if (ret) { 11156 dev_err(&ae_dev->pdev->dev, 11157 "fail(%d) to enable hw error interrupts\n", ret); 11158 goto init_nic_err; 11159 } 11160 11161 hnae3_set_client_init_flag(client, ae_dev, 1); 11162 11163 if (netif_msg_drv(&hdev->vport->nic)) 11164 hclge_info_show(hdev); 11165 11166 return ret; 11167 11168 init_nic_err: 11169 clear_bit(HCLGE_STATE_NIC_REGISTERED, &hdev->state); 11170 while (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state)) 11171 msleep(HCLGE_WAIT_RESET_DONE); 11172 11173 client->ops->uninit_instance(&vport->nic, 0); 11174 11175 return ret; 11176 } 11177 11178 static int hclge_init_roce_client_instance(struct hnae3_ae_dev *ae_dev, 11179 struct hclge_vport *vport) 11180 { 11181 struct hclge_dev *hdev = ae_dev->priv; 11182 struct hnae3_client *client; 11183 int rst_cnt; 11184 int ret; 11185 11186 if (!hnae3_dev_roce_supported(hdev) || !hdev->roce_client || 11187 !hdev->nic_client) 11188 return 0; 11189 11190 client = hdev->roce_client; 11191 ret = hclge_init_roce_base_info(vport); 11192 if (ret) 11193 return ret; 11194 11195 rst_cnt = hdev->rst_stats.reset_cnt; 11196 ret = client->ops->init_instance(&vport->roce); 11197 if (ret) 11198 return ret; 11199 11200 set_bit(HCLGE_STATE_ROCE_REGISTERED, &hdev->state); 11201 if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state) || 11202 rst_cnt != hdev->rst_stats.reset_cnt) { 11203 ret = -EBUSY; 11204 goto init_roce_err; 11205 } 11206 11207 /* Enable roce ras interrupts */ 11208 ret = hclge_config_rocee_ras_interrupt(hdev, true); 11209 if (ret) { 11210 dev_err(&ae_dev->pdev->dev, 11211 "fail(%d) to enable roce ras interrupts\n", ret); 11212 goto init_roce_err; 11213 } 11214 11215 hnae3_set_client_init_flag(client, ae_dev, 1); 11216 11217 return 0; 11218 11219 init_roce_err: 11220 clear_bit(HCLGE_STATE_ROCE_REGISTERED, &hdev->state); 11221 while (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state)) 11222 msleep(HCLGE_WAIT_RESET_DONE); 11223 11224 hdev->roce_client->ops->uninit_instance(&vport->roce, 0); 11225 11226 return ret; 11227 } 11228 11229 static int hclge_init_client_instance(struct hnae3_client *client, 11230 struct hnae3_ae_dev *ae_dev) 11231 { 11232 struct hclge_dev *hdev = ae_dev->priv; 11233 struct hclge_vport *vport = &hdev->vport[0]; 11234 int ret; 11235 11236 switch (client->type) { 11237 case HNAE3_CLIENT_KNIC: 11238 hdev->nic_client = client; 11239 vport->nic.client = client; 11240 ret = hclge_init_nic_client_instance(ae_dev, vport); 11241 if (ret) 11242 goto clear_nic; 11243 11244 ret = hclge_init_roce_client_instance(ae_dev, vport); 11245 if (ret) 11246 goto clear_roce; 11247 11248 break; 11249 case HNAE3_CLIENT_ROCE: 11250 if (hnae3_dev_roce_supported(hdev)) { 11251 hdev->roce_client = client; 11252 vport->roce.client = client; 11253 } 11254 11255 ret = hclge_init_roce_client_instance(ae_dev, vport); 11256 if (ret) 11257 goto clear_roce; 11258 11259 break; 11260 default: 11261 return -EINVAL; 11262 } 11263 11264 return 0; 11265 11266 clear_nic: 11267 hdev->nic_client = NULL; 11268 vport->nic.client = NULL; 11269 return ret; 11270 clear_roce: 11271 hdev->roce_client = NULL; 11272 vport->roce.client = NULL; 11273 return ret; 11274 } 11275 11276 static void hclge_uninit_client_instance(struct hnae3_client *client, 11277 struct hnae3_ae_dev *ae_dev) 11278 { 11279 struct hclge_dev *hdev = ae_dev->priv; 11280 struct hclge_vport *vport = &hdev->vport[0]; 11281 11282 if (hdev->roce_client) { 11283 clear_bit(HCLGE_STATE_ROCE_REGISTERED, &hdev->state); 11284 while (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state)) 11285 msleep(HCLGE_WAIT_RESET_DONE); 11286 11287 hdev->roce_client->ops->uninit_instance(&vport->roce, 0); 11288 hdev->roce_client = NULL; 11289 vport->roce.client = NULL; 11290 } 11291 if (client->type == HNAE3_CLIENT_ROCE) 11292 return; 11293 if (hdev->nic_client && client->ops->uninit_instance) { 11294 clear_bit(HCLGE_STATE_NIC_REGISTERED, &hdev->state); 11295 while (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state)) 11296 msleep(HCLGE_WAIT_RESET_DONE); 11297 11298 client->ops->uninit_instance(&vport->nic, 0); 11299 hdev->nic_client = NULL; 11300 vport->nic.client = NULL; 11301 } 11302 } 11303 11304 static int hclge_dev_mem_map(struct hclge_dev *hdev) 11305 { 11306 #define HCLGE_MEM_BAR 4 11307 11308 struct pci_dev *pdev = hdev->pdev; 11309 struct hclge_hw *hw = &hdev->hw; 11310 11311 /* for device does not have device memory, return directly */ 11312 if (!(pci_select_bars(pdev, IORESOURCE_MEM) & BIT(HCLGE_MEM_BAR))) 11313 return 0; 11314 11315 hw->mem_base = devm_ioremap_wc(&pdev->dev, 11316 pci_resource_start(pdev, HCLGE_MEM_BAR), 11317 pci_resource_len(pdev, HCLGE_MEM_BAR)); 11318 if (!hw->mem_base) { 11319 dev_err(&pdev->dev, "failed to map device memory\n"); 11320 return -EFAULT; 11321 } 11322 11323 return 0; 11324 } 11325 11326 static int hclge_pci_init(struct hclge_dev *hdev) 11327 { 11328 struct pci_dev *pdev = hdev->pdev; 11329 struct hclge_hw *hw; 11330 int ret; 11331 11332 ret = pci_enable_device(pdev); 11333 if (ret) { 11334 dev_err(&pdev->dev, "failed to enable PCI device\n"); 11335 return ret; 11336 } 11337 11338 ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64)); 11339 if (ret) { 11340 ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)); 11341 if (ret) { 11342 dev_err(&pdev->dev, 11343 "can't set consistent PCI DMA"); 11344 goto err_disable_device; 11345 } 11346 dev_warn(&pdev->dev, "set DMA mask to 32 bits\n"); 11347 } 11348 11349 ret = pci_request_regions(pdev, HCLGE_DRIVER_NAME); 11350 if (ret) { 11351 dev_err(&pdev->dev, "PCI request regions failed %d\n", ret); 11352 goto err_disable_device; 11353 } 11354 11355 pci_set_master(pdev); 11356 hw = &hdev->hw; 11357 hw->io_base = pcim_iomap(pdev, 2, 0); 11358 if (!hw->io_base) { 11359 dev_err(&pdev->dev, "Can't map configuration register space\n"); 11360 ret = -ENOMEM; 11361 goto err_clr_master; 11362 } 11363 11364 ret = hclge_dev_mem_map(hdev); 11365 if (ret) 11366 goto err_unmap_io_base; 11367 11368 hdev->num_req_vfs = pci_sriov_get_totalvfs(pdev); 11369 11370 return 0; 11371 11372 err_unmap_io_base: 11373 pcim_iounmap(pdev, hdev->hw.io_base); 11374 err_clr_master: 11375 pci_clear_master(pdev); 11376 pci_release_regions(pdev); 11377 err_disable_device: 11378 pci_disable_device(pdev); 11379 11380 return ret; 11381 } 11382 11383 static void hclge_pci_uninit(struct hclge_dev *hdev) 11384 { 11385 struct pci_dev *pdev = hdev->pdev; 11386 11387 if (hdev->hw.mem_base) 11388 devm_iounmap(&pdev->dev, hdev->hw.mem_base); 11389 11390 pcim_iounmap(pdev, hdev->hw.io_base); 11391 pci_free_irq_vectors(pdev); 11392 pci_clear_master(pdev); 11393 pci_release_mem_regions(pdev); 11394 pci_disable_device(pdev); 11395 } 11396 11397 static void hclge_state_init(struct hclge_dev *hdev) 11398 { 11399 set_bit(HCLGE_STATE_SERVICE_INITED, &hdev->state); 11400 set_bit(HCLGE_STATE_DOWN, &hdev->state); 11401 clear_bit(HCLGE_STATE_RST_SERVICE_SCHED, &hdev->state); 11402 clear_bit(HCLGE_STATE_RST_HANDLING, &hdev->state); 11403 clear_bit(HCLGE_STATE_RST_FAIL, &hdev->state); 11404 clear_bit(HCLGE_STATE_MBX_SERVICE_SCHED, &hdev->state); 11405 clear_bit(HCLGE_STATE_MBX_HANDLING, &hdev->state); 11406 } 11407 11408 static void hclge_state_uninit(struct hclge_dev *hdev) 11409 { 11410 set_bit(HCLGE_STATE_DOWN, &hdev->state); 11411 set_bit(HCLGE_STATE_REMOVING, &hdev->state); 11412 11413 if (hdev->reset_timer.function) 11414 del_timer_sync(&hdev->reset_timer); 11415 if (hdev->service_task.work.func) 11416 cancel_delayed_work_sync(&hdev->service_task); 11417 } 11418 11419 static void hclge_reset_prepare_general(struct hnae3_ae_dev *ae_dev, 11420 enum hnae3_reset_type rst_type) 11421 { 11422 #define HCLGE_RESET_RETRY_WAIT_MS 500 11423 #define HCLGE_RESET_RETRY_CNT 5 11424 11425 struct hclge_dev *hdev = ae_dev->priv; 11426 int retry_cnt = 0; 11427 int ret; 11428 11429 retry: 11430 down(&hdev->reset_sem); 11431 set_bit(HCLGE_STATE_RST_HANDLING, &hdev->state); 11432 hdev->reset_type = rst_type; 11433 ret = hclge_reset_prepare(hdev); 11434 if (ret || hdev->reset_pending) { 11435 dev_err(&hdev->pdev->dev, "fail to prepare to reset, ret=%d\n", 11436 ret); 11437 if (hdev->reset_pending || 11438 retry_cnt++ < HCLGE_RESET_RETRY_CNT) { 11439 dev_err(&hdev->pdev->dev, 11440 "reset_pending:0x%lx, retry_cnt:%d\n", 11441 hdev->reset_pending, retry_cnt); 11442 clear_bit(HCLGE_STATE_RST_HANDLING, &hdev->state); 11443 up(&hdev->reset_sem); 11444 msleep(HCLGE_RESET_RETRY_WAIT_MS); 11445 goto retry; 11446 } 11447 } 11448 11449 /* disable misc vector before reset done */ 11450 hclge_enable_vector(&hdev->misc_vector, false); 11451 set_bit(HCLGE_STATE_CMD_DISABLE, &hdev->state); 11452 11453 if (hdev->reset_type == HNAE3_FLR_RESET) 11454 hdev->rst_stats.flr_rst_cnt++; 11455 } 11456 11457 static void hclge_reset_done(struct hnae3_ae_dev *ae_dev) 11458 { 11459 struct hclge_dev *hdev = ae_dev->priv; 11460 int ret; 11461 11462 hclge_enable_vector(&hdev->misc_vector, true); 11463 11464 ret = hclge_reset_rebuild(hdev); 11465 if (ret) 11466 dev_err(&hdev->pdev->dev, "fail to rebuild, ret=%d\n", ret); 11467 11468 hdev->reset_type = HNAE3_NONE_RESET; 11469 clear_bit(HCLGE_STATE_RST_HANDLING, &hdev->state); 11470 up(&hdev->reset_sem); 11471 } 11472 11473 static void hclge_clear_resetting_state(struct hclge_dev *hdev) 11474 { 11475 u16 i; 11476 11477 for (i = 0; i < hdev->num_alloc_vport; i++) { 11478 struct hclge_vport *vport = &hdev->vport[i]; 11479 int ret; 11480 11481 /* Send cmd to clear vport's FUNC_RST_ING */ 11482 ret = hclge_set_vf_rst(hdev, vport->vport_id, false); 11483 if (ret) 11484 dev_warn(&hdev->pdev->dev, 11485 "clear vport(%u) rst failed %d!\n", 11486 vport->vport_id, ret); 11487 } 11488 } 11489 11490 static int hclge_clear_hw_resource(struct hclge_dev *hdev) 11491 { 11492 struct hclge_desc desc; 11493 int ret; 11494 11495 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CLEAR_HW_RESOURCE, false); 11496 11497 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 11498 /* This new command is only supported by new firmware, it will 11499 * fail with older firmware. Error value -EOPNOSUPP can only be 11500 * returned by older firmware running this command, to keep code 11501 * backward compatible we will override this value and return 11502 * success. 11503 */ 11504 if (ret && ret != -EOPNOTSUPP) { 11505 dev_err(&hdev->pdev->dev, 11506 "failed to clear hw resource, ret = %d\n", ret); 11507 return ret; 11508 } 11509 return 0; 11510 } 11511 11512 static void hclge_init_rxd_adv_layout(struct hclge_dev *hdev) 11513 { 11514 if (hnae3_ae_dev_rxd_adv_layout_supported(hdev->ae_dev)) 11515 hclge_write_dev(&hdev->hw, HCLGE_RXD_ADV_LAYOUT_EN_REG, 1); 11516 } 11517 11518 static void hclge_uninit_rxd_adv_layout(struct hclge_dev *hdev) 11519 { 11520 if (hnae3_ae_dev_rxd_adv_layout_supported(hdev->ae_dev)) 11521 hclge_write_dev(&hdev->hw, HCLGE_RXD_ADV_LAYOUT_EN_REG, 0); 11522 } 11523 11524 static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev) 11525 { 11526 struct pci_dev *pdev = ae_dev->pdev; 11527 struct hclge_dev *hdev; 11528 int ret; 11529 11530 hdev = devm_kzalloc(&pdev->dev, sizeof(*hdev), GFP_KERNEL); 11531 if (!hdev) 11532 return -ENOMEM; 11533 11534 hdev->pdev = pdev; 11535 hdev->ae_dev = ae_dev; 11536 hdev->reset_type = HNAE3_NONE_RESET; 11537 hdev->reset_level = HNAE3_FUNC_RESET; 11538 ae_dev->priv = hdev; 11539 11540 /* HW supprt 2 layer vlan */ 11541 hdev->mps = ETH_FRAME_LEN + ETH_FCS_LEN + 2 * VLAN_HLEN; 11542 11543 mutex_init(&hdev->vport_lock); 11544 spin_lock_init(&hdev->fd_rule_lock); 11545 sema_init(&hdev->reset_sem, 1); 11546 11547 ret = hclge_pci_init(hdev); 11548 if (ret) 11549 goto out; 11550 11551 ret = hclge_devlink_init(hdev); 11552 if (ret) 11553 goto err_pci_uninit; 11554 11555 /* Firmware command queue initialize */ 11556 ret = hclge_cmd_queue_init(hdev); 11557 if (ret) 11558 goto err_devlink_uninit; 11559 11560 /* Firmware command initialize */ 11561 ret = hclge_cmd_init(hdev); 11562 if (ret) 11563 goto err_cmd_uninit; 11564 11565 ret = hclge_clear_hw_resource(hdev); 11566 if (ret) 11567 goto err_cmd_uninit; 11568 11569 ret = hclge_get_cap(hdev); 11570 if (ret) 11571 goto err_cmd_uninit; 11572 11573 ret = hclge_query_dev_specs(hdev); 11574 if (ret) { 11575 dev_err(&pdev->dev, "failed to query dev specifications, ret = %d.\n", 11576 ret); 11577 goto err_cmd_uninit; 11578 } 11579 11580 ret = hclge_configure(hdev); 11581 if (ret) { 11582 dev_err(&pdev->dev, "Configure dev error, ret = %d.\n", ret); 11583 goto err_cmd_uninit; 11584 } 11585 11586 ret = hclge_init_msi(hdev); 11587 if (ret) { 11588 dev_err(&pdev->dev, "Init MSI/MSI-X error, ret = %d.\n", ret); 11589 goto err_cmd_uninit; 11590 } 11591 11592 ret = hclge_misc_irq_init(hdev); 11593 if (ret) 11594 goto err_msi_uninit; 11595 11596 ret = hclge_alloc_tqps(hdev); 11597 if (ret) { 11598 dev_err(&pdev->dev, "Allocate TQPs error, ret = %d.\n", ret); 11599 goto err_msi_irq_uninit; 11600 } 11601 11602 ret = hclge_alloc_vport(hdev); 11603 if (ret) 11604 goto err_msi_irq_uninit; 11605 11606 ret = hclge_map_tqp(hdev); 11607 if (ret) 11608 goto err_msi_irq_uninit; 11609 11610 if (hdev->hw.mac.media_type == HNAE3_MEDIA_TYPE_COPPER && 11611 !hnae3_dev_phy_imp_supported(hdev)) { 11612 ret = hclge_mac_mdio_config(hdev); 11613 if (ret) 11614 goto err_msi_irq_uninit; 11615 } 11616 11617 ret = hclge_init_umv_space(hdev); 11618 if (ret) 11619 goto err_mdiobus_unreg; 11620 11621 ret = hclge_mac_init(hdev); 11622 if (ret) { 11623 dev_err(&pdev->dev, "Mac init error, ret = %d\n", ret); 11624 goto err_mdiobus_unreg; 11625 } 11626 11627 ret = hclge_config_tso(hdev, HCLGE_TSO_MSS_MIN, HCLGE_TSO_MSS_MAX); 11628 if (ret) { 11629 dev_err(&pdev->dev, "Enable tso fail, ret =%d\n", ret); 11630 goto err_mdiobus_unreg; 11631 } 11632 11633 ret = hclge_config_gro(hdev); 11634 if (ret) 11635 goto err_mdiobus_unreg; 11636 11637 ret = hclge_init_vlan_config(hdev); 11638 if (ret) { 11639 dev_err(&pdev->dev, "VLAN init fail, ret =%d\n", ret); 11640 goto err_mdiobus_unreg; 11641 } 11642 11643 ret = hclge_tm_schd_init(hdev); 11644 if (ret) { 11645 dev_err(&pdev->dev, "tm schd init fail, ret =%d\n", ret); 11646 goto err_mdiobus_unreg; 11647 } 11648 11649 ret = hclge_rss_init_cfg(hdev); 11650 if (ret) { 11651 dev_err(&pdev->dev, "failed to init rss cfg, ret = %d\n", ret); 11652 goto err_mdiobus_unreg; 11653 } 11654 11655 ret = hclge_rss_init_hw(hdev); 11656 if (ret) { 11657 dev_err(&pdev->dev, "Rss init fail, ret =%d\n", ret); 11658 goto err_mdiobus_unreg; 11659 } 11660 11661 ret = init_mgr_tbl(hdev); 11662 if (ret) { 11663 dev_err(&pdev->dev, "manager table init fail, ret =%d\n", ret); 11664 goto err_mdiobus_unreg; 11665 } 11666 11667 ret = hclge_init_fd_config(hdev); 11668 if (ret) { 11669 dev_err(&pdev->dev, 11670 "fd table init fail, ret=%d\n", ret); 11671 goto err_mdiobus_unreg; 11672 } 11673 11674 ret = hclge_ptp_init(hdev); 11675 if (ret) 11676 goto err_mdiobus_unreg; 11677 11678 INIT_KFIFO(hdev->mac_tnl_log); 11679 11680 hclge_dcb_ops_set(hdev); 11681 11682 timer_setup(&hdev->reset_timer, hclge_reset_timer, 0); 11683 INIT_DELAYED_WORK(&hdev->service_task, hclge_service_task); 11684 11685 /* Setup affinity after service timer setup because add_timer_on 11686 * is called in affinity notify. 11687 */ 11688 hclge_misc_affinity_setup(hdev); 11689 11690 hclge_clear_all_event_cause(hdev); 11691 hclge_clear_resetting_state(hdev); 11692 11693 /* Log and clear the hw errors those already occurred */ 11694 if (hnae3_dev_ras_imp_supported(hdev)) 11695 hclge_handle_occurred_error(hdev); 11696 else 11697 hclge_handle_all_hns_hw_errors(ae_dev); 11698 11699 /* request delayed reset for the error recovery because an immediate 11700 * global reset on a PF affecting pending initialization of other PFs 11701 */ 11702 if (ae_dev->hw_err_reset_req) { 11703 enum hnae3_reset_type reset_level; 11704 11705 reset_level = hclge_get_reset_level(ae_dev, 11706 &ae_dev->hw_err_reset_req); 11707 hclge_set_def_reset_request(ae_dev, reset_level); 11708 mod_timer(&hdev->reset_timer, jiffies + HCLGE_RESET_INTERVAL); 11709 } 11710 11711 hclge_init_rxd_adv_layout(hdev); 11712 11713 /* Enable MISC vector(vector0) */ 11714 hclge_enable_vector(&hdev->misc_vector, true); 11715 11716 hclge_state_init(hdev); 11717 hdev->last_reset_time = jiffies; 11718 11719 dev_info(&hdev->pdev->dev, "%s driver initialization finished.\n", 11720 HCLGE_DRIVER_NAME); 11721 11722 hclge_task_schedule(hdev, round_jiffies_relative(HZ)); 11723 11724 return 0; 11725 11726 err_mdiobus_unreg: 11727 if (hdev->hw.mac.phydev) 11728 mdiobus_unregister(hdev->hw.mac.mdio_bus); 11729 err_msi_irq_uninit: 11730 hclge_misc_irq_uninit(hdev); 11731 err_msi_uninit: 11732 pci_free_irq_vectors(pdev); 11733 err_cmd_uninit: 11734 hclge_cmd_uninit(hdev); 11735 err_devlink_uninit: 11736 hclge_devlink_uninit(hdev); 11737 err_pci_uninit: 11738 pcim_iounmap(pdev, hdev->hw.io_base); 11739 pci_clear_master(pdev); 11740 pci_release_regions(pdev); 11741 pci_disable_device(pdev); 11742 out: 11743 mutex_destroy(&hdev->vport_lock); 11744 return ret; 11745 } 11746 11747 static void hclge_stats_clear(struct hclge_dev *hdev) 11748 { 11749 memset(&hdev->mac_stats, 0, sizeof(hdev->mac_stats)); 11750 } 11751 11752 static int hclge_set_mac_spoofchk(struct hclge_dev *hdev, int vf, bool enable) 11753 { 11754 return hclge_config_switch_param(hdev, vf, enable, 11755 HCLGE_SWITCH_ANTI_SPOOF_MASK); 11756 } 11757 11758 static int hclge_set_vlan_spoofchk(struct hclge_dev *hdev, int vf, bool enable) 11759 { 11760 return hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_VF, 11761 HCLGE_FILTER_FE_NIC_INGRESS_B, 11762 enable, vf); 11763 } 11764 11765 static int hclge_set_vf_spoofchk_hw(struct hclge_dev *hdev, int vf, bool enable) 11766 { 11767 int ret; 11768 11769 ret = hclge_set_mac_spoofchk(hdev, vf, enable); 11770 if (ret) { 11771 dev_err(&hdev->pdev->dev, 11772 "Set vf %d mac spoof check %s failed, ret=%d\n", 11773 vf, enable ? "on" : "off", ret); 11774 return ret; 11775 } 11776 11777 ret = hclge_set_vlan_spoofchk(hdev, vf, enable); 11778 if (ret) 11779 dev_err(&hdev->pdev->dev, 11780 "Set vf %d vlan spoof check %s failed, ret=%d\n", 11781 vf, enable ? "on" : "off", ret); 11782 11783 return ret; 11784 } 11785 11786 static int hclge_set_vf_spoofchk(struct hnae3_handle *handle, int vf, 11787 bool enable) 11788 { 11789 struct hclge_vport *vport = hclge_get_vport(handle); 11790 struct hclge_dev *hdev = vport->back; 11791 u32 new_spoofchk = enable ? 1 : 0; 11792 int ret; 11793 11794 if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2) 11795 return -EOPNOTSUPP; 11796 11797 vport = hclge_get_vf_vport(hdev, vf); 11798 if (!vport) 11799 return -EINVAL; 11800 11801 if (vport->vf_info.spoofchk == new_spoofchk) 11802 return 0; 11803 11804 if (enable && test_bit(vport->vport_id, hdev->vf_vlan_full)) 11805 dev_warn(&hdev->pdev->dev, 11806 "vf %d vlan table is full, enable spoof check may cause its packet send fail\n", 11807 vf); 11808 else if (enable && hclge_is_umv_space_full(vport, true)) 11809 dev_warn(&hdev->pdev->dev, 11810 "vf %d mac table is full, enable spoof check may cause its packet send fail\n", 11811 vf); 11812 11813 ret = hclge_set_vf_spoofchk_hw(hdev, vport->vport_id, enable); 11814 if (ret) 11815 return ret; 11816 11817 vport->vf_info.spoofchk = new_spoofchk; 11818 return 0; 11819 } 11820 11821 static int hclge_reset_vport_spoofchk(struct hclge_dev *hdev) 11822 { 11823 struct hclge_vport *vport = hdev->vport; 11824 int ret; 11825 int i; 11826 11827 if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2) 11828 return 0; 11829 11830 /* resume the vf spoof check state after reset */ 11831 for (i = 0; i < hdev->num_alloc_vport; i++) { 11832 ret = hclge_set_vf_spoofchk_hw(hdev, vport->vport_id, 11833 vport->vf_info.spoofchk); 11834 if (ret) 11835 return ret; 11836 11837 vport++; 11838 } 11839 11840 return 0; 11841 } 11842 11843 static int hclge_set_vf_trust(struct hnae3_handle *handle, int vf, bool enable) 11844 { 11845 struct hclge_vport *vport = hclge_get_vport(handle); 11846 struct hclge_dev *hdev = vport->back; 11847 u32 new_trusted = enable ? 1 : 0; 11848 11849 vport = hclge_get_vf_vport(hdev, vf); 11850 if (!vport) 11851 return -EINVAL; 11852 11853 if (vport->vf_info.trusted == new_trusted) 11854 return 0; 11855 11856 vport->vf_info.trusted = new_trusted; 11857 set_bit(HCLGE_VPORT_STATE_PROMISC_CHANGE, &vport->state); 11858 hclge_task_schedule(hdev, 0); 11859 11860 return 0; 11861 } 11862 11863 static void hclge_reset_vf_rate(struct hclge_dev *hdev) 11864 { 11865 int ret; 11866 int vf; 11867 11868 /* reset vf rate to default value */ 11869 for (vf = HCLGE_VF_VPORT_START_NUM; vf < hdev->num_alloc_vport; vf++) { 11870 struct hclge_vport *vport = &hdev->vport[vf]; 11871 11872 vport->vf_info.max_tx_rate = 0; 11873 ret = hclge_tm_qs_shaper_cfg(vport, vport->vf_info.max_tx_rate); 11874 if (ret) 11875 dev_err(&hdev->pdev->dev, 11876 "vf%d failed to reset to default, ret=%d\n", 11877 vf - HCLGE_VF_VPORT_START_NUM, ret); 11878 } 11879 } 11880 11881 static int hclge_vf_rate_param_check(struct hclge_dev *hdev, 11882 int min_tx_rate, int max_tx_rate) 11883 { 11884 if (min_tx_rate != 0 || 11885 max_tx_rate < 0 || max_tx_rate > hdev->hw.mac.max_speed) { 11886 dev_err(&hdev->pdev->dev, 11887 "min_tx_rate:%d [0], max_tx_rate:%d [0, %u]\n", 11888 min_tx_rate, max_tx_rate, hdev->hw.mac.max_speed); 11889 return -EINVAL; 11890 } 11891 11892 return 0; 11893 } 11894 11895 static int hclge_set_vf_rate(struct hnae3_handle *handle, int vf, 11896 int min_tx_rate, int max_tx_rate, bool force) 11897 { 11898 struct hclge_vport *vport = hclge_get_vport(handle); 11899 struct hclge_dev *hdev = vport->back; 11900 int ret; 11901 11902 ret = hclge_vf_rate_param_check(hdev, min_tx_rate, max_tx_rate); 11903 if (ret) 11904 return ret; 11905 11906 vport = hclge_get_vf_vport(hdev, vf); 11907 if (!vport) 11908 return -EINVAL; 11909 11910 if (!force && max_tx_rate == vport->vf_info.max_tx_rate) 11911 return 0; 11912 11913 ret = hclge_tm_qs_shaper_cfg(vport, max_tx_rate); 11914 if (ret) 11915 return ret; 11916 11917 vport->vf_info.max_tx_rate = max_tx_rate; 11918 11919 return 0; 11920 } 11921 11922 static int hclge_resume_vf_rate(struct hclge_dev *hdev) 11923 { 11924 struct hnae3_handle *handle = &hdev->vport->nic; 11925 struct hclge_vport *vport; 11926 int ret; 11927 int vf; 11928 11929 /* resume the vf max_tx_rate after reset */ 11930 for (vf = 0; vf < pci_num_vf(hdev->pdev); vf++) { 11931 vport = hclge_get_vf_vport(hdev, vf); 11932 if (!vport) 11933 return -EINVAL; 11934 11935 /* zero means max rate, after reset, firmware already set it to 11936 * max rate, so just continue. 11937 */ 11938 if (!vport->vf_info.max_tx_rate) 11939 continue; 11940 11941 ret = hclge_set_vf_rate(handle, vf, 0, 11942 vport->vf_info.max_tx_rate, true); 11943 if (ret) { 11944 dev_err(&hdev->pdev->dev, 11945 "vf%d failed to resume tx_rate:%u, ret=%d\n", 11946 vf, vport->vf_info.max_tx_rate, ret); 11947 return ret; 11948 } 11949 } 11950 11951 return 0; 11952 } 11953 11954 static void hclge_reset_vport_state(struct hclge_dev *hdev) 11955 { 11956 struct hclge_vport *vport = hdev->vport; 11957 int i; 11958 11959 for (i = 0; i < hdev->num_alloc_vport; i++) { 11960 hclge_vport_stop(vport); 11961 vport++; 11962 } 11963 } 11964 11965 static int hclge_reset_ae_dev(struct hnae3_ae_dev *ae_dev) 11966 { 11967 struct hclge_dev *hdev = ae_dev->priv; 11968 struct pci_dev *pdev = ae_dev->pdev; 11969 int ret; 11970 11971 set_bit(HCLGE_STATE_DOWN, &hdev->state); 11972 11973 hclge_stats_clear(hdev); 11974 /* NOTE: pf reset needn't to clear or restore pf and vf table entry. 11975 * so here should not clean table in memory. 11976 */ 11977 if (hdev->reset_type == HNAE3_IMP_RESET || 11978 hdev->reset_type == HNAE3_GLOBAL_RESET) { 11979 memset(hdev->vlan_table, 0, sizeof(hdev->vlan_table)); 11980 memset(hdev->vf_vlan_full, 0, sizeof(hdev->vf_vlan_full)); 11981 bitmap_set(hdev->vport_config_block, 0, hdev->num_alloc_vport); 11982 hclge_reset_umv_space(hdev); 11983 } 11984 11985 ret = hclge_cmd_init(hdev); 11986 if (ret) { 11987 dev_err(&pdev->dev, "Cmd queue init failed\n"); 11988 return ret; 11989 } 11990 11991 ret = hclge_map_tqp(hdev); 11992 if (ret) { 11993 dev_err(&pdev->dev, "Map tqp error, ret = %d.\n", ret); 11994 return ret; 11995 } 11996 11997 ret = hclge_mac_init(hdev); 11998 if (ret) { 11999 dev_err(&pdev->dev, "Mac init error, ret = %d\n", ret); 12000 return ret; 12001 } 12002 12003 ret = hclge_tp_port_init(hdev); 12004 if (ret) { 12005 dev_err(&pdev->dev, "failed to init tp port, ret = %d\n", 12006 ret); 12007 return ret; 12008 } 12009 12010 ret = hclge_config_tso(hdev, HCLGE_TSO_MSS_MIN, HCLGE_TSO_MSS_MAX); 12011 if (ret) { 12012 dev_err(&pdev->dev, "Enable tso fail, ret =%d\n", ret); 12013 return ret; 12014 } 12015 12016 ret = hclge_config_gro(hdev); 12017 if (ret) 12018 return ret; 12019 12020 ret = hclge_init_vlan_config(hdev); 12021 if (ret) { 12022 dev_err(&pdev->dev, "VLAN init fail, ret =%d\n", ret); 12023 return ret; 12024 } 12025 12026 ret = hclge_tm_init_hw(hdev, true); 12027 if (ret) { 12028 dev_err(&pdev->dev, "tm init hw fail, ret =%d\n", ret); 12029 return ret; 12030 } 12031 12032 ret = hclge_rss_init_hw(hdev); 12033 if (ret) { 12034 dev_err(&pdev->dev, "Rss init fail, ret =%d\n", ret); 12035 return ret; 12036 } 12037 12038 ret = init_mgr_tbl(hdev); 12039 if (ret) { 12040 dev_err(&pdev->dev, 12041 "failed to reinit manager table, ret = %d\n", ret); 12042 return ret; 12043 } 12044 12045 ret = hclge_init_fd_config(hdev); 12046 if (ret) { 12047 dev_err(&pdev->dev, "fd table init fail, ret=%d\n", ret); 12048 return ret; 12049 } 12050 12051 ret = hclge_ptp_init(hdev); 12052 if (ret) 12053 return ret; 12054 12055 /* Log and clear the hw errors those already occurred */ 12056 if (hnae3_dev_ras_imp_supported(hdev)) 12057 hclge_handle_occurred_error(hdev); 12058 else 12059 hclge_handle_all_hns_hw_errors(ae_dev); 12060 12061 /* Re-enable the hw error interrupts because 12062 * the interrupts get disabled on global reset. 12063 */ 12064 ret = hclge_config_nic_hw_error(hdev, true); 12065 if (ret) { 12066 dev_err(&pdev->dev, 12067 "fail(%d) to re-enable NIC hw error interrupts\n", 12068 ret); 12069 return ret; 12070 } 12071 12072 if (hdev->roce_client) { 12073 ret = hclge_config_rocee_ras_interrupt(hdev, true); 12074 if (ret) { 12075 dev_err(&pdev->dev, 12076 "fail(%d) to re-enable roce ras interrupts\n", 12077 ret); 12078 return ret; 12079 } 12080 } 12081 12082 hclge_reset_vport_state(hdev); 12083 ret = hclge_reset_vport_spoofchk(hdev); 12084 if (ret) 12085 return ret; 12086 12087 ret = hclge_resume_vf_rate(hdev); 12088 if (ret) 12089 return ret; 12090 12091 hclge_init_rxd_adv_layout(hdev); 12092 12093 dev_info(&pdev->dev, "Reset done, %s driver initialization finished.\n", 12094 HCLGE_DRIVER_NAME); 12095 12096 return 0; 12097 } 12098 12099 static void hclge_uninit_ae_dev(struct hnae3_ae_dev *ae_dev) 12100 { 12101 struct hclge_dev *hdev = ae_dev->priv; 12102 struct hclge_mac *mac = &hdev->hw.mac; 12103 12104 hclge_reset_vf_rate(hdev); 12105 hclge_clear_vf_vlan(hdev); 12106 hclge_misc_affinity_teardown(hdev); 12107 hclge_state_uninit(hdev); 12108 hclge_ptp_uninit(hdev); 12109 hclge_uninit_rxd_adv_layout(hdev); 12110 hclge_uninit_mac_table(hdev); 12111 hclge_del_all_fd_entries(hdev); 12112 12113 if (mac->phydev) 12114 mdiobus_unregister(mac->mdio_bus); 12115 12116 /* Disable MISC vector(vector0) */ 12117 hclge_enable_vector(&hdev->misc_vector, false); 12118 synchronize_irq(hdev->misc_vector.vector_irq); 12119 12120 /* Disable all hw interrupts */ 12121 hclge_config_mac_tnl_int(hdev, false); 12122 hclge_config_nic_hw_error(hdev, false); 12123 hclge_config_rocee_ras_interrupt(hdev, false); 12124 12125 hclge_cmd_uninit(hdev); 12126 hclge_misc_irq_uninit(hdev); 12127 hclge_devlink_uninit(hdev); 12128 hclge_pci_uninit(hdev); 12129 mutex_destroy(&hdev->vport_lock); 12130 hclge_uninit_vport_vlan_table(hdev); 12131 ae_dev->priv = NULL; 12132 } 12133 12134 static u32 hclge_get_max_channels(struct hnae3_handle *handle) 12135 { 12136 struct hclge_vport *vport = hclge_get_vport(handle); 12137 struct hclge_dev *hdev = vport->back; 12138 12139 return min_t(u32, hdev->pf_rss_size_max, vport->alloc_tqps); 12140 } 12141 12142 static void hclge_get_channels(struct hnae3_handle *handle, 12143 struct ethtool_channels *ch) 12144 { 12145 ch->max_combined = hclge_get_max_channels(handle); 12146 ch->other_count = 1; 12147 ch->max_other = 1; 12148 ch->combined_count = handle->kinfo.rss_size; 12149 } 12150 12151 static void hclge_get_tqps_and_rss_info(struct hnae3_handle *handle, 12152 u16 *alloc_tqps, u16 *max_rss_size) 12153 { 12154 struct hclge_vport *vport = hclge_get_vport(handle); 12155 struct hclge_dev *hdev = vport->back; 12156 12157 *alloc_tqps = vport->alloc_tqps; 12158 *max_rss_size = hdev->pf_rss_size_max; 12159 } 12160 12161 static int hclge_set_channels(struct hnae3_handle *handle, u32 new_tqps_num, 12162 bool rxfh_configured) 12163 { 12164 struct hnae3_ae_dev *ae_dev = pci_get_drvdata(handle->pdev); 12165 struct hclge_vport *vport = hclge_get_vport(handle); 12166 struct hnae3_knic_private_info *kinfo = &vport->nic.kinfo; 12167 u16 tc_offset[HCLGE_MAX_TC_NUM] = {0}; 12168 struct hclge_dev *hdev = vport->back; 12169 u16 tc_size[HCLGE_MAX_TC_NUM] = {0}; 12170 u16 cur_rss_size = kinfo->rss_size; 12171 u16 cur_tqps = kinfo->num_tqps; 12172 u16 tc_valid[HCLGE_MAX_TC_NUM]; 12173 u16 roundup_size; 12174 u32 *rss_indir; 12175 unsigned int i; 12176 int ret; 12177 12178 kinfo->req_rss_size = new_tqps_num; 12179 12180 ret = hclge_tm_vport_map_update(hdev); 12181 if (ret) { 12182 dev_err(&hdev->pdev->dev, "tm vport map fail, ret =%d\n", ret); 12183 return ret; 12184 } 12185 12186 roundup_size = roundup_pow_of_two(kinfo->rss_size); 12187 roundup_size = ilog2(roundup_size); 12188 /* Set the RSS TC mode according to the new RSS size */ 12189 for (i = 0; i < HCLGE_MAX_TC_NUM; i++) { 12190 tc_valid[i] = 0; 12191 12192 if (!(hdev->hw_tc_map & BIT(i))) 12193 continue; 12194 12195 tc_valid[i] = 1; 12196 tc_size[i] = roundup_size; 12197 tc_offset[i] = kinfo->rss_size * i; 12198 } 12199 ret = hclge_set_rss_tc_mode(hdev, tc_valid, tc_size, tc_offset); 12200 if (ret) 12201 return ret; 12202 12203 /* RSS indirection table has been configured by user */ 12204 if (rxfh_configured) 12205 goto out; 12206 12207 /* Reinitializes the rss indirect table according to the new RSS size */ 12208 rss_indir = kcalloc(ae_dev->dev_specs.rss_ind_tbl_size, sizeof(u32), 12209 GFP_KERNEL); 12210 if (!rss_indir) 12211 return -ENOMEM; 12212 12213 for (i = 0; i < ae_dev->dev_specs.rss_ind_tbl_size; i++) 12214 rss_indir[i] = i % kinfo->rss_size; 12215 12216 ret = hclge_set_rss(handle, rss_indir, NULL, 0); 12217 if (ret) 12218 dev_err(&hdev->pdev->dev, "set rss indir table fail, ret=%d\n", 12219 ret); 12220 12221 kfree(rss_indir); 12222 12223 out: 12224 if (!ret) 12225 dev_info(&hdev->pdev->dev, 12226 "Channels changed, rss_size from %u to %u, tqps from %u to %u", 12227 cur_rss_size, kinfo->rss_size, 12228 cur_tqps, kinfo->rss_size * kinfo->tc_info.num_tc); 12229 12230 return ret; 12231 } 12232 12233 static int hclge_get_regs_num(struct hclge_dev *hdev, u32 *regs_num_32_bit, 12234 u32 *regs_num_64_bit) 12235 { 12236 struct hclge_desc desc; 12237 u32 total_num; 12238 int ret; 12239 12240 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_REG_NUM, true); 12241 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 12242 if (ret) { 12243 dev_err(&hdev->pdev->dev, 12244 "Query register number cmd failed, ret = %d.\n", ret); 12245 return ret; 12246 } 12247 12248 *regs_num_32_bit = le32_to_cpu(desc.data[0]); 12249 *regs_num_64_bit = le32_to_cpu(desc.data[1]); 12250 12251 total_num = *regs_num_32_bit + *regs_num_64_bit; 12252 if (!total_num) 12253 return -EINVAL; 12254 12255 return 0; 12256 } 12257 12258 static int hclge_get_32_bit_regs(struct hclge_dev *hdev, u32 regs_num, 12259 void *data) 12260 { 12261 #define HCLGE_32_BIT_REG_RTN_DATANUM 8 12262 #define HCLGE_32_BIT_DESC_NODATA_LEN 2 12263 12264 struct hclge_desc *desc; 12265 u32 *reg_val = data; 12266 __le32 *desc_data; 12267 int nodata_num; 12268 int cmd_num; 12269 int i, k, n; 12270 int ret; 12271 12272 if (regs_num == 0) 12273 return 0; 12274 12275 nodata_num = HCLGE_32_BIT_DESC_NODATA_LEN; 12276 cmd_num = DIV_ROUND_UP(regs_num + nodata_num, 12277 HCLGE_32_BIT_REG_RTN_DATANUM); 12278 desc = kcalloc(cmd_num, sizeof(struct hclge_desc), GFP_KERNEL); 12279 if (!desc) 12280 return -ENOMEM; 12281 12282 hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_QUERY_32_BIT_REG, true); 12283 ret = hclge_cmd_send(&hdev->hw, desc, cmd_num); 12284 if (ret) { 12285 dev_err(&hdev->pdev->dev, 12286 "Query 32 bit register cmd failed, ret = %d.\n", ret); 12287 kfree(desc); 12288 return ret; 12289 } 12290 12291 for (i = 0; i < cmd_num; i++) { 12292 if (i == 0) { 12293 desc_data = (__le32 *)(&desc[i].data[0]); 12294 n = HCLGE_32_BIT_REG_RTN_DATANUM - nodata_num; 12295 } else { 12296 desc_data = (__le32 *)(&desc[i]); 12297 n = HCLGE_32_BIT_REG_RTN_DATANUM; 12298 } 12299 for (k = 0; k < n; k++) { 12300 *reg_val++ = le32_to_cpu(*desc_data++); 12301 12302 regs_num--; 12303 if (!regs_num) 12304 break; 12305 } 12306 } 12307 12308 kfree(desc); 12309 return 0; 12310 } 12311 12312 static int hclge_get_64_bit_regs(struct hclge_dev *hdev, u32 regs_num, 12313 void *data) 12314 { 12315 #define HCLGE_64_BIT_REG_RTN_DATANUM 4 12316 #define HCLGE_64_BIT_DESC_NODATA_LEN 1 12317 12318 struct hclge_desc *desc; 12319 u64 *reg_val = data; 12320 __le64 *desc_data; 12321 int nodata_len; 12322 int cmd_num; 12323 int i, k, n; 12324 int ret; 12325 12326 if (regs_num == 0) 12327 return 0; 12328 12329 nodata_len = HCLGE_64_BIT_DESC_NODATA_LEN; 12330 cmd_num = DIV_ROUND_UP(regs_num + nodata_len, 12331 HCLGE_64_BIT_REG_RTN_DATANUM); 12332 desc = kcalloc(cmd_num, sizeof(struct hclge_desc), GFP_KERNEL); 12333 if (!desc) 12334 return -ENOMEM; 12335 12336 hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_QUERY_64_BIT_REG, true); 12337 ret = hclge_cmd_send(&hdev->hw, desc, cmd_num); 12338 if (ret) { 12339 dev_err(&hdev->pdev->dev, 12340 "Query 64 bit register cmd failed, ret = %d.\n", ret); 12341 kfree(desc); 12342 return ret; 12343 } 12344 12345 for (i = 0; i < cmd_num; i++) { 12346 if (i == 0) { 12347 desc_data = (__le64 *)(&desc[i].data[0]); 12348 n = HCLGE_64_BIT_REG_RTN_DATANUM - nodata_len; 12349 } else { 12350 desc_data = (__le64 *)(&desc[i]); 12351 n = HCLGE_64_BIT_REG_RTN_DATANUM; 12352 } 12353 for (k = 0; k < n; k++) { 12354 *reg_val++ = le64_to_cpu(*desc_data++); 12355 12356 regs_num--; 12357 if (!regs_num) 12358 break; 12359 } 12360 } 12361 12362 kfree(desc); 12363 return 0; 12364 } 12365 12366 #define MAX_SEPARATE_NUM 4 12367 #define SEPARATOR_VALUE 0xFDFCFBFA 12368 #define REG_NUM_PER_LINE 4 12369 #define REG_LEN_PER_LINE (REG_NUM_PER_LINE * sizeof(u32)) 12370 #define REG_SEPARATOR_LINE 1 12371 #define REG_NUM_REMAIN_MASK 3 12372 12373 int hclge_query_bd_num_cmd_send(struct hclge_dev *hdev, struct hclge_desc *desc) 12374 { 12375 int i; 12376 12377 /* initialize command BD except the last one */ 12378 for (i = 0; i < HCLGE_GET_DFX_REG_TYPE_CNT - 1; i++) { 12379 hclge_cmd_setup_basic_desc(&desc[i], HCLGE_OPC_DFX_BD_NUM, 12380 true); 12381 desc[i].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT); 12382 } 12383 12384 /* initialize the last command BD */ 12385 hclge_cmd_setup_basic_desc(&desc[i], HCLGE_OPC_DFX_BD_NUM, true); 12386 12387 return hclge_cmd_send(&hdev->hw, desc, HCLGE_GET_DFX_REG_TYPE_CNT); 12388 } 12389 12390 static int hclge_get_dfx_reg_bd_num(struct hclge_dev *hdev, 12391 int *bd_num_list, 12392 u32 type_num) 12393 { 12394 u32 entries_per_desc, desc_index, index, offset, i; 12395 struct hclge_desc desc[HCLGE_GET_DFX_REG_TYPE_CNT]; 12396 int ret; 12397 12398 ret = hclge_query_bd_num_cmd_send(hdev, desc); 12399 if (ret) { 12400 dev_err(&hdev->pdev->dev, 12401 "Get dfx bd num fail, status is %d.\n", ret); 12402 return ret; 12403 } 12404 12405 entries_per_desc = ARRAY_SIZE(desc[0].data); 12406 for (i = 0; i < type_num; i++) { 12407 offset = hclge_dfx_bd_offset_list[i]; 12408 index = offset % entries_per_desc; 12409 desc_index = offset / entries_per_desc; 12410 bd_num_list[i] = le32_to_cpu(desc[desc_index].data[index]); 12411 } 12412 12413 return ret; 12414 } 12415 12416 static int hclge_dfx_reg_cmd_send(struct hclge_dev *hdev, 12417 struct hclge_desc *desc_src, int bd_num, 12418 enum hclge_opcode_type cmd) 12419 { 12420 struct hclge_desc *desc = desc_src; 12421 int i, ret; 12422 12423 hclge_cmd_setup_basic_desc(desc, cmd, true); 12424 for (i = 0; i < bd_num - 1; i++) { 12425 desc->flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT); 12426 desc++; 12427 hclge_cmd_setup_basic_desc(desc, cmd, true); 12428 } 12429 12430 desc = desc_src; 12431 ret = hclge_cmd_send(&hdev->hw, desc, bd_num); 12432 if (ret) 12433 dev_err(&hdev->pdev->dev, 12434 "Query dfx reg cmd(0x%x) send fail, status is %d.\n", 12435 cmd, ret); 12436 12437 return ret; 12438 } 12439 12440 static int hclge_dfx_reg_fetch_data(struct hclge_desc *desc_src, int bd_num, 12441 void *data) 12442 { 12443 int entries_per_desc, reg_num, separator_num, desc_index, index, i; 12444 struct hclge_desc *desc = desc_src; 12445 u32 *reg = data; 12446 12447 entries_per_desc = ARRAY_SIZE(desc->data); 12448 reg_num = entries_per_desc * bd_num; 12449 separator_num = REG_NUM_PER_LINE - (reg_num & REG_NUM_REMAIN_MASK); 12450 for (i = 0; i < reg_num; i++) { 12451 index = i % entries_per_desc; 12452 desc_index = i / entries_per_desc; 12453 *reg++ = le32_to_cpu(desc[desc_index].data[index]); 12454 } 12455 for (i = 0; i < separator_num; i++) 12456 *reg++ = SEPARATOR_VALUE; 12457 12458 return reg_num + separator_num; 12459 } 12460 12461 static int hclge_get_dfx_reg_len(struct hclge_dev *hdev, int *len) 12462 { 12463 u32 dfx_reg_type_num = ARRAY_SIZE(hclge_dfx_bd_offset_list); 12464 int data_len_per_desc, bd_num, i; 12465 int *bd_num_list; 12466 u32 data_len; 12467 int ret; 12468 12469 bd_num_list = kcalloc(dfx_reg_type_num, sizeof(int), GFP_KERNEL); 12470 if (!bd_num_list) 12471 return -ENOMEM; 12472 12473 ret = hclge_get_dfx_reg_bd_num(hdev, bd_num_list, dfx_reg_type_num); 12474 if (ret) { 12475 dev_err(&hdev->pdev->dev, 12476 "Get dfx reg bd num fail, status is %d.\n", ret); 12477 goto out; 12478 } 12479 12480 data_len_per_desc = sizeof_field(struct hclge_desc, data); 12481 *len = 0; 12482 for (i = 0; i < dfx_reg_type_num; i++) { 12483 bd_num = bd_num_list[i]; 12484 data_len = data_len_per_desc * bd_num; 12485 *len += (data_len / REG_LEN_PER_LINE + 1) * REG_LEN_PER_LINE; 12486 } 12487 12488 out: 12489 kfree(bd_num_list); 12490 return ret; 12491 } 12492 12493 static int hclge_get_dfx_reg(struct hclge_dev *hdev, void *data) 12494 { 12495 u32 dfx_reg_type_num = ARRAY_SIZE(hclge_dfx_bd_offset_list); 12496 int bd_num, bd_num_max, buf_len, i; 12497 struct hclge_desc *desc_src; 12498 int *bd_num_list; 12499 u32 *reg = data; 12500 int ret; 12501 12502 bd_num_list = kcalloc(dfx_reg_type_num, sizeof(int), GFP_KERNEL); 12503 if (!bd_num_list) 12504 return -ENOMEM; 12505 12506 ret = hclge_get_dfx_reg_bd_num(hdev, bd_num_list, dfx_reg_type_num); 12507 if (ret) { 12508 dev_err(&hdev->pdev->dev, 12509 "Get dfx reg bd num fail, status is %d.\n", ret); 12510 goto out; 12511 } 12512 12513 bd_num_max = bd_num_list[0]; 12514 for (i = 1; i < dfx_reg_type_num; i++) 12515 bd_num_max = max_t(int, bd_num_max, bd_num_list[i]); 12516 12517 buf_len = sizeof(*desc_src) * bd_num_max; 12518 desc_src = kzalloc(buf_len, GFP_KERNEL); 12519 if (!desc_src) { 12520 ret = -ENOMEM; 12521 goto out; 12522 } 12523 12524 for (i = 0; i < dfx_reg_type_num; i++) { 12525 bd_num = bd_num_list[i]; 12526 ret = hclge_dfx_reg_cmd_send(hdev, desc_src, bd_num, 12527 hclge_dfx_reg_opcode_list[i]); 12528 if (ret) { 12529 dev_err(&hdev->pdev->dev, 12530 "Get dfx reg fail, status is %d.\n", ret); 12531 break; 12532 } 12533 12534 reg += hclge_dfx_reg_fetch_data(desc_src, bd_num, reg); 12535 } 12536 12537 kfree(desc_src); 12538 out: 12539 kfree(bd_num_list); 12540 return ret; 12541 } 12542 12543 static int hclge_fetch_pf_reg(struct hclge_dev *hdev, void *data, 12544 struct hnae3_knic_private_info *kinfo) 12545 { 12546 #define HCLGE_RING_REG_OFFSET 0x200 12547 #define HCLGE_RING_INT_REG_OFFSET 0x4 12548 12549 int i, j, reg_num, separator_num; 12550 int data_num_sum; 12551 u32 *reg = data; 12552 12553 /* fetching per-PF registers valus from PF PCIe register space */ 12554 reg_num = ARRAY_SIZE(cmdq_reg_addr_list); 12555 separator_num = MAX_SEPARATE_NUM - (reg_num & REG_NUM_REMAIN_MASK); 12556 for (i = 0; i < reg_num; i++) 12557 *reg++ = hclge_read_dev(&hdev->hw, cmdq_reg_addr_list[i]); 12558 for (i = 0; i < separator_num; i++) 12559 *reg++ = SEPARATOR_VALUE; 12560 data_num_sum = reg_num + separator_num; 12561 12562 reg_num = ARRAY_SIZE(common_reg_addr_list); 12563 separator_num = MAX_SEPARATE_NUM - (reg_num & REG_NUM_REMAIN_MASK); 12564 for (i = 0; i < reg_num; i++) 12565 *reg++ = hclge_read_dev(&hdev->hw, common_reg_addr_list[i]); 12566 for (i = 0; i < separator_num; i++) 12567 *reg++ = SEPARATOR_VALUE; 12568 data_num_sum += reg_num + separator_num; 12569 12570 reg_num = ARRAY_SIZE(ring_reg_addr_list); 12571 separator_num = MAX_SEPARATE_NUM - (reg_num & REG_NUM_REMAIN_MASK); 12572 for (j = 0; j < kinfo->num_tqps; j++) { 12573 for (i = 0; i < reg_num; i++) 12574 *reg++ = hclge_read_dev(&hdev->hw, 12575 ring_reg_addr_list[i] + 12576 HCLGE_RING_REG_OFFSET * j); 12577 for (i = 0; i < separator_num; i++) 12578 *reg++ = SEPARATOR_VALUE; 12579 } 12580 data_num_sum += (reg_num + separator_num) * kinfo->num_tqps; 12581 12582 reg_num = ARRAY_SIZE(tqp_intr_reg_addr_list); 12583 separator_num = MAX_SEPARATE_NUM - (reg_num & REG_NUM_REMAIN_MASK); 12584 for (j = 0; j < hdev->num_msi_used - 1; j++) { 12585 for (i = 0; i < reg_num; i++) 12586 *reg++ = hclge_read_dev(&hdev->hw, 12587 tqp_intr_reg_addr_list[i] + 12588 HCLGE_RING_INT_REG_OFFSET * j); 12589 for (i = 0; i < separator_num; i++) 12590 *reg++ = SEPARATOR_VALUE; 12591 } 12592 data_num_sum += (reg_num + separator_num) * (hdev->num_msi_used - 1); 12593 12594 return data_num_sum; 12595 } 12596 12597 static int hclge_get_regs_len(struct hnae3_handle *handle) 12598 { 12599 int cmdq_lines, common_lines, ring_lines, tqp_intr_lines; 12600 struct hnae3_knic_private_info *kinfo = &handle->kinfo; 12601 struct hclge_vport *vport = hclge_get_vport(handle); 12602 struct hclge_dev *hdev = vport->back; 12603 int regs_num_32_bit, regs_num_64_bit, dfx_regs_len; 12604 int regs_lines_32_bit, regs_lines_64_bit; 12605 int ret; 12606 12607 ret = hclge_get_regs_num(hdev, ®s_num_32_bit, ®s_num_64_bit); 12608 if (ret) { 12609 dev_err(&hdev->pdev->dev, 12610 "Get register number failed, ret = %d.\n", ret); 12611 return ret; 12612 } 12613 12614 ret = hclge_get_dfx_reg_len(hdev, &dfx_regs_len); 12615 if (ret) { 12616 dev_err(&hdev->pdev->dev, 12617 "Get dfx reg len failed, ret = %d.\n", ret); 12618 return ret; 12619 } 12620 12621 cmdq_lines = sizeof(cmdq_reg_addr_list) / REG_LEN_PER_LINE + 12622 REG_SEPARATOR_LINE; 12623 common_lines = sizeof(common_reg_addr_list) / REG_LEN_PER_LINE + 12624 REG_SEPARATOR_LINE; 12625 ring_lines = sizeof(ring_reg_addr_list) / REG_LEN_PER_LINE + 12626 REG_SEPARATOR_LINE; 12627 tqp_intr_lines = sizeof(tqp_intr_reg_addr_list) / REG_LEN_PER_LINE + 12628 REG_SEPARATOR_LINE; 12629 regs_lines_32_bit = regs_num_32_bit * sizeof(u32) / REG_LEN_PER_LINE + 12630 REG_SEPARATOR_LINE; 12631 regs_lines_64_bit = regs_num_64_bit * sizeof(u64) / REG_LEN_PER_LINE + 12632 REG_SEPARATOR_LINE; 12633 12634 return (cmdq_lines + common_lines + ring_lines * kinfo->num_tqps + 12635 tqp_intr_lines * (hdev->num_msi_used - 1) + regs_lines_32_bit + 12636 regs_lines_64_bit) * REG_LEN_PER_LINE + dfx_regs_len; 12637 } 12638 12639 static void hclge_get_regs(struct hnae3_handle *handle, u32 *version, 12640 void *data) 12641 { 12642 struct hnae3_knic_private_info *kinfo = &handle->kinfo; 12643 struct hclge_vport *vport = hclge_get_vport(handle); 12644 struct hclge_dev *hdev = vport->back; 12645 u32 regs_num_32_bit, regs_num_64_bit; 12646 int i, reg_num, separator_num, ret; 12647 u32 *reg = data; 12648 12649 *version = hdev->fw_version; 12650 12651 ret = hclge_get_regs_num(hdev, ®s_num_32_bit, ®s_num_64_bit); 12652 if (ret) { 12653 dev_err(&hdev->pdev->dev, 12654 "Get register number failed, ret = %d.\n", ret); 12655 return; 12656 } 12657 12658 reg += hclge_fetch_pf_reg(hdev, reg, kinfo); 12659 12660 ret = hclge_get_32_bit_regs(hdev, regs_num_32_bit, reg); 12661 if (ret) { 12662 dev_err(&hdev->pdev->dev, 12663 "Get 32 bit register failed, ret = %d.\n", ret); 12664 return; 12665 } 12666 reg_num = regs_num_32_bit; 12667 reg += reg_num; 12668 separator_num = MAX_SEPARATE_NUM - (reg_num & REG_NUM_REMAIN_MASK); 12669 for (i = 0; i < separator_num; i++) 12670 *reg++ = SEPARATOR_VALUE; 12671 12672 ret = hclge_get_64_bit_regs(hdev, regs_num_64_bit, reg); 12673 if (ret) { 12674 dev_err(&hdev->pdev->dev, 12675 "Get 64 bit register failed, ret = %d.\n", ret); 12676 return; 12677 } 12678 reg_num = regs_num_64_bit * 2; 12679 reg += reg_num; 12680 separator_num = MAX_SEPARATE_NUM - (reg_num & REG_NUM_REMAIN_MASK); 12681 for (i = 0; i < separator_num; i++) 12682 *reg++ = SEPARATOR_VALUE; 12683 12684 ret = hclge_get_dfx_reg(hdev, reg); 12685 if (ret) 12686 dev_err(&hdev->pdev->dev, 12687 "Get dfx register failed, ret = %d.\n", ret); 12688 } 12689 12690 static int hclge_set_led_status(struct hclge_dev *hdev, u8 locate_led_status) 12691 { 12692 struct hclge_set_led_state_cmd *req; 12693 struct hclge_desc desc; 12694 int ret; 12695 12696 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_LED_STATUS_CFG, false); 12697 12698 req = (struct hclge_set_led_state_cmd *)desc.data; 12699 hnae3_set_field(req->locate_led_config, HCLGE_LED_LOCATE_STATE_M, 12700 HCLGE_LED_LOCATE_STATE_S, locate_led_status); 12701 12702 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 12703 if (ret) 12704 dev_err(&hdev->pdev->dev, 12705 "Send set led state cmd error, ret =%d\n", ret); 12706 12707 return ret; 12708 } 12709 12710 enum hclge_led_status { 12711 HCLGE_LED_OFF, 12712 HCLGE_LED_ON, 12713 HCLGE_LED_NO_CHANGE = 0xFF, 12714 }; 12715 12716 static int hclge_set_led_id(struct hnae3_handle *handle, 12717 enum ethtool_phys_id_state status) 12718 { 12719 struct hclge_vport *vport = hclge_get_vport(handle); 12720 struct hclge_dev *hdev = vport->back; 12721 12722 switch (status) { 12723 case ETHTOOL_ID_ACTIVE: 12724 return hclge_set_led_status(hdev, HCLGE_LED_ON); 12725 case ETHTOOL_ID_INACTIVE: 12726 return hclge_set_led_status(hdev, HCLGE_LED_OFF); 12727 default: 12728 return -EINVAL; 12729 } 12730 } 12731 12732 static void hclge_get_link_mode(struct hnae3_handle *handle, 12733 unsigned long *supported, 12734 unsigned long *advertising) 12735 { 12736 unsigned int size = BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS); 12737 struct hclge_vport *vport = hclge_get_vport(handle); 12738 struct hclge_dev *hdev = vport->back; 12739 unsigned int idx = 0; 12740 12741 for (; idx < size; idx++) { 12742 supported[idx] = hdev->hw.mac.supported[idx]; 12743 advertising[idx] = hdev->hw.mac.advertising[idx]; 12744 } 12745 } 12746 12747 static int hclge_gro_en(struct hnae3_handle *handle, bool enable) 12748 { 12749 struct hclge_vport *vport = hclge_get_vport(handle); 12750 struct hclge_dev *hdev = vport->back; 12751 bool gro_en_old = hdev->gro_en; 12752 int ret; 12753 12754 hdev->gro_en = enable; 12755 ret = hclge_config_gro(hdev); 12756 if (ret) 12757 hdev->gro_en = gro_en_old; 12758 12759 return ret; 12760 } 12761 12762 static void hclge_sync_promisc_mode(struct hclge_dev *hdev) 12763 { 12764 struct hclge_vport *vport = &hdev->vport[0]; 12765 struct hnae3_handle *handle = &vport->nic; 12766 u8 tmp_flags; 12767 int ret; 12768 u16 i; 12769 12770 if (vport->last_promisc_flags != vport->overflow_promisc_flags) { 12771 set_bit(HCLGE_VPORT_STATE_PROMISC_CHANGE, &vport->state); 12772 vport->last_promisc_flags = vport->overflow_promisc_flags; 12773 } 12774 12775 if (test_bit(HCLGE_VPORT_STATE_PROMISC_CHANGE, &vport->state)) { 12776 tmp_flags = handle->netdev_flags | vport->last_promisc_flags; 12777 ret = hclge_set_promisc_mode(handle, tmp_flags & HNAE3_UPE, 12778 tmp_flags & HNAE3_MPE); 12779 if (!ret) { 12780 clear_bit(HCLGE_VPORT_STATE_PROMISC_CHANGE, 12781 &vport->state); 12782 set_bit(HCLGE_VPORT_STATE_VLAN_FLTR_CHANGE, 12783 &vport->state); 12784 } 12785 } 12786 12787 for (i = 1; i < hdev->num_alloc_vport; i++) { 12788 bool uc_en = false; 12789 bool mc_en = false; 12790 bool bc_en; 12791 12792 vport = &hdev->vport[i]; 12793 12794 if (!test_and_clear_bit(HCLGE_VPORT_STATE_PROMISC_CHANGE, 12795 &vport->state)) 12796 continue; 12797 12798 if (vport->vf_info.trusted) { 12799 uc_en = vport->vf_info.request_uc_en > 0 || 12800 vport->overflow_promisc_flags & 12801 HNAE3_OVERFLOW_UPE; 12802 mc_en = vport->vf_info.request_mc_en > 0 || 12803 vport->overflow_promisc_flags & 12804 HNAE3_OVERFLOW_MPE; 12805 } 12806 bc_en = vport->vf_info.request_bc_en > 0; 12807 12808 ret = hclge_cmd_set_promisc_mode(hdev, vport->vport_id, uc_en, 12809 mc_en, bc_en); 12810 if (ret) { 12811 set_bit(HCLGE_VPORT_STATE_PROMISC_CHANGE, 12812 &vport->state); 12813 return; 12814 } 12815 hclge_set_vport_vlan_fltr_change(vport); 12816 } 12817 } 12818 12819 static bool hclge_module_existed(struct hclge_dev *hdev) 12820 { 12821 struct hclge_desc desc; 12822 u32 existed; 12823 int ret; 12824 12825 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_GET_SFP_EXIST, true); 12826 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 12827 if (ret) { 12828 dev_err(&hdev->pdev->dev, 12829 "failed to get SFP exist state, ret = %d\n", ret); 12830 return false; 12831 } 12832 12833 existed = le32_to_cpu(desc.data[0]); 12834 12835 return existed != 0; 12836 } 12837 12838 /* need 6 bds(total 140 bytes) in one reading 12839 * return the number of bytes actually read, 0 means read failed. 12840 */ 12841 static u16 hclge_get_sfp_eeprom_info(struct hclge_dev *hdev, u32 offset, 12842 u32 len, u8 *data) 12843 { 12844 struct hclge_desc desc[HCLGE_SFP_INFO_CMD_NUM]; 12845 struct hclge_sfp_info_bd0_cmd *sfp_info_bd0; 12846 u16 read_len; 12847 u16 copy_len; 12848 int ret; 12849 int i; 12850 12851 /* setup all 6 bds to read module eeprom info. */ 12852 for (i = 0; i < HCLGE_SFP_INFO_CMD_NUM; i++) { 12853 hclge_cmd_setup_basic_desc(&desc[i], HCLGE_OPC_GET_SFP_EEPROM, 12854 true); 12855 12856 /* bd0~bd4 need next flag */ 12857 if (i < HCLGE_SFP_INFO_CMD_NUM - 1) 12858 desc[i].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT); 12859 } 12860 12861 /* setup bd0, this bd contains offset and read length. */ 12862 sfp_info_bd0 = (struct hclge_sfp_info_bd0_cmd *)desc[0].data; 12863 sfp_info_bd0->offset = cpu_to_le16((u16)offset); 12864 read_len = min_t(u16, len, HCLGE_SFP_INFO_MAX_LEN); 12865 sfp_info_bd0->read_len = cpu_to_le16(read_len); 12866 12867 ret = hclge_cmd_send(&hdev->hw, desc, i); 12868 if (ret) { 12869 dev_err(&hdev->pdev->dev, 12870 "failed to get SFP eeprom info, ret = %d\n", ret); 12871 return 0; 12872 } 12873 12874 /* copy sfp info from bd0 to out buffer. */ 12875 copy_len = min_t(u16, len, HCLGE_SFP_INFO_BD0_LEN); 12876 memcpy(data, sfp_info_bd0->data, copy_len); 12877 read_len = copy_len; 12878 12879 /* copy sfp info from bd1~bd5 to out buffer if needed. */ 12880 for (i = 1; i < HCLGE_SFP_INFO_CMD_NUM; i++) { 12881 if (read_len >= len) 12882 return read_len; 12883 12884 copy_len = min_t(u16, len - read_len, HCLGE_SFP_INFO_BDX_LEN); 12885 memcpy(data + read_len, desc[i].data, copy_len); 12886 read_len += copy_len; 12887 } 12888 12889 return read_len; 12890 } 12891 12892 static int hclge_get_module_eeprom(struct hnae3_handle *handle, u32 offset, 12893 u32 len, u8 *data) 12894 { 12895 struct hclge_vport *vport = hclge_get_vport(handle); 12896 struct hclge_dev *hdev = vport->back; 12897 u32 read_len = 0; 12898 u16 data_len; 12899 12900 if (hdev->hw.mac.media_type != HNAE3_MEDIA_TYPE_FIBER) 12901 return -EOPNOTSUPP; 12902 12903 if (!hclge_module_existed(hdev)) 12904 return -ENXIO; 12905 12906 while (read_len < len) { 12907 data_len = hclge_get_sfp_eeprom_info(hdev, 12908 offset + read_len, 12909 len - read_len, 12910 data + read_len); 12911 if (!data_len) 12912 return -EIO; 12913 12914 read_len += data_len; 12915 } 12916 12917 return 0; 12918 } 12919 12920 static int hclge_get_link_diagnosis_info(struct hnae3_handle *handle, 12921 u32 *status_code) 12922 { 12923 struct hclge_vport *vport = hclge_get_vport(handle); 12924 struct hclge_dev *hdev = vport->back; 12925 struct hclge_desc desc; 12926 int ret; 12927 12928 if (hdev->ae_dev->dev_version <= HNAE3_DEVICE_VERSION_V2) 12929 return -EOPNOTSUPP; 12930 12931 hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_LINK_DIAGNOSIS, true); 12932 ret = hclge_cmd_send(&hdev->hw, &desc, 1); 12933 if (ret) { 12934 dev_err(&hdev->pdev->dev, 12935 "failed to query link diagnosis info, ret = %d\n", ret); 12936 return ret; 12937 } 12938 12939 *status_code = le32_to_cpu(desc.data[0]); 12940 return 0; 12941 } 12942 12943 static const struct hnae3_ae_ops hclge_ops = { 12944 .init_ae_dev = hclge_init_ae_dev, 12945 .uninit_ae_dev = hclge_uninit_ae_dev, 12946 .reset_prepare = hclge_reset_prepare_general, 12947 .reset_done = hclge_reset_done, 12948 .init_client_instance = hclge_init_client_instance, 12949 .uninit_client_instance = hclge_uninit_client_instance, 12950 .map_ring_to_vector = hclge_map_ring_to_vector, 12951 .unmap_ring_from_vector = hclge_unmap_ring_frm_vector, 12952 .get_vector = hclge_get_vector, 12953 .put_vector = hclge_put_vector, 12954 .set_promisc_mode = hclge_set_promisc_mode, 12955 .request_update_promisc_mode = hclge_request_update_promisc_mode, 12956 .set_loopback = hclge_set_loopback, 12957 .start = hclge_ae_start, 12958 .stop = hclge_ae_stop, 12959 .client_start = hclge_client_start, 12960 .client_stop = hclge_client_stop, 12961 .get_status = hclge_get_status, 12962 .get_ksettings_an_result = hclge_get_ksettings_an_result, 12963 .cfg_mac_speed_dup_h = hclge_cfg_mac_speed_dup_h, 12964 .get_media_type = hclge_get_media_type, 12965 .check_port_speed = hclge_check_port_speed, 12966 .get_fec = hclge_get_fec, 12967 .set_fec = hclge_set_fec, 12968 .get_rss_key_size = hclge_get_rss_key_size, 12969 .get_rss = hclge_get_rss, 12970 .set_rss = hclge_set_rss, 12971 .set_rss_tuple = hclge_set_rss_tuple, 12972 .get_rss_tuple = hclge_get_rss_tuple, 12973 .get_tc_size = hclge_get_tc_size, 12974 .get_mac_addr = hclge_get_mac_addr, 12975 .set_mac_addr = hclge_set_mac_addr, 12976 .do_ioctl = hclge_do_ioctl, 12977 .add_uc_addr = hclge_add_uc_addr, 12978 .rm_uc_addr = hclge_rm_uc_addr, 12979 .add_mc_addr = hclge_add_mc_addr, 12980 .rm_mc_addr = hclge_rm_mc_addr, 12981 .set_autoneg = hclge_set_autoneg, 12982 .get_autoneg = hclge_get_autoneg, 12983 .restart_autoneg = hclge_restart_autoneg, 12984 .halt_autoneg = hclge_halt_autoneg, 12985 .get_pauseparam = hclge_get_pauseparam, 12986 .set_pauseparam = hclge_set_pauseparam, 12987 .set_mtu = hclge_set_mtu, 12988 .reset_queue = hclge_reset_tqp, 12989 .get_stats = hclge_get_stats, 12990 .get_mac_stats = hclge_get_mac_stat, 12991 .update_stats = hclge_update_stats, 12992 .get_strings = hclge_get_strings, 12993 .get_sset_count = hclge_get_sset_count, 12994 .get_fw_version = hclge_get_fw_version, 12995 .get_mdix_mode = hclge_get_mdix_mode, 12996 .enable_vlan_filter = hclge_enable_vlan_filter, 12997 .set_vlan_filter = hclge_set_vlan_filter, 12998 .set_vf_vlan_filter = hclge_set_vf_vlan_filter, 12999 .enable_hw_strip_rxvtag = hclge_en_hw_strip_rxvtag, 13000 .reset_event = hclge_reset_event, 13001 .get_reset_level = hclge_get_reset_level, 13002 .set_default_reset_request = hclge_set_def_reset_request, 13003 .get_tqps_and_rss_info = hclge_get_tqps_and_rss_info, 13004 .set_channels = hclge_set_channels, 13005 .get_channels = hclge_get_channels, 13006 .get_regs_len = hclge_get_regs_len, 13007 .get_regs = hclge_get_regs, 13008 .set_led_id = hclge_set_led_id, 13009 .get_link_mode = hclge_get_link_mode, 13010 .add_fd_entry = hclge_add_fd_entry, 13011 .del_fd_entry = hclge_del_fd_entry, 13012 .get_fd_rule_cnt = hclge_get_fd_rule_cnt, 13013 .get_fd_rule_info = hclge_get_fd_rule_info, 13014 .get_fd_all_rules = hclge_get_all_rules, 13015 .enable_fd = hclge_enable_fd, 13016 .add_arfs_entry = hclge_add_fd_entry_by_arfs, 13017 .dbg_read_cmd = hclge_dbg_read_cmd, 13018 .handle_hw_ras_error = hclge_handle_hw_ras_error, 13019 .get_hw_reset_stat = hclge_get_hw_reset_stat, 13020 .ae_dev_resetting = hclge_ae_dev_resetting, 13021 .ae_dev_reset_cnt = hclge_ae_dev_reset_cnt, 13022 .set_gro_en = hclge_gro_en, 13023 .get_global_queue_id = hclge_covert_handle_qid_global, 13024 .set_timer_task = hclge_set_timer_task, 13025 .mac_connect_phy = hclge_mac_connect_phy, 13026 .mac_disconnect_phy = hclge_mac_disconnect_phy, 13027 .get_vf_config = hclge_get_vf_config, 13028 .set_vf_link_state = hclge_set_vf_link_state, 13029 .set_vf_spoofchk = hclge_set_vf_spoofchk, 13030 .set_vf_trust = hclge_set_vf_trust, 13031 .set_vf_rate = hclge_set_vf_rate, 13032 .set_vf_mac = hclge_set_vf_mac, 13033 .get_module_eeprom = hclge_get_module_eeprom, 13034 .get_cmdq_stat = hclge_get_cmdq_stat, 13035 .add_cls_flower = hclge_add_cls_flower, 13036 .del_cls_flower = hclge_del_cls_flower, 13037 .cls_flower_active = hclge_is_cls_flower_active, 13038 .get_phy_link_ksettings = hclge_get_phy_link_ksettings, 13039 .set_phy_link_ksettings = hclge_set_phy_link_ksettings, 13040 .set_tx_hwts_info = hclge_ptp_set_tx_info, 13041 .get_rx_hwts = hclge_ptp_get_rx_hwts, 13042 .get_ts_info = hclge_ptp_get_ts_info, 13043 .get_link_diagnosis_info = hclge_get_link_diagnosis_info, 13044 }; 13045 13046 static struct hnae3_ae_algo ae_algo = { 13047 .ops = &hclge_ops, 13048 .pdev_id_table = ae_algo_pci_tbl, 13049 }; 13050 13051 static int hclge_init(void) 13052 { 13053 pr_info("%s is initializing\n", HCLGE_NAME); 13054 13055 hclge_wq = alloc_workqueue("%s", 0, 0, HCLGE_NAME); 13056 if (!hclge_wq) { 13057 pr_err("%s: failed to create workqueue\n", HCLGE_NAME); 13058 return -ENOMEM; 13059 } 13060 13061 hnae3_register_ae_algo(&ae_algo); 13062 13063 return 0; 13064 } 13065 13066 static void hclge_exit(void) 13067 { 13068 hnae3_unregister_ae_algo(&ae_algo); 13069 destroy_workqueue(hclge_wq); 13070 } 13071 module_init(hclge_init); 13072 module_exit(hclge_exit); 13073 13074 MODULE_LICENSE("GPL"); 13075 MODULE_AUTHOR("Huawei Tech. Co., Ltd."); 13076 MODULE_DESCRIPTION("HCLGE Driver"); 13077 MODULE_VERSION(HCLGE_MOD_VERSION); 13078