1 // SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2 /*
3 * Copyright (c) 2021 Rockchip Electronics Co., Ltd
4 *
5 * author:
6 * Herman Chen <herman.chen@rock-chips.com>
7 */
8
9 #define FIX_RK3568_BUF_SIZE (2 * PAGE_SIZE)
10 #define RKDEC_HACK_DATA_RPS_OFFSET (128 * 1)
11 #define RKDEC_HACK_DATA_PPS_OFFSET (128 * 2)
12 #define RKDEC_HACK_DATA_RLC_OFFSET (128 * 3)
13 #define RKDEC_HACK_DATA_OUT_OFFSET (128 * 4)
14 #define RKDEC_HACK_DATA_COLMV_OFFSET (128 * 5)
15
16 static u32 rkvdec2_3568_hack_link[] = {
17 0x00000000, /* 0x0020 */
18 0x00000001, /* 0x0024 */
19 0x00000001, /* 0x0028 */
20 0x00000072, /* 0x002c */
21 0x00000182, /* 0x0030 */
22 0x01040201, /* 0x0034 */
23 0x00000000, /* 0x0038 */
24 0x00000001, /* 0x003c */
25 0x00000030, /* 0x0040 */
26 0x00003fff, /* 0x0044 */
27 0x00000001, /* 0x0048 */
28 0x00000001, /* 0x004c */
29 0x00000010, /* 0x0050 */
30 0x00000006, /* 0x0054 */
31 0x00000000, /* 0x0058 */
32 0x00000000, /* 0x005c */
33 0xffffdfff, /* 0x0060 */
34 0x3ffbfbff, /* 0x0064 */
35 0x800fffff, /* 0x0068 */
36 0x00000000, /* 0x006C */
37
38 0x00000000, /* 0x0100 */
39 0x00000000, /* 0x0104 */
40 0x00000000, /* 0x0108 */
41 0x00000000, /* 0x010c */
42 0x00000000, /* 0x0110 */
43 0x00000000, /* 0x0114 */
44 0x00000000, /* 0x0118 */
45 0x00000000, /* 0x011c */
46 0x00000000, /* 0x0120 */
47 0x00000000, /* 0x0124 */
48 0x00000000, /* 0x0128 */
49 0x00000000, /* 0x012c */
50 0x00000000, /* 0x0130 */
51 0x00000000, /* 0x0134 */
52 0x00000000, /* 0x0138 */
53 0x00000000, /* 0x013c */
54 0x00000000, /* 0x0140 */
55 0x00000000, /* 0x0144 */
56 0x00000000, /* 0x0148 */
57 0x00000000, /* 0x014c */
58 0x00000000, /* 0x0150 */
59 0x00000000, /* 0x0154 */
60 0x00000000, /* 0x0158 */
61 0x00000000, /* 0x015c */
62 0x00000000, /* 0x0160 */
63 0x00000000, /* 0x0164 */
64 0x00000000, /* 0x0168 */
65 0x00000000, /* 0x016c */
66 0x00000000, /* 0x0170 */
67 0x00000000, /* 0x0174 */
68 0x00000000, /* 0x0178 */
69 0x00000000, /* 0x017c */
70 0x00000000, /* 0x0180 */
71 0x00000000, /* 0x0184 */
72 0x00000000, /* 0x0188 */
73 0x00000000, /* 0x018c */
74 0x00000000, /* 0x0190 */
75 0x00000000, /* 0x0194 */
76 0x00000000, /* 0x0198 */
77 0x00000000, /* 0x019c */
78 0x00000000, /* 0x01a0 */
79 0x00000000, /* 0x01a4 */
80 0x00000000, /* 0x01a8 */
81 0x00000000, /* 0x01ac */
82 0x00000000, /* 0x01b0 */
83 0x00000000, /* 0x01b4 */
84 0x00000000, /* 0x01b8 */
85 0x00000000, /* 0x01bc */
86 0x00000000, /* 0x01c0 */
87 0x00000000, /* 0x01c4 */
88 0x00000000, /* 0x01c8 */
89 0x00000000, /* 0x01cc */
90
91 0x00000000, /* 0x0200 */
92 0x00000000, /* 0x0204 */
93 0x00000000, /* 0x0208 */
94 0x00000000, /* 0x020c */
95 0x00000000, /* 0x0210 */
96 0x100001c0, /* 0x0214 */
97 0x100001c0, /* 0x0218 */
98 0x100001c0, /* 0x021c */
99 0x100001c0, /* 0x0220 */
100 0x10000340, /* 0x0224 */
101 0x10000340, /* 0x0228 */
102 0x10000000, /* 0x022c */
103 0x10000000, /* 0x0230 */
104 0x10000000, /* 0x0234 */
105 0x10000000, /* 0x0238 */
106 0x10000000, /* 0x023c */
107
108 0x00000000, /* 0x0280 */
109 0x00000000, /* 0x0284 */
110 0x00000000, /* 0x0288 */
111 0x00000000, /* 0x028c */
112 0x00000000, /* 0x0290 */
113 0x00000000, /* 0x0294 */
114 0x00000000, /* 0x0298 */
115 0x00000000, /* 0x029c */
116 0x00000000, /* 0x02a0 */
117 0x00000000, /* 0x02a4 */
118 0x00000000, /* 0x02a8 */
119 0x00000000, /* 0x02ac */
120 0x00000000, /* 0x02b0 */
121 0x00000000, /* 0x02b4 */
122 0x00000000, /* 0x02b8 */
123 0x00000000, /* 0x02bc */
124 0x00000000, /* 0x02c0 */
125 0x00000000, /* 0x02c4 */
126 0x00000000, /* 0x02c8 */
127 0x00000000, /* 0x02cc */
128 0x00000000, /* 0x02d0 */
129 0x00000000, /* 0x02d4 */
130 0x00000000, /* 0x02d8 */
131 0x00000000, /* 0x02dc */
132 0x00000000, /* 0x02e0 */
133 0x00000000, /* 0x02e4 */
134 0x00000000, /* 0x02e8 */
135 0x00000000, /* 0x02ec */
136 0x00000000, /* 0x02f0 */
137 0x00000000, /* 0x02f4 */
138 0x00000000, /* 0x02f8 */
139 0x00000000, /* 0x02fc */
140 0x00000000, /* 0x0300 */
141 0x00000000, /* 0x0304 */
142 0x00000000, /* 0x0308 */
143 0x00000000, /* 0x030c */
144 0x00000000, /* 0x0310 */
145 0x00000000, /* 0x0314 */
146 0x00000000, /* 0x0318 */
147 0x00000000, /* 0x031c */
148
149 0x00000000, /* 0x0380 */
150 0x00000000, /* 0x0384 */
151 0x00000000, /* 0x0388 */
152 0x00000000, /* 0x038c */
153 0x00000000, /* 0x0390 */
154 0x00000000, /* 0x0394 */
155 0x00000000, /* 0x0398 */
156 0x00000000, /* 0x039c */
157 0x00000000, /* 0x03a0 */
158 0x00000000, /* 0x03a4 */
159 0x00000000, /* 0x03a8 */
160 0x00000000, /* 0x03ac */
161 0x00000000, /* 0x03b0 */
162 0x00000000, /* 0x03b4 */
163 0x00000000, /* 0x03b8 */
164 0x00000000, /* 0x03bc */
165
166 0x00000000, /* 0x0400 */
167 0x00000000, /* 0x0404 */
168 0x00000000, /* 0x0408 */
169 0x00000000, /* 0x040c */
170 0x00000000, /* 0x0410 */
171 0x00000000, /* 0x0414 */
172 0x00000000, /* 0x0418 */
173 0x00000000, /* 0x041c */
174 0x00000000, /* 0x0420 */
175 0x00000000, /* 0x0424 */
176 0x00000000, /* 0x0428 */
177 0x00000000, /* 0x042c */
178 0x00000000, /* 0x0430 */
179 0x00000000, /* 0x0434 */
180 0x00000000, /* 0x0438 */
181 0x00000000, /* 0x043c */
182 };
183
rkvdec2_3568_hack_fix_link(void * buf)184 void rkvdec2_3568_hack_fix_link(void *buf)
185 {
186 memcpy(buf, rkvdec2_3568_hack_link, sizeof(rkvdec2_3568_hack_link));
187 }
188
rkvdec2_link_hack_data_setup(struct mpp_dma_buffer * fix)189 void rkvdec2_link_hack_data_setup(struct mpp_dma_buffer *fix)
190 {
191 u32 iova = fix->iova;
192 u32 i;
193
194 /* input stream */
195 rkvdec2_3568_hack_link[72] = iova;
196 /* error info */
197 rkvdec2_3568_hack_link[73] = iova + RKDEC_HACK_DATA_RLC_OFFSET;
198 /* output frame */
199 rkvdec2_3568_hack_link[74] = iova + RKDEC_HACK_DATA_OUT_OFFSET;
200 /* colmv out */
201 rkvdec2_3568_hack_link[75] = iova + 128 * 6;
202 /* error ref */
203 rkvdec2_3568_hack_link[76] = iova + 128 * 4;
204
205 /* rps in */
206 rkvdec2_3568_hack_link[89] = iova + RKDEC_HACK_DATA_PPS_OFFSET;
207 /* pps in */
208 rkvdec2_3568_hack_link[91] = iova + RKDEC_HACK_DATA_RPS_OFFSET;
209 for (i = 0; i < 33; i++)
210 rkvdec2_3568_hack_link[92 + i] = iova + RKDEC_HACK_DATA_COLMV_OFFSET;
211
212 rkvdec2_3568_hack_link[125] = iova + PAGE_SIZE;
213 }
214