qed: Acquire/release ptt_ptp lock when enabling/disabling PTP.
Move the code for acquiring/releasing ptt_ptp lock to ptp specific implementations i.e., ptp_enable()/disable() respectively. Signed-off-by: Sudarsana Reddy Kalluru <Sudarsana.Kalluru@cavium.com> Signed-off-by: Yuval Mintz <Yuval.Mintz@cavium.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
6a3ff0db13
commit
d179bd1699
|
@ -474,6 +474,11 @@ struct qed_hwfn {
|
||||||
struct qed_ptt *p_main_ptt;
|
struct qed_ptt *p_main_ptt;
|
||||||
struct qed_ptt *p_dpc_ptt;
|
struct qed_ptt *p_dpc_ptt;
|
||||||
|
|
||||||
|
/* PTP will be used only by the leading function.
|
||||||
|
* Usage of all PTP-apis should be synchronized as result.
|
||||||
|
*/
|
||||||
|
struct qed_ptt *p_ptp_ptt;
|
||||||
|
|
||||||
struct qed_sb_sp_info *p_sp_sb;
|
struct qed_sb_sp_info *p_sp_sb;
|
||||||
struct qed_sb_attn_info *p_sb_attn;
|
struct qed_sb_attn_info *p_sb_attn;
|
||||||
|
|
||||||
|
@ -532,8 +537,6 @@ struct qed_hwfn {
|
||||||
|
|
||||||
struct qed_ptt *p_arfs_ptt;
|
struct qed_ptt *p_arfs_ptt;
|
||||||
|
|
||||||
/* p_ptp_ptt is valid for leading HWFN only */
|
|
||||||
struct qed_ptt *p_ptp_ptt;
|
|
||||||
struct qed_simd_fp_handler simd_proto_handler[64];
|
struct qed_simd_fp_handler simd_proto_handler[64];
|
||||||
|
|
||||||
#ifdef CONFIG_QED_SRIOV
|
#ifdef CONFIG_QED_SRIOV
|
||||||
|
|
|
@ -956,13 +956,6 @@ static int qed_slowpath_start(struct qed_dev *cdev,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
p_ptt = qed_ptt_acquire(QED_LEADING_HWFN(cdev));
|
|
||||||
if (p_ptt) {
|
|
||||||
QED_LEADING_HWFN(cdev)->p_ptp_ptt = p_ptt;
|
|
||||||
} else {
|
|
||||||
DP_NOTICE(cdev, "Failed to acquire PTT for PTP\n");
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cdev->rx_coalesce_usecs = QED_DEFAULT_RX_USECS;
|
cdev->rx_coalesce_usecs = QED_DEFAULT_RX_USECS;
|
||||||
|
@ -1076,9 +1069,6 @@ err:
|
||||||
qed_ptt_release(QED_LEADING_HWFN(cdev),
|
qed_ptt_release(QED_LEADING_HWFN(cdev),
|
||||||
QED_LEADING_HWFN(cdev)->p_arfs_ptt);
|
QED_LEADING_HWFN(cdev)->p_arfs_ptt);
|
||||||
#endif
|
#endif
|
||||||
if (IS_PF(cdev) && QED_LEADING_HWFN(cdev)->p_ptp_ptt)
|
|
||||||
qed_ptt_release(QED_LEADING_HWFN(cdev),
|
|
||||||
QED_LEADING_HWFN(cdev)->p_ptp_ptt);
|
|
||||||
|
|
||||||
qed_iov_wq_stop(cdev, false);
|
qed_iov_wq_stop(cdev, false);
|
||||||
|
|
||||||
|
@ -1098,8 +1088,6 @@ static int qed_slowpath_stop(struct qed_dev *cdev)
|
||||||
qed_ptt_release(QED_LEADING_HWFN(cdev),
|
qed_ptt_release(QED_LEADING_HWFN(cdev),
|
||||||
QED_LEADING_HWFN(cdev)->p_arfs_ptt);
|
QED_LEADING_HWFN(cdev)->p_arfs_ptt);
|
||||||
#endif
|
#endif
|
||||||
qed_ptt_release(QED_LEADING_HWFN(cdev),
|
|
||||||
QED_LEADING_HWFN(cdev)->p_ptp_ptt);
|
|
||||||
qed_free_stream_mem(cdev);
|
qed_free_stream_mem(cdev);
|
||||||
if (IS_QED_ETH_IF(cdev))
|
if (IS_QED_ETH_IF(cdev))
|
||||||
qed_sriov_disable(cdev, true);
|
qed_sriov_disable(cdev, true);
|
||||||
|
|
|
@ -324,13 +324,23 @@ static int qed_ptp_hw_adjfreq(struct qed_dev *cdev, s32 ppb)
|
||||||
static int qed_ptp_hw_enable(struct qed_dev *cdev)
|
static int qed_ptp_hw_enable(struct qed_dev *cdev)
|
||||||
{
|
{
|
||||||
struct qed_hwfn *p_hwfn = QED_LEADING_HWFN(cdev);
|
struct qed_hwfn *p_hwfn = QED_LEADING_HWFN(cdev);
|
||||||
struct qed_ptt *p_ptt = p_hwfn->p_ptp_ptt;
|
struct qed_ptt *p_ptt;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
p_ptt = qed_ptt_acquire(p_hwfn);
|
||||||
|
if (!p_ptt) {
|
||||||
|
DP_NOTICE(p_hwfn, "Failed to acquire PTT for PTP\n");
|
||||||
|
return -EBUSY;
|
||||||
|
}
|
||||||
|
|
||||||
|
p_hwfn->p_ptp_ptt = p_ptt;
|
||||||
|
|
||||||
rc = qed_ptp_res_lock(p_hwfn, p_ptt);
|
rc = qed_ptp_res_lock(p_hwfn, p_ptt);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
DP_INFO(p_hwfn,
|
DP_INFO(p_hwfn,
|
||||||
"Couldn't acquire the resource lock, skip ptp enable for this PF\n");
|
"Couldn't acquire the resource lock, skip ptp enable for this PF\n");
|
||||||
|
qed_ptt_release(p_hwfn, p_ptt);
|
||||||
|
p_hwfn->p_ptp_ptt = NULL;
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -402,6 +412,9 @@ static int qed_ptp_hw_disable(struct qed_dev *cdev)
|
||||||
qed_wr(p_hwfn, p_ptt, NIG_REG_RX_PTP_EN, 0x0);
|
qed_wr(p_hwfn, p_ptt, NIG_REG_RX_PTP_EN, 0x0);
|
||||||
qed_wr(p_hwfn, p_ptt, NIG_REG_TX_PTP_EN, 0x0);
|
qed_wr(p_hwfn, p_ptt, NIG_REG_TX_PTP_EN, 0x0);
|
||||||
|
|
||||||
|
qed_ptt_release(p_hwfn, p_ptt);
|
||||||
|
p_hwfn->p_ptp_ptt = NULL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue