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 #include <linux/printk.h>
10
11 #define FIX_RK3568_BUF_SIZE (2 * PAGE_SIZE)
12 #define RKDEC_HACK_DATA_RPS_OFFSET (128 * 1)
13 #define RKDEC_HACK_DATA_PPS_OFFSET (128 * 2)
14 #define RKDEC_HACK_DATA_RLC_OFFSET (128 * 3)
15 #define RKDEC_HACK_DATA_OUT_OFFSET (128 * 4)
16 #define RKDEC_HACK_DATA_COLMV_OFFSET (128 * 5)
17
18 struct hack_info {
19 u32 data;
20 u32 offset;
21 };
22
23 static const char h264_cabac_tbl[] = {
24 0x14, 0xf1, 0x02, 0x36, 0x03, 0x4a, 0x14, 0xf1,
25 0x02, 0x36, 0x03, 0x4a, 0xe4, 0x7f, 0xe9, 0x68,
26 0xfa, 0x35, 0xff, 0x36, 0x07, 0x33, 0x17, 0x21,
27 0x17, 0x02, 0x15, 0x00, 0x01, 0x09, 0x00, 0x31,
28 0xdb, 0x76, 0x05, 0x39, 0xf3, 0x4e, 0xf5, 0x41,
29 0x01, 0x3e, 0x0c, 0x31, 0xfc, 0x49, 0x11, 0x32,
30 0x12, 0x40, 0x09, 0x2b, 0x1d, 0x00, 0x1a, 0x43,
31 0x10, 0x5a, 0x09, 0x68, 0xd2, 0x7f, 0xec, 0x68,
32 0x01, 0x43, 0xf3, 0x4e, 0xf5, 0x41, 0x01, 0x3e,
33 0xfa, 0x56, 0xef, 0x5f, 0xfa, 0x3d, 0x09, 0x2d,
34 0xfd, 0x45, 0xfa, 0x51, 0xf5, 0x60, 0x06, 0x37,
35 0x07, 0x43, 0xfb, 0x56, 0x02, 0x58, 0x00, 0x3a,
36 0xfd, 0x4c, 0xf6, 0x5e, 0x05, 0x36, 0x04, 0x45,
37 0xfd, 0x51, 0x00, 0x58, 0xf9, 0x43, 0xfb, 0x4a,
38 0xfc, 0x4a, 0xfb, 0x50, 0xf9, 0x48, 0x01, 0x3a,
39 0x00, 0x29, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f,
40 0xf7, 0x53, 0x04, 0x56, 0x00, 0x61, 0xf9, 0x48,
41 0x0d, 0x29, 0x03, 0x3e, 0x00, 0x2d, 0xfc, 0x4e,
42 0xfd, 0x60, 0xe5, 0x7e, 0xe4, 0x62, 0xe7, 0x65,
43 0xe9, 0x43, 0xe4, 0x52, 0xec, 0x5e, 0xf0, 0x53,
44 0xea, 0x6e, 0xeb, 0x5b, 0xee, 0x66, 0xf3, 0x5d,
45 0xe3, 0x7f, 0xf9, 0x5c, 0xfb, 0x59, 0xf9, 0x60,
46 0xf3, 0x6c, 0xfd, 0x2e, 0xff, 0x41, 0xff, 0x39,
47 0xf7, 0x5d, 0xfd, 0x4a, 0xf7, 0x5c, 0xf8, 0x57,
48 0xe9, 0x7e, 0x05, 0x36, 0x06, 0x3c, 0x06, 0x3b,
49 0x06, 0x45, 0xff, 0x30, 0x00, 0x44, 0xfc, 0x45,
50 0xf8, 0x58, 0xfe, 0x55, 0xfa, 0x4e, 0xff, 0x4b,
51 0xf9, 0x4d, 0x02, 0x36, 0x05, 0x32, 0xfd, 0x44,
52 0x01, 0x32, 0x06, 0x2a, 0xfc, 0x51, 0x01, 0x3f,
53 0xfc, 0x46, 0x00, 0x43, 0x02, 0x39, 0xfe, 0x4c,
54 0x0b, 0x23, 0x04, 0x40, 0x01, 0x3d, 0x0b, 0x23,
55 0x12, 0x19, 0x0c, 0x18, 0x0d, 0x1d, 0x0d, 0x24,
56 0xf6, 0x5d, 0xf9, 0x49, 0xfe, 0x49, 0x0d, 0x2e,
57 0x09, 0x31, 0xf9, 0x64, 0x09, 0x35, 0x02, 0x35,
58 0x05, 0x35, 0xfe, 0x3d, 0x00, 0x38, 0x00, 0x38,
59 0xf3, 0x3f, 0xfb, 0x3c, 0xff, 0x3e, 0x04, 0x39,
60 0xfa, 0x45, 0x04, 0x39, 0x0e, 0x27, 0x04, 0x33,
61 0x0d, 0x44, 0x03, 0x40, 0x01, 0x3d, 0x09, 0x3f,
62 0x07, 0x32, 0x10, 0x27, 0x05, 0x2c, 0x04, 0x34,
63 0x0b, 0x30, 0xfb, 0x3c, 0xff, 0x3b, 0x00, 0x3b,
64 0x16, 0x21, 0x05, 0x2c, 0x0e, 0x2b, 0xff, 0x4e,
65 0x00, 0x3c, 0x09, 0x45, 0x0b, 0x1c, 0x02, 0x28,
66 0x03, 0x2c, 0x00, 0x31, 0x00, 0x2e, 0x02, 0x2c,
67 0x02, 0x33, 0x00, 0x2f, 0x04, 0x27, 0x02, 0x3e,
68 0x06, 0x2e, 0x00, 0x36, 0x03, 0x36, 0x02, 0x3a,
69 0x04, 0x3f, 0x06, 0x33, 0x06, 0x39, 0x07, 0x35,
70 0x06, 0x34, 0x06, 0x37, 0x0b, 0x2d, 0x0e, 0x24,
71 0x08, 0x35, 0xff, 0x52, 0x07, 0x37, 0xfd, 0x4e,
72 0x0f, 0x2e, 0x16, 0x1f, 0xff, 0x54, 0x19, 0x07,
73 0x1e, 0xf9, 0x1c, 0x03, 0x1c, 0x04, 0x20, 0x00,
74 0x22, 0xff, 0x1e, 0x06, 0x1e, 0x06, 0x20, 0x09,
75 0x1f, 0x13, 0x1a, 0x1b, 0x1a, 0x1e, 0x25, 0x14,
76 0x1c, 0x22, 0x11, 0x46, 0x01, 0x43, 0x05, 0x3b,
77 0x09, 0x43, 0x10, 0x1e, 0x12, 0x20, 0x12, 0x23,
78 0x16, 0x1d, 0x18, 0x1f, 0x17, 0x26, 0x12, 0x2b,
79 0x14, 0x29, 0x0b, 0x3f, 0x09, 0x3b, 0x09, 0x40,
80 0xff, 0x5e, 0xfe, 0x59, 0xf7, 0x6c, 0xfa, 0x4c,
81 0xfe, 0x2c, 0x00, 0x2d, 0x00, 0x34, 0xfd, 0x40,
82 0xfe, 0x3b, 0xfc, 0x46, 0xfc, 0x4b, 0xf8, 0x52,
83 0xef, 0x66, 0xf7, 0x4d, 0x03, 0x18, 0x00, 0x2a,
84 0x00, 0x30, 0x00, 0x37, 0xfa, 0x3b, 0xf9, 0x47,
85 0xf4, 0x53, 0xf5, 0x57, 0xe2, 0x77, 0x01, 0x3a,
86 0xfd, 0x1d, 0xff, 0x24, 0x01, 0x26, 0x02, 0x2b,
87 0xfa, 0x37, 0x00, 0x3a, 0x00, 0x40, 0xfd, 0x4a,
88 0xf6, 0x5a, 0x00, 0x46, 0xfc, 0x1d, 0x05, 0x1f,
89 0x07, 0x2a, 0x01, 0x3b, 0xfe, 0x3a, 0xfd, 0x48,
90 0xfd, 0x51, 0xf5, 0x61, 0x00, 0x3a, 0x08, 0x05,
91 0x0a, 0x0e, 0x0e, 0x12, 0x0d, 0x1b, 0x02, 0x28,
92 0x00, 0x3a, 0xfd, 0x46, 0xfa, 0x4f, 0xf8, 0x55,
93 0x00, 0x00, 0xf3, 0x6a, 0xf0, 0x6a, 0xf6, 0x57,
94 0xeb, 0x72, 0xee, 0x6e, 0xf2, 0x62, 0xea, 0x6e,
95 0xeb, 0x6a, 0xee, 0x67, 0xeb, 0x6b, 0xe9, 0x6c,
96 0xe6, 0x70, 0xf6, 0x60, 0xf4, 0x5f, 0xfb, 0x5b,
97 0xf7, 0x5d, 0xea, 0x5e, 0xfb, 0x56, 0x09, 0x43,
98 0xfc, 0x50, 0xf6, 0x55, 0xff, 0x46, 0x07, 0x3c,
99 0x09, 0x3a, 0x05, 0x3d, 0x0c, 0x32, 0x0f, 0x32,
100 0x12, 0x31, 0x11, 0x36, 0x0a, 0x29, 0x07, 0x2e,
101 0xff, 0x33, 0x07, 0x31, 0x08, 0x34, 0x09, 0x29,
102 0x06, 0x2f, 0x02, 0x37, 0x0d, 0x29, 0x0a, 0x2c,
103 0x06, 0x32, 0x05, 0x35, 0x0d, 0x31, 0x04, 0x3f,
104 0x06, 0x40, 0xfe, 0x45, 0xfe, 0x3b, 0x06, 0x46,
105 0x0a, 0x2c, 0x09, 0x1f, 0x0c, 0x2b, 0x03, 0x35,
106 0x0e, 0x22, 0x0a, 0x26, 0xfd, 0x34, 0x0d, 0x28,
107 0x11, 0x20, 0x07, 0x2c, 0x07, 0x26, 0x0d, 0x32,
108 0x0a, 0x39, 0x1a, 0x2b, 0x0e, 0x0b, 0x0b, 0x0e,
109 0x09, 0x0b, 0x12, 0x0b, 0x15, 0x09, 0x17, 0xfe,
110 0x20, 0xf1, 0x20, 0xf1, 0x22, 0xeb, 0x27, 0xe9,
111 0x2a, 0xdf, 0x29, 0xe1, 0x2e, 0xe4, 0x26, 0xf4,
112 0x15, 0x1d, 0x2d, 0xe8, 0x35, 0xd3, 0x30, 0xe6,
113 0x41, 0xd5, 0x2b, 0xed, 0x27, 0xf6, 0x1e, 0x09,
114 0x12, 0x1a, 0x14, 0x1b, 0x00, 0x39, 0xf2, 0x52,
115 0xfb, 0x4b, 0xed, 0x61, 0xdd, 0x7d, 0x1b, 0x00,
116 0x1c, 0x00, 0x1f, 0xfc, 0x1b, 0x06, 0x22, 0x08,
117 0x1e, 0x0a, 0x18, 0x16, 0x21, 0x13, 0x16, 0x20,
118 0x1a, 0x1f, 0x15, 0x29, 0x1a, 0x2c, 0x17, 0x2f,
119 0x10, 0x41, 0x0e, 0x47, 0x08, 0x3c, 0x06, 0x3f,
120 0x11, 0x41, 0x15, 0x18, 0x17, 0x14, 0x1a, 0x17,
121 0x1b, 0x20, 0x1c, 0x17, 0x1c, 0x18, 0x17, 0x28,
122 0x18, 0x20, 0x1c, 0x1d, 0x17, 0x2a, 0x13, 0x39,
123 0x16, 0x35, 0x16, 0x3d, 0x0b, 0x56, 0x0c, 0x28,
124 0x0b, 0x33, 0x0e, 0x3b, 0xfc, 0x4f, 0xf9, 0x47,
125 0xfb, 0x45, 0xf7, 0x46, 0xf8, 0x42, 0xf6, 0x44,
126 0xed, 0x49, 0xf4, 0x45, 0xf0, 0x46, 0xf1, 0x43,
127 0xec, 0x3e, 0xed, 0x46, 0xf0, 0x42, 0xea, 0x41,
128 0xec, 0x3f, 0x09, 0xfe, 0x1a, 0xf7, 0x21, 0xf7,
129 0x27, 0xf9, 0x29, 0xfe, 0x2d, 0x03, 0x31, 0x09,
130 0x2d, 0x1b, 0x24, 0x3b, 0xfa, 0x42, 0xf9, 0x23,
131 0xf9, 0x2a, 0xf8, 0x2d, 0xfb, 0x30, 0xf4, 0x38,
132 0xfa, 0x3c, 0xfb, 0x3e, 0xf8, 0x42, 0xf8, 0x4c,
133 0xfb, 0x55, 0xfa, 0x51, 0xf6, 0x4d, 0xf9, 0x51,
134 0xef, 0x50, 0xee, 0x49, 0xfc, 0x4a, 0xf6, 0x53,
135 0xf7, 0x47, 0xf7, 0x43, 0xff, 0x3d, 0xf8, 0x42,
136 0xf2, 0x42, 0x00, 0x3b, 0x02, 0x3b, 0x15, 0xf3,
137 0x21, 0xf2, 0x27, 0xf9, 0x2e, 0xfe, 0x33, 0x02,
138 0x3c, 0x06, 0x3d, 0x11, 0x37, 0x22, 0x2a, 0x3e,
139 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
140 0x14, 0xf1, 0x02, 0x36, 0x03, 0x4a, 0x14, 0xf1,
141 0x02, 0x36, 0x03, 0x4a, 0xe4, 0x7f, 0xe9, 0x68,
142 0xfa, 0x35, 0xff, 0x36, 0x07, 0x33, 0x16, 0x19,
143 0x22, 0x00, 0x10, 0x00, 0xfe, 0x09, 0x04, 0x29,
144 0xe3, 0x76, 0x02, 0x41, 0xfa, 0x47, 0xf3, 0x4f,
145 0x05, 0x34, 0x09, 0x32, 0xfd, 0x46, 0x0a, 0x36,
146 0x1a, 0x22, 0x13, 0x16, 0x28, 0x00, 0x39, 0x02,
147 0x29, 0x24, 0x1a, 0x45, 0xd3, 0x7f, 0xf1, 0x65,
148 0xfc, 0x4c, 0xfa, 0x47, 0xf3, 0x4f, 0x05, 0x34,
149 0x06, 0x45, 0xf3, 0x5a, 0x00, 0x34, 0x08, 0x2b,
150 0xfe, 0x45, 0xfb, 0x52, 0xf6, 0x60, 0x02, 0x3b,
151 0x02, 0x4b, 0xfd, 0x57, 0xfd, 0x64, 0x01, 0x38,
152 0xfd, 0x4a, 0xfa, 0x55, 0x00, 0x3b, 0xfd, 0x51,
153 0xf9, 0x56, 0xfb, 0x5f, 0xff, 0x42, 0xff, 0x4d,
154 0x01, 0x46, 0xfe, 0x56, 0xfb, 0x48, 0x00, 0x3d,
155 0x00, 0x29, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f,
156 0xf7, 0x53, 0x04, 0x56, 0x00, 0x61, 0xf9, 0x48,
157 0x0d, 0x29, 0x03, 0x3e, 0x0d, 0x0f, 0x07, 0x33,
158 0x02, 0x50, 0xd9, 0x7f, 0xee, 0x5b, 0xef, 0x60,
159 0xe6, 0x51, 0xdd, 0x62, 0xe8, 0x66, 0xe9, 0x61,
160 0xe5, 0x77, 0xe8, 0x63, 0xeb, 0x6e, 0xee, 0x66,
161 0xdc, 0x7f, 0x00, 0x50, 0xfb, 0x59, 0xf9, 0x5e,
162 0xfc, 0x5c, 0x00, 0x27, 0x00, 0x41, 0xf1, 0x54,
163 0xdd, 0x7f, 0xfe, 0x49, 0xf4, 0x68, 0xf7, 0x5b,
164 0xe1, 0x7f, 0x03, 0x37, 0x07, 0x38, 0x07, 0x37,
165 0x08, 0x3d, 0xfd, 0x35, 0x00, 0x44, 0xf9, 0x4a,
166 0xf7, 0x58, 0xf3, 0x67, 0xf3, 0x5b, 0xf7, 0x59,
167 0xf2, 0x5c, 0xf8, 0x4c, 0xf4, 0x57, 0xe9, 0x6e,
168 0xe8, 0x69, 0xf6, 0x4e, 0xec, 0x70, 0xef, 0x63,
169 0xb2, 0x7f, 0xba, 0x7f, 0xce, 0x7f, 0xd2, 0x7f,
170 0xfc, 0x42, 0xfb, 0x4e, 0xfc, 0x47, 0xf8, 0x48,
171 0x02, 0x3b, 0xff, 0x37, 0xf9, 0x46, 0xfa, 0x4b,
172 0xf8, 0x59, 0xde, 0x77, 0xfd, 0x4b, 0x20, 0x14,
173 0x1e, 0x16, 0xd4, 0x7f, 0x00, 0x36, 0xfb, 0x3d,
174 0x00, 0x3a, 0xff, 0x3c, 0xfd, 0x3d, 0xf8, 0x43,
175 0xe7, 0x54, 0xf2, 0x4a, 0xfb, 0x41, 0x05, 0x34,
176 0x02, 0x39, 0x00, 0x3d, 0xf7, 0x45, 0xf5, 0x46,
177 0x12, 0x37, 0xfc, 0x47, 0x00, 0x3a, 0x07, 0x3d,
178 0x09, 0x29, 0x12, 0x19, 0x09, 0x20, 0x05, 0x2b,
179 0x09, 0x2f, 0x00, 0x2c, 0x00, 0x33, 0x02, 0x2e,
180 0x13, 0x26, 0xfc, 0x42, 0x0f, 0x26, 0x0c, 0x2a,
181 0x09, 0x22, 0x00, 0x59, 0x04, 0x2d, 0x0a, 0x1c,
182 0x0a, 0x1f, 0x21, 0xf5, 0x34, 0xd5, 0x12, 0x0f,
183 0x1c, 0x00, 0x23, 0xea, 0x26, 0xe7, 0x22, 0x00,
184 0x27, 0xee, 0x20, 0xf4, 0x66, 0xa2, 0x00, 0x00,
185 0x38, 0xf1, 0x21, 0xfc, 0x1d, 0x0a, 0x25, 0xfb,
186 0x33, 0xe3, 0x27, 0xf7, 0x34, 0xde, 0x45, 0xc6,
187 0x43, 0xc1, 0x2c, 0xfb, 0x20, 0x07, 0x37, 0xe3,
188 0x20, 0x01, 0x00, 0x00, 0x1b, 0x24, 0x21, 0xe7,
189 0x22, 0xe2, 0x24, 0xe4, 0x26, 0xe4, 0x26, 0xe5,
190 0x22, 0xee, 0x23, 0xf0, 0x22, 0xf2, 0x20, 0xf8,
191 0x25, 0xfa, 0x23, 0x00, 0x1e, 0x0a, 0x1c, 0x12,
192 0x1a, 0x19, 0x1d, 0x29, 0x00, 0x4b, 0x02, 0x48,
193 0x08, 0x4d, 0x0e, 0x23, 0x12, 0x1f, 0x11, 0x23,
194 0x15, 0x1e, 0x11, 0x2d, 0x14, 0x2a, 0x12, 0x2d,
195 0x1b, 0x1a, 0x10, 0x36, 0x07, 0x42, 0x10, 0x38,
196 0x0b, 0x49, 0x0a, 0x43, 0xf6, 0x74, 0xe9, 0x70,
197 0xf1, 0x47, 0xf9, 0x3d, 0x00, 0x35, 0xfb, 0x42,
198 0xf5, 0x4d, 0xf7, 0x50, 0xf7, 0x54, 0xf6, 0x57,
199 0xde, 0x7f, 0xeb, 0x65, 0xfd, 0x27, 0xfb, 0x35,
200 0xf9, 0x3d, 0xf5, 0x4b, 0xf1, 0x4d, 0xef, 0x5b,
201 0xe7, 0x6b, 0xe7, 0x6f, 0xe4, 0x7a, 0xf5, 0x4c,
202 0xf6, 0x2c, 0xf6, 0x34, 0xf6, 0x39, 0xf7, 0x3a,
203 0xf0, 0x48, 0xf9, 0x45, 0xfc, 0x45, 0xfb, 0x4a,
204 0xf7, 0x56, 0x02, 0x42, 0xf7, 0x22, 0x01, 0x20,
205 0x0b, 0x1f, 0x05, 0x34, 0xfe, 0x37, 0xfe, 0x43,
206 0x00, 0x49, 0xf8, 0x59, 0x03, 0x34, 0x07, 0x04,
207 0x0a, 0x08, 0x11, 0x08, 0x10, 0x13, 0x03, 0x25,
208 0xff, 0x3d, 0xfb, 0x49, 0xff, 0x46, 0xfc, 0x4e,
209 0x00, 0x00, 0xeb, 0x7e, 0xe9, 0x7c, 0xec, 0x6e,
210 0xe6, 0x7e, 0xe7, 0x7c, 0xef, 0x69, 0xe5, 0x79,
211 0xe5, 0x75, 0xef, 0x66, 0xe6, 0x75, 0xe5, 0x74,
212 0xdf, 0x7a, 0xf6, 0x5f, 0xf2, 0x64, 0xf8, 0x5f,
213 0xef, 0x6f, 0xe4, 0x72, 0xfa, 0x59, 0xfe, 0x50,
214 0xfc, 0x52, 0xf7, 0x55, 0xf8, 0x51, 0xff, 0x48,
215 0x05, 0x40, 0x01, 0x43, 0x09, 0x38, 0x00, 0x45,
216 0x01, 0x45, 0x07, 0x45, 0xf9, 0x45, 0xfa, 0x43,
217 0xf0, 0x4d, 0xfe, 0x40, 0x02, 0x3d, 0xfa, 0x43,
218 0xfd, 0x40, 0x02, 0x39, 0xfd, 0x41, 0xfd, 0x42,
219 0x00, 0x3e, 0x09, 0x33, 0xff, 0x42, 0xfe, 0x47,
220 0xfe, 0x4b, 0xff, 0x46, 0xf7, 0x48, 0x0e, 0x3c,
221 0x10, 0x25, 0x00, 0x2f, 0x12, 0x23, 0x0b, 0x25,
222 0x0c, 0x29, 0x0a, 0x29, 0x02, 0x30, 0x0c, 0x29,
223 0x0d, 0x29, 0x00, 0x3b, 0x03, 0x32, 0x13, 0x28,
224 0x03, 0x42, 0x12, 0x32, 0x13, 0xfa, 0x12, 0xfa,
225 0x0e, 0x00, 0x1a, 0xf4, 0x1f, 0xf0, 0x21, 0xe7,
226 0x21, 0xea, 0x25, 0xe4, 0x27, 0xe2, 0x2a, 0xe2,
227 0x2f, 0xd6, 0x2d, 0xdc, 0x31, 0xde, 0x29, 0xef,
228 0x20, 0x09, 0x45, 0xb9, 0x3f, 0xc1, 0x42, 0xc0,
229 0x4d, 0xb6, 0x36, 0xd9, 0x34, 0xdd, 0x29, 0xf6,
230 0x24, 0x00, 0x28, 0xff, 0x1e, 0x0e, 0x1c, 0x1a,
231 0x17, 0x25, 0x0c, 0x37, 0x0b, 0x41, 0x25, 0xdf,
232 0x27, 0xdc, 0x28, 0xdb, 0x26, 0xe2, 0x2e, 0xdf,
233 0x2a, 0xe2, 0x28, 0xe8, 0x31, 0xe3, 0x26, 0xf4,
234 0x28, 0xf6, 0x26, 0xfd, 0x2e, 0xfb, 0x1f, 0x14,
235 0x1d, 0x1e, 0x19, 0x2c, 0x0c, 0x30, 0x0b, 0x31,
236 0x1a, 0x2d, 0x16, 0x16, 0x17, 0x16, 0x1b, 0x15,
237 0x21, 0x14, 0x1a, 0x1c, 0x1e, 0x18, 0x1b, 0x22,
238 0x12, 0x2a, 0x19, 0x27, 0x12, 0x32, 0x0c, 0x46,
239 0x15, 0x36, 0x0e, 0x47, 0x0b, 0x53, 0x19, 0x20,
240 0x15, 0x31, 0x15, 0x36, 0xfb, 0x55, 0xfa, 0x51,
241 0xf6, 0x4d, 0xf9, 0x51, 0xef, 0x50, 0xee, 0x49,
242 0xfc, 0x4a, 0xf6, 0x53, 0xf7, 0x47, 0xf7, 0x43,
243 0xff, 0x3d, 0xf8, 0x42, 0xf2, 0x42, 0x00, 0x3b,
244 0x02, 0x3b, 0x11, 0xf6, 0x20, 0xf3, 0x2a, 0xf7,
245 0x31, 0xfb, 0x35, 0x00, 0x40, 0x03, 0x44, 0x0a,
246 0x42, 0x1b, 0x2f, 0x39, 0xfb, 0x47, 0x00, 0x18,
247 0xff, 0x24, 0xfe, 0x2a, 0xfe, 0x34, 0xf7, 0x39,
248 0xfa, 0x3f, 0xfc, 0x41, 0xfc, 0x43, 0xf9, 0x52,
249 0xfd, 0x51, 0xfd, 0x4c, 0xf9, 0x48, 0xfa, 0x4e,
250 0xf4, 0x48, 0xf2, 0x44, 0xfd, 0x46, 0xfa, 0x4c,
251 0xfb, 0x42, 0xfb, 0x3e, 0x00, 0x39, 0xfc, 0x3d,
252 0xf7, 0x3c, 0x01, 0x36, 0x02, 0x3a, 0x11, 0xf6,
253 0x20, 0xf3, 0x2a, 0xf7, 0x31, 0xfb, 0x35, 0x00,
254 0x40, 0x03, 0x44, 0x0a, 0x42, 0x1b, 0x2f, 0x39,
255 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
256 0x14, 0xf1, 0x02, 0x36, 0x03, 0x4a, 0x14, 0xf1,
257 0x02, 0x36, 0x03, 0x4a, 0xe4, 0x7f, 0xe9, 0x68,
258 0xfa, 0x35, 0xff, 0x36, 0x07, 0x33, 0x1d, 0x10,
259 0x19, 0x00, 0x0e, 0x00, 0xf6, 0x33, 0xfd, 0x3e,
260 0xe5, 0x63, 0x1a, 0x10, 0xfc, 0x55, 0xe8, 0x66,
261 0x05, 0x39, 0x06, 0x39, 0xef, 0x49, 0x0e, 0x39,
262 0x14, 0x28, 0x14, 0x0a, 0x1d, 0x00, 0x36, 0x00,
263 0x25, 0x2a, 0x0c, 0x61, 0xe0, 0x7f, 0xea, 0x75,
264 0xfe, 0x4a, 0xfc, 0x55, 0xe8, 0x66, 0x05, 0x39,
265 0xfa, 0x5d, 0xf2, 0x58, 0xfa, 0x2c, 0x04, 0x37,
266 0xf5, 0x59, 0xf1, 0x67, 0xeb, 0x74, 0x13, 0x39,
267 0x14, 0x3a, 0x04, 0x54, 0x06, 0x60, 0x01, 0x3f,
268 0xfb, 0x55, 0xf3, 0x6a, 0x05, 0x3f, 0x06, 0x4b,
269 0xfd, 0x5a, 0xff, 0x65, 0x03, 0x37, 0xfc, 0x4f,
270 0xfe, 0x4b, 0xf4, 0x61, 0xf9, 0x32, 0x01, 0x3c,
271 0x00, 0x29, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f,
272 0xf7, 0x53, 0x04, 0x56, 0x00, 0x61, 0xf9, 0x48,
273 0x0d, 0x29, 0x03, 0x3e, 0x07, 0x22, 0xf7, 0x58,
274 0xec, 0x7f, 0xdc, 0x7f, 0xef, 0x5b, 0xf2, 0x5f,
275 0xe7, 0x54, 0xe7, 0x56, 0xf4, 0x59, 0xef, 0x5b,
276 0xe1, 0x7f, 0xf2, 0x4c, 0xee, 0x67, 0xf3, 0x5a,
277 0xdb, 0x7f, 0x0b, 0x50, 0x05, 0x4c, 0x02, 0x54,
278 0x05, 0x4e, 0xfa, 0x37, 0x04, 0x3d, 0xf2, 0x53,
279 0xdb, 0x7f, 0xfb, 0x4f, 0xf5, 0x68, 0xf5, 0x5b,
280 0xe2, 0x7f, 0x00, 0x41, 0xfe, 0x4f, 0x00, 0x48,
281 0xfc, 0x5c, 0xfa, 0x38, 0x03, 0x44, 0xf8, 0x47,
282 0xf3, 0x62, 0xfc, 0x56, 0xf4, 0x58, 0xfb, 0x52,
283 0xfd, 0x48, 0xfc, 0x43, 0xf8, 0x48, 0xf0, 0x59,
284 0xf7, 0x45, 0xff, 0x3b, 0x05, 0x42, 0x04, 0x39,
285 0xfc, 0x47, 0xfe, 0x47, 0x02, 0x3a, 0xff, 0x4a,
286 0xfc, 0x2c, 0xff, 0x45, 0x00, 0x3e, 0xf9, 0x33,
287 0xfc, 0x2f, 0xfa, 0x2a, 0xfd, 0x29, 0xfa, 0x35,
288 0x08, 0x4c, 0xf7, 0x4e, 0xf5, 0x53, 0x09, 0x34,
289 0x00, 0x43, 0xfb, 0x5a, 0x01, 0x43, 0xf1, 0x48,
290 0xfb, 0x4b, 0xf8, 0x50, 0xeb, 0x53, 0xeb, 0x40,
291 0xf3, 0x1f, 0xe7, 0x40, 0xe3, 0x5e, 0x09, 0x4b,
292 0x11, 0x3f, 0xf8, 0x4a, 0xfb, 0x23, 0xfe, 0x1b,
293 0x0d, 0x5b, 0x03, 0x41, 0xf9, 0x45, 0x08, 0x4d,
294 0xf6, 0x42, 0x03, 0x3e, 0xfd, 0x44, 0xec, 0x51,
295 0x00, 0x1e, 0x01, 0x07, 0xfd, 0x17, 0xeb, 0x4a,
296 0x10, 0x42, 0xe9, 0x7c, 0x11, 0x25, 0x2c, 0xee,
297 0x32, 0xde, 0xea, 0x7f, 0x04, 0x27, 0x00, 0x2a,
298 0x07, 0x22, 0x0b, 0x1d, 0x08, 0x1f, 0x06, 0x25,
299 0x07, 0x2a, 0x03, 0x28, 0x08, 0x21, 0x0d, 0x2b,
300 0x0d, 0x24, 0x04, 0x2f, 0x03, 0x37, 0x02, 0x3a,
301 0x06, 0x3c, 0x08, 0x2c, 0x0b, 0x2c, 0x0e, 0x2a,
302 0x07, 0x30, 0x04, 0x38, 0x04, 0x34, 0x0d, 0x25,
303 0x09, 0x31, 0x13, 0x3a, 0x0a, 0x30, 0x0c, 0x2d,
304 0x00, 0x45, 0x14, 0x21, 0x08, 0x3f, 0x23, 0xee,
305 0x21, 0xe7, 0x1c, 0xfd, 0x18, 0x0a, 0x1b, 0x00,
306 0x22, 0xf2, 0x34, 0xd4, 0x27, 0xe8, 0x13, 0x11,
307 0x1f, 0x19, 0x24, 0x1d, 0x18, 0x21, 0x22, 0x0f,
308 0x1e, 0x14, 0x16, 0x49, 0x14, 0x22, 0x13, 0x1f,
309 0x1b, 0x2c, 0x13, 0x10, 0x0f, 0x24, 0x0f, 0x24,
310 0x15, 0x1c, 0x19, 0x15, 0x1e, 0x14, 0x1f, 0x0c,
311 0x1b, 0x10, 0x18, 0x2a, 0x00, 0x5d, 0x0e, 0x38,
312 0x0f, 0x39, 0x1a, 0x26, 0xe8, 0x7f, 0xe8, 0x73,
313 0xea, 0x52, 0xf7, 0x3e, 0x00, 0x35, 0x00, 0x3b,
314 0xf2, 0x55, 0xf3, 0x59, 0xf3, 0x5e, 0xf5, 0x5c,
315 0xe3, 0x7f, 0xeb, 0x64, 0xf2, 0x39, 0xf4, 0x43,
316 0xf5, 0x47, 0xf6, 0x4d, 0xeb, 0x55, 0xf0, 0x58,
317 0xe9, 0x68, 0xf1, 0x62, 0xdb, 0x7f, 0xf6, 0x52,
318 0xf8, 0x30, 0xf8, 0x3d, 0xf8, 0x42, 0xf9, 0x46,
319 0xf2, 0x4b, 0xf6, 0x4f, 0xf7, 0x53, 0xf4, 0x5c,
320 0xee, 0x6c, 0xfc, 0x4f, 0xea, 0x45, 0xf0, 0x4b,
321 0xfe, 0x3a, 0x01, 0x3a, 0xf3, 0x4e, 0xf7, 0x53,
322 0xfc, 0x51, 0xf3, 0x63, 0xf3, 0x51, 0xfa, 0x26,
323 0xf3, 0x3e, 0xfa, 0x3a, 0xfe, 0x3b, 0xf0, 0x49,
324 0xf6, 0x4c, 0xf3, 0x56, 0xf7, 0x53, 0xf6, 0x57,
325 0x00, 0x00, 0xea, 0x7f, 0xe7, 0x7f, 0xe7, 0x78,
326 0xe5, 0x7f, 0xed, 0x72, 0xe9, 0x75, 0xe7, 0x76,
327 0xe6, 0x75, 0xe8, 0x71, 0xe4, 0x76, 0xe1, 0x78,
328 0xdb, 0x7c, 0xf6, 0x5e, 0xf1, 0x66, 0xf6, 0x63,
329 0xf3, 0x6a, 0xce, 0x7f, 0xfb, 0x5c, 0x11, 0x39,
330 0xfb, 0x56, 0xf3, 0x5e, 0xf4, 0x5b, 0xfe, 0x4d,
331 0x00, 0x47, 0xff, 0x49, 0x04, 0x40, 0xf9, 0x51,
332 0x05, 0x40, 0x0f, 0x39, 0x01, 0x43, 0x00, 0x44,
333 0xf6, 0x43, 0x01, 0x44, 0x00, 0x4d, 0x02, 0x40,
334 0x00, 0x44, 0xfb, 0x4e, 0x07, 0x37, 0x05, 0x3b,
335 0x02, 0x41, 0x0e, 0x36, 0x0f, 0x2c, 0x05, 0x3c,
336 0x02, 0x46, 0xfe, 0x4c, 0xee, 0x56, 0x0c, 0x46,
337 0x05, 0x40, 0xf4, 0x46, 0x0b, 0x37, 0x05, 0x38,
338 0x00, 0x45, 0x02, 0x41, 0xfa, 0x4a, 0x05, 0x36,
339 0x07, 0x36, 0xfa, 0x4c, 0xf5, 0x52, 0xfe, 0x4d,
340 0xfe, 0x4d, 0x19, 0x2a, 0x11, 0xf3, 0x10, 0xf7,
341 0x11, 0xf4, 0x1b, 0xeb, 0x25, 0xe2, 0x29, 0xd8,
342 0x2a, 0xd7, 0x30, 0xd1, 0x27, 0xe0, 0x2e, 0xd8,
343 0x34, 0xcd, 0x2e, 0xd7, 0x34, 0xd9, 0x2b, 0xed,
344 0x20, 0x0b, 0x3d, 0xc9, 0x38, 0xd2, 0x3e, 0xce,
345 0x51, 0xbd, 0x2d, 0xec, 0x23, 0xfe, 0x1c, 0x0f,
346 0x22, 0x01, 0x27, 0x01, 0x1e, 0x11, 0x14, 0x26,
347 0x12, 0x2d, 0x0f, 0x36, 0x00, 0x4f, 0x24, 0xf0,
348 0x25, 0xf2, 0x25, 0xef, 0x20, 0x01, 0x22, 0x0f,
349 0x1d, 0x0f, 0x18, 0x19, 0x22, 0x16, 0x1f, 0x10,
350 0x23, 0x12, 0x1f, 0x1c, 0x21, 0x29, 0x24, 0x1c,
351 0x1b, 0x2f, 0x15, 0x3e, 0x12, 0x1f, 0x13, 0x1a,
352 0x24, 0x18, 0x18, 0x17, 0x1b, 0x10, 0x18, 0x1e,
353 0x1f, 0x1d, 0x16, 0x29, 0x16, 0x2a, 0x10, 0x3c,
354 0x0f, 0x34, 0x0e, 0x3c, 0x03, 0x4e, 0xf0, 0x7b,
355 0x15, 0x35, 0x16, 0x38, 0x19, 0x3d, 0x15, 0x21,
356 0x13, 0x32, 0x11, 0x3d, 0xfd, 0x4e, 0xf8, 0x4a,
357 0xf7, 0x48, 0xf6, 0x48, 0xee, 0x4b, 0xf4, 0x47,
358 0xf5, 0x3f, 0xfb, 0x46, 0xef, 0x4b, 0xf2, 0x48,
359 0xf0, 0x43, 0xf8, 0x35, 0xf2, 0x3b, 0xf7, 0x34,
360 0xf5, 0x44, 0x09, 0xfe, 0x1e, 0xf6, 0x1f, 0xfc,
361 0x21, 0xff, 0x21, 0x07, 0x1f, 0x0c, 0x25, 0x17,
362 0x1f, 0x26, 0x14, 0x40, 0xf7, 0x47, 0xf9, 0x25,
363 0xf8, 0x2c, 0xf5, 0x31, 0xf6, 0x38, 0xf4, 0x3b,
364 0xf8, 0x3f, 0xf7, 0x43, 0xfa, 0x44, 0xf6, 0x4f,
365 0xfd, 0x4e, 0xf8, 0x4a, 0xf7, 0x48, 0xf6, 0x48,
366 0xee, 0x4b, 0xf4, 0x47, 0xf5, 0x3f, 0xfb, 0x46,
367 0xef, 0x4b, 0xf2, 0x48, 0xf0, 0x43, 0xf8, 0x35,
368 0xf2, 0x3b, 0xf7, 0x34, 0xf5, 0x44, 0x09, 0xfe,
369 0x1e, 0xf6, 0x1f, 0xfc, 0x21, 0xff, 0x21, 0x07,
370 0x1f, 0x0c, 0x25, 0x17, 0x1f, 0x26, 0x14, 0x40,
371 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
372 0x14, 0xf1, 0x02, 0x36, 0x03, 0x4a, 0x14, 0xf1,
373 0x02, 0x36, 0x03, 0x4a, 0xe4, 0x7f, 0xe9, 0x68,
374 0xfa, 0x35, 0xff, 0x36, 0x07, 0x33, 0x00, 0x00,
375 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
376 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
377 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
378 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
379 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
380 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
381 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
382 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
383 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
384 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
385 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
386 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
387 0x00, 0x29, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f,
388 0xf7, 0x53, 0x04, 0x56, 0x00, 0x61, 0xf9, 0x48,
389 0x0d, 0x29, 0x03, 0x3e, 0x00, 0x0b, 0x01, 0x37,
390 0x00, 0x45, 0xef, 0x7f, 0xf3, 0x66, 0x00, 0x52,
391 0xf9, 0x4a, 0xeb, 0x6b, 0xe5, 0x7f, 0xe1, 0x7f,
392 0xe8, 0x7f, 0xee, 0x5f, 0xe5, 0x7f, 0xeb, 0x72,
393 0xe2, 0x7f, 0xef, 0x7b, 0xf4, 0x73, 0xf0, 0x7a,
394 0xf5, 0x73, 0xf4, 0x3f, 0xfe, 0x44, 0xf1, 0x54,
395 0xf3, 0x68, 0xfd, 0x46, 0xf8, 0x5d, 0xf6, 0x5a,
396 0xe2, 0x7f, 0xff, 0x4a, 0xfa, 0x61, 0xf9, 0x5b,
397 0xec, 0x7f, 0xfc, 0x38, 0xfb, 0x52, 0xf9, 0x4c,
398 0xea, 0x7d, 0xf9, 0x5d, 0xf5, 0x57, 0xfd, 0x4d,
399 0xfb, 0x47, 0xfc, 0x3f, 0xfc, 0x44, 0xf4, 0x54,
400 0xf9, 0x3e, 0xf9, 0x41, 0x08, 0x3d, 0x05, 0x38,
401 0xfe, 0x42, 0x01, 0x40, 0x00, 0x3d, 0xfe, 0x4e,
402 0x01, 0x32, 0x07, 0x34, 0x0a, 0x23, 0x00, 0x2c,
403 0x0b, 0x26, 0x01, 0x2d, 0x00, 0x2e, 0x05, 0x2c,
404 0x1f, 0x11, 0x01, 0x33, 0x07, 0x32, 0x1c, 0x13,
405 0x10, 0x21, 0x0e, 0x3e, 0xf3, 0x6c, 0xf1, 0x64,
406 0xf3, 0x65, 0xf3, 0x5b, 0xf4, 0x5e, 0xf6, 0x58,
407 0xf0, 0x54, 0xf6, 0x56, 0xf9, 0x53, 0xf3, 0x57,
408 0xed, 0x5e, 0x01, 0x46, 0x00, 0x48, 0xfb, 0x4a,
409 0x12, 0x3b, 0xf8, 0x66, 0xf1, 0x64, 0x00, 0x5f,
410 0xfc, 0x4b, 0x02, 0x48, 0xf5, 0x4b, 0xfd, 0x47,
411 0x0f, 0x2e, 0xf3, 0x45, 0x00, 0x3e, 0x00, 0x41,
412 0x15, 0x25, 0xf1, 0x48, 0x09, 0x39, 0x10, 0x36,
413 0x00, 0x3e, 0x0c, 0x48, 0x18, 0x00, 0x0f, 0x09,
414 0x08, 0x19, 0x0d, 0x12, 0x0f, 0x09, 0x0d, 0x13,
415 0x0a, 0x25, 0x0c, 0x12, 0x06, 0x1d, 0x14, 0x21,
416 0x0f, 0x1e, 0x04, 0x2d, 0x01, 0x3a, 0x00, 0x3e,
417 0x07, 0x3d, 0x0c, 0x26, 0x0b, 0x2d, 0x0f, 0x27,
418 0x0b, 0x2a, 0x0d, 0x2c, 0x10, 0x2d, 0x0c, 0x29,
419 0x0a, 0x31, 0x1e, 0x22, 0x12, 0x2a, 0x0a, 0x37,
420 0x11, 0x33, 0x11, 0x2e, 0x00, 0x59, 0x1a, 0xed,
421 0x16, 0xef, 0x1a, 0xef, 0x1e, 0xe7, 0x1c, 0xec,
422 0x21, 0xe9, 0x25, 0xe5, 0x21, 0xe9, 0x28, 0xe4,
423 0x26, 0xef, 0x21, 0xf5, 0x28, 0xf1, 0x29, 0xfa,
424 0x26, 0x01, 0x29, 0x11, 0x1e, 0xfa, 0x1b, 0x03,
425 0x1a, 0x16, 0x25, 0xf0, 0x23, 0xfc, 0x26, 0xf8,
426 0x26, 0xfd, 0x25, 0x03, 0x26, 0x05, 0x2a, 0x00,
427 0x23, 0x10, 0x27, 0x16, 0x0e, 0x30, 0x1b, 0x25,
428 0x15, 0x3c, 0x0c, 0x44, 0x02, 0x61, 0xfd, 0x47,
429 0xfa, 0x2a, 0xfb, 0x32, 0xfd, 0x36, 0xfe, 0x3e,
430 0x00, 0x3a, 0x01, 0x3f, 0xfe, 0x48, 0xff, 0x4a,
431 0xf7, 0x5b, 0xfb, 0x43, 0xfb, 0x1b, 0xfd, 0x27,
432 0xfe, 0x2c, 0x00, 0x2e, 0xf0, 0x40, 0xf8, 0x44,
433 0xf6, 0x4e, 0xfa, 0x4d, 0xf6, 0x56, 0xf4, 0x5c,
434 0xf1, 0x37, 0xf6, 0x3c, 0xfa, 0x3e, 0xfc, 0x41,
435 0xf4, 0x49, 0xf8, 0x4c, 0xf9, 0x50, 0xf7, 0x58,
436 0xef, 0x6e, 0xf5, 0x61, 0xec, 0x54, 0xf5, 0x4f,
437 0xfa, 0x49, 0xfc, 0x4a, 0xf3, 0x56, 0xf3, 0x60,
438 0xf5, 0x61, 0xed, 0x75, 0xf8, 0x4e, 0xfb, 0x21,
439 0xfc, 0x30, 0xfe, 0x35, 0xfd, 0x3e, 0xf3, 0x47,
440 0xf6, 0x4f, 0xf4, 0x56, 0xf3, 0x5a, 0xf2, 0x61,
441 0x00, 0x00, 0xfa, 0x5d, 0xfa, 0x54, 0xf8, 0x4f,
442 0x00, 0x42, 0xff, 0x47, 0x00, 0x3e, 0xfe, 0x3c,
443 0xfe, 0x3b, 0xfb, 0x4b, 0xfd, 0x3e, 0xfc, 0x3a,
444 0xf7, 0x42, 0xff, 0x4f, 0x00, 0x47, 0x03, 0x44,
445 0x0a, 0x2c, 0xf9, 0x3e, 0x0f, 0x24, 0x0e, 0x28,
446 0x10, 0x1b, 0x0c, 0x1d, 0x01, 0x2c, 0x14, 0x24,
447 0x12, 0x20, 0x05, 0x2a, 0x01, 0x30, 0x0a, 0x3e,
448 0x11, 0x2e, 0x09, 0x40, 0xf4, 0x68, 0xf5, 0x61,
449 0xf0, 0x60, 0xf9, 0x58, 0xf8, 0x55, 0xf9, 0x55,
450 0xf7, 0x55, 0xf3, 0x58, 0x04, 0x42, 0xfd, 0x4d,
451 0xfd, 0x4c, 0xfa, 0x4c, 0x0a, 0x3a, 0xff, 0x4c,
452 0xff, 0x53, 0xf9, 0x63, 0xf2, 0x5f, 0x02, 0x5f,
453 0x00, 0x4c, 0xfb, 0x4a, 0x00, 0x46, 0xf5, 0x4b,
454 0x01, 0x44, 0x00, 0x41, 0xf2, 0x49, 0x03, 0x3e,
455 0x04, 0x3e, 0xff, 0x44, 0xf3, 0x4b, 0x0b, 0x37,
456 0x05, 0x40, 0x0c, 0x46, 0x0f, 0x06, 0x06, 0x13,
457 0x07, 0x10, 0x0c, 0x0e, 0x12, 0x0d, 0x0d, 0x0b,
458 0x0d, 0x0f, 0x0f, 0x10, 0x0c, 0x17, 0x0d, 0x17,
459 0x0f, 0x14, 0x0e, 0x1a, 0x0e, 0x2c, 0x11, 0x28,
460 0x11, 0x2f, 0x18, 0x11, 0x15, 0x15, 0x19, 0x16,
461 0x1f, 0x1b, 0x16, 0x1d, 0x13, 0x23, 0x0e, 0x32,
462 0x0a, 0x39, 0x07, 0x3f, 0xfe, 0x4d, 0xfc, 0x52,
463 0xfd, 0x5e, 0x09, 0x45, 0xf4, 0x6d, 0x24, 0xdd,
464 0x24, 0xde, 0x20, 0xe6, 0x25, 0xe2, 0x2c, 0xe0,
465 0x22, 0xee, 0x22, 0xf1, 0x28, 0xf1, 0x21, 0xf9,
466 0x23, 0xfb, 0x21, 0x00, 0x26, 0x02, 0x21, 0x0d,
467 0x17, 0x23, 0x0d, 0x3a, 0x1d, 0xfd, 0x1a, 0x00,
468 0x16, 0x1e, 0x1f, 0xf9, 0x23, 0xf1, 0x22, 0xfd,
469 0x22, 0x03, 0x24, 0xff, 0x22, 0x05, 0x20, 0x0b,
470 0x23, 0x05, 0x22, 0x0c, 0x27, 0x0b, 0x1e, 0x1d,
471 0x22, 0x1a, 0x1d, 0x27, 0x13, 0x42, 0x1f, 0x15,
472 0x1f, 0x1f, 0x19, 0x32, 0xef, 0x78, 0xec, 0x70,
473 0xee, 0x72, 0xf5, 0x55, 0xf1, 0x5c, 0xf2, 0x59,
474 0xe6, 0x47, 0xf1, 0x51, 0xf2, 0x50, 0x00, 0x44,
475 0xf2, 0x46, 0xe8, 0x38, 0xe9, 0x44, 0xe8, 0x32,
476 0xf5, 0x4a, 0x17, 0xf3, 0x1a, 0xf3, 0x28, 0xf1,
477 0x31, 0xf2, 0x2c, 0x03, 0x2d, 0x06, 0x2c, 0x22,
478 0x21, 0x36, 0x13, 0x52, 0xfd, 0x4b, 0xff, 0x17,
479 0x01, 0x22, 0x01, 0x2b, 0x00, 0x36, 0xfe, 0x37,
480 0x00, 0x3d, 0x01, 0x40, 0x00, 0x44, 0xf7, 0x5c,
481 0xf2, 0x6a, 0xf3, 0x61, 0xf1, 0x5a, 0xf4, 0x5a,
482 0xee, 0x58, 0xf6, 0x49, 0xf7, 0x4f, 0xf2, 0x56,
483 0xf6, 0x49, 0xf6, 0x46, 0xf6, 0x45, 0xfb, 0x42,
484 0xf7, 0x40, 0xfb, 0x3a, 0x02, 0x3b, 0x15, 0xf6,
485 0x18, 0xf5, 0x1c, 0xf8, 0x1c, 0xff, 0x1d, 0x03,
486 0x1d, 0x09, 0x23, 0x14, 0x1d, 0x24, 0x0e, 0x43,
487 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
488 };
489
490 static const char h264_fix_data[] = {
491 /* 128 * 0 stream in */
492 0x00, 0x00, 0x01, 0x65, 0x88, 0x81, 0x00, 0x9F,
493 0xFE, 0x6F, 0x5F, 0x32, 0xC5, 0x42, 0x54, 0x26,
494 0x81, 0xD5, 0xE9, 0x71, 0x10, 0x00, 0x00, 0x00,
495 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
496 /* stuff */
497 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
498 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
499 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
500 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
501 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
502 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
503 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
504 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
505 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
506 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
507 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
508 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
509
510 /* 128 * 1 rps in */
511 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
512 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
513 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
514 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
515 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
516 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
517 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
518 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
519 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
520 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
521 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
522 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
523 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
524 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
525 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
526 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
527
528 /* 128 * 2 pps in */
529 0xff, 0x3f, 0x80, 0x14, 0x40, 0x00, 0x04, 0x40,
530 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
531 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
532 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
533 0xff, 0x3f, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00,
534 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
535 /* stuff */
536 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
537 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
538 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
539 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
540 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
541 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
542 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
543 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
544 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
545 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
546 /* rlc out */
547 };
548
549 static struct hack_info rkvdec2_3568_hack[] = {
550 {0x00000001, 0x0510},
551 {0x00000001, 0x0550},
552 {0x00000001, 0x0590},
553 {0x00000000, 0x0020},
554 {0x00000001, 0x0024},
555 {0x00000072, 0x002c},
556 {0x00000102, 0x0030},
557 {0x01048201, 0x0034},
558 {0x00000000, 0x0038},
559 {0x00000001, 0x003c},
560 {0x00000030, 0x0040},
561 {0x00003fff, 0x0044},
562 {0x00000001, 0x0048},
563 {0x00000001, 0x004c},
564 {0x00000010, 0x0050},
565 {0x00000006, 0x0054},
566 {0x00000000, 0x0058},
567 {0x00000000, 0x005c},
568 {0xffffdfff, 0x0060},
569 {0x3ffbfbff, 0x0064},
570 {0x800fffff, 0x0068},
571 {0x000000ff, 0x0080},
572 {0x00000000, 0x0100},
573 {0x00000000, 0x0104},
574 {0x00000000, 0x0108},
575 {0x00000000, 0x010c},
576 {0x00000000, 0x0110},
577 {0x00000000, 0x0114},
578 {0x00000000, 0x0118},
579 {0x00000000, 0x011c},
580 {0x00000000, 0x0120},
581 {0x00000000, 0x0124},
582 {0x00000000, 0x0128},
583 {0x00000000, 0x012c},
584 {0x00000000, 0x0130},
585 {0x00000000, 0x0134},
586 {0x00000000, 0x0138},
587 {0x00000000, 0x013c},
588 {0x00000000, 0x0140},
589 {0x00000000, 0x0144},
590 {0x00000000, 0x0148},
591 {0x00000000, 0x014c},
592 {0x00000000, 0x0150},
593 {0x00000000, 0x0154},
594 {0x00000000, 0x0158},
595 {0x00000000, 0x015c},
596 {0x00000000, 0x0160},
597 {0x00000000, 0x0164},
598 {0x00000000, 0x0168},
599 {0x00000000, 0x016c},
600 {0x00000000, 0x0170},
601 {0x00000000, 0x0174},
602 {0x00000000, 0x0178},
603 {0x00000000, 0x017c},
604 {0x00000000, 0x0180},
605 {0x00000000, 0x0184},
606 {0x00000000, 0x0188},
607 {0x00000000, 0x018c},
608 {0x00000000, 0x0190},
609 {0x00000000, 0x0194},
610 {0x00000000, 0x0198},
611 {0x00000000, 0x019c},
612 {0x00000000, 0x01a0},
613 {0x00000000, 0x01a4},
614 {0x00000000, 0x01a8},
615 {0x00000000, 0x01ac},
616 {0x00000000, 0x01b0},
617 {0x00000000, 0x01b4},
618 {0x00000000, 0x01b8},
619 {0x00000000, 0x01bc},
620 {0x00000000, 0x01c0},
621 {0x00000000, 0x0200},
622 {0x00000000, 0x0204},
623 {0x00000000, 0x0208},
624 {0x00000000, 0x020c},
625 {0x00000000, 0x0210},
626 {0x100001c0, 0x0214},
627 {0x100001c0, 0x0218},
628 {0x100001c0, 0x021c},
629 {0x100001c0, 0x0220},
630 {0x10000340, 0x0224},
631 {0x10000340, 0x0228},
632 {0x10000000, 0x022c},
633 {0x10000000, 0x0230},
634 {0x10000000, 0x0234},
635 {0x10000000, 0x0238},
636 {0x00000000, 0x0280},
637 {0x00000000, 0x0284},
638 {0x00000000, 0x0288},
639 {0x00000000, 0x028c},
640 {0x00000000, 0x0290},
641 {0x00000000, 0x0294},
642 {0x00000000, 0x0298},
643 {0x00000000, 0x029c},
644 {0x00000000, 0x02a0},
645 {0x00000000, 0x02a4},
646 {0x00000000, 0x02a8},
647 {0x00000000, 0x02ac},
648 {0x00000000, 0x02b0},
649 {0x00000000, 0x02b4},
650 {0x00000000, 0x02b8},
651 {0x00000000, 0x02bc},
652 {0x00000000, 0x02c0},
653 {0x00000000, 0x02c4},
654 {0x00000000, 0x02c8},
655 {0x00000000, 0x02cc},
656 {0x00000000, 0x02d0},
657 {0x00000000, 0x02d4},
658 {0x00000000, 0x02d8},
659 {0x00000000, 0x02dc},
660 {0x00000000, 0x02e0},
661 {0x00000000, 0x02e4},
662 {0x00000000, 0x02e8},
663 {0x00000000, 0x02ec},
664 {0x00000000, 0x02f0},
665 {0x00000000, 0x02f4},
666 {0x00000000, 0x02f8},
667 {0x00000000, 0x02fc},
668 {0x00000000, 0x0300},
669 {0x00000000, 0x0304},
670 {0x00000000, 0x0308},
671 {0x00000000, 0x030c},
672 {0x00000000, 0x0310},
673 {0x00000000, 0x0314},
674 {0x00000000, 0x0380},
675 };
676
rkvdec2_3568_hack_data_setup(struct mpp_dma_buffer * fix)677 void rkvdec2_3568_hack_data_setup(struct mpp_dma_buffer *fix)
678 {
679 u32 iova = fix->iova;
680 u32 i;
681
682 memcpy(fix->vaddr, h264_fix_data, sizeof(h264_fix_data));
683 memcpy(fix->vaddr + PAGE_SIZE, h264_cabac_tbl, sizeof(h264_cabac_tbl));
684
685 /* input stream 0x0200*/
686 rkvdec2_3568_hack[71].data = iova;
687 /* rlc */
688 rkvdec2_3568_hack[72].data = iova + RKDEC_HACK_DATA_RLC_OFFSET;
689 /* output frame 0x0208*/
690 rkvdec2_3568_hack[73].data = iova + RKDEC_HACK_DATA_OUT_OFFSET;
691 /* colmv out 0x020c*/
692 rkvdec2_3568_hack[74].data = iova + RKDEC_HACK_DATA_COLMV_OFFSET;
693
694 /* pps in */
695 rkvdec2_3568_hack[87].data = iova + RKDEC_HACK_DATA_PPS_OFFSET;
696 /* rps in */
697 rkvdec2_3568_hack[89].data = iova + RKDEC_HACK_DATA_RPS_OFFSET;
698 for (i = 0; i < 33; i++)
699 rkvdec2_3568_hack[90 + i].data = iova + RKDEC_HACK_DATA_COLMV_OFFSET;
700 rkvdec2_3568_hack[123].data = iova + PAGE_SIZE;
701 }
702
rkvdec2_3568_hack_fix(struct mpp_dev * mpp)703 void rkvdec2_3568_hack_fix(struct mpp_dev *mpp)
704 {
705 void __iomem *reg_base = mpp->reg_base;
706 unsigned long flags;
707 u32 reg;
708 u32 cnt = 0;
709 u32 i = 0;
710
711 for (i = 0; i < ARRAY_SIZE(rkvdec2_3568_hack); i++)
712 writel_relaxed(rkvdec2_3568_hack[i].data, reg_base + rkvdec2_3568_hack[i].offset);
713
714 local_irq_save(flags);
715 /* write all data to register before start hardware */
716 wmb();
717 writel(0x00000001, reg_base + 0x0028);
718
719 udelay(5);
720
721 reg = readl(mpp->reg_base + 0x0380);
722 while ((reg & 0x106) != 0x106) {
723 udelay(2);
724 reg = readl(mpp->reg_base + 0x0380);
725 cnt++;
726 if (cnt > 25)
727 break;
728 }
729 /* clear irq */
730 writel(0x00000000, reg_base + 0x0380);
731 local_irq_restore(flags);
732 }
733