Linux-libre 4.9.88-gnu
[librecmc/linux-libre.git] / drivers / net / ethernet / qlogic / qed / qed_selftest.c
1 #include "qed.h"
2 #include "qed_dev_api.h"
3 #include "qed_mcp.h"
4 #include "qed_sp.h"
5 #include "qed_selftest.h"
6
7 int qed_selftest_memory(struct qed_dev *cdev)
8 {
9         int rc = 0, i;
10
11         for_each_hwfn(cdev, i) {
12                 rc = qed_sp_heartbeat_ramrod(&cdev->hwfns[i]);
13                 if (rc)
14                         return rc;
15         }
16
17         return rc;
18 }
19
20 int qed_selftest_interrupt(struct qed_dev *cdev)
21 {
22         int rc = 0, i;
23
24         for_each_hwfn(cdev, i) {
25                 rc = qed_sp_heartbeat_ramrod(&cdev->hwfns[i]);
26                 if (rc)
27                         return rc;
28         }
29
30         return rc;
31 }
32
33 int qed_selftest_register(struct qed_dev *cdev)
34 {
35         struct qed_hwfn *p_hwfn;
36         struct qed_ptt *p_ptt;
37         int rc = 0, i;
38
39         /* although performed by MCP, this test is per engine */
40         for_each_hwfn(cdev, i) {
41                 p_hwfn = &cdev->hwfns[i];
42                 p_ptt = qed_ptt_acquire(p_hwfn);
43                 if (!p_ptt) {
44                         DP_ERR(p_hwfn, "failed to acquire ptt\n");
45                         return -EBUSY;
46                 }
47                 rc = qed_mcp_bist_register_test(p_hwfn, p_ptt);
48                 qed_ptt_release(p_hwfn, p_ptt);
49                 if (rc)
50                         break;
51         }
52
53         return rc;
54 }
55
56 int qed_selftest_clock(struct qed_dev *cdev)
57 {
58         struct qed_hwfn *p_hwfn;
59         struct qed_ptt *p_ptt;
60         int rc = 0, i;
61
62         /* although performed by MCP, this test is per engine */
63         for_each_hwfn(cdev, i) {
64                 p_hwfn = &cdev->hwfns[i];
65                 p_ptt = qed_ptt_acquire(p_hwfn);
66                 if (!p_ptt) {
67                         DP_ERR(p_hwfn, "failed to acquire ptt\n");
68                         return -EBUSY;
69                 }
70                 rc = qed_mcp_bist_clock_test(p_hwfn, p_ptt);
71                 qed_ptt_release(p_hwfn, p_ptt);
72                 if (rc)
73                         break;
74         }
75
76         return rc;
77 }