Skip to content

Commit 1fe8c06

Browse files
committed
Merge branch 'qed-firmware-TLV'
Sudarsana Reddy Kalluru says: ==================== qed*: Add support for management firmware TLV request. Management firmware (MFW) requires config and state information from the driver. It queries this via TLV (type-length-value) request wherein mfw specificies the list of required TLVs. Driver fills the TLV data and responds back to MFW. This patch series adds qed/qede/qedf/qedi driver implementation for supporting the TLV queries from MFW. Changes from previous versions: ------------------------------- v2: Split patch (2) into multiple simpler patches. v2: Update qed_tlv_parsed_buf->p_val datatype to void pointer to avoid bunch of unnecessary typecasts. Please consider applying this series to "net-next". ==================== Signed-off-by: David S. Miller <[email protected]>
2 parents 9c803cf + 269afb3 commit 1fe8c06

File tree

16 files changed

+2502
-2
lines changed

16 files changed

+2502
-2
lines changed

drivers/net/ethernet/qlogic/qed/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ obj-$(CONFIG_QED) := qed.o
33

44
qed-y := qed_cxt.o qed_dev.o qed_hw.o qed_init_fw_funcs.o qed_init_ops.o \
55
qed_int.o qed_main.o qed_mcp.o qed_sp_commands.o qed_spq.o qed_l2.o \
6-
qed_selftest.o qed_dcbx.o qed_debug.o qed_ptp.o
6+
qed_selftest.o qed_dcbx.o qed_debug.o qed_ptp.o qed_mng_tlv.o
77
qed-$(CONFIG_QED_SRIOV) += qed_sriov.o qed_vf.o
88
qed-$(CONFIG_QED_LL2) += qed_ll2.o
99
qed-$(CONFIG_QED_RDMA) += qed_roce.o qed_rdma.o qed_iwarp.o

drivers/net/ethernet/qlogic/qed/qed.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ struct qed_eth_cb_ops;
9292
struct qed_dev_info;
9393
union qed_mcp_protocol_stats;
9494
enum qed_mcp_protocol_type;
95+
enum qed_mfw_tlv_type;
96+
union qed_mfw_tlv_data;
9597

9698
/* helpers */
9799
#define QED_MFW_GET_FIELD(name, field) \
@@ -513,6 +515,10 @@ struct qed_simd_fp_handler {
513515
void (*func)(void *);
514516
};
515517

