Commit 7e50769c authored by Michal Kalderon's avatar Michal Kalderon Committed by David S. Miller

qed: Modify offload protocols to use the affined engine

To enable 100g support for offload protocols each PF gets
a dedicated engine to work on from the MFW.
This patch modifies the code to use the affined hwfn instead
of the leading one.
The offload protocols require the ll2 to be opened on both
engines, and not just the affined hwfn.
Signed-off-by: default avatarAriel Elior <ariel.elior@marvell.com>
Signed-off-by: default avatarMichal Kalderon <michal.kalderon@marvell.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 08eb1fb0
...@@ -745,7 +745,7 @@ struct qed_hash_fcoe_con { ...@@ -745,7 +745,7 @@ struct qed_hash_fcoe_con {
static int qed_fill_fcoe_dev_info(struct qed_dev *cdev, static int qed_fill_fcoe_dev_info(struct qed_dev *cdev,
struct qed_dev_fcoe_info *info) struct qed_dev_fcoe_info *info)
{ {
struct qed_hwfn *hwfn = QED_LEADING_HWFN(cdev); struct qed_hwfn *hwfn = QED_AFFIN_HWFN(cdev);
int rc; int rc;
memset(info, 0, sizeof(*info)); memset(info, 0, sizeof(*info));
...@@ -806,15 +806,15 @@ static int qed_fcoe_stop(struct qed_dev *cdev) ...@@ -806,15 +806,15 @@ static int qed_fcoe_stop(struct qed_dev *cdev)
return -EINVAL; return -EINVAL;
} }
p_ptt = qed_ptt_acquire(QED_LEADING_HWFN(cdev)); p_ptt = qed_ptt_acquire(QED_AFFIN_HWFN(cdev));
if (!p_ptt) if (!p_ptt)
return -EAGAIN; return -EAGAIN;
/* Stop the fcoe */ /* Stop the fcoe */
rc = qed_sp_fcoe_func_stop(QED_LEADING_HWFN(cdev), p_ptt, rc = qed_sp_fcoe_func_stop(QED_AFFIN_HWFN(cdev), p_ptt,
QED_SPQ_MODE_EBLOCK, NULL); QED_SPQ_MODE_EBLOCK, NULL);
cdev->flags &= ~QED_FLAG_STORAGE_STARTED; cdev->flags &= ~QED_FLAG_STORAGE_STARTED;
qed_ptt_release(QED_LEADING_HWFN(cdev), p_ptt); qed_ptt_release(QED_AFFIN_HWFN(cdev), p_ptt);
return rc; return rc;
} }
...@@ -828,8 +828,8 @@ static int qed_fcoe_start(struct qed_dev *cdev, struct qed_fcoe_tid *tasks) ...@@ -828,8 +828,8 @@ static int qed_fcoe_start(struct qed_dev *cdev, struct qed_fcoe_tid *tasks)
return 0; return 0;
} }
rc = qed_sp_fcoe_func_start(QED_LEADING_HWFN(cdev), rc = qed_sp_fcoe_func_start(QED_AFFIN_HWFN(cdev), QED_SPQ_MODE_EBLOCK,
QED_SPQ_MODE_EBLOCK, NULL); NULL);
if (rc) { if (rc) {
DP_NOTICE(cdev, "Failed to start fcoe\n"); DP_NOTICE(cdev, "Failed to start fcoe\n");
return rc; return rc;
...@@ -849,7 +849,7 @@ static int qed_fcoe_start(struct qed_dev *cdev, struct qed_fcoe_tid *tasks) ...@@ -849,7 +849,7 @@ static int qed_fcoe_start(struct qed_dev *cdev, struct qed_fcoe_tid *tasks)
return -ENOMEM; return -ENOMEM;
} }
rc = qed_cxt_get_tid_mem_info(QED_LEADING_HWFN(cdev), tid_info); rc = qed_cxt_get_tid_mem_info(QED_AFFIN_HWFN(cdev), tid_info);
if (rc) { if (rc) {
DP_NOTICE(cdev, "Failed to gather task information\n"); DP_NOTICE(cdev, "Failed to gather task information\n");
qed_fcoe_stop(cdev); qed_fcoe_stop(cdev);
...@@ -884,7 +884,7 @@ static int qed_fcoe_acquire_conn(struct qed_dev *cdev, ...@@ -884,7 +884,7 @@ static int qed_fcoe_acquire_conn(struct qed_dev *cdev,
} }
/* Acquire the connection */ /* Acquire the connection */
rc = qed_fcoe_acquire_connection(QED_LEADING_HWFN(cdev), NULL, rc = qed_fcoe_acquire_connection(QED_AFFIN_HWFN(cdev), NULL,
&hash_con->con); &hash_con->con);
if (rc) { if (rc) {
DP_NOTICE(cdev, "Failed to acquire Connection\n"); DP_NOTICE(cdev, "Failed to acquire Connection\n");
...@@ -898,7 +898,7 @@ static int qed_fcoe_acquire_conn(struct qed_dev *cdev, ...@@ -898,7 +898,7 @@ static int qed_fcoe_acquire_conn(struct qed_dev *cdev,
hash_add(cdev->connections, &hash_con->node, *handle); hash_add(cdev->connections, &hash_con->node, *handle);
if (p_doorbell) if (p_doorbell)
*p_doorbell = qed_fcoe_get_db_addr(QED_LEADING_HWFN(cdev), *p_doorbell = qed_fcoe_get_db_addr(QED_AFFIN_HWFN(cdev),
*handle); *handle);
return 0; return 0;
...@@ -916,7 +916,7 @@ static int qed_fcoe_release_conn(struct qed_dev *cdev, u32 handle) ...@@ -916,7 +916,7 @@ static int qed_fcoe_release_conn(struct qed_dev *cdev, u32 handle)
} }
hlist_del(&hash_con->node); hlist_del(&hash_con->node);
qed_fcoe_release_connection(QED_LEADING_HWFN(cdev), hash_con->con); qed_fcoe_release_connection(QED_AFFIN_HWFN(cdev), hash_con->con);
kfree(hash_con); kfree(hash_con);
return 0; return 0;
...@@ -971,7 +971,7 @@ static int qed_fcoe_offload_conn(struct qed_dev *cdev, ...@@ -971,7 +971,7 @@ static int qed_fcoe_offload_conn(struct qed_dev *cdev,
con->d_id.addr_mid = conn_info->d_id.addr_mid; con->d_id.addr_mid = conn_info->d_id.addr_mid;
con->d_id.addr_lo = conn_info->d_id.addr_lo; con->d_id.addr_lo = conn_info->d_id.addr_lo;
return qed_sp_fcoe_conn_offload(QED_LEADING_HWFN(cdev), con, return qed_sp_fcoe_conn_offload(QED_AFFIN_HWFN(cdev), con,
QED_SPQ_MODE_EBLOCK, NULL); QED_SPQ_MODE_EBLOCK, NULL);
} }
...@@ -992,13 +992,13 @@ static int qed_fcoe_destroy_conn(struct qed_dev *cdev, ...@@ -992,13 +992,13 @@ static int qed_fcoe_destroy_conn(struct qed_dev *cdev,
con = hash_con->con; con = hash_con->con;
con->terminate_params = terminate_params; con->terminate_params = terminate_params;
return qed_sp_fcoe_conn_destroy(QED_LEADING_HWFN(cdev), con, return qed_sp_fcoe_conn_destroy(QED_AFFIN_HWFN(cdev), con,
QED_SPQ_MODE_EBLOCK, NULL); QED_SPQ_MODE_EBLOCK, NULL);
} }
static int qed_fcoe_stats(struct qed_dev *cdev, struct qed_fcoe_stats *stats) static int qed_fcoe_stats(struct qed_dev *cdev, struct qed_fcoe_stats *stats)
{ {
return qed_fcoe_get_stats(QED_LEADING_HWFN(cdev), stats); return qed_fcoe_get_stats(QED_AFFIN_HWFN(cdev), stats);
} }
void qed_get_protocol_stats_fcoe(struct qed_dev *cdev, void qed_get_protocol_stats_fcoe(struct qed_dev *cdev,
......
...@@ -1082,7 +1082,7 @@ struct qed_hash_iscsi_con { ...@@ -1082,7 +1082,7 @@ struct qed_hash_iscsi_con {
static int qed_fill_iscsi_dev_info(struct qed_dev *cdev, static int qed_fill_iscsi_dev_info(struct qed_dev *cdev,
struct qed_dev_iscsi_info *info) struct qed_dev_iscsi_info *info)
{ {
struct qed_hwfn *hwfn = QED_LEADING_HWFN(cdev); struct qed_hwfn *hwfn = QED_AFFIN_HWFN(cdev);
int rc; int rc;
...@@ -1141,8 +1141,8 @@ static int qed_iscsi_stop(struct qed_dev *cdev) ...@@ -1141,8 +1141,8 @@ static int qed_iscsi_stop(struct qed_dev *cdev)
} }
/* Stop the iscsi */ /* Stop the iscsi */
rc = qed_sp_iscsi_func_stop(QED_LEADING_HWFN(cdev), rc = qed_sp_iscsi_func_stop(QED_AFFIN_HWFN(cdev), QED_SPQ_MODE_EBLOCK,
QED_SPQ_MODE_EBLOCK, NULL); NULL);
cdev->flags &= ~QED_FLAG_STORAGE_STARTED; cdev->flags &= ~QED_FLAG_STORAGE_STARTED;
return rc; return rc;
...@@ -1161,9 +1161,8 @@ static int qed_iscsi_start(struct qed_dev *cdev, ...@@ -1161,9 +1161,8 @@ static int qed_iscsi_start(struct qed_dev *cdev,
return 0; return 0;
} }
rc = qed_sp_iscsi_func_start(QED_LEADING_HWFN(cdev), rc = qed_sp_iscsi_func_start(QED_AFFIN_HWFN(cdev), QED_SPQ_MODE_EBLOCK,
QED_SPQ_MODE_EBLOCK, NULL, event_context, NULL, event_context, async_event_cb);
async_event_cb);
if (rc) { if (rc) {
DP_NOTICE(cdev, "Failed to start iscsi\n"); DP_NOTICE(cdev, "Failed to start iscsi\n");
return rc; return rc;
...@@ -1182,8 +1181,7 @@ static int qed_iscsi_start(struct qed_dev *cdev, ...@@ -1182,8 +1181,7 @@ static int qed_iscsi_start(struct qed_dev *cdev,
return -ENOMEM; return -ENOMEM;
} }
rc = qed_cxt_get_tid_mem_info(QED_LEADING_HWFN(cdev), rc = qed_cxt_get_tid_mem_info(QED_AFFIN_HWFN(cdev), tid_info);
tid_info);
if (rc) { if (rc) {
DP_NOTICE(cdev, "Failed to gather task information\n"); DP_NOTICE(cdev, "Failed to gather task information\n");
qed_iscsi_stop(cdev); qed_iscsi_stop(cdev);
...@@ -1215,7 +1213,7 @@ static int qed_iscsi_acquire_conn(struct qed_dev *cdev, ...@@ -1215,7 +1213,7 @@ static int qed_iscsi_acquire_conn(struct qed_dev *cdev,
return -ENOMEM; return -ENOMEM;
/* Acquire the connection */ /* Acquire the connection */
rc = qed_iscsi_acquire_connection(QED_LEADING_HWFN(cdev), NULL, rc = qed_iscsi_acquire_connection(QED_AFFIN_HWFN(cdev), NULL,
&hash_con->con); &hash_con->con);
if (rc) { if (rc) {
DP_NOTICE(cdev, "Failed to acquire Connection\n"); DP_NOTICE(cdev, "Failed to acquire Connection\n");
...@@ -1229,7 +1227,7 @@ static int qed_iscsi_acquire_conn(struct qed_dev *cdev, ...@@ -1229,7 +1227,7 @@ static int qed_iscsi_acquire_conn(struct qed_dev *cdev,
hash_add(cdev->connections, &hash_con->node, *handle); hash_add(cdev->connections, &hash_con->node, *handle);
if (p_doorbell) if (p_doorbell)
*p_doorbell = qed_iscsi_get_db_addr(QED_LEADING_HWFN(cdev), *p_doorbell = qed_iscsi_get_db_addr(QED_AFFIN_HWFN(cdev),
*handle); *handle);
return 0; return 0;
...@@ -1247,7 +1245,7 @@ static int qed_iscsi_release_conn(struct qed_dev *cdev, u32 handle) ...@@ -1247,7 +1245,7 @@ static int qed_iscsi_release_conn(struct qed_dev *cdev, u32 handle)
} }
hlist_del(&hash_con->node); hlist_del(&hash_con->node);
qed_iscsi_release_connection(QED_LEADING_HWFN(cdev), hash_con->con); qed_iscsi_release_connection(QED_AFFIN_HWFN(cdev), hash_con->con);
kfree(hash_con); kfree(hash_con);
return 0; return 0;
...@@ -1324,7 +1322,7 @@ static int qed_iscsi_offload_conn(struct qed_dev *cdev, ...@@ -1324,7 +1322,7 @@ static int qed_iscsi_offload_conn(struct qed_dev *cdev,
/* Set default values on other connection fields */ /* Set default values on other connection fields */
con->offl_flags = 0x1; con->offl_flags = 0x1;
return qed_sp_iscsi_conn_offload(QED_LEADING_HWFN(cdev), con, return qed_sp_iscsi_conn_offload(QED_AFFIN_HWFN(cdev), con,
QED_SPQ_MODE_EBLOCK, NULL); QED_SPQ_MODE_EBLOCK, NULL);
} }
...@@ -1351,7 +1349,7 @@ static int qed_iscsi_update_conn(struct qed_dev *cdev, ...@@ -1351,7 +1349,7 @@ static int qed_iscsi_update_conn(struct qed_dev *cdev,
con->first_seq_length = conn_info->first_seq_length; con->first_seq_length = conn_info->first_seq_length;
con->exp_stat_sn = conn_info->exp_stat_sn; con->exp_stat_sn = conn_info->exp_stat_sn;
return qed_sp_iscsi_conn_update(QED_LEADING_HWFN(cdev), con, return qed_sp_iscsi_conn_update(QED_AFFIN_HWFN(cdev), con,
QED_SPQ_MODE_EBLOCK, NULL); QED_SPQ_MODE_EBLOCK, NULL);
} }
...@@ -1366,8 +1364,7 @@ static int qed_iscsi_clear_conn_sq(struct qed_dev *cdev, u32 handle) ...@@ -1366,8 +1364,7 @@ static int qed_iscsi_clear_conn_sq(struct qed_dev *cdev, u32 handle)
return -EINVAL; return -EINVAL;
} }
return qed_sp_iscsi_conn_clear_sq(QED_LEADING_HWFN(cdev), return qed_sp_iscsi_conn_clear_sq(QED_AFFIN_HWFN(cdev), hash_con->con,
hash_con->con,
QED_SPQ_MODE_EBLOCK, NULL); QED_SPQ_MODE_EBLOCK, NULL);
} }
...@@ -1385,14 +1382,13 @@ static int qed_iscsi_destroy_conn(struct qed_dev *cdev, ...@@ -1385,14 +1382,13 @@ static int qed_iscsi_destroy_conn(struct qed_dev *cdev,
hash_con->con->abortive_dsconnect = abrt_conn; hash_con->con->abortive_dsconnect = abrt_conn;
return qed_sp_iscsi_conn_terminate(QED_LEADING_HWFN(cdev), return qed_sp_iscsi_conn_terminate(QED_AFFIN_HWFN(cdev), hash_con->con,
hash_con->con,
QED_SPQ_MODE_EBLOCK, NULL); QED_SPQ_MODE_EBLOCK, NULL);
} }
static int qed_iscsi_stats(struct qed_dev *cdev, struct qed_iscsi_stats *stats) static int qed_iscsi_stats(struct qed_dev *cdev, struct qed_iscsi_stats *stats)
{ {
return qed_iscsi_get_stats(QED_LEADING_HWFN(cdev), stats); return qed_iscsi_get_stats(QED_AFFIN_HWFN(cdev), stats);
} }
static int qed_iscsi_change_mac(struct qed_dev *cdev, static int qed_iscsi_change_mac(struct qed_dev *cdev,
...@@ -1407,8 +1403,7 @@ static int qed_iscsi_change_mac(struct qed_dev *cdev, ...@@ -1407,8 +1403,7 @@ static int qed_iscsi_change_mac(struct qed_dev *cdev,
return -EINVAL; return -EINVAL;
} }
return qed_sp_iscsi_mac_update(QED_LEADING_HWFN(cdev), return qed_sp_iscsi_mac_update(QED_AFFIN_HWFN(cdev), hash_con->con,
hash_con->con,
QED_SPQ_MODE_EBLOCK, NULL); QED_SPQ_MODE_EBLOCK, NULL);
} }
......
This diff is collapsed.
...@@ -818,14 +818,17 @@ static struct qed_rdma_port *qed_rdma_query_port(void *rdma_cxt) ...@@ -818,14 +818,17 @@ static struct qed_rdma_port *qed_rdma_query_port(void *rdma_cxt)
{ {
struct qed_hwfn *p_hwfn = (struct qed_hwfn *)rdma_cxt; struct qed_hwfn *p_hwfn = (struct qed_hwfn *)rdma_cxt;
struct qed_rdma_port *p_port = p_hwfn->p_rdma_info->port; struct qed_rdma_port *p_port = p_hwfn->p_rdma_info->port;
struct qed_mcp_link_state *p_link_output;
DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "RDMA Query port\n"); DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "RDMA Query port\n");
/* Link may have changed */ /* The link state is saved only for the leading hwfn */
p_port->port_state = p_hwfn->mcp_info->link_output.link_up ? p_link_output = &QED_LEADING_HWFN(p_hwfn->cdev)->mcp_info->link_output;
QED_RDMA_PORT_UP : QED_RDMA_PORT_DOWN;
p_port->link_speed = p_hwfn->mcp_info->link_output.speed; p_port->port_state = p_link_output->link_up ? QED_RDMA_PORT_UP
: QED_RDMA_PORT_DOWN;
p_port->link_speed = p_link_output->speed;
p_port->max_msg_size = RDMA_MAX_DATA_SIZE_IN_WQE; p_port->max_msg_size = RDMA_MAX_DATA_SIZE_IN_WQE;
...@@ -870,7 +873,7 @@ static void qed_rdma_cnq_prod_update(void *rdma_cxt, u8 qz_offset, u16 prod) ...@@ -870,7 +873,7 @@ static void qed_rdma_cnq_prod_update(void *rdma_cxt, u8 qz_offset, u16 prod)
static int qed_fill_rdma_dev_info(struct qed_dev *cdev, static int qed_fill_rdma_dev_info(struct qed_dev *cdev,
struct qed_dev_rdma_info *info) struct qed_dev_rdma_info *info)
{ {
struct qed_hwfn *p_hwfn = QED_LEADING_HWFN(cdev); struct qed_hwfn *p_hwfn = QED_AFFIN_HWFN(cdev);
memset(info, 0, sizeof(*info)); memset(info, 0, sizeof(*info));
...@@ -889,9 +892,9 @@ static int qed_rdma_get_sb_start(struct qed_dev *cdev) ...@@ -889,9 +892,9 @@ static int qed_rdma_get_sb_start(struct qed_dev *cdev)
int feat_num; int feat_num;
if (cdev->num_hwfns > 1) if (cdev->num_hwfns > 1)
feat_num = FEAT_NUM(QED_LEADING_HWFN(cdev), QED_PF_L2_QUE); feat_num = FEAT_NUM(QED_AFFIN_HWFN(cdev), QED_PF_L2_QUE);
else else
feat_num = FEAT_NUM(QED_LEADING_HWFN(cdev), QED_PF_L2_QUE) * feat_num = FEAT_NUM(QED_AFFIN_HWFN(cdev), QED_PF_L2_QUE) *
cdev->num_hwfns; cdev->num_hwfns;
return feat_num; return feat_num;
...@@ -899,7 +902,7 @@ static int qed_rdma_get_sb_start(struct qed_dev *cdev) ...@@ -899,7 +902,7 @@ static int qed_rdma_get_sb_start(struct qed_dev *cdev)
static int qed_rdma_get_min_cnq_msix(struct qed_dev *cdev) static int qed_rdma_get_min_cnq_msix(struct qed_dev *cdev)
{ {
int n_cnq = FEAT_NUM(QED_LEADING_HWFN(cdev), QED_RDMA_CNQ); int n_cnq = FEAT_NUM(QED_AFFIN_HWFN(cdev), QED_RDMA_CNQ);
int n_msix = cdev->int_params.rdma_msix_cnt; int n_msix = cdev->int_params.rdma_msix_cnt;
return min_t(int, n_cnq, n_msix); return min_t(int, n_cnq, n_msix);
...@@ -1653,7 +1656,7 @@ static int qed_rdma_deregister_tid(void *rdma_cxt, u32 itid) ...@@ -1653,7 +1656,7 @@ static int qed_rdma_deregister_tid(void *rdma_cxt, u32 itid)
static void *qed_rdma_get_rdma_ctx(struct qed_dev *cdev) static void *qed_rdma_get_rdma_ctx(struct qed_dev *cdev)
{ {
return QED_LEADING_HWFN(cdev); return QED_AFFIN_HWFN(cdev);
} }
static int qed_rdma_modify_srq(void *rdma_cxt, static int qed_rdma_modify_srq(void *rdma_cxt,
...@@ -1881,7 +1884,7 @@ static int qed_rdma_start(void *rdma_cxt, ...@@ -1881,7 +1884,7 @@ static int qed_rdma_start(void *rdma_cxt,
static int qed_rdma_init(struct qed_dev *cdev, static int qed_rdma_init(struct qed_dev *cdev,
struct qed_rdma_start_in_params *params) struct qed_rdma_start_in_params *params)
{ {
return qed_rdma_start(QED_LEADING_HWFN(cdev), params); return qed_rdma_start(QED_AFFIN_HWFN(cdev), params);
} }
static void qed_rdma_remove_user(void *rdma_cxt, u16 dpi) static void qed_rdma_remove_user(void *rdma_cxt, u16 dpi)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment