34374ae4b6450f647f55a3dfcea955f5fb170df3
[dpdk.git] / drivers / bus / fslmc / qbman / qbman_debug.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright (C) 2015 Freescale Semiconductor, Inc.
3  */
4
5 #include "compat.h"
6 #include <fsl_qbman_debug.h>
7 #include "qbman_portal.h"
8
9 /* QBMan portal management command code */
10 #define QBMAN_BP_QUERY            0x32
11 #define QBMAN_FQ_QUERY            0x44
12 #define QBMAN_FQ_QUERY_NP         0x45
13 #define QBMAN_WQ_QUERY            0x47
14 #define QBMAN_CGR_QUERY           0x51
15 #define QBMAN_WRED_QUERY          0x54
16 #define QBMAN_CGR_STAT_QUERY      0x55
17 #define QBMAN_CGR_STAT_QUERY_CLR  0x56
18
19 struct qbman_fq_query_desc {
20         uint8_t verb;
21         uint8_t reserved[3];
22         uint32_t fqid;
23         uint8_t reserved2[56];
24 };
25
26 int qbman_fq_query_state(struct qbman_swp *s, uint32_t fqid,
27                          struct qbman_fq_query_np_rslt *r)
28 {
29         struct qbman_fq_query_desc *p;
30         struct qbman_fq_query_np_rslt *var;
31
32         p = (struct qbman_fq_query_desc *)qbman_swp_mc_start(s);
33         if (!p)
34                 return -EBUSY;
35
36         p->fqid = fqid;
37         var = qbman_swp_mc_complete(s, p, QBMAN_FQ_QUERY_NP);
38         if (!var) {
39                 pr_err("qbman: Query FQID %d NP fields failed, no response\n",
40                        fqid);
41                 return -EIO;
42         }
43         *r = *var;
44
45         /* Decode the outcome */
46         QBMAN_BUG_ON((r->verb & QBMAN_RESPONSE_VERB_MASK) != QBMAN_FQ_QUERY_NP);
47
48         /* Determine success or failure */
49         if (r->rslt != QBMAN_MC_RSLT_OK) {
50                 pr_err("Query NP fields of FQID 0x%x failed, code=0x%02x\n",
51                        fqid, r->rslt);
52                 return -EIO;
53         }
54
55         return 0;
56 }
57
58 uint32_t qbman_fq_state_frame_count(const struct qbman_fq_query_np_rslt *r)
59 {
60         return (r->frm_cnt & 0x00FFFFFF);
61 }
62
63 uint32_t qbman_fq_state_byte_count(const struct qbman_fq_query_np_rslt *r)
64 {
65         return r->byte_cnt;
66 }