common/octeontx2: support CNF95xx SoC
[dpdk.git] / drivers / common / octeontx2 / otx2_common.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2019 Marvell International Ltd.
3  */
4
5 #ifndef _OTX2_COMMON_H_
6 #define _OTX2_COMMON_H_
7
8 #include <rte_atomic.h>
9 #include <rte_common.h>
10 #include <rte_cycles.h>
11 #include <rte_memory.h>
12 #include <rte_memzone.h>
13 #include <rte_io.h>
14
15 #include "hw/otx2_rvu.h"
16 #include "hw/otx2_nix.h"
17 #include "hw/otx2_npc.h"
18 #include "hw/otx2_npa.h"
19 #include "hw/otx2_sso.h"
20 #include "hw/otx2_ssow.h"
21 #include "hw/otx2_tim.h"
22
23 /* Alignment */
24 #define OTX2_ALIGN  128
25
26 /* Bits manipulation */
27 #ifndef BIT_ULL
28 #define BIT_ULL(nr) (1ULL << (nr))
29 #endif
30 #ifndef BIT
31 #define BIT(nr)     (1UL << (nr))
32 #endif
33
34 /* Compiler attributes */
35 #ifndef __hot
36 #define __hot   __attribute__((hot))
37 #endif
38
39 /* Intra device related functions */
40 struct otx2_npa_lf;
41 struct otx2_idev_cfg {
42         uint16_t sso_pf_func;
43         uint16_t npa_pf_func;
44         struct otx2_npa_lf *npa_lf;
45         RTE_STD_C11
46         union {
47                 rte_atomic16_t npa_refcnt;
48                 uint16_t npa_refcnt_u16;
49         };
50 };
51
52 struct otx2_idev_cfg *otx2_intra_dev_get_cfg(void);
53 void otx2_sso_pf_func_set(uint16_t sso_pf_func);
54 uint16_t otx2_sso_pf_func_get(void);
55 uint16_t otx2_npa_pf_func_get(void);
56 struct otx2_npa_lf *otx2_npa_lf_obj_get(void);
57 void otx2_npa_set_defaults(struct otx2_idev_cfg *idev);
58 int otx2_npa_lf_active(void *dev);
59 int otx2_npa_lf_obj_ref(void);
60
61 /* Log */
62 extern int otx2_logtype_base;
63 extern int otx2_logtype_mbox;
64 extern int otx2_logtype_npa;
65 extern int otx2_logtype_nix;
66 extern int otx2_logtype_sso;
67 extern int otx2_logtype_npc;
68 extern int otx2_logtype_tm;
69 extern int otx2_logtype_tim;
70 extern int otx2_logtype_dpi;
71
72 #define OTX2_CLNRM  "\x1b[0m"
73 #define OTX2_CLRED  "\x1b[31m"
74
75 #define otx2_err(fmt, args...)                                          \
76         RTE_LOG(ERR, PMD, ""OTX2_CLRED"%s():%u " fmt OTX2_CLNRM"\n",    \
77                                 __func__, __LINE__, ## args)
78
79 #define otx2_info(fmt, args...)                                         \
80         RTE_LOG(INFO, PMD, fmt"\n", ## args)
81
82 #define otx2_dbg(subsystem, fmt, args...)                               \
83         rte_log(RTE_LOG_DEBUG, otx2_logtype_ ## subsystem,              \
84                 "[%s] %s():%u " fmt "\n",                               \
85                  #subsystem, __func__, __LINE__, ##args)
86
87 #define otx2_base_dbg(fmt, ...) otx2_dbg(base, fmt, ##__VA_ARGS__)
88 #define otx2_mbox_dbg(fmt, ...) otx2_dbg(mbox, fmt, ##__VA_ARGS__)
89 #define otx2_npa_dbg(fmt, ...) otx2_dbg(npa, fmt, ##__VA_ARGS__)
90 #define otx2_nix_dbg(fmt, ...) otx2_dbg(nix, fmt, ##__VA_ARGS__)
91 #define otx2_sso_dbg(fmt, ...) otx2_dbg(sso, fmt, ##__VA_ARGS__)
92 #define otx2_npc_dbg(fmt, ...) otx2_dbg(npc, fmt, ##__VA_ARGS__)
93 #define otx2_tm_dbg(fmt, ...) otx2_dbg(tm, fmt, ##__VA_ARGS__)
94 #define otx2_tim_dbg(fmt, ...) otx2_dbg(tim, fmt, ##__VA_ARGS__)
95 #define otx2_dpi_dbg(fmt, ...) otx2_dbg(dpi, fmt, ##__VA_ARGS__)
96
97 /* PCI IDs */
98 #define PCI_VENDOR_ID_CAVIUM                    0x177D
99 #define PCI_DEVID_OCTEONTX2_RVU_PF              0xA063
100 #define PCI_DEVID_OCTEONTX2_RVU_VF              0xA064
101 #define PCI_DEVID_OCTEONTX2_RVU_AF              0xA065
102 #define PCI_DEVID_OCTEONTX2_RVU_SSO_TIM_PF      0xA0F9
103 #define PCI_DEVID_OCTEONTX2_RVU_SSO_TIM_VF      0xA0FA
104 #define PCI_DEVID_OCTEONTX2_RVU_NPA_PF          0xA0FB
105 #define PCI_DEVID_OCTEONTX2_RVU_NPA_VF          0xA0FC
106 #define PCI_DEVID_OCTEONTX2_RVU_CPT_PF          0xA0FD
107 #define PCI_DEVID_OCTEONTX2_RVU_CPT_VF          0xA0FE
108 #define PCI_DEVID_OCTEONTX2_RVU_AF_VF           0xA0f8
109 #define PCI_DEVID_OCTEONTX2_DPI_VF              0xA081
110
111 /* Subsystem Device ID */
112 #define PCI_SUBSYS_DEVID_96XX_95XX              0xB200
113
114 /*
115  * REVID for RVU PCIe devices.
116  * Bits 0..1: minor pass
117  * Bits 3..2: major pass
118  * Bits 7..4: midr id, 0:96, 1:95, 2:loki, f:unknown
119  */
120
121 #define RVU_PCI_REV_MIDR_ID(rev_id)             (rev_id >> 4)
122 #define RVU_PCI_REV_MAJOR(rev_id)               ((rev_id >> 2) & 0x3)
123 #define RVU_PCI_REV_MINOR(rev_id)               (rev_id & 0x3)
124
125 #define RVU_PCI_CN96XX_MIDR_ID                  0x0
126 #define RVU_PCI_CNF95XX_MIDR_ID                 0x1
127
128 /* PCI Config offsets */
129 #define RVU_PCI_REVISION_ID                     0x08
130
131 /* IO Access */
132 #define otx2_read64(addr) rte_read64_relaxed((void *)(addr))
133 #define otx2_write64(val, addr) rte_write64_relaxed((val), (void *)(addr))
134
135 #if defined(RTE_ARCH_ARM64)
136 #include "otx2_io_arm64.h"
137 #else
138 #include "otx2_io_generic.h"
139 #endif
140
141 #endif /* _OTX2_COMMON_H_ */