518+
enum qed_slowpath_wq_flag {
519+
QED_SLOWPATH_MFW_TLV_REQ,
520+
};
521+
516522
struct qed_hwfn {
517523
struct qed_dev *cdev;
518524
u8 my_id; /* ID inside the PF */
@@ -642,6 +648,9 @@ struct qed_hwfn {
642648
#endif
643649

644650
struct z_stream_s *stream;
651+
struct workqueue_struct *slowpath_wq;
652+
struct delayed_work slowpath_task;
653+
unsigned long slowpath_task_flags;
645654
};
646655

647656
struct pci_params {
@@ -906,5 +915,9 @@ void qed_get_protocol_stats(struct qed_dev *cdev,
906915
union qed_mcp_protocol_stats *stats);
907916
int qed_slowpath_irq_req(struct qed_hwfn *hwfn);
908917
void qed_slowpath_irq_sync(struct qed_hwfn *p_hwfn);
918+
int qed_mfw_tlv_req(struct qed_hwfn *hwfn);
909919

920+
int qed_mfw_fill_tlv_data(struct qed_hwfn *hwfn,
921+
enum qed_mfw_tlv_type type,
922+
union qed_mfw_tlv_data *tlv_data);
910923
#endif /* _QED_H */

drivers/net/ethernet/qlogic/qed/qed_hsi.h

Lines changed: 231 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11863,6 +11863,8 @@ struct public_global {
1186311863
u32 running_bundle_id;
1186411864
s32 external_temperature;
1186511865
u32 mdump_reason;
11866+
u32 data_ptr;
11867+
u32 data_size;
1186611868
};
1186711869

1186811870
struct fw_flr_mb {
@@ -12322,6 +12324,7 @@ struct public_drv_mb {
1232212324
#define DRV_MSG_CODE_BIST_TEST 0x001e0000
1232312325
#define DRV_MSG_CODE_SET_LED_MODE 0x00200000
1232412326
#define DRV_MSG_CODE_RESOURCE_CMD 0x00230000
12327+
#define DRV_MSG_CODE_GET_TLV_DONE 0x002f0000
1232512328

1232612329
#define RESOURCE_CMD_REQ_RESC_MASK 0x0000001F
1232712330
#define RESOURCE_CMD_REQ_RESC_SHIFT 0
@@ -12523,6 +12526,7 @@ enum MFW_DRV_MSG_TYPE {
1252312526
MFW_DRV_MSG_TRANSCEIVER_STATE_CHANGE,
1252412527
MFW_DRV_MSG_BW_UPDATE11,
1252512528
MFW_DRV_MSG_OEM_CFG_UPDATE,
12529+
MFW_DRV_MSG_GET_TLV_REQ,
1252612530
MFW_DRV_MSG_MAX
1252712531
};
1252812532

@@ -12558,6 +12562,233 @@ struct mcp_public_data {
1255812562
struct public_func func[MCP_GLOB_FUNC_MAX];
1255912563
};
1256012564

12565+
/* OCBB definitions */
12566+
enum tlvs {
12567+
/* Category 1: Device Properties */
12568+
DRV_TLV_CLP_STR,
12569+
DRV_TLV_CLP_STR_CTD,
12570+
/* Category 6: Device Configuration */
12571+
DRV_TLV_SCSI_TO,
12572+
DRV_TLV_R_T_TOV,
12573+
DRV_TLV_R_A_TOV,
12574+
DRV_TLV_E_D_TOV,
12575+
DRV_TLV_CR_TOV,
12576+
DRV_TLV_BOOT_TYPE,
12577+
/* Category 8: Port Configuration */
12578+
DRV_TLV_NPIV_ENABLED,
12579+
/* Category 10: Function Configuration */
12580+
DRV_TLV_FEATURE_FLAGS,
12581+
DRV_TLV_LOCAL_ADMIN_ADDR,
12582+
DRV_TLV_ADDITIONAL_MAC_ADDR_1,
12583+
DRV_TLV_ADDITIONAL_MAC_ADDR_2,
12584+
DRV_TLV_LSO_MAX_OFFLOAD_SIZE,
12585+
DRV_TLV_LSO_MIN_SEGMENT_COUNT,
12586+
DRV_TLV_PROMISCUOUS_MODE,
12587+
DRV_TLV_TX_DESCRIPTORS_QUEUE_SIZE,
12588+
DRV_TLV_RX_DESCRIPTORS_QUEUE_SIZE,
12589+
DRV_TLV_NUM_OF_NET_QUEUE_VMQ_CFG,
12590+
DRV_TLV_FLEX_NIC_OUTER_VLAN_ID,
12591+
DRV_TLV_OS_DRIVER_STATES,
12592+
DRV_TLV_PXE_BOOT_PROGRESS,
12593+
/* Category 12: FC/FCoE Configuration */
12594+
DRV_TLV_NPIV_STATE,
12595+
DRV_TLV_NUM_OF_NPIV_IDS,
12596+
DRV_TLV_SWITCH_NAME,
12597+
DRV_TLV_SWITCH_PORT_NUM,
12598+
DRV_TLV_SWITCH_PORT_ID,
12599+
DRV_TLV_VENDOR_NAME,
12600+
DRV_TLV_SWITCH_MODEL,
12601+
DRV_TLV_SWITCH_FW_VER,
12602+
DRV_TLV_QOS_PRIORITY_PER_802_1P,
12603+
DRV_TLV_PORT_ALIAS,
12604+
DRV_TLV_PORT_STATE,
12605+
DRV_TLV_FIP_TX_DESCRIPTORS_QUEUE_SIZE,
12606+
DRV_TLV_FCOE_RX_DESCRIPTORS_QUEUE_SIZE,
12607+
DRV_TLV_LINK_FAILURE_COUNT,
12608+
DRV_TLV_FCOE_BOOT_PROGRESS,
12609+
/* Category 13: iSCSI Configuration */
12610+
DRV_TLV_TARGET_LLMNR_ENABLED,
12611+
DRV_TLV_HEADER_DIGEST_FLAG_ENABLED,
12612+
DRV_TLV_DATA_DIGEST_FLAG_ENABLED,
12613+
DRV_TLV_AUTHENTICATION_METHOD,
12614+
DRV_TLV_ISCSI_BOOT_TARGET_PORTAL,
12615+
DRV_TLV_MAX_FRAME_SIZE,
12616+
DRV_TLV_PDU_TX_DESCRIPTORS_QUEUE_SIZE,
12617+
DRV_TLV_PDU_RX_DESCRIPTORS_QUEUE_SIZE,
12618+
DRV_TLV_ISCSI_BOOT_PROGRESS,
12619+
/* Category 20: Device Data */
12620+
DRV_TLV_PCIE_BUS_RX_UTILIZATION,
12621+
DRV_TLV_PCIE_BUS_TX_UTILIZATION,
12622+
DRV_TLV_DEVICE_CPU_CORES_UTILIZATION,
12623+
DRV_TLV_LAST_VALID_DCC_TLV_RECEIVED,
12624+
DRV_TLV_NCSI_RX_BYTES_RECEIVED,
12625+
DRV_TLV_NCSI_TX_BYTES_SENT,
12626+
/* Category 22: Base Port Data */
12627+
DRV_TLV_RX_DISCARDS,
12628+
DRV_TLV_RX_ERRORS,
12629+
DRV_TLV_TX_ERRORS,
12630+
DRV_TLV_TX_DISCARDS,
12631+
DRV_TLV_RX_FRAMES_RECEIVED,
12632+
DRV_TLV_TX_FRAMES_SENT,
12633+
/* Category 23: FC/FCoE Port Data */
12634+
DRV_TLV_RX_BROADCAST_PACKETS,
12635+
DRV_TLV_TX_BROADCAST_PACKETS,
12636+
/* Category 28: Base Function Data */
12637+
DRV_TLV_NUM_OFFLOADED_CONNECTIONS_TCP_IPV4,
12638+
DRV_TLV_NUM_OFFLOADED_CONNECTIONS_TCP_IPV6,
12639+
DRV_TLV_TX_DESCRIPTOR_QUEUE_AVG_DEPTH,
12640+
DRV_TLV_RX_DESCRIPTORS_QUEUE_AVG_DEPTH,
12641+
DRV_TLV_PF_RX_FRAMES_RECEIVED,
12642+
DRV_TLV_RX_BYTES_RECEIVED,
12643+
DRV_TLV_PF_TX_FRAMES_SENT,
12644+
DRV_TLV_TX_BYTES_SENT,
12645+
DRV_TLV_IOV_OFFLOAD,
12646+
DRV_TLV_PCI_ERRORS_CAP_ID,
12647+
DRV_TLV_UNCORRECTABLE_ERROR_STATUS,
12648+
DRV_TLV_UNCORRECTABLE_ERROR_MASK,
12649+
DRV_TLV_CORRECTABLE_ERROR_STATUS,
12650+
DRV_TLV_CORRECTABLE_ERROR_MASK,
12651+
DRV_TLV_PCI_ERRORS_AECC_REGISTER,
12652+
DRV_TLV_TX_QUEUES_EMPTY,
12653+
DRV_TLV_RX_QUEUES_EMPTY,
12654+
DRV_TLV_TX_QUEUES_FULL,
12655+
DRV_TLV_RX_QUEUES_FULL,
12656+
/* Category 29: FC/FCoE Function Data */
12657+
DRV_TLV_FCOE_TX_DESCRIPTOR_QUEUE_AVG_DEPTH,
12658+
DRV_TLV_FCOE_RX_DESCRIPTORS_QUEUE_AVG_DEPTH,
12659+
DRV_TLV_FCOE_RX_FRAMES_RECEIVED,
12660+
DRV_TLV_FCOE_RX_BYTES_RECEIVED,
12661+
DRV_TLV_FCOE_TX_FRAMES_SENT,
12662+
DRV_TLV_FCOE_TX_BYTES_SENT,
12663+
DRV_TLV_CRC_ERROR_COUNT,
12664+
DRV_TLV_CRC_ERROR_1_RECEIVED_SOURCE_FC_ID,
12665+
DRV_TLV_CRC_ERROR_1_TIMESTAMP,
12666+
DRV_TLV_CRC_ERROR_2_RECEIVED_SOURCE_FC_ID,
12667+
DRV_TLV_CRC_ERROR_2_TIMESTAMP,
12668+
DRV_TLV_CRC_ERROR_3_RECEIVED_SOURCE_FC_ID,
12669+
DRV_TLV_CRC_ERROR_3_TIMESTAMP,
12670+
DRV_TLV_CRC_ERROR_4_RECEIVED_SOURCE_FC_ID,
12671+
DRV_TLV_CRC_ERROR_4_TIMESTAMP,
12672+
DRV_TLV_CRC_ERROR_5_RECEIVED_SOURCE_FC_ID,
12673+
DRV_TLV_CRC_ERROR_5_TIMESTAMP,
12674+
DRV_TLV_LOSS_OF_SYNC_ERROR_COUNT,
12675+
DRV_TLV_LOSS_OF_SIGNAL_ERRORS,
12676+
DRV_TLV_PRIMITIVE_SEQUENCE_PROTOCOL_ERROR_COUNT,
12677+
DRV_TLV_DISPARITY_ERROR_COUNT,
12678+
DRV_TLV_CODE_VIOLATION_ERROR_COUNT,
12679+
DRV_TLV_LAST_FLOGI_ISSUED_COMMON_PARAMETERS_WORD_1,
12680+
DRV_TLV_LAST_FLOGI_ISSUED_COMMON_PARAMETERS_WORD_2,
12681+
DRV_TLV_LAST_FLOGI_ISSUED_COMMON_PARAMETERS_WORD_3,
12682+
DRV_TLV_LAST_FLOGI_ISSUED_COMMON_PARAMETERS_WORD_4,
12683+
DRV_TLV_LAST_FLOGI_TIMESTAMP,
12684+
DRV_TLV_LAST_FLOGI_ACC_COMMON_PARAMETERS_WORD_1,
12685+
DRV_TLV_LAST_FLOGI_ACC_COMMON_PARAMETERS_WORD_2,
12686+
DRV_TLV_LAST_FLOGI_ACC_COMMON_PARAMETERS_WORD_3,
12687+
DRV_TLV_LAST_FLOGI_ACC_COMMON_PARAMETERS_WORD_4,
12688+
DRV_TLV_LAST_FLOGI_ACC_TIMESTAMP,
12689+
DRV_TLV_LAST_FLOGI_RJT,
12690+
DRV_TLV_LAST_FLOGI_RJT_TIMESTAMP,
12691+
DRV_TLV_FDISCS_SENT_COUNT,
12692+
DRV_TLV_FDISC_ACCS_RECEIVED,
12693+
DRV_TLV_FDISC_RJTS_RECEIVED,
12694+
DRV_TLV_PLOGI_SENT_COUNT,
12695+
DRV_TLV_PLOGI_ACCS_RECEIVED,
12696+
DRV_TLV_PLOGI_RJTS_RECEIVED,
12697+
DRV_TLV_PLOGI_1_SENT_DESTINATION_FC_ID,
12698+
DRV_TLV_PLOGI_1_TIMESTAMP,
12699+
DRV_TLV_PLOGI_2_SENT_DESTINATION_FC_ID,
12700+
DRV_TLV_PLOGI_2_TIMESTAMP,
12701+
DRV_TLV_PLOGI_3_SENT_DESTINATION_FC_ID,
12702+
DRV_TLV_PLOGI_3_TIMESTAMP,
12703+
DRV_TLV_PLOGI_4_SENT_DESTINATION_FC_ID,
12704+
DRV_TLV_PLOGI_4_TIMESTAMP,
12705+
DRV_TLV_PLOGI_5_SENT_DESTINATION_FC_ID,
12706+
DRV_TLV_PLOGI_5_TIMESTAMP,
12707+
DRV_TLV_PLOGI_1_ACC_RECEIVED_SOURCE_FC_ID,
12708+
DRV_TLV_PLOGI_1_ACC_TIMESTAMP,
12709+
DRV_TLV_PLOGI_2_ACC_RECEIVED_SOURCE_FC_ID,
12710+
DRV_TLV_PLOGI_2_ACC_TIMESTAMP,
12711+
DRV_TLV_PLOGI_3_ACC_RECEIVED_SOURCE_FC_ID,
12712+
DRV_TLV_PLOGI_3_ACC_TIMESTAMP,
12713+
DRV_TLV_PLOGI_4_ACC_RECEIVED_SOURCE_FC_ID,
12714+
DRV_TLV_PLOGI_4_ACC_TIMESTAMP,
12715+
DRV_TLV_PLOGI_5_ACC_RECEIVED_SOURCE_FC_ID,
12716+
DRV_TLV_PLOGI_5_ACC_TIMESTAMP,
12717+
DRV_TLV_LOGOS_ISSUED,
12718+
DRV_TLV_LOGO_ACCS_RECEIVED,
12719+
DRV_TLV_LOGO_RJTS_RECEIVED,
12720+
DRV_TLV_LOGO_1_RECEIVED_SOURCE_FC_ID,
12721+
DRV_TLV_LOGO_1_TIMESTAMP,
12722+
DRV_TLV_LOGO_2_RECEIVED_SOURCE_FC_ID,
12723+
DRV_TLV_LOGO_2_TIMESTAMP,
12724+
DRV_TLV_LOGO_3_RECEIVED_SOURCE_FC_ID,
12725+
DRV_TLV_LOGO_3_TIMESTAMP,
12726+
DRV_TLV_LOGO_4_RECEIVED_SOURCE_FC_ID,
12727+
DRV_TLV_LOGO_4_TIMESTAMP,
12728+
DRV_TLV_LOGO_5_RECEIVED_SOURCE_FC_ID,
12729+
DRV_TLV_LOGO_5_TIMESTAMP,
12730+
DRV_TLV_LOGOS_RECEIVED,
12731+
DRV_TLV_ACCS_ISSUED,
12732+
DRV_TLV_PRLIS_ISSUED,
12733+
DRV_TLV_ACCS_RECEIVED,
12734+
DRV_TLV_ABTS_SENT_COUNT,
12735+
DRV_TLV_ABTS_ACCS_RECEIVED,
12736+
DRV_TLV_ABTS_RJTS_RECEIVED,
12737+
DRV_TLV_ABTS_1_SENT_DESTINATION_FC_ID,
12738+
DRV_TLV_ABTS_1_TIMESTAMP,
12739+
DRV_TLV_ABTS_2_SENT_DESTINATION_FC_ID,
12740+
DRV_TLV_ABTS_2_TIMESTAMP,
12741+
DRV_TLV_ABTS_3_SENT_DESTINATION_FC_ID,
12742+
DRV_TLV_ABTS_3_TIMESTAMP,
12743+
DRV_TLV_ABTS_4_SENT_DESTINATION_FC_ID,
12744+
DRV_TLV_ABTS_4_TIMESTAMP,
12745+
DRV_TLV_ABTS_5_SENT_DESTINATION_FC_ID,
12746+
DRV_TLV_ABTS_5_TIMESTAMP,
12747+
DRV_TLV_RSCNS_RECEIVED,
12748+
DRV_TLV_LAST_RSCN_RECEIVED_N_PORT_1,
12749+
DRV_TLV_LAST_RSCN_RECEIVED_N_PORT_2,
12750+
DRV_TLV_LAST_RSCN_RECEIVED_N_PORT_3,
12751+
DRV_TLV_LAST_RSCN_RECEIVED_N_PORT_4,
12752+
DRV_TLV_LUN_RESETS_ISSUED,
12753+
DRV_TLV_ABORT_TASK_SETS_ISSUED,
12754+
DRV_TLV_TPRLOS_SENT,
12755+
DRV_TLV_NOS_SENT_COUNT,
12756+
DRV_TLV_NOS_RECEIVED_COUNT,
12757+
DRV_TLV_OLS_COUNT,
12758+
DRV_TLV_LR_COUNT,
12759+
DRV_TLV_LRR_COUNT,
12760+
DRV_TLV_LIP_SENT_COUNT,
12761+
DRV_TLV_LIP_RECEIVED_COUNT,
12762+
DRV_TLV_EOFA_COUNT,
12763+
DRV_TLV_EOFNI_COUNT,
12764+
DRV_TLV_SCSI_STATUS_CHECK_CONDITION_COUNT,
12765+
DRV_TLV_SCSI_STATUS_CONDITION_MET_COUNT,
12766+
DRV_TLV_SCSI_STATUS_BUSY_COUNT,
12767+
DRV_TLV_SCSI_STATUS_INTERMEDIATE_COUNT,
12768+
DRV_TLV_SCSI_STATUS_INTERMEDIATE_CONDITION_MET_COUNT,
12769+
DRV_TLV_SCSI_STATUS_RESERVATION_CONFLICT_COUNT,
12770+
DRV_TLV_SCSI_STATUS_TASK_SET_FULL_COUNT,
12771+
DRV_TLV_SCSI_STATUS_ACA_ACTIVE_COUNT,
12772+
DRV_TLV_SCSI_STATUS_TASK_ABORTED_COUNT,
12773+
DRV_TLV_SCSI_CHECK_CONDITION_1_RECEIVED_SK_ASC_ASCQ,
12774+
DRV_TLV_SCSI_CHECK_1_TIMESTAMP,
12775+
DRV_TLV_SCSI_CHECK_CONDITION_2_RECEIVED_SK_ASC_ASCQ,
12776+
DRV_TLV_SCSI_CHECK_2_TIMESTAMP,
12777+
DRV_TLV_SCSI_CHECK_CONDITION_3_RECEIVED_SK_ASC_ASCQ,
12778+
DRV_TLV_SCSI_CHECK_3_TIMESTAMP,
12779+
DRV_TLV_SCSI_CHECK_CONDITION_4_RECEIVED_SK_ASC_ASCQ,
12780+
DRV_TLV_SCSI_CHECK_4_TIMESTAMP,
12781+
DRV_TLV_SCSI_CHECK_CONDITION_5_RECEIVED_SK_ASC_ASCQ,
12782+
DRV_TLV_SCSI_CHECK_5_TIMESTAMP,
12783+
/* Category 30: iSCSI Function Data */
12784+
DRV_TLV_PDU_TX_DESCRIPTOR_QUEUE_AVG_DEPTH,
12785+
DRV_TLV_PDU_RX_DESCRIPTORS_QUEUE_AVG_DEPTH,
12786+
DRV_TLV_ISCSI_PDU_RX_FRAMES_RECEIVED,
12787+
DRV_TLV_ISCSI_PDU_RX_BYTES_RECEIVED,
12788+
DRV_TLV_ISCSI_PDU_TX_FRAMES_SENT,
12789+
DRV_TLV_ISCSI_PDU_TX_BYTES_SENT
12790+
};
12791+
1256112792
struct nvm_cfg_mac_address {
1256212793
u32 mac_addr_hi;
1256312794
#define NVM_CFG_MAC_ADDRESS_HI_MASK 0x0000FFFF

0 commit comments

Comments
 (0)