提交 981b7545 编写于 作者: S Shannon Nelson 提交者: Jeff Kirsher

i40e: update firmware api to 1.1

The firmware's AdminQ interface has matured a little, so update the
code to use the new fields and values.

Change-Id: I8fcd7b443f268dcf9346bd6a9e940fe9c2958891
Signed-off-by: NShannon Nelson <shannon.nelson@intel.com>
Tested-by: NKavindya Deegala <kavindya.s.deegala@intel.com>
Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
上级 42794bd8
...@@ -572,16 +572,18 @@ i40e_status i40e_init_adminq(struct i40e_hw *hw) ...@@ -572,16 +572,18 @@ i40e_status i40e_init_adminq(struct i40e_hw *hw)
if (ret_code != I40E_SUCCESS) if (ret_code != I40E_SUCCESS)
goto init_adminq_free_arq; goto init_adminq_free_arq;
if (hw->aq.api_maj_ver != I40E_FW_API_VERSION_MAJOR || /* get the NVM version info */
hw->aq.api_min_ver != I40E_FW_API_VERSION_MINOR) {
ret_code = I40E_ERR_FIRMWARE_API_VERSION;
goto init_adminq_free_arq;
}
i40e_read_nvm_word(hw, I40E_SR_NVM_IMAGE_VERSION, &hw->nvm.version); i40e_read_nvm_word(hw, I40E_SR_NVM_IMAGE_VERSION, &hw->nvm.version);
i40e_read_nvm_word(hw, I40E_SR_NVM_EETRACK_LO, &eetrack_lo); i40e_read_nvm_word(hw, I40E_SR_NVM_EETRACK_LO, &eetrack_lo);
i40e_read_nvm_word(hw, I40E_SR_NVM_EETRACK_HI, &eetrack_hi); i40e_read_nvm_word(hw, I40E_SR_NVM_EETRACK_HI, &eetrack_hi);
hw->nvm.eetrack = (eetrack_hi << 16) | eetrack_lo; hw->nvm.eetrack = (eetrack_hi << 16) | eetrack_lo;
if (hw->aq.api_maj_ver != I40E_FW_API_VERSION_MAJOR ||
hw->aq.api_min_ver > I40E_FW_API_VERSION_MINOR) {
ret_code = I40E_ERR_FIRMWARE_API_VERSION;
goto init_adminq_free_arq;
}
ret_code = i40e_aq_set_hmc_resource_profile(hw, ret_code = i40e_aq_set_hmc_resource_profile(hw,
I40E_HMC_PROFILE_DEFAULT, I40E_HMC_PROFILE_DEFAULT,
0, 0,
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
*/ */
#define I40E_FW_API_VERSION_MAJOR 0x0001 #define I40E_FW_API_VERSION_MAJOR 0x0001
#define I40E_FW_API_VERSION_MINOR 0x0000 #define I40E_FW_API_VERSION_MINOR 0x0001
struct i40e_aq_desc { struct i40e_aq_desc {
__le16 flags; __le16 flags;
...@@ -137,10 +137,13 @@ enum i40e_admin_queue_opc { ...@@ -137,10 +137,13 @@ enum i40e_admin_queue_opc {
i40e_aqc_opc_set_ns_proxy_entry = 0x0105, i40e_aqc_opc_set_ns_proxy_entry = 0x0105,
/* LAA */ /* LAA */
i40e_aqc_opc_mng_laa = 0x0106, i40e_aqc_opc_mng_laa = 0x0106, /* AQ obsolete */
i40e_aqc_opc_mac_address_read = 0x0107, i40e_aqc_opc_mac_address_read = 0x0107,
i40e_aqc_opc_mac_address_write = 0x0108, i40e_aqc_opc_mac_address_write = 0x0108,
/* PXE */
i40e_aqc_opc_clear_pxe_mode = 0x0110,
/* internal switch commands */ /* internal switch commands */
i40e_aqc_opc_get_switch_config = 0x0200, i40e_aqc_opc_get_switch_config = 0x0200,
i40e_aqc_opc_add_statistics = 0x0201, i40e_aqc_opc_add_statistics = 0x0201,
...@@ -317,13 +320,15 @@ struct i40e_aqc_get_version { ...@@ -317,13 +320,15 @@ struct i40e_aqc_get_version {
I40E_CHECK_CMD_LENGTH(i40e_aqc_get_version); I40E_CHECK_CMD_LENGTH(i40e_aqc_get_version);
/* Send driver version (direct 0x0002) */ /* Send driver version (indirect 0x0002) */
struct i40e_aqc_driver_version { struct i40e_aqc_driver_version {
u8 driver_major_ver; u8 driver_major_ver;
u8 driver_minor_ver; u8 driver_minor_ver;
u8 driver_build_ver; u8 driver_build_ver;
u8 driver_subbuild_ver; u8 driver_subbuild_ver;
u8 reserved[12]; u8 reserved[4];
__le32 address_high;
__le32 address_low;
}; };
I40E_CHECK_CMD_LENGTH(i40e_aqc_driver_version); I40E_CHECK_CMD_LENGTH(i40e_aqc_driver_version);
...@@ -479,7 +484,7 @@ struct i40e_aqc_mng_laa { ...@@ -479,7 +484,7 @@ struct i40e_aqc_mng_laa {
u8 reserved2[6]; u8 reserved2[6];
}; };
/* Manage MAC Address Read Command (0x0107) */ /* Manage MAC Address Read Command (indirect 0x0107) */
struct i40e_aqc_mac_address_read { struct i40e_aqc_mac_address_read {
__le16 command_flags; __le16 command_flags;
#define I40E_AQC_LAN_ADDR_VALID 0x10 #define I40E_AQC_LAN_ADDR_VALID 0x10
...@@ -517,6 +522,16 @@ struct i40e_aqc_mac_address_write { ...@@ -517,6 +522,16 @@ struct i40e_aqc_mac_address_write {
I40E_CHECK_CMD_LENGTH(i40e_aqc_mac_address_write); I40E_CHECK_CMD_LENGTH(i40e_aqc_mac_address_write);
/* PXE commands (0x011x) */
/* Clear PXE Command and response (direct 0x0110) */
struct i40e_aqc_clear_pxe {
u8 rx_cnt;
u8 reserved[15];
};
I40E_CHECK_CMD_LENGTH(i40e_aqc_clear_pxe);
/* Switch configuration commands (0x02xx) */ /* Switch configuration commands (0x02xx) */
/* Used by many indirect commands that only pass an seid and a buffer in the /* Used by many indirect commands that only pass an seid and a buffer in the
...@@ -639,13 +654,15 @@ struct i40e_aqc_switch_resource_alloc_element_resp { ...@@ -639,13 +654,15 @@ struct i40e_aqc_switch_resource_alloc_element_resp {
u8 reserved2[6]; u8 reserved2[6];
}; };
/* Add VSI (indirect 0x210) /* Add VSI (indirect 0x0210)
* this indirect command uses struct i40e_aqc_vsi_properties_data * this indirect command uses struct i40e_aqc_vsi_properties_data
* as the indirect buffer (128 bytes) * as the indirect buffer (128 bytes)
* *
* Update VSI (indirect 0x211) Get VSI (indirect 0x0212) * Update VSI (indirect 0x211)
* use the generic i40e_aqc_switch_seid descriptor format * uses the same data structure as Add VSI
* use the same completion and data structure as Add VSI *
* Get VSI (indirect 0x0212)
* uses the same completion and data structure as Add VSI
*/ */
struct i40e_aqc_add_get_update_vsi { struct i40e_aqc_add_get_update_vsi {
__le16 uplink_seid; __le16 uplink_seid;
...@@ -1185,27 +1202,40 @@ struct i40e_aqc_add_remove_cloud_filters_element_data { ...@@ -1185,27 +1202,40 @@ struct i40e_aqc_add_remove_cloud_filters_element_data {
#define I40E_AQC_ADD_CLOUD_FILTER_SHIFT 0 #define I40E_AQC_ADD_CLOUD_FILTER_SHIFT 0
#define I40E_AQC_ADD_CLOUD_FILTER_MASK (0x3F << \ #define I40E_AQC_ADD_CLOUD_FILTER_MASK (0x3F << \
I40E_AQC_ADD_CLOUD_FILTER_SHIFT) I40E_AQC_ADD_CLOUD_FILTER_SHIFT)
/* 0x0000 reserved */
#define I40E_AQC_ADD_CLOUD_FILTER_OIP 0x0001 #define I40E_AQC_ADD_CLOUD_FILTER_OIP 0x0001
#define I40E_AQC_ADD_CLOUD_FILTER_OIP_GRE 0x0002 /* 0x0002 reserved */
#define I40E_AQC_ADD_CLOUD_FILTER_IMAC_IVLAN 0x0003 #define I40E_AQC_ADD_CLOUD_FILTER_IMAC_IVLAN 0x0003
#define I40E_AQC_ADD_CLOUD_FILTER_IMAC_IVLAN_GRE 0x0004 #define I40E_AQC_ADD_CLOUD_FILTER_IMAC_IVLAN_TEN_ID 0x0004
/* 0x0005 reserved */
#define I40E_AQC_ADD_CLOUD_FILTER_IMAC_TEN_ID 0x0006 #define I40E_AQC_ADD_CLOUD_FILTER_IMAC_TEN_ID 0x0006
#define I40E_AQC_ADD_CLOUD_FILTER_IMAC_IVLAN_VNL 0x0007 /* 0x0007 reserved */
/* 0x0008 reserved */ /* 0x0008 reserved */
#define I40E_AQC_ADD_CLOUD_FILTER_OMAC 0x0009 #define I40E_AQC_ADD_CLOUD_FILTER_OMAC 0x0009
#define I40E_AQC_ADD_CLOUD_FILTER_IMAC 0x000A #define I40E_AQC_ADD_CLOUD_FILTER_IMAC 0x000A
#define I40E_AQC_ADD_CLOUD_FILTER_OMAC_TEN_ID_IMAC 0x000B
#define I40E_AQC_ADD_CLOUD_FILTER_IIP 0x000C
#define I40E_AQC_ADD_CLOUD_FLAGS_TO_QUEUE 0x0080 #define I40E_AQC_ADD_CLOUD_FLAGS_TO_QUEUE 0x0080
#define I40E_AQC_ADD_CLOUD_VNK_SHIFT 6 #define I40E_AQC_ADD_CLOUD_VNK_SHIFT 6
#define I40E_AQC_ADD_CLOUD_VNK_MASK 0x00C0 #define I40E_AQC_ADD_CLOUD_VNK_MASK 0x00C0
#define I40E_AQC_ADD_CLOUD_FLAGS_IPV4 0 #define I40E_AQC_ADD_CLOUD_FLAGS_IPV4 0
#define I40E_AQC_ADD_CLOUD_FLAGS_IPV6 0x0100 #define I40E_AQC_ADD_CLOUD_FLAGS_IPV6 0x0100
__le32 key_low;
__le32 key_high; #define I40E_AQC_ADD_CLOUD_TNL_TYPE_SHIFT 9
#define I40E_AQC_ADD_CLOUD_TNL_TYPE_MASK 0x1E00
#define I40E_AQC_ADD_CLOUD_TNL_TYPE_XVLAN 0
#define I40E_AQC_ADD_CLOUD_TNL_TYPE_NVGRE_OMAC 1
#define I40E_AQC_ADD_CLOUD_TNL_TYPE_NGE 2
#define I40E_AQC_ADD_CLOUD_TNL_TYPE_IP 3
__le32 tenant_id;
u8 reserved[4];
__le16 queue_number; __le16 queue_number;
#define I40E_AQC_ADD_CLOUD_QUEUE_SHIFT 0 #define I40E_AQC_ADD_CLOUD_QUEUE_SHIFT 0
#define I40E_AQC_ADD_CLOUD_QUEUE_MASK (0x3F << \ #define I40E_AQC_ADD_CLOUD_QUEUE_MASK (0x3F << \
I40E_AQC_ADD_CLOUD_QUEUE_SHIFT) I40E_AQC_ADD_CLOUD_QUEUE_SHIFT)
u8 reserved[14]; u8 reserved2[14];
/* response section */ /* response section */
u8 allocation_result; u8 allocation_result;
#define I40E_AQC_ADD_CLOUD_FILTER_SUCCESS 0x0 #define I40E_AQC_ADD_CLOUD_FILTER_SUCCESS 0x0
...@@ -1548,7 +1578,7 @@ struct i40e_aqc_module_desc { ...@@ -1548,7 +1578,7 @@ struct i40e_aqc_module_desc {
struct i40e_aq_get_phy_abilities_resp { struct i40e_aq_get_phy_abilities_resp {
__le32 phy_type; /* bitmap using the above enum for offsets */ __le32 phy_type; /* bitmap using the above enum for offsets */
u8 link_speed; /* bitmap using the above enum */ u8 link_speed; /* bitmap using the above enum bit patterns */
u8 abilities; u8 abilities;
#define I40E_AQ_PHY_FLAG_PAUSE_TX 0x01 #define I40E_AQ_PHY_FLAG_PAUSE_TX 0x01
#define I40E_AQ_PHY_FLAG_PAUSE_RX 0x02 #define I40E_AQ_PHY_FLAG_PAUSE_RX 0x02
...@@ -1582,6 +1612,10 @@ struct i40e_aq_set_phy_config { /* same bits as above in all */ ...@@ -1582,6 +1612,10 @@ struct i40e_aq_set_phy_config { /* same bits as above in all */
__le32 phy_type; __le32 phy_type;
u8 link_speed; u8 link_speed;
u8 abilities; u8 abilities;
/* bits 0-2 use the values from get_phy_abilities_resp */
#define I40E_AQ_PHY_ENABLE_LINK 0x08
#define I40E_AQ_PHY_ENABLE_AN 0x10
#define I40E_AQ_PHY_ENABLE_ATOMIC_LINK 0x20
__le16 eee_capability; __le16 eee_capability;
__le32 eeer; __le32 eeer;
u8 low_power_ctrl; u8 low_power_ctrl;
...@@ -1915,22 +1949,39 @@ I40E_CHECK_CMD_LENGTH(i40e_aqc_lldp_start); ...@@ -1915,22 +1949,39 @@ I40E_CHECK_CMD_LENGTH(i40e_aqc_lldp_start);
struct i40e_aqc_add_udp_tunnel { struct i40e_aqc_add_udp_tunnel {
__le16 udp_port; __le16 udp_port;
u8 header_len; /* in DWords, 1 to 15 */ u8 header_len; /* in DWords, 1 to 15 */
u8 protocol_index; u8 protocol_type;
#define I40E_AQC_TUNNEL_TYPE_MAC 0x0 #define I40E_AQC_TUNNEL_TYPE_TEREDO 0x0
#define I40E_AQC_TUNNEL_TYPE_UDP 0x1 #define I40E_AQC_TUNNEL_TYPE_VXLAN 0x2
#define I40E_AQC_TUNNEL_TYPE_VXLAN 0x2 #define I40E_AQC_TUNNEL_TYPE_NGE 0x3
u8 reserved[12]; u8 variable_udp_length;
#define I40E_AQC_TUNNEL_FIXED_UDP_LENGTH 0x0
#define I40E_AQC_TUNNEL_VARIABLE_UDP_LENGTH 0x1
u8 udp_key_index;
#define I40E_AQC_TUNNEL_KEY_INDEX_VXLAN 0x0
#define I40E_AQC_TUNNEL_KEY_INDEX_NGE 0x1
#define I40E_AQC_TUNNEL_KEY_INDEX_PROPRIETARY_UDP 0x2
u8 reserved[10];
}; };
I40E_CHECK_CMD_LENGTH(i40e_aqc_add_udp_tunnel); I40E_CHECK_CMD_LENGTH(i40e_aqc_add_udp_tunnel);
struct i40e_aqc_add_udp_tunnel_completion {
__le16 udp_port;
u8 filter_entry_index;
u8 multiple_pfs;
#define I40E_AQC_SINGLE_PF 0x0
#define I40E_AQC_MULTIPLE_PFS 0x1
u8 total_filters;
u8 reserved[11];
};
I40E_CHECK_CMD_LENGTH(i40e_aqc_add_udp_tunnel_completion);
/* remove UDP Tunnel command (0x0B01) */ /* remove UDP Tunnel command (0x0B01) */
struct i40e_aqc_remove_udp_tunnel { struct i40e_aqc_remove_udp_tunnel {
u8 reserved[2]; u8 reserved[2];
u8 index; /* 0 to 15 */ u8 index; /* 0 to 15 */
u8 pf_filters; u8 reserved2[13];
u8 total_filters;
u8 reserved2[11];
}; };
I40E_CHECK_CMD_LENGTH(i40e_aqc_remove_udp_tunnel); I40E_CHECK_CMD_LENGTH(i40e_aqc_remove_udp_tunnel);
...@@ -1938,28 +1989,32 @@ I40E_CHECK_CMD_LENGTH(i40e_aqc_remove_udp_tunnel); ...@@ -1938,28 +1989,32 @@ I40E_CHECK_CMD_LENGTH(i40e_aqc_remove_udp_tunnel);
struct i40e_aqc_del_udp_tunnel_completion { struct i40e_aqc_del_udp_tunnel_completion {
__le16 udp_port; __le16 udp_port;
u8 index; /* 0 to 15 */ u8 index; /* 0 to 15 */
u8 multiple_entries; u8 multiple_pfs;
u8 tunnels_used; u8 total_filters_used;
u8 reserved; u8 reserved1[11];
u8 tunnels_free;
u8 reserved1[9];
}; };
I40E_CHECK_CMD_LENGTH(i40e_aqc_del_udp_tunnel_completion); I40E_CHECK_CMD_LENGTH(i40e_aqc_del_udp_tunnel_completion);
/* tunnel key structure 0x0B10 */ /* tunnel key structure 0x0B10 */
struct i40e_aqc_tunnel_key_structure { struct i40e_aqc_tunnel_key_structure {
__le16 key1_off; u8 key1_off;
__le16 key1_len; u8 key2_off;
__le16 key2_off; u8 key1_len; /* 0 to 15 */
__le16 key2_len; u8 key2_len; /* 0 to 15 */
__le16 flags; u8 flags;
#define I40E_AQC_TUNNEL_KEY_STRUCT_OVERRIDE 0x01 #define I40E_AQC_TUNNEL_KEY_STRUCT_OVERRIDE 0x01
/* response flags */ /* response flags */
#define I40E_AQC_TUNNEL_KEY_STRUCT_SUCCESS 0x01 #define I40E_AQC_TUNNEL_KEY_STRUCT_SUCCESS 0x01
#define I40E_AQC_TUNNEL_KEY_STRUCT_MODIFIED 0x02 #define I40E_AQC_TUNNEL_KEY_STRUCT_MODIFIED 0x02
#define I40E_AQC_TUNNEL_KEY_STRUCT_OVERRIDDEN 0x03 #define I40E_AQC_TUNNEL_KEY_STRUCT_OVERRIDDEN 0x03
u8 resreved[6]; u8 network_key_index;
#define I40E_AQC_NETWORK_KEY_INDEX_VXLAN 0x0
#define I40E_AQC_NETWORK_KEY_INDEX_NGE 0x1
#define I40E_AQC_NETWORK_KEY_INDEX_FLEX_MAC_IN_UDP 0x2
#define I40E_AQC_NETWORK_KEY_INDEX_GRE 0x3
u8 reserved[10];
}; };
I40E_CHECK_CMD_LENGTH(i40e_aqc_tunnel_key_structure); I40E_CHECK_CMD_LENGTH(i40e_aqc_tunnel_key_structure);
...@@ -2053,6 +2108,7 @@ I40E_CHECK_CMD_LENGTH(i40e_aqc_debug_modify_reg); ...@@ -2053,6 +2108,7 @@ I40E_CHECK_CMD_LENGTH(i40e_aqc_debug_modify_reg);
#define I40E_AQ_CLUSTER_ID_DCB 8 #define I40E_AQ_CLUSTER_ID_DCB 8
#define I40E_AQ_CLUSTER_ID_EMP_MEM 9 #define I40E_AQ_CLUSTER_ID_EMP_MEM 9
#define I40E_AQ_CLUSTER_ID_PKT_BUF 10 #define I40E_AQ_CLUSTER_ID_PKT_BUF 10
#define I40E_AQ_CLUSTER_ID_ALTRAM 11
struct i40e_aqc_debug_dump_internals { struct i40e_aqc_debug_dump_internals {
u8 cluster_id; u8 cluster_id;
......
...@@ -1738,7 +1738,7 @@ i40e_status i40e_aq_add_udp_tunnel(struct i40e_hw *hw, ...@@ -1738,7 +1738,7 @@ i40e_status i40e_aq_add_udp_tunnel(struct i40e_hw *hw,
cmd->udp_port = cpu_to_le16(udp_port); cmd->udp_port = cpu_to_le16(udp_port);
cmd->header_len = header_len; cmd->header_len = header_len;
cmd->protocol_index = protocol_index; cmd->protocol_type = protocol_index;
status = i40e_asq_send_command(hw, &desc, NULL, 0, cmd_details); status = i40e_asq_send_command(hw, &desc, NULL, 0, cmd_details);
......
...@@ -53,9 +53,6 @@ ...@@ -53,9 +53,6 @@
(d) == I40E_QSFP_B_DEVICE_ID || \ (d) == I40E_QSFP_B_DEVICE_ID || \
(d) == I40E_QSFP_C_DEVICE_ID) (d) == I40E_QSFP_C_DEVICE_ID)
#define I40E_FW_API_VERSION_MAJOR 0x0001
#define I40E_FW_API_VERSION_MINOR 0x0000
#define I40E_MAX_VSI_QP 16 #define I40E_MAX_VSI_QP 16
#define I40E_MAX_VF_VSI 3 #define I40E_MAX_VF_VSI 3
#define I40E_MAX_CHAINED_RX_BUFFERS 5 #define I40E_MAX_CHAINED_RX_BUFFERS 5
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册