blob: f820b16afca6079aaca357506f2dbcf76d8037d6 [file] [log] [blame]
Ted Chen9b6dbd42016-01-20 14:24:52 +08001/*
2 * Copyright (c) 2015 Realtek Semiconductor Corp. All rights reserved.
3 *
4 * SPDX-License-Identifier: GPL-2.0
5 *
6 */
7#include <common.h>
8#include <errno.h>
9#include "r8152.h"
10
11static u8 r8152b_pla_patch_a[] = {
12 0x08, 0xe0, 0x40, 0xe0, 0x78, 0xe0, 0x85, 0xe0,
13 0x5d, 0xe1, 0xa1, 0xe1, 0xa3, 0xe1, 0xab, 0xe1,
14 0x31, 0xc3, 0x60, 0x72, 0xa0, 0x49, 0x10, 0xf0,
15 0xa4, 0x49, 0x0e, 0xf0, 0x2c, 0xc3, 0x62, 0x72,
16 0x26, 0x70, 0x80, 0x49, 0x05, 0xf0, 0x2f, 0x48,
17 0x62, 0x9a, 0x24, 0x70, 0x60, 0x98, 0x24, 0xc3,
18 0x60, 0x99, 0x23, 0xc3, 0x00, 0xbb, 0x2c, 0x75,
19 0xdc, 0x21, 0xbc, 0x25, 0x04, 0x13, 0x0a, 0xf0,
20 0x03, 0x13, 0x08, 0xf0, 0x02, 0x13, 0x06, 0xf0,
21 0x01, 0x13, 0x04, 0xf0, 0x08, 0x13, 0x02, 0xf0,
22 0x03, 0xe0, 0xd4, 0x49, 0x04, 0xf1, 0x14, 0xc2,
23 0x12, 0xc3, 0x00, 0xbb, 0x12, 0xc3, 0x60, 0x75,
24 0xd0, 0x49, 0x05, 0xf1, 0x50, 0x48, 0x60, 0x9d,
25 0x09, 0xc6, 0x00, 0xbe, 0xd0, 0x48, 0x60, 0x9d,
26 0xf3, 0xe7, 0xc2, 0xc0, 0x38, 0xd2, 0xc6, 0xd2,
27 0x84, 0x17, 0xa2, 0x13, 0x0c, 0x17, 0xbc, 0xc0,
28 0xa2, 0xd1, 0x33, 0xc5, 0xa0, 0x74, 0xc0, 0x49,
29 0x1f, 0xf0, 0x30, 0xc5, 0xa0, 0x73, 0x00, 0x13,
30 0x04, 0xf1, 0xa2, 0x73, 0x00, 0x13, 0x14, 0xf0,
31 0x28, 0xc5, 0xa0, 0x74, 0xc8, 0x49, 0x1b, 0xf1,
32 0x26, 0xc5, 0xa0, 0x76, 0xa2, 0x74, 0x01, 0x06,
33 0x20, 0x37, 0xa0, 0x9e, 0xa2, 0x9c, 0x1e, 0xc5,
34 0xa2, 0x73, 0x23, 0x40, 0x10, 0xf8, 0x04, 0xf3,
35 0xa0, 0x73, 0x33, 0x40, 0x0c, 0xf8, 0x15, 0xc5,
36 0xa0, 0x74, 0x41, 0x48, 0xa0, 0x9c, 0x14, 0xc5,
37 0xa0, 0x76, 0x62, 0x48, 0xe0, 0x48, 0xa0, 0x9e,
38 0x10, 0xc6, 0x00, 0xbe, 0x0a, 0xc5, 0xa0, 0x74,
39 0x48, 0x48, 0xa0, 0x9c, 0x0b, 0xc5, 0x20, 0x1e,
40 0xa0, 0x9e, 0xe5, 0x48, 0xa0, 0x9e, 0xf0, 0xe7,
41 0xbc, 0xc0, 0xc8, 0xd2, 0xcc, 0xd2, 0x28, 0xe4,
42 0x22, 0x02, 0xf0, 0xc0, 0x0b, 0xc0, 0x00, 0x71,
43 0x0a, 0xc0, 0x00, 0x72, 0xa0, 0x49, 0x04, 0xf0,
44 0xa4, 0x49, 0x02, 0xf0, 0x93, 0x48, 0x04, 0xc0,
45 0x00, 0xb8, 0x00, 0xe4, 0xc2, 0xc0, 0x8c, 0x09,
46 0x14, 0xc2, 0x40, 0x73, 0xba, 0x48, 0x40, 0x9b,
47 0x11, 0xc2, 0x40, 0x73, 0xb0, 0x49, 0x17, 0xf0,
48 0xbf, 0x49, 0x03, 0xf1, 0x09, 0xc5, 0x00, 0xbd,
49 0xb1, 0x49, 0x11, 0xf0, 0xb1, 0x48, 0x40, 0x9b,
50 0x02, 0xc2, 0x00, 0xba, 0x82, 0x18, 0x00, 0xa0,
51 0x1e, 0xfc, 0xbc, 0xc0, 0xf0, 0xc0, 0xde, 0xe8,
52 0x00, 0x80, 0x00, 0x60, 0x2c, 0x75, 0xd4, 0x49,
53 0x12, 0xf1, 0x29, 0xe0, 0xf8, 0xc2, 0x46, 0x71,
54 0xf7, 0xc2, 0x40, 0x73, 0xbe, 0x49, 0x03, 0xf1,
55 0xf5, 0xc7, 0x02, 0xe0, 0xf2, 0xc7, 0x4f, 0x30,
56 0x26, 0x62, 0xa1, 0x49, 0xf0, 0xf1, 0x22, 0x72,
57 0xa0, 0x49, 0xed, 0xf1, 0x25, 0x25, 0x18, 0x1f,
58 0x97, 0x30, 0x91, 0x30, 0x36, 0x9a, 0x2c, 0x75,
59 0x32, 0xc3, 0x60, 0x73, 0xb1, 0x49, 0x0d, 0xf1,
60 0xdc, 0x21, 0xbc, 0x25, 0x27, 0xc6, 0xc0, 0x77,
61 0x04, 0x13, 0x18, 0xf0, 0x03, 0x13, 0x19, 0xf0,
62 0x02, 0x13, 0x1a, 0xf0, 0x01, 0x13, 0x1b, 0xf0,
63 0xd4, 0x49, 0x03, 0xf1, 0x1c, 0xc5, 0x00, 0xbd,
64 0xcd, 0xc6, 0xc6, 0x67, 0x2e, 0x75, 0xd7, 0x22,
65 0xdd, 0x26, 0x05, 0x15, 0x1a, 0xf0, 0x14, 0xc6,
66 0x00, 0xbe, 0x13, 0xc5, 0x00, 0xbd, 0x12, 0xc5,
67 0x00, 0xbd, 0xf1, 0x49, 0xfb, 0xf1, 0xef, 0xe7,
68 0xf4, 0x49, 0xfa, 0xf1, 0xec, 0xe7, 0xf3, 0x49,
69 0xf7, 0xf1, 0xe9, 0xe7, 0xf2, 0x49, 0xf4, 0xf1,
70 0xe6, 0xe7, 0xb6, 0xc0, 0x6a, 0x14, 0xac, 0x13,
71 0xd6, 0x13, 0xfa, 0x14, 0xa0, 0xd1, 0x00, 0x00,
72 0xc0, 0x75, 0xd0, 0x49, 0x46, 0xf0, 0x26, 0x72,
73 0xa7, 0x49, 0x43, 0xf0, 0x22, 0x72, 0x25, 0x25,
74 0x20, 0x1f, 0x97, 0x30, 0x91, 0x30, 0x40, 0x73,
75 0xf3, 0xc4, 0x1c, 0x40, 0x04, 0xf0, 0xd7, 0x49,
76 0x05, 0xf1, 0x37, 0xe0, 0x53, 0x48, 0xc0, 0x9d,
77 0x08, 0x02, 0x40, 0x66, 0x64, 0x27, 0x06, 0x16,
78 0x30, 0xf1, 0x46, 0x63, 0x3b, 0x13, 0x2d, 0xf1,
79 0x34, 0x9b, 0x18, 0x1b, 0x93, 0x30, 0x2b, 0xc3,
80 0x10, 0x1c, 0x2b, 0xe8, 0x01, 0x14, 0x25, 0xf1,
81 0x00, 0x1d, 0x26, 0x1a, 0x8a, 0x30, 0x22, 0x73,
82 0xb5, 0x25, 0x0e, 0x0b, 0x00, 0x1c, 0x2c, 0xe8,
83 0x1f, 0xc7, 0x27, 0x40, 0x1a, 0xf1, 0x38, 0xe8,
84 0x32, 0x1f, 0x8f, 0x30, 0x08, 0x1b, 0x24, 0xe8,
85 0x36, 0x72, 0x46, 0x77, 0x00, 0x17, 0x0d, 0xf0,
86 0x13, 0xc3, 0x1f, 0x40, 0x03, 0xf1, 0x00, 0x1f,
87 0x46, 0x9f, 0x44, 0x77, 0x9f, 0x44, 0x5f, 0x44,
88 0x17, 0xe8, 0x0a, 0xc7, 0x27, 0x40, 0x05, 0xf1,
89 0x02, 0xc3, 0x00, 0xbb, 0x50, 0x1a, 0x06, 0x1a,
90 0xff, 0xc7, 0x00, 0xbf, 0xb8, 0xcd, 0xff, 0xff,
91 0x02, 0x0c, 0x54, 0xa5, 0xdc, 0xa5, 0x2f, 0x40,
92 0x05, 0xf1, 0x00, 0x14, 0xfa, 0xf1, 0x01, 0x1c,
93 0x02, 0xe0, 0x00, 0x1c, 0x80, 0xff, 0xb0, 0x49,
94 0x04, 0xf0, 0x01, 0x0b, 0xd3, 0xa1, 0x03, 0xe0,
95 0x02, 0x0b, 0xd3, 0xa5, 0x27, 0x31, 0x20, 0x37,
96 0x02, 0x0b, 0xd3, 0xa5, 0x27, 0x31, 0x20, 0x37,
97 0x00, 0x13, 0xfb, 0xf1, 0x80, 0xff, 0x22, 0x73,
98 0xb5, 0x25, 0x18, 0x1e, 0xde, 0x30, 0xd9, 0x30,
99 0x64, 0x72, 0x11, 0x1e, 0x68, 0x23, 0x16, 0x31,
100 0x80, 0xff, 0xd4, 0x49, 0x28, 0xf0, 0x02, 0xb4,
101 0x2a, 0xc4, 0x00, 0x1d, 0x2e, 0xe8, 0xe0, 0x73,
102 0xb9, 0x21, 0xbd, 0x25, 0x04, 0x13, 0x02, 0xf0,
103 0x1a, 0xe0, 0x22, 0xc4, 0x23, 0xc3, 0x2f, 0xe8,
104 0x23, 0xc3, 0x2d, 0xe8, 0x00, 0x1d, 0x21, 0xe8,
105 0xe2, 0x73, 0xbb, 0x49, 0xfc, 0xf0, 0xe0, 0x73,
106 0xb7, 0x48, 0x03, 0xb4, 0x81, 0x1d, 0x19, 0xe8,
107 0x40, 0x1a, 0x84, 0x1d, 0x16, 0xe8, 0x12, 0xc3,
108 0x1e, 0xe8, 0x03, 0xb0, 0x81, 0x1d, 0x11, 0xe8,
109 0x0e, 0xc3, 0x19, 0xe8, 0x02, 0xb0, 0x06, 0xc7,
110 0x04, 0x1e, 0xe0, 0x9e, 0x02, 0xc6, 0x00, 0xbe,
111 0x22, 0x02, 0x20, 0xe4, 0x04, 0xb8, 0x34, 0xb0,
112 0x00, 0x02, 0x00, 0x03, 0x00, 0x0e, 0x00, 0x0c,
113 0x09, 0xc7, 0xe0, 0x9b, 0xe2, 0x9a, 0xe4, 0x9c,
114 0xe6, 0x8d, 0xe6, 0x76, 0xef, 0x49, 0xfe, 0xf1,
115 0x80, 0xff, 0x08, 0xea, 0x82, 0x1d, 0xf5, 0xef,
116 0x00, 0x1a, 0x88, 0x1d, 0xf2, 0xef, 0xed, 0xc2,
117 0xf0, 0xef, 0x80, 0xff, 0x02, 0xc6, 0x00, 0xbe,
118 0x46, 0x06, 0x08, 0xc2, 0x40, 0x73, 0x3a, 0x48,
119 0x40, 0x9b, 0x06, 0xff, 0x02, 0xc6, 0x00, 0xbe,
120 0x86, 0x17, 0x1e, 0xfc, 0x36, 0xf0, 0x08, 0x1c,
121 0xea, 0x8c, 0xe3, 0x64, 0xc7, 0x49, 0x25, 0xf1,
122 0xe0, 0x75, 0xff, 0x1b, 0xeb, 0x47, 0xff, 0x1b,
123 0x6b, 0x47, 0xe0, 0x9d, 0x15, 0xc3, 0x60, 0x75,
124 0xd8, 0x49, 0x04, 0xf0, 0x81, 0x1d, 0xe2, 0x8d,
125 0x05, 0xe0, 0xe2, 0x63, 0x81, 0x1d, 0xdd, 0x47,
126 0xe2, 0x8b, 0x0b, 0xc3, 0x00, 0x1d, 0x61, 0x8d,
127 0x3c, 0x03, 0x60, 0x75, 0xd8, 0x49, 0x06, 0xf1,
128 0xdf, 0x48, 0x61, 0x95, 0x16, 0xe0, 0x4e, 0xe8,
129 0x12, 0xe8, 0x21, 0xc5, 0xa0, 0x73, 0xb0, 0x49,
130 0x03, 0xf0, 0x31, 0x48, 0xa0, 0x9b, 0x0d, 0xe0,
131 0xc0, 0x49, 0x0b, 0xf1, 0xe2, 0x63, 0x7e, 0x1d,
132 0xdd, 0x46, 0xe2, 0x8b, 0xe0, 0x75, 0x83, 0x1b,
133 0xeb, 0x46, 0xfe, 0x1b, 0x6b, 0x46, 0xe0, 0x9d,
134 0xe4, 0x49, 0x11, 0xf0, 0x10, 0x1d, 0xea, 0x8d,
135 0xe3, 0x64, 0xc6, 0x49, 0x09, 0xf1, 0x07, 0xc5,
136 0xa0, 0x73, 0xb1, 0x48, 0xa0, 0x9b, 0x02, 0xc5,
137 0x00, 0xbd, 0xe6, 0x04, 0xa0, 0xd1, 0x02, 0xc5,
138 0x00, 0xbd, 0xfe, 0x04, 0x02, 0xc5, 0x00, 0xbd,
139 0x30, 0x05, 0x00, 0x00 };
140
141static u16 r8152b_ram_code1[] = {
142 0x9700, 0x7fe0, 0x4c00, 0x4007, 0x4400, 0x4800, 0x7c1f, 0x4c00,
143 0x5310, 0x6000, 0x7c07, 0x6800, 0x673e, 0x0000, 0x0000, 0x571f,
144 0x5ffb, 0xaa05, 0x5b58, 0x7d80, 0x6100, 0x3019, 0x5b64, 0x7d80,
145 0x6080, 0xa6f8, 0xdcdb, 0x0015, 0xb915, 0xb511, 0xd16b, 0x000f,
146 0xb40f, 0xd06b, 0x000d, 0xb206, 0x7c01, 0x5800, 0x7c04, 0x5c00,
147 0x3011, 0x7c01, 0x5801, 0x7c04, 0x5c04, 0x3019, 0x30a5, 0x3127,
148 0x31d5, 0x7fe0, 0x4c60, 0x7c07, 0x6803, 0x7d00, 0x6900, 0x65a0,
149 0x0000, 0x0000, 0xaf03, 0x6015, 0x303e, 0x6017, 0x57e0, 0x580c,
150 0x588c, 0x7fdd, 0x5fa2, 0x4827, 0x7c1f, 0x4c00, 0x7c1f, 0x4c10,
151 0x8400, 0x7c30, 0x6020, 0x48bf, 0x7c1f, 0x4c00, 0x7c1f, 0x4c01,
152 0x7c07, 0x6803, 0xb806, 0x7c08, 0x6800, 0x0000, 0x0000, 0x305c,
153 0x7c08, 0x6808, 0x0000, 0x0000, 0xae06, 0x7c02, 0x5c02, 0x0000,
154 0x0000, 0x3067, 0x8e05, 0x7c02, 0x5c00, 0x0000, 0x0000, 0xad06,
155 0x7c20, 0x5c20, 0x0000, 0x0000, 0x3072, 0x8d05, 0x7c20, 0x5c00,
156 0x0000, 0x0000, 0xa008, 0x7c07, 0x6800, 0xb8db, 0x7c07, 0x6803,
157 0xd9b3, 0x00d7, 0x7fe0, 0x4c80, 0x7c08, 0x6800, 0x0000, 0x0000,
158 0x7c23, 0x5c23, 0x481d, 0x7c1f, 0x4c00, 0x7c1f, 0x4c02, 0x5310,
159 0x81ff, 0x30f5, 0x7fe0, 0x4d00, 0x4832, 0x7c1f, 0x4c00, 0x7c1f,
160 0x4c10, 0x7c08, 0x6000, 0xa49e, 0x7c07, 0x6800, 0xb89b, 0x7c07,
161 0x6803, 0xd9b3, 0x00f9, 0x7fe0, 0x4d20, 0x7e00, 0x6200, 0x3001,
162 0x7fe0, 0x4dc0, 0xd09d, 0x0002, 0xb4fe, 0x7fe0, 0x4d80, 0x7c04,
163 0x6004, 0x7c07, 0x6802, 0x6728, 0x0000, 0x0000, 0x7c08, 0x6000,
164 0x486c, 0x7c1f, 0x4c00, 0x7c1f, 0x4c01, 0x9503, 0x7e00, 0x6200,
165 0x571f, 0x5fbb, 0xaa05, 0x5b58, 0x7d80, 0x6100, 0x30c2, 0x5b64,
166 0x7d80, 0x6080, 0xcdab, 0x0063, 0xcd8d, 0x0061, 0xd96b, 0x005f,
167 0xd0a0, 0x00d7, 0xcba0, 0x0003, 0x80ec, 0x30cf, 0x30dc, 0x7fe0,
168 0x4ce0, 0x4832, 0x7c1f, 0x4c00, 0x7c1f, 0x4c08, 0x7c08, 0x6008,
169 0x8300, 0xb902, 0x30a5, 0x308a, 0x7fe0, 0x4da0, 0x65a8, 0x0000,
170 0x0000, 0x56a0, 0x590c, 0x7ffd, 0x5fa2, 0xae06, 0x7c02, 0x5c02,
171 0x0000, 0x0000, 0x30f0, 0x8e05, 0x7c02, 0x5c00, 0x0000, 0x0000,
172 0xcba4, 0x0004, 0xcd8d, 0x0002, 0x80f1, 0x7fe0, 0x4ca0, 0x7c08,
173 0x6408, 0x0000, 0x0000, 0x7d00, 0x6800, 0xb603, 0x7c10, 0x6010,
174 0x7d1f, 0x551f, 0x5fb3, 0xaa07, 0x7c80, 0x5800, 0x5b58, 0x7d80,
175 0x6100, 0x310f, 0x7c80, 0x5800, 0x5b64, 0x7d80, 0x6080, 0x4827,
176 0x7c1f, 0x4c00, 0x7c1f, 0x4c10, 0x8400, 0x7c10, 0x6000, 0x7fe0,
177 0x4cc0, 0x5fbb, 0x4824, 0x7c1f, 0x4c00, 0x7c1f, 0x4c04, 0x8200,
178 0x7ce0, 0x5400, 0x6728, 0x0000, 0x0000, 0x30cf, 0x3001, 0x7fe0,
179 0x4e00, 0x4007, 0x4400, 0x5310, 0x7c07, 0x6800, 0x673e, 0x0000,
180 0x0000, 0x570f, 0x5fff, 0xaa05, 0x585b, 0x7d80, 0x6100, 0x313b,
181 0x5867, 0x7d80, 0x6080, 0x9403, 0x7e00, 0x6200, 0xcda3, 0x00e7,
182 0xcd85, 0x00e5, 0xd96b, 0x00e3, 0x96e3, 0x7c07, 0x6800, 0x673e,
183 0x0000, 0x0000, 0x7fe0, 0x4e20, 0x96db, 0x8b04, 0x7c08, 0x5008,
184 0xab03, 0x7c08, 0x5000, 0x7c07, 0x6801, 0x677e, 0x0000, 0x0000,
185 0xdb7c, 0x00ec, 0x0000, 0x7fe1, 0x4f40, 0x4837, 0x4418, 0x41c7,
186 0x7fe0, 0x4e40, 0x7c40, 0x5400, 0x7c1f, 0x4c01, 0x7c1f, 0x4c01,
187 0x8fbf, 0xd2a0, 0x004b, 0x9204, 0xa042, 0x3168, 0x3127, 0x7fe1,
188 0x4f60, 0x489c, 0x4628, 0x7fe0, 0x4e60, 0x7e28, 0x4628, 0x7c40,
189 0x5400, 0x7c01, 0x5800, 0x7c04, 0x5c00, 0x41e8, 0x7c1f, 0x4c01,
190 0x7c1f, 0x4c01, 0x8fa5, 0xb241, 0xa02a, 0x3182, 0x7fe0, 0x4ea0,
191 0x7c02, 0x4402, 0x4448, 0x4894, 0x7c1f, 0x4c01, 0x7c1f, 0x4c03,
192 0x4824, 0x7c1f, 0x4c07, 0x41ef, 0x41ff, 0x4891, 0x7c1f, 0x4c07,
193 0x7c1f, 0x4c17, 0x8400, 0x8ef8, 0x41c7, 0x8f8a, 0x92d5, 0xa10f,
194 0xd480, 0x0008, 0xd580, 0x00b8, 0xa202, 0x319d, 0x7c04, 0x4404,
195 0x319d, 0xd484, 0x00f3, 0xd484, 0x00f1, 0x3127, 0x7fe0, 0x4ee0,
196 0x7c40, 0x5400, 0x4488, 0x41cf, 0x3127, 0x7fe0, 0x4ec0, 0x48f3,
197 0x7c1f, 0x4c01, 0x7c1f, 0x4c09, 0x4508, 0x41c7, 0x8fb0, 0xd218,
198 0x00ae, 0xd2a4, 0x009e, 0x31be, 0x7fe0, 0x4e80, 0x4832, 0x7c1f,
199 0x4c01, 0x7c1f, 0x4c11, 0x4428, 0x7c40, 0x5440, 0x7c01, 0x5801,
200 0x7c04, 0x5c04, 0x41e8, 0xa4b3, 0x31d3, 0x7fe0, 0x4f20, 0x7c07,
201 0x6800, 0x673e, 0x0000, 0x0000, 0x570f, 0x5fff, 0xaa04, 0x585b,
202 0x6100, 0x31e4, 0x5867, 0x6080, 0xbcf1, 0x3001 };
203
204static u16 r8152b_pla_patch_a_bp[] = {
205 0xfc26, 0x8000, 0xfc28, 0x170b, 0xfc2a, 0x01e1, 0xfc2c, 0x0989,
206 0xfc2e, 0x1349, 0xfc30, 0x01b7, 0xfc32, 0x061d, 0xe422, 0x0020,
207 0xe420, 0x0018, 0xfc34, 0x1785, 0xfc36, 0x047b };
208
209static u8 r8152b_pla_patch_a2[] = {
210 0x08, 0xe0, 0x1a, 0xe0, 0xf2, 0xe0, 0xfa, 0xe0,
211 0x32, 0xe1, 0x34, 0xe1, 0x36, 0xe1, 0x38, 0xe1,
212 0x2c, 0x75, 0xdc, 0x21, 0xbc, 0x25, 0x04, 0x13,
213 0x0b, 0xf0, 0x03, 0x13, 0x09, 0xf0, 0x02, 0x13,
214 0x07, 0xf0, 0x01, 0x13, 0x05, 0xf0, 0x08, 0x13,
215 0x03, 0xf0, 0x04, 0xc3, 0x00, 0xbb, 0x03, 0xc3,
216 0x00, 0xbb, 0xd2, 0x17, 0xbc, 0x17, 0x14, 0xc2,
217 0x40, 0x73, 0xba, 0x48, 0x40, 0x9b, 0x11, 0xc2,
218 0x40, 0x73, 0xb0, 0x49, 0x17, 0xf0, 0xbf, 0x49,
219 0x03, 0xf1, 0x09, 0xc5, 0x00, 0xbd, 0xb1, 0x49,
220 0x11, 0xf0, 0xb1, 0x48, 0x40, 0x9b, 0x02, 0xc2,
221 0x00, 0xba, 0x4e, 0x19, 0x00, 0xa0, 0x1e, 0xfc,
222 0xbc, 0xc0, 0xf0, 0xc0, 0xde, 0xe8, 0x00, 0x80,
223 0x00, 0x60, 0x2c, 0x75, 0xd4, 0x49, 0x12, 0xf1,
224 0x29, 0xe0, 0xf8, 0xc2, 0x46, 0x71, 0xf7, 0xc2,
225 0x40, 0x73, 0xbe, 0x49, 0x03, 0xf1, 0xf5, 0xc7,
226 0x02, 0xe0, 0xf2, 0xc7, 0x4f, 0x30, 0x26, 0x62,
227 0xa1, 0x49, 0xf0, 0xf1, 0x22, 0x72, 0xa0, 0x49,
228 0xed, 0xf1, 0x25, 0x25, 0x18, 0x1f, 0x97, 0x30,
229 0x91, 0x30, 0x36, 0x9a, 0x2c, 0x75, 0x32, 0xc3,
230 0x60, 0x73, 0xb1, 0x49, 0x0d, 0xf1, 0xdc, 0x21,
231 0xbc, 0x25, 0x27, 0xc6, 0xc0, 0x77, 0x04, 0x13,
232 0x18, 0xf0, 0x03, 0x13, 0x19, 0xf0, 0x02, 0x13,
233 0x1a, 0xf0, 0x01, 0x13, 0x1b, 0xf0, 0xd4, 0x49,
234 0x03, 0xf1, 0x1c, 0xc5, 0x00, 0xbd, 0xcd, 0xc6,
235 0xc6, 0x67, 0x2e, 0x75, 0xd7, 0x22, 0xdd, 0x26,
236 0x05, 0x15, 0x1a, 0xf0, 0x14, 0xc6, 0x00, 0xbe,
237 0x13, 0xc5, 0x00, 0xbd, 0x12, 0xc5, 0x00, 0xbd,
238 0xf1, 0x49, 0xfb, 0xf1, 0xef, 0xe7, 0xf4, 0x49,
239 0xfa, 0xf1, 0xec, 0xe7, 0xf3, 0x49, 0xf7, 0xf1,
240 0xe9, 0xe7, 0xf2, 0x49, 0xf4, 0xf1, 0xe6, 0xe7,
241 0xb6, 0xc0, 0xf6, 0x14, 0x36, 0x14, 0x62, 0x14,
242 0x86, 0x15, 0xa0, 0xd1, 0x00, 0x00, 0xc0, 0x75,
243 0xd0, 0x49, 0x46, 0xf0, 0x26, 0x72, 0xa7, 0x49,
244 0x43, 0xf0, 0x22, 0x72, 0x25, 0x25, 0x20, 0x1f,
245 0x97, 0x30, 0x91, 0x30, 0x40, 0x73, 0xf3, 0xc4,
246 0x1c, 0x40, 0x04, 0xf0, 0xd7, 0x49, 0x05, 0xf1,
247 0x37, 0xe0, 0x53, 0x48, 0xc0, 0x9d, 0x08, 0x02,
248 0x40, 0x66, 0x64, 0x27, 0x06, 0x16, 0x30, 0xf1,
249 0x46, 0x63, 0x3b, 0x13, 0x2d, 0xf1, 0x34, 0x9b,
250 0x18, 0x1b, 0x93, 0x30, 0x2b, 0xc3, 0x10, 0x1c,
251 0x2b, 0xe8, 0x01, 0x14, 0x25, 0xf1, 0x00, 0x1d,
252 0x26, 0x1a, 0x8a, 0x30, 0x22, 0x73, 0xb5, 0x25,
253 0x0e, 0x0b, 0x00, 0x1c, 0x2c, 0xe8, 0x1f, 0xc7,
254 0x27, 0x40, 0x1a, 0xf1, 0x38, 0xe8, 0x32, 0x1f,
255 0x8f, 0x30, 0x08, 0x1b, 0x24, 0xe8, 0x36, 0x72,
256 0x46, 0x77, 0x00, 0x17, 0x0d, 0xf0, 0x13, 0xc3,
257 0x1f, 0x40, 0x03, 0xf1, 0x00, 0x1f, 0x46, 0x9f,
258 0x44, 0x77, 0x9f, 0x44, 0x5f, 0x44, 0x17, 0xe8,
259 0x0a, 0xc7, 0x27, 0x40, 0x05, 0xf1, 0x02, 0xc3,
260 0x00, 0xbb, 0x1c, 0x1b, 0xd2, 0x1a, 0xff, 0xc7,
261 0x00, 0xbf, 0xb8, 0xcd, 0xff, 0xff, 0x02, 0x0c,
262 0x54, 0xa5, 0xdc, 0xa5, 0x2f, 0x40, 0x05, 0xf1,
263 0x00, 0x14, 0xfa, 0xf1, 0x01, 0x1c, 0x02, 0xe0,
264 0x00, 0x1c, 0x80, 0xff, 0xb0, 0x49, 0x04, 0xf0,
265 0x01, 0x0b, 0xd3, 0xa1, 0x03, 0xe0, 0x02, 0x0b,
266 0xd3, 0xa5, 0x27, 0x31, 0x20, 0x37, 0x02, 0x0b,
267 0xd3, 0xa5, 0x27, 0x31, 0x20, 0x37, 0x00, 0x13,
268 0xfb, 0xf1, 0x80, 0xff, 0x22, 0x73, 0xb5, 0x25,
269 0x18, 0x1e, 0xde, 0x30, 0xd9, 0x30, 0x64, 0x72,
270 0x11, 0x1e, 0x68, 0x23, 0x16, 0x31, 0x80, 0xff,
271 0x08, 0xc2, 0x40, 0x73, 0x3a, 0x48, 0x40, 0x9b,
272 0x06, 0xff, 0x02, 0xc6, 0x00, 0xbe, 0x4e, 0x18,
273 0x1e, 0xfc, 0x33, 0xc5, 0xa0, 0x74, 0xc0, 0x49,
274 0x1f, 0xf0, 0x30, 0xc5, 0xa0, 0x73, 0x00, 0x13,
275 0x04, 0xf1, 0xa2, 0x73, 0x00, 0x13, 0x14, 0xf0,
276 0x28, 0xc5, 0xa0, 0x74, 0xc8, 0x49, 0x1b, 0xf1,
277 0x26, 0xc5, 0xa0, 0x76, 0xa2, 0x74, 0x01, 0x06,
278 0x20, 0x37, 0xa0, 0x9e, 0xa2, 0x9c, 0x1e, 0xc5,
279 0xa2, 0x73, 0x23, 0x40, 0x10, 0xf8, 0x04, 0xf3,
280 0xa0, 0x73, 0x33, 0x40, 0x0c, 0xf8, 0x15, 0xc5,
281 0xa0, 0x74, 0x41, 0x48, 0xa0, 0x9c, 0x14, 0xc5,
282 0xa0, 0x76, 0x62, 0x48, 0xe0, 0x48, 0xa0, 0x9e,
283 0x10, 0xc6, 0x00, 0xbe, 0x0a, 0xc5, 0xa0, 0x74,
284 0x48, 0x48, 0xa0, 0x9c, 0x0b, 0xc5, 0x20, 0x1e,
285 0xa0, 0x9e, 0xe5, 0x48, 0xa0, 0x9e, 0xf0, 0xe7,
286 0xbc, 0xc0, 0xc8, 0xd2, 0xcc, 0xd2, 0x28, 0xe4,
287 0x22, 0x02, 0xf0, 0xc0, 0x02, 0xc6, 0x00, 0xbe,
288 0x00, 0x00, 0x02, 0xc6, 0x00, 0xbe, 0x00, 0x00,
289 0x02, 0xc6, 0x00, 0xbe, 0x00, 0x00, 0x02, 0xc6,
290 0x00, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
291
292static u16 r8152b_pla_patch_a2_bp[] = {
293 0xfc28, 0x8000, 0xfc28, 0x17a5, 0xfc2a, 0x13ad,
294 0xfc2c, 0x184d, 0xfc2e, 0x01e1 };
295
296static u16 r8153_ram_code_a[] = {
297 0xE86C, 0xA000, 0xB436, 0xB820, 0xB438, 0x0290, 0xB436, 0xA012,
298 0xB438, 0x0000, 0xB436, 0xA014, 0xB438, 0x2c04, 0xB438, 0x2c18,
299 0xB438, 0x2c45, 0xB438, 0x2c45, 0xB438, 0xd502, 0xB438, 0x8301,
300 0xB438, 0x8306, 0xB438, 0xd500, 0xB438, 0x8208, 0xB438, 0xd501,
301 0xB438, 0xe018, 0xB438, 0x0308, 0xB438, 0x60f2, 0xB438, 0x8404,
302 0xB438, 0x607d, 0xB438, 0xc117, 0xB438, 0x2c16, 0xB438, 0xc116,
303 0xB438, 0x2c16, 0xB438, 0x607d, 0xB438, 0xc117, 0xB438, 0xa404,
304 0xB438, 0xd500, 0xB438, 0x0800, 0xB438, 0xd501, 0xB438, 0x62d2,
305 0xB438, 0x615d, 0xB438, 0xc115, 0xB438, 0xa404, 0xB438, 0xc307,
306 0xB438, 0xd502, 0xB438, 0x8301, 0xB438, 0x8306, 0xB438, 0xd500,
307 0xB438, 0x8208, 0xB438, 0x2c42, 0xB438, 0xc114, 0xB438, 0x8404,
308 0xB438, 0xc317, 0xB438, 0xd701, 0xB438, 0x435d, 0xB438, 0xd500,
309 0xB438, 0xa208, 0xB438, 0xd502, 0xB438, 0xa306, 0xB438, 0xa301,
310 0xB438, 0x2c42, 0xB438, 0x8404, 0xB438, 0x613d, 0xB438, 0xc115,
311 0xB438, 0xc307, 0xB438, 0xd502, 0xB438, 0x8301, 0xB438, 0x8306,
312 0xB438, 0xd500, 0xB438, 0x8208, 0xB438, 0x2c42, 0xB438, 0xc114,
313 0xB438, 0xc317, 0xB438, 0xd701, 0xB438, 0x40dd, 0xB438, 0xd500,
314 0xB438, 0xa208, 0xB438, 0xd502, 0xB438, 0xa306, 0xB438, 0xa301,
315 0xB438, 0xd500, 0xB438, 0xd702, 0xB438, 0x0800, 0xB436, 0xA01A,
316 0xB438, 0x0000, 0xB436, 0xA006, 0xB438, 0x0fff, 0xB436, 0xA004,
317 0xB438, 0x0fff, 0xB436, 0xA002, 0xB438, 0x05a3, 0xB436, 0xA000,
318 0xB438, 0x3591, 0xB436, 0xB820, 0xB438, 0x0210 };
319
320static u8 r8153_usb_patch_c[] = {
321 0x08, 0xe0, 0x0a, 0xe0, 0x14, 0xe0, 0x2e, 0xe0,
322 0x37, 0xe0, 0x3e, 0xe0, 0x6d, 0xe0, 0x78, 0xe0,
323 0x02, 0xc5, 0x00, 0xbd, 0x38, 0x3b, 0xdb, 0x49,
324 0x04, 0xf1, 0x06, 0xc3, 0x00, 0xbb, 0x5a, 0x02,
325 0x05, 0xc4, 0x03, 0xc3, 0x00, 0xbb, 0xa4, 0x04,
326 0x7e, 0x02, 0x30, 0xd4, 0x30, 0x18, 0x18, 0xc1,
327 0x0c, 0xe8, 0x17, 0xc6, 0xc7, 0x65, 0xd0, 0x49,
328 0x05, 0xf0, 0x32, 0x48, 0x02, 0xc2, 0x00, 0xba,
329 0x3e, 0x16, 0x02, 0xc2, 0x00, 0xba, 0x48, 0x16,
330 0x02, 0xb4, 0x09, 0xc2, 0x40, 0x99, 0x0e, 0x48,
331 0x42, 0x98, 0x42, 0x70, 0x8e, 0x49, 0xfe, 0xf1,
332 0x02, 0xb0, 0x80, 0xff, 0xc0, 0xd4, 0xe4, 0x40,
333 0x20, 0xd4, 0xb0, 0x49, 0x04, 0xf0, 0x30, 0x18,
334 0x06, 0xc1, 0xef, 0xef, 0xfa, 0xc7, 0x02, 0xc0,
335 0x00, 0xb8, 0xd0, 0x10, 0xe4, 0x4b, 0x07, 0xc3,
336 0x70, 0x61, 0x12, 0x48, 0x70, 0x89, 0x02, 0xc3,
337 0x00, 0xbb, 0x9c, 0x15, 0x20, 0xd4, 0x2b, 0xc5,
338 0xa0, 0x77, 0x00, 0x1c, 0xa0, 0x9c, 0x28, 0xc5,
339 0xa0, 0x64, 0xc0, 0x48, 0xc1, 0x48, 0xc2, 0x48,
340 0xa0, 0x8c, 0xb1, 0x64, 0xc0, 0x48, 0xb1, 0x8c,
341 0x20, 0xc5, 0xa0, 0x64, 0x40, 0x48, 0x41, 0x48,
342 0xc2, 0x48, 0xa0, 0x8c, 0x19, 0xc5, 0xa4, 0x64,
343 0x44, 0x48, 0xa4, 0x8c, 0xb1, 0x64, 0x40, 0x48,
344 0xb1, 0x8c, 0x14, 0xc4, 0x80, 0x73, 0x13, 0xc4,
345 0x82, 0x9b, 0x11, 0x1b, 0x80, 0x9b, 0x0c, 0xc5,
346 0xa0, 0x64, 0x40, 0x48, 0x41, 0x48, 0x42, 0x48,
347 0xa0, 0x8c, 0x05, 0xc5, 0xa0, 0x9f, 0x02, 0xc5,
348 0x00, 0xbd, 0x6c, 0x3a, 0x1e, 0xfc, 0x10, 0xd8,
349 0x86, 0xd4, 0xf8, 0xcb, 0x20, 0xe4, 0x0a, 0xc0,
350 0x16, 0x61, 0x91, 0x48, 0x16, 0x89, 0x07, 0xc0,
351 0x11, 0x19, 0x0c, 0x89, 0x02, 0xc1, 0x00, 0xb9,
352 0x02, 0x06, 0x00, 0xd4, 0x40, 0xb4, 0xfe, 0xc0,
353 0x16, 0x61, 0x91, 0x48, 0x16, 0x89, 0xfb, 0xc0,
354 0x11, 0x19, 0x0c, 0x89, 0x02, 0xc1, 0x00, 0xb9,
355 0xd2, 0x05, 0x00, 0x00 };
356
357static u16 r8153_usb_patch_c_bp[] = {
358 0xfc26, 0xa000, 0xfc28, 0x3b34, 0xfc2a, 0x027c, 0xfc2c, 0x162c,
359 0xfc2e, 0x10ce, 0xfc30, 0x0000, 0xfc32, 0x3a28, 0xfc34, 0x05f8,
360 0xfc36, 0x05c8 };
361
362static u8 r8153_pla_patch_c[] = {
363 0x08, 0xe0, 0xea, 0xe0, 0xf2, 0xe0, 0x04, 0xe1,
364 0x06, 0xe1, 0x08, 0xe1, 0x40, 0xe1, 0xf1, 0xe1,
365 0x14, 0xc2, 0x40, 0x73, 0xba, 0x48, 0x40, 0x9b,
366 0x11, 0xc2, 0x40, 0x73, 0xb0, 0x49, 0x17, 0xf0,
367 0xbf, 0x49, 0x03, 0xf1, 0x09, 0xc5, 0x00, 0xbd,
368 0xb1, 0x49, 0x11, 0xf0, 0xb1, 0x48, 0x40, 0x9b,
369 0x02, 0xc2, 0x00, 0xba, 0xde, 0x18, 0x00, 0xe0,
370 0x1e, 0xfc, 0xbc, 0xc0, 0xf0, 0xc0, 0xde, 0xe8,
371 0x00, 0x80, 0x00, 0x20, 0x2c, 0x75, 0xd4, 0x49,
372 0x12, 0xf1, 0x32, 0xe0, 0xf8, 0xc2, 0x46, 0x71,
373 0xf7, 0xc2, 0x40, 0x73, 0xbe, 0x49, 0x03, 0xf1,
374 0xf5, 0xc7, 0x02, 0xe0, 0xf2, 0xc7, 0x4f, 0x30,
375 0x26, 0x62, 0xa1, 0x49, 0xf0, 0xf1, 0x22, 0x72,
376 0xa0, 0x49, 0xed, 0xf1, 0x25, 0x25, 0x18, 0x1f,
377 0x97, 0x30, 0x91, 0x30, 0x36, 0x9a, 0x2c, 0x75,
378 0x3c, 0xc3, 0x60, 0x73, 0xb1, 0x49, 0x0d, 0xf1,
379 0xdc, 0x21, 0xbc, 0x25, 0x30, 0xc6, 0xc0, 0x77,
380 0x04, 0x13, 0x21, 0xf0, 0x03, 0x13, 0x22, 0xf0,
381 0x02, 0x13, 0x23, 0xf0, 0x01, 0x13, 0x24, 0xf0,
382 0x08, 0x13, 0x08, 0xf1, 0x2e, 0x73, 0xba, 0x21,
383 0xbd, 0x25, 0x05, 0x13, 0x03, 0xf1, 0x24, 0xc5,
384 0x00, 0xbd, 0xd4, 0x49, 0x03, 0xf1, 0x1c, 0xc5,
385 0x00, 0xbd, 0xc4, 0xc6, 0xc6, 0x67, 0x2e, 0x75,
386 0xd7, 0x22, 0xdd, 0x26, 0x05, 0x15, 0x1b, 0xf0,
387 0x14, 0xc6, 0x00, 0xbe, 0x13, 0xc5, 0x00, 0xbd,
388 0x12, 0xc5, 0x00, 0xbd, 0xf1, 0x49, 0xfb, 0xf1,
389 0xef, 0xe7, 0xf4, 0x49, 0xfa, 0xf1, 0xec, 0xe7,
390 0xf3, 0x49, 0xf7, 0xf1, 0xe9, 0xe7, 0xf2, 0x49,
391 0xf4, 0xf1, 0xe6, 0xe7, 0xb6, 0xc0, 0x50, 0x14,
392 0x90, 0x13, 0xbc, 0x13, 0xf2, 0x14, 0x00, 0xa0,
393 0xa0, 0xd1, 0x00, 0x00, 0xc0, 0x75, 0xd0, 0x49,
394 0x46, 0xf0, 0x26, 0x72, 0xa7, 0x49, 0x43, 0xf0,
395 0x22, 0x72, 0x25, 0x25, 0x20, 0x1f, 0x97, 0x30,
396 0x91, 0x30, 0x40, 0x73, 0xf3, 0xc4, 0x1c, 0x40,
397 0x04, 0xf0, 0xd7, 0x49, 0x05, 0xf1, 0x37, 0xe0,
398 0x53, 0x48, 0xc0, 0x9d, 0x08, 0x02, 0x40, 0x66,
399 0x64, 0x27, 0x06, 0x16, 0x30, 0xf1, 0x46, 0x63,
400 0x3b, 0x13, 0x2d, 0xf1, 0x34, 0x9b, 0x18, 0x1b,
401 0x93, 0x30, 0x2b, 0xc3, 0x10, 0x1c, 0x2b, 0xe8,
402 0x01, 0x14, 0x25, 0xf1, 0x00, 0x1d, 0x26, 0x1a,
403 0x8a, 0x30, 0x22, 0x73, 0xb5, 0x25, 0x0e, 0x0b,
404 0x00, 0x1c, 0x2c, 0xe8, 0x1f, 0xc7, 0x27, 0x40,
405 0x1a, 0xf1, 0x38, 0xe8, 0x32, 0x1f, 0x8f, 0x30,
406 0x08, 0x1b, 0x24, 0xe8, 0x36, 0x72, 0x46, 0x77,
407 0x00, 0x17, 0x0d, 0xf0, 0x13, 0xc3, 0x1f, 0x40,
408 0x03, 0xf1, 0x00, 0x1f, 0x46, 0x9f, 0x44, 0x77,
409 0x9f, 0x44, 0x5f, 0x44, 0x17, 0xe8, 0x0a, 0xc7,
410 0x27, 0x40, 0x05, 0xf1, 0x02, 0xc3, 0x00, 0xbb,
411 0xbe, 0x1a, 0x74, 0x14, 0xff, 0xc7, 0x00, 0xbf,
412 0xb8, 0xcd, 0xff, 0xff, 0x02, 0x0c, 0x54, 0xa5,
413 0xdc, 0xa5, 0x2f, 0x40, 0x05, 0xf1, 0x00, 0x14,
414 0xfa, 0xf1, 0x01, 0x1c, 0x02, 0xe0, 0x00, 0x1c,
415 0x80, 0xff, 0xb0, 0x49, 0x04, 0xf0, 0x01, 0x0b,
416 0xd3, 0xa1, 0x03, 0xe0, 0x02, 0x0b, 0xd3, 0xa5,
417 0x27, 0x31, 0x20, 0x37, 0x02, 0x0b, 0xd3, 0xa5,
418 0x27, 0x31, 0x20, 0x37, 0x00, 0x13, 0xfb, 0xf1,
419 0x80, 0xff, 0x22, 0x73, 0xb5, 0x25, 0x18, 0x1e,
420 0xde, 0x30, 0xd9, 0x30, 0x64, 0x72, 0x11, 0x1e,
421 0x68, 0x23, 0x16, 0x31, 0x80, 0xff, 0x08, 0xc2,
422 0x40, 0x73, 0x3a, 0x48, 0x40, 0x9b, 0x06, 0xff,
423 0x02, 0xc6, 0x00, 0xbe, 0xcc, 0x17, 0x1e, 0xfc,
424 0x2c, 0x75, 0xdc, 0x21, 0xbc, 0x25, 0x04, 0x13,
425 0x0b, 0xf0, 0x03, 0x13, 0x09, 0xf0, 0x02, 0x13,
426 0x07, 0xf0, 0x01, 0x13, 0x05, 0xf0, 0x08, 0x13,
427 0x03, 0xf0, 0x04, 0xc3, 0x00, 0xbb, 0x03, 0xc3,
428 0x00, 0xbb, 0x50, 0x17, 0x3a, 0x17, 0x02, 0xc6,
429 0x00, 0xbe, 0x00, 0x00, 0x02, 0xc6, 0x00, 0xbe,
430 0x00, 0x00, 0x33, 0xc5, 0xa0, 0x74, 0xc0, 0x49,
431 0x1f, 0xf0, 0x30, 0xc5, 0xa0, 0x73, 0x00, 0x13,
432 0x04, 0xf1, 0xa2, 0x73, 0x00, 0x13, 0x14, 0xf0,
433 0x28, 0xc5, 0xa0, 0x74, 0xc8, 0x49, 0x1b, 0xf1,
434 0x26, 0xc5, 0xa0, 0x76, 0xa2, 0x74, 0x01, 0x06,
435 0x20, 0x37, 0xa0, 0x9e, 0xa2, 0x9c, 0x1e, 0xc5,
436 0xa2, 0x73, 0x23, 0x40, 0x10, 0xf8, 0x04, 0xf3,
437 0xa0, 0x73, 0x33, 0x40, 0x0c, 0xf8, 0x15, 0xc5,
438 0xa0, 0x74, 0x41, 0x48, 0xa0, 0x9c, 0x14, 0xc5,
439 0xa0, 0x76, 0x62, 0x48, 0xe0, 0x48, 0xa0, 0x9e,
440 0x10, 0xc6, 0x00, 0xbe, 0x0a, 0xc5, 0xa0, 0x74,
441 0x48, 0x48, 0xa0, 0x9c, 0x0b, 0xc5, 0x20, 0x1e,
442 0xa0, 0x9e, 0xe5, 0x48, 0xa0, 0x9e, 0xf0, 0xe7,
443 0xbc, 0xc0, 0xc8, 0xd2, 0xcc, 0xd2, 0x28, 0xe4,
444 0xfa, 0x01, 0xf0, 0xc0, 0x18, 0x89, 0x00, 0x1d,
445 0x43, 0xc3, 0x62, 0x62, 0xa0, 0x49, 0x06, 0xf0,
446 0x41, 0xc0, 0x02, 0x71, 0x60, 0x99, 0x3f, 0xc1,
447 0x03, 0xe0, 0x3c, 0xc0, 0x3d, 0xc1, 0x02, 0x99,
448 0x00, 0x61, 0x67, 0x11, 0x3d, 0xf1, 0x69, 0x33,
449 0x34, 0xc0, 0x28, 0x40, 0xf7, 0xf1, 0x35, 0xc0,
450 0x00, 0x19, 0x81, 0x1b, 0x89, 0xe8, 0x32, 0xc0,
451 0x04, 0x1a, 0x84, 0x1b, 0x85, 0xe8, 0x7a, 0xe8,
452 0xa3, 0x49, 0xfe, 0xf0, 0x2c, 0xc0, 0x76, 0xe8,
453 0xa1, 0x48, 0x29, 0xc0, 0x84, 0x1b, 0x7c, 0xe8,
454 0x00, 0x1d, 0x69, 0x33, 0x00, 0x1e, 0x01, 0x06,
455 0xff, 0x18, 0x30, 0x40, 0xfd, 0xf1, 0x7f, 0xc0,
456 0x00, 0x76, 0x2e, 0x40, 0xf7, 0xf1, 0x21, 0x48,
457 0x1a, 0xc0, 0x84, 0x1b, 0x6d, 0xe8, 0x76, 0xc0,
458 0x61, 0xe8, 0xa1, 0x49, 0xfd, 0xf0, 0x12, 0xc0,
459 0x00, 0x1a, 0x84, 0x1b, 0x65, 0xe8, 0x5a, 0xe8,
460 0xa5, 0x49, 0xfe, 0xf0, 0x0a, 0xc0, 0x01, 0x19,
461 0x81, 0x1b, 0x5e, 0xe8, 0x48, 0xe0, 0x8c, 0xd3,
462 0xb8, 0x0b, 0x50, 0xe8, 0x83, 0x00, 0x82, 0x00,
463 0x20, 0xb4, 0x10, 0xd8, 0x84, 0xd4, 0xfa, 0xc0,
464 0x00, 0x61, 0x9c, 0x20, 0x9c, 0x24, 0x06, 0x11,
465 0x06, 0xf1, 0x5d, 0xc0, 0x00, 0x61, 0x11, 0x48,
466 0x00, 0x89, 0x35, 0xe0, 0x00, 0x11, 0x02, 0xf1,
467 0x03, 0xe0, 0x04, 0x11, 0x06, 0xf1, 0x53, 0xc0,
468 0x00, 0x61, 0x92, 0x48, 0x00, 0x89, 0x2b, 0xe0,
469 0x05, 0x11, 0x08, 0xf1, 0x4c, 0xc0, 0x00, 0x61,
470 0x91, 0x49, 0x04, 0xf0, 0x91, 0x48, 0x00, 0x89,
471 0x11, 0xe0, 0xdc, 0xc0, 0x00, 0x61, 0x98, 0x20,
472 0x98, 0x24, 0x25, 0x11, 0x1c, 0xf1, 0x40, 0xc0,
473 0x25, 0xe8, 0x95, 0x49, 0x18, 0xf0, 0xd2, 0xc0,
474 0x00, 0x61, 0x98, 0x20, 0x98, 0x24, 0x25, 0x11,
475 0x12, 0xf1, 0x35, 0xc0, 0x00, 0x61, 0x92, 0x49,
476 0x0e, 0xf1, 0x12, 0x48, 0x00, 0x89, 0x2d, 0xc0,
477 0x00, 0x19, 0x00, 0x89, 0x2b, 0xc0, 0x01, 0x89,
478 0x27, 0xc0, 0x10, 0xe8, 0x25, 0xc0, 0x12, 0x48,
479 0x81, 0x1b, 0x16, 0xe8, 0xb9, 0xc3, 0x62, 0x62,
480 0xa0, 0x49, 0x05, 0xf0, 0xb5, 0xc3, 0x60, 0x71,
481 0xb5, 0xc0, 0x02, 0x99, 0x02, 0xc0, 0x00, 0xb8,
482 0xd6, 0x07, 0x13, 0xc4, 0x84, 0x98, 0x00, 0x1b,
483 0x86, 0x8b, 0x86, 0x73, 0xbf, 0x49, 0xfe, 0xf1,
484 0x80, 0x71, 0x82, 0x72, 0x80, 0xff, 0x09, 0xc4,
485 0x84, 0x98, 0x80, 0x99, 0x82, 0x9a, 0x86, 0x8b,
486 0x86, 0x73, 0xbf, 0x49, 0xfe, 0xf1, 0x80, 0xff,
487 0x08, 0xea, 0x10, 0xd4, 0x88, 0xd3, 0x30, 0xd4,
488 0x10, 0xc0, 0x12, 0xe8, 0x8a, 0xd3, 0x00, 0xd8,
489 0x02, 0xc0, 0x00, 0xb8, 0xe0, 0x08, 0x00, 0x00,
490 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
491
492static u16 r8153_pla_patch_c_bp[] = {
493 0xfc26, 0x8000, 0xfc28, 0x1306, 0xfc2a, 0x17ca, 0xfc2c, 0x171e,
494 0xfc2e, 0x0000, 0xfc30, 0x0000, 0xfc32, 0x01b4, 0xfc34, 0x07d4,
495 0xfc36, 0x0894, 0xfc38, 0x00e7 };
496
497static u16 r8153_ram_code_bc[] = {
498 0xB436, 0xB820, 0xB438, 0x0290, 0xB436, 0xA012, 0xB438, 0x0000,
499 0xB436, 0xA014, 0xB438, 0x2c04, 0xB438, 0x2c07, 0xB438, 0x2c0a,
500 0xB438, 0x2c0d, 0xB438, 0xa240, 0xB438, 0xa104, 0xB438, 0x292d,
501 0xB438, 0x8620, 0xB438, 0xa480, 0xB438, 0x2a2c, 0xB438, 0x8480,
502 0xB438, 0xa101, 0xB438, 0x2a36, 0xB438, 0xd056, 0xB438, 0x2223,
503 0xB436, 0xA01A, 0xB438, 0x0000, 0xB436, 0xA006, 0xB438, 0x0222,
504 0xB436, 0xA004, 0xB438, 0x0a35, 0xB436, 0xA002, 0xB438, 0x0a2b,
505 0xB436, 0xA000, 0xB438, 0xf92c, 0xB436, 0xB820, 0xB438, 0x0210 };
506
507static u8 r8153_usb_patch_b[] = {
508 0x08, 0xe0, 0x0f, 0xe0, 0x18, 0xe0, 0x24, 0xe0,
509 0x26, 0xe0, 0x3a, 0xe0, 0x84, 0xe0, 0x9c, 0xe0,
510 0xc2, 0x49, 0x04, 0xf0, 0x02, 0xc0, 0x00, 0xb8,
511 0x14, 0x18, 0x02, 0xc0, 0x00, 0xb8, 0x2e, 0x18,
512 0x06, 0x89, 0x08, 0xc0, 0x0c, 0x61, 0x92, 0x48,
513 0x93, 0x48, 0x0c, 0x89, 0x02, 0xc0, 0x00, 0xb8,
514 0x08, 0x05, 0x40, 0xb4, 0x16, 0x89, 0x6d, 0xc0,
515 0x00, 0x61, 0x95, 0x49, 0x06, 0xf0, 0xfa, 0xc0,
516 0x0c, 0x61, 0x92, 0x48, 0x93, 0x48, 0x0c, 0x89,
517 0x02, 0xc0, 0x00, 0xb8, 0xe2, 0x04, 0x02, 0xc2,
518 0x00, 0xba, 0xec, 0x11, 0x60, 0x60, 0x85, 0x49,
519 0x0d, 0xf1, 0x11, 0xc6, 0xd2, 0x61, 0x91, 0x49,
520 0xfd, 0xf0, 0x74, 0x60, 0x04, 0x48, 0x74, 0x88,
521 0x08, 0xc6, 0x08, 0xc0, 0xc4, 0x98, 0x01, 0x18,
522 0xc0, 0x88, 0x02, 0xc0, 0x00, 0xb8, 0x6e, 0x12,
523 0x04, 0xe4, 0x0d, 0x00, 0x00, 0xd4, 0xd1, 0x49,
524 0x3c, 0xf1, 0xd2, 0x49, 0x16, 0xf1, 0xd3, 0x49,
525 0x18, 0xf1, 0xd4, 0x49, 0x19, 0xf1, 0xd5, 0x49,
526 0x1a, 0xf1, 0xd6, 0x49, 0x1b, 0xf1, 0xd7, 0x49,
527 0x1c, 0xf1, 0xd8, 0x49, 0x1d, 0xf1, 0xd9, 0x49,
528 0x20, 0xf1, 0xda, 0x49, 0x23, 0xf1, 0xdb, 0x49,
529 0x24, 0xf1, 0x02, 0xc4, 0x00, 0xbc, 0x20, 0x04,
530 0xe5, 0x8e, 0x02, 0xc4, 0x00, 0xbc, 0x14, 0x02,
531 0x02, 0xc4, 0x00, 0xbc, 0x16, 0x02, 0x02, 0xc4,
532 0x00, 0xbc, 0x18, 0x02, 0x02, 0xc4, 0x00, 0xbc,
533 0x1a, 0x02, 0x02, 0xc4, 0x00, 0xbc, 0x1c, 0x02,
534 0x02, 0xc4, 0x00, 0xbc, 0x94, 0x02, 0x10, 0xc7,
535 0xe0, 0x8e, 0x02, 0xc4, 0x00, 0xbc, 0x8a, 0x02,
536 0x0b, 0xc7, 0xe4, 0x8e, 0x02, 0xc4, 0x00, 0xbc,
537 0x88, 0x02, 0x02, 0xc4, 0x00, 0xbc, 0x6e, 0x02,
538 0x02, 0xc4, 0x00, 0xbc, 0x5a, 0x02, 0x30, 0xe4,
539 0x0c, 0xc3, 0x60, 0x64, 0xc5, 0x49, 0x04, 0xf1,
540 0x74, 0x64, 0xc4, 0x48, 0x74, 0x8c, 0x06, 0xc3,
541 0x64, 0x8e, 0x02, 0xc4, 0x00, 0xbc, 0x20, 0x04,
542 0x00, 0xd8, 0x00, 0xe4, 0xb2, 0xc0, 0x00, 0x61,
543 0x90, 0x49, 0x09, 0xf1, 0x8b, 0xc6, 0xca, 0x61,
544 0x94, 0x49, 0x0e, 0xf1, 0xf6, 0xc6, 0xda, 0x60,
545 0x81, 0x49, 0x0a, 0xf0, 0x65, 0x60, 0x03, 0x48,
546 0x65, 0x88, 0xef, 0xc6, 0xdc, 0x60, 0x80, 0x48,
547 0xdc, 0x88, 0x05, 0xc6, 0x00, 0xbe, 0x02, 0xc6,
548 0x00, 0xbe, 0x36, 0x13, 0x4c, 0x17, 0x99, 0xc4,
549 0x80, 0x65, 0xd0, 0x49, 0x04, 0xf1, 0xfa, 0x75,
550 0x04, 0xc4, 0x00, 0xbc, 0x03, 0xc4, 0x00, 0xbc,
551 0x9a, 0x00, 0xee, 0x01 };
552
553static u16 r8153_usb_patch_b_bp[] = {
554 0xfc26, 0xa000, 0xfc28, 0x180c, 0xfc2a, 0x0506, 0xfc2c, 0x04E0,
555 0xfc2e, 0x11E4, 0xfc30, 0x125C, 0xfc32, 0x0232, 0xfc34, 0x131E,
556 0xfc36, 0x0098, 0xfc38, 0x00FF };
557
558static u8 r8153_pla_patch_b[] = {
559 0x08, 0xe0, 0xea, 0xe0, 0xf2, 0xe0, 0x04, 0xe1,
560 0x09, 0xe1, 0x0e, 0xe1, 0x46, 0xe1, 0xf3, 0xe1,
561 0x14, 0xc2, 0x40, 0x73, 0xba, 0x48, 0x40, 0x9b,
562 0x11, 0xc2, 0x40, 0x73, 0xb0, 0x49, 0x17, 0xf0,
563 0xbf, 0x49, 0x03, 0xf1, 0x09, 0xc5, 0x00, 0xbd,
564 0xb1, 0x49, 0x11, 0xf0, 0xb1, 0x48, 0x40, 0x9b,
565 0x02, 0xc2, 0x00, 0xba, 0x1a, 0x17, 0x00, 0xe0,
566 0x1e, 0xfc, 0xbc, 0xc0, 0xf0, 0xc0, 0xde, 0xe8,
567 0x00, 0x80, 0x00, 0x20, 0x2c, 0x75, 0xd4, 0x49,
568 0x12, 0xf1, 0x32, 0xe0, 0xf8, 0xc2, 0x46, 0x71,
569 0xf7, 0xc2, 0x40, 0x73, 0xbe, 0x49, 0x03, 0xf1,
570 0xf5, 0xc7, 0x02, 0xe0, 0xf2, 0xc7, 0x4f, 0x30,
571 0x26, 0x62, 0xa1, 0x49, 0xf0, 0xf1, 0x22, 0x72,
572 0xa0, 0x49, 0xed, 0xf1, 0x25, 0x25, 0x18, 0x1f,
573 0x97, 0x30, 0x91, 0x30, 0x36, 0x9a, 0x2c, 0x75,
574 0x3c, 0xc3, 0x60, 0x73, 0xb1, 0x49, 0x0d, 0xf1,
575 0xdc, 0x21, 0xbc, 0x25, 0x30, 0xc6, 0xc0, 0x77,
576 0x04, 0x13, 0x21, 0xf0, 0x03, 0x13, 0x22, 0xf0,
577 0x02, 0x13, 0x23, 0xf0, 0x01, 0x13, 0x24, 0xf0,
578 0x08, 0x13, 0x08, 0xf1, 0x2e, 0x73, 0xba, 0x21,
579 0xbd, 0x25, 0x05, 0x13, 0x03, 0xf1, 0x24, 0xc5,
580 0x00, 0xbd, 0xd4, 0x49, 0x03, 0xf1, 0x1c, 0xc5,
581 0x00, 0xbd, 0xc4, 0xc6, 0xc6, 0x67, 0x2e, 0x75,
582 0xd7, 0x22, 0xdd, 0x26, 0x05, 0x15, 0x1b, 0xf0,
583 0x14, 0xc6, 0x00, 0xbe, 0x13, 0xc5, 0x00, 0xbd,
584 0x12, 0xc5, 0x00, 0xbd, 0xf1, 0x49, 0xfb, 0xf1,
585 0xef, 0xe7, 0xf4, 0x49, 0xfa, 0xf1, 0xec, 0xe7,
586 0xf3, 0x49, 0xf7, 0xf1, 0xe9, 0xe7, 0xf2, 0x49,
587 0xf4, 0xf1, 0xe6, 0xe7, 0xb6, 0xc0, 0x9e, 0x12,
588 0xde, 0x11, 0x0a, 0x12, 0x3c, 0x13, 0x00, 0xa0,
589 0xa0, 0xd1, 0x00, 0x00, 0xc0, 0x75, 0xd0, 0x49,
590 0x46, 0xf0, 0x26, 0x72, 0xa7, 0x49, 0x43, 0xf0,
591 0x22, 0x72, 0x25, 0x25, 0x20, 0x1f, 0x97, 0x30,
592 0x91, 0x30, 0x40, 0x73, 0xf3, 0xc4, 0x1c, 0x40,
593 0x04, 0xf0, 0xd7, 0x49, 0x05, 0xf1, 0x37, 0xe0,
594 0x53, 0x48, 0xc0, 0x9d, 0x08, 0x02, 0x40, 0x66,
595 0x64, 0x27, 0x06, 0x16, 0x30, 0xf1, 0x46, 0x63,
596 0x3b, 0x13, 0x2d, 0xf1, 0x34, 0x9b, 0x18, 0x1b,
597 0x93, 0x30, 0x2b, 0xc3, 0x10, 0x1c, 0x2b, 0xe8,
598 0x01, 0x14, 0x25, 0xf1, 0x00, 0x1d, 0x26, 0x1a,
599 0x8a, 0x30, 0x22, 0x73, 0xb5, 0x25, 0x0e, 0x0b,
600 0x00, 0x1c, 0x2c, 0xe8, 0x1f, 0xc7, 0x27, 0x40,
601 0x1a, 0xf1, 0x38, 0xe8, 0x32, 0x1f, 0x8f, 0x30,
602 0x08, 0x1b, 0x24, 0xe8, 0x36, 0x72, 0x46, 0x77,
603 0x00, 0x17, 0x0d, 0xf0, 0x13, 0xc3, 0x1f, 0x40,
604 0x03, 0xf1, 0x00, 0x1f, 0x46, 0x9f, 0x44, 0x77,
605 0x9f, 0x44, 0x5f, 0x44, 0x17, 0xe8, 0x0a, 0xc7,
606 0x27, 0x40, 0x05, 0xf1, 0x02, 0xc3, 0x00, 0xbb,
607 0xfa, 0x18, 0xb0, 0x18, 0xff, 0xc7, 0x00, 0xbf,
608 0xb8, 0xcd, 0xff, 0xff, 0x02, 0x0c, 0x54, 0xa5,
609 0xdc, 0xa5, 0x2f, 0x40, 0x05, 0xf1, 0x00, 0x14,
610 0xfa, 0xf1, 0x01, 0x1c, 0x02, 0xe0, 0x00, 0x1c,
611 0x80, 0xff, 0xb0, 0x49, 0x04, 0xf0, 0x01, 0x0b,
612 0xd3, 0xa1, 0x03, 0xe0, 0x02, 0x0b, 0xd3, 0xa5,
613 0x27, 0x31, 0x20, 0x37, 0x02, 0x0b, 0xd3, 0xa5,
614 0x27, 0x31, 0x20, 0x37, 0x00, 0x13, 0xfb, 0xf1,
615 0x80, 0xff, 0x22, 0x73, 0xb5, 0x25, 0x18, 0x1e,
616 0xde, 0x30, 0xd9, 0x30, 0x64, 0x72, 0x11, 0x1e,
617 0x68, 0x23, 0x16, 0x31, 0x80, 0xff, 0x08, 0xc2,
618 0x40, 0x73, 0x3a, 0x48, 0x40, 0x9b, 0x06, 0xff,
619 0x02, 0xc6, 0x00, 0xbe, 0x08, 0x16, 0x1e, 0xfc,
620 0x2c, 0x75, 0xdc, 0x21, 0xbc, 0x25, 0x04, 0x13,
621 0x0b, 0xf0, 0x03, 0x13, 0x09, 0xf0, 0x02, 0x13,
622 0x07, 0xf0, 0x01, 0x13, 0x05, 0xf0, 0x08, 0x13,
623 0x03, 0xf0, 0x04, 0xc3, 0x00, 0xbb, 0x03, 0xc3,
624 0x00, 0xbb, 0x8c, 0x15, 0x76, 0x15, 0xa0, 0x64,
625 0x40, 0x48, 0xa0, 0x8c, 0x02, 0xc4, 0x00, 0xbc,
626 0x82, 0x00, 0xa0, 0x62, 0x21, 0x48, 0xa0, 0x8a,
627 0x02, 0xc2, 0x00, 0xba, 0x40, 0x03, 0x33, 0xc5,
628 0xa0, 0x74, 0xc0, 0x49, 0x1f, 0xf0, 0x30, 0xc5,
629 0xa0, 0x73, 0x00, 0x13, 0x04, 0xf1, 0xa2, 0x73,
630 0x00, 0x13, 0x14, 0xf0, 0x28, 0xc5, 0xa0, 0x74,
631 0xc8, 0x49, 0x1b, 0xf1, 0x26, 0xc5, 0xa0, 0x76,
632 0xa2, 0x74, 0x01, 0x06, 0x20, 0x37, 0xa0, 0x9e,
633 0xa2, 0x9c, 0x1e, 0xc5, 0xa2, 0x73, 0x23, 0x40,
634 0x10, 0xf8, 0x04, 0xf3, 0xa0, 0x73, 0x33, 0x40,
635 0x0c, 0xf8, 0x15, 0xc5, 0xa0, 0x74, 0x41, 0x48,
636 0xa0, 0x9c, 0x14, 0xc5, 0xa0, 0x76, 0x62, 0x48,
637 0xe0, 0x48, 0xa0, 0x9e, 0x10, 0xc6, 0x00, 0xbe,
638 0x0a, 0xc5, 0xa0, 0x74, 0x48, 0x48, 0xa0, 0x9c,
639 0x0b, 0xc5, 0x20, 0x1e, 0xa0, 0x9e, 0xe5, 0x48,
640 0xa0, 0x9e, 0xf0, 0xe7, 0xbc, 0xc0, 0xc8, 0xd2,
641 0xcc, 0xd2, 0x28, 0xe4, 0xe6, 0x01, 0xf0, 0xc0,
642 0x18, 0x89, 0x00, 0x1d, 0x3c, 0xc3, 0x60, 0x71,
643 0x3c, 0xc0, 0x02, 0x99, 0x00, 0x61, 0x67, 0x11,
644 0x3c, 0xf1, 0x69, 0x33, 0x35, 0xc0, 0x28, 0x40,
645 0xf6, 0xf1, 0x34, 0xc0, 0x00, 0x19, 0x81, 0x1b,
646 0x8c, 0xe8, 0x31, 0xc0, 0x04, 0x1a, 0x84, 0x1b,
647 0x88, 0xe8, 0x7d, 0xe8, 0xa3, 0x49, 0xfe, 0xf0,
648 0x2b, 0xc0, 0x79, 0xe8, 0xa1, 0x48, 0x28, 0xc0,
649 0x84, 0x1b, 0x7f, 0xe8, 0x00, 0x1d, 0x69, 0x33,
650 0x00, 0x1e, 0x01, 0x06, 0xff, 0x18, 0x30, 0x40,
651 0xfd, 0xf1, 0x18, 0xc0, 0x00, 0x76, 0x2e, 0x40,
652 0xf7, 0xf1, 0x21, 0x48, 0x19, 0xc0, 0x84, 0x1b,
653 0x70, 0xe8, 0x79, 0xc0, 0x64, 0xe8, 0xa1, 0x49,
654 0xfd, 0xf0, 0x11, 0xc0, 0x00, 0x1a, 0x84, 0x1b,
655 0x68, 0xe8, 0x5d, 0xe8, 0xa5, 0x49, 0xfe, 0xf0,
656 0x09, 0xc0, 0x01, 0x19, 0x81, 0x1b, 0x61, 0xe8,
657 0x4f, 0xe0, 0x88, 0xd3, 0x8c, 0xd3, 0xb8, 0x0b,
658 0x50, 0xe8, 0x20, 0xb4, 0x10, 0xd8, 0x84, 0xd4,
659 0xfc, 0xc0, 0x00, 0x61, 0x9c, 0x20, 0x9c, 0x24,
660 0x06, 0x11, 0x06, 0xf1, 0x60, 0xc0, 0x00, 0x61,
661 0x11, 0x48, 0x00, 0x89, 0x3d, 0xe0, 0x00, 0x11,
662 0x02, 0xf1, 0x03, 0xe0, 0x04, 0x11, 0x06, 0xf1,
663 0x56, 0xc0, 0x00, 0x61, 0x92, 0x48, 0x00, 0x89,
664 0x33, 0xe0, 0x05, 0x11, 0x08, 0xf1, 0x4f, 0xc0,
665 0x00, 0x61, 0x91, 0x49, 0x04, 0xf0, 0x91, 0x48,
666 0x00, 0x89, 0x11, 0xe0, 0xde, 0xc0, 0x00, 0x61,
667 0x98, 0x20, 0x98, 0x24, 0x25, 0x11, 0x24, 0xf1,
668 0x45, 0xc0, 0x29, 0xe8, 0x95, 0x49, 0x20, 0xf0,
669 0xd4, 0xc0, 0x00, 0x61, 0x98, 0x20, 0x98, 0x24,
670 0x25, 0x11, 0x1a, 0xf1, 0x38, 0xc0, 0x00, 0x61,
671 0x92, 0x49, 0x16, 0xf1, 0x12, 0x48, 0x00, 0x89,
672 0x30, 0xc0, 0x00, 0x19, 0x00, 0x89, 0x2e, 0xc0,
673 0x01, 0x89, 0x2e, 0xc0, 0x04, 0x19, 0x81, 0x1b,
674 0x1c, 0xe8, 0x2b, 0xc0, 0x14, 0x19, 0x81, 0x1b,
675 0x18, 0xe8, 0x22, 0xc0, 0x0c, 0xe8, 0x20, 0xc0,
676 0x12, 0x48, 0x81, 0x1b, 0x12, 0xe8, 0xb3, 0xc3,
677 0x62, 0x71, 0xb3, 0xc0, 0x02, 0x99, 0x02, 0xc0,
678 0x00, 0xb8, 0x96, 0x07, 0x13, 0xc4, 0x84, 0x98,
679 0x00, 0x1b, 0x86, 0x8b, 0x86, 0x73, 0xbf, 0x49,
680 0xfe, 0xf1, 0x80, 0x71, 0x82, 0x72, 0x80, 0xff,
681 0x09, 0xc4, 0x84, 0x98, 0x80, 0x99, 0x82, 0x9a,
682 0x86, 0x8b, 0x86, 0x73, 0xbf, 0x49, 0xfe, 0xf1,
683 0x80, 0xff, 0x08, 0xea, 0x10, 0xd4, 0x30, 0xd4,
684 0x10, 0xc0, 0x12, 0xe8, 0x8a, 0xd3, 0x28, 0xe4,
685 0x2c, 0xe4, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x00,
686 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
687
688static u16 r8153_pla_patch_b_bp[] = {
689 0xfc26, 0x8000, 0xfc28, 0x1154, 0xfc2a, 0x1606, 0xfc2c, 0x155a,
690 0xfc2e, 0x0080, 0xfc30, 0x033c, 0xfc32, 0x01a0, 0xfc34, 0x0794,
691 0xfc36, 0x0000, 0xfc38, 0x007f };
692
693static u16 r8153_ram_code_d[] = {
694 0xa436, 0xb820, 0xa438, 0x0290, 0xa436, 0xa012, 0xa438, 0x0000,
695 0xa436, 0xa014, 0xa438, 0x2c04, 0xb438, 0x2c07, 0xb438, 0x2c07,
696 0xb438, 0x2c07, 0xb438, 0xa240, 0xb438, 0xa104, 0xb438, 0x2944,
697 0xa436, 0xa01a, 0xa438, 0x0000, 0xa436, 0xa006, 0xa438, 0x0fff,
698 0xa436, 0xa004, 0xa438, 0x0fff, 0xa436, 0xa002, 0xa438, 0x0fff,
699 0xa436, 0xa000, 0xa438, 0x1943, 0xa436, 0xb820, 0xa438, 0x0210 };
700
701static u8 usb_patch_d[] = {
702 0x08, 0xe0, 0x0a, 0xe0, 0x0c, 0xe0, 0x1f, 0xe0,
703 0x28, 0xe0, 0x2a, 0xe0, 0x2c, 0xe0, 0x2e, 0xe0,
704 0x02, 0xc5, 0x00, 0xbd, 0x00, 0x00, 0x02, 0xc3,
705 0x00, 0xbb, 0x00, 0x00, 0x30, 0x18, 0x11, 0xc1,
706 0x05, 0xe8, 0x10, 0xc6, 0x02, 0xc2, 0x00, 0xba,
707 0x94, 0x17, 0x02, 0xb4, 0x09, 0xc2, 0x40, 0x99,
708 0x0e, 0x48, 0x42, 0x98, 0x42, 0x70, 0x8e, 0x49,
709 0xfe, 0xf1, 0x02, 0xb0, 0x80, 0xff, 0xc0, 0xd4,
710 0xe4, 0x40, 0x20, 0xd4, 0xb0, 0x49, 0x04, 0xf0,
711 0x30, 0x18, 0x06, 0xc1, 0xef, 0xef, 0xfa, 0xc7,
712 0x02, 0xc0, 0x00, 0xb8, 0x38, 0x12, 0xe4, 0x4b,
713 0x02, 0xc3, 0x00, 0xbb, 0x00, 0x00, 0x02, 0xc5,
714 0x00, 0xbd, 0x00, 0x00, 0x02, 0xc1, 0x00, 0xb9,
715 0x00, 0x00, 0x02, 0xc1, 0x00, 0xb9, 0x00, 0x00 };
716
717static u16 r8153_usb_patch_d_bp[] = {
718 0xfc26, 0xa000, 0xfc28, 0x0000, 0xfc2a, 0x0000, 0xfc2c, 0x1792,
719 0xfc2e, 0x1236, 0xfc30, 0x0000, 0xfc32, 0x0000, 0xfc34, 0x0000,
720 0xfc36, 0x0000, 0xfc38, 0x000c };
721
722static void rtl_clear_bp(struct r8152 *tp)
723{
724 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_BP_0, 0);
725 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_BP_2, 0);
726 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_BP_4, 0);
727 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_BP_6, 0);
728 ocp_write_dword(tp, MCU_TYPE_USB, USB_BP_0, 0);
729 ocp_write_dword(tp, MCU_TYPE_USB, USB_BP_2, 0);
730 ocp_write_dword(tp, MCU_TYPE_USB, USB_BP_4, 0);
731 ocp_write_dword(tp, MCU_TYPE_USB, USB_BP_6, 0);
732
733 mdelay(6);
734
735 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_BA, 0);
736 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_BA, 0);
737}
738
739static void r8153_clear_bp(struct r8152 *tp)
740{
741 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_BP_EN, 0);
742 ocp_write_byte(tp, MCU_TYPE_USB, USB_BP_EN, 0);
743 rtl_clear_bp(tp);
744}
745
746static void r8152b_set_dq_desc(struct r8152 *tp)
747{
748 u8 data;
749
750 data = ocp_read_byte(tp, MCU_TYPE_USB, 0xd429);
751 data |= 0x80;
752 ocp_write_byte(tp, MCU_TYPE_USB, 0xd429, data);
753 ocp_write_word(tp, MCU_TYPE_USB, 0xc0ce, 0x0210);
754 data = ocp_read_byte(tp, MCU_TYPE_USB, 0xd429);
755 data &= ~0x80;
756 ocp_write_byte(tp, MCU_TYPE_USB, 0xd429, data);
757}
758
759static int r8153_pre_ram_code(struct r8152 *tp, u16 patch_key)
760{
761 u16 data;
762 int i;
763
764 data = ocp_reg_read(tp, 0xb820);
765 data |= 0x0010;
766 ocp_reg_write(tp, 0xb820, data);
767
768 for (i = 0, data = 0; !data && i < 5000; i++) {
769 mdelay(2);
770 data = ocp_reg_read(tp, 0xb800) & 0x0040;
771 }
772
773 sram_write(tp, 0x8146, patch_key);
774 sram_write(tp, 0xb82e, 0x0001);
775
776 return -EBUSY;
777}
778
779static int r8153_post_ram_code(struct r8152 *tp)
780{
781 u16 data;
782
783 sram_write(tp, 0x0000, 0x0000);
784
785 data = ocp_reg_read(tp, 0xb82e);
786 data &= ~0x0001;
787 ocp_reg_write(tp, 0xb82e, data);
788
789 sram_write(tp, 0x8146, 0x0000);
790
791 data = ocp_reg_read(tp, 0xb820);
792 data &= ~0x0010;
793 ocp_reg_write(tp, 0xb820, data);
794
795 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, tp->ocp_base);
796
797 return 0;
798}
799
800static void r8153_wdt1_end(struct r8152 *tp)
801{
802 int i;
803
804 for (i = 0; i < 104; i++) {
805 if (!(ocp_read_byte(tp, MCU_TYPE_USB, 0xe404) & 1))
806 break;
807 mdelay(2);
808 }
809}
810
811void r8152b_firmware(struct r8152 *tp)
812{
813 int i;
814
815 if (tp->version == RTL_VER_01) {
816 int i;
817
818 r8152b_set_dq_desc(tp);
819 rtl_clear_bp(tp);
820
821 generic_ocp_write(tp, 0xf800, 0x3f,
822 sizeof(r8152b_pla_patch_a),
823 r8152b_pla_patch_a, MCU_TYPE_PLA);
824
825 for (i = 0; i < ARRAY_SIZE(r8152b_pla_patch_a_bp); i += 2)
826 ocp_write_word(tp, MCU_TYPE_PLA,
827 r8152b_pla_patch_a_bp[i],
828 r8152b_pla_patch_a_bp[i+1]);
829
830 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, 0x2000);
831 ocp_write_word(tp, MCU_TYPE_PLA, 0xb092, 0x7070);
832 ocp_write_word(tp, MCU_TYPE_PLA, 0xb098, 0x0600);
833 for (i = 0; i < ARRAY_SIZE(r8152b_ram_code1); i++)
834 ocp_write_word(tp, MCU_TYPE_PLA, 0xb09a,
835 r8152b_ram_code1[i]);
836
837 ocp_write_word(tp, MCU_TYPE_PLA, 0xb098, 0x0200);
838 ocp_write_word(tp, MCU_TYPE_PLA, 0xb092, 0x7030);
839 } else if (tp->version == RTL_VER_02) {
840 rtl_clear_bp(tp);
841
842 generic_ocp_write(tp, 0xf800, 0xff,
843 sizeof(r8152b_pla_patch_a2),
844 r8152b_pla_patch_a2, MCU_TYPE_PLA);
845
846 for (i = 0; i < ARRAY_SIZE(r8152b_pla_patch_a2_bp);
847 i += 2)
848 ocp_write_word(tp, MCU_TYPE_PLA,
849 r8152b_pla_patch_a2_bp[i],
850 r8152b_pla_patch_a2_bp[i+1]);
851 }
852}
853
854void r8153_firmware(struct r8152 *tp)
855{
856 int i;
857
858 if (tp->version == RTL_VER_03) {
859 r8153_clear_bp(tp);
860
861 r8153_pre_ram_code(tp, 0x7000);
862
863 for (i = 0; i < ARRAY_SIZE(r8153_ram_code_a); i += 2)
864 ocp_write_word(tp, MCU_TYPE_PLA,
865 r8153_ram_code_a[i],
866 r8153_ram_code_a[i+1]);
867
868 r8153_post_ram_code(tp);
869 } else if (tp->version == RTL_VER_04) {
870 r8153_pre_ram_code(tp, 0x7001);
871
872 for (i = 0; i < ARRAY_SIZE(r8153_ram_code_bc); i += 2)
873 ocp_write_word(tp, MCU_TYPE_PLA,
874 r8153_ram_code_bc[i],
875 r8153_ram_code_bc[i+1]);
876
877 r8153_post_ram_code(tp);
878
879 r8153_wdt1_end(tp);
880 r8153_clear_bp(tp);
881
882 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x0000);
883 generic_ocp_write(tp, 0xf800, 0xff,
884 sizeof(r8153_usb_patch_b),
885 r8153_usb_patch_b, MCU_TYPE_USB);
886
887 for (i = 0; i < ARRAY_SIZE(r8153_usb_patch_b_bp); i += 2)
888 ocp_write_word(tp, MCU_TYPE_USB,
889 r8153_usb_patch_b_bp[i],
890 r8153_usb_patch_b_bp[i+1]);
891
892 if (!(ocp_read_word(tp, MCU_TYPE_PLA, 0xd38e) & BIT(0))) {
893 ocp_write_word(tp, MCU_TYPE_PLA, 0xd38c, 0x0082);
894 ocp_write_word(tp, MCU_TYPE_PLA, 0xd38e, 0x0082);
895 }
896
897 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, 0x0000);
898 generic_ocp_write(tp, 0xf800, 0xff,
899 sizeof(r8153_pla_patch_b),
900 r8153_pla_patch_b, MCU_TYPE_PLA);
901
902 for (i = 0; i < ARRAY_SIZE(r8153_pla_patch_b_bp); i += 2)
903 ocp_write_word(tp, MCU_TYPE_PLA,
904 r8153_pla_patch_b_bp[i],
905 r8153_pla_patch_b_bp[i+1]);
906
907 ocp_write_word(tp, MCU_TYPE_PLA, 0xd388, 0x08ca);
908 } else if (tp->version == RTL_VER_05) {
909 u32 ocp_data;
910
911 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, 0xcfca);
912 ocp_data &= ~0x4000;
913 ocp_write_word(tp, MCU_TYPE_USB, 0xcfca, ocp_data);
914
915 r8153_pre_ram_code(tp, 0x7001);
916
917 for (i = 0; i < ARRAY_SIZE(r8153_ram_code_bc); i += 2)
918 ocp_write_word(tp, MCU_TYPE_PLA,
919 r8153_ram_code_bc[i],
920 r8153_ram_code_bc[i+1]);
921
922 r8153_post_ram_code(tp);
923
924 r8153_wdt1_end(tp);
925 r8153_clear_bp(tp);
926
927 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x0000);
928 generic_ocp_write(tp, 0xf800, 0xff,
929 sizeof(r8153_usb_patch_c),
930 r8153_usb_patch_c, MCU_TYPE_USB);
931
932 for (i = 0; i < ARRAY_SIZE(r8153_usb_patch_c_bp); i += 2)
933 ocp_write_word(tp, MCU_TYPE_USB,
934 r8153_usb_patch_c_bp[i],
935 r8153_usb_patch_c_bp[i+1]);
936
937 if (ocp_read_byte(tp, MCU_TYPE_USB, 0xcfef) & 1) {
938 ocp_write_word(tp, MCU_TYPE_USB, 0xfc30, 0x1578);
939 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x00ff);
940 } else {
941 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x00ef);
942 }
943
944 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, 0x0000);
945 generic_ocp_write(tp, 0xf800, 0xff,
946 sizeof(r8153_pla_patch_c),
947 r8153_pla_patch_c, MCU_TYPE_PLA);
948
949 for (i = 0; i < ARRAY_SIZE(r8153_pla_patch_c_bp); i += 2)
950 ocp_write_word(tp, MCU_TYPE_PLA,
951 r8153_pla_patch_c_bp[i],
952 r8153_pla_patch_c_bp[i+1]);
953
954 ocp_write_word(tp, MCU_TYPE_PLA, 0xd388, 0x08ca);
955
956 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, 0xcfca);
957 ocp_data |= 0x4000;
958 ocp_write_word(tp, MCU_TYPE_USB, 0xcfca, ocp_data);
959 } else if (tp->version == RTL_VER_06) {
960 r8153_pre_ram_code(tp, 0x7002);
961
962 for (i = 0; i < ARRAY_SIZE(r8153_ram_code_d); i += 2)
963 ocp_write_word(tp, MCU_TYPE_PLA,
964 r8153_ram_code_d[i],
965 r8153_ram_code_d[i+1]);
966
967 r8153_post_ram_code(tp);
968
969 r8153_clear_bp(tp);
970
971 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x0000);
972 generic_ocp_write(tp, 0xf800, 0xff, sizeof(usb_patch_d),
973 usb_patch_d, MCU_TYPE_USB);
974
975 for (i = 0; i < ARRAY_SIZE(r8153_usb_patch_d_bp); i += 2)
976 ocp_write_word(tp, MCU_TYPE_USB,
977 r8153_usb_patch_d_bp[i],
978 r8153_usb_patch_d_bp[i+1]);
979 }
980}