blob: 3159f30106020affb0fe8f00e18c769c123c4988 [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 */
Stefan Roese47c50972016-06-29 07:58:05 +02006#include <dm.h>
Ted Chen9b6dbd42016-01-20 14:24:52 +08007#include <errno.h>
Simon Glass4dcacfc2020-05-10 11:40:13 -06008#include <linux/bitops.h>
Simon Glassdbd79542020-05-10 11:40:11 -06009#include <linux/delay.h>
Stefan Roese47c50972016-06-29 07:58:05 +020010#include "usb_ether.h"
Ted Chen9b6dbd42016-01-20 14:24:52 +080011#include "r8152.h"
12
13static u8 r8152b_pla_patch_a[] = {
14 0x08, 0xe0, 0x40, 0xe0, 0x78, 0xe0, 0x85, 0xe0,
15 0x5d, 0xe1, 0xa1, 0xe1, 0xa3, 0xe1, 0xab, 0xe1,
16 0x31, 0xc3, 0x60, 0x72, 0xa0, 0x49, 0x10, 0xf0,
17 0xa4, 0x49, 0x0e, 0xf0, 0x2c, 0xc3, 0x62, 0x72,
18 0x26, 0x70, 0x80, 0x49, 0x05, 0xf0, 0x2f, 0x48,
19 0x62, 0x9a, 0x24, 0x70, 0x60, 0x98, 0x24, 0xc3,
20 0x60, 0x99, 0x23, 0xc3, 0x00, 0xbb, 0x2c, 0x75,
21 0xdc, 0x21, 0xbc, 0x25, 0x04, 0x13, 0x0a, 0xf0,
22 0x03, 0x13, 0x08, 0xf0, 0x02, 0x13, 0x06, 0xf0,
23 0x01, 0x13, 0x04, 0xf0, 0x08, 0x13, 0x02, 0xf0,
24 0x03, 0xe0, 0xd4, 0x49, 0x04, 0xf1, 0x14, 0xc2,
25 0x12, 0xc3, 0x00, 0xbb, 0x12, 0xc3, 0x60, 0x75,
26 0xd0, 0x49, 0x05, 0xf1, 0x50, 0x48, 0x60, 0x9d,
27 0x09, 0xc6, 0x00, 0xbe, 0xd0, 0x48, 0x60, 0x9d,
28 0xf3, 0xe7, 0xc2, 0xc0, 0x38, 0xd2, 0xc6, 0xd2,
29 0x84, 0x17, 0xa2, 0x13, 0x0c, 0x17, 0xbc, 0xc0,
30 0xa2, 0xd1, 0x33, 0xc5, 0xa0, 0x74, 0xc0, 0x49,
31 0x1f, 0xf0, 0x30, 0xc5, 0xa0, 0x73, 0x00, 0x13,
32 0x04, 0xf1, 0xa2, 0x73, 0x00, 0x13, 0x14, 0xf0,
33 0x28, 0xc5, 0xa0, 0x74, 0xc8, 0x49, 0x1b, 0xf1,
34 0x26, 0xc5, 0xa0, 0x76, 0xa2, 0x74, 0x01, 0x06,
35 0x20, 0x37, 0xa0, 0x9e, 0xa2, 0x9c, 0x1e, 0xc5,
36 0xa2, 0x73, 0x23, 0x40, 0x10, 0xf8, 0x04, 0xf3,
37 0xa0, 0x73, 0x33, 0x40, 0x0c, 0xf8, 0x15, 0xc5,
38 0xa0, 0x74, 0x41, 0x48, 0xa0, 0x9c, 0x14, 0xc5,
39 0xa0, 0x76, 0x62, 0x48, 0xe0, 0x48, 0xa0, 0x9e,
40 0x10, 0xc6, 0x00, 0xbe, 0x0a, 0xc5, 0xa0, 0x74,
41 0x48, 0x48, 0xa0, 0x9c, 0x0b, 0xc5, 0x20, 0x1e,
42 0xa0, 0x9e, 0xe5, 0x48, 0xa0, 0x9e, 0xf0, 0xe7,
43 0xbc, 0xc0, 0xc8, 0xd2, 0xcc, 0xd2, 0x28, 0xe4,
44 0x22, 0x02, 0xf0, 0xc0, 0x0b, 0xc0, 0x00, 0x71,
45 0x0a, 0xc0, 0x00, 0x72, 0xa0, 0x49, 0x04, 0xf0,
46 0xa4, 0x49, 0x02, 0xf0, 0x93, 0x48, 0x04, 0xc0,
47 0x00, 0xb8, 0x00, 0xe4, 0xc2, 0xc0, 0x8c, 0x09,
48 0x14, 0xc2, 0x40, 0x73, 0xba, 0x48, 0x40, 0x9b,
49 0x11, 0xc2, 0x40, 0x73, 0xb0, 0x49, 0x17, 0xf0,
50 0xbf, 0x49, 0x03, 0xf1, 0x09, 0xc5, 0x00, 0xbd,
51 0xb1, 0x49, 0x11, 0xf0, 0xb1, 0x48, 0x40, 0x9b,
52 0x02, 0xc2, 0x00, 0xba, 0x82, 0x18, 0x00, 0xa0,
53 0x1e, 0xfc, 0xbc, 0xc0, 0xf0, 0xc0, 0xde, 0xe8,
54 0x00, 0x80, 0x00, 0x60, 0x2c, 0x75, 0xd4, 0x49,
55 0x12, 0xf1, 0x29, 0xe0, 0xf8, 0xc2, 0x46, 0x71,
56 0xf7, 0xc2, 0x40, 0x73, 0xbe, 0x49, 0x03, 0xf1,
57 0xf5, 0xc7, 0x02, 0xe0, 0xf2, 0xc7, 0x4f, 0x30,
58 0x26, 0x62, 0xa1, 0x49, 0xf0, 0xf1, 0x22, 0x72,
59 0xa0, 0x49, 0xed, 0xf1, 0x25, 0x25, 0x18, 0x1f,
60 0x97, 0x30, 0x91, 0x30, 0x36, 0x9a, 0x2c, 0x75,
61 0x32, 0xc3, 0x60, 0x73, 0xb1, 0x49, 0x0d, 0xf1,
62 0xdc, 0x21, 0xbc, 0x25, 0x27, 0xc6, 0xc0, 0x77,
63 0x04, 0x13, 0x18, 0xf0, 0x03, 0x13, 0x19, 0xf0,
64 0x02, 0x13, 0x1a, 0xf0, 0x01, 0x13, 0x1b, 0xf0,
65 0xd4, 0x49, 0x03, 0xf1, 0x1c, 0xc5, 0x00, 0xbd,
66 0xcd, 0xc6, 0xc6, 0x67, 0x2e, 0x75, 0xd7, 0x22,
67 0xdd, 0x26, 0x05, 0x15, 0x1a, 0xf0, 0x14, 0xc6,
68 0x00, 0xbe, 0x13, 0xc5, 0x00, 0xbd, 0x12, 0xc5,
69 0x00, 0xbd, 0xf1, 0x49, 0xfb, 0xf1, 0xef, 0xe7,
70 0xf4, 0x49, 0xfa, 0xf1, 0xec, 0xe7, 0xf3, 0x49,
71 0xf7, 0xf1, 0xe9, 0xe7, 0xf2, 0x49, 0xf4, 0xf1,
72 0xe6, 0xe7, 0xb6, 0xc0, 0x6a, 0x14, 0xac, 0x13,
73 0xd6, 0x13, 0xfa, 0x14, 0xa0, 0xd1, 0x00, 0x00,
74 0xc0, 0x75, 0xd0, 0x49, 0x46, 0xf0, 0x26, 0x72,
75 0xa7, 0x49, 0x43, 0xf0, 0x22, 0x72, 0x25, 0x25,
76 0x20, 0x1f, 0x97, 0x30, 0x91, 0x30, 0x40, 0x73,
77 0xf3, 0xc4, 0x1c, 0x40, 0x04, 0xf0, 0xd7, 0x49,
78 0x05, 0xf1, 0x37, 0xe0, 0x53, 0x48, 0xc0, 0x9d,
79 0x08, 0x02, 0x40, 0x66, 0x64, 0x27, 0x06, 0x16,
80 0x30, 0xf1, 0x46, 0x63, 0x3b, 0x13, 0x2d, 0xf1,
81 0x34, 0x9b, 0x18, 0x1b, 0x93, 0x30, 0x2b, 0xc3,
82 0x10, 0x1c, 0x2b, 0xe8, 0x01, 0x14, 0x25, 0xf1,
83 0x00, 0x1d, 0x26, 0x1a, 0x8a, 0x30, 0x22, 0x73,
84 0xb5, 0x25, 0x0e, 0x0b, 0x00, 0x1c, 0x2c, 0xe8,
85 0x1f, 0xc7, 0x27, 0x40, 0x1a, 0xf1, 0x38, 0xe8,
86 0x32, 0x1f, 0x8f, 0x30, 0x08, 0x1b, 0x24, 0xe8,
87 0x36, 0x72, 0x46, 0x77, 0x00, 0x17, 0x0d, 0xf0,
88 0x13, 0xc3, 0x1f, 0x40, 0x03, 0xf1, 0x00, 0x1f,
89 0x46, 0x9f, 0x44, 0x77, 0x9f, 0x44, 0x5f, 0x44,
90 0x17, 0xe8, 0x0a, 0xc7, 0x27, 0x40, 0x05, 0xf1,
91 0x02, 0xc3, 0x00, 0xbb, 0x50, 0x1a, 0x06, 0x1a,
92 0xff, 0xc7, 0x00, 0xbf, 0xb8, 0xcd, 0xff, 0xff,
93 0x02, 0x0c, 0x54, 0xa5, 0xdc, 0xa5, 0x2f, 0x40,
94 0x05, 0xf1, 0x00, 0x14, 0xfa, 0xf1, 0x01, 0x1c,
95 0x02, 0xe0, 0x00, 0x1c, 0x80, 0xff, 0xb0, 0x49,
96 0x04, 0xf0, 0x01, 0x0b, 0xd3, 0xa1, 0x03, 0xe0,
97 0x02, 0x0b, 0xd3, 0xa5, 0x27, 0x31, 0x20, 0x37,
98 0x02, 0x0b, 0xd3, 0xa5, 0x27, 0x31, 0x20, 0x37,
99 0x00, 0x13, 0xfb, 0xf1, 0x80, 0xff, 0x22, 0x73,
100 0xb5, 0x25, 0x18, 0x1e, 0xde, 0x30, 0xd9, 0x30,
101 0x64, 0x72, 0x11, 0x1e, 0x68, 0x23, 0x16, 0x31,
102 0x80, 0xff, 0xd4, 0x49, 0x28, 0xf0, 0x02, 0xb4,
103 0x2a, 0xc4, 0x00, 0x1d, 0x2e, 0xe8, 0xe0, 0x73,
104 0xb9, 0x21, 0xbd, 0x25, 0x04, 0x13, 0x02, 0xf0,
105 0x1a, 0xe0, 0x22, 0xc4, 0x23, 0xc3, 0x2f, 0xe8,
106 0x23, 0xc3, 0x2d, 0xe8, 0x00, 0x1d, 0x21, 0xe8,
107 0xe2, 0x73, 0xbb, 0x49, 0xfc, 0xf0, 0xe0, 0x73,
108 0xb7, 0x48, 0x03, 0xb4, 0x81, 0x1d, 0x19, 0xe8,
109 0x40, 0x1a, 0x84, 0x1d, 0x16, 0xe8, 0x12, 0xc3,
110 0x1e, 0xe8, 0x03, 0xb0, 0x81, 0x1d, 0x11, 0xe8,
111 0x0e, 0xc3, 0x19, 0xe8, 0x02, 0xb0, 0x06, 0xc7,
112 0x04, 0x1e, 0xe0, 0x9e, 0x02, 0xc6, 0x00, 0xbe,
113 0x22, 0x02, 0x20, 0xe4, 0x04, 0xb8, 0x34, 0xb0,
114 0x00, 0x02, 0x00, 0x03, 0x00, 0x0e, 0x00, 0x0c,
115 0x09, 0xc7, 0xe0, 0x9b, 0xe2, 0x9a, 0xe4, 0x9c,
116 0xe6, 0x8d, 0xe6, 0x76, 0xef, 0x49, 0xfe, 0xf1,
117 0x80, 0xff, 0x08, 0xea, 0x82, 0x1d, 0xf5, 0xef,
118 0x00, 0x1a, 0x88, 0x1d, 0xf2, 0xef, 0xed, 0xc2,
119 0xf0, 0xef, 0x80, 0xff, 0x02, 0xc6, 0x00, 0xbe,
120 0x46, 0x06, 0x08, 0xc2, 0x40, 0x73, 0x3a, 0x48,
121 0x40, 0x9b, 0x06, 0xff, 0x02, 0xc6, 0x00, 0xbe,
122 0x86, 0x17, 0x1e, 0xfc, 0x36, 0xf0, 0x08, 0x1c,
123 0xea, 0x8c, 0xe3, 0x64, 0xc7, 0x49, 0x25, 0xf1,
124 0xe0, 0x75, 0xff, 0x1b, 0xeb, 0x47, 0xff, 0x1b,
125 0x6b, 0x47, 0xe0, 0x9d, 0x15, 0xc3, 0x60, 0x75,
126 0xd8, 0x49, 0x04, 0xf0, 0x81, 0x1d, 0xe2, 0x8d,
127 0x05, 0xe0, 0xe2, 0x63, 0x81, 0x1d, 0xdd, 0x47,
128 0xe2, 0x8b, 0x0b, 0xc3, 0x00, 0x1d, 0x61, 0x8d,
129 0x3c, 0x03, 0x60, 0x75, 0xd8, 0x49, 0x06, 0xf1,
130 0xdf, 0x48, 0x61, 0x95, 0x16, 0xe0, 0x4e, 0xe8,
131 0x12, 0xe8, 0x21, 0xc5, 0xa0, 0x73, 0xb0, 0x49,
132 0x03, 0xf0, 0x31, 0x48, 0xa0, 0x9b, 0x0d, 0xe0,
133 0xc0, 0x49, 0x0b, 0xf1, 0xe2, 0x63, 0x7e, 0x1d,
134 0xdd, 0x46, 0xe2, 0x8b, 0xe0, 0x75, 0x83, 0x1b,
135 0xeb, 0x46, 0xfe, 0x1b, 0x6b, 0x46, 0xe0, 0x9d,
136 0xe4, 0x49, 0x11, 0xf0, 0x10, 0x1d, 0xea, 0x8d,
137 0xe3, 0x64, 0xc6, 0x49, 0x09, 0xf1, 0x07, 0xc5,
138 0xa0, 0x73, 0xb1, 0x48, 0xa0, 0x9b, 0x02, 0xc5,
139 0x00, 0xbd, 0xe6, 0x04, 0xa0, 0xd1, 0x02, 0xc5,
140 0x00, 0xbd, 0xfe, 0x04, 0x02, 0xc5, 0x00, 0xbd,
141 0x30, 0x05, 0x00, 0x00 };
142
143static u16 r8152b_ram_code1[] = {
144 0x9700, 0x7fe0, 0x4c00, 0x4007, 0x4400, 0x4800, 0x7c1f, 0x4c00,
145 0x5310, 0x6000, 0x7c07, 0x6800, 0x673e, 0x0000, 0x0000, 0x571f,
146 0x5ffb, 0xaa05, 0x5b58, 0x7d80, 0x6100, 0x3019, 0x5b64, 0x7d80,
147 0x6080, 0xa6f8, 0xdcdb, 0x0015, 0xb915, 0xb511, 0xd16b, 0x000f,
148 0xb40f, 0xd06b, 0x000d, 0xb206, 0x7c01, 0x5800, 0x7c04, 0x5c00,
149 0x3011, 0x7c01, 0x5801, 0x7c04, 0x5c04, 0x3019, 0x30a5, 0x3127,
150 0x31d5, 0x7fe0, 0x4c60, 0x7c07, 0x6803, 0x7d00, 0x6900, 0x65a0,
151 0x0000, 0x0000, 0xaf03, 0x6015, 0x303e, 0x6017, 0x57e0, 0x580c,
152 0x588c, 0x7fdd, 0x5fa2, 0x4827, 0x7c1f, 0x4c00, 0x7c1f, 0x4c10,
153 0x8400, 0x7c30, 0x6020, 0x48bf, 0x7c1f, 0x4c00, 0x7c1f, 0x4c01,
154 0x7c07, 0x6803, 0xb806, 0x7c08, 0x6800, 0x0000, 0x0000, 0x305c,
155 0x7c08, 0x6808, 0x0000, 0x0000, 0xae06, 0x7c02, 0x5c02, 0x0000,
156 0x0000, 0x3067, 0x8e05, 0x7c02, 0x5c00, 0x0000, 0x0000, 0xad06,
157 0x7c20, 0x5c20, 0x0000, 0x0000, 0x3072, 0x8d05, 0x7c20, 0x5c00,
158 0x0000, 0x0000, 0xa008, 0x7c07, 0x6800, 0xb8db, 0x7c07, 0x6803,
159 0xd9b3, 0x00d7, 0x7fe0, 0x4c80, 0x7c08, 0x6800, 0x0000, 0x0000,
160 0x7c23, 0x5c23, 0x481d, 0x7c1f, 0x4c00, 0x7c1f, 0x4c02, 0x5310,
161 0x81ff, 0x30f5, 0x7fe0, 0x4d00, 0x4832, 0x7c1f, 0x4c00, 0x7c1f,
162 0x4c10, 0x7c08, 0x6000, 0xa49e, 0x7c07, 0x6800, 0xb89b, 0x7c07,
163 0x6803, 0xd9b3, 0x00f9, 0x7fe0, 0x4d20, 0x7e00, 0x6200, 0x3001,
164 0x7fe0, 0x4dc0, 0xd09d, 0x0002, 0xb4fe, 0x7fe0, 0x4d80, 0x7c04,
165 0x6004, 0x7c07, 0x6802, 0x6728, 0x0000, 0x0000, 0x7c08, 0x6000,
166 0x486c, 0x7c1f, 0x4c00, 0x7c1f, 0x4c01, 0x9503, 0x7e00, 0x6200,
167 0x571f, 0x5fbb, 0xaa05, 0x5b58, 0x7d80, 0x6100, 0x30c2, 0x5b64,
168 0x7d80, 0x6080, 0xcdab, 0x0063, 0xcd8d, 0x0061, 0xd96b, 0x005f,
169 0xd0a0, 0x00d7, 0xcba0, 0x0003, 0x80ec, 0x30cf, 0x30dc, 0x7fe0,
170 0x4ce0, 0x4832, 0x7c1f, 0x4c00, 0x7c1f, 0x4c08, 0x7c08, 0x6008,
171 0x8300, 0xb902, 0x30a5, 0x308a, 0x7fe0, 0x4da0, 0x65a8, 0x0000,
172 0x0000, 0x56a0, 0x590c, 0x7ffd, 0x5fa2, 0xae06, 0x7c02, 0x5c02,
173 0x0000, 0x0000, 0x30f0, 0x8e05, 0x7c02, 0x5c00, 0x0000, 0x0000,
174 0xcba4, 0x0004, 0xcd8d, 0x0002, 0x80f1, 0x7fe0, 0x4ca0, 0x7c08,
175 0x6408, 0x0000, 0x0000, 0x7d00, 0x6800, 0xb603, 0x7c10, 0x6010,
176 0x7d1f, 0x551f, 0x5fb3, 0xaa07, 0x7c80, 0x5800, 0x5b58, 0x7d80,
177 0x6100, 0x310f, 0x7c80, 0x5800, 0x5b64, 0x7d80, 0x6080, 0x4827,
178 0x7c1f, 0x4c00, 0x7c1f, 0x4c10, 0x8400, 0x7c10, 0x6000, 0x7fe0,
179 0x4cc0, 0x5fbb, 0x4824, 0x7c1f, 0x4c00, 0x7c1f, 0x4c04, 0x8200,
180 0x7ce0, 0x5400, 0x6728, 0x0000, 0x0000, 0x30cf, 0x3001, 0x7fe0,
181 0x4e00, 0x4007, 0x4400, 0x5310, 0x7c07, 0x6800, 0x673e, 0x0000,
182 0x0000, 0x570f, 0x5fff, 0xaa05, 0x585b, 0x7d80, 0x6100, 0x313b,
183 0x5867, 0x7d80, 0x6080, 0x9403, 0x7e00, 0x6200, 0xcda3, 0x00e7,
184 0xcd85, 0x00e5, 0xd96b, 0x00e3, 0x96e3, 0x7c07, 0x6800, 0x673e,
185 0x0000, 0x0000, 0x7fe0, 0x4e20, 0x96db, 0x8b04, 0x7c08, 0x5008,
186 0xab03, 0x7c08, 0x5000, 0x7c07, 0x6801, 0x677e, 0x0000, 0x0000,
187 0xdb7c, 0x00ec, 0x0000, 0x7fe1, 0x4f40, 0x4837, 0x4418, 0x41c7,
188 0x7fe0, 0x4e40, 0x7c40, 0x5400, 0x7c1f, 0x4c01, 0x7c1f, 0x4c01,
189 0x8fbf, 0xd2a0, 0x004b, 0x9204, 0xa042, 0x3168, 0x3127, 0x7fe1,
190 0x4f60, 0x489c, 0x4628, 0x7fe0, 0x4e60, 0x7e28, 0x4628, 0x7c40,
191 0x5400, 0x7c01, 0x5800, 0x7c04, 0x5c00, 0x41e8, 0x7c1f, 0x4c01,
192 0x7c1f, 0x4c01, 0x8fa5, 0xb241, 0xa02a, 0x3182, 0x7fe0, 0x4ea0,
193 0x7c02, 0x4402, 0x4448, 0x4894, 0x7c1f, 0x4c01, 0x7c1f, 0x4c03,
194 0x4824, 0x7c1f, 0x4c07, 0x41ef, 0x41ff, 0x4891, 0x7c1f, 0x4c07,
195 0x7c1f, 0x4c17, 0x8400, 0x8ef8, 0x41c7, 0x8f8a, 0x92d5, 0xa10f,
196 0xd480, 0x0008, 0xd580, 0x00b8, 0xa202, 0x319d, 0x7c04, 0x4404,
197 0x319d, 0xd484, 0x00f3, 0xd484, 0x00f1, 0x3127, 0x7fe0, 0x4ee0,
198 0x7c40, 0x5400, 0x4488, 0x41cf, 0x3127, 0x7fe0, 0x4ec0, 0x48f3,
199 0x7c1f, 0x4c01, 0x7c1f, 0x4c09, 0x4508, 0x41c7, 0x8fb0, 0xd218,
200 0x00ae, 0xd2a4, 0x009e, 0x31be, 0x7fe0, 0x4e80, 0x4832, 0x7c1f,
201 0x4c01, 0x7c1f, 0x4c11, 0x4428, 0x7c40, 0x5440, 0x7c01, 0x5801,
202 0x7c04, 0x5c04, 0x41e8, 0xa4b3, 0x31d3, 0x7fe0, 0x4f20, 0x7c07,
203 0x6800, 0x673e, 0x0000, 0x0000, 0x570f, 0x5fff, 0xaa04, 0x585b,
204 0x6100, 0x31e4, 0x5867, 0x6080, 0xbcf1, 0x3001 };
205
206static u16 r8152b_pla_patch_a_bp[] = {
207 0xfc26, 0x8000, 0xfc28, 0x170b, 0xfc2a, 0x01e1, 0xfc2c, 0x0989,
208 0xfc2e, 0x1349, 0xfc30, 0x01b7, 0xfc32, 0x061d, 0xe422, 0x0020,
209 0xe420, 0x0018, 0xfc34, 0x1785, 0xfc36, 0x047b };
210
211static u8 r8152b_pla_patch_a2[] = {
212 0x08, 0xe0, 0x1a, 0xe0, 0xf2, 0xe0, 0xfa, 0xe0,
213 0x32, 0xe1, 0x34, 0xe1, 0x36, 0xe1, 0x38, 0xe1,
214 0x2c, 0x75, 0xdc, 0x21, 0xbc, 0x25, 0x04, 0x13,
215 0x0b, 0xf0, 0x03, 0x13, 0x09, 0xf0, 0x02, 0x13,
216 0x07, 0xf0, 0x01, 0x13, 0x05, 0xf0, 0x08, 0x13,
217 0x03, 0xf0, 0x04, 0xc3, 0x00, 0xbb, 0x03, 0xc3,
218 0x00, 0xbb, 0xd2, 0x17, 0xbc, 0x17, 0x14, 0xc2,
219 0x40, 0x73, 0xba, 0x48, 0x40, 0x9b, 0x11, 0xc2,
220 0x40, 0x73, 0xb0, 0x49, 0x17, 0xf0, 0xbf, 0x49,
221 0x03, 0xf1, 0x09, 0xc5, 0x00, 0xbd, 0xb1, 0x49,
222 0x11, 0xf0, 0xb1, 0x48, 0x40, 0x9b, 0x02, 0xc2,
223 0x00, 0xba, 0x4e, 0x19, 0x00, 0xa0, 0x1e, 0xfc,
224 0xbc, 0xc0, 0xf0, 0xc0, 0xde, 0xe8, 0x00, 0x80,
225 0x00, 0x60, 0x2c, 0x75, 0xd4, 0x49, 0x12, 0xf1,
226 0x29, 0xe0, 0xf8, 0xc2, 0x46, 0x71, 0xf7, 0xc2,
227 0x40, 0x73, 0xbe, 0x49, 0x03, 0xf1, 0xf5, 0xc7,
228 0x02, 0xe0, 0xf2, 0xc7, 0x4f, 0x30, 0x26, 0x62,
229 0xa1, 0x49, 0xf0, 0xf1, 0x22, 0x72, 0xa0, 0x49,
230 0xed, 0xf1, 0x25, 0x25, 0x18, 0x1f, 0x97, 0x30,
231 0x91, 0x30, 0x36, 0x9a, 0x2c, 0x75, 0x32, 0xc3,
232 0x60, 0x73, 0xb1, 0x49, 0x0d, 0xf1, 0xdc, 0x21,
233 0xbc, 0x25, 0x27, 0xc6, 0xc0, 0x77, 0x04, 0x13,
234 0x18, 0xf0, 0x03, 0x13, 0x19, 0xf0, 0x02, 0x13,
235 0x1a, 0xf0, 0x01, 0x13, 0x1b, 0xf0, 0xd4, 0x49,
236 0x03, 0xf1, 0x1c, 0xc5, 0x00, 0xbd, 0xcd, 0xc6,
237 0xc6, 0x67, 0x2e, 0x75, 0xd7, 0x22, 0xdd, 0x26,
238 0x05, 0x15, 0x1a, 0xf0, 0x14, 0xc6, 0x00, 0xbe,
239 0x13, 0xc5, 0x00, 0xbd, 0x12, 0xc5, 0x00, 0xbd,
240 0xf1, 0x49, 0xfb, 0xf1, 0xef, 0xe7, 0xf4, 0x49,
241 0xfa, 0xf1, 0xec, 0xe7, 0xf3, 0x49, 0xf7, 0xf1,
242 0xe9, 0xe7, 0xf2, 0x49, 0xf4, 0xf1, 0xe6, 0xe7,
243 0xb6, 0xc0, 0xf6, 0x14, 0x36, 0x14, 0x62, 0x14,
244 0x86, 0x15, 0xa0, 0xd1, 0x00, 0x00, 0xc0, 0x75,
245 0xd0, 0x49, 0x46, 0xf0, 0x26, 0x72, 0xa7, 0x49,
246 0x43, 0xf0, 0x22, 0x72, 0x25, 0x25, 0x20, 0x1f,
247 0x97, 0x30, 0x91, 0x30, 0x40, 0x73, 0xf3, 0xc4,
248 0x1c, 0x40, 0x04, 0xf0, 0xd7, 0x49, 0x05, 0xf1,
249 0x37, 0xe0, 0x53, 0x48, 0xc0, 0x9d, 0x08, 0x02,
250 0x40, 0x66, 0x64, 0x27, 0x06, 0x16, 0x30, 0xf1,
251 0x46, 0x63, 0x3b, 0x13, 0x2d, 0xf1, 0x34, 0x9b,
252 0x18, 0x1b, 0x93, 0x30, 0x2b, 0xc3, 0x10, 0x1c,
253 0x2b, 0xe8, 0x01, 0x14, 0x25, 0xf1, 0x00, 0x1d,
254 0x26, 0x1a, 0x8a, 0x30, 0x22, 0x73, 0xb5, 0x25,
255 0x0e, 0x0b, 0x00, 0x1c, 0x2c, 0xe8, 0x1f, 0xc7,
256 0x27, 0x40, 0x1a, 0xf1, 0x38, 0xe8, 0x32, 0x1f,
257 0x8f, 0x30, 0x08, 0x1b, 0x24, 0xe8, 0x36, 0x72,
258 0x46, 0x77, 0x00, 0x17, 0x0d, 0xf0, 0x13, 0xc3,
259 0x1f, 0x40, 0x03, 0xf1, 0x00, 0x1f, 0x46, 0x9f,
260 0x44, 0x77, 0x9f, 0x44, 0x5f, 0x44, 0x17, 0xe8,
261 0x0a, 0xc7, 0x27, 0x40, 0x05, 0xf1, 0x02, 0xc3,
262 0x00, 0xbb, 0x1c, 0x1b, 0xd2, 0x1a, 0xff, 0xc7,
263 0x00, 0xbf, 0xb8, 0xcd, 0xff, 0xff, 0x02, 0x0c,
264 0x54, 0xa5, 0xdc, 0xa5, 0x2f, 0x40, 0x05, 0xf1,
265 0x00, 0x14, 0xfa, 0xf1, 0x01, 0x1c, 0x02, 0xe0,
266 0x00, 0x1c, 0x80, 0xff, 0xb0, 0x49, 0x04, 0xf0,
267 0x01, 0x0b, 0xd3, 0xa1, 0x03, 0xe0, 0x02, 0x0b,
268 0xd3, 0xa5, 0x27, 0x31, 0x20, 0x37, 0x02, 0x0b,
269 0xd3, 0xa5, 0x27, 0x31, 0x20, 0x37, 0x00, 0x13,
270 0xfb, 0xf1, 0x80, 0xff, 0x22, 0x73, 0xb5, 0x25,
271 0x18, 0x1e, 0xde, 0x30, 0xd9, 0x30, 0x64, 0x72,
272 0x11, 0x1e, 0x68, 0x23, 0x16, 0x31, 0x80, 0xff,
273 0x08, 0xc2, 0x40, 0x73, 0x3a, 0x48, 0x40, 0x9b,
274 0x06, 0xff, 0x02, 0xc6, 0x00, 0xbe, 0x4e, 0x18,
275 0x1e, 0xfc, 0x33, 0xc5, 0xa0, 0x74, 0xc0, 0x49,
276 0x1f, 0xf0, 0x30, 0xc5, 0xa0, 0x73, 0x00, 0x13,
277 0x04, 0xf1, 0xa2, 0x73, 0x00, 0x13, 0x14, 0xf0,
278 0x28, 0xc5, 0xa0, 0x74, 0xc8, 0x49, 0x1b, 0xf1,
279 0x26, 0xc5, 0xa0, 0x76, 0xa2, 0x74, 0x01, 0x06,
280 0x20, 0x37, 0xa0, 0x9e, 0xa2, 0x9c, 0x1e, 0xc5,
281 0xa2, 0x73, 0x23, 0x40, 0x10, 0xf8, 0x04, 0xf3,
282 0xa0, 0x73, 0x33, 0x40, 0x0c, 0xf8, 0x15, 0xc5,
283 0xa0, 0x74, 0x41, 0x48, 0xa0, 0x9c, 0x14, 0xc5,
284 0xa0, 0x76, 0x62, 0x48, 0xe0, 0x48, 0xa0, 0x9e,
285 0x10, 0xc6, 0x00, 0xbe, 0x0a, 0xc5, 0xa0, 0x74,
286 0x48, 0x48, 0xa0, 0x9c, 0x0b, 0xc5, 0x20, 0x1e,
287 0xa0, 0x9e, 0xe5, 0x48, 0xa0, 0x9e, 0xf0, 0xe7,
288 0xbc, 0xc0, 0xc8, 0xd2, 0xcc, 0xd2, 0x28, 0xe4,
289 0x22, 0x02, 0xf0, 0xc0, 0x02, 0xc6, 0x00, 0xbe,
290 0x00, 0x00, 0x02, 0xc6, 0x00, 0xbe, 0x00, 0x00,
291 0x02, 0xc6, 0x00, 0xbe, 0x00, 0x00, 0x02, 0xc6,
292 0x00, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
293
294static u16 r8152b_pla_patch_a2_bp[] = {
Hayes Wanga587d3b2020-06-05 15:23:40 +0800295 0xfc26, 0x8000, 0xfc28, 0x17a5, 0xfc2a, 0x13ad,
Ted Chen9b6dbd42016-01-20 14:24:52 +0800296 0xfc2c, 0x184d, 0xfc2e, 0x01e1 };
297
298static u16 r8153_ram_code_a[] = {
299 0xE86C, 0xA000, 0xB436, 0xB820, 0xB438, 0x0290, 0xB436, 0xA012,
300 0xB438, 0x0000, 0xB436, 0xA014, 0xB438, 0x2c04, 0xB438, 0x2c18,
301 0xB438, 0x2c45, 0xB438, 0x2c45, 0xB438, 0xd502, 0xB438, 0x8301,
302 0xB438, 0x8306, 0xB438, 0xd500, 0xB438, 0x8208, 0xB438, 0xd501,
303 0xB438, 0xe018, 0xB438, 0x0308, 0xB438, 0x60f2, 0xB438, 0x8404,
304 0xB438, 0x607d, 0xB438, 0xc117, 0xB438, 0x2c16, 0xB438, 0xc116,
305 0xB438, 0x2c16, 0xB438, 0x607d, 0xB438, 0xc117, 0xB438, 0xa404,
306 0xB438, 0xd500, 0xB438, 0x0800, 0xB438, 0xd501, 0xB438, 0x62d2,
307 0xB438, 0x615d, 0xB438, 0xc115, 0xB438, 0xa404, 0xB438, 0xc307,
308 0xB438, 0xd502, 0xB438, 0x8301, 0xB438, 0x8306, 0xB438, 0xd500,
309 0xB438, 0x8208, 0xB438, 0x2c42, 0xB438, 0xc114, 0xB438, 0x8404,
310 0xB438, 0xc317, 0xB438, 0xd701, 0xB438, 0x435d, 0xB438, 0xd500,
311 0xB438, 0xa208, 0xB438, 0xd502, 0xB438, 0xa306, 0xB438, 0xa301,
312 0xB438, 0x2c42, 0xB438, 0x8404, 0xB438, 0x613d, 0xB438, 0xc115,
313 0xB438, 0xc307, 0xB438, 0xd502, 0xB438, 0x8301, 0xB438, 0x8306,
314 0xB438, 0xd500, 0xB438, 0x8208, 0xB438, 0x2c42, 0xB438, 0xc114,
315 0xB438, 0xc317, 0xB438, 0xd701, 0xB438, 0x40dd, 0xB438, 0xd500,
316 0xB438, 0xa208, 0xB438, 0xd502, 0xB438, 0xa306, 0xB438, 0xa301,
317 0xB438, 0xd500, 0xB438, 0xd702, 0xB438, 0x0800, 0xB436, 0xA01A,
318 0xB438, 0x0000, 0xB436, 0xA006, 0xB438, 0x0fff, 0xB436, 0xA004,
319 0xB438, 0x0fff, 0xB436, 0xA002, 0xB438, 0x05a3, 0xB436, 0xA000,
320 0xB438, 0x3591, 0xB436, 0xB820, 0xB438, 0x0210 };
321
322static u8 r8153_usb_patch_c[] = {
Hayes Wanga587d3b2020-06-05 15:23:40 +0800323 0x08, 0xe0, 0x0a, 0xe0, 0x14, 0xe0, 0x58, 0xe0,
324 0x64, 0xe0, 0x79, 0xe0, 0xab, 0xe0, 0xb6, 0xe0,
Ted Chen9b6dbd42016-01-20 14:24:52 +0800325 0x02, 0xc5, 0x00, 0xbd, 0x38, 0x3b, 0xdb, 0x49,
326 0x04, 0xf1, 0x06, 0xc3, 0x00, 0xbb, 0x5a, 0x02,
327 0x05, 0xc4, 0x03, 0xc3, 0x00, 0xbb, 0xa4, 0x04,
Hayes Wanga587d3b2020-06-05 15:23:40 +0800328 0x7e, 0x02, 0x30, 0xd4, 0x65, 0xc6, 0x66, 0x61,
329 0x92, 0x49, 0x12, 0xf1, 0x3e, 0xc0, 0x02, 0x61,
330 0x97, 0x49, 0x05, 0xf0, 0x3c, 0xc0, 0x00, 0x61,
331 0x90, 0x49, 0x0a, 0xf1, 0xca, 0x63, 0xb0, 0x49,
332 0x09, 0xf1, 0xb1, 0x49, 0x05, 0xf0, 0x32, 0xc0,
333 0x00, 0x71, 0x9e, 0x49, 0x03, 0xf1, 0xb0, 0x48,
334 0x05, 0xe0, 0x30, 0x48, 0xda, 0x61, 0x10, 0x48,
335 0xda, 0x89, 0x4a, 0xc6, 0xc0, 0x60, 0x85, 0x49,
336 0x03, 0xf0, 0x31, 0x48, 0x04, 0xe0, 0xb1, 0x48,
337 0xb2, 0x48, 0x0f, 0xe0, 0x30, 0x18, 0x1b, 0xc1,
338 0x0f, 0xe8, 0x1a, 0xc6, 0xc7, 0x65, 0xd0, 0x49,
Ted Chen9b6dbd42016-01-20 14:24:52 +0800339 0x05, 0xf0, 0x32, 0x48, 0x02, 0xc2, 0x00, 0xba,
340 0x3e, 0x16, 0x02, 0xc2, 0x00, 0xba, 0x48, 0x16,
Hayes Wanga587d3b2020-06-05 15:23:40 +0800341 0x02, 0xc2, 0x00, 0xba, 0x4a, 0x16, 0x02, 0xb4,
342 0x09, 0xc2, 0x40, 0x99, 0x0e, 0x48, 0x42, 0x98,
343 0x42, 0x70, 0x8e, 0x49, 0xfe, 0xf1, 0x02, 0xb0,
344 0x80, 0xff, 0xc0, 0xd4, 0xe4, 0x40, 0x20, 0xd4,
345 0xca, 0xcf, 0x00, 0xcf, 0x3c, 0xe4, 0x0c, 0xc0,
346 0x00, 0x63, 0xb5, 0x49, 0x09, 0xc0, 0x30, 0x18,
347 0x06, 0xc1, 0xea, 0xef, 0xf5, 0xc7, 0x02, 0xc0,
348 0x00, 0xb8, 0xd0, 0x10, 0xe4, 0x4b, 0x00, 0xd8,
349 0x14, 0xc3, 0x60, 0x61, 0x90, 0x49, 0x06, 0xf0,
350 0x11, 0xc3, 0x70, 0x61, 0x12, 0x48, 0x70, 0x89,
351 0x08, 0xe0, 0x0a, 0xc6, 0xd4, 0x61, 0x93, 0x48,
352 0xd4, 0x89, 0x02, 0xc1, 0x00, 0xb9, 0x72, 0x17,
353 0x02, 0xc1, 0x00, 0xb9, 0x9c, 0x15, 0x00, 0xd8,
354 0xef, 0xcf, 0x20, 0xd4, 0x30, 0x18, 0xe7, 0xc1,
355 0xcb, 0xef, 0x2b, 0xc5, 0xa0, 0x77, 0x00, 0x1c,
356 0xa0, 0x9c, 0x28, 0xc5, 0xa0, 0x64, 0xc0, 0x48,
357 0xc1, 0x48, 0xc2, 0x48, 0xa0, 0x8c, 0xb1, 0x64,
358 0xc0, 0x48, 0xb1, 0x8c, 0x20, 0xc5, 0xa0, 0x64,
359 0x40, 0x48, 0x41, 0x48, 0xc2, 0x48, 0xa0, 0x8c,
360 0x19, 0xc5, 0xa4, 0x64, 0x44, 0x48, 0xa4, 0x8c,
361 0xb1, 0x64, 0x40, 0x48, 0xb1, 0x8c, 0x14, 0xc4,
362 0x80, 0x73, 0x13, 0xc4, 0x82, 0x9b, 0x11, 0x1b,
363 0x80, 0x9b, 0x0c, 0xc5, 0xa0, 0x64, 0x40, 0x48,
364 0x41, 0x48, 0x42, 0x48, 0xa0, 0x8c, 0x05, 0xc5,
365 0xa0, 0x9f, 0x02, 0xc5, 0x00, 0xbd, 0x6c, 0x3a,
366 0x1e, 0xfc, 0x10, 0xd8, 0x86, 0xd4, 0xf8, 0xcb,
367 0x20, 0xe4, 0x0a, 0xc0, 0x16, 0x61, 0x91, 0x48,
368 0x16, 0x89, 0x07, 0xc0, 0x11, 0x19, 0x0c, 0x89,
369 0x02, 0xc1, 0x00, 0xb9, 0x02, 0x06, 0x00, 0xd4,
370 0x40, 0xb4, 0xfe, 0xc0, 0x16, 0x61, 0x91, 0x48,
371 0x16, 0x89, 0xfb, 0xc0, 0x11, 0x19, 0x0c, 0x89,
372 0x02, 0xc1, 0x00, 0xb9, 0xd2, 0x05, 0x00, 0x00 };
Ted Chen9b6dbd42016-01-20 14:24:52 +0800373
374static u16 r8153_usb_patch_c_bp[] = {
Hayes Wanga587d3b2020-06-05 15:23:40 +0800375 0xfc26, 0xa000, 0xfc28, 0x3b34, 0xfc2a, 0x027c, 0xfc2c, 0x15de,
376 0xfc2e, 0x10ce, 0xfc30, 0x1adc, 0xfc32, 0x3a28, 0xfc34, 0x05f8,
377 0xfc36, 0x05c8, 0xfc38, 0x00f3 };
Ted Chen9b6dbd42016-01-20 14:24:52 +0800378
379static u8 r8153_pla_patch_c[] = {
Hayes Wanga587d3b2020-06-05 15:23:40 +0800380 0x5d, 0xe0, 0x07, 0xe0, 0x0f, 0xe0, 0x5a, 0xe0,
381 0x59, 0xe0, 0x1f, 0xe0, 0x57, 0xe0, 0x3e, 0xe1,
382 0x08, 0xc2, 0x40, 0x73, 0x3a, 0x48, 0x40, 0x9b,
383 0x06, 0xff, 0x02, 0xc6, 0x00, 0xbe, 0xcc, 0x17,
384 0x1e, 0xfc, 0x2c, 0x75, 0xdc, 0x21, 0xbc, 0x25,
385 0x04, 0x13, 0x0b, 0xf0, 0x03, 0x13, 0x09, 0xf0,
386 0x02, 0x13, 0x07, 0xf0, 0x01, 0x13, 0x05, 0xf0,
387 0x08, 0x13, 0x03, 0xf0, 0x04, 0xc3, 0x00, 0xbb,
388 0x03, 0xc3, 0x00, 0xbb, 0x50, 0x17, 0x3a, 0x17,
389 0x33, 0xc5, 0xa0, 0x74, 0xc0, 0x49, 0x1f, 0xf0,
390 0x30, 0xc5, 0xa0, 0x73, 0x00, 0x13, 0x04, 0xf1,
391 0xa2, 0x73, 0x00, 0x13, 0x14, 0xf0, 0x28, 0xc5,
392 0xa0, 0x74, 0xc8, 0x49, 0x1b, 0xf1, 0x26, 0xc5,
393 0xa0, 0x76, 0xa2, 0x74, 0x01, 0x06, 0x20, 0x37,
394 0xa0, 0x9e, 0xa2, 0x9c, 0x1e, 0xc5, 0xa2, 0x73,
395 0x23, 0x40, 0x10, 0xf8, 0x04, 0xf3, 0xa0, 0x73,
396 0x33, 0x40, 0x0c, 0xf8, 0x15, 0xc5, 0xa0, 0x74,
397 0x41, 0x48, 0xa0, 0x9c, 0x14, 0xc5, 0xa0, 0x76,
398 0x62, 0x48, 0xe0, 0x48, 0xa0, 0x9e, 0x10, 0xc6,
399 0x00, 0xbe, 0x0a, 0xc5, 0xa0, 0x74, 0x48, 0x48,
400 0xa0, 0x9c, 0x0b, 0xc5, 0x20, 0x1e, 0xa0, 0x9e,
401 0xe5, 0x48, 0xa0, 0x9e, 0xf0, 0xe7, 0xbc, 0xc0,
402 0xc8, 0xd2, 0xcc, 0xd2, 0x28, 0xe4, 0xfa, 0x01,
403 0xf0, 0xc0, 0x18, 0x89, 0x74, 0xc0, 0xcd, 0xe8,
404 0x80, 0x76, 0x00, 0x1d, 0x6e, 0xc3, 0x66, 0x62,
405 0xa0, 0x49, 0x06, 0xf0, 0x64, 0xc0, 0x02, 0x71,
406 0x60, 0x99, 0x62, 0xc1, 0x03, 0xe0, 0x5f, 0xc0,
407 0x60, 0xc1, 0x02, 0x99, 0x00, 0x61, 0x0f, 0x1b,
408 0x59, 0x41, 0x03, 0x13, 0x18, 0xf1, 0xe4, 0x49,
409 0x20, 0xf1, 0xe5, 0x49, 0x1e, 0xf0, 0x59, 0xc6,
410 0xd0, 0x73, 0xb7, 0x49, 0x08, 0xf0, 0x01, 0x0b,
411 0x80, 0x13, 0x03, 0xf0, 0xd0, 0x8b, 0x03, 0xe0,
412 0x3f, 0x48, 0xd0, 0x9b, 0x51, 0xc0, 0x10, 0x1a,
413 0x84, 0x1b, 0xb1, 0xe8, 0x4b, 0xc2, 0x40, 0x63,
414 0x30, 0x48, 0x0a, 0xe0, 0xe5, 0x49, 0x09, 0xf0,
415 0x47, 0xc0, 0x00, 0x1a, 0x84, 0x1b, 0xa7, 0xe8,
416 0x41, 0xc2, 0x40, 0x63, 0xb0, 0x48, 0x40, 0x8b,
417 0x67, 0x11, 0x3f, 0xf1, 0x69, 0x33, 0x32, 0xc0,
418 0x28, 0x40, 0xd2, 0xf1, 0x33, 0xc0, 0x00, 0x19,
419 0x81, 0x1b, 0x99, 0xe8, 0x30, 0xc0, 0x04, 0x1a,
420 0x84, 0x1b, 0x95, 0xe8, 0x8a, 0xe8, 0xa3, 0x49,
421 0xfe, 0xf0, 0x2a, 0xc0, 0x86, 0xe8, 0xa1, 0x48,
422 0x84, 0x1b, 0x8d, 0xe8, 0x00, 0x1d, 0x69, 0x33,
423 0x00, 0x1e, 0x01, 0x06, 0xff, 0x18, 0x30, 0x40,
424 0xfd, 0xf1, 0x1f, 0xc0, 0x00, 0x76, 0x2e, 0x40,
425 0xf7, 0xf1, 0x21, 0x48, 0x19, 0xc0, 0x84, 0x1b,
426 0x7e, 0xe8, 0x74, 0x08, 0x72, 0xe8, 0xa1, 0x49,
427 0xfd, 0xf0, 0x11, 0xc0, 0x00, 0x1a, 0x84, 0x1b,
428 0x76, 0xe8, 0x6b, 0xe8, 0xa5, 0x49, 0xfe, 0xf0,
429 0x09, 0xc0, 0x01, 0x19, 0x81, 0x1b, 0x6f, 0xe8,
430 0x5a, 0xe0, 0xb8, 0x0b, 0x50, 0xe8, 0x83, 0x00,
431 0x82, 0x00, 0x20, 0xb4, 0x10, 0xd8, 0x84, 0xd4,
432 0x88, 0xd3, 0x10, 0xe0, 0x00, 0xd8, 0x24, 0xd4,
433 0xf9, 0xc0, 0x57, 0xe8, 0x48, 0x33, 0xf3, 0xc0,
434 0x00, 0x61, 0x6a, 0xc0, 0x47, 0x11, 0x03, 0xf0,
435 0x57, 0x11, 0x05, 0xf1, 0x00, 0x61, 0x17, 0x48,
436 0x00, 0x89, 0x41, 0xe0, 0x9c, 0x20, 0x9c, 0x24,
437 0xd0, 0x49, 0x09, 0xf0, 0x04, 0x11, 0x07, 0xf1,
438 0x00, 0x61, 0x97, 0x49, 0x38, 0xf0, 0x97, 0x48,
439 0x00, 0x89, 0x2b, 0xe0, 0x00, 0x11, 0x05, 0xf1,
440 0x00, 0x61, 0x92, 0x48, 0x00, 0x89, 0x2f, 0xe0,
441 0x06, 0x11, 0x05, 0xf1, 0x00, 0x61, 0x11, 0x48,
442 0x00, 0x89, 0x29, 0xe0, 0x05, 0x11, 0x0f, 0xf1,
443 0x00, 0x61, 0x93, 0x49, 0x1a, 0xf1, 0x91, 0x49,
444 0x0a, 0xf0, 0x91, 0x48, 0x00, 0x89, 0x0f, 0xe0,
445 0xc6, 0xc0, 0x00, 0x61, 0x98, 0x20, 0x98, 0x24,
446 0x25, 0x11, 0x80, 0xff, 0xfa, 0xef, 0x17, 0xf1,
447 0x38, 0xc0, 0x1f, 0xe8, 0x95, 0x49, 0x13, 0xf0,
448 0xf4, 0xef, 0x11, 0xf1, 0x31, 0xc0, 0x00, 0x61,
449 0x92, 0x49, 0x0d, 0xf1, 0x12, 0x48, 0x00, 0x89,
450 0x29, 0xc0, 0x00, 0x19, 0x00, 0x89, 0x27, 0xc0,
451 0x01, 0x89, 0x23, 0xc0, 0x0e, 0xe8, 0x12, 0x48,
452 0x81, 0x1b, 0x15, 0xe8, 0xae, 0xc3, 0x66, 0x62,
453 0xa0, 0x49, 0x04, 0xf0, 0x64, 0x71, 0xa3, 0xc0,
454 0x02, 0x99, 0x02, 0xc0, 0x00, 0xb8, 0xd6, 0x07,
455 0x13, 0xc4, 0x84, 0x98, 0x00, 0x1b, 0x86, 0x8b,
456 0x86, 0x73, 0xbf, 0x49, 0xfe, 0xf1, 0x80, 0x71,
457 0x82, 0x72, 0x80, 0xff, 0x09, 0xc4, 0x84, 0x98,
458 0x80, 0x99, 0x82, 0x9a, 0x86, 0x8b, 0x86, 0x73,
459 0xbf, 0x49, 0xfe, 0xf1, 0x80, 0xff, 0x08, 0xea,
460 0x30, 0xd4, 0x10, 0xc0, 0x12, 0xe8, 0x8a, 0xd3,
461 0x00, 0xd8, 0x02, 0xc6, 0x00, 0xbe, 0xe0, 0x08 };
Ted Chen9b6dbd42016-01-20 14:24:52 +0800462
463static u16 r8153_pla_patch_c_bp[] = {
464 0xfc26, 0x8000, 0xfc28, 0x1306, 0xfc2a, 0x17ca, 0xfc2c, 0x171e,
465 0xfc2e, 0x0000, 0xfc30, 0x0000, 0xfc32, 0x01b4, 0xfc34, 0x07d4,
Hayes Wanga587d3b2020-06-05 15:23:40 +0800466 0xfc36, 0x0894, 0xfc38, 0x00e6 };
Ted Chen9b6dbd42016-01-20 14:24:52 +0800467
468static u16 r8153_ram_code_bc[] = {
469 0xB436, 0xB820, 0xB438, 0x0290, 0xB436, 0xA012, 0xB438, 0x0000,
470 0xB436, 0xA014, 0xB438, 0x2c04, 0xB438, 0x2c07, 0xB438, 0x2c0a,
471 0xB438, 0x2c0d, 0xB438, 0xa240, 0xB438, 0xa104, 0xB438, 0x292d,
472 0xB438, 0x8620, 0xB438, 0xa480, 0xB438, 0x2a2c, 0xB438, 0x8480,
473 0xB438, 0xa101, 0xB438, 0x2a36, 0xB438, 0xd056, 0xB438, 0x2223,
474 0xB436, 0xA01A, 0xB438, 0x0000, 0xB436, 0xA006, 0xB438, 0x0222,
475 0xB436, 0xA004, 0xB438, 0x0a35, 0xB436, 0xA002, 0xB438, 0x0a2b,
476 0xB436, 0xA000, 0xB438, 0xf92c, 0xB436, 0xB820, 0xB438, 0x0210 };
477
478static u8 r8153_usb_patch_b[] = {
479 0x08, 0xe0, 0x0f, 0xe0, 0x18, 0xe0, 0x24, 0xe0,
480 0x26, 0xe0, 0x3a, 0xe0, 0x84, 0xe0, 0x9c, 0xe0,
481 0xc2, 0x49, 0x04, 0xf0, 0x02, 0xc0, 0x00, 0xb8,
482 0x14, 0x18, 0x02, 0xc0, 0x00, 0xb8, 0x2e, 0x18,
483 0x06, 0x89, 0x08, 0xc0, 0x0c, 0x61, 0x92, 0x48,
484 0x93, 0x48, 0x0c, 0x89, 0x02, 0xc0, 0x00, 0xb8,
485 0x08, 0x05, 0x40, 0xb4, 0x16, 0x89, 0x6d, 0xc0,
486 0x00, 0x61, 0x95, 0x49, 0x06, 0xf0, 0xfa, 0xc0,
487 0x0c, 0x61, 0x92, 0x48, 0x93, 0x48, 0x0c, 0x89,
488 0x02, 0xc0, 0x00, 0xb8, 0xe2, 0x04, 0x02, 0xc2,
489 0x00, 0xba, 0xec, 0x11, 0x60, 0x60, 0x85, 0x49,
490 0x0d, 0xf1, 0x11, 0xc6, 0xd2, 0x61, 0x91, 0x49,
491 0xfd, 0xf0, 0x74, 0x60, 0x04, 0x48, 0x74, 0x88,
492 0x08, 0xc6, 0x08, 0xc0, 0xc4, 0x98, 0x01, 0x18,
493 0xc0, 0x88, 0x02, 0xc0, 0x00, 0xb8, 0x6e, 0x12,
494 0x04, 0xe4, 0x0d, 0x00, 0x00, 0xd4, 0xd1, 0x49,
495 0x3c, 0xf1, 0xd2, 0x49, 0x16, 0xf1, 0xd3, 0x49,
496 0x18, 0xf1, 0xd4, 0x49, 0x19, 0xf1, 0xd5, 0x49,
497 0x1a, 0xf1, 0xd6, 0x49, 0x1b, 0xf1, 0xd7, 0x49,
498 0x1c, 0xf1, 0xd8, 0x49, 0x1d, 0xf1, 0xd9, 0x49,
499 0x20, 0xf1, 0xda, 0x49, 0x23, 0xf1, 0xdb, 0x49,
500 0x24, 0xf1, 0x02, 0xc4, 0x00, 0xbc, 0x20, 0x04,
501 0xe5, 0x8e, 0x02, 0xc4, 0x00, 0xbc, 0x14, 0x02,
502 0x02, 0xc4, 0x00, 0xbc, 0x16, 0x02, 0x02, 0xc4,
503 0x00, 0xbc, 0x18, 0x02, 0x02, 0xc4, 0x00, 0xbc,
504 0x1a, 0x02, 0x02, 0xc4, 0x00, 0xbc, 0x1c, 0x02,
505 0x02, 0xc4, 0x00, 0xbc, 0x94, 0x02, 0x10, 0xc7,
506 0xe0, 0x8e, 0x02, 0xc4, 0x00, 0xbc, 0x8a, 0x02,
507 0x0b, 0xc7, 0xe4, 0x8e, 0x02, 0xc4, 0x00, 0xbc,
508 0x88, 0x02, 0x02, 0xc4, 0x00, 0xbc, 0x6e, 0x02,
509 0x02, 0xc4, 0x00, 0xbc, 0x5a, 0x02, 0x30, 0xe4,
510 0x0c, 0xc3, 0x60, 0x64, 0xc5, 0x49, 0x04, 0xf1,
511 0x74, 0x64, 0xc4, 0x48, 0x74, 0x8c, 0x06, 0xc3,
512 0x64, 0x8e, 0x02, 0xc4, 0x00, 0xbc, 0x20, 0x04,
513 0x00, 0xd8, 0x00, 0xe4, 0xb2, 0xc0, 0x00, 0x61,
514 0x90, 0x49, 0x09, 0xf1, 0x8b, 0xc6, 0xca, 0x61,
515 0x94, 0x49, 0x0e, 0xf1, 0xf6, 0xc6, 0xda, 0x60,
516 0x81, 0x49, 0x0a, 0xf0, 0x65, 0x60, 0x03, 0x48,
517 0x65, 0x88, 0xef, 0xc6, 0xdc, 0x60, 0x80, 0x48,
518 0xdc, 0x88, 0x05, 0xc6, 0x00, 0xbe, 0x02, 0xc6,
519 0x00, 0xbe, 0x36, 0x13, 0x4c, 0x17, 0x99, 0xc4,
520 0x80, 0x65, 0xd0, 0x49, 0x04, 0xf1, 0xfa, 0x75,
521 0x04, 0xc4, 0x00, 0xbc, 0x03, 0xc4, 0x00, 0xbc,
522 0x9a, 0x00, 0xee, 0x01 };
523
524static u16 r8153_usb_patch_b_bp[] = {
525 0xfc26, 0xa000, 0xfc28, 0x180c, 0xfc2a, 0x0506, 0xfc2c, 0x04E0,
526 0xfc2e, 0x11E4, 0xfc30, 0x125C, 0xfc32, 0x0232, 0xfc34, 0x131E,
527 0xfc36, 0x0098, 0xfc38, 0x00FF };
528
529static u8 r8153_pla_patch_b[] = {
530 0x08, 0xe0, 0xea, 0xe0, 0xf2, 0xe0, 0x04, 0xe1,
Hayes Wanga587d3b2020-06-05 15:23:40 +0800531 0x09, 0xe1, 0x0e, 0xe1, 0x46, 0xe1, 0xf7, 0xe1,
Ted Chen9b6dbd42016-01-20 14:24:52 +0800532 0x14, 0xc2, 0x40, 0x73, 0xba, 0x48, 0x40, 0x9b,
533 0x11, 0xc2, 0x40, 0x73, 0xb0, 0x49, 0x17, 0xf0,
534 0xbf, 0x49, 0x03, 0xf1, 0x09, 0xc5, 0x00, 0xbd,
535 0xb1, 0x49, 0x11, 0xf0, 0xb1, 0x48, 0x40, 0x9b,
536 0x02, 0xc2, 0x00, 0xba, 0x1a, 0x17, 0x00, 0xe0,
537 0x1e, 0xfc, 0xbc, 0xc0, 0xf0, 0xc0, 0xde, 0xe8,
538 0x00, 0x80, 0x00, 0x20, 0x2c, 0x75, 0xd4, 0x49,
539 0x12, 0xf1, 0x32, 0xe0, 0xf8, 0xc2, 0x46, 0x71,
540 0xf7, 0xc2, 0x40, 0x73, 0xbe, 0x49, 0x03, 0xf1,
541 0xf5, 0xc7, 0x02, 0xe0, 0xf2, 0xc7, 0x4f, 0x30,
542 0x26, 0x62, 0xa1, 0x49, 0xf0, 0xf1, 0x22, 0x72,
543 0xa0, 0x49, 0xed, 0xf1, 0x25, 0x25, 0x18, 0x1f,
544 0x97, 0x30, 0x91, 0x30, 0x36, 0x9a, 0x2c, 0x75,
545 0x3c, 0xc3, 0x60, 0x73, 0xb1, 0x49, 0x0d, 0xf1,
546 0xdc, 0x21, 0xbc, 0x25, 0x30, 0xc6, 0xc0, 0x77,
547 0x04, 0x13, 0x21, 0xf0, 0x03, 0x13, 0x22, 0xf0,
548 0x02, 0x13, 0x23, 0xf0, 0x01, 0x13, 0x24, 0xf0,
549 0x08, 0x13, 0x08, 0xf1, 0x2e, 0x73, 0xba, 0x21,
550 0xbd, 0x25, 0x05, 0x13, 0x03, 0xf1, 0x24, 0xc5,
551 0x00, 0xbd, 0xd4, 0x49, 0x03, 0xf1, 0x1c, 0xc5,
552 0x00, 0xbd, 0xc4, 0xc6, 0xc6, 0x67, 0x2e, 0x75,
553 0xd7, 0x22, 0xdd, 0x26, 0x05, 0x15, 0x1b, 0xf0,
554 0x14, 0xc6, 0x00, 0xbe, 0x13, 0xc5, 0x00, 0xbd,
555 0x12, 0xc5, 0x00, 0xbd, 0xf1, 0x49, 0xfb, 0xf1,
556 0xef, 0xe7, 0xf4, 0x49, 0xfa, 0xf1, 0xec, 0xe7,
557 0xf3, 0x49, 0xf7, 0xf1, 0xe9, 0xe7, 0xf2, 0x49,
558 0xf4, 0xf1, 0xe6, 0xe7, 0xb6, 0xc0, 0x9e, 0x12,
559 0xde, 0x11, 0x0a, 0x12, 0x3c, 0x13, 0x00, 0xa0,
560 0xa0, 0xd1, 0x00, 0x00, 0xc0, 0x75, 0xd0, 0x49,
561 0x46, 0xf0, 0x26, 0x72, 0xa7, 0x49, 0x43, 0xf0,
562 0x22, 0x72, 0x25, 0x25, 0x20, 0x1f, 0x97, 0x30,
563 0x91, 0x30, 0x40, 0x73, 0xf3, 0xc4, 0x1c, 0x40,
564 0x04, 0xf0, 0xd7, 0x49, 0x05, 0xf1, 0x37, 0xe0,
565 0x53, 0x48, 0xc0, 0x9d, 0x08, 0x02, 0x40, 0x66,
566 0x64, 0x27, 0x06, 0x16, 0x30, 0xf1, 0x46, 0x63,
567 0x3b, 0x13, 0x2d, 0xf1, 0x34, 0x9b, 0x18, 0x1b,
568 0x93, 0x30, 0x2b, 0xc3, 0x10, 0x1c, 0x2b, 0xe8,
569 0x01, 0x14, 0x25, 0xf1, 0x00, 0x1d, 0x26, 0x1a,
570 0x8a, 0x30, 0x22, 0x73, 0xb5, 0x25, 0x0e, 0x0b,
571 0x00, 0x1c, 0x2c, 0xe8, 0x1f, 0xc7, 0x27, 0x40,
572 0x1a, 0xf1, 0x38, 0xe8, 0x32, 0x1f, 0x8f, 0x30,
573 0x08, 0x1b, 0x24, 0xe8, 0x36, 0x72, 0x46, 0x77,
574 0x00, 0x17, 0x0d, 0xf0, 0x13, 0xc3, 0x1f, 0x40,
575 0x03, 0xf1, 0x00, 0x1f, 0x46, 0x9f, 0x44, 0x77,
576 0x9f, 0x44, 0x5f, 0x44, 0x17, 0xe8, 0x0a, 0xc7,
577 0x27, 0x40, 0x05, 0xf1, 0x02, 0xc3, 0x00, 0xbb,
578 0xfa, 0x18, 0xb0, 0x18, 0xff, 0xc7, 0x00, 0xbf,
579 0xb8, 0xcd, 0xff, 0xff, 0x02, 0x0c, 0x54, 0xa5,
580 0xdc, 0xa5, 0x2f, 0x40, 0x05, 0xf1, 0x00, 0x14,
581 0xfa, 0xf1, 0x01, 0x1c, 0x02, 0xe0, 0x00, 0x1c,
582 0x80, 0xff, 0xb0, 0x49, 0x04, 0xf0, 0x01, 0x0b,
583 0xd3, 0xa1, 0x03, 0xe0, 0x02, 0x0b, 0xd3, 0xa5,
584 0x27, 0x31, 0x20, 0x37, 0x02, 0x0b, 0xd3, 0xa5,
585 0x27, 0x31, 0x20, 0x37, 0x00, 0x13, 0xfb, 0xf1,
586 0x80, 0xff, 0x22, 0x73, 0xb5, 0x25, 0x18, 0x1e,
587 0xde, 0x30, 0xd9, 0x30, 0x64, 0x72, 0x11, 0x1e,
588 0x68, 0x23, 0x16, 0x31, 0x80, 0xff, 0x08, 0xc2,
589 0x40, 0x73, 0x3a, 0x48, 0x40, 0x9b, 0x06, 0xff,
590 0x02, 0xc6, 0x00, 0xbe, 0x08, 0x16, 0x1e, 0xfc,
591 0x2c, 0x75, 0xdc, 0x21, 0xbc, 0x25, 0x04, 0x13,
592 0x0b, 0xf0, 0x03, 0x13, 0x09, 0xf0, 0x02, 0x13,
593 0x07, 0xf0, 0x01, 0x13, 0x05, 0xf0, 0x08, 0x13,
594 0x03, 0xf0, 0x04, 0xc3, 0x00, 0xbb, 0x03, 0xc3,
595 0x00, 0xbb, 0x8c, 0x15, 0x76, 0x15, 0xa0, 0x64,
596 0x40, 0x48, 0xa0, 0x8c, 0x02, 0xc4, 0x00, 0xbc,
597 0x82, 0x00, 0xa0, 0x62, 0x21, 0x48, 0xa0, 0x8a,
598 0x02, 0xc2, 0x00, 0xba, 0x40, 0x03, 0x33, 0xc5,
599 0xa0, 0x74, 0xc0, 0x49, 0x1f, 0xf0, 0x30, 0xc5,
600 0xa0, 0x73, 0x00, 0x13, 0x04, 0xf1, 0xa2, 0x73,
601 0x00, 0x13, 0x14, 0xf0, 0x28, 0xc5, 0xa0, 0x74,
602 0xc8, 0x49, 0x1b, 0xf1, 0x26, 0xc5, 0xa0, 0x76,
603 0xa2, 0x74, 0x01, 0x06, 0x20, 0x37, 0xa0, 0x9e,
604 0xa2, 0x9c, 0x1e, 0xc5, 0xa2, 0x73, 0x23, 0x40,
605 0x10, 0xf8, 0x04, 0xf3, 0xa0, 0x73, 0x33, 0x40,
606 0x0c, 0xf8, 0x15, 0xc5, 0xa0, 0x74, 0x41, 0x48,
607 0xa0, 0x9c, 0x14, 0xc5, 0xa0, 0x76, 0x62, 0x48,
608 0xe0, 0x48, 0xa0, 0x9e, 0x10, 0xc6, 0x00, 0xbe,
609 0x0a, 0xc5, 0xa0, 0x74, 0x48, 0x48, 0xa0, 0x9c,
610 0x0b, 0xc5, 0x20, 0x1e, 0xa0, 0x9e, 0xe5, 0x48,
611 0xa0, 0x9e, 0xf0, 0xe7, 0xbc, 0xc0, 0xc8, 0xd2,
612 0xcc, 0xd2, 0x28, 0xe4, 0xe6, 0x01, 0xf0, 0xc0,
Hayes Wanga587d3b2020-06-05 15:23:40 +0800613 0x18, 0x89, 0x00, 0x1d, 0x3c, 0xc3, 0x64, 0x71,
Ted Chen9b6dbd42016-01-20 14:24:52 +0800614 0x3c, 0xc0, 0x02, 0x99, 0x00, 0x61, 0x67, 0x11,
615 0x3c, 0xf1, 0x69, 0x33, 0x35, 0xc0, 0x28, 0x40,
616 0xf6, 0xf1, 0x34, 0xc0, 0x00, 0x19, 0x81, 0x1b,
Hayes Wanga587d3b2020-06-05 15:23:40 +0800617 0x91, 0xe8, 0x31, 0xc0, 0x04, 0x1a, 0x84, 0x1b,
618 0x8d, 0xe8, 0x82, 0xe8, 0xa3, 0x49, 0xfe, 0xf0,
619 0x2b, 0xc0, 0x7e, 0xe8, 0xa1, 0x48, 0x28, 0xc0,
620 0x84, 0x1b, 0x84, 0xe8, 0x00, 0x1d, 0x69, 0x33,
Ted Chen9b6dbd42016-01-20 14:24:52 +0800621 0x00, 0x1e, 0x01, 0x06, 0xff, 0x18, 0x30, 0x40,
Hayes Wanga587d3b2020-06-05 15:23:40 +0800622 0xfd, 0xf1, 0x19, 0xc0, 0x00, 0x76, 0x2e, 0x40,
Ted Chen9b6dbd42016-01-20 14:24:52 +0800623 0xf7, 0xf1, 0x21, 0x48, 0x19, 0xc0, 0x84, 0x1b,
Hayes Wanga587d3b2020-06-05 15:23:40 +0800624 0x75, 0xe8, 0x10, 0xc0, 0x69, 0xe8, 0xa1, 0x49,
Ted Chen9b6dbd42016-01-20 14:24:52 +0800625 0xfd, 0xf0, 0x11, 0xc0, 0x00, 0x1a, 0x84, 0x1b,
Hayes Wanga587d3b2020-06-05 15:23:40 +0800626 0x6d, 0xe8, 0x62, 0xe8, 0xa5, 0x49, 0xfe, 0xf0,
627 0x09, 0xc0, 0x01, 0x19, 0x81, 0x1b, 0x66, 0xe8,
628 0x54, 0xe0, 0x10, 0xd4, 0x88, 0xd3, 0xb8, 0x0b,
Ted Chen9b6dbd42016-01-20 14:24:52 +0800629 0x50, 0xe8, 0x20, 0xb4, 0x10, 0xd8, 0x84, 0xd4,
Hayes Wanga587d3b2020-06-05 15:23:40 +0800630 0xfd, 0xc0, 0x52, 0xe8, 0x48, 0x33, 0xf9, 0xc0,
631 0x00, 0x61, 0x9c, 0x20, 0x9c, 0x24, 0xd0, 0x49,
632 0x04, 0xf0, 0x04, 0x11, 0x02, 0xf1, 0x03, 0xe0,
633 0x00, 0x11, 0x06, 0xf1, 0x5c, 0xc0, 0x00, 0x61,
634 0x92, 0x48, 0x00, 0x89, 0x3a, 0xe0, 0x06, 0x11,
635 0x06, 0xf1, 0x55, 0xc0, 0x00, 0x61, 0x11, 0x48,
636 0x00, 0x89, 0x33, 0xe0, 0x05, 0x11, 0x08, 0xf1,
637 0x4e, 0xc0, 0x00, 0x61, 0x91, 0x49, 0x04, 0xf0,
638 0x91, 0x48, 0x00, 0x89, 0x11, 0xe0, 0xd9, 0xc0,
639 0x00, 0x61, 0x98, 0x20, 0x98, 0x24, 0x25, 0x11,
640 0x24, 0xf1, 0x44, 0xc0, 0x29, 0xe8, 0x95, 0x49,
641 0x20, 0xf0, 0xcf, 0xc0, 0x00, 0x61, 0x98, 0x20,
642 0x98, 0x24, 0x25, 0x11, 0x1a, 0xf1, 0x37, 0xc0,
643 0x00, 0x61, 0x92, 0x49, 0x16, 0xf1, 0x12, 0x48,
644 0x00, 0x89, 0x2f, 0xc0, 0x00, 0x19, 0x00, 0x89,
645 0x2d, 0xc0, 0x01, 0x89, 0x2d, 0xc0, 0x04, 0x19,
646 0x81, 0x1b, 0x1c, 0xe8, 0x2a, 0xc0, 0x14, 0x19,
647 0x81, 0x1b, 0x18, 0xe8, 0x21, 0xc0, 0x0c, 0xe8,
648 0x1f, 0xc0, 0x12, 0x48, 0x81, 0x1b, 0x12, 0xe8,
649 0xae, 0xc3, 0x66, 0x71, 0xae, 0xc0, 0x02, 0x99,
650 0x02, 0xc0, 0x00, 0xb8, 0x96, 0x07, 0x13, 0xc4,
651 0x84, 0x98, 0x00, 0x1b, 0x86, 0x8b, 0x86, 0x73,
652 0xbf, 0x49, 0xfe, 0xf1, 0x80, 0x71, 0x82, 0x72,
653 0x80, 0xff, 0x09, 0xc4, 0x84, 0x98, 0x80, 0x99,
654 0x82, 0x9a, 0x86, 0x8b, 0x86, 0x73, 0xbf, 0x49,
655 0xfe, 0xf1, 0x80, 0xff, 0x08, 0xea, 0x30, 0xd4,
Ted Chen9b6dbd42016-01-20 14:24:52 +0800656 0x10, 0xc0, 0x12, 0xe8, 0x8a, 0xd3, 0x28, 0xe4,
Hayes Wanga587d3b2020-06-05 15:23:40 +0800657 0x2c, 0xe4, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x00 };
Ted Chen9b6dbd42016-01-20 14:24:52 +0800658
659static u16 r8153_pla_patch_b_bp[] = {
660 0xfc26, 0x8000, 0xfc28, 0x1154, 0xfc2a, 0x1606, 0xfc2c, 0x155a,
661 0xfc2e, 0x0080, 0xfc30, 0x033c, 0xfc32, 0x01a0, 0xfc34, 0x0794,
662 0xfc36, 0x0000, 0xfc38, 0x007f };
663
664static u16 r8153_ram_code_d[] = {
Hayes Wanga587d3b2020-06-05 15:23:40 +0800665 0xB436, 0xB820, 0xB438, 0x0290, 0xB436, 0xA012, 0xB438, 0x0000,
666 0xB436, 0xA014, 0xB438, 0x2c04, 0xB438, 0x2c07, 0xB438, 0x2c07,
667 0xB438, 0x2c07, 0xB438, 0xa240, 0xB438, 0xa104, 0xB438, 0x2944,
668 0xB436, 0xA01A, 0xB438, 0x0000, 0xB436, 0xA006, 0xB438, 0x0fff,
669 0xB436, 0xA004, 0xB438, 0x0fff, 0xB436, 0xA002, 0xB438, 0x0fff,
670 0xB436, 0xA000, 0xB438, 0x1943, 0xB436, 0xB820, 0xB438, 0x0210 };
Ted Chen9b6dbd42016-01-20 14:24:52 +0800671
672static u8 usb_patch_d[] = {
Hayes Wanga587d3b2020-06-05 15:23:40 +0800673 0x08, 0xe0, 0x0e, 0xe0, 0x11, 0xe0, 0x24, 0xe0,
674 0x2b, 0xe0, 0x33, 0xe0, 0x3a, 0xe0, 0x3c, 0xe0,
675 0x1e, 0xc3, 0x70, 0x61, 0x12, 0x48, 0x70, 0x89,
676 0x02, 0xc3, 0x00, 0xbb, 0x02, 0x17, 0x32, 0x19,
677 0x02, 0xc3, 0x00, 0xbb, 0x44, 0x14, 0x30, 0x18,
678 0x11, 0xc1, 0x05, 0xe8, 0x10, 0xc6, 0x02, 0xc2,
679 0x00, 0xba, 0x94, 0x17, 0x02, 0xb4, 0x09, 0xc2,
680 0x40, 0x99, 0x0e, 0x48, 0x42, 0x98, 0x42, 0x70,
681 0x8e, 0x49, 0xfe, 0xf1, 0x02, 0xb0, 0x80, 0xff,
682 0xc0, 0xd4, 0xe4, 0x40, 0x20, 0xd4, 0x30, 0x18,
683 0x06, 0xc1, 0xf1, 0xef, 0xfc, 0xc7, 0x02, 0xc0,
684 0x00, 0xb8, 0x38, 0x12, 0xe4, 0x4b, 0x0c, 0x61,
685 0x92, 0x48, 0x93, 0x48, 0x95, 0x48, 0x96, 0x48,
686 0x0c, 0x89, 0x02, 0xc0, 0x00, 0xb8, 0x0e, 0x06,
687 0x30, 0x18, 0xf5, 0xc1, 0xe0, 0xef, 0x04, 0xc5,
688 0x02, 0xc4, 0x00, 0xbc, 0x76, 0x3c, 0x1e, 0xfc,
689 0x02, 0xc6, 0x00, 0xbe, 0x00, 0x00, 0x02, 0xc6,
690 0x00, 0xbe, 0x00, 0x00 };
Ted Chen9b6dbd42016-01-20 14:24:52 +0800691
692static u16 r8153_usb_patch_d_bp[] = {
Hayes Wanga587d3b2020-06-05 15:23:40 +0800693 0xfc26, 0xa000, 0xfc28, 0x16de, 0xfc2a, 0x1442, 0xfc2c, 0x1792,
694 0xfc2e, 0x1236, 0xfc30, 0x0606, 0xfc32, 0x3c74, 0xfc34, 0x0000,
695 0xfc36, 0x0000, 0xfc38, 0x003e };
696
697static u8 pla_patch_d[] = {
698 0x03, 0xe0, 0x16, 0xe0, 0x30, 0xe0, 0x12, 0xc2,
699 0x40, 0x73, 0xb0, 0x49, 0x08, 0xf0, 0xb8, 0x49,
700 0x06, 0xf0, 0xb8, 0x48, 0x40, 0x9b, 0x0b, 0xc2,
701 0x40, 0x76, 0x05, 0xe0, 0x02, 0x61, 0x02, 0xc3,
702 0x00, 0xbb, 0x54, 0x08, 0x02, 0xc3, 0x00, 0xbb,
703 0x64, 0x08, 0x98, 0xd3, 0x1e, 0xfc, 0xfe, 0xc0,
704 0x02, 0x62, 0xa0, 0x48, 0x02, 0x8a, 0x00, 0x72,
705 0xa0, 0x49, 0x11, 0xf0, 0x13, 0xc1, 0x20, 0x62,
706 0x2e, 0x21, 0x2f, 0x25, 0x00, 0x71, 0x9f, 0x24,
707 0x0a, 0x40, 0x09, 0xf0, 0x00, 0x71, 0x18, 0x48,
708 0xa0, 0x49, 0x03, 0xf1, 0x9f, 0x48, 0x02, 0xe0,
709 0x1f, 0x48, 0x00, 0x99, 0x02, 0xc2, 0x00, 0xba,
710 0xac, 0x0c, 0x08, 0xe9, 0x36, 0xc0, 0x00, 0x61,
711 0x9c, 0x20, 0x9c, 0x24, 0x33, 0xc0, 0x07, 0x11,
712 0x05, 0xf1, 0x00, 0x61, 0x17, 0x48, 0x00, 0x89,
713 0x0d, 0xe0, 0x04, 0x11, 0x0b, 0xf1, 0x00, 0x61,
714 0x97, 0x49, 0x08, 0xf0, 0x97, 0x48, 0x00, 0x89,
715 0x23, 0xc0, 0x0e, 0xe8, 0x12, 0x48, 0x81, 0x1b,
716 0x15, 0xe8, 0x1f, 0xc0, 0x00, 0x61, 0x67, 0x11,
717 0x04, 0xf0, 0x02, 0xc0, 0x00, 0xb8, 0x42, 0x09,
718 0x02, 0xc0, 0x00, 0xb8, 0x90, 0x08, 0x13, 0xc4,
719 0x84, 0x98, 0x00, 0x1b, 0x86, 0x8b, 0x86, 0x73,
720 0xbf, 0x49, 0xfe, 0xf1, 0x80, 0x71, 0x82, 0x72,
721 0x80, 0xff, 0x09, 0xc4, 0x84, 0x98, 0x80, 0x99,
722 0x82, 0x9a, 0x86, 0x8b, 0x86, 0x73, 0xbf, 0x49,
723 0xfe, 0xf1, 0x80, 0xff, 0x08, 0xea, 0x30, 0xd4,
724 0x50, 0xe8, 0x8a, 0xd3 };
725
726static u16 r8153_pla_patch_d_bp[] = {
727 0xfc26, 0x8000, 0xfc28, 0x0852, 0xfc2a, 0x0c92, 0xfc2c, 0x088c,
728 0xfc2e, 0x0000, 0xfc30, 0x0000, 0xfc32, 0x0000, 0xfc34, 0x0000,
729 0xfc36, 0x0000, 0xfc38, 0x0007 };
Ted Chen9b6dbd42016-01-20 14:24:52 +0800730
Hayes Wangd215ca22020-06-16 17:09:47 +0800731static u8 usb_patch2_b[] = {
732 0x10, 0xe0, 0x26, 0xe0, 0x3a, 0xe0, 0x58, 0xe0,
733 0x6c, 0xe0, 0x85, 0xe0, 0xa5, 0xe0, 0xbe, 0xe0,
734 0xd8, 0xe0, 0xdb, 0xe0, 0xf3, 0xe0, 0xf5, 0xe0,
735 0xf7, 0xe0, 0xf9, 0xe0, 0xfb, 0xe0, 0xfd, 0xe0,
736 0x16, 0xc0, 0x00, 0x75, 0xd1, 0x49, 0x0d, 0xf0,
737 0x0f, 0xc0, 0x0f, 0xc5, 0x00, 0x1e, 0x08, 0x9e,
738 0x0c, 0x9d, 0x0c, 0xc6, 0x0a, 0x9e, 0x8f, 0x1c,
739 0x0e, 0x8c, 0x0e, 0x74, 0xcf, 0x49, 0xfe, 0xf1,
740 0x02, 0xc0, 0x00, 0xb8, 0x96, 0x31, 0x00, 0xdc,
741 0x24, 0xe4, 0x80, 0x02, 0x34, 0xd3, 0xff, 0xc3,
742 0x60, 0x72, 0xa1, 0x49, 0x0d, 0xf0, 0xf8, 0xc3,
743 0xf8, 0xc2, 0x00, 0x1c, 0x68, 0x9c, 0xf6, 0xc4,
744 0x6a, 0x9c, 0x6c, 0x9a, 0x8f, 0x1c, 0x6e, 0x8c,
745 0x6e, 0x74, 0xcf, 0x49, 0xfe, 0xf1, 0x04, 0xc0,
746 0x02, 0xc2, 0x00, 0xba, 0xa8, 0x28, 0xf8, 0xc7,
747 0xea, 0xc0, 0x00, 0x75, 0xd1, 0x49, 0x15, 0xf0,
748 0x19, 0xc7, 0x17, 0xc2, 0xec, 0x9a, 0x00, 0x19,
749 0xee, 0x89, 0xee, 0x71, 0x9f, 0x49, 0xfe, 0xf1,
750 0xea, 0x71, 0x9f, 0x49, 0x0a, 0xf0, 0xd9, 0xc2,
751 0xec, 0x9a, 0x00, 0x19, 0xe8, 0x99, 0x81, 0x19,
752 0xee, 0x89, 0xee, 0x71, 0x9f, 0x49, 0xfe, 0xf1,
753 0x06, 0xc3, 0x02, 0xc2, 0x00, 0xba, 0xf0, 0x1d,
754 0x4c, 0xe8, 0x00, 0xdc, 0x00, 0xd4, 0xcb, 0xc0,
755 0x00, 0x75, 0xd1, 0x49, 0x0d, 0xf0, 0xc4, 0xc0,
756 0xc4, 0xc5, 0x00, 0x1e, 0x08, 0x9e, 0xc2, 0xc6,
757 0x0a, 0x9e, 0x0c, 0x9d, 0x8f, 0x1c, 0x0e, 0x8c,
758 0x0e, 0x74, 0xcf, 0x49, 0xfe, 0xf1, 0x04, 0xc0,
759 0x02, 0xc1, 0x00, 0xb9, 0xc4, 0x16, 0x20, 0xd4,
760 0xb6, 0xc0, 0x00, 0x75, 0xd1, 0x48, 0x00, 0x9d,
761 0xe5, 0xc7, 0xaf, 0xc2, 0xec, 0x9a, 0x00, 0x19,
762 0xe8, 0x9a, 0x81, 0x19, 0xee, 0x89, 0xee, 0x71,
763 0x9f, 0x49, 0xfe, 0xf1, 0x2c, 0xc1, 0xec, 0x99,
764 0x81, 0x19, 0xee, 0x89, 0xee, 0x71, 0x9f, 0x49,
765 0xfe, 0xf1, 0x04, 0xc3, 0x02, 0xc2, 0x00, 0xba,
766 0x96, 0x1c, 0xc0, 0xd4, 0xc0, 0x88, 0x1e, 0xc6,
767 0xc0, 0x70, 0x8f, 0x49, 0x0e, 0xf0, 0x8f, 0x48,
768 0x93, 0xc6, 0xca, 0x98, 0x11, 0x18, 0xc8, 0x98,
769 0x16, 0xc0, 0xcc, 0x98, 0x8f, 0x18, 0xce, 0x88,
770 0xce, 0x70, 0x8f, 0x49, 0xfe, 0xf1, 0x0b, 0xe0,
771 0x43, 0xc6, 0x00, 0x18, 0xc8, 0x98, 0x0b, 0xc0,
772 0xcc, 0x98, 0x81, 0x18, 0xce, 0x88, 0xce, 0x70,
773 0x8f, 0x49, 0xfe, 0xf1, 0x02, 0xc0, 0x00, 0xb8,
774 0xf2, 0x19, 0x40, 0xd3, 0x20, 0xe4, 0x33, 0xc2,
775 0x40, 0x71, 0x91, 0x48, 0x40, 0x99, 0x30, 0xc2,
776 0x00, 0x19, 0x48, 0x99, 0xf8, 0xc1, 0x4c, 0x99,
777 0x81, 0x19, 0x4e, 0x89, 0x4e, 0x71, 0x9f, 0x49,
778 0xfe, 0xf1, 0x0b, 0xc1, 0x4c, 0x99, 0x81, 0x19,
779 0x4e, 0x89, 0x4e, 0x71, 0x9f, 0x49, 0xfe, 0xf1,
780 0x02, 0x71, 0x02, 0xc2, 0x00, 0xba, 0x0e, 0x34,
781 0x24, 0xe4, 0x19, 0xc2, 0x40, 0x71, 0x91, 0x48,
782 0x40, 0x99, 0x16, 0xc2, 0x00, 0x19, 0x48, 0x99,
783 0xde, 0xc1, 0x4c, 0x99, 0x81, 0x19, 0x4e, 0x89,
784 0x4e, 0x71, 0x9f, 0x49, 0xfe, 0xf1, 0xf1, 0xc1,
785 0x4c, 0x99, 0x81, 0x19, 0x4e, 0x89, 0x4e, 0x71,
786 0x9f, 0x49, 0xfe, 0xf1, 0x02, 0x71, 0x02, 0xc2,
787 0x00, 0xba, 0x60, 0x33, 0x34, 0xd3, 0x00, 0xdc,
788 0x1e, 0x89, 0x02, 0xc0, 0x00, 0xb8, 0xfa, 0x12,
789 0x18, 0xc0, 0x00, 0x65, 0xd1, 0x49, 0x0e, 0xf0,
790 0x11, 0xc0, 0x11, 0xc5, 0x00, 0x1e, 0x08, 0x9e,
791 0x0c, 0x9d, 0x0e, 0xc6, 0x0a, 0x9e, 0x8f, 0x1c,
792 0x0e, 0x8c, 0x0e, 0x74, 0xcf, 0x49, 0xfe, 0xf1,
793 0x04, 0xc0, 0x02, 0xc2, 0x00, 0xba, 0xa0, 0x41,
794 0x06, 0xd4, 0x00, 0xdc, 0x24, 0xe4, 0x80, 0x02,
795 0x34, 0xd3, 0x02, 0xc0, 0x00, 0xb8, 0x00, 0x00,
796 0x02, 0xc0, 0x00, 0xb8, 0x00, 0x00, 0x02, 0xc0,
797 0x00, 0xb8, 0x00, 0x00, 0x02, 0xc0, 0x00, 0xb8,
798 0x00, 0x00, 0x02, 0xc0, 0x00, 0xb8, 0x00, 0x00,
799 0x02, 0xc0, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00 };
800
801static u16 r8153b_usb_patch_b_bp[] = {
802 0xfc26, 0xa000, 0xfc28, 0x2a20, 0xfc2a, 0x28a6, 0xfc2c, 0x1dee,
803 0xfc2e, 0x16c2, 0xfc30, 0x1c94, 0xfc32, 0x19f0, 0xfc34, 0x340c,
804 0xfc36, 0x335e, 0xfc38, 0x12f8, 0xfc3a, 0x419e, 0xfc3c, 0x0000,
805 0xfc3e, 0x0000, 0xfc40, 0x0000, 0xfc42, 0x0000, 0xfc44, 0x0000,
806 0xfc46, 0x0000, 0xfc48, 0x03ff };
807
808static u8 pla_patch2_b[] = {
809 0x05, 0xe0, 0x1b, 0xe0, 0x2c, 0xe0, 0x60, 0xe0,
810 0x73, 0xe0, 0x15, 0xc6, 0xc2, 0x64, 0xd2, 0x49,
811 0x06, 0xf1, 0xc4, 0x48, 0xc5, 0x48, 0xc6, 0x48,
812 0xc7, 0x48, 0x05, 0xe0, 0x44, 0x48, 0x45, 0x48,
813 0x46, 0x48, 0x47, 0x48, 0xc2, 0x8c, 0xc0, 0x64,
814 0x46, 0x48, 0xc0, 0x8c, 0x05, 0xc5, 0x02, 0xc4,
815 0x00, 0xbc, 0x18, 0x02, 0x06, 0xdc, 0xb0, 0xc0,
816 0x10, 0xc5, 0xa0, 0x77, 0xa0, 0x74, 0x46, 0x48,
817 0x47, 0x48, 0xa0, 0x9c, 0x0b, 0xc5, 0xa0, 0x74,
818 0x44, 0x48, 0x43, 0x48, 0xa0, 0x9c, 0x05, 0xc5,
819 0xa0, 0x9f, 0x02, 0xc5, 0x00, 0xbd, 0x3c, 0x03,
820 0x1c, 0xe8, 0x20, 0xe8, 0xd4, 0x49, 0x04, 0xf1,
821 0xd5, 0x49, 0x20, 0xf1, 0x28, 0xe0, 0x2a, 0xc7,
822 0xe0, 0x75, 0xda, 0x49, 0x14, 0xf0, 0x27, 0xc7,
823 0xe0, 0x75, 0xdc, 0x49, 0x10, 0xf1, 0x24, 0xc7,
824 0xe0, 0x75, 0x25, 0xc7, 0xe0, 0x74, 0x2c, 0x40,
825 0x0a, 0xfa, 0x1f, 0xc7, 0xe4, 0x75, 0xd0, 0x49,
826 0x09, 0xf1, 0x1c, 0xc5, 0xe6, 0x9d, 0x11, 0x1d,
827 0xe4, 0x8d, 0x04, 0xe0, 0x16, 0xc7, 0x00, 0x1d,
828 0xe4, 0x8d, 0xe0, 0x8e, 0x11, 0x1d, 0xe0, 0x8d,
829 0x07, 0xe0, 0x0c, 0xc7, 0xe0, 0x75, 0xda, 0x48,
830 0xe0, 0x9d, 0x0b, 0xc7, 0xe4, 0x8e, 0x02, 0xc4,
831 0x00, 0xbc, 0x28, 0x03, 0x02, 0xc4, 0x00, 0xbc,
832 0x14, 0x03, 0x12, 0xe8, 0x4e, 0xe8, 0x1c, 0xe6,
833 0x20, 0xe4, 0x80, 0x02, 0xa4, 0xc0, 0x12, 0xc2,
834 0x40, 0x73, 0xb0, 0x49, 0x08, 0xf0, 0xb8, 0x49,
835 0x06, 0xf0, 0xb8, 0x48, 0x40, 0x9b, 0x0b, 0xc2,
836 0x40, 0x76, 0x05, 0xe0, 0x02, 0x61, 0x02, 0xc3,
837 0x00, 0xbb, 0x0a, 0x0a, 0x02, 0xc3, 0x00, 0xbb,
838 0x1a, 0x0a, 0x98, 0xd3, 0x1e, 0xfc, 0xfe, 0xc0,
839 0x02, 0x62, 0xa0, 0x48, 0x02, 0x8a, 0x00, 0x72,
840 0xa0, 0x49, 0x11, 0xf0, 0x13, 0xc1, 0x20, 0x62,
841 0x2e, 0x21, 0x2f, 0x25, 0x00, 0x71, 0x9f, 0x24,
842 0x0a, 0x40, 0x09, 0xf0, 0x00, 0x71, 0x18, 0x48,
843 0xa0, 0x49, 0x03, 0xf1, 0x9f, 0x48, 0x02, 0xe0,
844 0x1f, 0x48, 0x00, 0x99, 0x02, 0xc2, 0x00, 0xba,
845 0xda, 0x0e, 0x08, 0xe9 };
846
847static u16 r8153b_pla_patch_b_bp[] = {
848 0xfc26, 0x8000, 0xfc28, 0x0216, 0xfc2a, 0x0332, 0xfc2c, 0x030c,
849 0xfc2e, 0x0a08, 0xfc30, 0x0ec0, 0xfc32, 0x0000, 0xfc34, 0x0000,
850 0xfc36, 0x0000, 0xfc38, 0x001e };
851
Hayes Wang98e97912020-06-16 17:09:46 +0800852static void rtl_clear_bp(struct r8152 *tp, u16 type)
Ted Chen9b6dbd42016-01-20 14:24:52 +0800853{
Hayes Wang98e97912020-06-16 17:09:46 +0800854 u8 zeros[16] = {0};
Ted Chen9b6dbd42016-01-20 14:24:52 +0800855
Hayes Wang98e97912020-06-16 17:09:46 +0800856 switch (tp->version) {
857 case RTL_VER_01:
858 case RTL_VER_02:
859 case RTL_VER_07:
860 break;
861 case RTL_VER_03:
862 case RTL_VER_04:
863 case RTL_VER_05:
864 case RTL_VER_06:
865 ocp_write_byte(tp, type, PLA_BP_EN, 0);
866 break;
Hayes Wangd215ca22020-06-16 17:09:47 +0800867 case RTL_VER_08:
868 case RTL_VER_09:
Hayes Wang98e97912020-06-16 17:09:46 +0800869 default:
Hayes Wangd215ca22020-06-16 17:09:47 +0800870 if (type == MCU_TYPE_USB) {
871 ocp_write_byte(tp, MCU_TYPE_USB, USB_BP2_EN, 0);
872
873 generic_ocp_write(tp, USB_BP(8), 0xff, sizeof(zeros),
874 zeros, type);
875 } else {
876 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_BP_EN, 0);
877 }
Hayes Wang98e97912020-06-16 17:09:46 +0800878 break;
879 }
Ted Chen9b6dbd42016-01-20 14:24:52 +0800880
Hayes Wang98e97912020-06-16 17:09:46 +0800881 generic_ocp_write(tp, USB_BP(0), 0xff, sizeof(zeros), zeros, type);
Ted Chen9b6dbd42016-01-20 14:24:52 +0800882
Hayes Wang98e97912020-06-16 17:09:46 +0800883 mdelay(6);
884
885 ocp_write_word(tp, type, PLA_BP_BA, 0);
Ted Chen9b6dbd42016-01-20 14:24:52 +0800886}
887
888static void r8152b_set_dq_desc(struct r8152 *tp)
889{
890 u8 data;
891
892 data = ocp_read_byte(tp, MCU_TYPE_USB, 0xd429);
893 data |= 0x80;
894 ocp_write_byte(tp, MCU_TYPE_USB, 0xd429, data);
895 ocp_write_word(tp, MCU_TYPE_USB, 0xc0ce, 0x0210);
896 data = ocp_read_byte(tp, MCU_TYPE_USB, 0xd429);
897 data &= ~0x80;
898 ocp_write_byte(tp, MCU_TYPE_USB, 0xd429, data);
899}
900
901static int r8153_pre_ram_code(struct r8152 *tp, u16 patch_key)
902{
903 u16 data;
904 int i;
905
906 data = ocp_reg_read(tp, 0xb820);
907 data |= 0x0010;
908 ocp_reg_write(tp, 0xb820, data);
909
910 for (i = 0, data = 0; !data && i < 5000; i++) {
911 mdelay(2);
912 data = ocp_reg_read(tp, 0xb800) & 0x0040;
913 }
914
915 sram_write(tp, 0x8146, patch_key);
916 sram_write(tp, 0xb82e, 0x0001);
917
918 return -EBUSY;
919}
920
921static int r8153_post_ram_code(struct r8152 *tp)
922{
923 u16 data;
924
925 sram_write(tp, 0x0000, 0x0000);
926
927 data = ocp_reg_read(tp, 0xb82e);
928 data &= ~0x0001;
929 ocp_reg_write(tp, 0xb82e, data);
930
931 sram_write(tp, 0x8146, 0x0000);
932
933 data = ocp_reg_read(tp, 0xb820);
934 data &= ~0x0010;
935 ocp_reg_write(tp, 0xb820, data);
936
937 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, tp->ocp_base);
938
939 return 0;
940}
941
942static void r8153_wdt1_end(struct r8152 *tp)
943{
944 int i;
945
946 for (i = 0; i < 104; i++) {
947 if (!(ocp_read_byte(tp, MCU_TYPE_USB, 0xe404) & 1))
948 break;
949 mdelay(2);
950 }
951}
952
953void r8152b_firmware(struct r8152 *tp)
954{
955 int i;
956
957 if (tp->version == RTL_VER_01) {
958 int i;
959
960 r8152b_set_dq_desc(tp);
Hayes Wang98e97912020-06-16 17:09:46 +0800961 rtl_clear_bp(tp, MCU_TYPE_PLA);
Ted Chen9b6dbd42016-01-20 14:24:52 +0800962
963 generic_ocp_write(tp, 0xf800, 0x3f,
964 sizeof(r8152b_pla_patch_a),
965 r8152b_pla_patch_a, MCU_TYPE_PLA);
966
967 for (i = 0; i < ARRAY_SIZE(r8152b_pla_patch_a_bp); i += 2)
968 ocp_write_word(tp, MCU_TYPE_PLA,
969 r8152b_pla_patch_a_bp[i],
970 r8152b_pla_patch_a_bp[i+1]);
971
972 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, 0x2000);
973 ocp_write_word(tp, MCU_TYPE_PLA, 0xb092, 0x7070);
974 ocp_write_word(tp, MCU_TYPE_PLA, 0xb098, 0x0600);
975 for (i = 0; i < ARRAY_SIZE(r8152b_ram_code1); i++)
976 ocp_write_word(tp, MCU_TYPE_PLA, 0xb09a,
977 r8152b_ram_code1[i]);
978
979 ocp_write_word(tp, MCU_TYPE_PLA, 0xb098, 0x0200);
980 ocp_write_word(tp, MCU_TYPE_PLA, 0xb092, 0x7030);
981 } else if (tp->version == RTL_VER_02) {
Hayes Wang98e97912020-06-16 17:09:46 +0800982 rtl_clear_bp(tp, MCU_TYPE_PLA);
Ted Chen9b6dbd42016-01-20 14:24:52 +0800983
984 generic_ocp_write(tp, 0xf800, 0xff,
985 sizeof(r8152b_pla_patch_a2),
986 r8152b_pla_patch_a2, MCU_TYPE_PLA);
987
988 for (i = 0; i < ARRAY_SIZE(r8152b_pla_patch_a2_bp);
989 i += 2)
990 ocp_write_word(tp, MCU_TYPE_PLA,
991 r8152b_pla_patch_a2_bp[i],
992 r8152b_pla_patch_a2_bp[i+1]);
993 }
994}
995
996void r8153_firmware(struct r8152 *tp)
997{
998 int i;
999
1000 if (tp->version == RTL_VER_03) {
Ted Chen9b6dbd42016-01-20 14:24:52 +08001001 r8153_pre_ram_code(tp, 0x7000);
1002
1003 for (i = 0; i < ARRAY_SIZE(r8153_ram_code_a); i += 2)
1004 ocp_write_word(tp, MCU_TYPE_PLA,
1005 r8153_ram_code_a[i],
1006 r8153_ram_code_a[i+1]);
1007
1008 r8153_post_ram_code(tp);
1009 } else if (tp->version == RTL_VER_04) {
1010 r8153_pre_ram_code(tp, 0x7001);
1011
Andre Przywarab86d0fb2016-11-16 00:50:11 +00001012 for (i = 0; i < ARRAY_SIZE(r8153_ram_code_bc); i += 2)
1013 ocp_write_word(tp, MCU_TYPE_PLA,
1014 r8153_ram_code_bc[i],
1015 r8153_ram_code_bc[i+1]);
Ted Chen9b6dbd42016-01-20 14:24:52 +08001016
1017 r8153_post_ram_code(tp);
1018
1019 r8153_wdt1_end(tp);
Hayes Wang98e97912020-06-16 17:09:46 +08001020
1021 rtl_clear_bp(tp, MCU_TYPE_USB);
Ted Chen9b6dbd42016-01-20 14:24:52 +08001022
1023 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x0000);
1024 generic_ocp_write(tp, 0xf800, 0xff,
1025 sizeof(r8153_usb_patch_b),
1026 r8153_usb_patch_b, MCU_TYPE_USB);
1027
1028 for (i = 0; i < ARRAY_SIZE(r8153_usb_patch_b_bp); i += 2)
1029 ocp_write_word(tp, MCU_TYPE_USB,
1030 r8153_usb_patch_b_bp[i],
1031 r8153_usb_patch_b_bp[i+1]);
1032
1033 if (!(ocp_read_word(tp, MCU_TYPE_PLA, 0xd38e) & BIT(0))) {
1034 ocp_write_word(tp, MCU_TYPE_PLA, 0xd38c, 0x0082);
1035 ocp_write_word(tp, MCU_TYPE_PLA, 0xd38e, 0x0082);
1036 }
1037
Hayes Wang98e97912020-06-16 17:09:46 +08001038 rtl_clear_bp(tp, MCU_TYPE_PLA);
1039
Ted Chen9b6dbd42016-01-20 14:24:52 +08001040 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, 0x0000);
1041 generic_ocp_write(tp, 0xf800, 0xff,
1042 sizeof(r8153_pla_patch_b),
1043 r8153_pla_patch_b, MCU_TYPE_PLA);
1044
1045 for (i = 0; i < ARRAY_SIZE(r8153_pla_patch_b_bp); i += 2)
1046 ocp_write_word(tp, MCU_TYPE_PLA,
1047 r8153_pla_patch_b_bp[i],
1048 r8153_pla_patch_b_bp[i+1]);
1049
1050 ocp_write_word(tp, MCU_TYPE_PLA, 0xd388, 0x08ca);
1051 } else if (tp->version == RTL_VER_05) {
1052 u32 ocp_data;
1053
1054 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, 0xcfca);
1055 ocp_data &= ~0x4000;
1056 ocp_write_word(tp, MCU_TYPE_USB, 0xcfca, ocp_data);
1057
1058 r8153_pre_ram_code(tp, 0x7001);
1059
1060 for (i = 0; i < ARRAY_SIZE(r8153_ram_code_bc); i += 2)
1061 ocp_write_word(tp, MCU_TYPE_PLA,
1062 r8153_ram_code_bc[i],
1063 r8153_ram_code_bc[i+1]);
1064
1065 r8153_post_ram_code(tp);
1066
1067 r8153_wdt1_end(tp);
Hayes Wang98e97912020-06-16 17:09:46 +08001068
1069 rtl_clear_bp(tp, MCU_TYPE_USB);
Ted Chen9b6dbd42016-01-20 14:24:52 +08001070
1071 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x0000);
1072 generic_ocp_write(tp, 0xf800, 0xff,
1073 sizeof(r8153_usb_patch_c),
1074 r8153_usb_patch_c, MCU_TYPE_USB);
1075
1076 for (i = 0; i < ARRAY_SIZE(r8153_usb_patch_c_bp); i += 2)
1077 ocp_write_word(tp, MCU_TYPE_USB,
1078 r8153_usb_patch_c_bp[i],
1079 r8153_usb_patch_c_bp[i+1]);
1080
1081 if (ocp_read_byte(tp, MCU_TYPE_USB, 0xcfef) & 1) {
1082 ocp_write_word(tp, MCU_TYPE_USB, 0xfc30, 0x1578);
1083 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x00ff);
1084 } else {
1085 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x00ef);
1086 }
1087
Hayes Wang98e97912020-06-16 17:09:46 +08001088 rtl_clear_bp(tp, MCU_TYPE_PLA);
1089
Ted Chen9b6dbd42016-01-20 14:24:52 +08001090 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, 0x0000);
1091 generic_ocp_write(tp, 0xf800, 0xff,
1092 sizeof(r8153_pla_patch_c),
1093 r8153_pla_patch_c, MCU_TYPE_PLA);
1094
1095 for (i = 0; i < ARRAY_SIZE(r8153_pla_patch_c_bp); i += 2)
1096 ocp_write_word(tp, MCU_TYPE_PLA,
1097 r8153_pla_patch_c_bp[i],
1098 r8153_pla_patch_c_bp[i+1]);
1099
1100 ocp_write_word(tp, MCU_TYPE_PLA, 0xd388, 0x08ca);
1101
Hayes Wanga587d3b2020-06-05 15:23:40 +08001102 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS,
1103 U3P3_CHECK_EN | 4);
1104
Ted Chen9b6dbd42016-01-20 14:24:52 +08001105 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, 0xcfca);
1106 ocp_data |= 0x4000;
1107 ocp_write_word(tp, MCU_TYPE_USB, 0xcfca, ocp_data);
Hayes Wanga587d3b2020-06-05 15:23:40 +08001108
1109 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY);
1110 ocp_data |= USB2PHY_L1 | USB2PHY_SUSPEND;
1111 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data);
Ted Chen9b6dbd42016-01-20 14:24:52 +08001112 } else if (tp->version == RTL_VER_06) {
Hayes Wanga587d3b2020-06-05 15:23:40 +08001113 u32 ocp_data;
1114
Ted Chen9b6dbd42016-01-20 14:24:52 +08001115 r8153_pre_ram_code(tp, 0x7002);
1116
1117 for (i = 0; i < ARRAY_SIZE(r8153_ram_code_d); i += 2)
1118 ocp_write_word(tp, MCU_TYPE_PLA,
1119 r8153_ram_code_d[i],
1120 r8153_ram_code_d[i+1]);
1121
1122 r8153_post_ram_code(tp);
1123
Hayes Wang98e97912020-06-16 17:09:46 +08001124 rtl_clear_bp(tp, MCU_TYPE_USB);
Ted Chen9b6dbd42016-01-20 14:24:52 +08001125
1126 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x0000);
1127 generic_ocp_write(tp, 0xf800, 0xff, sizeof(usb_patch_d),
1128 usb_patch_d, MCU_TYPE_USB);
1129
1130 for (i = 0; i < ARRAY_SIZE(r8153_usb_patch_d_bp); i += 2)
1131 ocp_write_word(tp, MCU_TYPE_USB,
1132 r8153_usb_patch_d_bp[i],
1133 r8153_usb_patch_d_bp[i+1]);
Hayes Wanga587d3b2020-06-05 15:23:40 +08001134
Hayes Wang98e97912020-06-16 17:09:46 +08001135 rtl_clear_bp(tp, MCU_TYPE_PLA);
1136
Hayes Wanga587d3b2020-06-05 15:23:40 +08001137 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, 0x0000);
1138 generic_ocp_write(tp, 0xf800, 0xff, sizeof(pla_patch_d),
1139 pla_patch_d, MCU_TYPE_PLA);
1140
1141 for (i = 0; i < ARRAY_SIZE(r8153_pla_patch_d_bp); i += 2)
1142 ocp_write_word(tp, MCU_TYPE_PLA,
1143 r8153_pla_patch_d_bp[i],
1144 r8153_pla_patch_d_bp[i + 1]);
1145
1146 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY);
1147 ocp_data |= USB2PHY_L1 | USB2PHY_SUSPEND;
1148 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data);
1149
1150 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1);
1151 ocp_data |= FW_IP_RESET_EN;
1152 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, ocp_data);
Ted Chen9b6dbd42016-01-20 14:24:52 +08001153 }
1154}
Hayes Wangd215ca22020-06-16 17:09:47 +08001155
1156void r8153b_firmware(struct r8152 *tp)
1157{
1158 u32 ocp_data;
1159 int i;
1160
1161 if (tp->version != RTL_VER_09)
1162 return;
1163
1164 rtl_clear_bp(tp, MCU_TYPE_USB);
1165
1166 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x0000);
1167 generic_ocp_write(tp, 0xe600, 0xff, sizeof(usb_patch2_b),
1168 usb_patch2_b, MCU_TYPE_USB);
1169
1170 for (i = 0; i < ARRAY_SIZE(r8153b_usb_patch_b_bp); i += 2)
1171 ocp_write_word(tp, MCU_TYPE_USB,
1172 r8153b_usb_patch_b_bp[i],
1173 r8153b_usb_patch_b_bp[i + 1]);
1174
1175 rtl_clear_bp(tp, MCU_TYPE_PLA);
1176
1177 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, 0x0000);
1178 generic_ocp_write(tp, 0xf800, 0xff, sizeof(pla_patch2_b),
1179 pla_patch2_b, MCU_TYPE_PLA);
1180
1181 for (i = 0; i < ARRAY_SIZE(r8153b_pla_patch_b_bp); i += 2)
1182 ocp_write_word(tp, MCU_TYPE_PLA,
1183 r8153b_pla_patch_b_bp[i],
1184 r8153b_pla_patch_b_bp[i + 1]);
1185
1186 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY);
1187 ocp_data |= USB2PHY_L1 | USB2PHY_SUSPEND;
1188 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data);
1189
1190 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1);
1191 ocp_data |= FW_IP_RESET_EN;
1192 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, ocp_data);
1193}