xref: /OK3568_Linux_fs/kernel/drivers/video/rockchip/mpp/hack/mpp_rkvdec2_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 #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