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