1 // SPDX-License-Identifier: GPL-2.0+
2 /* Copyright (c) 2016-2017 Hisilicon Limited. */
6 static const struct hclge_hw_blk hw_blk[] = {
10 int hclge_hw_error_set_state(struct hclge_dev *hdev, bool state)
12 struct device *dev = &hdev->pdev->dev;
16 while (hw_blk[i].name) {
17 if (!hw_blk[i].enable_error) {
21 ret = hw_blk[i].enable_error(hdev, state);
23 dev_err(dev, "fail(%d) to en/disable err int\n", ret);
32 pci_ers_result_t hclge_process_ras_hw_error(struct hnae3_ae_dev *ae_dev)
34 struct hclge_dev *hdev = ae_dev->priv;
35 struct device *dev = &hdev->pdev->dev;
39 sts = hclge_read_dev(&hdev->hw, HCLGE_RAS_PF_OTHER_INT_STS_REG);
41 /* Processing Non-fatal errors */
42 if (sts & HCLGE_RAS_REG_NFE_MASK) {
43 val = (sts >> HCLGE_RAS_REG_NFE_SHIFT) & 0xFF;
45 while (hw_blk[i].name) {
46 if (!(hw_blk[i].msk & val)) {
50 dev_warn(dev, "%s ras non-fatal error identified\n",
52 if (hw_blk[i].process_error)
53 hw_blk[i].process_error(hdev,
54 HCLGE_ERR_INT_RAS_NFE);
59 return PCI_ERS_RESULT_NEED_RESET;