blob: a41abed3069a7aad80bd5b94d3c1245a024b2ba5 [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 Wangd215ca22020-06-16 17:09:47 +0800732static u8 usb_patch2_b[] = {
733 0x10, 0xe0, 0x26, 0xe0, 0x3a, 0xe0, 0x58, 0xe0,
734 0x6c, 0xe0, 0x85, 0xe0, 0xa5, 0xe0, 0xbe, 0xe0,
735 0xd8, 0xe0, 0xdb, 0xe0, 0xf3, 0xe0, 0xf5, 0xe0,
736 0xf7, 0xe0, 0xf9, 0xe0, 0xfb, 0xe0, 0xfd, 0xe0,
737 0x16, 0xc0, 0x00, 0x75, 0xd1, 0x49, 0x0d, 0xf0,
738 0x0f, 0xc0, 0x0f, 0xc5, 0x00, 0x1e, 0x08, 0x9e,
739 0x0c, 0x9d, 0x0c, 0xc6, 0x0a, 0x9e, 0x8f, 0x1c,
740 0x0e, 0x8c, 0x0e, 0x74, 0xcf, 0x49, 0xfe, 0xf1,
741 0x02, 0xc0, 0x00, 0xb8, 0x96, 0x31, 0x00, 0xdc,
742 0x24, 0xe4, 0x80, 0x02, 0x34, 0xd3, 0xff, 0xc3,
743 0x60, 0x72, 0xa1, 0x49, 0x0d, 0xf0, 0xf8, 0xc3,
744 0xf8, 0xc2, 0x00, 0x1c, 0x68, 0x9c, 0xf6, 0xc4,
745 0x6a, 0x9c, 0x6c, 0x9a, 0x8f, 0x1c, 0x6e, 0x8c,
746 0x6e, 0x74, 0xcf, 0x49, 0xfe, 0xf1, 0x04, 0xc0,
747 0x02, 0xc2, 0x00, 0xba, 0xa8, 0x28, 0xf8, 0xc7,
748 0xea, 0xc0, 0x00, 0x75, 0xd1, 0x49, 0x15, 0xf0,
749 0x19, 0xc7, 0x17, 0xc2, 0xec, 0x9a, 0x00, 0x19,
750 0xee, 0x89, 0xee, 0x71, 0x9f, 0x49, 0xfe, 0xf1,
751 0xea, 0x71, 0x9f, 0x49, 0x0a, 0xf0, 0xd9, 0xc2,
752 0xec, 0x9a, 0x00, 0x19, 0xe8, 0x99, 0x81, 0x19,
753 0xee, 0x89, 0xee, 0x71, 0x9f, 0x49, 0xfe, 0xf1,
754 0x06, 0xc3, 0x02, 0xc2, 0x00, 0xba, 0xf0, 0x1d,
755 0x4c, 0xe8, 0x00, 0xdc, 0x00, 0xd4, 0xcb, 0xc0,
756 0x00, 0x75, 0xd1, 0x49, 0x0d, 0xf0, 0xc4, 0xc0,
757 0xc4, 0xc5, 0x00, 0x1e, 0x08, 0x9e, 0xc2, 0xc6,
758 0x0a, 0x9e, 0x0c, 0x9d, 0x8f, 0x1c, 0x0e, 0x8c,
759 0x0e, 0x74, 0xcf, 0x49, 0xfe, 0xf1, 0x04, 0xc0,
760 0x02, 0xc1, 0x00, 0xb9, 0xc4, 0x16, 0x20, 0xd4,
761 0xb6, 0xc0, 0x00, 0x75, 0xd1, 0x48, 0x00, 0x9d,
762 0xe5, 0xc7, 0xaf, 0xc2, 0xec, 0x9a, 0x00, 0x19,
763 0xe8, 0x9a, 0x81, 0x19, 0xee, 0x89, 0xee, 0x71,
764 0x9f, 0x49, 0xfe, 0xf1, 0x2c, 0xc1, 0xec, 0x99,
765 0x81, 0x19, 0xee, 0x89, 0xee, 0x71, 0x9f, 0x49,
766 0xfe, 0xf1, 0x04, 0xc3, 0x02, 0xc2, 0x00, 0xba,
767 0x96, 0x1c, 0xc0, 0xd4, 0xc0, 0x88, 0x1e, 0xc6,
768 0xc0, 0x70, 0x8f, 0x49, 0x0e, 0xf0, 0x8f, 0x48,
769 0x93, 0xc6, 0xca, 0x98, 0x11, 0x18, 0xc8, 0x98,
770 0x16, 0xc0, 0xcc, 0x98, 0x8f, 0x18, 0xce, 0x88,
771 0xce, 0x70, 0x8f, 0x49, 0xfe, 0xf1, 0x0b, 0xe0,
772 0x43, 0xc6, 0x00, 0x18, 0xc8, 0x98, 0x0b, 0xc0,
773 0xcc, 0x98, 0x81, 0x18, 0xce, 0x88, 0xce, 0x70,
774 0x8f, 0x49, 0xfe, 0xf1, 0x02, 0xc0, 0x00, 0xb8,
775 0xf2, 0x19, 0x40, 0xd3, 0x20, 0xe4, 0x33, 0xc2,
776 0x40, 0x71, 0x91, 0x48, 0x40, 0x99, 0x30, 0xc2,
777 0x00, 0x19, 0x48, 0x99, 0xf8, 0xc1, 0x4c, 0x99,
778 0x81, 0x19, 0x4e, 0x89, 0x4e, 0x71, 0x9f, 0x49,
779 0xfe, 0xf1, 0x0b, 0xc1, 0x4c, 0x99, 0x81, 0x19,
780 0x4e, 0x89, 0x4e, 0x71, 0x9f, 0x49, 0xfe, 0xf1,
781 0x02, 0x71, 0x02, 0xc2, 0x00, 0xba, 0x0e, 0x34,
782 0x24, 0xe4, 0x19, 0xc2, 0x40, 0x71, 0x91, 0x48,
783 0x40, 0x99, 0x16, 0xc2, 0x00, 0x19, 0x48, 0x99,
784 0xde, 0xc1, 0x4c, 0x99, 0x81, 0x19, 0x4e, 0x89,
785 0x4e, 0x71, 0x9f, 0x49, 0xfe, 0xf1, 0xf1, 0xc1,
786 0x4c, 0x99, 0x81, 0x19, 0x4e, 0x89, 0x4e, 0x71,
787 0x9f, 0x49, 0xfe, 0xf1, 0x02, 0x71, 0x02, 0xc2,
788 0x00, 0xba, 0x60, 0x33, 0x34, 0xd3, 0x00, 0xdc,
789 0x1e, 0x89, 0x02, 0xc0, 0x00, 0xb8, 0xfa, 0x12,
790 0x18, 0xc0, 0x00, 0x65, 0xd1, 0x49, 0x0e, 0xf0,
791 0x11, 0xc0, 0x11, 0xc5, 0x00, 0x1e, 0x08, 0x9e,
792 0x0c, 0x9d, 0x0e, 0xc6, 0x0a, 0x9e, 0x8f, 0x1c,
793 0x0e, 0x8c, 0x0e, 0x74, 0xcf, 0x49, 0xfe, 0xf1,
794 0x04, 0xc0, 0x02, 0xc2, 0x00, 0xba, 0xa0, 0x41,
795 0x06, 0xd4, 0x00, 0xdc, 0x24, 0xe4, 0x80, 0x02,
796 0x34, 0xd3, 0x02, 0xc0, 0x00, 0xb8, 0x00, 0x00,
797 0x02, 0xc0, 0x00, 0xb8, 0x00, 0x00, 0x02, 0xc0,
798 0x00, 0xb8, 0x00, 0x00, 0x02, 0xc0, 0x00, 0xb8,
799 0x00, 0x00, 0x02, 0xc0, 0x00, 0xb8, 0x00, 0x00,
800 0x02, 0xc0, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00 };
801
802static u16 r8153b_usb_patch_b_bp[] = {
803 0xfc26, 0xa000, 0xfc28, 0x2a20, 0xfc2a, 0x28a6, 0xfc2c, 0x1dee,
804 0xfc2e, 0x16c2, 0xfc30, 0x1c94, 0xfc32, 0x19f0, 0xfc34, 0x340c,
805 0xfc36, 0x335e, 0xfc38, 0x12f8, 0xfc3a, 0x419e, 0xfc3c, 0x0000,
806 0xfc3e, 0x0000, 0xfc40, 0x0000, 0xfc42, 0x0000, 0xfc44, 0x0000,
807 0xfc46, 0x0000, 0xfc48, 0x03ff };
808
809static u8 pla_patch2_b[] = {
810 0x05, 0xe0, 0x1b, 0xe0, 0x2c, 0xe0, 0x60, 0xe0,
811 0x73, 0xe0, 0x15, 0xc6, 0xc2, 0x64, 0xd2, 0x49,
812 0x06, 0xf1, 0xc4, 0x48, 0xc5, 0x48, 0xc6, 0x48,
813 0xc7, 0x48, 0x05, 0xe0, 0x44, 0x48, 0x45, 0x48,
814 0x46, 0x48, 0x47, 0x48, 0xc2, 0x8c, 0xc0, 0x64,
815 0x46, 0x48, 0xc0, 0x8c, 0x05, 0xc5, 0x02, 0xc4,
816 0x00, 0xbc, 0x18, 0x02, 0x06, 0xdc, 0xb0, 0xc0,
817 0x10, 0xc5, 0xa0, 0x77, 0xa0, 0x74, 0x46, 0x48,
818 0x47, 0x48, 0xa0, 0x9c, 0x0b, 0xc5, 0xa0, 0x74,
819 0x44, 0x48, 0x43, 0x48, 0xa0, 0x9c, 0x05, 0xc5,
820 0xa0, 0x9f, 0x02, 0xc5, 0x00, 0xbd, 0x3c, 0x03,
821 0x1c, 0xe8, 0x20, 0xe8, 0xd4, 0x49, 0x04, 0xf1,
822 0xd5, 0x49, 0x20, 0xf1, 0x28, 0xe0, 0x2a, 0xc7,
823 0xe0, 0x75, 0xda, 0x49, 0x14, 0xf0, 0x27, 0xc7,
824 0xe0, 0x75, 0xdc, 0x49, 0x10, 0xf1, 0x24, 0xc7,
825 0xe0, 0x75, 0x25, 0xc7, 0xe0, 0x74, 0x2c, 0x40,
826 0x0a, 0xfa, 0x1f, 0xc7, 0xe4, 0x75, 0xd0, 0x49,
827 0x09, 0xf1, 0x1c, 0xc5, 0xe6, 0x9d, 0x11, 0x1d,
828 0xe4, 0x8d, 0x04, 0xe0, 0x16, 0xc7, 0x00, 0x1d,
829 0xe4, 0x8d, 0xe0, 0x8e, 0x11, 0x1d, 0xe0, 0x8d,
830 0x07, 0xe0, 0x0c, 0xc7, 0xe0, 0x75, 0xda, 0x48,
831 0xe0, 0x9d, 0x0b, 0xc7, 0xe4, 0x8e, 0x02, 0xc4,
832 0x00, 0xbc, 0x28, 0x03, 0x02, 0xc4, 0x00, 0xbc,
833 0x14, 0x03, 0x12, 0xe8, 0x4e, 0xe8, 0x1c, 0xe6,
834 0x20, 0xe4, 0x80, 0x02, 0xa4, 0xc0, 0x12, 0xc2,
835 0x40, 0x73, 0xb0, 0x49, 0x08, 0xf0, 0xb8, 0x49,
836 0x06, 0xf0, 0xb8, 0x48, 0x40, 0x9b, 0x0b, 0xc2,
837 0x40, 0x76, 0x05, 0xe0, 0x02, 0x61, 0x02, 0xc3,
838 0x00, 0xbb, 0x0a, 0x0a, 0x02, 0xc3, 0x00, 0xbb,
839 0x1a, 0x0a, 0x98, 0xd3, 0x1e, 0xfc, 0xfe, 0xc0,
840 0x02, 0x62, 0xa0, 0x48, 0x02, 0x8a, 0x00, 0x72,
841 0xa0, 0x49, 0x11, 0xf0, 0x13, 0xc1, 0x20, 0x62,
842 0x2e, 0x21, 0x2f, 0x25, 0x00, 0x71, 0x9f, 0x24,
843 0x0a, 0x40, 0x09, 0xf0, 0x00, 0x71, 0x18, 0x48,
844 0xa0, 0x49, 0x03, 0xf1, 0x9f, 0x48, 0x02, 0xe0,
845 0x1f, 0x48, 0x00, 0x99, 0x02, 0xc2, 0x00, 0xba,
846 0xda, 0x0e, 0x08, 0xe9 };
847
848static u16 r8153b_pla_patch_b_bp[] = {
849 0xfc26, 0x8000, 0xfc28, 0x0216, 0xfc2a, 0x0332, 0xfc2c, 0x030c,
850 0xfc2e, 0x0a08, 0xfc30, 0x0ec0, 0xfc32, 0x0000, 0xfc34, 0x0000,
851 0xfc36, 0x0000, 0xfc38, 0x001e };
852
Hayes Wang98e97912020-06-16 17:09:46 +0800853static void rtl_clear_bp(struct r8152 *tp, u16 type)
Ted Chen9b6dbd42016-01-20 14:24:52 +0800854{
Hayes Wang98e97912020-06-16 17:09:46 +0800855 u8 zeros[16] = {0};
Ted Chen9b6dbd42016-01-20 14:24:52 +0800856
Hayes Wang98e97912020-06-16 17:09:46 +0800857 switch (tp->version) {
858 case RTL_VER_01:
859 case RTL_VER_02:
860 case RTL_VER_07:
861 break;
862 case RTL_VER_03:
863 case RTL_VER_04:
864 case RTL_VER_05:
865 case RTL_VER_06:
866 ocp_write_byte(tp, type, PLA_BP_EN, 0);
867 break;
Hayes Wangd215ca22020-06-16 17:09:47 +0800868 case RTL_VER_08:
869 case RTL_VER_09:
Hayes Wang98e97912020-06-16 17:09:46 +0800870 default:
Hayes Wangd215ca22020-06-16 17:09:47 +0800871 if (type == MCU_TYPE_USB) {
872 ocp_write_byte(tp, MCU_TYPE_USB, USB_BP2_EN, 0);
873
874 generic_ocp_write(tp, USB_BP(8), 0xff, sizeof(zeros),
875 zeros, type);
876 } else {
877 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_BP_EN, 0);
878 }
Hayes Wang98e97912020-06-16 17:09:46 +0800879 break;
880 }
Ted Chen9b6dbd42016-01-20 14:24:52 +0800881
Hayes Wang98e97912020-06-16 17:09:46 +0800882 generic_ocp_write(tp, USB_BP(0), 0xff, sizeof(zeros), zeros, type);
Ted Chen9b6dbd42016-01-20 14:24:52 +0800883
Hayes Wang98e97912020-06-16 17:09:46 +0800884 mdelay(6);
885
886 ocp_write_word(tp, type, PLA_BP_BA, 0);
Ted Chen9b6dbd42016-01-20 14:24:52 +0800887}
888
889static void r8152b_set_dq_desc(struct r8152 *tp)
890{
891 u8 data;
892
893 data = ocp_read_byte(tp, MCU_TYPE_USB, 0xd429);
894 data |= 0x80;
895 ocp_write_byte(tp, MCU_TYPE_USB, 0xd429, data);
896 ocp_write_word(tp, MCU_TYPE_USB, 0xc0ce, 0x0210);
897 data = ocp_read_byte(tp, MCU_TYPE_USB, 0xd429);
898 data &= ~0x80;
899 ocp_write_byte(tp, MCU_TYPE_USB, 0xd429, data);
900}
901
902static int r8153_pre_ram_code(struct r8152 *tp, u16 patch_key)
903{
904 u16 data;
905 int i;
906
907 data = ocp_reg_read(tp, 0xb820);
908 data |= 0x0010;
909 ocp_reg_write(tp, 0xb820, data);
910
911 for (i = 0, data = 0; !data && i < 5000; i++) {
912 mdelay(2);
913 data = ocp_reg_read(tp, 0xb800) & 0x0040;
914 }
915
916 sram_write(tp, 0x8146, patch_key);
917 sram_write(tp, 0xb82e, 0x0001);
918
919 return -EBUSY;
920}
921
922static int r8153_post_ram_code(struct r8152 *tp)
923{
924 u16 data;
925
926 sram_write(tp, 0x0000, 0x0000);
927
928 data = ocp_reg_read(tp, 0xb82e);
929 data &= ~0x0001;
930 ocp_reg_write(tp, 0xb82e, data);
931
932 sram_write(tp, 0x8146, 0x0000);
933
934 data = ocp_reg_read(tp, 0xb820);
935 data &= ~0x0010;
936 ocp_reg_write(tp, 0xb820, data);
937
938 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, tp->ocp_base);
939
940 return 0;
941}
942
943static void r8153_wdt1_end(struct r8152 *tp)
944{
945 int i;
946
947 for (i = 0; i < 104; i++) {
948 if (!(ocp_read_byte(tp, MCU_TYPE_USB, 0xe404) & 1))
949 break;
950 mdelay(2);
951 }
952}
953
954void r8152b_firmware(struct r8152 *tp)
955{
956 int i;
957
958 if (tp->version == RTL_VER_01) {
959 int i;
960
961 r8152b_set_dq_desc(tp);
Hayes Wang98e97912020-06-16 17:09:46 +0800962 rtl_clear_bp(tp, MCU_TYPE_PLA);
Ted Chen9b6dbd42016-01-20 14:24:52 +0800963
964 generic_ocp_write(tp, 0xf800, 0x3f,
965 sizeof(r8152b_pla_patch_a),
966 r8152b_pla_patch_a, MCU_TYPE_PLA);
967
968 for (i = 0; i < ARRAY_SIZE(r8152b_pla_patch_a_bp); i += 2)
969 ocp_write_word(tp, MCU_TYPE_PLA,
970 r8152b_pla_patch_a_bp[i],
971 r8152b_pla_patch_a_bp[i+1]);
972
973 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, 0x2000);
974 ocp_write_word(tp, MCU_TYPE_PLA, 0xb092, 0x7070);
975 ocp_write_word(tp, MCU_TYPE_PLA, 0xb098, 0x0600);
976 for (i = 0; i < ARRAY_SIZE(r8152b_ram_code1); i++)
977 ocp_write_word(tp, MCU_TYPE_PLA, 0xb09a,
978 r8152b_ram_code1[i]);
979
980 ocp_write_word(tp, MCU_TYPE_PLA, 0xb098, 0x0200);
981 ocp_write_word(tp, MCU_TYPE_PLA, 0xb092, 0x7030);
982 } else if (tp->version == RTL_VER_02) {
Hayes Wang98e97912020-06-16 17:09:46 +0800983 rtl_clear_bp(tp, MCU_TYPE_PLA);
Ted Chen9b6dbd42016-01-20 14:24:52 +0800984
985 generic_ocp_write(tp, 0xf800, 0xff,
986 sizeof(r8152b_pla_patch_a2),
987 r8152b_pla_patch_a2, MCU_TYPE_PLA);
988
989 for (i = 0; i < ARRAY_SIZE(r8152b_pla_patch_a2_bp);
990 i += 2)
991 ocp_write_word(tp, MCU_TYPE_PLA,
992 r8152b_pla_patch_a2_bp[i],
993 r8152b_pla_patch_a2_bp[i+1]);
994 }
995}
996
997void r8153_firmware(struct r8152 *tp)
998{
999 int i;
1000
1001 if (tp->version == RTL_VER_03) {
Ted Chen9b6dbd42016-01-20 14:24:52 +08001002 r8153_pre_ram_code(tp, 0x7000);
1003
1004 for (i = 0; i < ARRAY_SIZE(r8153_ram_code_a); i += 2)
1005 ocp_write_word(tp, MCU_TYPE_PLA,
1006 r8153_ram_code_a[i],
1007 r8153_ram_code_a[i+1]);
1008
1009 r8153_post_ram_code(tp);
1010 } else if (tp->version == RTL_VER_04) {
1011 r8153_pre_ram_code(tp, 0x7001);
1012
Andre Przywarab86d0fb2016-11-16 00:50:11 +00001013 for (i = 0; i < ARRAY_SIZE(r8153_ram_code_bc); i += 2)
1014 ocp_write_word(tp, MCU_TYPE_PLA,
1015 r8153_ram_code_bc[i],
1016 r8153_ram_code_bc[i+1]);
Ted Chen9b6dbd42016-01-20 14:24:52 +08001017
1018 r8153_post_ram_code(tp);
1019
1020 r8153_wdt1_end(tp);
Hayes Wang98e97912020-06-16 17:09:46 +08001021
1022 rtl_clear_bp(tp, MCU_TYPE_USB);
Ted Chen9b6dbd42016-01-20 14:24:52 +08001023
1024 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x0000);
1025 generic_ocp_write(tp, 0xf800, 0xff,
1026 sizeof(r8153_usb_patch_b),
1027 r8153_usb_patch_b, MCU_TYPE_USB);
1028
1029 for (i = 0; i < ARRAY_SIZE(r8153_usb_patch_b_bp); i += 2)
1030 ocp_write_word(tp, MCU_TYPE_USB,
1031 r8153_usb_patch_b_bp[i],
1032 r8153_usb_patch_b_bp[i+1]);
1033
1034 if (!(ocp_read_word(tp, MCU_TYPE_PLA, 0xd38e) & BIT(0))) {
1035 ocp_write_word(tp, MCU_TYPE_PLA, 0xd38c, 0x0082);
1036 ocp_write_word(tp, MCU_TYPE_PLA, 0xd38e, 0x0082);
1037 }
1038
Hayes Wang98e97912020-06-16 17:09:46 +08001039 rtl_clear_bp(tp, MCU_TYPE_PLA);
1040
Ted Chen9b6dbd42016-01-20 14:24:52 +08001041 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, 0x0000);
1042 generic_ocp_write(tp, 0xf800, 0xff,
1043 sizeof(r8153_pla_patch_b),
1044 r8153_pla_patch_b, MCU_TYPE_PLA);
1045
1046 for (i = 0; i < ARRAY_SIZE(r8153_pla_patch_b_bp); i += 2)
1047 ocp_write_word(tp, MCU_TYPE_PLA,
1048 r8153_pla_patch_b_bp[i],
1049 r8153_pla_patch_b_bp[i+1]);
1050
1051 ocp_write_word(tp, MCU_TYPE_PLA, 0xd388, 0x08ca);
1052 } else if (tp->version == RTL_VER_05) {
1053 u32 ocp_data;
1054
1055 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, 0xcfca);
1056 ocp_data &= ~0x4000;
1057 ocp_write_word(tp, MCU_TYPE_USB, 0xcfca, ocp_data);
1058
1059 r8153_pre_ram_code(tp, 0x7001);
1060
1061 for (i = 0; i < ARRAY_SIZE(r8153_ram_code_bc); i += 2)
1062 ocp_write_word(tp, MCU_TYPE_PLA,
1063 r8153_ram_code_bc[i],
1064 r8153_ram_code_bc[i+1]);
1065
1066 r8153_post_ram_code(tp);
1067
1068 r8153_wdt1_end(tp);
Hayes Wang98e97912020-06-16 17:09:46 +08001069
1070 rtl_clear_bp(tp, MCU_TYPE_USB);
Ted Chen9b6dbd42016-01-20 14:24:52 +08001071
1072 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x0000);
1073 generic_ocp_write(tp, 0xf800, 0xff,
1074 sizeof(r8153_usb_patch_c),
1075 r8153_usb_patch_c, MCU_TYPE_USB);
1076
1077 for (i = 0; i < ARRAY_SIZE(r8153_usb_patch_c_bp); i += 2)
1078 ocp_write_word(tp, MCU_TYPE_USB,
1079 r8153_usb_patch_c_bp[i],
1080 r8153_usb_patch_c_bp[i+1]);
1081
1082 if (ocp_read_byte(tp, MCU_TYPE_USB, 0xcfef) & 1) {
1083 ocp_write_word(tp, MCU_TYPE_USB, 0xfc30, 0x1578);
1084 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x00ff);
1085 } else {
1086 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x00ef);
1087 }
1088
Hayes Wang98e97912020-06-16 17:09:46 +08001089 rtl_clear_bp(tp, MCU_TYPE_PLA);
1090
Ted Chen9b6dbd42016-01-20 14:24:52 +08001091 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, 0x0000);
1092 generic_ocp_write(tp, 0xf800, 0xff,
1093 sizeof(r8153_pla_patch_c),
1094 r8153_pla_patch_c, MCU_TYPE_PLA);
1095
1096 for (i = 0; i < ARRAY_SIZE(r8153_pla_patch_c_bp); i += 2)
1097 ocp_write_word(tp, MCU_TYPE_PLA,
1098 r8153_pla_patch_c_bp[i],
1099 r8153_pla_patch_c_bp[i+1]);
1100
1101 ocp_write_word(tp, MCU_TYPE_PLA, 0xd388, 0x08ca);
1102
Hayes Wanga587d3b2020-06-05 15:23:40 +08001103 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS,
1104 U3P3_CHECK_EN | 4);
1105
Ted Chen9b6dbd42016-01-20 14:24:52 +08001106 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, 0xcfca);
1107 ocp_data |= 0x4000;
1108 ocp_write_word(tp, MCU_TYPE_USB, 0xcfca, ocp_data);
Hayes Wanga587d3b2020-06-05 15:23:40 +08001109
1110 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY);
1111 ocp_data |= USB2PHY_L1 | USB2PHY_SUSPEND;
1112 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data);
Ted Chen9b6dbd42016-01-20 14:24:52 +08001113 } else if (tp->version == RTL_VER_06) {
Hayes Wanga587d3b2020-06-05 15:23:40 +08001114 u32 ocp_data;
1115
Ted Chen9b6dbd42016-01-20 14:24:52 +08001116 r8153_pre_ram_code(tp, 0x7002);
1117
1118 for (i = 0; i < ARRAY_SIZE(r8153_ram_code_d); i += 2)
1119 ocp_write_word(tp, MCU_TYPE_PLA,
1120 r8153_ram_code_d[i],
1121 r8153_ram_code_d[i+1]);
1122
1123 r8153_post_ram_code(tp);
1124
Hayes Wang98e97912020-06-16 17:09:46 +08001125 rtl_clear_bp(tp, MCU_TYPE_USB);
Ted Chen9b6dbd42016-01-20 14:24:52 +08001126
1127 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x0000);
1128 generic_ocp_write(tp, 0xf800, 0xff, sizeof(usb_patch_d),
1129 usb_patch_d, MCU_TYPE_USB);
1130
1131 for (i = 0; i < ARRAY_SIZE(r8153_usb_patch_d_bp); i += 2)
1132 ocp_write_word(tp, MCU_TYPE_USB,
1133 r8153_usb_patch_d_bp[i],
1134 r8153_usb_patch_d_bp[i+1]);
Hayes Wanga587d3b2020-06-05 15:23:40 +08001135
Hayes Wang98e97912020-06-16 17:09:46 +08001136 rtl_clear_bp(tp, MCU_TYPE_PLA);
1137
Hayes Wanga587d3b2020-06-05 15:23:40 +08001138 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, 0x0000);
1139 generic_ocp_write(tp, 0xf800, 0xff, sizeof(pla_patch_d),
1140 pla_patch_d, MCU_TYPE_PLA);
1141
1142 for (i = 0; i < ARRAY_SIZE(r8153_pla_patch_d_bp); i += 2)
1143 ocp_write_word(tp, MCU_TYPE_PLA,
1144 r8153_pla_patch_d_bp[i],
1145 r8153_pla_patch_d_bp[i + 1]);
1146
1147 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY);
1148 ocp_data |= USB2PHY_L1 | USB2PHY_SUSPEND;
1149 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data);
1150
1151 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1);
1152 ocp_data |= FW_IP_RESET_EN;
1153 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, ocp_data);
Ted Chen9b6dbd42016-01-20 14:24:52 +08001154 }
1155}
Hayes Wangd215ca22020-06-16 17:09:47 +08001156
1157void r8153b_firmware(struct r8152 *tp)
1158{
1159 u32 ocp_data;
1160 int i;
1161
1162 if (tp->version != RTL_VER_09)
1163 return;
1164
1165 rtl_clear_bp(tp, MCU_TYPE_USB);
1166
1167 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x0000);
1168 generic_ocp_write(tp, 0xe600, 0xff, sizeof(usb_patch2_b),
1169 usb_patch2_b, MCU_TYPE_USB);
1170
1171 for (i = 0; i < ARRAY_SIZE(r8153b_usb_patch_b_bp); i += 2)
1172 ocp_write_word(tp, MCU_TYPE_USB,
1173 r8153b_usb_patch_b_bp[i],
1174 r8153b_usb_patch_b_bp[i + 1]);
1175
1176 rtl_clear_bp(tp, MCU_TYPE_PLA);
1177
1178 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, 0x0000);
1179 generic_ocp_write(tp, 0xf800, 0xff, sizeof(pla_patch2_b),
1180 pla_patch2_b, MCU_TYPE_PLA);
1181
1182 for (i = 0; i < ARRAY_SIZE(r8153b_pla_patch_b_bp); i += 2)
1183 ocp_write_word(tp, MCU_TYPE_PLA,
1184 r8153b_pla_patch_b_bp[i],
1185 r8153b_pla_patch_b_bp[i + 1]);
1186
1187 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY);
1188 ocp_data |= USB2PHY_L1 | USB2PHY_SUSPEND;
1189 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data);
1190
1191 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1);
1192 ocp_data |= FW_IP_RESET_EN;
1193 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, ocp_data);
1194}