xref: /rk3399_rockchip-uboot/drivers/usb/eth/r8152_fw.c (revision 566a965af1d8c6151bb7c11cb55c9bd32cfeae8c)
19dc8ba19STed Chen /*
29dc8ba19STed Chen  * Copyright (c) 2015 Realtek Semiconductor Corp. All rights reserved.
39dc8ba19STed Chen  *
49dc8ba19STed Chen  * SPDX-License-Identifier:     GPL-2.0
59dc8ba19STed Chen  *
69dc8ba19STed Chen   */
79dc8ba19STed Chen #include <common.h>
8*6688452aSStefan Roese #include <dm.h>
99dc8ba19STed Chen #include <errno.h>
10*6688452aSStefan Roese #include "usb_ether.h"
119dc8ba19STed Chen #include "r8152.h"
129dc8ba19STed Chen 
139dc8ba19STed Chen static u8 r8152b_pla_patch_a[] = {
149dc8ba19STed Chen 	0x08, 0xe0, 0x40, 0xe0, 0x78, 0xe0, 0x85, 0xe0,
159dc8ba19STed Chen 	0x5d, 0xe1, 0xa1, 0xe1, 0xa3, 0xe1, 0xab, 0xe1,
169dc8ba19STed Chen 	0x31, 0xc3, 0x60, 0x72, 0xa0, 0x49, 0x10, 0xf0,
179dc8ba19STed Chen 	0xa4, 0x49, 0x0e, 0xf0, 0x2c, 0xc3, 0x62, 0x72,
189dc8ba19STed Chen 	0x26, 0x70, 0x80, 0x49, 0x05, 0xf0, 0x2f, 0x48,
199dc8ba19STed Chen 	0x62, 0x9a, 0x24, 0x70, 0x60, 0x98, 0x24, 0xc3,
209dc8ba19STed Chen 	0x60, 0x99, 0x23, 0xc3, 0x00, 0xbb, 0x2c, 0x75,
219dc8ba19STed Chen 	0xdc, 0x21, 0xbc, 0x25, 0x04, 0x13, 0x0a, 0xf0,
229dc8ba19STed Chen 	0x03, 0x13, 0x08, 0xf0, 0x02, 0x13, 0x06, 0xf0,
239dc8ba19STed Chen 	0x01, 0x13, 0x04, 0xf0, 0x08, 0x13, 0x02, 0xf0,
249dc8ba19STed Chen 	0x03, 0xe0, 0xd4, 0x49, 0x04, 0xf1, 0x14, 0xc2,
259dc8ba19STed Chen 	0x12, 0xc3, 0x00, 0xbb, 0x12, 0xc3, 0x60, 0x75,
269dc8ba19STed Chen 	0xd0, 0x49, 0x05, 0xf1, 0x50, 0x48, 0x60, 0x9d,
279dc8ba19STed Chen 	0x09, 0xc6, 0x00, 0xbe, 0xd0, 0x48, 0x60, 0x9d,
289dc8ba19STed Chen 	0xf3, 0xe7, 0xc2, 0xc0, 0x38, 0xd2, 0xc6, 0xd2,
299dc8ba19STed Chen 	0x84, 0x17, 0xa2, 0x13, 0x0c, 0x17, 0xbc, 0xc0,
309dc8ba19STed Chen 	0xa2, 0xd1, 0x33, 0xc5, 0xa0, 0x74, 0xc0, 0x49,
319dc8ba19STed Chen 	0x1f, 0xf0, 0x30, 0xc5, 0xa0, 0x73, 0x00, 0x13,
329dc8ba19STed Chen 	0x04, 0xf1, 0xa2, 0x73, 0x00, 0x13, 0x14, 0xf0,
339dc8ba19STed Chen 	0x28, 0xc5, 0xa0, 0x74, 0xc8, 0x49, 0x1b, 0xf1,
349dc8ba19STed Chen 	0x26, 0xc5, 0xa0, 0x76, 0xa2, 0x74, 0x01, 0x06,
359dc8ba19STed Chen 	0x20, 0x37, 0xa0, 0x9e, 0xa2, 0x9c, 0x1e, 0xc5,
369dc8ba19STed Chen 	0xa2, 0x73, 0x23, 0x40, 0x10, 0xf8, 0x04, 0xf3,
379dc8ba19STed Chen 	0xa0, 0x73, 0x33, 0x40, 0x0c, 0xf8, 0x15, 0xc5,
389dc8ba19STed Chen 	0xa0, 0x74, 0x41, 0x48, 0xa0, 0x9c, 0x14, 0xc5,
399dc8ba19STed Chen 	0xa0, 0x76, 0x62, 0x48, 0xe0, 0x48, 0xa0, 0x9e,
409dc8ba19STed Chen 	0x10, 0xc6, 0x00, 0xbe, 0x0a, 0xc5, 0xa0, 0x74,
419dc8ba19STed Chen 	0x48, 0x48, 0xa0, 0x9c, 0x0b, 0xc5, 0x20, 0x1e,
429dc8ba19STed Chen 	0xa0, 0x9e, 0xe5, 0x48, 0xa0, 0x9e, 0xf0, 0xe7,
439dc8ba19STed Chen 	0xbc, 0xc0, 0xc8, 0xd2, 0xcc, 0xd2, 0x28, 0xe4,
449dc8ba19STed Chen 	0x22, 0x02, 0xf0, 0xc0, 0x0b, 0xc0, 0x00, 0x71,
459dc8ba19STed Chen 	0x0a, 0xc0, 0x00, 0x72, 0xa0, 0x49, 0x04, 0xf0,
469dc8ba19STed Chen 	0xa4, 0x49, 0x02, 0xf0, 0x93, 0x48, 0x04, 0xc0,
479dc8ba19STed Chen 	0x00, 0xb8, 0x00, 0xe4, 0xc2, 0xc0, 0x8c, 0x09,
489dc8ba19STed Chen 	0x14, 0xc2, 0x40, 0x73, 0xba, 0x48, 0x40, 0x9b,
499dc8ba19STed Chen 	0x11, 0xc2, 0x40, 0x73, 0xb0, 0x49, 0x17, 0xf0,
509dc8ba19STed Chen 	0xbf, 0x49, 0x03, 0xf1, 0x09, 0xc5, 0x00, 0xbd,
519dc8ba19STed Chen 	0xb1, 0x49, 0x11, 0xf0, 0xb1, 0x48, 0x40, 0x9b,
529dc8ba19STed Chen 	0x02, 0xc2, 0x00, 0xba, 0x82, 0x18, 0x00, 0xa0,
539dc8ba19STed Chen 	0x1e, 0xfc, 0xbc, 0xc0, 0xf0, 0xc0, 0xde, 0xe8,
549dc8ba19STed Chen 	0x00, 0x80, 0x00, 0x60, 0x2c, 0x75, 0xd4, 0x49,
559dc8ba19STed Chen 	0x12, 0xf1, 0x29, 0xe0, 0xf8, 0xc2, 0x46, 0x71,
569dc8ba19STed Chen 	0xf7, 0xc2, 0x40, 0x73, 0xbe, 0x49, 0x03, 0xf1,
579dc8ba19STed Chen 	0xf5, 0xc7, 0x02, 0xe0, 0xf2, 0xc7, 0x4f, 0x30,
589dc8ba19STed Chen 	0x26, 0x62, 0xa1, 0x49, 0xf0, 0xf1, 0x22, 0x72,
599dc8ba19STed Chen 	0xa0, 0x49, 0xed, 0xf1, 0x25, 0x25, 0x18, 0x1f,
609dc8ba19STed Chen 	0x97, 0x30, 0x91, 0x30, 0x36, 0x9a, 0x2c, 0x75,
619dc8ba19STed Chen 	0x32, 0xc3, 0x60, 0x73, 0xb1, 0x49, 0x0d, 0xf1,
629dc8ba19STed Chen 	0xdc, 0x21, 0xbc, 0x25, 0x27, 0xc6, 0xc0, 0x77,
639dc8ba19STed Chen 	0x04, 0x13, 0x18, 0xf0, 0x03, 0x13, 0x19, 0xf0,
649dc8ba19STed Chen 	0x02, 0x13, 0x1a, 0xf0, 0x01, 0x13, 0x1b, 0xf0,
659dc8ba19STed Chen 	0xd4, 0x49, 0x03, 0xf1, 0x1c, 0xc5, 0x00, 0xbd,
669dc8ba19STed Chen 	0xcd, 0xc6, 0xc6, 0x67, 0x2e, 0x75, 0xd7, 0x22,
679dc8ba19STed Chen 	0xdd, 0x26, 0x05, 0x15, 0x1a, 0xf0, 0x14, 0xc6,
689dc8ba19STed Chen 	0x00, 0xbe, 0x13, 0xc5, 0x00, 0xbd, 0x12, 0xc5,
699dc8ba19STed Chen 	0x00, 0xbd, 0xf1, 0x49, 0xfb, 0xf1, 0xef, 0xe7,
709dc8ba19STed Chen 	0xf4, 0x49, 0xfa, 0xf1, 0xec, 0xe7, 0xf3, 0x49,
719dc8ba19STed Chen 	0xf7, 0xf1, 0xe9, 0xe7, 0xf2, 0x49, 0xf4, 0xf1,
729dc8ba19STed Chen 	0xe6, 0xe7, 0xb6, 0xc0, 0x6a, 0x14, 0xac, 0x13,
739dc8ba19STed Chen 	0xd6, 0x13, 0xfa, 0x14, 0xa0, 0xd1, 0x00, 0x00,
749dc8ba19STed Chen 	0xc0, 0x75, 0xd0, 0x49, 0x46, 0xf0, 0x26, 0x72,
759dc8ba19STed Chen 	0xa7, 0x49, 0x43, 0xf0, 0x22, 0x72, 0x25, 0x25,
769dc8ba19STed Chen 	0x20, 0x1f, 0x97, 0x30, 0x91, 0x30, 0x40, 0x73,
779dc8ba19STed Chen 	0xf3, 0xc4, 0x1c, 0x40, 0x04, 0xf0, 0xd7, 0x49,
789dc8ba19STed Chen 	0x05, 0xf1, 0x37, 0xe0, 0x53, 0x48, 0xc0, 0x9d,
799dc8ba19STed Chen 	0x08, 0x02, 0x40, 0x66, 0x64, 0x27, 0x06, 0x16,
809dc8ba19STed Chen 	0x30, 0xf1, 0x46, 0x63, 0x3b, 0x13, 0x2d, 0xf1,
819dc8ba19STed Chen 	0x34, 0x9b, 0x18, 0x1b, 0x93, 0x30, 0x2b, 0xc3,
829dc8ba19STed Chen 	0x10, 0x1c, 0x2b, 0xe8, 0x01, 0x14, 0x25, 0xf1,
839dc8ba19STed Chen 	0x00, 0x1d, 0x26, 0x1a, 0x8a, 0x30, 0x22, 0x73,
849dc8ba19STed Chen 	0xb5, 0x25, 0x0e, 0x0b, 0x00, 0x1c, 0x2c, 0xe8,
859dc8ba19STed Chen 	0x1f, 0xc7, 0x27, 0x40, 0x1a, 0xf1, 0x38, 0xe8,
869dc8ba19STed Chen 	0x32, 0x1f, 0x8f, 0x30, 0x08, 0x1b, 0x24, 0xe8,
879dc8ba19STed Chen 	0x36, 0x72, 0x46, 0x77, 0x00, 0x17, 0x0d, 0xf0,
889dc8ba19STed Chen 	0x13, 0xc3, 0x1f, 0x40, 0x03, 0xf1, 0x00, 0x1f,
899dc8ba19STed Chen 	0x46, 0x9f, 0x44, 0x77, 0x9f, 0x44, 0x5f, 0x44,
909dc8ba19STed Chen 	0x17, 0xe8, 0x0a, 0xc7, 0x27, 0x40, 0x05, 0xf1,
919dc8ba19STed Chen 	0x02, 0xc3, 0x00, 0xbb, 0x50, 0x1a, 0x06, 0x1a,
929dc8ba19STed Chen 	0xff, 0xc7, 0x00, 0xbf, 0xb8, 0xcd, 0xff, 0xff,
939dc8ba19STed Chen 	0x02, 0x0c, 0x54, 0xa5, 0xdc, 0xa5, 0x2f, 0x40,
949dc8ba19STed Chen 	0x05, 0xf1, 0x00, 0x14, 0xfa, 0xf1, 0x01, 0x1c,
959dc8ba19STed Chen 	0x02, 0xe0, 0x00, 0x1c, 0x80, 0xff, 0xb0, 0x49,
969dc8ba19STed Chen 	0x04, 0xf0, 0x01, 0x0b, 0xd3, 0xa1, 0x03, 0xe0,
979dc8ba19STed Chen 	0x02, 0x0b, 0xd3, 0xa5, 0x27, 0x31, 0x20, 0x37,
989dc8ba19STed Chen 	0x02, 0x0b, 0xd3, 0xa5, 0x27, 0x31, 0x20, 0x37,
999dc8ba19STed Chen 	0x00, 0x13, 0xfb, 0xf1, 0x80, 0xff, 0x22, 0x73,
1009dc8ba19STed Chen 	0xb5, 0x25, 0x18, 0x1e, 0xde, 0x30, 0xd9, 0x30,
1019dc8ba19STed Chen 	0x64, 0x72, 0x11, 0x1e, 0x68, 0x23, 0x16, 0x31,
1029dc8ba19STed Chen 	0x80, 0xff, 0xd4, 0x49, 0x28, 0xf0, 0x02, 0xb4,
1039dc8ba19STed Chen 	0x2a, 0xc4, 0x00, 0x1d, 0x2e, 0xe8, 0xe0, 0x73,
1049dc8ba19STed Chen 	0xb9, 0x21, 0xbd, 0x25, 0x04, 0x13, 0x02, 0xf0,
1059dc8ba19STed Chen 	0x1a, 0xe0, 0x22, 0xc4, 0x23, 0xc3, 0x2f, 0xe8,
1069dc8ba19STed Chen 	0x23, 0xc3, 0x2d, 0xe8, 0x00, 0x1d, 0x21, 0xe8,
1079dc8ba19STed Chen 	0xe2, 0x73, 0xbb, 0x49, 0xfc, 0xf0, 0xe0, 0x73,
1089dc8ba19STed Chen 	0xb7, 0x48, 0x03, 0xb4, 0x81, 0x1d, 0x19, 0xe8,
1099dc8ba19STed Chen 	0x40, 0x1a, 0x84, 0x1d, 0x16, 0xe8, 0x12, 0xc3,
1109dc8ba19STed Chen 	0x1e, 0xe8, 0x03, 0xb0, 0x81, 0x1d, 0x11, 0xe8,
1119dc8ba19STed Chen 	0x0e, 0xc3, 0x19, 0xe8, 0x02, 0xb0, 0x06, 0xc7,
1129dc8ba19STed Chen 	0x04, 0x1e, 0xe0, 0x9e, 0x02, 0xc6, 0x00, 0xbe,
1139dc8ba19STed Chen 	0x22, 0x02, 0x20, 0xe4, 0x04, 0xb8, 0x34, 0xb0,
1149dc8ba19STed Chen 	0x00, 0x02, 0x00, 0x03, 0x00, 0x0e, 0x00, 0x0c,
1159dc8ba19STed Chen 	0x09, 0xc7, 0xe0, 0x9b, 0xe2, 0x9a, 0xe4, 0x9c,
1169dc8ba19STed Chen 	0xe6, 0x8d, 0xe6, 0x76, 0xef, 0x49, 0xfe, 0xf1,
1179dc8ba19STed Chen 	0x80, 0xff, 0x08, 0xea, 0x82, 0x1d, 0xf5, 0xef,
1189dc8ba19STed Chen 	0x00, 0x1a, 0x88, 0x1d, 0xf2, 0xef, 0xed, 0xc2,
1199dc8ba19STed Chen 	0xf0, 0xef, 0x80, 0xff, 0x02, 0xc6, 0x00, 0xbe,
1209dc8ba19STed Chen 	0x46, 0x06, 0x08, 0xc2, 0x40, 0x73, 0x3a, 0x48,
1219dc8ba19STed Chen 	0x40, 0x9b, 0x06, 0xff, 0x02, 0xc6, 0x00, 0xbe,
1229dc8ba19STed Chen 	0x86, 0x17, 0x1e, 0xfc, 0x36, 0xf0, 0x08, 0x1c,
1239dc8ba19STed Chen 	0xea, 0x8c, 0xe3, 0x64, 0xc7, 0x49, 0x25, 0xf1,
1249dc8ba19STed Chen 	0xe0, 0x75, 0xff, 0x1b, 0xeb, 0x47, 0xff, 0x1b,
1259dc8ba19STed Chen 	0x6b, 0x47, 0xe0, 0x9d, 0x15, 0xc3, 0x60, 0x75,
1269dc8ba19STed Chen 	0xd8, 0x49, 0x04, 0xf0, 0x81, 0x1d, 0xe2, 0x8d,
1279dc8ba19STed Chen 	0x05, 0xe0, 0xe2, 0x63, 0x81, 0x1d, 0xdd, 0x47,
1289dc8ba19STed Chen 	0xe2, 0x8b, 0x0b, 0xc3, 0x00, 0x1d, 0x61, 0x8d,
1299dc8ba19STed Chen 	0x3c, 0x03, 0x60, 0x75, 0xd8, 0x49, 0x06, 0xf1,
1309dc8ba19STed Chen 	0xdf, 0x48, 0x61, 0x95, 0x16, 0xe0, 0x4e, 0xe8,
1319dc8ba19STed Chen 	0x12, 0xe8, 0x21, 0xc5, 0xa0, 0x73, 0xb0, 0x49,
1329dc8ba19STed Chen 	0x03, 0xf0, 0x31, 0x48, 0xa0, 0x9b, 0x0d, 0xe0,
1339dc8ba19STed Chen 	0xc0, 0x49, 0x0b, 0xf1, 0xe2, 0x63, 0x7e, 0x1d,
1349dc8ba19STed Chen 	0xdd, 0x46, 0xe2, 0x8b, 0xe0, 0x75, 0x83, 0x1b,
1359dc8ba19STed Chen 	0xeb, 0x46, 0xfe, 0x1b, 0x6b, 0x46, 0xe0, 0x9d,
1369dc8ba19STed Chen 	0xe4, 0x49, 0x11, 0xf0, 0x10, 0x1d, 0xea, 0x8d,
1379dc8ba19STed Chen 	0xe3, 0x64, 0xc6, 0x49, 0x09, 0xf1, 0x07, 0xc5,
1389dc8ba19STed Chen 	0xa0, 0x73, 0xb1, 0x48, 0xa0, 0x9b, 0x02, 0xc5,
1399dc8ba19STed Chen 	0x00, 0xbd, 0xe6, 0x04, 0xa0, 0xd1, 0x02, 0xc5,
1409dc8ba19STed Chen 	0x00, 0xbd, 0xfe, 0x04, 0x02, 0xc5, 0x00, 0xbd,
1419dc8ba19STed Chen 	0x30, 0x05, 0x00, 0x00 };
1429dc8ba19STed Chen 
1439dc8ba19STed Chen static u16 r8152b_ram_code1[] = {
1449dc8ba19STed Chen 	0x9700, 0x7fe0, 0x4c00, 0x4007, 0x4400, 0x4800, 0x7c1f, 0x4c00,
1459dc8ba19STed Chen 	0x5310, 0x6000, 0x7c07, 0x6800, 0x673e, 0x0000, 0x0000, 0x571f,
1469dc8ba19STed Chen 	0x5ffb, 0xaa05, 0x5b58, 0x7d80, 0x6100, 0x3019, 0x5b64, 0x7d80,
1479dc8ba19STed Chen 	0x6080, 0xa6f8, 0xdcdb, 0x0015, 0xb915, 0xb511, 0xd16b, 0x000f,
1489dc8ba19STed Chen 	0xb40f, 0xd06b, 0x000d, 0xb206, 0x7c01, 0x5800, 0x7c04, 0x5c00,
1499dc8ba19STed Chen 	0x3011, 0x7c01, 0x5801, 0x7c04, 0x5c04, 0x3019, 0x30a5, 0x3127,
1509dc8ba19STed Chen 	0x31d5, 0x7fe0, 0x4c60, 0x7c07, 0x6803, 0x7d00, 0x6900, 0x65a0,
1519dc8ba19STed Chen 	0x0000, 0x0000, 0xaf03, 0x6015, 0x303e, 0x6017, 0x57e0, 0x580c,
1529dc8ba19STed Chen 	0x588c, 0x7fdd, 0x5fa2, 0x4827, 0x7c1f, 0x4c00, 0x7c1f, 0x4c10,
1539dc8ba19STed Chen 	0x8400, 0x7c30, 0x6020, 0x48bf, 0x7c1f, 0x4c00, 0x7c1f, 0x4c01,
1549dc8ba19STed Chen 	0x7c07, 0x6803, 0xb806, 0x7c08, 0x6800, 0x0000, 0x0000, 0x305c,
1559dc8ba19STed Chen 	0x7c08, 0x6808, 0x0000, 0x0000, 0xae06, 0x7c02, 0x5c02, 0x0000,
1569dc8ba19STed Chen 	0x0000, 0x3067, 0x8e05, 0x7c02, 0x5c00, 0x0000, 0x0000, 0xad06,
1579dc8ba19STed Chen 	0x7c20, 0x5c20, 0x0000, 0x0000, 0x3072, 0x8d05, 0x7c20, 0x5c00,
1589dc8ba19STed Chen 	0x0000, 0x0000, 0xa008, 0x7c07, 0x6800, 0xb8db, 0x7c07, 0x6803,
1599dc8ba19STed Chen 	0xd9b3, 0x00d7, 0x7fe0, 0x4c80, 0x7c08, 0x6800, 0x0000, 0x0000,
1609dc8ba19STed Chen 	0x7c23, 0x5c23, 0x481d, 0x7c1f, 0x4c00, 0x7c1f, 0x4c02, 0x5310,
1619dc8ba19STed Chen 	0x81ff, 0x30f5, 0x7fe0, 0x4d00, 0x4832, 0x7c1f, 0x4c00, 0x7c1f,
1629dc8ba19STed Chen 	0x4c10, 0x7c08, 0x6000, 0xa49e, 0x7c07, 0x6800, 0xb89b, 0x7c07,
1639dc8ba19STed Chen 	0x6803, 0xd9b3, 0x00f9, 0x7fe0, 0x4d20, 0x7e00, 0x6200, 0x3001,
1649dc8ba19STed Chen 	0x7fe0, 0x4dc0, 0xd09d, 0x0002, 0xb4fe, 0x7fe0, 0x4d80, 0x7c04,
1659dc8ba19STed Chen 	0x6004, 0x7c07, 0x6802, 0x6728, 0x0000, 0x0000, 0x7c08, 0x6000,
1669dc8ba19STed Chen 	0x486c, 0x7c1f, 0x4c00, 0x7c1f, 0x4c01, 0x9503, 0x7e00, 0x6200,
1679dc8ba19STed Chen 	0x571f, 0x5fbb, 0xaa05, 0x5b58, 0x7d80, 0x6100, 0x30c2, 0x5b64,
1689dc8ba19STed Chen 	0x7d80, 0x6080, 0xcdab, 0x0063, 0xcd8d, 0x0061, 0xd96b, 0x005f,
1699dc8ba19STed Chen 	0xd0a0, 0x00d7, 0xcba0, 0x0003, 0x80ec, 0x30cf, 0x30dc, 0x7fe0,
1709dc8ba19STed Chen 	0x4ce0, 0x4832, 0x7c1f, 0x4c00, 0x7c1f, 0x4c08, 0x7c08, 0x6008,
1719dc8ba19STed Chen 	0x8300, 0xb902, 0x30a5, 0x308a, 0x7fe0, 0x4da0, 0x65a8, 0x0000,
1729dc8ba19STed Chen 	0x0000, 0x56a0, 0x590c, 0x7ffd, 0x5fa2, 0xae06, 0x7c02, 0x5c02,
1739dc8ba19STed Chen 	0x0000, 0x0000, 0x30f0, 0x8e05, 0x7c02, 0x5c00, 0x0000, 0x0000,
1749dc8ba19STed Chen 	0xcba4, 0x0004, 0xcd8d, 0x0002, 0x80f1, 0x7fe0, 0x4ca0, 0x7c08,
1759dc8ba19STed Chen 	0x6408, 0x0000, 0x0000, 0x7d00, 0x6800, 0xb603, 0x7c10, 0x6010,
1769dc8ba19STed Chen 	0x7d1f, 0x551f, 0x5fb3, 0xaa07, 0x7c80, 0x5800, 0x5b58, 0x7d80,
1779dc8ba19STed Chen 	0x6100, 0x310f, 0x7c80, 0x5800, 0x5b64, 0x7d80, 0x6080, 0x4827,
1789dc8ba19STed Chen 	0x7c1f, 0x4c00, 0x7c1f, 0x4c10, 0x8400, 0x7c10, 0x6000, 0x7fe0,
1799dc8ba19STed Chen 	0x4cc0, 0x5fbb, 0x4824, 0x7c1f, 0x4c00, 0x7c1f, 0x4c04, 0x8200,
1809dc8ba19STed Chen 	0x7ce0, 0x5400, 0x6728, 0x0000, 0x0000, 0x30cf, 0x3001, 0x7fe0,
1819dc8ba19STed Chen 	0x4e00, 0x4007, 0x4400, 0x5310, 0x7c07, 0x6800, 0x673e, 0x0000,
1829dc8ba19STed Chen 	0x0000, 0x570f, 0x5fff, 0xaa05, 0x585b, 0x7d80, 0x6100, 0x313b,
1839dc8ba19STed Chen 	0x5867, 0x7d80, 0x6080, 0x9403, 0x7e00, 0x6200, 0xcda3, 0x00e7,
1849dc8ba19STed Chen 	0xcd85, 0x00e5, 0xd96b, 0x00e3, 0x96e3, 0x7c07, 0x6800, 0x673e,
1859dc8ba19STed Chen 	0x0000, 0x0000, 0x7fe0, 0x4e20, 0x96db, 0x8b04, 0x7c08, 0x5008,
1869dc8ba19STed Chen 	0xab03, 0x7c08, 0x5000, 0x7c07, 0x6801, 0x677e, 0x0000, 0x0000,
1879dc8ba19STed Chen 	0xdb7c, 0x00ec, 0x0000, 0x7fe1, 0x4f40, 0x4837, 0x4418, 0x41c7,
1889dc8ba19STed Chen 	0x7fe0, 0x4e40, 0x7c40, 0x5400, 0x7c1f, 0x4c01, 0x7c1f, 0x4c01,
1899dc8ba19STed Chen 	0x8fbf, 0xd2a0, 0x004b, 0x9204, 0xa042, 0x3168, 0x3127, 0x7fe1,
1909dc8ba19STed Chen 	0x4f60, 0x489c, 0x4628, 0x7fe0, 0x4e60, 0x7e28, 0x4628, 0x7c40,
1919dc8ba19STed Chen 	0x5400, 0x7c01, 0x5800, 0x7c04, 0x5c00, 0x41e8, 0x7c1f, 0x4c01,
1929dc8ba19STed Chen 	0x7c1f, 0x4c01, 0x8fa5, 0xb241, 0xa02a, 0x3182, 0x7fe0, 0x4ea0,
1939dc8ba19STed Chen 	0x7c02, 0x4402, 0x4448, 0x4894, 0x7c1f, 0x4c01, 0x7c1f, 0x4c03,
1949dc8ba19STed Chen 	0x4824, 0x7c1f, 0x4c07, 0x41ef, 0x41ff, 0x4891, 0x7c1f, 0x4c07,
1959dc8ba19STed Chen 	0x7c1f, 0x4c17, 0x8400, 0x8ef8, 0x41c7, 0x8f8a, 0x92d5, 0xa10f,
1969dc8ba19STed Chen 	0xd480, 0x0008, 0xd580, 0x00b8, 0xa202, 0x319d, 0x7c04, 0x4404,
1979dc8ba19STed Chen 	0x319d, 0xd484, 0x00f3, 0xd484, 0x00f1, 0x3127, 0x7fe0, 0x4ee0,
1989dc8ba19STed Chen 	0x7c40, 0x5400, 0x4488, 0x41cf, 0x3127, 0x7fe0, 0x4ec0, 0x48f3,
1999dc8ba19STed Chen 	0x7c1f, 0x4c01, 0x7c1f, 0x4c09, 0x4508, 0x41c7, 0x8fb0, 0xd218,
2009dc8ba19STed Chen 	0x00ae, 0xd2a4, 0x009e, 0x31be, 0x7fe0, 0x4e80, 0x4832, 0x7c1f,
2019dc8ba19STed Chen 	0x4c01, 0x7c1f, 0x4c11, 0x4428, 0x7c40, 0x5440, 0x7c01, 0x5801,
2029dc8ba19STed Chen 	0x7c04, 0x5c04, 0x41e8, 0xa4b3, 0x31d3, 0x7fe0, 0x4f20, 0x7c07,
2039dc8ba19STed Chen 	0x6800, 0x673e, 0x0000, 0x0000, 0x570f, 0x5fff, 0xaa04, 0x585b,
2049dc8ba19STed Chen 	0x6100, 0x31e4, 0x5867, 0x6080, 0xbcf1, 0x3001 };
2059dc8ba19STed Chen 
2069dc8ba19STed Chen static u16 r8152b_pla_patch_a_bp[] = {
2079dc8ba19STed Chen 	0xfc26, 0x8000, 0xfc28, 0x170b, 0xfc2a, 0x01e1, 0xfc2c, 0x0989,
2089dc8ba19STed Chen 	0xfc2e, 0x1349, 0xfc30, 0x01b7, 0xfc32, 0x061d, 0xe422, 0x0020,
2099dc8ba19STed Chen 	0xe420, 0x0018, 0xfc34, 0x1785, 0xfc36, 0x047b };
2109dc8ba19STed Chen 
2119dc8ba19STed Chen static u8 r8152b_pla_patch_a2[] = {
2129dc8ba19STed Chen 	0x08, 0xe0, 0x1a, 0xe0, 0xf2, 0xe0, 0xfa, 0xe0,
2139dc8ba19STed Chen 	0x32, 0xe1, 0x34, 0xe1, 0x36, 0xe1, 0x38, 0xe1,
2149dc8ba19STed Chen 	0x2c, 0x75, 0xdc, 0x21, 0xbc, 0x25, 0x04, 0x13,
2159dc8ba19STed Chen 	0x0b, 0xf0, 0x03, 0x13, 0x09, 0xf0, 0x02, 0x13,
2169dc8ba19STed Chen 	0x07, 0xf0, 0x01, 0x13, 0x05, 0xf0, 0x08, 0x13,
2179dc8ba19STed Chen 	0x03, 0xf0, 0x04, 0xc3, 0x00, 0xbb, 0x03, 0xc3,
2189dc8ba19STed Chen 	0x00, 0xbb, 0xd2, 0x17, 0xbc, 0x17, 0x14, 0xc2,
2199dc8ba19STed Chen 	0x40, 0x73, 0xba, 0x48, 0x40, 0x9b, 0x11, 0xc2,
2209dc8ba19STed Chen 	0x40, 0x73, 0xb0, 0x49, 0x17, 0xf0, 0xbf, 0x49,
2219dc8ba19STed Chen 	0x03, 0xf1, 0x09, 0xc5, 0x00, 0xbd, 0xb1, 0x49,
2229dc8ba19STed Chen 	0x11, 0xf0, 0xb1, 0x48, 0x40, 0x9b, 0x02, 0xc2,
2239dc8ba19STed Chen 	0x00, 0xba, 0x4e, 0x19, 0x00, 0xa0, 0x1e, 0xfc,
2249dc8ba19STed Chen 	0xbc, 0xc0, 0xf0, 0xc0, 0xde, 0xe8, 0x00, 0x80,
2259dc8ba19STed Chen 	0x00, 0x60, 0x2c, 0x75, 0xd4, 0x49, 0x12, 0xf1,
2269dc8ba19STed Chen 	0x29, 0xe0, 0xf8, 0xc2, 0x46, 0x71, 0xf7, 0xc2,
2279dc8ba19STed Chen 	0x40, 0x73, 0xbe, 0x49, 0x03, 0xf1, 0xf5, 0xc7,
2289dc8ba19STed Chen 	0x02, 0xe0, 0xf2, 0xc7, 0x4f, 0x30, 0x26, 0x62,
2299dc8ba19STed Chen 	0xa1, 0x49, 0xf0, 0xf1, 0x22, 0x72, 0xa0, 0x49,
2309dc8ba19STed Chen 	0xed, 0xf1, 0x25, 0x25, 0x18, 0x1f, 0x97, 0x30,
2319dc8ba19STed Chen 	0x91, 0x30, 0x36, 0x9a, 0x2c, 0x75, 0x32, 0xc3,
2329dc8ba19STed Chen 	0x60, 0x73, 0xb1, 0x49, 0x0d, 0xf1, 0xdc, 0x21,
2339dc8ba19STed Chen 	0xbc, 0x25, 0x27, 0xc6, 0xc0, 0x77, 0x04, 0x13,
2349dc8ba19STed Chen 	0x18, 0xf0, 0x03, 0x13, 0x19, 0xf0, 0x02, 0x13,
2359dc8ba19STed Chen 	0x1a, 0xf0, 0x01, 0x13, 0x1b, 0xf0, 0xd4, 0x49,
2369dc8ba19STed Chen 	0x03, 0xf1, 0x1c, 0xc5, 0x00, 0xbd, 0xcd, 0xc6,
2379dc8ba19STed Chen 	0xc6, 0x67, 0x2e, 0x75, 0xd7, 0x22, 0xdd, 0x26,
2389dc8ba19STed Chen 	0x05, 0x15, 0x1a, 0xf0, 0x14, 0xc6, 0x00, 0xbe,
2399dc8ba19STed Chen 	0x13, 0xc5, 0x00, 0xbd, 0x12, 0xc5, 0x00, 0xbd,
2409dc8ba19STed Chen 	0xf1, 0x49, 0xfb, 0xf1, 0xef, 0xe7, 0xf4, 0x49,
2419dc8ba19STed Chen 	0xfa, 0xf1, 0xec, 0xe7, 0xf3, 0x49, 0xf7, 0xf1,
2429dc8ba19STed Chen 	0xe9, 0xe7, 0xf2, 0x49, 0xf4, 0xf1, 0xe6, 0xe7,
2439dc8ba19STed Chen 	0xb6, 0xc0, 0xf6, 0x14, 0x36, 0x14, 0x62, 0x14,
2449dc8ba19STed Chen 	0x86, 0x15, 0xa0, 0xd1, 0x00, 0x00, 0xc0, 0x75,
2459dc8ba19STed Chen 	0xd0, 0x49, 0x46, 0xf0, 0x26, 0x72, 0xa7, 0x49,
2469dc8ba19STed Chen 	0x43, 0xf0, 0x22, 0x72, 0x25, 0x25, 0x20, 0x1f,
2479dc8ba19STed Chen 	0x97, 0x30, 0x91, 0x30, 0x40, 0x73, 0xf3, 0xc4,
2489dc8ba19STed Chen 	0x1c, 0x40, 0x04, 0xf0, 0xd7, 0x49, 0x05, 0xf1,
2499dc8ba19STed Chen 	0x37, 0xe0, 0x53, 0x48, 0xc0, 0x9d, 0x08, 0x02,
2509dc8ba19STed Chen 	0x40, 0x66, 0x64, 0x27, 0x06, 0x16, 0x30, 0xf1,
2519dc8ba19STed Chen 	0x46, 0x63, 0x3b, 0x13, 0x2d, 0xf1, 0x34, 0x9b,
2529dc8ba19STed Chen 	0x18, 0x1b, 0x93, 0x30, 0x2b, 0xc3, 0x10, 0x1c,
2539dc8ba19STed Chen 	0x2b, 0xe8, 0x01, 0x14, 0x25, 0xf1, 0x00, 0x1d,
2549dc8ba19STed Chen 	0x26, 0x1a, 0x8a, 0x30, 0x22, 0x73, 0xb5, 0x25,
2559dc8ba19STed Chen 	0x0e, 0x0b, 0x00, 0x1c, 0x2c, 0xe8, 0x1f, 0xc7,
2569dc8ba19STed Chen 	0x27, 0x40, 0x1a, 0xf1, 0x38, 0xe8, 0x32, 0x1f,
2579dc8ba19STed Chen 	0x8f, 0x30, 0x08, 0x1b, 0x24, 0xe8, 0x36, 0x72,
2589dc8ba19STed Chen 	0x46, 0x77, 0x00, 0x17, 0x0d, 0xf0, 0x13, 0xc3,
2599dc8ba19STed Chen 	0x1f, 0x40, 0x03, 0xf1, 0x00, 0x1f, 0x46, 0x9f,
2609dc8ba19STed Chen 	0x44, 0x77, 0x9f, 0x44, 0x5f, 0x44, 0x17, 0xe8,
2619dc8ba19STed Chen 	0x0a, 0xc7, 0x27, 0x40, 0x05, 0xf1, 0x02, 0xc3,
2629dc8ba19STed Chen 	0x00, 0xbb, 0x1c, 0x1b, 0xd2, 0x1a, 0xff, 0xc7,
2639dc8ba19STed Chen 	0x00, 0xbf, 0xb8, 0xcd, 0xff, 0xff, 0x02, 0x0c,
2649dc8ba19STed Chen 	0x54, 0xa5, 0xdc, 0xa5, 0x2f, 0x40, 0x05, 0xf1,
2659dc8ba19STed Chen 	0x00, 0x14, 0xfa, 0xf1, 0x01, 0x1c, 0x02, 0xe0,
2669dc8ba19STed Chen 	0x00, 0x1c, 0x80, 0xff, 0xb0, 0x49, 0x04, 0xf0,
2679dc8ba19STed Chen 	0x01, 0x0b, 0xd3, 0xa1, 0x03, 0xe0, 0x02, 0x0b,
2689dc8ba19STed Chen 	0xd3, 0xa5, 0x27, 0x31, 0x20, 0x37, 0x02, 0x0b,
2699dc8ba19STed Chen 	0xd3, 0xa5, 0x27, 0x31, 0x20, 0x37, 0x00, 0x13,
2709dc8ba19STed Chen 	0xfb, 0xf1, 0x80, 0xff, 0x22, 0x73, 0xb5, 0x25,
2719dc8ba19STed Chen 	0x18, 0x1e, 0xde, 0x30, 0xd9, 0x30, 0x64, 0x72,
2729dc8ba19STed Chen 	0x11, 0x1e, 0x68, 0x23, 0x16, 0x31, 0x80, 0xff,
2739dc8ba19STed Chen 	0x08, 0xc2, 0x40, 0x73, 0x3a, 0x48, 0x40, 0x9b,
2749dc8ba19STed Chen 	0x06, 0xff, 0x02, 0xc6, 0x00, 0xbe, 0x4e, 0x18,
2759dc8ba19STed Chen 	0x1e, 0xfc, 0x33, 0xc5, 0xa0, 0x74, 0xc0, 0x49,
2769dc8ba19STed Chen 	0x1f, 0xf0, 0x30, 0xc5, 0xa0, 0x73, 0x00, 0x13,
2779dc8ba19STed Chen 	0x04, 0xf1, 0xa2, 0x73, 0x00, 0x13, 0x14, 0xf0,
2789dc8ba19STed Chen 	0x28, 0xc5, 0xa0, 0x74, 0xc8, 0x49, 0x1b, 0xf1,
2799dc8ba19STed Chen 	0x26, 0xc5, 0xa0, 0x76, 0xa2, 0x74, 0x01, 0x06,
2809dc8ba19STed Chen 	0x20, 0x37, 0xa0, 0x9e, 0xa2, 0x9c, 0x1e, 0xc5,
2819dc8ba19STed Chen 	0xa2, 0x73, 0x23, 0x40, 0x10, 0xf8, 0x04, 0xf3,
2829dc8ba19STed Chen 	0xa0, 0x73, 0x33, 0x40, 0x0c, 0xf8, 0x15, 0xc5,
2839dc8ba19STed Chen 	0xa0, 0x74, 0x41, 0x48, 0xa0, 0x9c, 0x14, 0xc5,
2849dc8ba19STed Chen 	0xa0, 0x76, 0x62, 0x48, 0xe0, 0x48, 0xa0, 0x9e,
2859dc8ba19STed Chen 	0x10, 0xc6, 0x00, 0xbe, 0x0a, 0xc5, 0xa0, 0x74,
2869dc8ba19STed Chen 	0x48, 0x48, 0xa0, 0x9c, 0x0b, 0xc5, 0x20, 0x1e,
2879dc8ba19STed Chen 	0xa0, 0x9e, 0xe5, 0x48, 0xa0, 0x9e, 0xf0, 0xe7,
2889dc8ba19STed Chen 	0xbc, 0xc0, 0xc8, 0xd2, 0xcc, 0xd2, 0x28, 0xe4,
2899dc8ba19STed Chen 	0x22, 0x02, 0xf0, 0xc0, 0x02, 0xc6, 0x00, 0xbe,
2909dc8ba19STed Chen 	0x00, 0x00, 0x02, 0xc6, 0x00, 0xbe, 0x00, 0x00,
2919dc8ba19STed Chen 	0x02, 0xc6, 0x00, 0xbe, 0x00, 0x00, 0x02, 0xc6,
2929dc8ba19STed Chen 	0x00, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
2939dc8ba19STed Chen 
2949dc8ba19STed Chen static u16 r8152b_pla_patch_a2_bp[] = {
2959dc8ba19STed Chen 	0xfc28, 0x8000, 0xfc28, 0x17a5, 0xfc2a, 0x13ad,
2969dc8ba19STed Chen 	0xfc2c, 0x184d, 0xfc2e, 0x01e1 };
2979dc8ba19STed Chen 
2989dc8ba19STed Chen static u16 r8153_ram_code_a[] = {
2999dc8ba19STed Chen 	0xE86C, 0xA000, 0xB436, 0xB820, 0xB438, 0x0290, 0xB436, 0xA012,
3009dc8ba19STed Chen 	0xB438, 0x0000, 0xB436, 0xA014, 0xB438, 0x2c04, 0xB438, 0x2c18,
3019dc8ba19STed Chen 	0xB438, 0x2c45, 0xB438, 0x2c45, 0xB438, 0xd502, 0xB438, 0x8301,
3029dc8ba19STed Chen 	0xB438, 0x8306, 0xB438, 0xd500, 0xB438, 0x8208, 0xB438, 0xd501,
3039dc8ba19STed Chen 	0xB438, 0xe018, 0xB438, 0x0308, 0xB438, 0x60f2, 0xB438, 0x8404,
3049dc8ba19STed Chen 	0xB438, 0x607d, 0xB438, 0xc117, 0xB438, 0x2c16, 0xB438, 0xc116,
3059dc8ba19STed Chen 	0xB438, 0x2c16, 0xB438, 0x607d, 0xB438, 0xc117, 0xB438, 0xa404,
3069dc8ba19STed Chen 	0xB438, 0xd500, 0xB438, 0x0800, 0xB438, 0xd501, 0xB438, 0x62d2,
3079dc8ba19STed Chen 	0xB438, 0x615d, 0xB438, 0xc115, 0xB438, 0xa404, 0xB438, 0xc307,
3089dc8ba19STed Chen 	0xB438, 0xd502, 0xB438, 0x8301, 0xB438, 0x8306, 0xB438, 0xd500,
3099dc8ba19STed Chen 	0xB438, 0x8208, 0xB438, 0x2c42, 0xB438, 0xc114, 0xB438, 0x8404,
3109dc8ba19STed Chen 	0xB438, 0xc317, 0xB438, 0xd701, 0xB438, 0x435d, 0xB438, 0xd500,
3119dc8ba19STed Chen 	0xB438, 0xa208, 0xB438, 0xd502, 0xB438, 0xa306, 0xB438, 0xa301,
3129dc8ba19STed Chen 	0xB438, 0x2c42, 0xB438, 0x8404, 0xB438, 0x613d, 0xB438, 0xc115,
3139dc8ba19STed Chen 	0xB438, 0xc307, 0xB438, 0xd502, 0xB438, 0x8301, 0xB438, 0x8306,
3149dc8ba19STed Chen 	0xB438, 0xd500, 0xB438, 0x8208, 0xB438, 0x2c42, 0xB438, 0xc114,
3159dc8ba19STed Chen 	0xB438, 0xc317, 0xB438, 0xd701, 0xB438, 0x40dd, 0xB438, 0xd500,
3169dc8ba19STed Chen 	0xB438, 0xa208, 0xB438, 0xd502, 0xB438, 0xa306, 0xB438, 0xa301,
3179dc8ba19STed Chen 	0xB438, 0xd500, 0xB438, 0xd702, 0xB438, 0x0800, 0xB436, 0xA01A,
3189dc8ba19STed Chen 	0xB438, 0x0000, 0xB436, 0xA006, 0xB438, 0x0fff, 0xB436, 0xA004,
3199dc8ba19STed Chen 	0xB438, 0x0fff, 0xB436, 0xA002, 0xB438, 0x05a3, 0xB436, 0xA000,
3209dc8ba19STed Chen 	0xB438, 0x3591, 0xB436, 0xB820, 0xB438, 0x0210 };
3219dc8ba19STed Chen 
3229dc8ba19STed Chen static u8 r8153_usb_patch_c[] = {
3239dc8ba19STed Chen 	0x08, 0xe0, 0x0a, 0xe0, 0x14, 0xe0, 0x2e, 0xe0,
3249dc8ba19STed Chen 	0x37, 0xe0, 0x3e, 0xe0, 0x6d, 0xe0, 0x78, 0xe0,
3259dc8ba19STed Chen 	0x02, 0xc5, 0x00, 0xbd, 0x38, 0x3b, 0xdb, 0x49,
3269dc8ba19STed Chen 	0x04, 0xf1, 0x06, 0xc3, 0x00, 0xbb, 0x5a, 0x02,
3279dc8ba19STed Chen 	0x05, 0xc4, 0x03, 0xc3, 0x00, 0xbb, 0xa4, 0x04,
3289dc8ba19STed Chen 	0x7e, 0x02, 0x30, 0xd4, 0x30, 0x18, 0x18, 0xc1,
3299dc8ba19STed Chen 	0x0c, 0xe8, 0x17, 0xc6, 0xc7, 0x65, 0xd0, 0x49,
3309dc8ba19STed Chen 	0x05, 0xf0, 0x32, 0x48, 0x02, 0xc2, 0x00, 0xba,
3319dc8ba19STed Chen 	0x3e, 0x16, 0x02, 0xc2, 0x00, 0xba, 0x48, 0x16,
3329dc8ba19STed Chen 	0x02, 0xb4, 0x09, 0xc2, 0x40, 0x99, 0x0e, 0x48,
3339dc8ba19STed Chen 	0x42, 0x98, 0x42, 0x70, 0x8e, 0x49, 0xfe, 0xf1,
3349dc8ba19STed Chen 	0x02, 0xb0, 0x80, 0xff, 0xc0, 0xd4, 0xe4, 0x40,
3359dc8ba19STed Chen 	0x20, 0xd4, 0xb0, 0x49, 0x04, 0xf0, 0x30, 0x18,
3369dc8ba19STed Chen 	0x06, 0xc1, 0xef, 0xef, 0xfa, 0xc7, 0x02, 0xc0,
3379dc8ba19STed Chen 	0x00, 0xb8, 0xd0, 0x10, 0xe4, 0x4b, 0x07, 0xc3,
3389dc8ba19STed Chen 	0x70, 0x61, 0x12, 0x48, 0x70, 0x89, 0x02, 0xc3,
3399dc8ba19STed Chen 	0x00, 0xbb, 0x9c, 0x15, 0x20, 0xd4, 0x2b, 0xc5,
3409dc8ba19STed Chen 	0xa0, 0x77, 0x00, 0x1c, 0xa0, 0x9c, 0x28, 0xc5,
3419dc8ba19STed Chen 	0xa0, 0x64, 0xc0, 0x48, 0xc1, 0x48, 0xc2, 0x48,
3429dc8ba19STed Chen 	0xa0, 0x8c, 0xb1, 0x64, 0xc0, 0x48, 0xb1, 0x8c,
3439dc8ba19STed Chen 	0x20, 0xc5, 0xa0, 0x64, 0x40, 0x48, 0x41, 0x48,
3449dc8ba19STed Chen 	0xc2, 0x48, 0xa0, 0x8c, 0x19, 0xc5, 0xa4, 0x64,
3459dc8ba19STed Chen 	0x44, 0x48, 0xa4, 0x8c, 0xb1, 0x64, 0x40, 0x48,
3469dc8ba19STed Chen 	0xb1, 0x8c, 0x14, 0xc4, 0x80, 0x73, 0x13, 0xc4,
3479dc8ba19STed Chen 	0x82, 0x9b, 0x11, 0x1b, 0x80, 0x9b, 0x0c, 0xc5,
3489dc8ba19STed Chen 	0xa0, 0x64, 0x40, 0x48, 0x41, 0x48, 0x42, 0x48,
3499dc8ba19STed Chen 	0xa0, 0x8c, 0x05, 0xc5, 0xa0, 0x9f, 0x02, 0xc5,
3509dc8ba19STed Chen 	0x00, 0xbd, 0x6c, 0x3a, 0x1e, 0xfc, 0x10, 0xd8,
3519dc8ba19STed Chen 	0x86, 0xd4, 0xf8, 0xcb, 0x20, 0xe4, 0x0a, 0xc0,
3529dc8ba19STed Chen 	0x16, 0x61, 0x91, 0x48, 0x16, 0x89, 0x07, 0xc0,
3539dc8ba19STed Chen 	0x11, 0x19, 0x0c, 0x89, 0x02, 0xc1, 0x00, 0xb9,
3549dc8ba19STed Chen 	0x02, 0x06, 0x00, 0xd4, 0x40, 0xb4, 0xfe, 0xc0,
3559dc8ba19STed Chen 	0x16, 0x61, 0x91, 0x48, 0x16, 0x89, 0xfb, 0xc0,
3569dc8ba19STed Chen 	0x11, 0x19, 0x0c, 0x89, 0x02, 0xc1, 0x00, 0xb9,
3579dc8ba19STed Chen 	0xd2, 0x05, 0x00, 0x00 };
3589dc8ba19STed Chen 
3599dc8ba19STed Chen static u16 r8153_usb_patch_c_bp[] = {
3609dc8ba19STed Chen 	0xfc26, 0xa000, 0xfc28, 0x3b34, 0xfc2a, 0x027c, 0xfc2c, 0x162c,
3619dc8ba19STed Chen 	0xfc2e, 0x10ce, 0xfc30, 0x0000, 0xfc32, 0x3a28, 0xfc34, 0x05f8,
3629dc8ba19STed Chen 	0xfc36, 0x05c8 };
3639dc8ba19STed Chen 
3649dc8ba19STed Chen static u8 r8153_pla_patch_c[] = {
3659dc8ba19STed Chen 	0x08, 0xe0, 0xea, 0xe0, 0xf2, 0xe0, 0x04, 0xe1,
3669dc8ba19STed Chen 	0x06, 0xe1, 0x08, 0xe1, 0x40, 0xe1, 0xf1, 0xe1,
3679dc8ba19STed Chen 	0x14, 0xc2, 0x40, 0x73, 0xba, 0x48, 0x40, 0x9b,
3689dc8ba19STed Chen 	0x11, 0xc2, 0x40, 0x73, 0xb0, 0x49, 0x17, 0xf0,
3699dc8ba19STed Chen 	0xbf, 0x49, 0x03, 0xf1, 0x09, 0xc5, 0x00, 0xbd,
3709dc8ba19STed Chen 	0xb1, 0x49, 0x11, 0xf0, 0xb1, 0x48, 0x40, 0x9b,
3719dc8ba19STed Chen 	0x02, 0xc2, 0x00, 0xba, 0xde, 0x18, 0x00, 0xe0,
3729dc8ba19STed Chen 	0x1e, 0xfc, 0xbc, 0xc0, 0xf0, 0xc0, 0xde, 0xe8,
3739dc8ba19STed Chen 	0x00, 0x80, 0x00, 0x20, 0x2c, 0x75, 0xd4, 0x49,
3749dc8ba19STed Chen 	0x12, 0xf1, 0x32, 0xe0, 0xf8, 0xc2, 0x46, 0x71,
3759dc8ba19STed Chen 	0xf7, 0xc2, 0x40, 0x73, 0xbe, 0x49, 0x03, 0xf1,
3769dc8ba19STed Chen 	0xf5, 0xc7, 0x02, 0xe0, 0xf2, 0xc7, 0x4f, 0x30,
3779dc8ba19STed Chen 	0x26, 0x62, 0xa1, 0x49, 0xf0, 0xf1, 0x22, 0x72,
3789dc8ba19STed Chen 	0xa0, 0x49, 0xed, 0xf1, 0x25, 0x25, 0x18, 0x1f,
3799dc8ba19STed Chen 	0x97, 0x30, 0x91, 0x30, 0x36, 0x9a, 0x2c, 0x75,
3809dc8ba19STed Chen 	0x3c, 0xc3, 0x60, 0x73, 0xb1, 0x49, 0x0d, 0xf1,
3819dc8ba19STed Chen 	0xdc, 0x21, 0xbc, 0x25, 0x30, 0xc6, 0xc0, 0x77,
3829dc8ba19STed Chen 	0x04, 0x13, 0x21, 0xf0, 0x03, 0x13, 0x22, 0xf0,
3839dc8ba19STed Chen 	0x02, 0x13, 0x23, 0xf0, 0x01, 0x13, 0x24, 0xf0,
3849dc8ba19STed Chen 	0x08, 0x13, 0x08, 0xf1, 0x2e, 0x73, 0xba, 0x21,
3859dc8ba19STed Chen 	0xbd, 0x25, 0x05, 0x13, 0x03, 0xf1, 0x24, 0xc5,
3869dc8ba19STed Chen 	0x00, 0xbd, 0xd4, 0x49, 0x03, 0xf1, 0x1c, 0xc5,
3879dc8ba19STed Chen 	0x00, 0xbd, 0xc4, 0xc6, 0xc6, 0x67, 0x2e, 0x75,
3889dc8ba19STed Chen 	0xd7, 0x22, 0xdd, 0x26, 0x05, 0x15, 0x1b, 0xf0,
3899dc8ba19STed Chen 	0x14, 0xc6, 0x00, 0xbe, 0x13, 0xc5, 0x00, 0xbd,
3909dc8ba19STed Chen 	0x12, 0xc5, 0x00, 0xbd, 0xf1, 0x49, 0xfb, 0xf1,
3919dc8ba19STed Chen 	0xef, 0xe7, 0xf4, 0x49, 0xfa, 0xf1, 0xec, 0xe7,
3929dc8ba19STed Chen 	0xf3, 0x49, 0xf7, 0xf1, 0xe9, 0xe7, 0xf2, 0x49,
3939dc8ba19STed Chen 	0xf4, 0xf1, 0xe6, 0xe7, 0xb6, 0xc0, 0x50, 0x14,
3949dc8ba19STed Chen 	0x90, 0x13, 0xbc, 0x13, 0xf2, 0x14, 0x00, 0xa0,
3959dc8ba19STed Chen 	0xa0, 0xd1, 0x00, 0x00, 0xc0, 0x75, 0xd0, 0x49,
3969dc8ba19STed Chen 	0x46, 0xf0, 0x26, 0x72, 0xa7, 0x49, 0x43, 0xf0,
3979dc8ba19STed Chen 	0x22, 0x72, 0x25, 0x25, 0x20, 0x1f, 0x97, 0x30,
3989dc8ba19STed Chen 	0x91, 0x30, 0x40, 0x73, 0xf3, 0xc4, 0x1c, 0x40,
3999dc8ba19STed Chen 	0x04, 0xf0, 0xd7, 0x49, 0x05, 0xf1, 0x37, 0xe0,
4009dc8ba19STed Chen 	0x53, 0x48, 0xc0, 0x9d, 0x08, 0x02, 0x40, 0x66,
4019dc8ba19STed Chen 	0x64, 0x27, 0x06, 0x16, 0x30, 0xf1, 0x46, 0x63,
4029dc8ba19STed Chen 	0x3b, 0x13, 0x2d, 0xf1, 0x34, 0x9b, 0x18, 0x1b,
4039dc8ba19STed Chen 	0x93, 0x30, 0x2b, 0xc3, 0x10, 0x1c, 0x2b, 0xe8,
4049dc8ba19STed Chen 	0x01, 0x14, 0x25, 0xf1, 0x00, 0x1d, 0x26, 0x1a,
4059dc8ba19STed Chen 	0x8a, 0x30, 0x22, 0x73, 0xb5, 0x25, 0x0e, 0x0b,
4069dc8ba19STed Chen 	0x00, 0x1c, 0x2c, 0xe8, 0x1f, 0xc7, 0x27, 0x40,
4079dc8ba19STed Chen 	0x1a, 0xf1, 0x38, 0xe8, 0x32, 0x1f, 0x8f, 0x30,
4089dc8ba19STed Chen 	0x08, 0x1b, 0x24, 0xe8, 0x36, 0x72, 0x46, 0x77,
4099dc8ba19STed Chen 	0x00, 0x17, 0x0d, 0xf0, 0x13, 0xc3, 0x1f, 0x40,
4109dc8ba19STed Chen 	0x03, 0xf1, 0x00, 0x1f, 0x46, 0x9f, 0x44, 0x77,
4119dc8ba19STed Chen 	0x9f, 0x44, 0x5f, 0x44, 0x17, 0xe8, 0x0a, 0xc7,
4129dc8ba19STed Chen 	0x27, 0x40, 0x05, 0xf1, 0x02, 0xc3, 0x00, 0xbb,
4139dc8ba19STed Chen 	0xbe, 0x1a, 0x74, 0x14, 0xff, 0xc7, 0x00, 0xbf,
4149dc8ba19STed Chen 	0xb8, 0xcd, 0xff, 0xff, 0x02, 0x0c, 0x54, 0xa5,
4159dc8ba19STed Chen 	0xdc, 0xa5, 0x2f, 0x40, 0x05, 0xf1, 0x00, 0x14,
4169dc8ba19STed Chen 	0xfa, 0xf1, 0x01, 0x1c, 0x02, 0xe0, 0x00, 0x1c,
4179dc8ba19STed Chen 	0x80, 0xff, 0xb0, 0x49, 0x04, 0xf0, 0x01, 0x0b,
4189dc8ba19STed Chen 	0xd3, 0xa1, 0x03, 0xe0, 0x02, 0x0b, 0xd3, 0xa5,
4199dc8ba19STed Chen 	0x27, 0x31, 0x20, 0x37, 0x02, 0x0b, 0xd3, 0xa5,
4209dc8ba19STed Chen 	0x27, 0x31, 0x20, 0x37, 0x00, 0x13, 0xfb, 0xf1,
4219dc8ba19STed Chen 	0x80, 0xff, 0x22, 0x73, 0xb5, 0x25, 0x18, 0x1e,
4229dc8ba19STed Chen 	0xde, 0x30, 0xd9, 0x30, 0x64, 0x72, 0x11, 0x1e,
4239dc8ba19STed Chen 	0x68, 0x23, 0x16, 0x31, 0x80, 0xff, 0x08, 0xc2,
4249dc8ba19STed Chen 	0x40, 0x73, 0x3a, 0x48, 0x40, 0x9b, 0x06, 0xff,
4259dc8ba19STed Chen 	0x02, 0xc6, 0x00, 0xbe, 0xcc, 0x17, 0x1e, 0xfc,
4269dc8ba19STed Chen 	0x2c, 0x75, 0xdc, 0x21, 0xbc, 0x25, 0x04, 0x13,
4279dc8ba19STed Chen 	0x0b, 0xf0, 0x03, 0x13, 0x09, 0xf0, 0x02, 0x13,
4289dc8ba19STed Chen 	0x07, 0xf0, 0x01, 0x13, 0x05, 0xf0, 0x08, 0x13,
4299dc8ba19STed Chen 	0x03, 0xf0, 0x04, 0xc3, 0x00, 0xbb, 0x03, 0xc3,
4309dc8ba19STed Chen 	0x00, 0xbb, 0x50, 0x17, 0x3a, 0x17, 0x02, 0xc6,
4319dc8ba19STed Chen 	0x00, 0xbe, 0x00, 0x00, 0x02, 0xc6, 0x00, 0xbe,
4329dc8ba19STed Chen 	0x00, 0x00, 0x33, 0xc5, 0xa0, 0x74, 0xc0, 0x49,
4339dc8ba19STed Chen 	0x1f, 0xf0, 0x30, 0xc5, 0xa0, 0x73, 0x00, 0x13,
4349dc8ba19STed Chen 	0x04, 0xf1, 0xa2, 0x73, 0x00, 0x13, 0x14, 0xf0,
4359dc8ba19STed Chen 	0x28, 0xc5, 0xa0, 0x74, 0xc8, 0x49, 0x1b, 0xf1,
4369dc8ba19STed Chen 	0x26, 0xc5, 0xa0, 0x76, 0xa2, 0x74, 0x01, 0x06,
4379dc8ba19STed Chen 	0x20, 0x37, 0xa0, 0x9e, 0xa2, 0x9c, 0x1e, 0xc5,
4389dc8ba19STed Chen 	0xa2, 0x73, 0x23, 0x40, 0x10, 0xf8, 0x04, 0xf3,
4399dc8ba19STed Chen 	0xa0, 0x73, 0x33, 0x40, 0x0c, 0xf8, 0x15, 0xc5,
4409dc8ba19STed Chen 	0xa0, 0x74, 0x41, 0x48, 0xa0, 0x9c, 0x14, 0xc5,
4419dc8ba19STed Chen 	0xa0, 0x76, 0x62, 0x48, 0xe0, 0x48, 0xa0, 0x9e,
4429dc8ba19STed Chen 	0x10, 0xc6, 0x00, 0xbe, 0x0a, 0xc5, 0xa0, 0x74,
4439dc8ba19STed Chen 	0x48, 0x48, 0xa0, 0x9c, 0x0b, 0xc5, 0x20, 0x1e,
4449dc8ba19STed Chen 	0xa0, 0x9e, 0xe5, 0x48, 0xa0, 0x9e, 0xf0, 0xe7,
4459dc8ba19STed Chen 	0xbc, 0xc0, 0xc8, 0xd2, 0xcc, 0xd2, 0x28, 0xe4,
4469dc8ba19STed Chen 	0xfa, 0x01, 0xf0, 0xc0, 0x18, 0x89, 0x00, 0x1d,
4479dc8ba19STed Chen 	0x43, 0xc3, 0x62, 0x62, 0xa0, 0x49, 0x06, 0xf0,
4489dc8ba19STed Chen 	0x41, 0xc0, 0x02, 0x71, 0x60, 0x99, 0x3f, 0xc1,
4499dc8ba19STed Chen 	0x03, 0xe0, 0x3c, 0xc0, 0x3d, 0xc1, 0x02, 0x99,
4509dc8ba19STed Chen 	0x00, 0x61, 0x67, 0x11, 0x3d, 0xf1, 0x69, 0x33,
4519dc8ba19STed Chen 	0x34, 0xc0, 0x28, 0x40, 0xf7, 0xf1, 0x35, 0xc0,
4529dc8ba19STed Chen 	0x00, 0x19, 0x81, 0x1b, 0x89, 0xe8, 0x32, 0xc0,
4539dc8ba19STed Chen 	0x04, 0x1a, 0x84, 0x1b, 0x85, 0xe8, 0x7a, 0xe8,
4549dc8ba19STed Chen 	0xa3, 0x49, 0xfe, 0xf0, 0x2c, 0xc0, 0x76, 0xe8,
4559dc8ba19STed Chen 	0xa1, 0x48, 0x29, 0xc0, 0x84, 0x1b, 0x7c, 0xe8,
4569dc8ba19STed Chen 	0x00, 0x1d, 0x69, 0x33, 0x00, 0x1e, 0x01, 0x06,
4579dc8ba19STed Chen 	0xff, 0x18, 0x30, 0x40, 0xfd, 0xf1, 0x7f, 0xc0,
4589dc8ba19STed Chen 	0x00, 0x76, 0x2e, 0x40, 0xf7, 0xf1, 0x21, 0x48,
4599dc8ba19STed Chen 	0x1a, 0xc0, 0x84, 0x1b, 0x6d, 0xe8, 0x76, 0xc0,
4609dc8ba19STed Chen 	0x61, 0xe8, 0xa1, 0x49, 0xfd, 0xf0, 0x12, 0xc0,
4619dc8ba19STed Chen 	0x00, 0x1a, 0x84, 0x1b, 0x65, 0xe8, 0x5a, 0xe8,
4629dc8ba19STed Chen 	0xa5, 0x49, 0xfe, 0xf0, 0x0a, 0xc0, 0x01, 0x19,
4639dc8ba19STed Chen 	0x81, 0x1b, 0x5e, 0xe8, 0x48, 0xe0, 0x8c, 0xd3,
4649dc8ba19STed Chen 	0xb8, 0x0b, 0x50, 0xe8, 0x83, 0x00, 0x82, 0x00,
4659dc8ba19STed Chen 	0x20, 0xb4, 0x10, 0xd8, 0x84, 0xd4, 0xfa, 0xc0,
4669dc8ba19STed Chen 	0x00, 0x61, 0x9c, 0x20, 0x9c, 0x24, 0x06, 0x11,
4679dc8ba19STed Chen 	0x06, 0xf1, 0x5d, 0xc0, 0x00, 0x61, 0x11, 0x48,
4689dc8ba19STed Chen 	0x00, 0x89, 0x35, 0xe0, 0x00, 0x11, 0x02, 0xf1,
4699dc8ba19STed Chen 	0x03, 0xe0, 0x04, 0x11, 0x06, 0xf1, 0x53, 0xc0,
4709dc8ba19STed Chen 	0x00, 0x61, 0x92, 0x48, 0x00, 0x89, 0x2b, 0xe0,
4719dc8ba19STed Chen 	0x05, 0x11, 0x08, 0xf1, 0x4c, 0xc0, 0x00, 0x61,
4729dc8ba19STed Chen 	0x91, 0x49, 0x04, 0xf0, 0x91, 0x48, 0x00, 0x89,
4739dc8ba19STed Chen 	0x11, 0xe0, 0xdc, 0xc0, 0x00, 0x61, 0x98, 0x20,
4749dc8ba19STed Chen 	0x98, 0x24, 0x25, 0x11, 0x1c, 0xf1, 0x40, 0xc0,
4759dc8ba19STed Chen 	0x25, 0xe8, 0x95, 0x49, 0x18, 0xf0, 0xd2, 0xc0,
4769dc8ba19STed Chen 	0x00, 0x61, 0x98, 0x20, 0x98, 0x24, 0x25, 0x11,
4779dc8ba19STed Chen 	0x12, 0xf1, 0x35, 0xc0, 0x00, 0x61, 0x92, 0x49,
4789dc8ba19STed Chen 	0x0e, 0xf1, 0x12, 0x48, 0x00, 0x89, 0x2d, 0xc0,
4799dc8ba19STed Chen 	0x00, 0x19, 0x00, 0x89, 0x2b, 0xc0, 0x01, 0x89,
4809dc8ba19STed Chen 	0x27, 0xc0, 0x10, 0xe8, 0x25, 0xc0, 0x12, 0x48,
4819dc8ba19STed Chen 	0x81, 0x1b, 0x16, 0xe8, 0xb9, 0xc3, 0x62, 0x62,
4829dc8ba19STed Chen 	0xa0, 0x49, 0x05, 0xf0, 0xb5, 0xc3, 0x60, 0x71,
4839dc8ba19STed Chen 	0xb5, 0xc0, 0x02, 0x99, 0x02, 0xc0, 0x00, 0xb8,
4849dc8ba19STed Chen 	0xd6, 0x07, 0x13, 0xc4, 0x84, 0x98, 0x00, 0x1b,
4859dc8ba19STed Chen 	0x86, 0x8b, 0x86, 0x73, 0xbf, 0x49, 0xfe, 0xf1,
4869dc8ba19STed Chen 	0x80, 0x71, 0x82, 0x72, 0x80, 0xff, 0x09, 0xc4,
4879dc8ba19STed Chen 	0x84, 0x98, 0x80, 0x99, 0x82, 0x9a, 0x86, 0x8b,
4889dc8ba19STed Chen 	0x86, 0x73, 0xbf, 0x49, 0xfe, 0xf1, 0x80, 0xff,
4899dc8ba19STed Chen 	0x08, 0xea, 0x10, 0xd4, 0x88, 0xd3, 0x30, 0xd4,
4909dc8ba19STed Chen 	0x10, 0xc0, 0x12, 0xe8, 0x8a, 0xd3, 0x00, 0xd8,
4919dc8ba19STed Chen 	0x02, 0xc0, 0x00, 0xb8, 0xe0, 0x08, 0x00, 0x00,
4929dc8ba19STed Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
4939dc8ba19STed Chen 
4949dc8ba19STed Chen static u16 r8153_pla_patch_c_bp[] = {
4959dc8ba19STed Chen 	0xfc26, 0x8000, 0xfc28, 0x1306, 0xfc2a, 0x17ca, 0xfc2c, 0x171e,
4969dc8ba19STed Chen 	0xfc2e, 0x0000, 0xfc30, 0x0000, 0xfc32, 0x01b4, 0xfc34, 0x07d4,
4979dc8ba19STed Chen 	0xfc36, 0x0894, 0xfc38, 0x00e7 };
4989dc8ba19STed Chen 
4999dc8ba19STed Chen static u16 r8153_ram_code_bc[] = {
5009dc8ba19STed Chen 	0xB436, 0xB820, 0xB438, 0x0290, 0xB436, 0xA012, 0xB438, 0x0000,
5019dc8ba19STed Chen 	0xB436, 0xA014, 0xB438, 0x2c04, 0xB438, 0x2c07, 0xB438, 0x2c0a,
5029dc8ba19STed Chen 	0xB438, 0x2c0d, 0xB438, 0xa240, 0xB438, 0xa104, 0xB438, 0x292d,
5039dc8ba19STed Chen 	0xB438, 0x8620, 0xB438, 0xa480, 0xB438, 0x2a2c, 0xB438, 0x8480,
5049dc8ba19STed Chen 	0xB438, 0xa101, 0xB438, 0x2a36, 0xB438, 0xd056, 0xB438, 0x2223,
5059dc8ba19STed Chen 	0xB436, 0xA01A, 0xB438, 0x0000, 0xB436, 0xA006, 0xB438, 0x0222,
5069dc8ba19STed Chen 	0xB436, 0xA004, 0xB438, 0x0a35, 0xB436, 0xA002, 0xB438, 0x0a2b,
5079dc8ba19STed Chen 	0xB436, 0xA000, 0xB438, 0xf92c, 0xB436, 0xB820, 0xB438, 0x0210 };
5089dc8ba19STed Chen 
5099dc8ba19STed Chen static u8 r8153_usb_patch_b[] = {
5109dc8ba19STed Chen 	0x08, 0xe0, 0x0f, 0xe0, 0x18, 0xe0, 0x24, 0xe0,
5119dc8ba19STed Chen 	0x26, 0xe0, 0x3a, 0xe0, 0x84, 0xe0, 0x9c, 0xe0,
5129dc8ba19STed Chen 	0xc2, 0x49, 0x04, 0xf0, 0x02, 0xc0, 0x00, 0xb8,
5139dc8ba19STed Chen 	0x14, 0x18, 0x02, 0xc0, 0x00, 0xb8, 0x2e, 0x18,
5149dc8ba19STed Chen 	0x06, 0x89, 0x08, 0xc0, 0x0c, 0x61, 0x92, 0x48,
5159dc8ba19STed Chen 	0x93, 0x48, 0x0c, 0x89, 0x02, 0xc0, 0x00, 0xb8,
5169dc8ba19STed Chen 	0x08, 0x05, 0x40, 0xb4, 0x16, 0x89, 0x6d, 0xc0,
5179dc8ba19STed Chen 	0x00, 0x61, 0x95, 0x49, 0x06, 0xf0, 0xfa, 0xc0,
5189dc8ba19STed Chen 	0x0c, 0x61, 0x92, 0x48, 0x93, 0x48, 0x0c, 0x89,
5199dc8ba19STed Chen 	0x02, 0xc0, 0x00, 0xb8, 0xe2, 0x04, 0x02, 0xc2,
5209dc8ba19STed Chen 	0x00, 0xba, 0xec, 0x11, 0x60, 0x60, 0x85, 0x49,
5219dc8ba19STed Chen 	0x0d, 0xf1, 0x11, 0xc6, 0xd2, 0x61, 0x91, 0x49,
5229dc8ba19STed Chen 	0xfd, 0xf0, 0x74, 0x60, 0x04, 0x48, 0x74, 0x88,
5239dc8ba19STed Chen 	0x08, 0xc6, 0x08, 0xc0, 0xc4, 0x98, 0x01, 0x18,
5249dc8ba19STed Chen 	0xc0, 0x88, 0x02, 0xc0, 0x00, 0xb8, 0x6e, 0x12,
5259dc8ba19STed Chen 	0x04, 0xe4, 0x0d, 0x00, 0x00, 0xd4, 0xd1, 0x49,
5269dc8ba19STed Chen 	0x3c, 0xf1, 0xd2, 0x49, 0x16, 0xf1, 0xd3, 0x49,
5279dc8ba19STed Chen 	0x18, 0xf1, 0xd4, 0x49, 0x19, 0xf1, 0xd5, 0x49,
5289dc8ba19STed Chen 	0x1a, 0xf1, 0xd6, 0x49, 0x1b, 0xf1, 0xd7, 0x49,
5299dc8ba19STed Chen 	0x1c, 0xf1, 0xd8, 0x49, 0x1d, 0xf1, 0xd9, 0x49,
5309dc8ba19STed Chen 	0x20, 0xf1, 0xda, 0x49, 0x23, 0xf1, 0xdb, 0x49,
5319dc8ba19STed Chen 	0x24, 0xf1, 0x02, 0xc4, 0x00, 0xbc, 0x20, 0x04,
5329dc8ba19STed Chen 	0xe5, 0x8e, 0x02, 0xc4, 0x00, 0xbc, 0x14, 0x02,
5339dc8ba19STed Chen 	0x02, 0xc4, 0x00, 0xbc, 0x16, 0x02, 0x02, 0xc4,
5349dc8ba19STed Chen 	0x00, 0xbc, 0x18, 0x02, 0x02, 0xc4, 0x00, 0xbc,
5359dc8ba19STed Chen 	0x1a, 0x02, 0x02, 0xc4, 0x00, 0xbc, 0x1c, 0x02,
5369dc8ba19STed Chen 	0x02, 0xc4, 0x00, 0xbc, 0x94, 0x02, 0x10, 0xc7,
5379dc8ba19STed Chen 	0xe0, 0x8e, 0x02, 0xc4, 0x00, 0xbc, 0x8a, 0x02,
5389dc8ba19STed Chen 	0x0b, 0xc7, 0xe4, 0x8e, 0x02, 0xc4, 0x00, 0xbc,
5399dc8ba19STed Chen 	0x88, 0x02, 0x02, 0xc4, 0x00, 0xbc, 0x6e, 0x02,
5409dc8ba19STed Chen 	0x02, 0xc4, 0x00, 0xbc, 0x5a, 0x02, 0x30, 0xe4,
5419dc8ba19STed Chen 	0x0c, 0xc3, 0x60, 0x64, 0xc5, 0x49, 0x04, 0xf1,
5429dc8ba19STed Chen 	0x74, 0x64, 0xc4, 0x48, 0x74, 0x8c, 0x06, 0xc3,
5439dc8ba19STed Chen 	0x64, 0x8e, 0x02, 0xc4, 0x00, 0xbc, 0x20, 0x04,
5449dc8ba19STed Chen 	0x00, 0xd8, 0x00, 0xe4, 0xb2, 0xc0, 0x00, 0x61,
5459dc8ba19STed Chen 	0x90, 0x49, 0x09, 0xf1, 0x8b, 0xc6, 0xca, 0x61,
5469dc8ba19STed Chen 	0x94, 0x49, 0x0e, 0xf1, 0xf6, 0xc6, 0xda, 0x60,
5479dc8ba19STed Chen 	0x81, 0x49, 0x0a, 0xf0, 0x65, 0x60, 0x03, 0x48,
5489dc8ba19STed Chen 	0x65, 0x88, 0xef, 0xc6, 0xdc, 0x60, 0x80, 0x48,
5499dc8ba19STed Chen 	0xdc, 0x88, 0x05, 0xc6, 0x00, 0xbe, 0x02, 0xc6,
5509dc8ba19STed Chen 	0x00, 0xbe, 0x36, 0x13, 0x4c, 0x17, 0x99, 0xc4,
5519dc8ba19STed Chen 	0x80, 0x65, 0xd0, 0x49, 0x04, 0xf1, 0xfa, 0x75,
5529dc8ba19STed Chen 	0x04, 0xc4, 0x00, 0xbc, 0x03, 0xc4, 0x00, 0xbc,
5539dc8ba19STed Chen 	0x9a, 0x00, 0xee, 0x01 };
5549dc8ba19STed Chen 
5559dc8ba19STed Chen static u16 r8153_usb_patch_b_bp[] = {
5569dc8ba19STed Chen 	0xfc26, 0xa000, 0xfc28, 0x180c, 0xfc2a, 0x0506, 0xfc2c, 0x04E0,
5579dc8ba19STed Chen 	0xfc2e, 0x11E4, 0xfc30, 0x125C, 0xfc32, 0x0232, 0xfc34, 0x131E,
5589dc8ba19STed Chen 	0xfc36, 0x0098, 0xfc38, 0x00FF };
5599dc8ba19STed Chen 
5609dc8ba19STed Chen static u8 r8153_pla_patch_b[] = {
5619dc8ba19STed Chen 	0x08, 0xe0, 0xea, 0xe0, 0xf2, 0xe0, 0x04, 0xe1,
5629dc8ba19STed Chen 	0x09, 0xe1, 0x0e, 0xe1, 0x46, 0xe1, 0xf3, 0xe1,
5639dc8ba19STed Chen 	0x14, 0xc2, 0x40, 0x73, 0xba, 0x48, 0x40, 0x9b,
5649dc8ba19STed Chen 	0x11, 0xc2, 0x40, 0x73, 0xb0, 0x49, 0x17, 0xf0,
5659dc8ba19STed Chen 	0xbf, 0x49, 0x03, 0xf1, 0x09, 0xc5, 0x00, 0xbd,
5669dc8ba19STed Chen 	0xb1, 0x49, 0x11, 0xf0, 0xb1, 0x48, 0x40, 0x9b,
5679dc8ba19STed Chen 	0x02, 0xc2, 0x00, 0xba, 0x1a, 0x17, 0x00, 0xe0,
5689dc8ba19STed Chen 	0x1e, 0xfc, 0xbc, 0xc0, 0xf0, 0xc0, 0xde, 0xe8,
5699dc8ba19STed Chen 	0x00, 0x80, 0x00, 0x20, 0x2c, 0x75, 0xd4, 0x49,
5709dc8ba19STed Chen 	0x12, 0xf1, 0x32, 0xe0, 0xf8, 0xc2, 0x46, 0x71,
5719dc8ba19STed Chen 	0xf7, 0xc2, 0x40, 0x73, 0xbe, 0x49, 0x03, 0xf1,
5729dc8ba19STed Chen 	0xf5, 0xc7, 0x02, 0xe0, 0xf2, 0xc7, 0x4f, 0x30,
5739dc8ba19STed Chen 	0x26, 0x62, 0xa1, 0x49, 0xf0, 0xf1, 0x22, 0x72,
5749dc8ba19STed Chen 	0xa0, 0x49, 0xed, 0xf1, 0x25, 0x25, 0x18, 0x1f,
5759dc8ba19STed Chen 	0x97, 0x30, 0x91, 0x30, 0x36, 0x9a, 0x2c, 0x75,
5769dc8ba19STed Chen 	0x3c, 0xc3, 0x60, 0x73, 0xb1, 0x49, 0x0d, 0xf1,
5779dc8ba19STed Chen 	0xdc, 0x21, 0xbc, 0x25, 0x30, 0xc6, 0xc0, 0x77,
5789dc8ba19STed Chen 	0x04, 0x13, 0x21, 0xf0, 0x03, 0x13, 0x22, 0xf0,
5799dc8ba19STed Chen 	0x02, 0x13, 0x23, 0xf0, 0x01, 0x13, 0x24, 0xf0,
5809dc8ba19STed Chen 	0x08, 0x13, 0x08, 0xf1, 0x2e, 0x73, 0xba, 0x21,
5819dc8ba19STed Chen 	0xbd, 0x25, 0x05, 0x13, 0x03, 0xf1, 0x24, 0xc5,
5829dc8ba19STed Chen 	0x00, 0xbd, 0xd4, 0x49, 0x03, 0xf1, 0x1c, 0xc5,
5839dc8ba19STed Chen 	0x00, 0xbd, 0xc4, 0xc6, 0xc6, 0x67, 0x2e, 0x75,
5849dc8ba19STed Chen 	0xd7, 0x22, 0xdd, 0x26, 0x05, 0x15, 0x1b, 0xf0,
5859dc8ba19STed Chen 	0x14, 0xc6, 0x00, 0xbe, 0x13, 0xc5, 0x00, 0xbd,
5869dc8ba19STed Chen 	0x12, 0xc5, 0x00, 0xbd, 0xf1, 0x49, 0xfb, 0xf1,
5879dc8ba19STed Chen 	0xef, 0xe7, 0xf4, 0x49, 0xfa, 0xf1, 0xec, 0xe7,
5889dc8ba19STed Chen 	0xf3, 0x49, 0xf7, 0xf1, 0xe9, 0xe7, 0xf2, 0x49,
5899dc8ba19STed Chen 	0xf4, 0xf1, 0xe6, 0xe7, 0xb6, 0xc0, 0x9e, 0x12,
5909dc8ba19STed Chen 	0xde, 0x11, 0x0a, 0x12, 0x3c, 0x13, 0x00, 0xa0,
5919dc8ba19STed Chen 	0xa0, 0xd1, 0x00, 0x00, 0xc0, 0x75, 0xd0, 0x49,
5929dc8ba19STed Chen 	0x46, 0xf0, 0x26, 0x72, 0xa7, 0x49, 0x43, 0xf0,
5939dc8ba19STed Chen 	0x22, 0x72, 0x25, 0x25, 0x20, 0x1f, 0x97, 0x30,
5949dc8ba19STed Chen 	0x91, 0x30, 0x40, 0x73, 0xf3, 0xc4, 0x1c, 0x40,
5959dc8ba19STed Chen 	0x04, 0xf0, 0xd7, 0x49, 0x05, 0xf1, 0x37, 0xe0,
5969dc8ba19STed Chen 	0x53, 0x48, 0xc0, 0x9d, 0x08, 0x02, 0x40, 0x66,
5979dc8ba19STed Chen 	0x64, 0x27, 0x06, 0x16, 0x30, 0xf1, 0x46, 0x63,
5989dc8ba19STed Chen 	0x3b, 0x13, 0x2d, 0xf1, 0x34, 0x9b, 0x18, 0x1b,
5999dc8ba19STed Chen 	0x93, 0x30, 0x2b, 0xc3, 0x10, 0x1c, 0x2b, 0xe8,
6009dc8ba19STed Chen 	0x01, 0x14, 0x25, 0xf1, 0x00, 0x1d, 0x26, 0x1a,
6019dc8ba19STed Chen 	0x8a, 0x30, 0x22, 0x73, 0xb5, 0x25, 0x0e, 0x0b,
6029dc8ba19STed Chen 	0x00, 0x1c, 0x2c, 0xe8, 0x1f, 0xc7, 0x27, 0x40,
6039dc8ba19STed Chen 	0x1a, 0xf1, 0x38, 0xe8, 0x32, 0x1f, 0x8f, 0x30,
6049dc8ba19STed Chen 	0x08, 0x1b, 0x24, 0xe8, 0x36, 0x72, 0x46, 0x77,
6059dc8ba19STed Chen 	0x00, 0x17, 0x0d, 0xf0, 0x13, 0xc3, 0x1f, 0x40,
6069dc8ba19STed Chen 	0x03, 0xf1, 0x00, 0x1f, 0x46, 0x9f, 0x44, 0x77,
6079dc8ba19STed Chen 	0x9f, 0x44, 0x5f, 0x44, 0x17, 0xe8, 0x0a, 0xc7,
6089dc8ba19STed Chen 	0x27, 0x40, 0x05, 0xf1, 0x02, 0xc3, 0x00, 0xbb,
6099dc8ba19STed Chen 	0xfa, 0x18, 0xb0, 0x18, 0xff, 0xc7, 0x00, 0xbf,
6109dc8ba19STed Chen 	0xb8, 0xcd, 0xff, 0xff, 0x02, 0x0c, 0x54, 0xa5,
6119dc8ba19STed Chen 	0xdc, 0xa5, 0x2f, 0x40, 0x05, 0xf1, 0x00, 0x14,
6129dc8ba19STed Chen 	0xfa, 0xf1, 0x01, 0x1c, 0x02, 0xe0, 0x00, 0x1c,
6139dc8ba19STed Chen 	0x80, 0xff, 0xb0, 0x49, 0x04, 0xf0, 0x01, 0x0b,
6149dc8ba19STed Chen 	0xd3, 0xa1, 0x03, 0xe0, 0x02, 0x0b, 0xd3, 0xa5,
6159dc8ba19STed Chen 	0x27, 0x31, 0x20, 0x37, 0x02, 0x0b, 0xd3, 0xa5,
6169dc8ba19STed Chen 	0x27, 0x31, 0x20, 0x37, 0x00, 0x13, 0xfb, 0xf1,
6179dc8ba19STed Chen 	0x80, 0xff, 0x22, 0x73, 0xb5, 0x25, 0x18, 0x1e,
6189dc8ba19STed Chen 	0xde, 0x30, 0xd9, 0x30, 0x64, 0x72, 0x11, 0x1e,
6199dc8ba19STed Chen 	0x68, 0x23, 0x16, 0x31, 0x80, 0xff, 0x08, 0xc2,
6209dc8ba19STed Chen 	0x40, 0x73, 0x3a, 0x48, 0x40, 0x9b, 0x06, 0xff,
6219dc8ba19STed Chen 	0x02, 0xc6, 0x00, 0xbe, 0x08, 0x16, 0x1e, 0xfc,
6229dc8ba19STed Chen 	0x2c, 0x75, 0xdc, 0x21, 0xbc, 0x25, 0x04, 0x13,
6239dc8ba19STed Chen 	0x0b, 0xf0, 0x03, 0x13, 0x09, 0xf0, 0x02, 0x13,
6249dc8ba19STed Chen 	0x07, 0xf0, 0x01, 0x13, 0x05, 0xf0, 0x08, 0x13,
6259dc8ba19STed Chen 	0x03, 0xf0, 0x04, 0xc3, 0x00, 0xbb, 0x03, 0xc3,
6269dc8ba19STed Chen 	0x00, 0xbb, 0x8c, 0x15, 0x76, 0x15, 0xa0, 0x64,
6279dc8ba19STed Chen 	0x40, 0x48, 0xa0, 0x8c, 0x02, 0xc4, 0x00, 0xbc,
6289dc8ba19STed Chen 	0x82, 0x00, 0xa0, 0x62, 0x21, 0x48, 0xa0, 0x8a,
6299dc8ba19STed Chen 	0x02, 0xc2, 0x00, 0xba, 0x40, 0x03, 0x33, 0xc5,
6309dc8ba19STed Chen 	0xa0, 0x74, 0xc0, 0x49, 0x1f, 0xf0, 0x30, 0xc5,
6319dc8ba19STed Chen 	0xa0, 0x73, 0x00, 0x13, 0x04, 0xf1, 0xa2, 0x73,
6329dc8ba19STed Chen 	0x00, 0x13, 0x14, 0xf0, 0x28, 0xc5, 0xa0, 0x74,
6339dc8ba19STed Chen 	0xc8, 0x49, 0x1b, 0xf1, 0x26, 0xc5, 0xa0, 0x76,
6349dc8ba19STed Chen 	0xa2, 0x74, 0x01, 0x06, 0x20, 0x37, 0xa0, 0x9e,
6359dc8ba19STed Chen 	0xa2, 0x9c, 0x1e, 0xc5, 0xa2, 0x73, 0x23, 0x40,
6369dc8ba19STed Chen 	0x10, 0xf8, 0x04, 0xf3, 0xa0, 0x73, 0x33, 0x40,
6379dc8ba19STed Chen 	0x0c, 0xf8, 0x15, 0xc5, 0xa0, 0x74, 0x41, 0x48,
6389dc8ba19STed Chen 	0xa0, 0x9c, 0x14, 0xc5, 0xa0, 0x76, 0x62, 0x48,
6399dc8ba19STed Chen 	0xe0, 0x48, 0xa0, 0x9e, 0x10, 0xc6, 0x00, 0xbe,
6409dc8ba19STed Chen 	0x0a, 0xc5, 0xa0, 0x74, 0x48, 0x48, 0xa0, 0x9c,
6419dc8ba19STed Chen 	0x0b, 0xc5, 0x20, 0x1e, 0xa0, 0x9e, 0xe5, 0x48,
6429dc8ba19STed Chen 	0xa0, 0x9e, 0xf0, 0xe7, 0xbc, 0xc0, 0xc8, 0xd2,
6439dc8ba19STed Chen 	0xcc, 0xd2, 0x28, 0xe4, 0xe6, 0x01, 0xf0, 0xc0,
6449dc8ba19STed Chen 	0x18, 0x89, 0x00, 0x1d, 0x3c, 0xc3, 0x60, 0x71,
6459dc8ba19STed Chen 	0x3c, 0xc0, 0x02, 0x99, 0x00, 0x61, 0x67, 0x11,
6469dc8ba19STed Chen 	0x3c, 0xf1, 0x69, 0x33, 0x35, 0xc0, 0x28, 0x40,
6479dc8ba19STed Chen 	0xf6, 0xf1, 0x34, 0xc0, 0x00, 0x19, 0x81, 0x1b,
6489dc8ba19STed Chen 	0x8c, 0xe8, 0x31, 0xc0, 0x04, 0x1a, 0x84, 0x1b,
6499dc8ba19STed Chen 	0x88, 0xe8, 0x7d, 0xe8, 0xa3, 0x49, 0xfe, 0xf0,
6509dc8ba19STed Chen 	0x2b, 0xc0, 0x79, 0xe8, 0xa1, 0x48, 0x28, 0xc0,
6519dc8ba19STed Chen 	0x84, 0x1b, 0x7f, 0xe8, 0x00, 0x1d, 0x69, 0x33,
6529dc8ba19STed Chen 	0x00, 0x1e, 0x01, 0x06, 0xff, 0x18, 0x30, 0x40,
6539dc8ba19STed Chen 	0xfd, 0xf1, 0x18, 0xc0, 0x00, 0x76, 0x2e, 0x40,
6549dc8ba19STed Chen 	0xf7, 0xf1, 0x21, 0x48, 0x19, 0xc0, 0x84, 0x1b,
6559dc8ba19STed Chen 	0x70, 0xe8, 0x79, 0xc0, 0x64, 0xe8, 0xa1, 0x49,
6569dc8ba19STed Chen 	0xfd, 0xf0, 0x11, 0xc0, 0x00, 0x1a, 0x84, 0x1b,
6579dc8ba19STed Chen 	0x68, 0xe8, 0x5d, 0xe8, 0xa5, 0x49, 0xfe, 0xf0,
6589dc8ba19STed Chen 	0x09, 0xc0, 0x01, 0x19, 0x81, 0x1b, 0x61, 0xe8,
6599dc8ba19STed Chen 	0x4f, 0xe0, 0x88, 0xd3, 0x8c, 0xd3, 0xb8, 0x0b,
6609dc8ba19STed Chen 	0x50, 0xe8, 0x20, 0xb4, 0x10, 0xd8, 0x84, 0xd4,
6619dc8ba19STed Chen 	0xfc, 0xc0, 0x00, 0x61, 0x9c, 0x20, 0x9c, 0x24,
6629dc8ba19STed Chen 	0x06, 0x11, 0x06, 0xf1, 0x60, 0xc0, 0x00, 0x61,
6639dc8ba19STed Chen 	0x11, 0x48, 0x00, 0x89, 0x3d, 0xe0, 0x00, 0x11,
6649dc8ba19STed Chen 	0x02, 0xf1, 0x03, 0xe0, 0x04, 0x11, 0x06, 0xf1,
6659dc8ba19STed Chen 	0x56, 0xc0, 0x00, 0x61, 0x92, 0x48, 0x00, 0x89,
6669dc8ba19STed Chen 	0x33, 0xe0, 0x05, 0x11, 0x08, 0xf1, 0x4f, 0xc0,
6679dc8ba19STed Chen 	0x00, 0x61, 0x91, 0x49, 0x04, 0xf0, 0x91, 0x48,
6689dc8ba19STed Chen 	0x00, 0x89, 0x11, 0xe0, 0xde, 0xc0, 0x00, 0x61,
6699dc8ba19STed Chen 	0x98, 0x20, 0x98, 0x24, 0x25, 0x11, 0x24, 0xf1,
6709dc8ba19STed Chen 	0x45, 0xc0, 0x29, 0xe8, 0x95, 0x49, 0x20, 0xf0,
6719dc8ba19STed Chen 	0xd4, 0xc0, 0x00, 0x61, 0x98, 0x20, 0x98, 0x24,
6729dc8ba19STed Chen 	0x25, 0x11, 0x1a, 0xf1, 0x38, 0xc0, 0x00, 0x61,
6739dc8ba19STed Chen 	0x92, 0x49, 0x16, 0xf1, 0x12, 0x48, 0x00, 0x89,
6749dc8ba19STed Chen 	0x30, 0xc0, 0x00, 0x19, 0x00, 0x89, 0x2e, 0xc0,
6759dc8ba19STed Chen 	0x01, 0x89, 0x2e, 0xc0, 0x04, 0x19, 0x81, 0x1b,
6769dc8ba19STed Chen 	0x1c, 0xe8, 0x2b, 0xc0, 0x14, 0x19, 0x81, 0x1b,
6779dc8ba19STed Chen 	0x18, 0xe8, 0x22, 0xc0, 0x0c, 0xe8, 0x20, 0xc0,
6789dc8ba19STed Chen 	0x12, 0x48, 0x81, 0x1b, 0x12, 0xe8, 0xb3, 0xc3,
6799dc8ba19STed Chen 	0x62, 0x71, 0xb3, 0xc0, 0x02, 0x99, 0x02, 0xc0,
6809dc8ba19STed Chen 	0x00, 0xb8, 0x96, 0x07, 0x13, 0xc4, 0x84, 0x98,
6819dc8ba19STed Chen 	0x00, 0x1b, 0x86, 0x8b, 0x86, 0x73, 0xbf, 0x49,
6829dc8ba19STed Chen 	0xfe, 0xf1, 0x80, 0x71, 0x82, 0x72, 0x80, 0xff,
6839dc8ba19STed Chen 	0x09, 0xc4, 0x84, 0x98, 0x80, 0x99, 0x82, 0x9a,
6849dc8ba19STed Chen 	0x86, 0x8b, 0x86, 0x73, 0xbf, 0x49, 0xfe, 0xf1,
6859dc8ba19STed Chen 	0x80, 0xff, 0x08, 0xea, 0x10, 0xd4, 0x30, 0xd4,
6869dc8ba19STed Chen 	0x10, 0xc0, 0x12, 0xe8, 0x8a, 0xd3, 0x28, 0xe4,
6879dc8ba19STed Chen 	0x2c, 0xe4, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x00,
6889dc8ba19STed Chen 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
6899dc8ba19STed Chen 
6909dc8ba19STed Chen static u16 r8153_pla_patch_b_bp[] = {
6919dc8ba19STed Chen 	0xfc26, 0x8000, 0xfc28, 0x1154, 0xfc2a, 0x1606, 0xfc2c, 0x155a,
6929dc8ba19STed Chen 	0xfc2e, 0x0080, 0xfc30, 0x033c, 0xfc32, 0x01a0, 0xfc34, 0x0794,
6939dc8ba19STed Chen 	0xfc36, 0x0000, 0xfc38, 0x007f };
6949dc8ba19STed Chen 
6959dc8ba19STed Chen static u16 r8153_ram_code_d[] = {
6969dc8ba19STed Chen 	0xa436, 0xb820, 0xa438, 0x0290, 0xa436, 0xa012, 0xa438, 0x0000,
6979dc8ba19STed Chen 	0xa436, 0xa014, 0xa438, 0x2c04, 0xb438, 0x2c07, 0xb438, 0x2c07,
6989dc8ba19STed Chen 	0xb438, 0x2c07, 0xb438, 0xa240, 0xb438, 0xa104, 0xb438, 0x2944,
6999dc8ba19STed Chen 	0xa436, 0xa01a, 0xa438, 0x0000, 0xa436, 0xa006, 0xa438, 0x0fff,
7009dc8ba19STed Chen 	0xa436, 0xa004, 0xa438, 0x0fff, 0xa436, 0xa002, 0xa438, 0x0fff,
7019dc8ba19STed Chen 	0xa436, 0xa000, 0xa438, 0x1943, 0xa436, 0xb820, 0xa438, 0x0210 };
7029dc8ba19STed Chen 
7039dc8ba19STed Chen static u8 usb_patch_d[] = {
7049dc8ba19STed Chen 	0x08, 0xe0, 0x0a, 0xe0, 0x0c, 0xe0, 0x1f, 0xe0,
7059dc8ba19STed Chen 	0x28, 0xe0, 0x2a, 0xe0, 0x2c, 0xe0, 0x2e, 0xe0,
7069dc8ba19STed Chen 	0x02, 0xc5, 0x00, 0xbd, 0x00, 0x00, 0x02, 0xc3,
7079dc8ba19STed Chen 	0x00, 0xbb, 0x00, 0x00, 0x30, 0x18, 0x11, 0xc1,
7089dc8ba19STed Chen 	0x05, 0xe8, 0x10, 0xc6, 0x02, 0xc2, 0x00, 0xba,
7099dc8ba19STed Chen 	0x94, 0x17, 0x02, 0xb4, 0x09, 0xc2, 0x40, 0x99,
7109dc8ba19STed Chen 	0x0e, 0x48, 0x42, 0x98, 0x42, 0x70, 0x8e, 0x49,
7119dc8ba19STed Chen 	0xfe, 0xf1, 0x02, 0xb0, 0x80, 0xff, 0xc0, 0xd4,
7129dc8ba19STed Chen 	0xe4, 0x40, 0x20, 0xd4, 0xb0, 0x49, 0x04, 0xf0,
7139dc8ba19STed Chen 	0x30, 0x18, 0x06, 0xc1, 0xef, 0xef, 0xfa, 0xc7,
7149dc8ba19STed Chen 	0x02, 0xc0, 0x00, 0xb8, 0x38, 0x12, 0xe4, 0x4b,
7159dc8ba19STed Chen 	0x02, 0xc3, 0x00, 0xbb, 0x00, 0x00, 0x02, 0xc5,
7169dc8ba19STed Chen 	0x00, 0xbd, 0x00, 0x00, 0x02, 0xc1, 0x00, 0xb9,
7179dc8ba19STed Chen 	0x00, 0x00, 0x02, 0xc1, 0x00, 0xb9, 0x00, 0x00 };
7189dc8ba19STed Chen 
7199dc8ba19STed Chen static u16 r8153_usb_patch_d_bp[] = {
7209dc8ba19STed Chen 	0xfc26, 0xa000, 0xfc28, 0x0000, 0xfc2a, 0x0000, 0xfc2c, 0x1792,
7219dc8ba19STed Chen 	0xfc2e, 0x1236, 0xfc30, 0x0000, 0xfc32, 0x0000, 0xfc34, 0x0000,
7229dc8ba19STed Chen 	0xfc36, 0x0000, 0xfc38, 0x000c };
7239dc8ba19STed Chen 
rtl_clear_bp(struct r8152 * tp)7249dc8ba19STed Chen static void rtl_clear_bp(struct r8152 *tp)
7259dc8ba19STed Chen {
7269dc8ba19STed Chen 	ocp_write_dword(tp, MCU_TYPE_PLA, PLA_BP_0, 0);
7279dc8ba19STed Chen 	ocp_write_dword(tp, MCU_TYPE_PLA, PLA_BP_2, 0);
7289dc8ba19STed Chen 	ocp_write_dword(tp, MCU_TYPE_PLA, PLA_BP_4, 0);
7299dc8ba19STed Chen 	ocp_write_dword(tp, MCU_TYPE_PLA, PLA_BP_6, 0);
7309dc8ba19STed Chen 	ocp_write_dword(tp, MCU_TYPE_USB, USB_BP_0, 0);
7319dc8ba19STed Chen 	ocp_write_dword(tp, MCU_TYPE_USB, USB_BP_2, 0);
7329dc8ba19STed Chen 	ocp_write_dword(tp, MCU_TYPE_USB, USB_BP_4, 0);
7339dc8ba19STed Chen 	ocp_write_dword(tp, MCU_TYPE_USB, USB_BP_6, 0);
7349dc8ba19STed Chen 
7359dc8ba19STed Chen 	mdelay(6);
7369dc8ba19STed Chen 
7379dc8ba19STed Chen 	ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_BA, 0);
7389dc8ba19STed Chen 	ocp_write_word(tp, MCU_TYPE_USB, USB_BP_BA, 0);
7399dc8ba19STed Chen }
7409dc8ba19STed Chen 
r8153_clear_bp(struct r8152 * tp)7419dc8ba19STed Chen static void r8153_clear_bp(struct r8152 *tp)
7429dc8ba19STed Chen {
7439dc8ba19STed Chen 	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_BP_EN, 0);
7449dc8ba19STed Chen 	ocp_write_byte(tp, MCU_TYPE_USB, USB_BP_EN, 0);
7459dc8ba19STed Chen 	rtl_clear_bp(tp);
7469dc8ba19STed Chen }
7479dc8ba19STed Chen 
r8152b_set_dq_desc(struct r8152 * tp)7489dc8ba19STed Chen static void r8152b_set_dq_desc(struct r8152 *tp)
7499dc8ba19STed Chen {
7509dc8ba19STed Chen 	u8 data;
7519dc8ba19STed Chen 
7529dc8ba19STed Chen 	data = ocp_read_byte(tp, MCU_TYPE_USB, 0xd429);
7539dc8ba19STed Chen 	data |= 0x80;
7549dc8ba19STed Chen 	ocp_write_byte(tp, MCU_TYPE_USB, 0xd429, data);
7559dc8ba19STed Chen 	ocp_write_word(tp, MCU_TYPE_USB, 0xc0ce, 0x0210);
7569dc8ba19STed Chen 	data = ocp_read_byte(tp, MCU_TYPE_USB, 0xd429);
7579dc8ba19STed Chen 	data &= ~0x80;
7589dc8ba19STed Chen 	ocp_write_byte(tp, MCU_TYPE_USB, 0xd429, data);
7599dc8ba19STed Chen }
7609dc8ba19STed Chen 
r8153_pre_ram_code(struct r8152 * tp,u16 patch_key)7619dc8ba19STed Chen static int r8153_pre_ram_code(struct r8152 *tp, u16 patch_key)
7629dc8ba19STed Chen {
7639dc8ba19STed Chen 	u16 data;
7649dc8ba19STed Chen 	int i;
7659dc8ba19STed Chen 
7669dc8ba19STed Chen 	data = ocp_reg_read(tp, 0xb820);
7679dc8ba19STed Chen 	data |= 0x0010;
7689dc8ba19STed Chen 	ocp_reg_write(tp, 0xb820, data);
7699dc8ba19STed Chen 
7709dc8ba19STed Chen 	for (i = 0, data = 0; !data && i < 5000; i++) {
7719dc8ba19STed Chen 		mdelay(2);
7729dc8ba19STed Chen 		data = ocp_reg_read(tp, 0xb800) & 0x0040;
7739dc8ba19STed Chen 	}
7749dc8ba19STed Chen 
7759dc8ba19STed Chen 	sram_write(tp, 0x8146, patch_key);
7769dc8ba19STed Chen 	sram_write(tp, 0xb82e, 0x0001);
7779dc8ba19STed Chen 
7789dc8ba19STed Chen 	return -EBUSY;
7799dc8ba19STed Chen }
7809dc8ba19STed Chen 
r8153_post_ram_code(struct r8152 * tp)7819dc8ba19STed Chen static int r8153_post_ram_code(struct r8152 *tp)
7829dc8ba19STed Chen {
7839dc8ba19STed Chen 	u16 data;
7849dc8ba19STed Chen 
7859dc8ba19STed Chen 	sram_write(tp, 0x0000, 0x0000);
7869dc8ba19STed Chen 
7879dc8ba19STed Chen 	data = ocp_reg_read(tp, 0xb82e);
7889dc8ba19STed Chen 	data &= ~0x0001;
7899dc8ba19STed Chen 	ocp_reg_write(tp, 0xb82e, data);
7909dc8ba19STed Chen 
7919dc8ba19STed Chen 	sram_write(tp, 0x8146, 0x0000);
7929dc8ba19STed Chen 
7939dc8ba19STed Chen 	data = ocp_reg_read(tp, 0xb820);
7949dc8ba19STed Chen 	data &= ~0x0010;
7959dc8ba19STed Chen 	ocp_reg_write(tp, 0xb820, data);
7969dc8ba19STed Chen 
7979dc8ba19STed Chen 	ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, tp->ocp_base);
7989dc8ba19STed Chen 
7999dc8ba19STed Chen 	return 0;
8009dc8ba19STed Chen }
8019dc8ba19STed Chen 
r8153_wdt1_end(struct r8152 * tp)8029dc8ba19STed Chen static void r8153_wdt1_end(struct r8152 *tp)
8039dc8ba19STed Chen {
8049dc8ba19STed Chen 	int i;
8059dc8ba19STed Chen 
8069dc8ba19STed Chen 	for (i = 0; i < 104; i++) {
8079dc8ba19STed Chen 		if (!(ocp_read_byte(tp, MCU_TYPE_USB, 0xe404) & 1))
8089dc8ba19STed Chen 			break;
8099dc8ba19STed Chen 		mdelay(2);
8109dc8ba19STed Chen 	}
8119dc8ba19STed Chen }
8129dc8ba19STed Chen 
r8152b_firmware(struct r8152 * tp)8139dc8ba19STed Chen void r8152b_firmware(struct r8152 *tp)
8149dc8ba19STed Chen {
8159dc8ba19STed Chen 	int i;
8169dc8ba19STed Chen 
8179dc8ba19STed Chen 	if (tp->version == RTL_VER_01) {
8189dc8ba19STed Chen 		int i;
8199dc8ba19STed Chen 
8209dc8ba19STed Chen 		r8152b_set_dq_desc(tp);
8219dc8ba19STed Chen 		rtl_clear_bp(tp);
8229dc8ba19STed Chen 
8239dc8ba19STed Chen 		generic_ocp_write(tp, 0xf800, 0x3f,
8249dc8ba19STed Chen 				  sizeof(r8152b_pla_patch_a),
8259dc8ba19STed Chen 				  r8152b_pla_patch_a, MCU_TYPE_PLA);
8269dc8ba19STed Chen 
8279dc8ba19STed Chen 		for (i = 0; i < ARRAY_SIZE(r8152b_pla_patch_a_bp); i += 2)
8289dc8ba19STed Chen 			ocp_write_word(tp, MCU_TYPE_PLA,
8299dc8ba19STed Chen 				       r8152b_pla_patch_a_bp[i],
8309dc8ba19STed Chen 				       r8152b_pla_patch_a_bp[i+1]);
8319dc8ba19STed Chen 
8329dc8ba19STed Chen 		ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, 0x2000);
8339dc8ba19STed Chen 		ocp_write_word(tp, MCU_TYPE_PLA, 0xb092, 0x7070);
8349dc8ba19STed Chen 		ocp_write_word(tp, MCU_TYPE_PLA, 0xb098, 0x0600);
8359dc8ba19STed Chen 		for (i = 0; i < ARRAY_SIZE(r8152b_ram_code1); i++)
8369dc8ba19STed Chen 			ocp_write_word(tp, MCU_TYPE_PLA, 0xb09a,
8379dc8ba19STed Chen 				       r8152b_ram_code1[i]);
8389dc8ba19STed Chen 
8399dc8ba19STed Chen 		ocp_write_word(tp, MCU_TYPE_PLA, 0xb098, 0x0200);
8409dc8ba19STed Chen 		ocp_write_word(tp, MCU_TYPE_PLA, 0xb092, 0x7030);
8419dc8ba19STed Chen 	} else if (tp->version == RTL_VER_02) {
8429dc8ba19STed Chen 		rtl_clear_bp(tp);
8439dc8ba19STed Chen 
8449dc8ba19STed Chen 		generic_ocp_write(tp, 0xf800, 0xff,
8459dc8ba19STed Chen 				  sizeof(r8152b_pla_patch_a2),
8469dc8ba19STed Chen 				  r8152b_pla_patch_a2, MCU_TYPE_PLA);
8479dc8ba19STed Chen 
8489dc8ba19STed Chen 		for (i = 0; i < ARRAY_SIZE(r8152b_pla_patch_a2_bp);
8499dc8ba19STed Chen 		     i += 2)
8509dc8ba19STed Chen 			ocp_write_word(tp, MCU_TYPE_PLA,
8519dc8ba19STed Chen 				       r8152b_pla_patch_a2_bp[i],
8529dc8ba19STed Chen 				       r8152b_pla_patch_a2_bp[i+1]);
8539dc8ba19STed Chen 	}
8549dc8ba19STed Chen }
8559dc8ba19STed Chen 
r8153_firmware(struct r8152 * tp)8569dc8ba19STed Chen void r8153_firmware(struct r8152 *tp)
8579dc8ba19STed Chen {
8589dc8ba19STed Chen 	int i;
8599dc8ba19STed Chen 
8609dc8ba19STed Chen 	if (tp->version == RTL_VER_03) {
8619dc8ba19STed Chen 		r8153_clear_bp(tp);
8629dc8ba19STed Chen 
8639dc8ba19STed Chen 		r8153_pre_ram_code(tp, 0x7000);
8649dc8ba19STed Chen 
8659dc8ba19STed Chen 		for (i = 0; i < ARRAY_SIZE(r8153_ram_code_a); i += 2)
8669dc8ba19STed Chen 			ocp_write_word(tp, MCU_TYPE_PLA,
8679dc8ba19STed Chen 				       r8153_ram_code_a[i],
8689dc8ba19STed Chen 				       r8153_ram_code_a[i+1]);
8699dc8ba19STed Chen 
8709dc8ba19STed Chen 		r8153_post_ram_code(tp);
8719dc8ba19STed Chen 	} else if (tp->version == RTL_VER_04) {
8729dc8ba19STed Chen 		r8153_pre_ram_code(tp, 0x7001);
8739dc8ba19STed Chen 
8749dc8ba19STed Chen 		for (i = 0; i < ARRAY_SIZE(r8153_ram_code_bc); i += 2)
8759dc8ba19STed Chen 			ocp_write_word(tp, MCU_TYPE_PLA,
8769dc8ba19STed Chen 				       r8153_ram_code_bc[i],
8779dc8ba19STed Chen 				       r8153_ram_code_bc[i+1]);
8789dc8ba19STed Chen 
8799dc8ba19STed Chen 		r8153_post_ram_code(tp);
8809dc8ba19STed Chen 
8819dc8ba19STed Chen 		r8153_wdt1_end(tp);
8829dc8ba19STed Chen 		r8153_clear_bp(tp);
8839dc8ba19STed Chen 
8849dc8ba19STed Chen 		ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x0000);
8859dc8ba19STed Chen 		generic_ocp_write(tp, 0xf800, 0xff,
8869dc8ba19STed Chen 				  sizeof(r8153_usb_patch_b),
8879dc8ba19STed Chen 				  r8153_usb_patch_b, MCU_TYPE_USB);
8889dc8ba19STed Chen 
8899dc8ba19STed Chen 		for (i = 0; i < ARRAY_SIZE(r8153_usb_patch_b_bp); i += 2)
8909dc8ba19STed Chen 			ocp_write_word(tp, MCU_TYPE_USB,
8919dc8ba19STed Chen 				       r8153_usb_patch_b_bp[i],
8929dc8ba19STed Chen 				       r8153_usb_patch_b_bp[i+1]);
8939dc8ba19STed Chen 
8949dc8ba19STed Chen 		if (!(ocp_read_word(tp, MCU_TYPE_PLA, 0xd38e) & BIT(0))) {
8959dc8ba19STed Chen 			ocp_write_word(tp, MCU_TYPE_PLA, 0xd38c, 0x0082);
8969dc8ba19STed Chen 			ocp_write_word(tp, MCU_TYPE_PLA, 0xd38e, 0x0082);
8979dc8ba19STed Chen 		}
8989dc8ba19STed Chen 
8999dc8ba19STed Chen 		ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, 0x0000);
9009dc8ba19STed Chen 		generic_ocp_write(tp, 0xf800, 0xff,
9019dc8ba19STed Chen 				  sizeof(r8153_pla_patch_b),
9029dc8ba19STed Chen 				  r8153_pla_patch_b, MCU_TYPE_PLA);
9039dc8ba19STed Chen 
9049dc8ba19STed Chen 		for (i = 0; i < ARRAY_SIZE(r8153_pla_patch_b_bp); i += 2)
9059dc8ba19STed Chen 			ocp_write_word(tp, MCU_TYPE_PLA,
9069dc8ba19STed Chen 				       r8153_pla_patch_b_bp[i],
9079dc8ba19STed Chen 				       r8153_pla_patch_b_bp[i+1]);
9089dc8ba19STed Chen 
9099dc8ba19STed Chen 		ocp_write_word(tp, MCU_TYPE_PLA, 0xd388, 0x08ca);
9109dc8ba19STed Chen 	} else if (tp->version == RTL_VER_05) {
9119dc8ba19STed Chen 		u32 ocp_data;
9129dc8ba19STed Chen 
9139dc8ba19STed Chen 		ocp_data = ocp_read_word(tp, MCU_TYPE_USB, 0xcfca);
9149dc8ba19STed Chen 		ocp_data &= ~0x4000;
9159dc8ba19STed Chen 		ocp_write_word(tp, MCU_TYPE_USB, 0xcfca, ocp_data);
9169dc8ba19STed Chen 
9179dc8ba19STed Chen 		r8153_pre_ram_code(tp, 0x7001);
9189dc8ba19STed Chen 
9199dc8ba19STed Chen 		for (i = 0; i < ARRAY_SIZE(r8153_ram_code_bc); i += 2)
9209dc8ba19STed Chen 			ocp_write_word(tp, MCU_TYPE_PLA,
9219dc8ba19STed Chen 				       r8153_ram_code_bc[i],
9229dc8ba19STed Chen 				       r8153_ram_code_bc[i+1]);
9239dc8ba19STed Chen 
9249dc8ba19STed Chen 		r8153_post_ram_code(tp);
9259dc8ba19STed Chen 
9269dc8ba19STed Chen 		r8153_wdt1_end(tp);
9279dc8ba19STed Chen 		r8153_clear_bp(tp);
9289dc8ba19STed Chen 
9299dc8ba19STed Chen 		ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x0000);
9309dc8ba19STed Chen 		generic_ocp_write(tp, 0xf800, 0xff,
9319dc8ba19STed Chen 				  sizeof(r8153_usb_patch_c),
9329dc8ba19STed Chen 				  r8153_usb_patch_c, MCU_TYPE_USB);
9339dc8ba19STed Chen 
9349dc8ba19STed Chen 		for (i = 0; i < ARRAY_SIZE(r8153_usb_patch_c_bp); i += 2)
9359dc8ba19STed Chen 			ocp_write_word(tp, MCU_TYPE_USB,
9369dc8ba19STed Chen 				       r8153_usb_patch_c_bp[i],
9379dc8ba19STed Chen 				       r8153_usb_patch_c_bp[i+1]);
9389dc8ba19STed Chen 
9399dc8ba19STed Chen 		if (ocp_read_byte(tp, MCU_TYPE_USB, 0xcfef) & 1) {
9409dc8ba19STed Chen 			ocp_write_word(tp, MCU_TYPE_USB, 0xfc30, 0x1578);
9419dc8ba19STed Chen 			ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x00ff);
9429dc8ba19STed Chen 		} else {
9439dc8ba19STed Chen 			ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x00ef);
9449dc8ba19STed Chen 		}
9459dc8ba19STed Chen 
9469dc8ba19STed Chen 		ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, 0x0000);
9479dc8ba19STed Chen 		generic_ocp_write(tp, 0xf800, 0xff,
9489dc8ba19STed Chen 				  sizeof(r8153_pla_patch_c),
9499dc8ba19STed Chen 				  r8153_pla_patch_c, MCU_TYPE_PLA);
9509dc8ba19STed Chen 
9519dc8ba19STed Chen 		for (i = 0; i < ARRAY_SIZE(r8153_pla_patch_c_bp); i += 2)
9529dc8ba19STed Chen 			ocp_write_word(tp, MCU_TYPE_PLA,
9539dc8ba19STed Chen 				       r8153_pla_patch_c_bp[i],
9549dc8ba19STed Chen 				       r8153_pla_patch_c_bp[i+1]);
9559dc8ba19STed Chen 
9569dc8ba19STed Chen 		ocp_write_word(tp, MCU_TYPE_PLA, 0xd388, 0x08ca);
9579dc8ba19STed Chen 
9589dc8ba19STed Chen 		ocp_data = ocp_read_word(tp, MCU_TYPE_USB, 0xcfca);
9599dc8ba19STed Chen 		ocp_data |= 0x4000;
9609dc8ba19STed Chen 		ocp_write_word(tp, MCU_TYPE_USB, 0xcfca, ocp_data);
9619dc8ba19STed Chen 	} else if (tp->version == RTL_VER_06) {
9629dc8ba19STed Chen 		r8153_pre_ram_code(tp, 0x7002);
9639dc8ba19STed Chen 
9649dc8ba19STed Chen 		for (i = 0; i < ARRAY_SIZE(r8153_ram_code_d); i += 2)
9659dc8ba19STed Chen 			ocp_write_word(tp, MCU_TYPE_PLA,
9669dc8ba19STed Chen 				       r8153_ram_code_d[i],
9679dc8ba19STed Chen 				       r8153_ram_code_d[i+1]);
9689dc8ba19STed Chen 
9699dc8ba19STed Chen 		r8153_post_ram_code(tp);
9709dc8ba19STed Chen 
9719dc8ba19STed Chen 		r8153_clear_bp(tp);
9729dc8ba19STed Chen 
9739dc8ba19STed Chen 		ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x0000);
9749dc8ba19STed Chen 		generic_ocp_write(tp, 0xf800, 0xff, sizeof(usb_patch_d),
9759dc8ba19STed Chen 				  usb_patch_d, MCU_TYPE_USB);
9769dc8ba19STed Chen 
9779dc8ba19STed Chen 		for (i = 0; i < ARRAY_SIZE(r8153_usb_patch_d_bp); i += 2)
9789dc8ba19STed Chen 			ocp_write_word(tp, MCU_TYPE_USB,
9799dc8ba19STed Chen 				       r8153_usb_patch_d_bp[i],
9809dc8ba19STed Chen 				       r8153_usb_patch_d_bp[i+1]);
9819dc8ba19STed Chen 	}
9829dc8ba19STed Chen }
983