Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 981b7545 authored by Shannon Nelson's avatar Shannon Nelson Committed by Jeff Kirsher
Browse files

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: default avatarShannon Nelson <shannon.nelson@intel.com>
Tested-by: default avatarKavindya Deegala <kavindya.s.deegala@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent 42794bd8
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -572,16 +572,18 @@ i40e_status i40e_init_adminq(struct i40e_hw *hw)
	if (ret_code != I40E_SUCCESS)
		goto init_adminq_free_arq;

	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;
	}
	/* get the NVM version info */
	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_HI, &eetrack_hi);
	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,
						    I40E_HMC_PROFILE_DEFAULT,
						    0,
+91 −35
Original line number Diff line number Diff line
@@ -35,7 +35,7 @@
 */

#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 {
	__le16 flags;
@@ -137,10 +137,13 @@ enum i40e_admin_queue_opc {
	i40e_aqc_opc_set_ns_proxy_entry     = 0x0105,

	/* 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_write      = 0x0108,

	/* PXE */
	i40e_aqc_opc_clear_pxe_mode         = 0x0110,

	/* internal switch commands */
	i40e_aqc_opc_get_switch_config         = 0x0200,
	i40e_aqc_opc_add_statistics            = 0x0201,
@@ -317,13 +320,15 @@ struct 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 {
	u8     driver_major_ver;
	u8     driver_minor_ver;
	u8     driver_build_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);
@@ -479,7 +484,7 @@ struct i40e_aqc_mng_laa {
	u8     reserved2[6];
};

/* Manage MAC Address Read Command (0x0107) */
/* Manage MAC Address Read Command (indirect 0x0107) */
struct i40e_aqc_mac_address_read {
	__le16	command_flags;
#define I40E_AQC_LAN_ADDR_VALID   0x10
@@ -517,6 +522,16 @@ struct 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) */

/* 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 {
	u8     reserved2[6];
};

/* Add VSI (indirect 0x210)
/* Add VSI (indirect 0x0210)
 *    this indirect command uses struct i40e_aqc_vsi_properties_data
 *    as the indirect buffer (128 bytes)
 *
 * Update VSI (indirect 0x211) Get VSI (indirect 0x0212)
 *    use the generic i40e_aqc_switch_seid descriptor format
 *    use the same completion and data structure as Add VSI
 * Update VSI (indirect 0x211)
 *     uses the same 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 {
	__le16 uplink_seid;
@@ -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_MASK                  (0x3F << \
					I40E_AQC_ADD_CLOUD_FILTER_SHIFT)
/* 0x0000 reserved */
#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_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_IVLAN_VNL        0x0007
/* 0x0007 reserved */
/* 0x0008 reserved */
#define I40E_AQC_ADD_CLOUD_FILTER_OMAC                  0x0009
#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_VNK_SHIFT                    6
#define I40E_AQC_ADD_CLOUD_VNK_MASK                     0x00C0
#define I40E_AQC_ADD_CLOUD_FLAGS_IPV4                   0
#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;
#define I40E_AQC_ADD_CLOUD_QUEUE_SHIFT                  0
#define I40E_AQC_ADD_CLOUD_QUEUE_MASK                   (0x3F << \
					I40E_AQC_ADD_CLOUD_QUEUE_SHIFT)
	u8     reserved[14];
	u8     reserved2[14];
	/* response section */
	u8     allocation_result;
#define I40E_AQC_ADD_CLOUD_FILTER_SUCCESS         0x0
@@ -1548,7 +1578,7 @@ struct i40e_aqc_module_desc {

struct i40e_aq_get_phy_abilities_resp {
	__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;
#define I40E_AQ_PHY_FLAG_PAUSE_TX         0x01
#define I40E_AQ_PHY_FLAG_PAUSE_RX         0x02
@@ -1582,6 +1612,10 @@ struct i40e_aq_set_phy_config { /* same bits as above in all */
	__le32 phy_type;
	u8     link_speed;
	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;
	__le32 eeer;
	u8     low_power_ctrl;
@@ -1915,22 +1949,39 @@ I40E_CHECK_CMD_LENGTH(i40e_aqc_lldp_start);
struct i40e_aqc_add_udp_tunnel {
	__le16 udp_port;
	u8     header_len; /* in DWords, 1 to 15 */
	u8     protocol_index;
#define I40E_AQC_TUNNEL_TYPE_MAC    0x0
#define I40E_AQC_TUNNEL_TYPE_UDP    0x1
	u8     protocol_type;
#define I40E_AQC_TUNNEL_TYPE_TEREDO	0x0
#define I40E_AQC_TUNNEL_TYPE_VXLAN	0x2
	u8     reserved[12];
#define I40E_AQC_TUNNEL_TYPE_NGE	0x3
	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);

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) */
struct i40e_aqc_remove_udp_tunnel {
	u8     reserved[2];
	u8     index; /* 0 to 15 */
	u8     pf_filters;
	u8     total_filters;
	u8     reserved2[11];
	u8     reserved2[13];
};

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 {
	__le16 udp_port;
	u8     index; /* 0 to 15 */
	u8     multiple_entries;
	u8     tunnels_used;
	u8     reserved;
	u8     tunnels_free;
	u8     reserved1[9];
	u8     multiple_pfs;
	u8     total_filters_used;
	u8     reserved1[11];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_del_udp_tunnel_completion);

/* tunnel key structure 0x0B10 */

struct i40e_aqc_tunnel_key_structure {
	__le16     key1_off;
	__le16     key1_len;
	__le16     key2_off;
	__le16     key2_len;
	__le16     flags;
	u8	key1_off;
	u8	key2_off;
	u8	key1_len;  /* 0 to 15 */
	u8	key2_len;  /* 0 to 15 */
	u8	flags;
#define I40E_AQC_TUNNEL_KEY_STRUCT_OVERRIDE 0x01
/* response flags */
#define I40E_AQC_TUNNEL_KEY_STRUCT_SUCCESS    0x01
#define I40E_AQC_TUNNEL_KEY_STRUCT_MODIFIED   0x02
#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);
@@ -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_EMP_MEM	9
#define I40E_AQ_CLUSTER_ID_PKT_BUF	10
#define I40E_AQ_CLUSTER_ID_ALTRAM	11

struct i40e_aqc_debug_dump_internals {
	u8     cluster_id;
+1 −1
Original line number Diff line number Diff line
@@ -1738,7 +1738,7 @@ i40e_status i40e_aq_add_udp_tunnel(struct i40e_hw *hw,

	cmd->udp_port = cpu_to_le16(udp_port);
	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);

+0 −3
Original line number Diff line number Diff line
@@ -53,9 +53,6 @@
					 (d) == I40E_QSFP_B_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_VF_VSI			3
#define I40E_MAX_CHAINED_RX_BUFFERS	5