qlcnic: Enable support for 84xx Series adapter
Subsystems (3)
cover qlcnic: Enable support for 84xx Series adapter
From: Himanshu Madhani <[email protected]>
This patch series enables support for 84xx series adapters.
Please apply to net-next
Thanks,
Himanshu
Himanshu Madhani (1):
qlcnic: Update version to 5.3.47
Manish Chopra (3):
qlcnic: Enable support for 844X adapter
qlcnic: Add PVID support for 84xx adapters
qlcnic: Loopback Inter Driver Communication AEN handler
Pratik Pujar (1):
qlcnic: Add support for 84xx adapters to load firmware from file
drivers/net/ethernet/qlogic/qlcnic/qlcnic.h | 21 +++++++--- .../net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | 45 +++++++++++++++++----- .../net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h | 3 ++ .../net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c | 28 +++++++++++++- drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c | 5 +-- drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 11 ++++++ .../ethernet/qlogic/qlcnic/qlcnic_sriov_common.c | 20 ++++++---- 7 files changed, 105 insertions(+), 28 deletions(-)
Signature · 1 line
1.8.1.4
PATCH 1/5 qlcnic: Enable support for 844X adapter
From: Manish Chopra <[email protected]>
--- drivers/net/ethernet/qlogic/qlcnic/qlcnic.h | 14 +++++++++++--- drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c | 5 +---- drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 11 +++++++++++ 3 files changed, 23 insertions(+), 7 deletions(-)
drivers/net/ethernet/qlogic/qlcnic/qlcnic.h +11 -3
@@ -1972,9 +1972,11 @@ extern const struct ethtool_ops qlcnic_ethtool_failed_ops; __func__, ##_args); \ } while (0) -#define PCI_DEVICE_ID_QLOGIC_QLE834X 0x8030 +#define PCI_DEVICE_ID_QLOGIC_QLE824X 0x8020 +#define PCI_DEVICE_ID_QLOGIC_QLE834X 0x8030#define PCI_DEVICE_ID_QLOGIC_VF_QLE834X 0x8430 -#define PCI_DEVICE_ID_QLOGIC_QLE824X 0x8020 +#define PCI_DEVICE_ID_QLOGIC_QLE844X 0x8040 +#define PCI_DEVICE_ID_QLOGIC_VF_QLE844X 0x8440static inline bool qlcnic_82xx_check (struct qlcnic_adapter *adapter) {
@@ -1988,6 +1990,8 @@ static inline bool qlcnic_83xx_check(struct qlcnic_adapter *adapter)bool status; status = ((device ==PCI_DEVICE_ID_QLOGIC_QLE834X ) || + (device ==PCI_DEVICE_ID_QLOGIC_QLE844X ) || + (device ==PCI_DEVICE_ID_QLOGIC_VF_QLE844X ) || (device ==PCI_DEVICE_ID_QLOGIC_VF_QLE834X )) ? true : false;return status;
@@ -2001,7 +2005,11 @@ static inline bool qlcnic_sriov_pf_check(struct qlcnic_adapter *adapter)static inline bool qlcnic_sriov_vf_check (struct qlcnic_adapter *adapter) {unsigned short device = adapter->pdev->device; +bool status; + + status = ((device ==PCI_DEVICE_ID_QLOGIC_VF_QLE834X ) || + (device ==PCI_DEVICE_ID_QLOGIC_VF_QLE844X )) ? true : false; -return (device ==PCI_DEVICE_ID_QLOGIC_VF_QLE834X ) ? true : false; +return status; }#endif /* __QLCNIC_H_ */
drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c +1 -4
@@ -147,10 +147,7 @@ static inline u8 qlcnic_mac_hash(u64 mac)static inline u32 qlcnic_get_ref_handle (struct qlcnic_adapter *adapter,u16 handle,u8 ring_id) { -unsigned short device = adapter->pdev->device; - -if ((device ==PCI_DEVICE_ID_QLOGIC_QLE834X ) || - (device ==PCI_DEVICE_ID_QLOGIC_VF_QLE834X )) +if (qlcnic_83xx_check (adapter))return handle | (ring_id <<15 );else return handle;
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +11 -0
@@ -100,6 +100,8 @@ static DEFINE_PCI_DEVICE_TABLE(qlcnic_pci_tbl) = {ENTRY (PCI_DEVICE_ID_QLOGIC_QLE824X ),ENTRY (PCI_DEVICE_ID_QLOGIC_QLE834X ),ENTRY (PCI_DEVICE_ID_QLOGIC_VF_QLE834X ), +ENTRY (PCI_DEVICE_ID_QLOGIC_QLE844X ), +ENTRY (PCI_DEVICE_ID_QLOGIC_VF_QLE844X ), {0,} };
@@ -146,6 +148,11 @@ static const u32 qlcnic_reg_tbl[] = {static const struct qlcnic_board_info qlcnic_boards[] = { {PCI_VENDOR_ID_QLOGIC , +PCI_DEVICE_ID_QLOGIC_QLE844X , +0x0 , +0x0 , +"8400 series 10GbE Converged Network Adapter (TCP/IP Networking)" }, + {PCI_VENDOR_ID_QLOGIC ,PCI_DEVICE_ID_QLOGIC_QLE834X ,PCI_VENDOR_ID_QLOGIC ,0x24e ,
@@ -829,7 +836,9 @@ static void qlcnic_get_bar_length(u32 dev_id, ulong *bar) *bar =QLCNIC_82XX_BAR0_LENGTH ;break ;case PCI_DEVICE_ID_QLOGIC_QLE834X : +case PCI_DEVICE_ID_QLOGIC_QLE844X :case PCI_DEVICE_ID_QLOGIC_VF_QLE834X : +case PCI_DEVICE_ID_QLOGIC_VF_QLE844X : *bar =QLCNIC_83XX_BAR0_LENGTH ;break ;default :
@@ -2048,9 +2057,11 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ahw->reg_tbl = (u32 *) qlcnic_reg_tbl;break ;case PCI_DEVICE_ID_QLOGIC_QLE834X : +case PCI_DEVICE_ID_QLOGIC_QLE844X :qlcnic_83xx_register_map (ahw);break ;case PCI_DEVICE_ID_QLOGIC_VF_QLE834X : +case PCI_DEVICE_ID_QLOGIC_VF_QLE844X :qlcnic_sriov_vf_register_map (ahw);break ;default :
Signature · 1 line
1.8.1.4
PATCH 2/5 qlcnic: Add PVID support for 84xx adapters
In reply to Himanshu MadhaniFrom: Manish Chopra <[email protected]>
o 84xx adapters support VLAN stripping for PVID. Packets don't have VLAN tag inserted in case of PVID. So packet should follow non vlan path.
o Use capability bit to set PVID mode.
--- drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h | 1 + .../net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c | 20 +++++++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-)
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h +1 -0
@@ -404,6 +404,7 @@ enum qlcnic_83xx_states {#define QLC_83XX_MAX_MC_COUNT 38#define QLC_83XX_MAX_UC_COUNT 4096 +#define QLC_83XX_PVID_STRIP_CAPABILITY BIT_22#define QLC_83XX_GET_FUNC_MODE_FROM_NPAR_INFO (val) (val & 0x80000000)#define QLC_83XX_GET_LRO_CAPABILITY (val) (val & 0x20)#define QLC_83XX_GET_LSO_CAPABILITY (val) (val & 0x40)
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c +13 -7
@@ -398,10 +398,14 @@ int qlcnic_sriov_get_vf_vport_info(struct qlcnic_adapter *adapter, }static int qlcnic_sriov_set_pvid_mode (struct qlcnic_adapter *adapter, -struct qlcnic_cmd_args *cmd) +struct qlcnic_cmd_args *cmd,u32 cap) { - adapter->rx_pvid = (cmd->rsp.arg[1 ] >>16 ) &0xffff ; - adapter->flags &= ~QLCNIC_TAGGING_ENABLED ; +if (cap &QLC_83XX_PVID_STRIP_CAPABILITY ) { + adapter->rx_pvid =0 ; + }else { + adapter->rx_pvid = (cmd->rsp.arg[1 ] >>16 ) &0xffff ; + adapter->flags &= ~QLCNIC_TAGGING_ENABLED ; + }return 0 ; }
@@ -432,12 +436,14 @@ static int qlcnic_sriov_set_guest_vlan_mode(struct qlcnic_adapter *adapter,return 0 ; } -static int qlcnic_sriov_get_vf_acl (struct qlcnic_adapter *adapter) +static int qlcnic_sriov_get_vf_acl (struct qlcnic_adapter *adapter, +struct qlcnic_info *info) {struct qlcnic_sriov *sriov = adapter->ahw->sriov;struct qlcnic_cmd_args cmd; -int ret; +int ret, cap; + cap = info->capabilities; ret =qlcnic_sriov_alloc_bc_mbx_args (&cmd,QLCNIC_BC_CMD_GET_ACL );if (ret)return ret;
@@ -453,7 +459,7 @@ static int qlcnic_sriov_get_vf_acl(struct qlcnic_adapter *adapter) ret =qlcnic_sriov_set_guest_vlan_mode (adapter, &cmd);break ;case QLC_PVID_MODE : - ret =qlcnic_sriov_set_pvid_mode (adapter, &cmd); + ret =qlcnic_sriov_set_pvid_mode (adapter, &cmd, cap);break ; } }
@@ -476,7 +482,7 @@ static int qlcnic_sriov_vf_init_driver(struct qlcnic_adapter *adapter)if (err)return -EIO ; - err =qlcnic_sriov_get_vf_acl (adapter); + err =qlcnic_sriov_get_vf_acl (adapter, &nic_info);if (err)return err;
Signature · 1 line
1.8.1.4
PATCH 3/5 qlcnic: Loopback Inter Driver Communication AEN handler
In reply to Himanshu MadhaniFrom: Manish Chopra <[email protected]>
o Loopback initiator function drivers should process loopback time extend AEN. These AENs are triggered by the loopback time extend mailbox command issued by the target function drivers.
--- drivers/net/ethernet/qlogic/qlcnic/qlcnic.h | 1 + .../net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | 45 +++++++++++++++++----- 2 files changed, 37 insertions(+), 9 deletions(-)
drivers/net/ethernet/qlogic/qlcnic/qlcnic.h +1 -0
@@ -467,6 +467,7 @@ struct qlcnic_hardware_context {u32 mbox_aen[QLC_83XX_MBX_AEN_CNT ];u32 mbox_reg[4 ];struct qlcnic_mailbox *mailbox; +u8 extend_lb_time; };struct qlcnic_adapter_stats {
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c +36 -9
92 lines not on this page · raw message
Signature · 1 line
1.8.1.4
PATCH 4/5 qlcnic: Add support for 84xx adapters to load firmware from file
In reply to Himanshu MadhaniFrom: Pratik Pujar <[email protected]>
o Use appropriate firmware image file name based on device IDs.
--- .../net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h | 2 ++ .../net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c | 28 ++++++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-)
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h +2 -0
@@ -84,9 +84,11 @@/* Firmware image definitions */ #define QLC_83XX_BOOTLOADER_FLASH_ADDR 0x10000#define QLC_83XX_FW_FILE_NAME "83xx_fw.bin" +#define QLC_84XX_FW_FILE_NAME "84xx_fw.bin"#define QLC_83XX_BOOT_FROM_FLASH 0#define QLC_83XX_BOOT_FROM_FILE 0x12345678 +#define QLC_FW_FILE_NAME_LEN 20#define QLC_83XX_MAX_RESET_SEQ_ENTRIES 16#define QLC_83XX_MBX_POST_BC_OP 0x1
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c +26 -2
@@ -1947,12 +1947,36 @@ static void qlcnic_83xx_init_hw(struct qlcnic_adapter *p_dev)dev_err (&p_dev->pdev->dev,"%s: failed\n" , __func__); } +static inline void qlcnic_83xx_get_fw_file_name (struct qlcnic_adapter *adapter, +char *file_name) +{ +struct pci_dev *pdev = adapter->pdev; + +memset (file_name,0 ,QLC_FW_FILE_NAME_LEN ); + +switch (pdev->device) { +case PCI_DEVICE_ID_QLOGIC_QLE834X : +strncpy (file_name,QLC_83XX_FW_FILE_NAME , +QLC_FW_FILE_NAME_LEN ); +break ; +case PCI_DEVICE_ID_QLOGIC_QLE844X : +strncpy (file_name,QLC_84XX_FW_FILE_NAME , +QLC_FW_FILE_NAME_LEN ); +break ; +default : +dev_err (&pdev->dev,"%s: Invalid device id\n" , + __func__); + } +} +static int qlcnic_83xx_load_fw_image_from_host (struct qlcnic_adapter *adapter) { +char fw_file_name[QLC_FW_FILE_NAME_LEN ];int err = -EIO ; -if (request_firmware (&adapter->ahw->fw_info.fw, -QLC_83XX_FW_FILE_NAME , &(adapter->pdev->dev))) { +qlcnic_83xx_get_fw_file_name (adapter, fw_file_name); +if (request_firmware (&adapter->ahw->fw_info.fw, fw_file_name, + &(adapter->pdev->dev))) {dev_err (&adapter->pdev->dev,"No file FW image, loading flash FW image.\n" ); QLC_SHARED_REG_WR32(adapter, QLCNIC_FW_IMG_VALID,
Signature · 1 line
1.8.1.4
PATCH 5/5 qlcnic: Update version to 5.3.47
In reply to Himanshu MadhaniFrom: Himanshu Madhani <[email protected]>
--- drivers/net/ethernet/qlogic/qlcnic/qlcnic.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/net/ethernet/qlogic/qlcnic/qlcnic.h +3 -3
@@ -36,9 +36,9 @@#include "qlcnic_83xx_hw.h" #define _QLCNIC_LINUX_MAJOR 5 -#define _QLCNIC_LINUX_MINOR 2 -#define _QLCNIC_LINUX_SUBVERSION 46 -#define QLCNIC_LINUX_VERSIONID "5.2.46" +#define _QLCNIC_LINUX_MINOR 3 +#define _QLCNIC_LINUX_SUBVERSION 47 +#define QLCNIC_LINUX_VERSIONID "5.3.47"#define QLCNIC_DRV_IDC_VER 0x01#define QLCNIC_DRIVER_VERSION ((_QLCNIC_LINUX_MAJOR << 16) |\ (_QLCNIC_LINUX_MINOR << 8) | (_QLCNIC_LINUX_SUBVERSION))
Signature · 1 line
1.8.1.4
David Miller
maintainerFrom: Himanshu Madhani <[email protected]>
Date: Fri, 16 Aug 2013 19:07:12 -0400
Quoted 6 lines
From: Himanshu Madhani <[email protected]>
This patch series enables support for 84xx series adapters.
Please apply to net-next
Series applied, thanks.