xref: /freebsd/sys/dev/qat/include/adf_gen4vf_hw_csr_data.h (revision 71625ec9ad2a9bc8c09784fbd23b759830e0ee5f)
1*266b0663SKrzysztof Zdziarski /* SPDX-License-Identifier: BSD-3-Clause */
2*266b0663SKrzysztof Zdziarski /* Copyright(c) 2007-2022 Intel Corporation */
3*266b0663SKrzysztof Zdziarski #ifndef ADF_GEN4VF_HW_CSR_DATA_H_
4*266b0663SKrzysztof Zdziarski #define ADF_GEN4VF_HW_CSR_DATA_H_
5*266b0663SKrzysztof Zdziarski 
6*266b0663SKrzysztof Zdziarski #define ADF_RING_CSR_ADDR_OFFSET_GEN4VF 0x0
7*266b0663SKrzysztof Zdziarski #define ADF_RING_BUNDLE_SIZE_GEN4 0x2000
8*266b0663SKrzysztof Zdziarski #define ADF_RING_CSR_RING_HEAD 0x0C0
9*266b0663SKrzysztof Zdziarski #define ADF_RING_CSR_RING_TAIL 0x100
10*266b0663SKrzysztof Zdziarski #define ADF_RING_CSR_E_STAT 0x14C
11*266b0663SKrzysztof Zdziarski #define ADF_RING_CSR_RING_CONFIG_GEN4 0x1000
12*266b0663SKrzysztof Zdziarski #define ADF_RING_CSR_RING_LBASE_GEN4 0x1040
13*266b0663SKrzysztof Zdziarski #define ADF_RING_CSR_RING_UBASE_GEN4 0x1080
14*266b0663SKrzysztof Zdziarski #define ADF_RING_CSR_INT_FLAG 0x170
15*266b0663SKrzysztof Zdziarski #define ADF_RING_CSR_INT_FLAG_AND_COL 0x184
16*266b0663SKrzysztof Zdziarski #define ADF_RING_CSR_NEXT_INT_SRCSEL 0x4
17*266b0663SKrzysztof Zdziarski #define ADF_RING_CSR_INT_SRCSEL 0x174
18*266b0663SKrzysztof Zdziarski #define ADF_RING_CSR_INT_COL_EN 0x17C
19*266b0663SKrzysztof Zdziarski #define ADF_RING_CSR_INT_COL_CTL 0x180
20*266b0663SKrzysztof Zdziarski #define ADF_RING_CSR_RING_SRV_ARB_EN 0x19C
21*266b0663SKrzysztof Zdziarski #define ADF_BANK_INT_SRC_SEL_MASK_GEN4 0x44UL
22*266b0663SKrzysztof Zdziarski #define ADF_RING_CSR_INT_COL_CTL_ENABLE 0x80000000
23*266b0663SKrzysztof Zdziarski #define ADF_BANK_INT_FLAG_CLEAR_MASK_GEN4 0x3
24*266b0663SKrzysztof Zdziarski #define ADF_RINGS_PER_INT_SRCSEL_GEN4 2
25*266b0663SKrzysztof Zdziarski 
26*266b0663SKrzysztof Zdziarski #define BUILD_RING_BASE_ADDR_GEN4(addr, size)                                  \
27*266b0663SKrzysztof Zdziarski 	((((addr) >> 6) & (0xFFFFFFFFFFFFFFFFULL << (size))) << 6)
28*266b0663SKrzysztof Zdziarski #define READ_CSR_RING_HEAD_GEN4VF(csr_base_addr, bank, ring)                   \
29*266b0663SKrzysztof Zdziarski 	ADF_CSR_RD((csr_base_addr),                                            \
30*266b0663SKrzysztof Zdziarski 		   (ADF_RING_CSR_ADDR_OFFSET_GEN4VF +                          \
31*266b0663SKrzysztof Zdziarski 		    ADF_RING_BUNDLE_SIZE_GEN4 * (bank)) +                      \
32*266b0663SKrzysztof Zdziarski 		       ADF_RING_CSR_RING_HEAD + ((ring) << 2))
33*266b0663SKrzysztof Zdziarski #define READ_CSR_RING_TAIL_GEN4VF(csr_base_addr, bank, ring)                   \
34*266b0663SKrzysztof Zdziarski 	ADF_CSR_RD((csr_base_addr),                                            \
35*266b0663SKrzysztof Zdziarski 		   (ADF_RING_CSR_ADDR_OFFSET_GEN4VF +                          \
36*266b0663SKrzysztof Zdziarski 		    ADF_RING_BUNDLE_SIZE_GEN4 * (bank)) +                      \
37*266b0663SKrzysztof Zdziarski 		       ADF_RING_CSR_RING_TAIL + ((ring) << 2))
38*266b0663SKrzysztof Zdziarski #define READ_CSR_E_STAT_GEN4VF(csr_base_addr, bank)                            \
39*266b0663SKrzysztof Zdziarski 	ADF_CSR_RD((csr_base_addr),                                            \
40*266b0663SKrzysztof Zdziarski 		   (ADF_RING_CSR_ADDR_OFFSET_GEN4VF +                          \
41*266b0663SKrzysztof Zdziarski 		    ADF_RING_BUNDLE_SIZE_GEN4 * (bank)) +                      \
42*266b0663SKrzysztof Zdziarski 		       ADF_RING_CSR_E_STAT)
43*266b0663SKrzysztof Zdziarski #define WRITE_CSR_RING_CONFIG_GEN4VF(csr_base_addr, bank, ring, value)         \
44*266b0663SKrzysztof Zdziarski 	ADF_CSR_WR((csr_base_addr),                                            \
45*266b0663SKrzysztof Zdziarski 		   (ADF_RING_CSR_ADDR_OFFSET_GEN4VF +                          \
46*266b0663SKrzysztof Zdziarski 		    ADF_RING_BUNDLE_SIZE_GEN4 * (bank)) +                      \
47*266b0663SKrzysztof Zdziarski 		       ADF_RING_CSR_RING_CONFIG_GEN4 + ((ring) << 2),          \
48*266b0663SKrzysztof Zdziarski 		   (value))
49*266b0663SKrzysztof Zdziarski #define WRITE_CSR_RING_BASE_GEN4VF(csr_base_addr, bank, ring, value)           \
50*266b0663SKrzysztof Zdziarski 	do {                                                                   \
51*266b0663SKrzysztof Zdziarski 		struct resource *_csr_base_addr = csr_base_addr;               \
52*266b0663SKrzysztof Zdziarski 		u32 _bank = bank;                                              \
53*266b0663SKrzysztof Zdziarski 		u32 _ring = ring;                                              \
54*266b0663SKrzysztof Zdziarski 		dma_addr_t _value = value;                                     \
55*266b0663SKrzysztof Zdziarski 		u32 l_base = 0, u_base = 0;                                    \
56*266b0663SKrzysztof Zdziarski 		l_base = (u32)((_value)&0xFFFFFFFF);                           \
57*266b0663SKrzysztof Zdziarski 		u_base = (u32)(((_value)&0xFFFFFFFF00000000ULL) >> 32);        \
58*266b0663SKrzysztof Zdziarski 		ADF_CSR_WR((_csr_base_addr),                                   \
59*266b0663SKrzysztof Zdziarski 			   (ADF_RING_CSR_ADDR_OFFSET_GEN4VF +                  \
60*266b0663SKrzysztof Zdziarski 			    ADF_RING_BUNDLE_SIZE_GEN4 * (_bank)) +             \
61*266b0663SKrzysztof Zdziarski 			       ADF_RING_CSR_RING_LBASE_GEN4 + ((_ring) << 2),  \
62*266b0663SKrzysztof Zdziarski 			   l_base);                                            \
63*266b0663SKrzysztof Zdziarski 		ADF_CSR_WR((_csr_base_addr),                                   \
64*266b0663SKrzysztof Zdziarski 			   (ADF_RING_CSR_ADDR_OFFSET_GEN4VF +                  \
65*266b0663SKrzysztof Zdziarski 			    ADF_RING_BUNDLE_SIZE_GEN4 * (_bank)) +             \
66*266b0663SKrzysztof Zdziarski 			       ADF_RING_CSR_RING_UBASE_GEN4 + ((_ring) << 2),  \
67*266b0663SKrzysztof Zdziarski 			   u_base);                                            \
68*266b0663SKrzysztof Zdziarski 	} while (0)
69*266b0663SKrzysztof Zdziarski 
70*266b0663SKrzysztof Zdziarski static inline u64
read_base_gen4vf(struct resource * csr_base_addr,u32 bank,u32 ring)71*266b0663SKrzysztof Zdziarski read_base_gen4vf(struct resource *csr_base_addr, u32 bank, u32 ring)
72*266b0663SKrzysztof Zdziarski {
73*266b0663SKrzysztof Zdziarski 	u32 l_base, u_base;
74*266b0663SKrzysztof Zdziarski 	u64 addr;
75*266b0663SKrzysztof Zdziarski 
76*266b0663SKrzysztof Zdziarski 	l_base = ADF_CSR_RD(csr_base_addr,
77*266b0663SKrzysztof Zdziarski 			    (ADF_RING_BUNDLE_SIZE_GEN4 * bank) +
78*266b0663SKrzysztof Zdziarski 				ADF_RING_CSR_RING_LBASE_GEN4 + (ring << 2));
79*266b0663SKrzysztof Zdziarski 	u_base = ADF_CSR_RD(csr_base_addr,
80*266b0663SKrzysztof Zdziarski 			    (ADF_RING_BUNDLE_SIZE_GEN4 * bank) +
81*266b0663SKrzysztof Zdziarski 				ADF_RING_CSR_RING_UBASE_GEN4 + (ring << 2));
82*266b0663SKrzysztof Zdziarski 
83*266b0663SKrzysztof Zdziarski 	addr = (u64)l_base & 0x00000000FFFFFFFFULL;
84*266b0663SKrzysztof Zdziarski 	addr |= (u64)u_base << 32 & 0xFFFFFFFF00000000ULL;
85*266b0663SKrzysztof Zdziarski 
86*266b0663SKrzysztof Zdziarski 	return addr;
87*266b0663SKrzysztof Zdziarski }
88*266b0663SKrzysztof Zdziarski 
89*266b0663SKrzysztof Zdziarski #define WRITE_CSR_INT_SRCSEL_GEN4VF(csr_base_addr, bank)                       \
90*266b0663SKrzysztof Zdziarski 	ADF_CSR_WR((csr_base_addr),                                            \
91*266b0663SKrzysztof Zdziarski 		   ADF_RING_CSR_ADDR_OFFSET_GEN4VF +                           \
92*266b0663SKrzysztof Zdziarski 		       ADF_RING_BUNDLE_SIZE_GEN4 * (bank) +                    \
93*266b0663SKrzysztof Zdziarski 		       ADF_RING_CSR_INT_SRCSEL,                                \
94*266b0663SKrzysztof Zdziarski 		   ADF_BANK_INT_SRC_SEL_MASK_GEN4)
95*266b0663SKrzysztof Zdziarski 
96*266b0663SKrzysztof Zdziarski #define READ_CSR_RING_BASE_GEN4VF(csr_base_addr, bank, ring)                   \
97*266b0663SKrzysztof Zdziarski 	read_base_gen4vf((csr_base_addr), (bank), (ring))
98*266b0663SKrzysztof Zdziarski 
99*266b0663SKrzysztof Zdziarski #define WRITE_CSR_RING_HEAD_GEN4VF(csr_base_addr, bank, ring, value)           \
100*266b0663SKrzysztof Zdziarski 	ADF_CSR_WR((csr_base_addr),                                            \
101*266b0663SKrzysztof Zdziarski 		   (ADF_RING_CSR_ADDR_OFFSET_GEN4VF +                          \
102*266b0663SKrzysztof Zdziarski 		    ADF_RING_BUNDLE_SIZE_GEN4 * (bank)) +                      \
103*266b0663SKrzysztof Zdziarski 		       ADF_RING_CSR_RING_HEAD + ((ring) << 2),                 \
104*266b0663SKrzysztof Zdziarski 		   (value))
105*266b0663SKrzysztof Zdziarski #define WRITE_CSR_RING_TAIL_GEN4VF(csr_base_addr, bank, ring, value)           \
106*266b0663SKrzysztof Zdziarski 	ADF_CSR_WR((csr_base_addr),                                            \
107*266b0663SKrzysztof Zdziarski 		   (ADF_RING_CSR_ADDR_OFFSET_GEN4VF +                          \
108*266b0663SKrzysztof Zdziarski 		    ADF_RING_BUNDLE_SIZE_GEN4 * (bank)) +                      \
109*266b0663SKrzysztof Zdziarski 		       ADF_RING_CSR_RING_TAIL + ((ring) << 2),                 \
110*266b0663SKrzysztof Zdziarski 		   (value))
111*266b0663SKrzysztof Zdziarski #define WRITE_CSR_INT_FLAG_GEN4VF(csr_base_addr, bank, value)                  \
112*266b0663SKrzysztof Zdziarski 	ADF_CSR_WR((csr_base_addr),                                            \
113*266b0663SKrzysztof Zdziarski 		   (ADF_RING_CSR_ADDR_OFFSET_GEN4VF +                          \
114*266b0663SKrzysztof Zdziarski 		    ADF_RING_BUNDLE_SIZE_GEN4 * (bank)) +                      \
115*266b0663SKrzysztof Zdziarski 		       ADF_RING_CSR_INT_FLAG,                                  \
116*266b0663SKrzysztof Zdziarski 		   (value))
117*266b0663SKrzysztof Zdziarski #define WRITE_CSR_INT_COL_EN_GEN4VF(csr_base_addr, bank, value)                \
118*266b0663SKrzysztof Zdziarski 	ADF_CSR_WR((csr_base_addr),                                            \
119*266b0663SKrzysztof Zdziarski 		   (ADF_RING_CSR_ADDR_OFFSET_GEN4VF +                          \
120*266b0663SKrzysztof Zdziarski 		    ADF_RING_BUNDLE_SIZE_GEN4 * (bank)) +                      \
121*266b0663SKrzysztof Zdziarski 		       ADF_RING_CSR_INT_COL_EN,                                \
122*266b0663SKrzysztof Zdziarski 		   (value))
123*266b0663SKrzysztof Zdziarski #define WRITE_CSR_INT_COL_CTL_GEN4VF(csr_base_addr, bank, value)               \
124*266b0663SKrzysztof Zdziarski 	ADF_CSR_WR((csr_base_addr),                                            \
125*266b0663SKrzysztof Zdziarski 		   (ADF_RING_CSR_ADDR_OFFSET_GEN4VF +                          \
126*266b0663SKrzysztof Zdziarski 		    ADF_RING_BUNDLE_SIZE_GEN4 * (bank)) +                      \
127*266b0663SKrzysztof Zdziarski 		       ADF_RING_CSR_INT_COL_CTL,                               \
128*266b0663SKrzysztof Zdziarski 		   (value))
129*266b0663SKrzysztof Zdziarski #define WRITE_CSR_INT_FLAG_AND_COL_GEN4VF(csr_base_addr, bank, value)          \
130*266b0663SKrzysztof Zdziarski 	ADF_CSR_WR((csr_base_addr),                                            \
131*266b0663SKrzysztof Zdziarski 		   (ADF_RING_CSR_ADDR_OFFSET_GEN4VF +                          \
132*266b0663SKrzysztof Zdziarski 		    ADF_RING_BUNDLE_SIZE_GEN4 * (bank)) +                      \
133*266b0663SKrzysztof Zdziarski 		       ADF_RING_CSR_INT_FLAG_AND_COL,                          \
134*266b0663SKrzysztof Zdziarski 		   (value))
135*266b0663SKrzysztof Zdziarski #define READ_CSR_RING_SRV_ARB_EN_GEN4VF(csr_base_addr, bank)                   \
136*266b0663SKrzysztof Zdziarski 	ADF_CSR_RD((csr_base_addr),                                            \
137*266b0663SKrzysztof Zdziarski 		   (ADF_RING_CSR_ADDR_OFFSET_GEN4VF +                          \
138*266b0663SKrzysztof Zdziarski 		    ADF_RING_BUNDLE_SIZE_GEN4 * (bank)) +                      \
139*266b0663SKrzysztof Zdziarski 		       ADF_RING_CSR_RING_SRV_ARB_EN)
140*266b0663SKrzysztof Zdziarski #define WRITE_CSR_RING_SRV_ARB_EN_GEN4VF(csr_base_addr, bank, value)           \
141*266b0663SKrzysztof Zdziarski 	ADF_CSR_WR((csr_base_addr),                                            \
142*266b0663SKrzysztof Zdziarski 		   (ADF_RING_CSR_ADDR_OFFSET_GEN4VF +                          \
143*266b0663SKrzysztof Zdziarski 		    ADF_RING_BUNDLE_SIZE_GEN4 * (bank)) +                      \
144*266b0663SKrzysztof Zdziarski 		       ADF_RING_CSR_RING_SRV_ARB_EN,                           \
145*266b0663SKrzysztof Zdziarski 		   (value))
146*266b0663SKrzysztof Zdziarski 
147*266b0663SKrzysztof Zdziarski struct adf_hw_csr_info;
148*266b0663SKrzysztof Zdziarski void gen4vf_init_hw_csr_info(struct adf_hw_csr_info *csr_info);
149*266b0663SKrzysztof Zdziarski 
150*266b0663SKrzysztof Zdziarski #endif /* ADF_GEN4VF_HW_CSR_DATA_H_ */
151