Skip to content

Commit 9971419

Browse files
shijujose4davem330
authored andcommitted
net: hns3: Add support to enable and disable hw errors
This patch adds functions to enable and disable hw errors. Signed-off-by: Shiju Jose <[email protected]> Signed-off-by: Salil Mehta <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 6ae4e73 commit 9971419

File tree

3 files changed

+32
-0
lines changed

3 files changed

+32
-0
lines changed

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_err.c

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,28 @@ static const struct hclge_hw_blk hw_blk[] = {
77
{ /* sentinel */ }
88
};
99

10+
int hclge_hw_error_set_state(struct hclge_dev *hdev, bool state)
11+
{
12+
struct device *dev = &hdev->pdev->dev;
13+
int ret = 0;
14+
int i = 0;
15+
16+
while (hw_blk[i].name) {
17+
if (!hw_blk[i].enable_error) {
18+
i++;
19+
continue;
20+
}
21+
ret = hw_blk[i].enable_error(hdev, state);
22+
if (ret) {
23+
dev_err(dev, "fail(%d) to en/disable err int\n", ret);
24+
return ret;
25+
}
26+
i++;
27+
}
28+
29+
return ret;
30+
}
31+
1032
pci_ers_result_t hclge_process_ras_hw_error(struct hnae3_ae_dev *ae_dev)
1133
{
1234
struct hclge_dev *hdev = ae_dev->priv;

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_err.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,11 @@ enum hclge_err_int_type {
2121
struct hclge_hw_blk {
2222
u32 msk;
2323
const char *name;
24+
int (*enable_error)(struct hclge_dev *hdev, bool en);
2425
void (*process_error)(struct hclge_dev *hdev,
2526
enum hclge_err_int_type type);
2627
};
2728

29+
int hclge_hw_error_set_state(struct hclge_dev *hdev, bool state);
2830
pci_ers_result_t hclge_process_ras_hw_error(struct hnae3_ae_dev *ae_dev);
2931
#endif

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6759,6 +6759,13 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev)
67596759
goto err_mdiobus_unreg;
67606760
}
67616761

6762+
ret = hclge_hw_error_set_state(hdev, true);
6763+
if (ret) {
6764+
dev_err(&pdev->dev,
6765+
"hw error interrupts enable failed, ret =%d\n", ret);
6766+
goto err_mdiobus_unreg;
6767+
}
6768+
67626769
hclge_dcb_ops_set(hdev);
67636770

67646771
timer_setup(&hdev->service_timer, hclge_service_timer, 0);
@@ -6896,6 +6903,7 @@ static void hclge_uninit_ae_dev(struct hnae3_ae_dev *ae_dev)
68966903
hclge_enable_vector(&hdev->misc_vector, false);
68976904
synchronize_irq(hdev->misc_vector.vector_irq);
68986905

6906+
hclge_hw_error_set_state(hdev, false);
68996907
hclge_destroy_cmd_queue(&hdev->hw);
69006908
hclge_misc_irq_uninit(hdev);
69016909
hclge_pci_uninit(hdev);

0 commit comments

Comments
 (0)