xref: /OK3568_Linux_fs/kernel/drivers/video/rockchip/mpp/hack/mpp_rkvdec2_link_hack_rk3568.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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