Skip to content

Commit c5ac931

Browse files
Yuval Mintzdavem330
authored andcommitted
qed: Add iscsi/rdma personalities
This patch adds in the ecore 2 new personalities in addition to QED_PCI_ETH - QED_PCI_ISCSI and QED_PCI_ETH_ROCE. Signed-off-by: Yuval Mintz <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 7a9b6b8 commit c5ac931

File tree

8 files changed

+114
-6
lines changed

8 files changed

+114
-6
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,8 @@ struct qed_tunn_update_params {
127127
*/
128128
enum qed_pci_personality {
129129
QED_PCI_ETH,
130+
QED_PCI_ISCSI,
131+
QED_PCI_ETH_ROCE,
130132
QED_PCI_DEFAULT /* default in shmem */
131133
};
132134

@@ -170,6 +172,8 @@ enum QED_PORT_MODE {
170172

171173
enum qed_dev_cap {
172174
QED_DEV_CAP_ETH,
175+
QED_DEV_CAP_ISCSI,
176+
QED_DEV_CAP_ROCE,
173177
};
174178

175179
struct qed_hw_info {

drivers/net/ethernet/qlogic/qed/qed_dev.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1472,6 +1472,12 @@ static int qed_hw_get_nvm_info(struct qed_hwfn *p_hwfn,
14721472
if (device_capabilities & NVM_CFG1_GLOB_DEVICE_CAPABILITIES_ETHERNET)
14731473
__set_bit(QED_DEV_CAP_ETH,
14741474
&p_hwfn->hw_info.device_capabilities);
1475+
if (device_capabilities & NVM_CFG1_GLOB_DEVICE_CAPABILITIES_ISCSI)
1476+
__set_bit(QED_DEV_CAP_ISCSI,
1477+
&p_hwfn->hw_info.device_capabilities);
1478+
if (device_capabilities & NVM_CFG1_GLOB_DEVICE_CAPABILITIES_ROCE)
1479+
__set_bit(QED_DEV_CAP_ROCE,
1480+
&p_hwfn->hw_info.device_capabilities);
14751481

14761482
return qed_mcp_fill_shmem_func_info(p_hwfn, p_ptt);
14771483
}

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -650,7 +650,7 @@ struct mstorm_vf_zone {
650650
/* personality per PF */
651651
enum personality_type {
652652
BAD_PERSONALITY_TYP,
653-
PERSONALITY_RESERVED,
653+
PERSONALITY_ISCSI,
654654
PERSONALITY_RESERVED2,
655655
PERSONALITY_RDMA_AND_ETH,
656656
PERSONALITY_RESERVED3,
@@ -7072,6 +7072,8 @@ struct public_func {
70727072
#define FUNC_MF_CFG_PROTOCOL_MASK 0x000000f0
70737073
#define FUNC_MF_CFG_PROTOCOL_SHIFT 4
70747074
#define FUNC_MF_CFG_PROTOCOL_ETHERNET 0x00000000
7075+
#define FUNC_MF_CFG_PROTOCOL_ISCSI 0x00000010
7076+
#define FUNC_MF_CFG_PROTOCOL_ROCE 0x00000030
70757077
#define FUNC_MF_CFG_PROTOCOL_MAX 0x00000030
70767078

70777079
#define FUNC_MF_CFG_MIN_BW_MASK 0x0000ff00
@@ -7405,6 +7407,8 @@ struct nvm_cfg1_glob {
74057407
u32 misc_sig;
74067408
u32 device_capabilities;
74077409
#define NVM_CFG1_GLOB_DEVICE_CAPABILITIES_ETHERNET 0x1
7410+
#define NVM_CFG1_GLOB_DEVICE_CAPABILITIES_ISCSI 0x4
7411+
#define NVM_CFG1_GLOB_DEVICE_CAPABILITIES_ROCE 0x8
74087412
u32 power_dissipated;
74097413
u32 power_consumed;
74107414
u32 efi_version;

drivers/net/ethernet/qlogic/qed/qed_main.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,8 @@ int qed_fill_dev_info(struct qed_dev *cdev,
207207
dev_info->pci_mem_start = cdev->pci_params.mem_start;
208208
dev_info->pci_mem_end = cdev->pci_params.mem_end;
209209
dev_info->pci_irq = cdev->pci_params.irq;
210+
dev_info->rdma_supported =
211+
(cdev->hwfns[0].hw_info.personality == QED_PCI_ETH_ROCE);
210212
dev_info->is_mf_default = IS_MF_DEFAULT(&cdev->hwfns[0]);
211213
ether_addr_copy(dev_info->hw_mac, cdev->hwfns[0].hw_info.hw_mac_addr);
212214

@@ -901,7 +903,8 @@ static int qed_slowpath_stop(struct qed_dev *cdev)
901903

902904
if (IS_PF(cdev)) {
903905
qed_free_stream_mem(cdev);
904-
qed_sriov_disable(cdev, true);
906+
if (IS_QED_ETH_IF(cdev))
907+
qed_sriov_disable(cdev, true);
905908

906909
qed_nic_stop(cdev);
907910
qed_slowpath_irq_free(cdev);

drivers/net/ethernet/qlogic/qed/qed_mcp.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -977,7 +977,18 @@ qed_mcp_get_shmem_proto(struct qed_hwfn *p_hwfn,
977977

978978
switch (p_info->config & FUNC_MF_CFG_PROTOCOL_MASK) {
979979
case FUNC_MF_CFG_PROTOCOL_ETHERNET:
980-
*p_proto = QED_PCI_ETH;
980+
if (test_bit(QED_DEV_CAP_ROCE,
981+
&p_hwfn->hw_info.device_capabilities))
982+
*p_proto = QED_PCI_ETH_ROCE;
983+
else
984+
*p_proto = QED_PCI_ETH;
985+
break;
986+
case FUNC_MF_CFG_PROTOCOL_ISCSI:
987+
*p_proto = QED_PCI_ISCSI;
988+
break;
989+
case FUNC_MF_CFG_PROTOCOL_ROCE:
990+
DP_NOTICE(p_hwfn, "RoCE personality is not a valid value!\n");
991+
rc = -EINVAL;
981992
break;
982993
default:
983994
rc = -EINVAL;

drivers/net/ethernet/qlogic/qed/qed_sp_commands.c

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -358,11 +358,26 @@ int qed_sp_pf_start(struct qed_hwfn *p_hwfn,
358358

359359
qed_tunn_set_pf_start_params(p_hwfn, p_tunn,
360360
&p_ramrod->tunnel_config);
361-
p_hwfn->hw_info.personality = PERSONALITY_ETH;
362361

363362
if (IS_MF_SI(p_hwfn))
364363
p_ramrod->allow_npar_tx_switching = allow_npar_tx_switch;
365364

365+
switch (p_hwfn->hw_info.personality) {
366+
case QED_PCI_ETH:
367+
p_ramrod->personality = PERSONALITY_ETH;
368+
break;
369+
case QED_PCI_ISCSI:
370+
p_ramrod->personality = PERSONALITY_ISCSI;
371+
break;
372+
case QED_PCI_ETH_ROCE:
373+
p_ramrod->personality = PERSONALITY_RDMA_AND_ETH;
374+
break;
375+
default:
376+
DP_NOTICE(p_hwfn, "Unkown personality %d\n",
377+
p_hwfn->hw_info.personality);
378+
p_ramrod->personality = PERSONALITY_ETH;
379+
}
380+
366381
if (p_hwfn->cdev->p_iov_info) {
367382
struct qed_hw_sriov_info *p_iov = p_hwfn->cdev->p_iov_info;
368383

include/linux/qed/common_hsi.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -517,9 +517,9 @@ enum mf_mode {
517517

518518
/* Per-protocol connection types */
519519
enum protocol_type {
520-
PROTOCOLID_RESERVED1,
520+
PROTOCOLID_ISCSI,
521521
PROTOCOLID_RESERVED2,
522-
PROTOCOLID_RESERVED3,
522+
PROTOCOLID_ROCE,
523523
PROTOCOLID_CORE,
524524
PROTOCOLID_ETH,
525525
PROTOCOLID_RESERVED4,

include/linux/qed/qed_if.h

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,70 @@ struct qed_eth_pf_params {
5858
u16 num_cons;
5959
};
6060

61+
/* Most of the the parameters below are described in the FW iSCSI / TCP HSI */
62+
struct qed_iscsi_pf_params {
63+
u64 glbl_q_params_addr;
64+
u64 bdq_pbl_base_addr[2];
65+
u32 max_cwnd;
66+
u16 cq_num_entries;
67+
u16 cmdq_num_entries;
68+
u16 dup_ack_threshold;
69+
u16 tx_sws_timer;
70+
u16 min_rto;
71+
u16 min_rto_rt;
72+
u16 max_rto;
73+
74+
/* The following parameters are used during HW-init
75+
* and these parameters need to be passed as arguments
76+
* to update_pf_params routine invoked before slowpath start
77+
*/
78+
u16 num_cons;
79+
u16 num_tasks;
80+
81+
/* The following parameters are used during protocol-init */
82+
u16 half_way_close_timeout;
83+
u16 bdq_xoff_threshold[2];
84+
u16 bdq_xon_threshold[2];
85+
u16 cmdq_xoff_threshold;
86+
u16 cmdq_xon_threshold;
87+
u16 rq_buffer_size;
88+
89+
u8 num_sq_pages_in_ring;
90+
u8 num_r2tq_pages_in_ring;
91+
u8 num_uhq_pages_in_ring;
92+
u8 num_queues;
93+
u8 log_page_size;
94+
u8 rqe_log_size;
95+
u8 max_fin_rt;
96+
u8 gl_rq_pi;
97+
u8 gl_cmd_pi;
98+
u8 debug_mode;
99+
u8 ll2_ooo_queue_id;
100+
u8 ooo_enable;
101+
102+
u8 is_target;
103+
u8 bdq_pbl_num_entries[2];
104+
};
105+
106+
struct qed_rdma_pf_params {
107+
/* Supplied to QED during resource allocation (may affect the ILT and
108+
* the doorbell BAR).
109+
*/
110+
u32 min_dpis; /* number of requested DPIs */
111+
u32 num_mrs; /* number of requested memory regions */
112+
u32 num_qps; /* number of requested Queue Pairs */
113+
u32 num_srqs; /* number of requested SRQ */
114+
u8 roce_edpm_mode; /* see QED_ROCE_EDPM_MODE_ENABLE */
115+
u8 gl_pi; /* protocol index */
116+
117+
/* Will allocate rate limiters to be used with QPs */
118+
u8 enable_dcqcn;
119+
};
120+
61121
struct qed_pf_params {
62122
struct qed_eth_pf_params eth_pf_params;
123+
struct qed_iscsi_pf_params iscsi_pf_params;
124+
struct qed_rdma_pf_params rdma_pf_params;
63125
};
64126

65127
enum qed_int_mode {
@@ -100,6 +162,8 @@ struct qed_dev_info {
100162
/* MFW version */
101163
u32 mfw_rev;
102164

165+
bool rdma_supported;
166+
103167
u32 flash_size;
104168
u8 mf_mode;
105169
bool tx_switching;
@@ -111,6 +175,7 @@ enum qed_sb_type {
111175

112176
enum qed_protocol {
113177
QED_PROTOCOL_ETH,
178+
QED_PROTOCOL_ISCSI,
114179
};
115180

116181
struct qed_link_params {

0 commit comments

Comments
 (0)