| From 08689438c64d3dccf15fd66908e478463dc4c873 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 22 Jul 2025 20:54:21 +0800 |
| Subject: net: hns3: disable interrupt when ptp init failed |
| |
| From: Yonglong Liu <liuyonglong@huawei.com> |
| |
| [ Upstream commit cde304655f25d94a996c45b0f9956e7dcc2bc4c0 ] |
| |
| When ptp init failed, we'd better disable the interrupt and clear the |
| flag, to avoid early report interrupt at next probe. |
| |
| Fixes: 0bf5eb788512 ("net: hns3: add support for PTP") |
| Signed-off-by: Yonglong Liu <liuyonglong@huawei.com> |
| Signed-off-by: Jijie Shao <shaojijie@huawei.com> |
| Reviewed-by: Simon Horman <horms@kernel.org> |
| Link: https://patch.msgid.link/20250722125423.1270673-3-shaojijie@huawei.com |
| Signed-off-by: Paolo Abeni <pabeni@redhat.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_ptp.c | 9 ++++++--- |
| 1 file changed, 6 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_ptp.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_ptp.c |
| index b7cf9fbf97183..6d7aeac600128 100644 |
| --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_ptp.c |
| +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_ptp.c |
| @@ -509,14 +509,14 @@ int hclge_ptp_init(struct hclge_dev *hdev) |
| if (ret) { |
| dev_err(&hdev->pdev->dev, |
| "failed to init freq, ret = %d\n", ret); |
| - goto out; |
| + goto out_clear_int; |
| } |
| |
| ret = hclge_ptp_set_ts_mode(hdev, &hdev->ptp->ts_cfg); |
| if (ret) { |
| dev_err(&hdev->pdev->dev, |
| "failed to init ts mode, ret = %d\n", ret); |
| - goto out; |
| + goto out_clear_int; |
| } |
| |
| ktime_get_real_ts64(&ts); |
| @@ -524,7 +524,7 @@ int hclge_ptp_init(struct hclge_dev *hdev) |
| if (ret) { |
| dev_err(&hdev->pdev->dev, |
| "failed to init ts time, ret = %d\n", ret); |
| - goto out; |
| + goto out_clear_int; |
| } |
| |
| set_bit(HCLGE_STATE_PTP_EN, &hdev->state); |
| @@ -532,6 +532,9 @@ int hclge_ptp_init(struct hclge_dev *hdev) |
| |
| return 0; |
| |
| +out_clear_int: |
| + clear_bit(HCLGE_PTP_FLAG_EN, &hdev->ptp->flags); |
| + hclge_ptp_int_en(hdev, false); |
| out: |
| hclge_ptp_destroy_clock(hdev); |
| |
| -- |
| 2.39.5 |
| |