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