blob: 2da1f221b4e0d9608a190aace5c45007fa61ebc3 [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[] = {
Hayes Wanga587d3b2020-06-05 15:23:40 +0800296 0xfc26, 0x8000, 0xfc28, 0x17a5, 0xfc2a, 0x13ad,
Ted Chen9b6dbd42016-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 Wanga587d3b2020-06-05 15:23:40 +0800324 0x08, 0xe0, 0x0a, 0xe0, 0x14, 0xe0, 0x58, 0xe0,
325 0x64, 0xe0, 0x79, 0xe0, 0xab, 0xe0, 0xb6, 0xe0,
Ted Chen9b6dbd42016-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 Wanga587d3b2020-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 Chen9b6dbd42016-01-20 14:24:52 +0800340 0x05, 0xf0, 0x32, 0x48, 0x02, 0xc2, 0x00, 0xba,
341 0x3e, 0x16, 0x02, 0xc2, 0x00, 0xba, 0x48, 0x16,
Hayes Wanga587d3b2020-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 Chen9b6dbd42016-01-20 14:24:52 +0800374
375static u16 r8153_usb_patch_c_bp[] = {
Hayes Wanga587d3b2020-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 Chen9b6dbd42016-01-20 14:24:52 +0800379
380static u8 r8153_pla_patch_c[] = {
Hayes Wanga587d3b2020-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 Chen9b6dbd42016-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 Wanga587d3b2020-06-05 15:23:40 +0800467 0xfc36, 0x0894, 0xfc38, 0x00e6 };
Ted Chen9b6dbd42016-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 Wanga587d3b2020-06-05 15:23:40 +0800532 0x09, 0xe1, 0x0e, 0xe1, 0x46, 0xe1, 0xf7, 0xe1,
Ted Chen9b6dbd42016-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 Wanga587d3b2020-06-05 15:23:40 +0800614 0x18, 0x89, 0x00, 0x1d, 0x3c, 0xc3, 0x64, 0x71,
Ted Chen9b6dbd42016-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 Wanga587d3b2020-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 Chen9b6dbd42016-01-20 14:24:52 +0800622 0x00, 0x1e, 0x01, 0x06, 0xff, 0x18, 0x30, 0x40,
Hayes Wanga587d3b2020-06-05 15:23:40 +0800623 0xfd, 0xf1, 0x19, 0xc0, 0x00, 0x76, 0x2e, 0x40,
Ted Chen9b6dbd42016-01-20 14:24:52 +0800624 0xf7, 0xf1, 0x21, 0x48, 0x19, 0xc0, 0x84, 0x1b,
Hayes Wanga587d3b2020-06-05 15:23:40 +0800625 0x75, 0xe8, 0x10, 0xc0, 0x69, 0xe8, 0xa1, 0x49,
Ted Chen9b6dbd42016-01-20 14:24:52 +0800626 0xfd, 0xf0, 0x11, 0xc0, 0x00, 0x1a, 0x84, 0x1b,
Hayes Wanga587d3b2020-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 Chen9b6dbd42016-01-20 14:24:52 +0800630 0x50, 0xe8, 0x20, 0xb4, 0x10, 0xd8, 0x84, 0xd4,
Hayes Wanga587d3b2020-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 Chen9b6dbd42016-01-20 14:24:52 +0800657 0x10, 0xc0, 0x12, 0xe8, 0x8a, 0xd3, 0x28, 0xe4,
Hayes Wanga587d3b2020-06-05 15:23:40 +0800658 0x2c, 0xe4, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x00 };
Ted Chen9b6dbd42016-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 Wanga587d3b2020-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 Chen9b6dbd42016-01-20 14:24:52 +0800672
673static u8 usb_patch_d[] = {
Hayes Wanga587d3b2020-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 Chen9b6dbd42016-01-20 14:24:52 +0800692
693static u16 r8153_usb_patch_d_bp[] = {
Hayes Wanga587d3b2020-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 Chen9b6dbd42016-01-20 14:24:52 +0800731
Hayes Wang98e97912020-06-16 17:09:46 +0800732static void rtl_clear_bp(struct r8152 *tp, u16 type)
Ted Chen9b6dbd42016-01-20 14:24:52 +0800733{
Hayes Wang98e97912020-06-16 17:09:46 +0800734 u8 zeros[16] = {0};
Ted Chen9b6dbd42016-01-20 14:24:52 +0800735
Hayes Wang98e97912020-06-16 17:09:46 +0800736 switch (tp->version) {
737 case RTL_VER_01:
738 case RTL_VER_02:
739 case RTL_VER_07:
740 break;
741 case RTL_VER_03:
742 case RTL_VER_04:
743 case RTL_VER_05:
744 case RTL_VER_06:
745 ocp_write_byte(tp, type, PLA_BP_EN, 0);
746 break;
747 default:
748 break;
749 }
Ted Chen9b6dbd42016-01-20 14:24:52 +0800750
Hayes Wang98e97912020-06-16 17:09:46 +0800751 generic_ocp_write(tp, USB_BP(0), 0xff, sizeof(zeros), zeros, type);
Ted Chen9b6dbd42016-01-20 14:24:52 +0800752
Hayes Wang98e97912020-06-16 17:09:46 +0800753 mdelay(6);
754
755 ocp_write_word(tp, type, PLA_BP_BA, 0);
Ted Chen9b6dbd42016-01-20 14:24:52 +0800756}
757
758static void r8152b_set_dq_desc(struct r8152 *tp)
759{
760 u8 data;
761
762 data = ocp_read_byte(tp, MCU_TYPE_USB, 0xd429);
763 data |= 0x80;
764 ocp_write_byte(tp, MCU_TYPE_USB, 0xd429, data);
765 ocp_write_word(tp, MCU_TYPE_USB, 0xc0ce, 0x0210);
766 data = ocp_read_byte(tp, MCU_TYPE_USB, 0xd429);
767 data &= ~0x80;
768 ocp_write_byte(tp, MCU_TYPE_USB, 0xd429, data);
769}
770
771static int r8153_pre_ram_code(struct r8152 *tp, u16 patch_key)
772{
773 u16 data;
774 int i;
775
776 data = ocp_reg_read(tp, 0xb820);
777 data |= 0x0010;
778 ocp_reg_write(tp, 0xb820, data);
779
780 for (i = 0, data = 0; !data && i < 5000; i++) {
781 mdelay(2);
782 data = ocp_reg_read(tp, 0xb800) & 0x0040;
783 }
784
785 sram_write(tp, 0x8146, patch_key);
786 sram_write(tp, 0xb82e, 0x0001);
787
788 return -EBUSY;
789}
790
791static int r8153_post_ram_code(struct r8152 *tp)
792{
793 u16 data;
794
795 sram_write(tp, 0x0000, 0x0000);
796
797 data = ocp_reg_read(tp, 0xb82e);
798 data &= ~0x0001;
799 ocp_reg_write(tp, 0xb82e, data);
800
801 sram_write(tp, 0x8146, 0x0000);
802
803 data = ocp_reg_read(tp, 0xb820);
804 data &= ~0x0010;
805 ocp_reg_write(tp, 0xb820, data);
806
807 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, tp->ocp_base);
808
809 return 0;
810}
811
812static void r8153_wdt1_end(struct r8152 *tp)
813{
814 int i;
815
816 for (i = 0; i < 104; i++) {
817 if (!(ocp_read_byte(tp, MCU_TYPE_USB, 0xe404) & 1))
818 break;
819 mdelay(2);
820 }
821}
822
823void r8152b_firmware(struct r8152 *tp)
824{
825 int i;
826
827 if (tp->version == RTL_VER_01) {
828 int i;
829
830 r8152b_set_dq_desc(tp);
Hayes Wang98e97912020-06-16 17:09:46 +0800831 rtl_clear_bp(tp, MCU_TYPE_PLA);
Ted Chen9b6dbd42016-01-20 14:24:52 +0800832
833 generic_ocp_write(tp, 0xf800, 0x3f,
834 sizeof(r8152b_pla_patch_a),
835 r8152b_pla_patch_a, MCU_TYPE_PLA);
836
837 for (i = 0; i < ARRAY_SIZE(r8152b_pla_patch_a_bp); i += 2)
838 ocp_write_word(tp, MCU_TYPE_PLA,
839 r8152b_pla_patch_a_bp[i],
840 r8152b_pla_patch_a_bp[i+1]);
841
842 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, 0x2000);
843 ocp_write_word(tp, MCU_TYPE_PLA, 0xb092, 0x7070);
844 ocp_write_word(tp, MCU_TYPE_PLA, 0xb098, 0x0600);
845 for (i = 0; i < ARRAY_SIZE(r8152b_ram_code1); i++)
846 ocp_write_word(tp, MCU_TYPE_PLA, 0xb09a,
847 r8152b_ram_code1[i]);
848
849 ocp_write_word(tp, MCU_TYPE_PLA, 0xb098, 0x0200);
850 ocp_write_word(tp, MCU_TYPE_PLA, 0xb092, 0x7030);
851 } else if (tp->version == RTL_VER_02) {
Hayes Wang98e97912020-06-16 17:09:46 +0800852 rtl_clear_bp(tp, MCU_TYPE_PLA);
Ted Chen9b6dbd42016-01-20 14:24:52 +0800853
854 generic_ocp_write(tp, 0xf800, 0xff,
855 sizeof(r8152b_pla_patch_a2),
856 r8152b_pla_patch_a2, MCU_TYPE_PLA);
857
858 for (i = 0; i < ARRAY_SIZE(r8152b_pla_patch_a2_bp);
859 i += 2)
860 ocp_write_word(tp, MCU_TYPE_PLA,
861 r8152b_pla_patch_a2_bp[i],
862 r8152b_pla_patch_a2_bp[i+1]);
863 }
864}
865
866void r8153_firmware(struct r8152 *tp)
867{
868 int i;
869
870 if (tp->version == RTL_VER_03) {
Ted Chen9b6dbd42016-01-20 14:24:52 +0800871 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 Przywarab86d0fb2016-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 Chen9b6dbd42016-01-20 14:24:52 +0800886
887 r8153_post_ram_code(tp);
888
889 r8153_wdt1_end(tp);
Hayes Wang98e97912020-06-16 17:09:46 +0800890
891 rtl_clear_bp(tp, MCU_TYPE_USB);
Ted Chen9b6dbd42016-01-20 14:24:52 +0800892
893 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x0000);
894 generic_ocp_write(tp, 0xf800, 0xff,
895 sizeof(r8153_usb_patch_b),
896 r8153_usb_patch_b, MCU_TYPE_USB);
897
898 for (i = 0; i < ARRAY_SIZE(r8153_usb_patch_b_bp); i += 2)
899 ocp_write_word(tp, MCU_TYPE_USB,
900 r8153_usb_patch_b_bp[i],
901 r8153_usb_patch_b_bp[i+1]);
902
903 if (!(ocp_read_word(tp, MCU_TYPE_PLA, 0xd38e) & BIT(0))) {
904 ocp_write_word(tp, MCU_TYPE_PLA, 0xd38c, 0x0082);
905 ocp_write_word(tp, MCU_TYPE_PLA, 0xd38e, 0x0082);
906 }
907
Hayes Wang98e97912020-06-16 17:09:46 +0800908 rtl_clear_bp(tp, MCU_TYPE_PLA);
909
Ted Chen9b6dbd42016-01-20 14:24:52 +0800910 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, 0x0000);
911 generic_ocp_write(tp, 0xf800, 0xff,
912 sizeof(r8153_pla_patch_b),
913 r8153_pla_patch_b, MCU_TYPE_PLA);
914
915 for (i = 0; i < ARRAY_SIZE(r8153_pla_patch_b_bp); i += 2)
916 ocp_write_word(tp, MCU_TYPE_PLA,
917 r8153_pla_patch_b_bp[i],
918 r8153_pla_patch_b_bp[i+1]);
919
920 ocp_write_word(tp, MCU_TYPE_PLA, 0xd388, 0x08ca);
921 } else if (tp->version == RTL_VER_05) {
922 u32 ocp_data;
923
924 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, 0xcfca);
925 ocp_data &= ~0x4000;
926 ocp_write_word(tp, MCU_TYPE_USB, 0xcfca, ocp_data);
927
928 r8153_pre_ram_code(tp, 0x7001);
929
930 for (i = 0; i < ARRAY_SIZE(r8153_ram_code_bc); i += 2)
931 ocp_write_word(tp, MCU_TYPE_PLA,
932 r8153_ram_code_bc[i],
933 r8153_ram_code_bc[i+1]);
934
935 r8153_post_ram_code(tp);
936
937 r8153_wdt1_end(tp);
Hayes Wang98e97912020-06-16 17:09:46 +0800938
939 rtl_clear_bp(tp, MCU_TYPE_USB);
Ted Chen9b6dbd42016-01-20 14:24:52 +0800940
941 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x0000);
942 generic_ocp_write(tp, 0xf800, 0xff,
943 sizeof(r8153_usb_patch_c),
944 r8153_usb_patch_c, MCU_TYPE_USB);
945
946 for (i = 0; i < ARRAY_SIZE(r8153_usb_patch_c_bp); i += 2)
947 ocp_write_word(tp, MCU_TYPE_USB,
948 r8153_usb_patch_c_bp[i],
949 r8153_usb_patch_c_bp[i+1]);
950
951 if (ocp_read_byte(tp, MCU_TYPE_USB, 0xcfef) & 1) {
952 ocp_write_word(tp, MCU_TYPE_USB, 0xfc30, 0x1578);
953 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x00ff);
954 } else {
955 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x00ef);
956 }
957
Hayes Wang98e97912020-06-16 17:09:46 +0800958 rtl_clear_bp(tp, MCU_TYPE_PLA);
959
Ted Chen9b6dbd42016-01-20 14:24:52 +0800960 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, 0x0000);
961 generic_ocp_write(tp, 0xf800, 0xff,
962 sizeof(r8153_pla_patch_c),
963 r8153_pla_patch_c, MCU_TYPE_PLA);
964
965 for (i = 0; i < ARRAY_SIZE(r8153_pla_patch_c_bp); i += 2)
966 ocp_write_word(tp, MCU_TYPE_PLA,
967 r8153_pla_patch_c_bp[i],
968 r8153_pla_patch_c_bp[i+1]);
969
970 ocp_write_word(tp, MCU_TYPE_PLA, 0xd388, 0x08ca);
971
Hayes Wanga587d3b2020-06-05 15:23:40 +0800972 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS,
973 U3P3_CHECK_EN | 4);
974
Ted Chen9b6dbd42016-01-20 14:24:52 +0800975 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, 0xcfca);
976 ocp_data |= 0x4000;
977 ocp_write_word(tp, MCU_TYPE_USB, 0xcfca, ocp_data);
Hayes Wanga587d3b2020-06-05 15:23:40 +0800978
979 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY);
980 ocp_data |= USB2PHY_L1 | USB2PHY_SUSPEND;
981 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data);
Ted Chen9b6dbd42016-01-20 14:24:52 +0800982 } else if (tp->version == RTL_VER_06) {
Hayes Wanga587d3b2020-06-05 15:23:40 +0800983 u32 ocp_data;
984
Ted Chen9b6dbd42016-01-20 14:24:52 +0800985 r8153_pre_ram_code(tp, 0x7002);
986
987 for (i = 0; i < ARRAY_SIZE(r8153_ram_code_d); i += 2)
988 ocp_write_word(tp, MCU_TYPE_PLA,
989 r8153_ram_code_d[i],
990 r8153_ram_code_d[i+1]);
991
992 r8153_post_ram_code(tp);
993
Hayes Wang98e97912020-06-16 17:09:46 +0800994 rtl_clear_bp(tp, MCU_TYPE_USB);
Ted Chen9b6dbd42016-01-20 14:24:52 +0800995
996 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x0000);
997 generic_ocp_write(tp, 0xf800, 0xff, sizeof(usb_patch_d),
998 usb_patch_d, MCU_TYPE_USB);
999
1000 for (i = 0; i < ARRAY_SIZE(r8153_usb_patch_d_bp); i += 2)
1001 ocp_write_word(tp, MCU_TYPE_USB,
1002 r8153_usb_patch_d_bp[i],
1003 r8153_usb_patch_d_bp[i+1]);
Hayes Wanga587d3b2020-06-05 15:23:40 +08001004
Hayes Wang98e97912020-06-16 17:09:46 +08001005 rtl_clear_bp(tp, MCU_TYPE_PLA);
1006
Hayes Wanga587d3b2020-06-05 15:23:40 +08001007 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, 0x0000);
1008 generic_ocp_write(tp, 0xf800, 0xff, sizeof(pla_patch_d),
1009 pla_patch_d, MCU_TYPE_PLA);
1010
1011 for (i = 0; i < ARRAY_SIZE(r8153_pla_patch_d_bp); i += 2)
1012 ocp_write_word(tp, MCU_TYPE_PLA,
1013 r8153_pla_patch_d_bp[i],
1014 r8153_pla_patch_d_bp[i + 1]);
1015
1016 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY);
1017 ocp_data |= USB2PHY_L1 | USB2PHY_SUSPEND;
1018 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data);
1019
1020 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1);
1021 ocp_data |= FW_IP_RESET_EN;
1022 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, ocp_data);
Ted Chen9b6dbd42016-01-20 14:24:52 +08001023 }
1024}