blob: f953b0384b88b2799e979700f602304e784656d4 [file] [log] [blame]
Tom Rini83d290c2018-05-06 17:58:06 -04001// SPDX-License-Identifier: GPL-2.0
Ted Chen9dc8ba12016-01-20 14:24:52 +08002/*
3 * Copyright (c) 2015 Realtek Semiconductor Corp. All rights reserved.
4 *
Ted Chen9dc8ba12016-01-20 14:24:52 +08005 */
6#include <common.h>
Stefan Roese66884522016-06-29 07:58:05 +02007#include <dm.h>
Ted Chen9dc8ba12016-01-20 14:24:52 +08008#include <errno.h>
Simon Glasscd93d622020-05-10 11:40:13 -06009#include <linux/bitops.h>
Simon Glassc05ed002020-05-10 11:40:11 -060010#include <linux/delay.h>
Stefan Roese66884522016-06-29 07:58:05 +020011#include "usb_ether.h"
Ted Chen9dc8ba12016-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[] = {
Hayes Wang65f75512020-06-05 15:23:40 +0800296 0xfc26, 0x8000, 0xfc28, 0x17a5, 0xfc2a, 0x13ad,
Ted Chen9dc8ba12016-01-20 14:24:52 +0800297 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[] = {
Hayes Wang65f75512020-06-05 15:23:40 +0800324 0x08, 0xe0, 0x0a, 0xe0, 0x14, 0xe0, 0x58, 0xe0,
325 0x64, 0xe0, 0x79, 0xe0, 0xab, 0xe0, 0xb6, 0xe0,
Ted Chen9dc8ba12016-01-20 14:24:52 +0800326 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,
Hayes Wang65f75512020-06-05 15:23:40 +0800329 0x7e, 0x02, 0x30, 0xd4, 0x65, 0xc6, 0x66, 0x61,
330 0x92, 0x49, 0x12, 0xf1, 0x3e, 0xc0, 0x02, 0x61,
331 0x97, 0x49, 0x05, 0xf0, 0x3c, 0xc0, 0x00, 0x61,
332 0x90, 0x49, 0x0a, 0xf1, 0xca, 0x63, 0xb0, 0x49,
333 0x09, 0xf1, 0xb1, 0x49, 0x05, 0xf0, 0x32, 0xc0,
334 0x00, 0x71, 0x9e, 0x49, 0x03, 0xf1, 0xb0, 0x48,
335 0x05, 0xe0, 0x30, 0x48, 0xda, 0x61, 0x10, 0x48,
336 0xda, 0x89, 0x4a, 0xc6, 0xc0, 0x60, 0x85, 0x49,
337 0x03, 0xf0, 0x31, 0x48, 0x04, 0xe0, 0xb1, 0x48,
338 0xb2, 0x48, 0x0f, 0xe0, 0x30, 0x18, 0x1b, 0xc1,
339 0x0f, 0xe8, 0x1a, 0xc6, 0xc7, 0x65, 0xd0, 0x49,
Ted Chen9dc8ba12016-01-20 14:24:52 +0800340 0x05, 0xf0, 0x32, 0x48, 0x02, 0xc2, 0x00, 0xba,
341 0x3e, 0x16, 0x02, 0xc2, 0x00, 0xba, 0x48, 0x16,
Hayes Wang65f75512020-06-05 15:23:40 +0800342 0x02, 0xc2, 0x00, 0xba, 0x4a, 0x16, 0x02, 0xb4,
343 0x09, 0xc2, 0x40, 0x99, 0x0e, 0x48, 0x42, 0x98,
344 0x42, 0x70, 0x8e, 0x49, 0xfe, 0xf1, 0x02, 0xb0,
345 0x80, 0xff, 0xc0, 0xd4, 0xe4, 0x40, 0x20, 0xd4,
346 0xca, 0xcf, 0x00, 0xcf, 0x3c, 0xe4, 0x0c, 0xc0,
347 0x00, 0x63, 0xb5, 0x49, 0x09, 0xc0, 0x30, 0x18,
348 0x06, 0xc1, 0xea, 0xef, 0xf5, 0xc7, 0x02, 0xc0,
349 0x00, 0xb8, 0xd0, 0x10, 0xe4, 0x4b, 0x00, 0xd8,
350 0x14, 0xc3, 0x60, 0x61, 0x90, 0x49, 0x06, 0xf0,
351 0x11, 0xc3, 0x70, 0x61, 0x12, 0x48, 0x70, 0x89,
352 0x08, 0xe0, 0x0a, 0xc6, 0xd4, 0x61, 0x93, 0x48,
353 0xd4, 0x89, 0x02, 0xc1, 0x00, 0xb9, 0x72, 0x17,
354 0x02, 0xc1, 0x00, 0xb9, 0x9c, 0x15, 0x00, 0xd8,
355 0xef, 0xcf, 0x20, 0xd4, 0x30, 0x18, 0xe7, 0xc1,
356 0xcb, 0xef, 0x2b, 0xc5, 0xa0, 0x77, 0x00, 0x1c,
357 0xa0, 0x9c, 0x28, 0xc5, 0xa0, 0x64, 0xc0, 0x48,
358 0xc1, 0x48, 0xc2, 0x48, 0xa0, 0x8c, 0xb1, 0x64,
359 0xc0, 0x48, 0xb1, 0x8c, 0x20, 0xc5, 0xa0, 0x64,
360 0x40, 0x48, 0x41, 0x48, 0xc2, 0x48, 0xa0, 0x8c,
361 0x19, 0xc5, 0xa4, 0x64, 0x44, 0x48, 0xa4, 0x8c,
362 0xb1, 0x64, 0x40, 0x48, 0xb1, 0x8c, 0x14, 0xc4,
363 0x80, 0x73, 0x13, 0xc4, 0x82, 0x9b, 0x11, 0x1b,
364 0x80, 0x9b, 0x0c, 0xc5, 0xa0, 0x64, 0x40, 0x48,
365 0x41, 0x48, 0x42, 0x48, 0xa0, 0x8c, 0x05, 0xc5,
366 0xa0, 0x9f, 0x02, 0xc5, 0x00, 0xbd, 0x6c, 0x3a,
367 0x1e, 0xfc, 0x10, 0xd8, 0x86, 0xd4, 0xf8, 0xcb,
368 0x20, 0xe4, 0x0a, 0xc0, 0x16, 0x61, 0x91, 0x48,
369 0x16, 0x89, 0x07, 0xc0, 0x11, 0x19, 0x0c, 0x89,
370 0x02, 0xc1, 0x00, 0xb9, 0x02, 0x06, 0x00, 0xd4,
371 0x40, 0xb4, 0xfe, 0xc0, 0x16, 0x61, 0x91, 0x48,
372 0x16, 0x89, 0xfb, 0xc0, 0x11, 0x19, 0x0c, 0x89,
373 0x02, 0xc1, 0x00, 0xb9, 0xd2, 0x05, 0x00, 0x00 };
Ted Chen9dc8ba12016-01-20 14:24:52 +0800374
375static u16 r8153_usb_patch_c_bp[] = {
Hayes Wang65f75512020-06-05 15:23:40 +0800376 0xfc26, 0xa000, 0xfc28, 0x3b34, 0xfc2a, 0x027c, 0xfc2c, 0x15de,
377 0xfc2e, 0x10ce, 0xfc30, 0x1adc, 0xfc32, 0x3a28, 0xfc34, 0x05f8,
378 0xfc36, 0x05c8, 0xfc38, 0x00f3 };
Ted Chen9dc8ba12016-01-20 14:24:52 +0800379
380static u8 r8153_pla_patch_c[] = {
Hayes Wang65f75512020-06-05 15:23:40 +0800381 0x5d, 0xe0, 0x07, 0xe0, 0x0f, 0xe0, 0x5a, 0xe0,
382 0x59, 0xe0, 0x1f, 0xe0, 0x57, 0xe0, 0x3e, 0xe1,
383 0x08, 0xc2, 0x40, 0x73, 0x3a, 0x48, 0x40, 0x9b,
384 0x06, 0xff, 0x02, 0xc6, 0x00, 0xbe, 0xcc, 0x17,
385 0x1e, 0xfc, 0x2c, 0x75, 0xdc, 0x21, 0xbc, 0x25,
386 0x04, 0x13, 0x0b, 0xf0, 0x03, 0x13, 0x09, 0xf0,
387 0x02, 0x13, 0x07, 0xf0, 0x01, 0x13, 0x05, 0xf0,
388 0x08, 0x13, 0x03, 0xf0, 0x04, 0xc3, 0x00, 0xbb,
389 0x03, 0xc3, 0x00, 0xbb, 0x50, 0x17, 0x3a, 0x17,
390 0x33, 0xc5, 0xa0, 0x74, 0xc0, 0x49, 0x1f, 0xf0,
391 0x30, 0xc5, 0xa0, 0x73, 0x00, 0x13, 0x04, 0xf1,
392 0xa2, 0x73, 0x00, 0x13, 0x14, 0xf0, 0x28, 0xc5,
393 0xa0, 0x74, 0xc8, 0x49, 0x1b, 0xf1, 0x26, 0xc5,
394 0xa0, 0x76, 0xa2, 0x74, 0x01, 0x06, 0x20, 0x37,
395 0xa0, 0x9e, 0xa2, 0x9c, 0x1e, 0xc5, 0xa2, 0x73,
396 0x23, 0x40, 0x10, 0xf8, 0x04, 0xf3, 0xa0, 0x73,
397 0x33, 0x40, 0x0c, 0xf8, 0x15, 0xc5, 0xa0, 0x74,
398 0x41, 0x48, 0xa0, 0x9c, 0x14, 0xc5, 0xa0, 0x76,
399 0x62, 0x48, 0xe0, 0x48, 0xa0, 0x9e, 0x10, 0xc6,
400 0x00, 0xbe, 0x0a, 0xc5, 0xa0, 0x74, 0x48, 0x48,
401 0xa0, 0x9c, 0x0b, 0xc5, 0x20, 0x1e, 0xa0, 0x9e,
402 0xe5, 0x48, 0xa0, 0x9e, 0xf0, 0xe7, 0xbc, 0xc0,
403 0xc8, 0xd2, 0xcc, 0xd2, 0x28, 0xe4, 0xfa, 0x01,
404 0xf0, 0xc0, 0x18, 0x89, 0x74, 0xc0, 0xcd, 0xe8,
405 0x80, 0x76, 0x00, 0x1d, 0x6e, 0xc3, 0x66, 0x62,
406 0xa0, 0x49, 0x06, 0xf0, 0x64, 0xc0, 0x02, 0x71,
407 0x60, 0x99, 0x62, 0xc1, 0x03, 0xe0, 0x5f, 0xc0,
408 0x60, 0xc1, 0x02, 0x99, 0x00, 0x61, 0x0f, 0x1b,
409 0x59, 0x41, 0x03, 0x13, 0x18, 0xf1, 0xe4, 0x49,
410 0x20, 0xf1, 0xe5, 0x49, 0x1e, 0xf0, 0x59, 0xc6,
411 0xd0, 0x73, 0xb7, 0x49, 0x08, 0xf0, 0x01, 0x0b,
412 0x80, 0x13, 0x03, 0xf0, 0xd0, 0x8b, 0x03, 0xe0,
413 0x3f, 0x48, 0xd0, 0x9b, 0x51, 0xc0, 0x10, 0x1a,
414 0x84, 0x1b, 0xb1, 0xe8, 0x4b, 0xc2, 0x40, 0x63,
415 0x30, 0x48, 0x0a, 0xe0, 0xe5, 0x49, 0x09, 0xf0,
416 0x47, 0xc0, 0x00, 0x1a, 0x84, 0x1b, 0xa7, 0xe8,
417 0x41, 0xc2, 0x40, 0x63, 0xb0, 0x48, 0x40, 0x8b,
418 0x67, 0x11, 0x3f, 0xf1, 0x69, 0x33, 0x32, 0xc0,
419 0x28, 0x40, 0xd2, 0xf1, 0x33, 0xc0, 0x00, 0x19,
420 0x81, 0x1b, 0x99, 0xe8, 0x30, 0xc0, 0x04, 0x1a,
421 0x84, 0x1b, 0x95, 0xe8, 0x8a, 0xe8, 0xa3, 0x49,
422 0xfe, 0xf0, 0x2a, 0xc0, 0x86, 0xe8, 0xa1, 0x48,
423 0x84, 0x1b, 0x8d, 0xe8, 0x00, 0x1d, 0x69, 0x33,
424 0x00, 0x1e, 0x01, 0x06, 0xff, 0x18, 0x30, 0x40,
425 0xfd, 0xf1, 0x1f, 0xc0, 0x00, 0x76, 0x2e, 0x40,
426 0xf7, 0xf1, 0x21, 0x48, 0x19, 0xc0, 0x84, 0x1b,
427 0x7e, 0xe8, 0x74, 0x08, 0x72, 0xe8, 0xa1, 0x49,
428 0xfd, 0xf0, 0x11, 0xc0, 0x00, 0x1a, 0x84, 0x1b,
429 0x76, 0xe8, 0x6b, 0xe8, 0xa5, 0x49, 0xfe, 0xf0,
430 0x09, 0xc0, 0x01, 0x19, 0x81, 0x1b, 0x6f, 0xe8,
431 0x5a, 0xe0, 0xb8, 0x0b, 0x50, 0xe8, 0x83, 0x00,
432 0x82, 0x00, 0x20, 0xb4, 0x10, 0xd8, 0x84, 0xd4,
433 0x88, 0xd3, 0x10, 0xe0, 0x00, 0xd8, 0x24, 0xd4,
434 0xf9, 0xc0, 0x57, 0xe8, 0x48, 0x33, 0xf3, 0xc0,
435 0x00, 0x61, 0x6a, 0xc0, 0x47, 0x11, 0x03, 0xf0,
436 0x57, 0x11, 0x05, 0xf1, 0x00, 0x61, 0x17, 0x48,
437 0x00, 0x89, 0x41, 0xe0, 0x9c, 0x20, 0x9c, 0x24,
438 0xd0, 0x49, 0x09, 0xf0, 0x04, 0x11, 0x07, 0xf1,
439 0x00, 0x61, 0x97, 0x49, 0x38, 0xf0, 0x97, 0x48,
440 0x00, 0x89, 0x2b, 0xe0, 0x00, 0x11, 0x05, 0xf1,
441 0x00, 0x61, 0x92, 0x48, 0x00, 0x89, 0x2f, 0xe0,
442 0x06, 0x11, 0x05, 0xf1, 0x00, 0x61, 0x11, 0x48,
443 0x00, 0x89, 0x29, 0xe0, 0x05, 0x11, 0x0f, 0xf1,
444 0x00, 0x61, 0x93, 0x49, 0x1a, 0xf1, 0x91, 0x49,
445 0x0a, 0xf0, 0x91, 0x48, 0x00, 0x89, 0x0f, 0xe0,
446 0xc6, 0xc0, 0x00, 0x61, 0x98, 0x20, 0x98, 0x24,
447 0x25, 0x11, 0x80, 0xff, 0xfa, 0xef, 0x17, 0xf1,
448 0x38, 0xc0, 0x1f, 0xe8, 0x95, 0x49, 0x13, 0xf0,
449 0xf4, 0xef, 0x11, 0xf1, 0x31, 0xc0, 0x00, 0x61,
450 0x92, 0x49, 0x0d, 0xf1, 0x12, 0x48, 0x00, 0x89,
451 0x29, 0xc0, 0x00, 0x19, 0x00, 0x89, 0x27, 0xc0,
452 0x01, 0x89, 0x23, 0xc0, 0x0e, 0xe8, 0x12, 0x48,
453 0x81, 0x1b, 0x15, 0xe8, 0xae, 0xc3, 0x66, 0x62,
454 0xa0, 0x49, 0x04, 0xf0, 0x64, 0x71, 0xa3, 0xc0,
455 0x02, 0x99, 0x02, 0xc0, 0x00, 0xb8, 0xd6, 0x07,
456 0x13, 0xc4, 0x84, 0x98, 0x00, 0x1b, 0x86, 0x8b,
457 0x86, 0x73, 0xbf, 0x49, 0xfe, 0xf1, 0x80, 0x71,
458 0x82, 0x72, 0x80, 0xff, 0x09, 0xc4, 0x84, 0x98,
459 0x80, 0x99, 0x82, 0x9a, 0x86, 0x8b, 0x86, 0x73,
460 0xbf, 0x49, 0xfe, 0xf1, 0x80, 0xff, 0x08, 0xea,
461 0x30, 0xd4, 0x10, 0xc0, 0x12, 0xe8, 0x8a, 0xd3,
462 0x00, 0xd8, 0x02, 0xc6, 0x00, 0xbe, 0xe0, 0x08 };
Ted Chen9dc8ba12016-01-20 14:24:52 +0800463
464static u16 r8153_pla_patch_c_bp[] = {
465 0xfc26, 0x8000, 0xfc28, 0x1306, 0xfc2a, 0x17ca, 0xfc2c, 0x171e,
466 0xfc2e, 0x0000, 0xfc30, 0x0000, 0xfc32, 0x01b4, 0xfc34, 0x07d4,
Hayes Wang65f75512020-06-05 15:23:40 +0800467 0xfc36, 0x0894, 0xfc38, 0x00e6 };
Ted Chen9dc8ba12016-01-20 14:24:52 +0800468
469static u16 r8153_ram_code_bc[] = {
470 0xB436, 0xB820, 0xB438, 0x0290, 0xB436, 0xA012, 0xB438, 0x0000,
471 0xB436, 0xA014, 0xB438, 0x2c04, 0xB438, 0x2c07, 0xB438, 0x2c0a,
472 0xB438, 0x2c0d, 0xB438, 0xa240, 0xB438, 0xa104, 0xB438, 0x292d,
473 0xB438, 0x8620, 0xB438, 0xa480, 0xB438, 0x2a2c, 0xB438, 0x8480,
474 0xB438, 0xa101, 0xB438, 0x2a36, 0xB438, 0xd056, 0xB438, 0x2223,
475 0xB436, 0xA01A, 0xB438, 0x0000, 0xB436, 0xA006, 0xB438, 0x0222,
476 0xB436, 0xA004, 0xB438, 0x0a35, 0xB436, 0xA002, 0xB438, 0x0a2b,
477 0xB436, 0xA000, 0xB438, 0xf92c, 0xB436, 0xB820, 0xB438, 0x0210 };
478
479static u8 r8153_usb_patch_b[] = {
480 0x08, 0xe0, 0x0f, 0xe0, 0x18, 0xe0, 0x24, 0xe0,
481 0x26, 0xe0, 0x3a, 0xe0, 0x84, 0xe0, 0x9c, 0xe0,
482 0xc2, 0x49, 0x04, 0xf0, 0x02, 0xc0, 0x00, 0xb8,
483 0x14, 0x18, 0x02, 0xc0, 0x00, 0xb8, 0x2e, 0x18,
484 0x06, 0x89, 0x08, 0xc0, 0x0c, 0x61, 0x92, 0x48,
485 0x93, 0x48, 0x0c, 0x89, 0x02, 0xc0, 0x00, 0xb8,
486 0x08, 0x05, 0x40, 0xb4, 0x16, 0x89, 0x6d, 0xc0,
487 0x00, 0x61, 0x95, 0x49, 0x06, 0xf0, 0xfa, 0xc0,
488 0x0c, 0x61, 0x92, 0x48, 0x93, 0x48, 0x0c, 0x89,
489 0x02, 0xc0, 0x00, 0xb8, 0xe2, 0x04, 0x02, 0xc2,
490 0x00, 0xba, 0xec, 0x11, 0x60, 0x60, 0x85, 0x49,
491 0x0d, 0xf1, 0x11, 0xc6, 0xd2, 0x61, 0x91, 0x49,
492 0xfd, 0xf0, 0x74, 0x60, 0x04, 0x48, 0x74, 0x88,
493 0x08, 0xc6, 0x08, 0xc0, 0xc4, 0x98, 0x01, 0x18,
494 0xc0, 0x88, 0x02, 0xc0, 0x00, 0xb8, 0x6e, 0x12,
495 0x04, 0xe4, 0x0d, 0x00, 0x00, 0xd4, 0xd1, 0x49,
496 0x3c, 0xf1, 0xd2, 0x49, 0x16, 0xf1, 0xd3, 0x49,
497 0x18, 0xf1, 0xd4, 0x49, 0x19, 0xf1, 0xd5, 0x49,
498 0x1a, 0xf1, 0xd6, 0x49, 0x1b, 0xf1, 0xd7, 0x49,
499 0x1c, 0xf1, 0xd8, 0x49, 0x1d, 0xf1, 0xd9, 0x49,
500 0x20, 0xf1, 0xda, 0x49, 0x23, 0xf1, 0xdb, 0x49,
501 0x24, 0xf1, 0x02, 0xc4, 0x00, 0xbc, 0x20, 0x04,
502 0xe5, 0x8e, 0x02, 0xc4, 0x00, 0xbc, 0x14, 0x02,
503 0x02, 0xc4, 0x00, 0xbc, 0x16, 0x02, 0x02, 0xc4,
504 0x00, 0xbc, 0x18, 0x02, 0x02, 0xc4, 0x00, 0xbc,
505 0x1a, 0x02, 0x02, 0xc4, 0x00, 0xbc, 0x1c, 0x02,
506 0x02, 0xc4, 0x00, 0xbc, 0x94, 0x02, 0x10, 0xc7,
507 0xe0, 0x8e, 0x02, 0xc4, 0x00, 0xbc, 0x8a, 0x02,
508 0x0b, 0xc7, 0xe4, 0x8e, 0x02, 0xc4, 0x00, 0xbc,
509 0x88, 0x02, 0x02, 0xc4, 0x00, 0xbc, 0x6e, 0x02,
510 0x02, 0xc4, 0x00, 0xbc, 0x5a, 0x02, 0x30, 0xe4,
511 0x0c, 0xc3, 0x60, 0x64, 0xc5, 0x49, 0x04, 0xf1,
512 0x74, 0x64, 0xc4, 0x48, 0x74, 0x8c, 0x06, 0xc3,
513 0x64, 0x8e, 0x02, 0xc4, 0x00, 0xbc, 0x20, 0x04,
514 0x00, 0xd8, 0x00, 0xe4, 0xb2, 0xc0, 0x00, 0x61,
515 0x90, 0x49, 0x09, 0xf1, 0x8b, 0xc6, 0xca, 0x61,
516 0x94, 0x49, 0x0e, 0xf1, 0xf6, 0xc6, 0xda, 0x60,
517 0x81, 0x49, 0x0a, 0xf0, 0x65, 0x60, 0x03, 0x48,
518 0x65, 0x88, 0xef, 0xc6, 0xdc, 0x60, 0x80, 0x48,
519 0xdc, 0x88, 0x05, 0xc6, 0x00, 0xbe, 0x02, 0xc6,
520 0x00, 0xbe, 0x36, 0x13, 0x4c, 0x17, 0x99, 0xc4,
521 0x80, 0x65, 0xd0, 0x49, 0x04, 0xf1, 0xfa, 0x75,
522 0x04, 0xc4, 0x00, 0xbc, 0x03, 0xc4, 0x00, 0xbc,
523 0x9a, 0x00, 0xee, 0x01 };
524
525static u16 r8153_usb_patch_b_bp[] = {
526 0xfc26, 0xa000, 0xfc28, 0x180c, 0xfc2a, 0x0506, 0xfc2c, 0x04E0,
527 0xfc2e, 0x11E4, 0xfc30, 0x125C, 0xfc32, 0x0232, 0xfc34, 0x131E,
528 0xfc36, 0x0098, 0xfc38, 0x00FF };
529
530static u8 r8153_pla_patch_b[] = {
531 0x08, 0xe0, 0xea, 0xe0, 0xf2, 0xe0, 0x04, 0xe1,
Hayes Wang65f75512020-06-05 15:23:40 +0800532 0x09, 0xe1, 0x0e, 0xe1, 0x46, 0xe1, 0xf7, 0xe1,
Ted Chen9dc8ba12016-01-20 14:24:52 +0800533 0x14, 0xc2, 0x40, 0x73, 0xba, 0x48, 0x40, 0x9b,
534 0x11, 0xc2, 0x40, 0x73, 0xb0, 0x49, 0x17, 0xf0,
535 0xbf, 0x49, 0x03, 0xf1, 0x09, 0xc5, 0x00, 0xbd,
536 0xb1, 0x49, 0x11, 0xf0, 0xb1, 0x48, 0x40, 0x9b,
537 0x02, 0xc2, 0x00, 0xba, 0x1a, 0x17, 0x00, 0xe0,
538 0x1e, 0xfc, 0xbc, 0xc0, 0xf0, 0xc0, 0xde, 0xe8,
539 0x00, 0x80, 0x00, 0x20, 0x2c, 0x75, 0xd4, 0x49,
540 0x12, 0xf1, 0x32, 0xe0, 0xf8, 0xc2, 0x46, 0x71,
541 0xf7, 0xc2, 0x40, 0x73, 0xbe, 0x49, 0x03, 0xf1,
542 0xf5, 0xc7, 0x02, 0xe0, 0xf2, 0xc7, 0x4f, 0x30,
543 0x26, 0x62, 0xa1, 0x49, 0xf0, 0xf1, 0x22, 0x72,
544 0xa0, 0x49, 0xed, 0xf1, 0x25, 0x25, 0x18, 0x1f,
545 0x97, 0x30, 0x91, 0x30, 0x36, 0x9a, 0x2c, 0x75,
546 0x3c, 0xc3, 0x60, 0x73, 0xb1, 0x49, 0x0d, 0xf1,
547 0xdc, 0x21, 0xbc, 0x25, 0x30, 0xc6, 0xc0, 0x77,
548 0x04, 0x13, 0x21, 0xf0, 0x03, 0x13, 0x22, 0xf0,
549 0x02, 0x13, 0x23, 0xf0, 0x01, 0x13, 0x24, 0xf0,
550 0x08, 0x13, 0x08, 0xf1, 0x2e, 0x73, 0xba, 0x21,
551 0xbd, 0x25, 0x05, 0x13, 0x03, 0xf1, 0x24, 0xc5,
552 0x00, 0xbd, 0xd4, 0x49, 0x03, 0xf1, 0x1c, 0xc5,
553 0x00, 0xbd, 0xc4, 0xc6, 0xc6, 0x67, 0x2e, 0x75,
554 0xd7, 0x22, 0xdd, 0x26, 0x05, 0x15, 0x1b, 0xf0,
555 0x14, 0xc6, 0x00, 0xbe, 0x13, 0xc5, 0x00, 0xbd,
556 0x12, 0xc5, 0x00, 0xbd, 0xf1, 0x49, 0xfb, 0xf1,
557 0xef, 0xe7, 0xf4, 0x49, 0xfa, 0xf1, 0xec, 0xe7,
558 0xf3, 0x49, 0xf7, 0xf1, 0xe9, 0xe7, 0xf2, 0x49,
559 0xf4, 0xf1, 0xe6, 0xe7, 0xb6, 0xc0, 0x9e, 0x12,
560 0xde, 0x11, 0x0a, 0x12, 0x3c, 0x13, 0x00, 0xa0,
561 0xa0, 0xd1, 0x00, 0x00, 0xc0, 0x75, 0xd0, 0x49,
562 0x46, 0xf0, 0x26, 0x72, 0xa7, 0x49, 0x43, 0xf0,
563 0x22, 0x72, 0x25, 0x25, 0x20, 0x1f, 0x97, 0x30,
564 0x91, 0x30, 0x40, 0x73, 0xf3, 0xc4, 0x1c, 0x40,
565 0x04, 0xf0, 0xd7, 0x49, 0x05, 0xf1, 0x37, 0xe0,
566 0x53, 0x48, 0xc0, 0x9d, 0x08, 0x02, 0x40, 0x66,
567 0x64, 0x27, 0x06, 0x16, 0x30, 0xf1, 0x46, 0x63,
568 0x3b, 0x13, 0x2d, 0xf1, 0x34, 0x9b, 0x18, 0x1b,
569 0x93, 0x30, 0x2b, 0xc3, 0x10, 0x1c, 0x2b, 0xe8,
570 0x01, 0x14, 0x25, 0xf1, 0x00, 0x1d, 0x26, 0x1a,
571 0x8a, 0x30, 0x22, 0x73, 0xb5, 0x25, 0x0e, 0x0b,
572 0x00, 0x1c, 0x2c, 0xe8, 0x1f, 0xc7, 0x27, 0x40,
573 0x1a, 0xf1, 0x38, 0xe8, 0x32, 0x1f, 0x8f, 0x30,
574 0x08, 0x1b, 0x24, 0xe8, 0x36, 0x72, 0x46, 0x77,
575 0x00, 0x17, 0x0d, 0xf0, 0x13, 0xc3, 0x1f, 0x40,
576 0x03, 0xf1, 0x00, 0x1f, 0x46, 0x9f, 0x44, 0x77,
577 0x9f, 0x44, 0x5f, 0x44, 0x17, 0xe8, 0x0a, 0xc7,
578 0x27, 0x40, 0x05, 0xf1, 0x02, 0xc3, 0x00, 0xbb,
579 0xfa, 0x18, 0xb0, 0x18, 0xff, 0xc7, 0x00, 0xbf,
580 0xb8, 0xcd, 0xff, 0xff, 0x02, 0x0c, 0x54, 0xa5,
581 0xdc, 0xa5, 0x2f, 0x40, 0x05, 0xf1, 0x00, 0x14,
582 0xfa, 0xf1, 0x01, 0x1c, 0x02, 0xe0, 0x00, 0x1c,
583 0x80, 0xff, 0xb0, 0x49, 0x04, 0xf0, 0x01, 0x0b,
584 0xd3, 0xa1, 0x03, 0xe0, 0x02, 0x0b, 0xd3, 0xa5,
585 0x27, 0x31, 0x20, 0x37, 0x02, 0x0b, 0xd3, 0xa5,
586 0x27, 0x31, 0x20, 0x37, 0x00, 0x13, 0xfb, 0xf1,
587 0x80, 0xff, 0x22, 0x73, 0xb5, 0x25, 0x18, 0x1e,
588 0xde, 0x30, 0xd9, 0x30, 0x64, 0x72, 0x11, 0x1e,
589 0x68, 0x23, 0x16, 0x31, 0x80, 0xff, 0x08, 0xc2,
590 0x40, 0x73, 0x3a, 0x48, 0x40, 0x9b, 0x06, 0xff,
591 0x02, 0xc6, 0x00, 0xbe, 0x08, 0x16, 0x1e, 0xfc,
592 0x2c, 0x75, 0xdc, 0x21, 0xbc, 0x25, 0x04, 0x13,
593 0x0b, 0xf0, 0x03, 0x13, 0x09, 0xf0, 0x02, 0x13,
594 0x07, 0xf0, 0x01, 0x13, 0x05, 0xf0, 0x08, 0x13,
595 0x03, 0xf0, 0x04, 0xc3, 0x00, 0xbb, 0x03, 0xc3,
596 0x00, 0xbb, 0x8c, 0x15, 0x76, 0x15, 0xa0, 0x64,
597 0x40, 0x48, 0xa0, 0x8c, 0x02, 0xc4, 0x00, 0xbc,
598 0x82, 0x00, 0xa0, 0x62, 0x21, 0x48, 0xa0, 0x8a,
599 0x02, 0xc2, 0x00, 0xba, 0x40, 0x03, 0x33, 0xc5,
600 0xa0, 0x74, 0xc0, 0x49, 0x1f, 0xf0, 0x30, 0xc5,
601 0xa0, 0x73, 0x00, 0x13, 0x04, 0xf1, 0xa2, 0x73,
602 0x00, 0x13, 0x14, 0xf0, 0x28, 0xc5, 0xa0, 0x74,
603 0xc8, 0x49, 0x1b, 0xf1, 0x26, 0xc5, 0xa0, 0x76,
604 0xa2, 0x74, 0x01, 0x06, 0x20, 0x37, 0xa0, 0x9e,
605 0xa2, 0x9c, 0x1e, 0xc5, 0xa2, 0x73, 0x23, 0x40,
606 0x10, 0xf8, 0x04, 0xf3, 0xa0, 0x73, 0x33, 0x40,
607 0x0c, 0xf8, 0x15, 0xc5, 0xa0, 0x74, 0x41, 0x48,
608 0xa0, 0x9c, 0x14, 0xc5, 0xa0, 0x76, 0x62, 0x48,
609 0xe0, 0x48, 0xa0, 0x9e, 0x10, 0xc6, 0x00, 0xbe,
610 0x0a, 0xc5, 0xa0, 0x74, 0x48, 0x48, 0xa0, 0x9c,
611 0x0b, 0xc5, 0x20, 0x1e, 0xa0, 0x9e, 0xe5, 0x48,
612 0xa0, 0x9e, 0xf0, 0xe7, 0xbc, 0xc0, 0xc8, 0xd2,
613 0xcc, 0xd2, 0x28, 0xe4, 0xe6, 0x01, 0xf0, 0xc0,
Hayes Wang65f75512020-06-05 15:23:40 +0800614 0x18, 0x89, 0x00, 0x1d, 0x3c, 0xc3, 0x64, 0x71,
Ted Chen9dc8ba12016-01-20 14:24:52 +0800615 0x3c, 0xc0, 0x02, 0x99, 0x00, 0x61, 0x67, 0x11,
616 0x3c, 0xf1, 0x69, 0x33, 0x35, 0xc0, 0x28, 0x40,
617 0xf6, 0xf1, 0x34, 0xc0, 0x00, 0x19, 0x81, 0x1b,
Hayes Wang65f75512020-06-05 15:23:40 +0800618 0x91, 0xe8, 0x31, 0xc0, 0x04, 0x1a, 0x84, 0x1b,
619 0x8d, 0xe8, 0x82, 0xe8, 0xa3, 0x49, 0xfe, 0xf0,
620 0x2b, 0xc0, 0x7e, 0xe8, 0xa1, 0x48, 0x28, 0xc0,
621 0x84, 0x1b, 0x84, 0xe8, 0x00, 0x1d, 0x69, 0x33,
Ted Chen9dc8ba12016-01-20 14:24:52 +0800622 0x00, 0x1e, 0x01, 0x06, 0xff, 0x18, 0x30, 0x40,
Hayes Wang65f75512020-06-05 15:23:40 +0800623 0xfd, 0xf1, 0x19, 0xc0, 0x00, 0x76, 0x2e, 0x40,
Ted Chen9dc8ba12016-01-20 14:24:52 +0800624 0xf7, 0xf1, 0x21, 0x48, 0x19, 0xc0, 0x84, 0x1b,
Hayes Wang65f75512020-06-05 15:23:40 +0800625 0x75, 0xe8, 0x10, 0xc0, 0x69, 0xe8, 0xa1, 0x49,
Ted Chen9dc8ba12016-01-20 14:24:52 +0800626 0xfd, 0xf0, 0x11, 0xc0, 0x00, 0x1a, 0x84, 0x1b,
Hayes Wang65f75512020-06-05 15:23:40 +0800627 0x6d, 0xe8, 0x62, 0xe8, 0xa5, 0x49, 0xfe, 0xf0,
628 0x09, 0xc0, 0x01, 0x19, 0x81, 0x1b, 0x66, 0xe8,
629 0x54, 0xe0, 0x10, 0xd4, 0x88, 0xd3, 0xb8, 0x0b,
Ted Chen9dc8ba12016-01-20 14:24:52 +0800630 0x50, 0xe8, 0x20, 0xb4, 0x10, 0xd8, 0x84, 0xd4,
Hayes Wang65f75512020-06-05 15:23:40 +0800631 0xfd, 0xc0, 0x52, 0xe8, 0x48, 0x33, 0xf9, 0xc0,
632 0x00, 0x61, 0x9c, 0x20, 0x9c, 0x24, 0xd0, 0x49,
633 0x04, 0xf0, 0x04, 0x11, 0x02, 0xf1, 0x03, 0xe0,
634 0x00, 0x11, 0x06, 0xf1, 0x5c, 0xc0, 0x00, 0x61,
635 0x92, 0x48, 0x00, 0x89, 0x3a, 0xe0, 0x06, 0x11,
636 0x06, 0xf1, 0x55, 0xc0, 0x00, 0x61, 0x11, 0x48,
637 0x00, 0x89, 0x33, 0xe0, 0x05, 0x11, 0x08, 0xf1,
638 0x4e, 0xc0, 0x00, 0x61, 0x91, 0x49, 0x04, 0xf0,
639 0x91, 0x48, 0x00, 0x89, 0x11, 0xe0, 0xd9, 0xc0,
640 0x00, 0x61, 0x98, 0x20, 0x98, 0x24, 0x25, 0x11,
641 0x24, 0xf1, 0x44, 0xc0, 0x29, 0xe8, 0x95, 0x49,
642 0x20, 0xf0, 0xcf, 0xc0, 0x00, 0x61, 0x98, 0x20,
643 0x98, 0x24, 0x25, 0x11, 0x1a, 0xf1, 0x37, 0xc0,
644 0x00, 0x61, 0x92, 0x49, 0x16, 0xf1, 0x12, 0x48,
645 0x00, 0x89, 0x2f, 0xc0, 0x00, 0x19, 0x00, 0x89,
646 0x2d, 0xc0, 0x01, 0x89, 0x2d, 0xc0, 0x04, 0x19,
647 0x81, 0x1b, 0x1c, 0xe8, 0x2a, 0xc0, 0x14, 0x19,
648 0x81, 0x1b, 0x18, 0xe8, 0x21, 0xc0, 0x0c, 0xe8,
649 0x1f, 0xc0, 0x12, 0x48, 0x81, 0x1b, 0x12, 0xe8,
650 0xae, 0xc3, 0x66, 0x71, 0xae, 0xc0, 0x02, 0x99,
651 0x02, 0xc0, 0x00, 0xb8, 0x96, 0x07, 0x13, 0xc4,
652 0x84, 0x98, 0x00, 0x1b, 0x86, 0x8b, 0x86, 0x73,
653 0xbf, 0x49, 0xfe, 0xf1, 0x80, 0x71, 0x82, 0x72,
654 0x80, 0xff, 0x09, 0xc4, 0x84, 0x98, 0x80, 0x99,
655 0x82, 0x9a, 0x86, 0x8b, 0x86, 0x73, 0xbf, 0x49,
656 0xfe, 0xf1, 0x80, 0xff, 0x08, 0xea, 0x30, 0xd4,
Ted Chen9dc8ba12016-01-20 14:24:52 +0800657 0x10, 0xc0, 0x12, 0xe8, 0x8a, 0xd3, 0x28, 0xe4,
Hayes Wang65f75512020-06-05 15:23:40 +0800658 0x2c, 0xe4, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x00 };
Ted Chen9dc8ba12016-01-20 14:24:52 +0800659
660static u16 r8153_pla_patch_b_bp[] = {
661 0xfc26, 0x8000, 0xfc28, 0x1154, 0xfc2a, 0x1606, 0xfc2c, 0x155a,
662 0xfc2e, 0x0080, 0xfc30, 0x033c, 0xfc32, 0x01a0, 0xfc34, 0x0794,
663 0xfc36, 0x0000, 0xfc38, 0x007f };
664
665static u16 r8153_ram_code_d[] = {
Hayes Wang65f75512020-06-05 15:23:40 +0800666 0xB436, 0xB820, 0xB438, 0x0290, 0xB436, 0xA012, 0xB438, 0x0000,
667 0xB436, 0xA014, 0xB438, 0x2c04, 0xB438, 0x2c07, 0xB438, 0x2c07,
668 0xB438, 0x2c07, 0xB438, 0xa240, 0xB438, 0xa104, 0xB438, 0x2944,
669 0xB436, 0xA01A, 0xB438, 0x0000, 0xB436, 0xA006, 0xB438, 0x0fff,
670 0xB436, 0xA004, 0xB438, 0x0fff, 0xB436, 0xA002, 0xB438, 0x0fff,
671 0xB436, 0xA000, 0xB438, 0x1943, 0xB436, 0xB820, 0xB438, 0x0210 };
Ted Chen9dc8ba12016-01-20 14:24:52 +0800672
673static u8 usb_patch_d[] = {
Hayes Wang65f75512020-06-05 15:23:40 +0800674 0x08, 0xe0, 0x0e, 0xe0, 0x11, 0xe0, 0x24, 0xe0,
675 0x2b, 0xe0, 0x33, 0xe0, 0x3a, 0xe0, 0x3c, 0xe0,
676 0x1e, 0xc3, 0x70, 0x61, 0x12, 0x48, 0x70, 0x89,
677 0x02, 0xc3, 0x00, 0xbb, 0x02, 0x17, 0x32, 0x19,
678 0x02, 0xc3, 0x00, 0xbb, 0x44, 0x14, 0x30, 0x18,
679 0x11, 0xc1, 0x05, 0xe8, 0x10, 0xc6, 0x02, 0xc2,
680 0x00, 0xba, 0x94, 0x17, 0x02, 0xb4, 0x09, 0xc2,
681 0x40, 0x99, 0x0e, 0x48, 0x42, 0x98, 0x42, 0x70,
682 0x8e, 0x49, 0xfe, 0xf1, 0x02, 0xb0, 0x80, 0xff,
683 0xc0, 0xd4, 0xe4, 0x40, 0x20, 0xd4, 0x30, 0x18,
684 0x06, 0xc1, 0xf1, 0xef, 0xfc, 0xc7, 0x02, 0xc0,
685 0x00, 0xb8, 0x38, 0x12, 0xe4, 0x4b, 0x0c, 0x61,
686 0x92, 0x48, 0x93, 0x48, 0x95, 0x48, 0x96, 0x48,
687 0x0c, 0x89, 0x02, 0xc0, 0x00, 0xb8, 0x0e, 0x06,
688 0x30, 0x18, 0xf5, 0xc1, 0xe0, 0xef, 0x04, 0xc5,
689 0x02, 0xc4, 0x00, 0xbc, 0x76, 0x3c, 0x1e, 0xfc,
690 0x02, 0xc6, 0x00, 0xbe, 0x00, 0x00, 0x02, 0xc6,
691 0x00, 0xbe, 0x00, 0x00 };
Ted Chen9dc8ba12016-01-20 14:24:52 +0800692
693static u16 r8153_usb_patch_d_bp[] = {
Hayes Wang65f75512020-06-05 15:23:40 +0800694 0xfc26, 0xa000, 0xfc28, 0x16de, 0xfc2a, 0x1442, 0xfc2c, 0x1792,
695 0xfc2e, 0x1236, 0xfc30, 0x0606, 0xfc32, 0x3c74, 0xfc34, 0x0000,
696 0xfc36, 0x0000, 0xfc38, 0x003e };
697
698static u8 pla_patch_d[] = {
699 0x03, 0xe0, 0x16, 0xe0, 0x30, 0xe0, 0x12, 0xc2,
700 0x40, 0x73, 0xb0, 0x49, 0x08, 0xf0, 0xb8, 0x49,
701 0x06, 0xf0, 0xb8, 0x48, 0x40, 0x9b, 0x0b, 0xc2,
702 0x40, 0x76, 0x05, 0xe0, 0x02, 0x61, 0x02, 0xc3,
703 0x00, 0xbb, 0x54, 0x08, 0x02, 0xc3, 0x00, 0xbb,
704 0x64, 0x08, 0x98, 0xd3, 0x1e, 0xfc, 0xfe, 0xc0,
705 0x02, 0x62, 0xa0, 0x48, 0x02, 0x8a, 0x00, 0x72,
706 0xa0, 0x49, 0x11, 0xf0, 0x13, 0xc1, 0x20, 0x62,
707 0x2e, 0x21, 0x2f, 0x25, 0x00, 0x71, 0x9f, 0x24,
708 0x0a, 0x40, 0x09, 0xf0, 0x00, 0x71, 0x18, 0x48,
709 0xa0, 0x49, 0x03, 0xf1, 0x9f, 0x48, 0x02, 0xe0,
710 0x1f, 0x48, 0x00, 0x99, 0x02, 0xc2, 0x00, 0xba,
711 0xac, 0x0c, 0x08, 0xe9, 0x36, 0xc0, 0x00, 0x61,
712 0x9c, 0x20, 0x9c, 0x24, 0x33, 0xc0, 0x07, 0x11,
713 0x05, 0xf1, 0x00, 0x61, 0x17, 0x48, 0x00, 0x89,
714 0x0d, 0xe0, 0x04, 0x11, 0x0b, 0xf1, 0x00, 0x61,
715 0x97, 0x49, 0x08, 0xf0, 0x97, 0x48, 0x00, 0x89,
716 0x23, 0xc0, 0x0e, 0xe8, 0x12, 0x48, 0x81, 0x1b,
717 0x15, 0xe8, 0x1f, 0xc0, 0x00, 0x61, 0x67, 0x11,
718 0x04, 0xf0, 0x02, 0xc0, 0x00, 0xb8, 0x42, 0x09,
719 0x02, 0xc0, 0x00, 0xb8, 0x90, 0x08, 0x13, 0xc4,
720 0x84, 0x98, 0x00, 0x1b, 0x86, 0x8b, 0x86, 0x73,
721 0xbf, 0x49, 0xfe, 0xf1, 0x80, 0x71, 0x82, 0x72,
722 0x80, 0xff, 0x09, 0xc4, 0x84, 0x98, 0x80, 0x99,
723 0x82, 0x9a, 0x86, 0x8b, 0x86, 0x73, 0xbf, 0x49,
724 0xfe, 0xf1, 0x80, 0xff, 0x08, 0xea, 0x30, 0xd4,
725 0x50, 0xe8, 0x8a, 0xd3 };
726
727static u16 r8153_pla_patch_d_bp[] = {
728 0xfc26, 0x8000, 0xfc28, 0x0852, 0xfc2a, 0x0c92, 0xfc2c, 0x088c,
729 0xfc2e, 0x0000, 0xfc30, 0x0000, 0xfc32, 0x0000, 0xfc34, 0x0000,
730 0xfc36, 0x0000, 0xfc38, 0x0007 };
Ted Chen9dc8ba12016-01-20 14:24:52 +0800731
732static void rtl_clear_bp(struct r8152 *tp)
733{
734 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_BP_0, 0);
735 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_BP_2, 0);
736 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_BP_4, 0);
737 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_BP_6, 0);
738 ocp_write_dword(tp, MCU_TYPE_USB, USB_BP_0, 0);
739 ocp_write_dword(tp, MCU_TYPE_USB, USB_BP_2, 0);
740 ocp_write_dword(tp, MCU_TYPE_USB, USB_BP_4, 0);
741 ocp_write_dword(tp, MCU_TYPE_USB, USB_BP_6, 0);
742
743 mdelay(6);
744
745 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_BA, 0);
746 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_BA, 0);
747}
748
749static void r8153_clear_bp(struct r8152 *tp)
750{
751 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_BP_EN, 0);
752 ocp_write_byte(tp, MCU_TYPE_USB, USB_BP_EN, 0);
753 rtl_clear_bp(tp);
754}
755
756static void r8152b_set_dq_desc(struct r8152 *tp)
757{
758 u8 data;
759
760 data = ocp_read_byte(tp, MCU_TYPE_USB, 0xd429);
761 data |= 0x80;
762 ocp_write_byte(tp, MCU_TYPE_USB, 0xd429, data);
763 ocp_write_word(tp, MCU_TYPE_USB, 0xc0ce, 0x0210);
764 data = ocp_read_byte(tp, MCU_TYPE_USB, 0xd429);
765 data &= ~0x80;
766 ocp_write_byte(tp, MCU_TYPE_USB, 0xd429, data);
767}
768
769static int r8153_pre_ram_code(struct r8152 *tp, u16 patch_key)
770{
771 u16 data;
772 int i;
773
774 data = ocp_reg_read(tp, 0xb820);
775 data |= 0x0010;
776 ocp_reg_write(tp, 0xb820, data);
777
778 for (i = 0, data = 0; !data && i < 5000; i++) {
779 mdelay(2);
780 data = ocp_reg_read(tp, 0xb800) & 0x0040;
781 }
782
783 sram_write(tp, 0x8146, patch_key);
784 sram_write(tp, 0xb82e, 0x0001);
785
786 return -EBUSY;
787}
788
789static int r8153_post_ram_code(struct r8152 *tp)
790{
791 u16 data;
792
793 sram_write(tp, 0x0000, 0x0000);
794
795 data = ocp_reg_read(tp, 0xb82e);
796 data &= ~0x0001;
797 ocp_reg_write(tp, 0xb82e, data);
798
799 sram_write(tp, 0x8146, 0x0000);
800
801 data = ocp_reg_read(tp, 0xb820);
802 data &= ~0x0010;
803 ocp_reg_write(tp, 0xb820, data);
804
805 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, tp->ocp_base);
806
807 return 0;
808}
809
810static void r8153_wdt1_end(struct r8152 *tp)
811{
812 int i;
813
814 for (i = 0; i < 104; i++) {
815 if (!(ocp_read_byte(tp, MCU_TYPE_USB, 0xe404) & 1))
816 break;
817 mdelay(2);
818 }
819}
820
821void r8152b_firmware(struct r8152 *tp)
822{
823 int i;
824
825 if (tp->version == RTL_VER_01) {
826 int i;
827
828 r8152b_set_dq_desc(tp);
829 rtl_clear_bp(tp);
830
831 generic_ocp_write(tp, 0xf800, 0x3f,
832 sizeof(r8152b_pla_patch_a),
833 r8152b_pla_patch_a, MCU_TYPE_PLA);
834
835 for (i = 0; i < ARRAY_SIZE(r8152b_pla_patch_a_bp); i += 2)
836 ocp_write_word(tp, MCU_TYPE_PLA,
837 r8152b_pla_patch_a_bp[i],
838 r8152b_pla_patch_a_bp[i+1]);
839
840 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, 0x2000);
841 ocp_write_word(tp, MCU_TYPE_PLA, 0xb092, 0x7070);
842 ocp_write_word(tp, MCU_TYPE_PLA, 0xb098, 0x0600);
843 for (i = 0; i < ARRAY_SIZE(r8152b_ram_code1); i++)
844 ocp_write_word(tp, MCU_TYPE_PLA, 0xb09a,
845 r8152b_ram_code1[i]);
846
847 ocp_write_word(tp, MCU_TYPE_PLA, 0xb098, 0x0200);
848 ocp_write_word(tp, MCU_TYPE_PLA, 0xb092, 0x7030);
849 } else if (tp->version == RTL_VER_02) {
850 rtl_clear_bp(tp);
851
852 generic_ocp_write(tp, 0xf800, 0xff,
853 sizeof(r8152b_pla_patch_a2),
854 r8152b_pla_patch_a2, MCU_TYPE_PLA);
855
856 for (i = 0; i < ARRAY_SIZE(r8152b_pla_patch_a2_bp);
857 i += 2)
858 ocp_write_word(tp, MCU_TYPE_PLA,
859 r8152b_pla_patch_a2_bp[i],
860 r8152b_pla_patch_a2_bp[i+1]);
861 }
862}
863
864void r8153_firmware(struct r8152 *tp)
865{
866 int i;
867
868 if (tp->version == RTL_VER_03) {
869 r8153_clear_bp(tp);
870
871 r8153_pre_ram_code(tp, 0x7000);
872
873 for (i = 0; i < ARRAY_SIZE(r8153_ram_code_a); i += 2)
874 ocp_write_word(tp, MCU_TYPE_PLA,
875 r8153_ram_code_a[i],
876 r8153_ram_code_a[i+1]);
877
878 r8153_post_ram_code(tp);
879 } else if (tp->version == RTL_VER_04) {
880 r8153_pre_ram_code(tp, 0x7001);
881
Andre Przywara566a9652016-11-16 00:50:11 +0000882 for (i = 0; i < ARRAY_SIZE(r8153_ram_code_bc); i += 2)
883 ocp_write_word(tp, MCU_TYPE_PLA,
884 r8153_ram_code_bc[i],
885 r8153_ram_code_bc[i+1]);
Ted Chen9dc8ba12016-01-20 14:24:52 +0800886
887 r8153_post_ram_code(tp);
888
889 r8153_wdt1_end(tp);
890 r8153_clear_bp(tp);
891
892 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x0000);
893 generic_ocp_write(tp, 0xf800, 0xff,
894 sizeof(r8153_usb_patch_b),
895 r8153_usb_patch_b, MCU_TYPE_USB);
896
897 for (i = 0; i < ARRAY_SIZE(r8153_usb_patch_b_bp); i += 2)
898 ocp_write_word(tp, MCU_TYPE_USB,
899 r8153_usb_patch_b_bp[i],
900 r8153_usb_patch_b_bp[i+1]);
901
902 if (!(ocp_read_word(tp, MCU_TYPE_PLA, 0xd38e) & BIT(0))) {
903 ocp_write_word(tp, MCU_TYPE_PLA, 0xd38c, 0x0082);
904 ocp_write_word(tp, MCU_TYPE_PLA, 0xd38e, 0x0082);
905 }
906
907 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, 0x0000);
908 generic_ocp_write(tp, 0xf800, 0xff,
909 sizeof(r8153_pla_patch_b),
910 r8153_pla_patch_b, MCU_TYPE_PLA);
911
912 for (i = 0; i < ARRAY_SIZE(r8153_pla_patch_b_bp); i += 2)
913 ocp_write_word(tp, MCU_TYPE_PLA,
914 r8153_pla_patch_b_bp[i],
915 r8153_pla_patch_b_bp[i+1]);
916
917 ocp_write_word(tp, MCU_TYPE_PLA, 0xd388, 0x08ca);
918 } else if (tp->version == RTL_VER_05) {
919 u32 ocp_data;
920
921 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, 0xcfca);
922 ocp_data &= ~0x4000;
923 ocp_write_word(tp, MCU_TYPE_USB, 0xcfca, ocp_data);
924
925 r8153_pre_ram_code(tp, 0x7001);
926
927 for (i = 0; i < ARRAY_SIZE(r8153_ram_code_bc); i += 2)
928 ocp_write_word(tp, MCU_TYPE_PLA,
929 r8153_ram_code_bc[i],
930 r8153_ram_code_bc[i+1]);
931
932 r8153_post_ram_code(tp);
933
934 r8153_wdt1_end(tp);
935 r8153_clear_bp(tp);
936
937 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x0000);
938 generic_ocp_write(tp, 0xf800, 0xff,
939 sizeof(r8153_usb_patch_c),
940 r8153_usb_patch_c, MCU_TYPE_USB);
941
942 for (i = 0; i < ARRAY_SIZE(r8153_usb_patch_c_bp); i += 2)
943 ocp_write_word(tp, MCU_TYPE_USB,
944 r8153_usb_patch_c_bp[i],
945 r8153_usb_patch_c_bp[i+1]);
946
947 if (ocp_read_byte(tp, MCU_TYPE_USB, 0xcfef) & 1) {
948 ocp_write_word(tp, MCU_TYPE_USB, 0xfc30, 0x1578);
949 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x00ff);
950 } else {
951 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x00ef);
952 }
953
954 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, 0x0000);
955 generic_ocp_write(tp, 0xf800, 0xff,
956 sizeof(r8153_pla_patch_c),
957 r8153_pla_patch_c, MCU_TYPE_PLA);
958
959 for (i = 0; i < ARRAY_SIZE(r8153_pla_patch_c_bp); i += 2)
960 ocp_write_word(tp, MCU_TYPE_PLA,
961 r8153_pla_patch_c_bp[i],
962 r8153_pla_patch_c_bp[i+1]);
963
964 ocp_write_word(tp, MCU_TYPE_PLA, 0xd388, 0x08ca);
965
Hayes Wang65f75512020-06-05 15:23:40 +0800966 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS,
967 U3P3_CHECK_EN | 4);
968
Ted Chen9dc8ba12016-01-20 14:24:52 +0800969 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, 0xcfca);
970 ocp_data |= 0x4000;
971 ocp_write_word(tp, MCU_TYPE_USB, 0xcfca, ocp_data);
Hayes Wang65f75512020-06-05 15:23:40 +0800972
973 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY);
974 ocp_data |= USB2PHY_L1 | USB2PHY_SUSPEND;
975 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data);
Ted Chen9dc8ba12016-01-20 14:24:52 +0800976 } else if (tp->version == RTL_VER_06) {
Hayes Wang65f75512020-06-05 15:23:40 +0800977 u32 ocp_data;
978
Ted Chen9dc8ba12016-01-20 14:24:52 +0800979 r8153_pre_ram_code(tp, 0x7002);
980
981 for (i = 0; i < ARRAY_SIZE(r8153_ram_code_d); i += 2)
982 ocp_write_word(tp, MCU_TYPE_PLA,
983 r8153_ram_code_d[i],
984 r8153_ram_code_d[i+1]);
985
986 r8153_post_ram_code(tp);
987
988 r8153_clear_bp(tp);
989
990 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x0000);
991 generic_ocp_write(tp, 0xf800, 0xff, sizeof(usb_patch_d),
992 usb_patch_d, MCU_TYPE_USB);
993
994 for (i = 0; i < ARRAY_SIZE(r8153_usb_patch_d_bp); i += 2)
995 ocp_write_word(tp, MCU_TYPE_USB,
996 r8153_usb_patch_d_bp[i],
997 r8153_usb_patch_d_bp[i+1]);
Hayes Wang65f75512020-06-05 15:23:40 +0800998
999 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, 0x0000);
1000 generic_ocp_write(tp, 0xf800, 0xff, sizeof(pla_patch_d),
1001 pla_patch_d, MCU_TYPE_PLA);
1002
1003 for (i = 0; i < ARRAY_SIZE(r8153_pla_patch_d_bp); i += 2)
1004 ocp_write_word(tp, MCU_TYPE_PLA,
1005 r8153_pla_patch_d_bp[i],
1006 r8153_pla_patch_d_bp[i + 1]);
1007
1008 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY);
1009 ocp_data |= USB2PHY_L1 | USB2PHY_SUSPEND;
1010 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data);
1011
1012 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1);
1013 ocp_data |= FW_IP_RESET_EN;
1014 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, ocp_data);
Ted Chen9dc8ba12016-01-20 14:24:52 +08001015 }
1016}