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