uboot/drivers/usb/eth/r8152_fw.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * Copyright (c) 2015 Realtek Semiconductor Corp. All rights reserved.
   4 *
   5  */
   6#include <common.h>
   7#include <dm.h>
   8#include <errno.h>
   9#include "usb_ether.h"
  10#include "r8152.h"
  11
  12static u8 r8152b_pla_patch_a[] = {
  13        0x08, 0xe0, 0x40, 0xe0, 0x78, 0xe0, 0x85, 0xe0,
  14        0x5d, 0xe1, 0xa1, 0xe1, 0xa3, 0xe1, 0xab, 0xe1,
  15        0x31, 0xc3, 0x60, 0x72, 0xa0, 0x49, 0x10, 0xf0,
  16        0xa4, 0x49, 0x0e, 0xf0, 0x2c, 0xc3, 0x62, 0x72,
  17        0x26, 0x70, 0x80, 0x49, 0x05, 0xf0, 0x2f, 0x48,
  18        0x62, 0x9a, 0x24, 0x70, 0x60, 0x98, 0x24, 0xc3,
  19        0x60, 0x99, 0x23, 0xc3, 0x00, 0xbb, 0x2c, 0x75,
  20        0xdc, 0x21, 0xbc, 0x25, 0x04, 0x13, 0x0a, 0xf0,
  21        0x03, 0x13, 0x08, 0xf0, 0x02, 0x13, 0x06, 0xf0,
  22        0x01, 0x13, 0x04, 0xf0, 0x08, 0x13, 0x02, 0xf0,
  23        0x03, 0xe0, 0xd4, 0x49, 0x04, 0xf1, 0x14, 0xc2,
  24        0x12, 0xc3, 0x00, 0xbb, 0x12, 0xc3, 0x60, 0x75,
  25        0xd0, 0x49, 0x05, 0xf1, 0x50, 0x48, 0x60, 0x9d,
  26        0x09, 0xc6, 0x00, 0xbe, 0xd0, 0x48, 0x60, 0x9d,
  27        0xf3, 0xe7, 0xc2, 0xc0, 0x38, 0xd2, 0xc6, 0xd2,
  28        0x84, 0x17, 0xa2, 0x13, 0x0c, 0x17, 0xbc, 0xc0,
  29        0xa2, 0xd1, 0x33, 0xc5, 0xa0, 0x74, 0xc0, 0x49,
  30        0x1f, 0xf0, 0x30, 0xc5, 0xa0, 0x73, 0x00, 0x13,
  31        0x04, 0xf1, 0xa2, 0x73, 0x00, 0x13, 0x14, 0xf0,
  32        0x28, 0xc5, 0xa0, 0x74, 0xc8, 0x49, 0x1b, 0xf1,
  33        0x26, 0xc5, 0xa0, 0x76, 0xa2, 0x74, 0x01, 0x06,
  34        0x20, 0x37, 0xa0, 0x9e, 0xa2, 0x9c, 0x1e, 0xc5,
  35        0xa2, 0x73, 0x23, 0x40, 0x10, 0xf8, 0x04, 0xf3,
  36        0xa0, 0x73, 0x33, 0x40, 0x0c, 0xf8, 0x15, 0xc5,
  37        0xa0, 0x74, 0x41, 0x48, 0xa0, 0x9c, 0x14, 0xc5,
  38        0xa0, 0x76, 0x62, 0x48, 0xe0, 0x48, 0xa0, 0x9e,
  39        0x10, 0xc6, 0x00, 0xbe, 0x0a, 0xc5, 0xa0, 0x74,
  40        0x48, 0x48, 0xa0, 0x9c, 0x0b, 0xc5, 0x20, 0x1e,
  41        0xa0, 0x9e, 0xe5, 0x48, 0xa0, 0x9e, 0xf0, 0xe7,
  42        0xbc, 0xc0, 0xc8, 0xd2, 0xcc, 0xd2, 0x28, 0xe4,
  43        0x22, 0x02, 0xf0, 0xc0, 0x0b, 0xc0, 0x00, 0x71,
  44        0x0a, 0xc0, 0x00, 0x72, 0xa0, 0x49, 0x04, 0xf0,
  45        0xa4, 0x49, 0x02, 0xf0, 0x93, 0x48, 0x04, 0xc0,
  46        0x00, 0xb8, 0x00, 0xe4, 0xc2, 0xc0, 0x8c, 0x09,
  47        0x14, 0xc2, 0x40, 0x73, 0xba, 0x48, 0x40, 0x9b,
  48        0x11, 0xc2, 0x40, 0x73, 0xb0, 0x49, 0x17, 0xf0,
  49        0xbf, 0x49, 0x03, 0xf1, 0x09, 0xc5, 0x00, 0xbd,
  50        0xb1, 0x49, 0x11, 0xf0, 0xb1, 0x48, 0x40, 0x9b,
  51        0x02, 0xc2, 0x00, 0xba, 0x82, 0x18, 0x00, 0xa0,
  52        0x1e, 0xfc, 0xbc, 0xc0, 0xf0, 0xc0, 0xde, 0xe8,
  53        0x00, 0x80, 0x00, 0x60, 0x2c, 0x75, 0xd4, 0x49,
  54        0x12, 0xf1, 0x29, 0xe0, 0xf8, 0xc2, 0x46, 0x71,
  55        0xf7, 0xc2, 0x40, 0x73, 0xbe, 0x49, 0x03, 0xf1,
  56        0xf5, 0xc7, 0x02, 0xe0, 0xf2, 0xc7, 0x4f, 0x30,
  57        0x26, 0x62, 0xa1, 0x49, 0xf0, 0xf1, 0x22, 0x72,
  58        0xa0, 0x49, 0xed, 0xf1, 0x25, 0x25, 0x18, 0x1f,
  59        0x97, 0x30, 0x91, 0x30, 0x36, 0x9a, 0x2c, 0x75,
  60        0x32, 0xc3, 0x60, 0x73, 0xb1, 0x49, 0x0d, 0xf1,
  61        0xdc, 0x21, 0xbc, 0x25, 0x27, 0xc6, 0xc0, 0x77,
  62        0x04, 0x13, 0x18, 0xf0, 0x03, 0x13, 0x19, 0xf0,
  63        0x02, 0x13, 0x1a, 0xf0, 0x01, 0x13, 0x1b, 0xf0,
  64        0xd4, 0x49, 0x03, 0xf1, 0x1c, 0xc5, 0x00, 0xbd,
  65        0xcd, 0xc6, 0xc6, 0x67, 0x2e, 0x75, 0xd7, 0x22,
  66        0xdd, 0x26, 0x05, 0x15, 0x1a, 0xf0, 0x14, 0xc6,
  67        0x00, 0xbe, 0x13, 0xc5, 0x00, 0xbd, 0x12, 0xc5,
  68        0x00, 0xbd, 0xf1, 0x49, 0xfb, 0xf1, 0xef, 0xe7,
  69        0xf4, 0x49, 0xfa, 0xf1, 0xec, 0xe7, 0xf3, 0x49,
  70        0xf7, 0xf1, 0xe9, 0xe7, 0xf2, 0x49, 0xf4, 0xf1,
  71        0xe6, 0xe7, 0xb6, 0xc0, 0x6a, 0x14, 0xac, 0x13,
  72        0xd6, 0x13, 0xfa, 0x14, 0xa0, 0xd1, 0x00, 0x00,
  73        0xc0, 0x75, 0xd0, 0x49, 0x46, 0xf0, 0x26, 0x72,
  74        0xa7, 0x49, 0x43, 0xf0, 0x22, 0x72, 0x25, 0x25,
  75        0x20, 0x1f, 0x97, 0x30, 0x91, 0x30, 0x40, 0x73,
  76        0xf3, 0xc4, 0x1c, 0x40, 0x04, 0xf0, 0xd7, 0x49,
  77        0x05, 0xf1, 0x37, 0xe0, 0x53, 0x48, 0xc0, 0x9d,
  78        0x08, 0x02, 0x40, 0x66, 0x64, 0x27, 0x06, 0x16,
  79        0x30, 0xf1, 0x46, 0x63, 0x3b, 0x13, 0x2d, 0xf1,
  80        0x34, 0x9b, 0x18, 0x1b, 0x93, 0x30, 0x2b, 0xc3,
  81        0x10, 0x1c, 0x2b, 0xe8, 0x01, 0x14, 0x25, 0xf1,
  82        0x00, 0x1d, 0x26, 0x1a, 0x8a, 0x30, 0x22, 0x73,
  83        0xb5, 0x25, 0x0e, 0x0b, 0x00, 0x1c, 0x2c, 0xe8,
  84        0x1f, 0xc7, 0x27, 0x40, 0x1a, 0xf1, 0x38, 0xe8,
  85        0x32, 0x1f, 0x8f, 0x30, 0x08, 0x1b, 0x24, 0xe8,
  86        0x36, 0x72, 0x46, 0x77, 0x00, 0x17, 0x0d, 0xf0,
  87        0x13, 0xc3, 0x1f, 0x40, 0x03, 0xf1, 0x00, 0x1f,
  88        0x46, 0x9f, 0x44, 0x77, 0x9f, 0x44, 0x5f, 0x44,
  89        0x17, 0xe8, 0x0a, 0xc7, 0x27, 0x40, 0x05, 0xf1,
  90        0x02, 0xc3, 0x00, 0xbb, 0x50, 0x1a, 0x06, 0x1a,
  91        0xff, 0xc7, 0x00, 0xbf, 0xb8, 0xcd, 0xff, 0xff,
  92        0x02, 0x0c, 0x54, 0xa5, 0xdc, 0xa5, 0x2f, 0x40,
  93        0x05, 0xf1, 0x00, 0x14, 0xfa, 0xf1, 0x01, 0x1c,
  94        0x02, 0xe0, 0x00, 0x1c, 0x80, 0xff, 0xb0, 0x49,
  95        0x04, 0xf0, 0x01, 0x0b, 0xd3, 0xa1, 0x03, 0xe0,
  96        0x02, 0x0b, 0xd3, 0xa5, 0x27, 0x31, 0x20, 0x37,
  97        0x02, 0x0b, 0xd3, 0xa5, 0x27, 0x31, 0x20, 0x37,
  98        0x00, 0x13, 0xfb, 0xf1, 0x80, 0xff, 0x22, 0x73,
  99        0xb5, 0x25, 0x18, 0x1e, 0xde, 0x30, 0xd9, 0x30,
 100        0x64, 0x72, 0x11, 0x1e, 0x68, 0x23, 0x16, 0x31,
 101        0x80, 0xff, 0xd4, 0x49, 0x28, 0xf0, 0x02, 0xb4,
 102        0x2a, 0xc4, 0x00, 0x1d, 0x2e, 0xe8, 0xe0, 0x73,
 103        0xb9, 0x21, 0xbd, 0x25, 0x04, 0x13, 0x02, 0xf0,
 104        0x1a, 0xe0, 0x22, 0xc4, 0x23, 0xc3, 0x2f, 0xe8,
 105        0x23, 0xc3, 0x2d, 0xe8, 0x00, 0x1d, 0x21, 0xe8,
 106        0xe2, 0x73, 0xbb, 0x49, 0xfc, 0xf0, 0xe0, 0x73,
 107        0xb7, 0x48, 0x03, 0xb4, 0x81, 0x1d, 0x19, 0xe8,
 108        0x40, 0x1a, 0x84, 0x1d, 0x16, 0xe8, 0x12, 0xc3,
 109        0x1e, 0xe8, 0x03, 0xb0, 0x81, 0x1d, 0x11, 0xe8,
 110        0x0e, 0xc3, 0x19, 0xe8, 0x02, 0xb0, 0x06, 0xc7,
 111        0x04, 0x1e, 0xe0, 0x9e, 0x02, 0xc6, 0x00, 0xbe,
 112        0x22, 0x02, 0x20, 0xe4, 0x04, 0xb8, 0x34, 0xb0,
 113        0x00, 0x02, 0x00, 0x03, 0x00, 0x0e, 0x00, 0x0c,
 114        0x09, 0xc7, 0xe0, 0x9b, 0xe2, 0x9a, 0xe4, 0x9c,
 115        0xe6, 0x8d, 0xe6, 0x76, 0xef, 0x49, 0xfe, 0xf1,
 116        0x80, 0xff, 0x08, 0xea, 0x82, 0x1d, 0xf5, 0xef,
 117        0x00, 0x1a, 0x88, 0x1d, 0xf2, 0xef, 0xed, 0xc2,
 118        0xf0, 0xef, 0x80, 0xff, 0x02, 0xc6, 0x00, 0xbe,
 119        0x46, 0x06, 0x08, 0xc2, 0x40, 0x73, 0x3a, 0x48,
 120        0x40, 0x9b, 0x06, 0xff, 0x02, 0xc6, 0x00, 0xbe,
 121        0x86, 0x17, 0x1e, 0xfc, 0x36, 0xf0, 0x08, 0x1c,
 122        0xea, 0x8c, 0xe3, 0x64, 0xc7, 0x49, 0x25, 0xf1,
 123        0xe0, 0x75, 0xff, 0x1b, 0xeb, 0x47, 0xff, 0x1b,
 124        0x6b, 0x47, 0xe0, 0x9d, 0x15, 0xc3, 0x60, 0x75,
 125        0xd8, 0x49, 0x04, 0xf0, 0x81, 0x1d, 0xe2, 0x8d,
 126        0x05, 0xe0, 0xe2, 0x63, 0x81, 0x1d, 0xdd, 0x47,
 127        0xe2, 0x8b, 0x0b, 0xc3, 0x00, 0x1d, 0x61, 0x8d,
 128        0x3c, 0x03, 0x60, 0x75, 0xd8, 0x49, 0x06, 0xf1,
 129        0xdf, 0x48, 0x61, 0x95, 0x16, 0xe0, 0x4e, 0xe8,
 130        0x12, 0xe8, 0x21, 0xc5, 0xa0, 0x73, 0xb0, 0x49,
 131        0x03, 0xf0, 0x31, 0x48, 0xa0, 0x9b, 0x0d, 0xe0,
 132        0xc0, 0x49, 0x0b, 0xf1, 0xe2, 0x63, 0x7e, 0x1d,
 133        0xdd, 0x46, 0xe2, 0x8b, 0xe0, 0x75, 0x83, 0x1b,
 134        0xeb, 0x46, 0xfe, 0x1b, 0x6b, 0x46, 0xe0, 0x9d,
 135        0xe4, 0x49, 0x11, 0xf0, 0x10, 0x1d, 0xea, 0x8d,
 136        0xe3, 0x64, 0xc6, 0x49, 0x09, 0xf1, 0x07, 0xc5,
 137        0xa0, 0x73, 0xb1, 0x48, 0xa0, 0x9b, 0x02, 0xc5,
 138        0x00, 0xbd, 0xe6, 0x04, 0xa0, 0xd1, 0x02, 0xc5,
 139        0x00, 0xbd, 0xfe, 0x04, 0x02, 0xc5, 0x00, 0xbd,
 140        0x30, 0x05, 0x00, 0x00 };
 141
 142static u16 r8152b_ram_code1[] = {
 143        0x9700, 0x7fe0, 0x4c00, 0x4007, 0x4400, 0x4800, 0x7c1f, 0x4c00,
 144        0x5310, 0x6000, 0x7c07, 0x6800, 0x673e, 0x0000, 0x0000, 0x571f,
 145        0x5ffb, 0xaa05, 0x5b58, 0x7d80, 0x6100, 0x3019, 0x5b64, 0x7d80,
 146        0x6080, 0xa6f8, 0xdcdb, 0x0015, 0xb915, 0xb511, 0xd16b, 0x000f,
 147        0xb40f, 0xd06b, 0x000d, 0xb206, 0x7c01, 0x5800, 0x7c04, 0x5c00,
 148        0x3011, 0x7c01, 0x5801, 0x7c04, 0x5c04, 0x3019, 0x30a5, 0x3127,
 149        0x31d5, 0x7fe0, 0x4c60, 0x7c07, 0x6803, 0x7d00, 0x6900, 0x65a0,
 150        0x0000, 0x0000, 0xaf03, 0x6015, 0x303e, 0x6017, 0x57e0, 0x580c,
 151        0x588c, 0x7fdd, 0x5fa2, 0x4827, 0x7c1f, 0x4c00, 0x7c1f, 0x4c10,
 152        0x8400, 0x7c30, 0x6020, 0x48bf, 0x7c1f, 0x4c00, 0x7c1f, 0x4c01,
 153        0x7c07, 0x6803, 0xb806, 0x7c08, 0x6800, 0x0000, 0x0000, 0x305c,
 154        0x7c08, 0x6808, 0x0000, 0x0000, 0xae06, 0x7c02, 0x5c02, 0x0000,
 155        0x0000, 0x3067, 0x8e05, 0x7c02, 0x5c00, 0x0000, 0x0000, 0xad06,
 156        0x7c20, 0x5c20, 0x0000, 0x0000, 0x3072, 0x8d05, 0x7c20, 0x5c00,
 157        0x0000, 0x0000, 0xa008, 0x7c07, 0x6800, 0xb8db, 0x7c07, 0x6803,
 158        0xd9b3, 0x00d7, 0x7fe0, 0x4c80, 0x7c08, 0x6800, 0x0000, 0x0000,
 159        0x7c23, 0x5c23, 0x481d, 0x7c1f, 0x4c00, 0x7c1f, 0x4c02, 0x5310,
 160        0x81ff, 0x30f5, 0x7fe0, 0x4d00, 0x4832, 0x7c1f, 0x4c00, 0x7c1f,
 161        0x4c10, 0x7c08, 0x6000, 0xa49e, 0x7c07, 0x6800, 0xb89b, 0x7c07,
 162        0x6803, 0xd9b3, 0x00f9, 0x7fe0, 0x4d20, 0x7e00, 0x6200, 0x3001,
 163        0x7fe0, 0x4dc0, 0xd09d, 0x0002, 0xb4fe, 0x7fe0, 0x4d80, 0x7c04,
 164        0x6004, 0x7c07, 0x6802, 0x6728, 0x0000, 0x0000, 0x7c08, 0x6000,
 165        0x486c, 0x7c1f, 0x4c00, 0x7c1f, 0x4c01, 0x9503, 0x7e00, 0x6200,
 166        0x571f, 0x5fbb, 0xaa05, 0x5b58, 0x7d80, 0x6100, 0x30c2, 0x5b64,
 167        0x7d80, 0x6080, 0xcdab, 0x0063, 0xcd8d, 0x0061, 0xd96b, 0x005f,
 168        0xd0a0, 0x00d7, 0xcba0, 0x0003, 0x80ec, 0x30cf, 0x30dc, 0x7fe0,
 169        0x4ce0, 0x4832, 0x7c1f, 0x4c00, 0x7c1f, 0x4c08, 0x7c08, 0x6008,
 170        0x8300, 0xb902, 0x30a5, 0x308a, 0x7fe0, 0x4da0, 0x65a8, 0x0000,
 171        0x0000, 0x56a0, 0x590c, 0x7ffd, 0x5fa2, 0xae06, 0x7c02, 0x5c02,
 172        0x0000, 0x0000, 0x30f0, 0x8e05, 0x7c02, 0x5c00, 0x0000, 0x0000,
 173        0xcba4, 0x0004, 0xcd8d, 0x0002, 0x80f1, 0x7fe0, 0x4ca0, 0x7c08,
 174        0x6408, 0x0000, 0x0000, 0x7d00, 0x6800, 0xb603, 0x7c10, 0x6010,
 175        0x7d1f, 0x551f, 0x5fb3, 0xaa07, 0x7c80, 0x5800, 0x5b58, 0x7d80,
 176        0x6100, 0x310f, 0x7c80, 0x5800, 0x5b64, 0x7d80, 0x6080, 0x4827,
 177        0x7c1f, 0x4c00, 0x7c1f, 0x4c10, 0x8400, 0x7c10, 0x6000, 0x7fe0,
 178        0x4cc0, 0x5fbb, 0x4824, 0x7c1f, 0x4c00, 0x7c1f, 0x4c04, 0x8200,
 179        0x7ce0, 0x5400, 0x6728, 0x0000, 0x0000, 0x30cf, 0x3001, 0x7fe0,
 180        0x4e00, 0x4007, 0x4400, 0x5310, 0x7c07, 0x6800, 0x673e, 0x0000,
 181        0x0000, 0x570f, 0x5fff, 0xaa05, 0x585b, 0x7d80, 0x6100, 0x313b,
 182        0x5867, 0x7d80, 0x6080, 0x9403, 0x7e00, 0x6200, 0xcda3, 0x00e7,
 183        0xcd85, 0x00e5, 0xd96b, 0x00e3, 0x96e3, 0x7c07, 0x6800, 0x673e,
 184        0x0000, 0x0000, 0x7fe0, 0x4e20, 0x96db, 0x8b04, 0x7c08, 0x5008,
 185        0xab03, 0x7c08, 0x5000, 0x7c07, 0x6801, 0x677e, 0x0000, 0x0000,
 186        0xdb7c, 0x00ec, 0x0000, 0x7fe1, 0x4f40, 0x4837, 0x4418, 0x41c7,
 187        0x7fe0, 0x4e40, 0x7c40, 0x5400, 0x7c1f, 0x4c01, 0x7c1f, 0x4c01,
 188        0x8fbf, 0xd2a0, 0x004b, 0x9204, 0xa042, 0x3168, 0x3127, 0x7fe1,
 189        0x4f60, 0x489c, 0x4628, 0x7fe0, 0x4e60, 0x7e28, 0x4628, 0x7c40,
 190        0x5400, 0x7c01, 0x5800, 0x7c04, 0x5c00, 0x41e8, 0x7c1f, 0x4c01,
 191        0x7c1f, 0x4c01, 0x8fa5, 0xb241, 0xa02a, 0x3182, 0x7fe0, 0x4ea0,
 192        0x7c02, 0x4402, 0x4448, 0x4894, 0x7c1f, 0x4c01, 0x7c1f, 0x4c03,
 193        0x4824, 0x7c1f, 0x4c07, 0x41ef, 0x41ff, 0x4891, 0x7c1f, 0x4c07,
 194        0x7c1f, 0x4c17, 0x8400, 0x8ef8, 0x41c7, 0x8f8a, 0x92d5, 0xa10f,
 195        0xd480, 0x0008, 0xd580, 0x00b8, 0xa202, 0x319d, 0x7c04, 0x4404,
 196        0x319d, 0xd484, 0x00f3, 0xd484, 0x00f1, 0x3127, 0x7fe0, 0x4ee0,
 197        0x7c40, 0x5400, 0x4488, 0x41cf, 0x3127, 0x7fe0, 0x4ec0, 0x48f3,
 198        0x7c1f, 0x4c01, 0x7c1f, 0x4c09, 0x4508, 0x41c7, 0x8fb0, 0xd218,
 199        0x00ae, 0xd2a4, 0x009e, 0x31be, 0x7fe0, 0x4e80, 0x4832, 0x7c1f,
 200        0x4c01, 0x7c1f, 0x4c11, 0x4428, 0x7c40, 0x5440, 0x7c01, 0x5801,
 201        0x7c04, 0x5c04, 0x41e8, 0xa4b3, 0x31d3, 0x7fe0, 0x4f20, 0x7c07,
 202        0x6800, 0x673e, 0x0000, 0x0000, 0x570f, 0x5fff, 0xaa04, 0x585b,
 203        0x6100, 0x31e4, 0x5867, 0x6080, 0xbcf1, 0x3001 };
 204
 205static u16 r8152b_pla_patch_a_bp[] = {
 206        0xfc26, 0x8000, 0xfc28, 0x170b, 0xfc2a, 0x01e1, 0xfc2c, 0x0989,
 207        0xfc2e, 0x1349, 0xfc30, 0x01b7, 0xfc32, 0x061d, 0xe422, 0x0020,
 208        0xe420, 0x0018, 0xfc34, 0x1785, 0xfc36, 0x047b };
 209
 210static u8 r8152b_pla_patch_a2[] = {
 211        0x08, 0xe0, 0x1a, 0xe0, 0xf2, 0xe0, 0xfa, 0xe0,
 212        0x32, 0xe1, 0x34, 0xe1, 0x36, 0xe1, 0x38, 0xe1,
 213        0x2c, 0x75, 0xdc, 0x21, 0xbc, 0x25, 0x04, 0x13,
 214        0x0b, 0xf0, 0x03, 0x13, 0x09, 0xf0, 0x02, 0x13,
 215        0x07, 0xf0, 0x01, 0x13, 0x05, 0xf0, 0x08, 0x13,
 216        0x03, 0xf0, 0x04, 0xc3, 0x00, 0xbb, 0x03, 0xc3,
 217        0x00, 0xbb, 0xd2, 0x17, 0xbc, 0x17, 0x14, 0xc2,
 218        0x40, 0x73, 0xba, 0x48, 0x40, 0x9b, 0x11, 0xc2,
 219        0x40, 0x73, 0xb0, 0x49, 0x17, 0xf0, 0xbf, 0x49,
 220        0x03, 0xf1, 0x09, 0xc5, 0x00, 0xbd, 0xb1, 0x49,
 221        0x11, 0xf0, 0xb1, 0x48, 0x40, 0x9b, 0x02, 0xc2,
 222        0x00, 0xba, 0x4e, 0x19, 0x00, 0xa0, 0x1e, 0xfc,
 223        0xbc, 0xc0, 0xf0, 0xc0, 0xde, 0xe8, 0x00, 0x80,
 224        0x00, 0x60, 0x2c, 0x75, 0xd4, 0x49, 0x12, 0xf1,
 225        0x29, 0xe0, 0xf8, 0xc2, 0x46, 0x71, 0xf7, 0xc2,
 226        0x40, 0x73, 0xbe, 0x49, 0x03, 0xf1, 0xf5, 0xc7,
 227        0x02, 0xe0, 0xf2, 0xc7, 0x4f, 0x30, 0x26, 0x62,
 228        0xa1, 0x49, 0xf0, 0xf1, 0x22, 0x72, 0xa0, 0x49,
 229        0xed, 0xf1, 0x25, 0x25, 0x18, 0x1f, 0x97, 0x30,
 230        0x91, 0x30, 0x36, 0x9a, 0x2c, 0x75, 0x32, 0xc3,
 231        0x60, 0x73, 0xb1, 0x49, 0x0d, 0xf1, 0xdc, 0x21,
 232        0xbc, 0x25, 0x27, 0xc6, 0xc0, 0x77, 0x04, 0x13,
 233        0x18, 0xf0, 0x03, 0x13, 0x19, 0xf0, 0x02, 0x13,
 234        0x1a, 0xf0, 0x01, 0x13, 0x1b, 0xf0, 0xd4, 0x49,
 235        0x03, 0xf1, 0x1c, 0xc5, 0x00, 0xbd, 0xcd, 0xc6,
 236        0xc6, 0x67, 0x2e, 0x75, 0xd7, 0x22, 0xdd, 0x26,
 237        0x05, 0x15, 0x1a, 0xf0, 0x14, 0xc6, 0x00, 0xbe,
 238        0x13, 0xc5, 0x00, 0xbd, 0x12, 0xc5, 0x00, 0xbd,
 239        0xf1, 0x49, 0xfb, 0xf1, 0xef, 0xe7, 0xf4, 0x49,
 240        0xfa, 0xf1, 0xec, 0xe7, 0xf3, 0x49, 0xf7, 0xf1,
 241        0xe9, 0xe7, 0xf2, 0x49, 0xf4, 0xf1, 0xe6, 0xe7,
 242        0xb6, 0xc0, 0xf6, 0x14, 0x36, 0x14, 0x62, 0x14,
 243        0x86, 0x15, 0xa0, 0xd1, 0x00, 0x00, 0xc0, 0x75,
 244        0xd0, 0x49, 0x46, 0xf0, 0x26, 0x72, 0xa7, 0x49,
 245        0x43, 0xf0, 0x22, 0x72, 0x25, 0x25, 0x20, 0x1f,
 246        0x97, 0x30, 0x91, 0x30, 0x40, 0x73, 0xf3, 0xc4,
 247        0x1c, 0x40, 0x04, 0xf0, 0xd7, 0x49, 0x05, 0xf1,
 248        0x37, 0xe0, 0x53, 0x48, 0xc0, 0x9d, 0x08, 0x02,
 249        0x40, 0x66, 0x64, 0x27, 0x06, 0x16, 0x30, 0xf1,
 250        0x46, 0x63, 0x3b, 0x13, 0x2d, 0xf1, 0x34, 0x9b,
 251        0x18, 0x1b, 0x93, 0x30, 0x2b, 0xc3, 0x10, 0x1c,
 252        0x2b, 0xe8, 0x01, 0x14, 0x25, 0xf1, 0x00, 0x1d,
 253        0x26, 0x1a, 0x8a, 0x30, 0x22, 0x73, 0xb5, 0x25,
 254        0x0e, 0x0b, 0x00, 0x1c, 0x2c, 0xe8, 0x1f, 0xc7,
 255        0x27, 0x40, 0x1a, 0xf1, 0x38, 0xe8, 0x32, 0x1f,
 256        0x8f, 0x30, 0x08, 0x1b, 0x24, 0xe8, 0x36, 0x72,
 257        0x46, 0x77, 0x00, 0x17, 0x0d, 0xf0, 0x13, 0xc3,
 258        0x1f, 0x40, 0x03, 0xf1, 0x00, 0x1f, 0x46, 0x9f,
 259        0x44, 0x77, 0x9f, 0x44, 0x5f, 0x44, 0x17, 0xe8,
 260        0x0a, 0xc7, 0x27, 0x40, 0x05, 0xf1, 0x02, 0xc3,
 261        0x00, 0xbb, 0x1c, 0x1b, 0xd2, 0x1a, 0xff, 0xc7,
 262        0x00, 0xbf, 0xb8, 0xcd, 0xff, 0xff, 0x02, 0x0c,
 263        0x54, 0xa5, 0xdc, 0xa5, 0x2f, 0x40, 0x05, 0xf1,
 264        0x00, 0x14, 0xfa, 0xf1, 0x01, 0x1c, 0x02, 0xe0,
 265        0x00, 0x1c, 0x80, 0xff, 0xb0, 0x49, 0x04, 0xf0,
 266        0x01, 0x0b, 0xd3, 0xa1, 0x03, 0xe0, 0x02, 0x0b,
 267        0xd3, 0xa5, 0x27, 0x31, 0x20, 0x37, 0x02, 0x0b,
 268        0xd3, 0xa5, 0x27, 0x31, 0x20, 0x37, 0x00, 0x13,
 269        0xfb, 0xf1, 0x80, 0xff, 0x22, 0x73, 0xb5, 0x25,
 270        0x18, 0x1e, 0xde, 0x30, 0xd9, 0x30, 0x64, 0x72,
 271        0x11, 0x1e, 0x68, 0x23, 0x16, 0x31, 0x80, 0xff,
 272        0x08, 0xc2, 0x40, 0x73, 0x3a, 0x48, 0x40, 0x9b,
 273        0x06, 0xff, 0x02, 0xc6, 0x00, 0xbe, 0x4e, 0x18,
 274        0x1e, 0xfc, 0x33, 0xc5, 0xa0, 0x74, 0xc0, 0x49,
 275        0x1f, 0xf0, 0x30, 0xc5, 0xa0, 0x73, 0x00, 0x13,
 276        0x04, 0xf1, 0xa2, 0x73, 0x00, 0x13, 0x14, 0xf0,
 277        0x28, 0xc5, 0xa0, 0x74, 0xc8, 0x49, 0x1b, 0xf1,
 278        0x26, 0xc5, 0xa0, 0x76, 0xa2, 0x74, 0x01, 0x06,
 279        0x20, 0x37, 0xa0, 0x9e, 0xa2, 0x9c, 0x1e, 0xc5,
 280        0xa2, 0x73, 0x23, 0x40, 0x10, 0xf8, 0x04, 0xf3,
 281        0xa0, 0x73, 0x33, 0x40, 0x0c, 0xf8, 0x15, 0xc5,
 282        0xa0, 0x74, 0x41, 0x48, 0xa0, 0x9c, 0x14, 0xc5,
 283        0xa0, 0x76, 0x62, 0x48, 0xe0, 0x48, 0xa0, 0x9e,
 284        0x10, 0xc6, 0x00, 0xbe, 0x0a, 0xc5, 0xa0, 0x74,
 285        0x48, 0x48, 0xa0, 0x9c, 0x0b, 0xc5, 0x20, 0x1e,
 286        0xa0, 0x9e, 0xe5, 0x48, 0xa0, 0x9e, 0xf0, 0xe7,
 287        0xbc, 0xc0, 0xc8, 0xd2, 0xcc, 0xd2, 0x28, 0xe4,
 288        0x22, 0x02, 0xf0, 0xc0, 0x02, 0xc6, 0x00, 0xbe,
 289        0x00, 0x00, 0x02, 0xc6, 0x00, 0xbe, 0x00, 0x00,
 290        0x02, 0xc6, 0x00, 0xbe, 0x00, 0x00, 0x02, 0xc6,
 291        0x00, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
 292
 293static u16 r8152b_pla_patch_a2_bp[] = {
 294        0xfc28, 0x8000, 0xfc28, 0x17a5, 0xfc2a, 0x13ad,
 295        0xfc2c, 0x184d, 0xfc2e, 0x01e1 };
 296
 297static u16 r8153_ram_code_a[] = {
 298        0xE86C, 0xA000, 0xB436, 0xB820, 0xB438, 0x0290, 0xB436, 0xA012,
 299        0xB438, 0x0000, 0xB436, 0xA014, 0xB438, 0x2c04, 0xB438, 0x2c18,
 300        0xB438, 0x2c45, 0xB438, 0x2c45, 0xB438, 0xd502, 0xB438, 0x8301,
 301        0xB438, 0x8306, 0xB438, 0xd500, 0xB438, 0x8208, 0xB438, 0xd501,
 302        0xB438, 0xe018, 0xB438, 0x0308, 0xB438, 0x60f2, 0xB438, 0x8404,
 303        0xB438, 0x607d, 0xB438, 0xc117, 0xB438, 0x2c16, 0xB438, 0xc116,
 304        0xB438, 0x2c16, 0xB438, 0x607d, 0xB438, 0xc117, 0xB438, 0xa404,
 305        0xB438, 0xd500, 0xB438, 0x0800, 0xB438, 0xd501, 0xB438, 0x62d2,
 306        0xB438, 0x615d, 0xB438, 0xc115, 0xB438, 0xa404, 0xB438, 0xc307,
 307        0xB438, 0xd502, 0xB438, 0x8301, 0xB438, 0x8306, 0xB438, 0xd500,
 308        0xB438, 0x8208, 0xB438, 0x2c42, 0xB438, 0xc114, 0xB438, 0x8404,
 309        0xB438, 0xc317, 0xB438, 0xd701, 0xB438, 0x435d, 0xB438, 0xd500,
 310        0xB438, 0xa208, 0xB438, 0xd502, 0xB438, 0xa306, 0xB438, 0xa301,
 311        0xB438, 0x2c42, 0xB438, 0x8404, 0xB438, 0x613d, 0xB438, 0xc115,
 312        0xB438, 0xc307, 0xB438, 0xd502, 0xB438, 0x8301, 0xB438, 0x8306,
 313        0xB438, 0xd500, 0xB438, 0x8208, 0xB438, 0x2c42, 0xB438, 0xc114,
 314        0xB438, 0xc317, 0xB438, 0xd701, 0xB438, 0x40dd, 0xB438, 0xd500,
 315        0xB438, 0xa208, 0xB438, 0xd502, 0xB438, 0xa306, 0xB438, 0xa301,
 316        0xB438, 0xd500, 0xB438, 0xd702, 0xB438, 0x0800, 0xB436, 0xA01A,
 317        0xB438, 0x0000, 0xB436, 0xA006, 0xB438, 0x0fff, 0xB436, 0xA004,
 318        0xB438, 0x0fff, 0xB436, 0xA002, 0xB438, 0x05a3, 0xB436, 0xA000,
 319        0xB438, 0x3591, 0xB436, 0xB820, 0xB438, 0x0210 };
 320
 321static u8 r8153_usb_patch_c[] = {
 322        0x08, 0xe0, 0x0a, 0xe0, 0x14, 0xe0, 0x2e, 0xe0,
 323        0x37, 0xe0, 0x3e, 0xe0, 0x6d, 0xe0, 0x78, 0xe0,
 324        0x02, 0xc5, 0x00, 0xbd, 0x38, 0x3b, 0xdb, 0x49,
 325        0x04, 0xf1, 0x06, 0xc3, 0x00, 0xbb, 0x5a, 0x02,
 326        0x05, 0xc4, 0x03, 0xc3, 0x00, 0xbb, 0xa4, 0x04,
 327        0x7e, 0x02, 0x30, 0xd4, 0x30, 0x18, 0x18, 0xc1,
 328        0x0c, 0xe8, 0x17, 0xc6, 0xc7, 0x65, 0xd0, 0x49,
 329        0x05, 0xf0, 0x32, 0x48, 0x02, 0xc2, 0x00, 0xba,
 330        0x3e, 0x16, 0x02, 0xc2, 0x00, 0xba, 0x48, 0x16,
 331        0x02, 0xb4, 0x09, 0xc2, 0x40, 0x99, 0x0e, 0x48,
 332        0x42, 0x98, 0x42, 0x70, 0x8e, 0x49, 0xfe, 0xf1,
 333        0x02, 0xb0, 0x80, 0xff, 0xc0, 0xd4, 0xe4, 0x40,
 334        0x20, 0xd4, 0xb0, 0x49, 0x04, 0xf0, 0x30, 0x18,
 335        0x06, 0xc1, 0xef, 0xef, 0xfa, 0xc7, 0x02, 0xc0,
 336        0x00, 0xb8, 0xd0, 0x10, 0xe4, 0x4b, 0x07, 0xc3,
 337        0x70, 0x61, 0x12, 0x48, 0x70, 0x89, 0x02, 0xc3,
 338        0x00, 0xbb, 0x9c, 0x15, 0x20, 0xd4, 0x2b, 0xc5,
 339        0xa0, 0x77, 0x00, 0x1c, 0xa0, 0x9c, 0x28, 0xc5,
 340        0xa0, 0x64, 0xc0, 0x48, 0xc1, 0x48, 0xc2, 0x48,
 341        0xa0, 0x8c, 0xb1, 0x64, 0xc0, 0x48, 0xb1, 0x8c,
 342        0x20, 0xc5, 0xa0, 0x64, 0x40, 0x48, 0x41, 0x48,
 343        0xc2, 0x48, 0xa0, 0x8c, 0x19, 0xc5, 0xa4, 0x64,
 344        0x44, 0x48, 0xa4, 0x8c, 0xb1, 0x64, 0x40, 0x48,
 345        0xb1, 0x8c, 0x14, 0xc4, 0x80, 0x73, 0x13, 0xc4,
 346        0x82, 0x9b, 0x11, 0x1b, 0x80, 0x9b, 0x0c, 0xc5,
 347        0xa0, 0x64, 0x40, 0x48, 0x41, 0x48, 0x42, 0x48,
 348        0xa0, 0x8c, 0x05, 0xc5, 0xa0, 0x9f, 0x02, 0xc5,
 349        0x00, 0xbd, 0x6c, 0x3a, 0x1e, 0xfc, 0x10, 0xd8,
 350        0x86, 0xd4, 0xf8, 0xcb, 0x20, 0xe4, 0x0a, 0xc0,
 351        0x16, 0x61, 0x91, 0x48, 0x16, 0x89, 0x07, 0xc0,
 352        0x11, 0x19, 0x0c, 0x89, 0x02, 0xc1, 0x00, 0xb9,
 353        0x02, 0x06, 0x00, 0xd4, 0x40, 0xb4, 0xfe, 0xc0,
 354        0x16, 0x61, 0x91, 0x48, 0x16, 0x89, 0xfb, 0xc0,
 355        0x11, 0x19, 0x0c, 0x89, 0x02, 0xc1, 0x00, 0xb9,
 356        0xd2, 0x05, 0x00, 0x00 };
 357
 358static u16 r8153_usb_patch_c_bp[] = {
 359        0xfc26, 0xa000, 0xfc28, 0x3b34, 0xfc2a, 0x027c, 0xfc2c, 0x162c,
 360        0xfc2e, 0x10ce, 0xfc30, 0x0000, 0xfc32, 0x3a28, 0xfc34, 0x05f8,
 361        0xfc36, 0x05c8 };
 362
 363static u8 r8153_pla_patch_c[] = {
 364        0x08, 0xe0, 0xea, 0xe0, 0xf2, 0xe0, 0x04, 0xe1,
 365        0x06, 0xe1, 0x08, 0xe1, 0x40, 0xe1, 0xf1, 0xe1,
 366        0x14, 0xc2, 0x40, 0x73, 0xba, 0x48, 0x40, 0x9b,
 367        0x11, 0xc2, 0x40, 0x73, 0xb0, 0x49, 0x17, 0xf0,
 368        0xbf, 0x49, 0x03, 0xf1, 0x09, 0xc5, 0x00, 0xbd,
 369        0xb1, 0x49, 0x11, 0xf0, 0xb1, 0x48, 0x40, 0x9b,
 370        0x02, 0xc2, 0x00, 0xba, 0xde, 0x18, 0x00, 0xe0,
 371        0x1e, 0xfc, 0xbc, 0xc0, 0xf0, 0xc0, 0xde, 0xe8,
 372        0x00, 0x80, 0x00, 0x20, 0x2c, 0x75, 0xd4, 0x49,
 373        0x12, 0xf1, 0x32, 0xe0, 0xf8, 0xc2, 0x46, 0x71,
 374        0xf7, 0xc2, 0x40, 0x73, 0xbe, 0x49, 0x03, 0xf1,
 375        0xf5, 0xc7, 0x02, 0xe0, 0xf2, 0xc7, 0x4f, 0x30,
 376        0x26, 0x62, 0xa1, 0x49, 0xf0, 0xf1, 0x22, 0x72,
 377        0xa0, 0x49, 0xed, 0xf1, 0x25, 0x25, 0x18, 0x1f,
 378        0x97, 0x30, 0x91, 0x30, 0x36, 0x9a, 0x2c, 0x75,
 379        0x3c, 0xc3, 0x60, 0x73, 0xb1, 0x49, 0x0d, 0xf1,
 380        0xdc, 0x21, 0xbc, 0x25, 0x30, 0xc6, 0xc0, 0x77,
 381        0x04, 0x13, 0x21, 0xf0, 0x03, 0x13, 0x22, 0xf0,
 382        0x02, 0x13, 0x23, 0xf0, 0x01, 0x13, 0x24, 0xf0,
 383        0x08, 0x13, 0x08, 0xf1, 0x2e, 0x73, 0xba, 0x21,
 384        0xbd, 0x25, 0x05, 0x13, 0x03, 0xf1, 0x24, 0xc5,
 385        0x00, 0xbd, 0xd4, 0x49, 0x03, 0xf1, 0x1c, 0xc5,
 386        0x00, 0xbd, 0xc4, 0xc6, 0xc6, 0x67, 0x2e, 0x75,
 387        0xd7, 0x22, 0xdd, 0x26, 0x05, 0x15, 0x1b, 0xf0,
 388        0x14, 0xc6, 0x00, 0xbe, 0x13, 0xc5, 0x00, 0xbd,
 389        0x12, 0xc5, 0x00, 0xbd, 0xf1, 0x49, 0xfb, 0xf1,
 390        0xef, 0xe7, 0xf4, 0x49, 0xfa, 0xf1, 0xec, 0xe7,
 391        0xf3, 0x49, 0xf7, 0xf1, 0xe9, 0xe7, 0xf2, 0x49,
 392        0xf4, 0xf1, 0xe6, 0xe7, 0xb6, 0xc0, 0x50, 0x14,
 393        0x90, 0x13, 0xbc, 0x13, 0xf2, 0x14, 0x00, 0xa0,
 394        0xa0, 0xd1, 0x00, 0x00, 0xc0, 0x75, 0xd0, 0x49,
 395        0x46, 0xf0, 0x26, 0x72, 0xa7, 0x49, 0x43, 0xf0,
 396        0x22, 0x72, 0x25, 0x25, 0x20, 0x1f, 0x97, 0x30,
 397        0x91, 0x30, 0x40, 0x73, 0xf3, 0xc4, 0x1c, 0x40,
 398        0x04, 0xf0, 0xd7, 0x49, 0x05, 0xf1, 0x37, 0xe0,
 399        0x53, 0x48, 0xc0, 0x9d, 0x08, 0x02, 0x40, 0x66,
 400        0x64, 0x27, 0x06, 0x16, 0x30, 0xf1, 0x46, 0x63,
 401        0x3b, 0x13, 0x2d, 0xf1, 0x34, 0x9b, 0x18, 0x1b,
 402        0x93, 0x30, 0x2b, 0xc3, 0x10, 0x1c, 0x2b, 0xe8,
 403        0x01, 0x14, 0x25, 0xf1, 0x00, 0x1d, 0x26, 0x1a,
 404        0x8a, 0x30, 0x22, 0x73, 0xb5, 0x25, 0x0e, 0x0b,
 405        0x00, 0x1c, 0x2c, 0xe8, 0x1f, 0xc7, 0x27, 0x40,
 406        0x1a, 0xf1, 0x38, 0xe8, 0x32, 0x1f, 0x8f, 0x30,
 407        0x08, 0x1b, 0x24, 0xe8, 0x36, 0x72, 0x46, 0x77,
 408        0x00, 0x17, 0x0d, 0xf0, 0x13, 0xc3, 0x1f, 0x40,
 409        0x03, 0xf1, 0x00, 0x1f, 0x46, 0x9f, 0x44, 0x77,
 410        0x9f, 0x44, 0x5f, 0x44, 0x17, 0xe8, 0x0a, 0xc7,
 411        0x27, 0x40, 0x05, 0xf1, 0x02, 0xc3, 0x00, 0xbb,
 412        0xbe, 0x1a, 0x74, 0x14, 0xff, 0xc7, 0x00, 0xbf,
 413        0xb8, 0xcd, 0xff, 0xff, 0x02, 0x0c, 0x54, 0xa5,
 414        0xdc, 0xa5, 0x2f, 0x40, 0x05, 0xf1, 0x00, 0x14,
 415        0xfa, 0xf1, 0x01, 0x1c, 0x02, 0xe0, 0x00, 0x1c,
 416        0x80, 0xff, 0xb0, 0x49, 0x04, 0xf0, 0x01, 0x0b,
 417        0xd3, 0xa1, 0x03, 0xe0, 0x02, 0x0b, 0xd3, 0xa5,
 418        0x27, 0x31, 0x20, 0x37, 0x02, 0x0b, 0xd3, 0xa5,
 419        0x27, 0x31, 0x20, 0x37, 0x00, 0x13, 0xfb, 0xf1,
 420        0x80, 0xff, 0x22, 0x73, 0xb5, 0x25, 0x18, 0x1e,
 421        0xde, 0x30, 0xd9, 0x30, 0x64, 0x72, 0x11, 0x1e,
 422        0x68, 0x23, 0x16, 0x31, 0x80, 0xff, 0x08, 0xc2,
 423        0x40, 0x73, 0x3a, 0x48, 0x40, 0x9b, 0x06, 0xff,
 424        0x02, 0xc6, 0x00, 0xbe, 0xcc, 0x17, 0x1e, 0xfc,
 425        0x2c, 0x75, 0xdc, 0x21, 0xbc, 0x25, 0x04, 0x13,
 426        0x0b, 0xf0, 0x03, 0x13, 0x09, 0xf0, 0x02, 0x13,
 427        0x07, 0xf0, 0x01, 0x13, 0x05, 0xf0, 0x08, 0x13,
 428        0x03, 0xf0, 0x04, 0xc3, 0x00, 0xbb, 0x03, 0xc3,
 429        0x00, 0xbb, 0x50, 0x17, 0x3a, 0x17, 0x02, 0xc6,
 430        0x00, 0xbe, 0x00, 0x00, 0x02, 0xc6, 0x00, 0xbe,
 431        0x00, 0x00, 0x33, 0xc5, 0xa0, 0x74, 0xc0, 0x49,
 432        0x1f, 0xf0, 0x30, 0xc5, 0xa0, 0x73, 0x00, 0x13,
 433        0x04, 0xf1, 0xa2, 0x73, 0x00, 0x13, 0x14, 0xf0,
 434        0x28, 0xc5, 0xa0, 0x74, 0xc8, 0x49, 0x1b, 0xf1,
 435        0x26, 0xc5, 0xa0, 0x76, 0xa2, 0x74, 0x01, 0x06,
 436        0x20, 0x37, 0xa0, 0x9e, 0xa2, 0x9c, 0x1e, 0xc5,
 437        0xa2, 0x73, 0x23, 0x40, 0x10, 0xf8, 0x04, 0xf3,
 438        0xa0, 0x73, 0x33, 0x40, 0x0c, 0xf8, 0x15, 0xc5,
 439        0xa0, 0x74, 0x41, 0x48, 0xa0, 0x9c, 0x14, 0xc5,
 440        0xa0, 0x76, 0x62, 0x48, 0xe0, 0x48, 0xa0, 0x9e,
 441        0x10, 0xc6, 0x00, 0xbe, 0x0a, 0xc5, 0xa0, 0x74,
 442        0x48, 0x48, 0xa0, 0x9c, 0x0b, 0xc5, 0x20, 0x1e,
 443        0xa0, 0x9e, 0xe5, 0x48, 0xa0, 0x9e, 0xf0, 0xe7,
 444        0xbc, 0xc0, 0xc8, 0xd2, 0xcc, 0xd2, 0x28, 0xe4,
 445        0xfa, 0x01, 0xf0, 0xc0, 0x18, 0x89, 0x00, 0x1d,
 446        0x43, 0xc3, 0x62, 0x62, 0xa0, 0x49, 0x06, 0xf0,
 447        0x41, 0xc0, 0x02, 0x71, 0x60, 0x99, 0x3f, 0xc1,
 448        0x03, 0xe0, 0x3c, 0xc0, 0x3d, 0xc1, 0x02, 0x99,
 449        0x00, 0x61, 0x67, 0x11, 0x3d, 0xf1, 0x69, 0x33,
 450        0x34, 0xc0, 0x28, 0x40, 0xf7, 0xf1, 0x35, 0xc0,
 451        0x00, 0x19, 0x81, 0x1b, 0x89, 0xe8, 0x32, 0xc0,
 452        0x04, 0x1a, 0x84, 0x1b, 0x85, 0xe8, 0x7a, 0xe8,
 453        0xa3, 0x49, 0xfe, 0xf0, 0x2c, 0xc0, 0x76, 0xe8,
 454        0xa1, 0x48, 0x29, 0xc0, 0x84, 0x1b, 0x7c, 0xe8,
 455        0x00, 0x1d, 0x69, 0x33, 0x00, 0x1e, 0x01, 0x06,
 456        0xff, 0x18, 0x30, 0x40, 0xfd, 0xf1, 0x7f, 0xc0,
 457        0x00, 0x76, 0x2e, 0x40, 0xf7, 0xf1, 0x21, 0x48,
 458        0x1a, 0xc0, 0x84, 0x1b, 0x6d, 0xe8, 0x76, 0xc0,
 459        0x61, 0xe8, 0xa1, 0x49, 0xfd, 0xf0, 0x12, 0xc0,
 460        0x00, 0x1a, 0x84, 0x1b, 0x65, 0xe8, 0x5a, 0xe8,
 461        0xa5, 0x49, 0xfe, 0xf0, 0x0a, 0xc0, 0x01, 0x19,
 462        0x81, 0x1b, 0x5e, 0xe8, 0x48, 0xe0, 0x8c, 0xd3,
 463        0xb8, 0x0b, 0x50, 0xe8, 0x83, 0x00, 0x82, 0x00,
 464        0x20, 0xb4, 0x10, 0xd8, 0x84, 0xd4, 0xfa, 0xc0,
 465        0x00, 0x61, 0x9c, 0x20, 0x9c, 0x24, 0x06, 0x11,
 466        0x06, 0xf1, 0x5d, 0xc0, 0x00, 0x61, 0x11, 0x48,
 467        0x00, 0x89, 0x35, 0xe0, 0x00, 0x11, 0x02, 0xf1,
 468        0x03, 0xe0, 0x04, 0x11, 0x06, 0xf1, 0x53, 0xc0,
 469        0x00, 0x61, 0x92, 0x48, 0x00, 0x89, 0x2b, 0xe0,
 470        0x05, 0x11, 0x08, 0xf1, 0x4c, 0xc0, 0x00, 0x61,
 471        0x91, 0x49, 0x04, 0xf0, 0x91, 0x48, 0x00, 0x89,
 472        0x11, 0xe0, 0xdc, 0xc0, 0x00, 0x61, 0x98, 0x20,
 473        0x98, 0x24, 0x25, 0x11, 0x1c, 0xf1, 0x40, 0xc0,
 474        0x25, 0xe8, 0x95, 0x49, 0x18, 0xf0, 0xd2, 0xc0,
 475        0x00, 0x61, 0x98, 0x20, 0x98, 0x24, 0x25, 0x11,
 476        0x12, 0xf1, 0x35, 0xc0, 0x00, 0x61, 0x92, 0x49,
 477        0x0e, 0xf1, 0x12, 0x48, 0x00, 0x89, 0x2d, 0xc0,
 478        0x00, 0x19, 0x00, 0x89, 0x2b, 0xc0, 0x01, 0x89,
 479        0x27, 0xc0, 0x10, 0xe8, 0x25, 0xc0, 0x12, 0x48,
 480        0x81, 0x1b, 0x16, 0xe8, 0xb9, 0xc3, 0x62, 0x62,
 481        0xa0, 0x49, 0x05, 0xf0, 0xb5, 0xc3, 0x60, 0x71,
 482        0xb5, 0xc0, 0x02, 0x99, 0x02, 0xc0, 0x00, 0xb8,
 483        0xd6, 0x07, 0x13, 0xc4, 0x84, 0x98, 0x00, 0x1b,
 484        0x86, 0x8b, 0x86, 0x73, 0xbf, 0x49, 0xfe, 0xf1,
 485        0x80, 0x71, 0x82, 0x72, 0x80, 0xff, 0x09, 0xc4,
 486        0x84, 0x98, 0x80, 0x99, 0x82, 0x9a, 0x86, 0x8b,
 487        0x86, 0x73, 0xbf, 0x49, 0xfe, 0xf1, 0x80, 0xff,
 488        0x08, 0xea, 0x10, 0xd4, 0x88, 0xd3, 0x30, 0xd4,
 489        0x10, 0xc0, 0x12, 0xe8, 0x8a, 0xd3, 0x00, 0xd8,
 490        0x02, 0xc0, 0x00, 0xb8, 0xe0, 0x08, 0x00, 0x00,
 491        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
 492
 493static u16 r8153_pla_patch_c_bp[] = {
 494        0xfc26, 0x8000, 0xfc28, 0x1306, 0xfc2a, 0x17ca, 0xfc2c, 0x171e,
 495        0xfc2e, 0x0000, 0xfc30, 0x0000, 0xfc32, 0x01b4, 0xfc34, 0x07d4,
 496        0xfc36, 0x0894, 0xfc38, 0x00e7 };
 497
 498static u16 r8153_ram_code_bc[] = {
 499        0xB436, 0xB820, 0xB438, 0x0290, 0xB436, 0xA012, 0xB438, 0x0000,
 500        0xB436, 0xA014, 0xB438, 0x2c04, 0xB438, 0x2c07, 0xB438, 0x2c0a,
 501        0xB438, 0x2c0d, 0xB438, 0xa240, 0xB438, 0xa104, 0xB438, 0x292d,
 502        0xB438, 0x8620, 0xB438, 0xa480, 0xB438, 0x2a2c, 0xB438, 0x8480,
 503        0xB438, 0xa101, 0xB438, 0x2a36, 0xB438, 0xd056, 0xB438, 0x2223,
 504        0xB436, 0xA01A, 0xB438, 0x0000, 0xB436, 0xA006, 0xB438, 0x0222,
 505        0xB436, 0xA004, 0xB438, 0x0a35, 0xB436, 0xA002, 0xB438, 0x0a2b,
 506        0xB436, 0xA000, 0xB438, 0xf92c, 0xB436, 0xB820, 0xB438, 0x0210 };
 507
 508static u8 r8153_usb_patch_b[] = {
 509        0x08, 0xe0, 0x0f, 0xe0, 0x18, 0xe0, 0x24, 0xe0,
 510        0x26, 0xe0, 0x3a, 0xe0, 0x84, 0xe0, 0x9c, 0xe0,
 511        0xc2, 0x49, 0x04, 0xf0, 0x02, 0xc0, 0x00, 0xb8,
 512        0x14, 0x18, 0x02, 0xc0, 0x00, 0xb8, 0x2e, 0x18,
 513        0x06, 0x89, 0x08, 0xc0, 0x0c, 0x61, 0x92, 0x48,
 514        0x93, 0x48, 0x0c, 0x89, 0x02, 0xc0, 0x00, 0xb8,
 515        0x08, 0x05, 0x40, 0xb4, 0x16, 0x89, 0x6d, 0xc0,
 516        0x00, 0x61, 0x95, 0x49, 0x06, 0xf0, 0xfa, 0xc0,
 517        0x0c, 0x61, 0x92, 0x48, 0x93, 0x48, 0x0c, 0x89,
 518        0x02, 0xc0, 0x00, 0xb8, 0xe2, 0x04, 0x02, 0xc2,
 519        0x00, 0xba, 0xec, 0x11, 0x60, 0x60, 0x85, 0x49,
 520        0x0d, 0xf1, 0x11, 0xc6, 0xd2, 0x61, 0x91, 0x49,
 521        0xfd, 0xf0, 0x74, 0x60, 0x04, 0x48, 0x74, 0x88,
 522        0x08, 0xc6, 0x08, 0xc0, 0xc4, 0x98, 0x01, 0x18,
 523        0xc0, 0x88, 0x02, 0xc0, 0x00, 0xb8, 0x6e, 0x12,
 524        0x04, 0xe4, 0x0d, 0x00, 0x00, 0xd4, 0xd1, 0x49,
 525        0x3c, 0xf1, 0xd2, 0x49, 0x16, 0xf1, 0xd3, 0x49,
 526        0x18, 0xf1, 0xd4, 0x49, 0x19, 0xf1, 0xd5, 0x49,
 527        0x1a, 0xf1, 0xd6, 0x49, 0x1b, 0xf1, 0xd7, 0x49,
 528        0x1c, 0xf1, 0xd8, 0x49, 0x1d, 0xf1, 0xd9, 0x49,
 529        0x20, 0xf1, 0xda, 0x49, 0x23, 0xf1, 0xdb, 0x49,
 530        0x24, 0xf1, 0x02, 0xc4, 0x00, 0xbc, 0x20, 0x04,
 531        0xe5, 0x8e, 0x02, 0xc4, 0x00, 0xbc, 0x14, 0x02,
 532        0x02, 0xc4, 0x00, 0xbc, 0x16, 0x02, 0x02, 0xc4,
 533        0x00, 0xbc, 0x18, 0x02, 0x02, 0xc4, 0x00, 0xbc,
 534        0x1a, 0x02, 0x02, 0xc4, 0x00, 0xbc, 0x1c, 0x02,
 535        0x02, 0xc4, 0x00, 0xbc, 0x94, 0x02, 0x10, 0xc7,
 536        0xe0, 0x8e, 0x02, 0xc4, 0x00, 0xbc, 0x8a, 0x02,
 537        0x0b, 0xc7, 0xe4, 0x8e, 0x02, 0xc4, 0x00, 0xbc,
 538        0x88, 0x02, 0x02, 0xc4, 0x00, 0xbc, 0x6e, 0x02,
 539        0x02, 0xc4, 0x00, 0xbc, 0x5a, 0x02, 0x30, 0xe4,
 540        0x0c, 0xc3, 0x60, 0x64, 0xc5, 0x49, 0x04, 0xf1,
 541        0x74, 0x64, 0xc4, 0x48, 0x74, 0x8c, 0x06, 0xc3,
 542        0x64, 0x8e, 0x02, 0xc4, 0x00, 0xbc, 0x20, 0x04,
 543        0x00, 0xd8, 0x00, 0xe4, 0xb2, 0xc0, 0x00, 0x61,
 544        0x90, 0x49, 0x09, 0xf1, 0x8b, 0xc6, 0xca, 0x61,
 545        0x94, 0x49, 0x0e, 0xf1, 0xf6, 0xc6, 0xda, 0x60,
 546        0x81, 0x49, 0x0a, 0xf0, 0x65, 0x60, 0x03, 0x48,
 547        0x65, 0x88, 0xef, 0xc6, 0xdc, 0x60, 0x80, 0x48,
 548        0xdc, 0x88, 0x05, 0xc6, 0x00, 0xbe, 0x02, 0xc6,
 549        0x00, 0xbe, 0x36, 0x13, 0x4c, 0x17, 0x99, 0xc4,
 550        0x80, 0x65, 0xd0, 0x49, 0x04, 0xf1, 0xfa, 0x75,
 551        0x04, 0xc4, 0x00, 0xbc, 0x03, 0xc4, 0x00, 0xbc,
 552        0x9a, 0x00, 0xee, 0x01 };
 553
 554static u16 r8153_usb_patch_b_bp[] = {
 555        0xfc26, 0xa000, 0xfc28, 0x180c, 0xfc2a, 0x0506, 0xfc2c, 0x04E0,
 556        0xfc2e, 0x11E4, 0xfc30, 0x125C, 0xfc32, 0x0232, 0xfc34, 0x131E,
 557        0xfc36, 0x0098, 0xfc38, 0x00FF };
 558
 559static u8 r8153_pla_patch_b[] = {
 560        0x08, 0xe0, 0xea, 0xe0, 0xf2, 0xe0, 0x04, 0xe1,
 561        0x09, 0xe1, 0x0e, 0xe1, 0x46, 0xe1, 0xf3, 0xe1,
 562        0x14, 0xc2, 0x40, 0x73, 0xba, 0x48, 0x40, 0x9b,
 563        0x11, 0xc2, 0x40, 0x73, 0xb0, 0x49, 0x17, 0xf0,
 564        0xbf, 0x49, 0x03, 0xf1, 0x09, 0xc5, 0x00, 0xbd,
 565        0xb1, 0x49, 0x11, 0xf0, 0xb1, 0x48, 0x40, 0x9b,
 566        0x02, 0xc2, 0x00, 0xba, 0x1a, 0x17, 0x00, 0xe0,
 567        0x1e, 0xfc, 0xbc, 0xc0, 0xf0, 0xc0, 0xde, 0xe8,
 568        0x00, 0x80, 0x00, 0x20, 0x2c, 0x75, 0xd4, 0x49,
 569        0x12, 0xf1, 0x32, 0xe0, 0xf8, 0xc2, 0x46, 0x71,
 570        0xf7, 0xc2, 0x40, 0x73, 0xbe, 0x49, 0x03, 0xf1,
 571        0xf5, 0xc7, 0x02, 0xe0, 0xf2, 0xc7, 0x4f, 0x30,
 572        0x26, 0x62, 0xa1, 0x49, 0xf0, 0xf1, 0x22, 0x72,
 573        0xa0, 0x49, 0xed, 0xf1, 0x25, 0x25, 0x18, 0x1f,
 574        0x97, 0x30, 0x91, 0x30, 0x36, 0x9a, 0x2c, 0x75,
 575        0x3c, 0xc3, 0x60, 0x73, 0xb1, 0x49, 0x0d, 0xf1,
 576        0xdc, 0x21, 0xbc, 0x25, 0x30, 0xc6, 0xc0, 0x77,
 577        0x04, 0x13, 0x21, 0xf0, 0x03, 0x13, 0x22, 0xf0,
 578        0x02, 0x13, 0x23, 0xf0, 0x01, 0x13, 0x24, 0xf0,
 579        0x08, 0x13, 0x08, 0xf1, 0x2e, 0x73, 0xba, 0x21,
 580        0xbd, 0x25, 0x05, 0x13, 0x03, 0xf1, 0x24, 0xc5,
 581        0x00, 0xbd, 0xd4, 0x49, 0x03, 0xf1, 0x1c, 0xc5,
 582        0x00, 0xbd, 0xc4, 0xc6, 0xc6, 0x67, 0x2e, 0x75,
 583        0xd7, 0x22, 0xdd, 0x26, 0x05, 0x15, 0x1b, 0xf0,
 584        0x14, 0xc6, 0x00, 0xbe, 0x13, 0xc5, 0x00, 0xbd,
 585        0x12, 0xc5, 0x00, 0xbd, 0xf1, 0x49, 0xfb, 0xf1,
 586        0xef, 0xe7, 0xf4, 0x49, 0xfa, 0xf1, 0xec, 0xe7,
 587        0xf3, 0x49, 0xf7, 0xf1, 0xe9, 0xe7, 0xf2, 0x49,
 588        0xf4, 0xf1, 0xe6, 0xe7, 0xb6, 0xc0, 0x9e, 0x12,
 589        0xde, 0x11, 0x0a, 0x12, 0x3c, 0x13, 0x00, 0xa0,
 590        0xa0, 0xd1, 0x00, 0x00, 0xc0, 0x75, 0xd0, 0x49,
 591        0x46, 0xf0, 0x26, 0x72, 0xa7, 0x49, 0x43, 0xf0,
 592        0x22, 0x72, 0x25, 0x25, 0x20, 0x1f, 0x97, 0x30,
 593        0x91, 0x30, 0x40, 0x73, 0xf3, 0xc4, 0x1c, 0x40,
 594        0x04, 0xf0, 0xd7, 0x49, 0x05, 0xf1, 0x37, 0xe0,
 595        0x53, 0x48, 0xc0, 0x9d, 0x08, 0x02, 0x40, 0x66,
 596        0x64, 0x27, 0x06, 0x16, 0x30, 0xf1, 0x46, 0x63,
 597        0x3b, 0x13, 0x2d, 0xf1, 0x34, 0x9b, 0x18, 0x1b,
 598        0x93, 0x30, 0x2b, 0xc3, 0x10, 0x1c, 0x2b, 0xe8,
 599        0x01, 0x14, 0x25, 0xf1, 0x00, 0x1d, 0x26, 0x1a,
 600        0x8a, 0x30, 0x22, 0x73, 0xb5, 0x25, 0x0e, 0x0b,
 601        0x00, 0x1c, 0x2c, 0xe8, 0x1f, 0xc7, 0x27, 0x40,
 602        0x1a, 0xf1, 0x38, 0xe8, 0x32, 0x1f, 0x8f, 0x30,
 603        0x08, 0x1b, 0x24, 0xe8, 0x36, 0x72, 0x46, 0x77,
 604        0x00, 0x17, 0x0d, 0xf0, 0x13, 0xc3, 0x1f, 0x40,
 605        0x03, 0xf1, 0x00, 0x1f, 0x46, 0x9f, 0x44, 0x77,
 606        0x9f, 0x44, 0x5f, 0x44, 0x17, 0xe8, 0x0a, 0xc7,
 607        0x27, 0x40, 0x05, 0xf1, 0x02, 0xc3, 0x00, 0xbb,
 608        0xfa, 0x18, 0xb0, 0x18, 0xff, 0xc7, 0x00, 0xbf,
 609        0xb8, 0xcd, 0xff, 0xff, 0x02, 0x0c, 0x54, 0xa5,
 610        0xdc, 0xa5, 0x2f, 0x40, 0x05, 0xf1, 0x00, 0x14,
 611        0xfa, 0xf1, 0x01, 0x1c, 0x02, 0xe0, 0x00, 0x1c,
 612        0x80, 0xff, 0xb0, 0x49, 0x04, 0xf0, 0x01, 0x0b,
 613        0xd3, 0xa1, 0x03, 0xe0, 0x02, 0x0b, 0xd3, 0xa5,
 614        0x27, 0x31, 0x20, 0x37, 0x02, 0x0b, 0xd3, 0xa5,
 615        0x27, 0x31, 0x20, 0x37, 0x00, 0x13, 0xfb, 0xf1,
 616        0x80, 0xff, 0x22, 0x73, 0xb5, 0x25, 0x18, 0x1e,
 617        0xde, 0x30, 0xd9, 0x30, 0x64, 0x72, 0x11, 0x1e,
 618        0x68, 0x23, 0x16, 0x31, 0x80, 0xff, 0x08, 0xc2,
 619        0x40, 0x73, 0x3a, 0x48, 0x40, 0x9b, 0x06, 0xff,
 620        0x02, 0xc6, 0x00, 0xbe, 0x08, 0x16, 0x1e, 0xfc,
 621        0x2c, 0x75, 0xdc, 0x21, 0xbc, 0x25, 0x04, 0x13,
 622        0x0b, 0xf0, 0x03, 0x13, 0x09, 0xf0, 0x02, 0x13,
 623        0x07, 0xf0, 0x01, 0x13, 0x05, 0xf0, 0x08, 0x13,
 624        0x03, 0xf0, 0x04, 0xc3, 0x00, 0xbb, 0x03, 0xc3,
 625        0x00, 0xbb, 0x8c, 0x15, 0x76, 0x15, 0xa0, 0x64,
 626        0x40, 0x48, 0xa0, 0x8c, 0x02, 0xc4, 0x00, 0xbc,
 627        0x82, 0x00, 0xa0, 0x62, 0x21, 0x48, 0xa0, 0x8a,
 628        0x02, 0xc2, 0x00, 0xba, 0x40, 0x03, 0x33, 0xc5,
 629        0xa0, 0x74, 0xc0, 0x49, 0x1f, 0xf0, 0x30, 0xc5,
 630        0xa0, 0x73, 0x00, 0x13, 0x04, 0xf1, 0xa2, 0x73,
 631        0x00, 0x13, 0x14, 0xf0, 0x28, 0xc5, 0xa0, 0x74,
 632        0xc8, 0x49, 0x1b, 0xf1, 0x26, 0xc5, 0xa0, 0x76,
 633        0xa2, 0x74, 0x01, 0x06, 0x20, 0x37, 0xa0, 0x9e,
 634        0xa2, 0x9c, 0x1e, 0xc5, 0xa2, 0x73, 0x23, 0x40,
 635        0x10, 0xf8, 0x04, 0xf3, 0xa0, 0x73, 0x33, 0x40,
 636        0x0c, 0xf8, 0x15, 0xc5, 0xa0, 0x74, 0x41, 0x48,
 637        0xa0, 0x9c, 0x14, 0xc5, 0xa0, 0x76, 0x62, 0x48,
 638        0xe0, 0x48, 0xa0, 0x9e, 0x10, 0xc6, 0x00, 0xbe,
 639        0x0a, 0xc5, 0xa0, 0x74, 0x48, 0x48, 0xa0, 0x9c,
 640        0x0b, 0xc5, 0x20, 0x1e, 0xa0, 0x9e, 0xe5, 0x48,
 641        0xa0, 0x9e, 0xf0, 0xe7, 0xbc, 0xc0, 0xc8, 0xd2,
 642        0xcc, 0xd2, 0x28, 0xe4, 0xe6, 0x01, 0xf0, 0xc0,
 643        0x18, 0x89, 0x00, 0x1d, 0x3c, 0xc3, 0x60, 0x71,
 644        0x3c, 0xc0, 0x02, 0x99, 0x00, 0x61, 0x67, 0x11,
 645        0x3c, 0xf1, 0x69, 0x33, 0x35, 0xc0, 0x28, 0x40,
 646        0xf6, 0xf1, 0x34, 0xc0, 0x00, 0x19, 0x81, 0x1b,
 647        0x8c, 0xe8, 0x31, 0xc0, 0x04, 0x1a, 0x84, 0x1b,
 648        0x88, 0xe8, 0x7d, 0xe8, 0xa3, 0x49, 0xfe, 0xf0,
 649        0x2b, 0xc0, 0x79, 0xe8, 0xa1, 0x48, 0x28, 0xc0,
 650        0x84, 0x1b, 0x7f, 0xe8, 0x00, 0x1d, 0x69, 0x33,
 651        0x00, 0x1e, 0x01, 0x06, 0xff, 0x18, 0x30, 0x40,
 652        0xfd, 0xf1, 0x18, 0xc0, 0x00, 0x76, 0x2e, 0x40,
 653        0xf7, 0xf1, 0x21, 0x48, 0x19, 0xc0, 0x84, 0x1b,
 654        0x70, 0xe8, 0x79, 0xc0, 0x64, 0xe8, 0xa1, 0x49,
 655        0xfd, 0xf0, 0x11, 0xc0, 0x00, 0x1a, 0x84, 0x1b,
 656        0x68, 0xe8, 0x5d, 0xe8, 0xa5, 0x49, 0xfe, 0xf0,
 657        0x09, 0xc0, 0x01, 0x19, 0x81, 0x1b, 0x61, 0xe8,
 658        0x4f, 0xe0, 0x88, 0xd3, 0x8c, 0xd3, 0xb8, 0x0b,
 659        0x50, 0xe8, 0x20, 0xb4, 0x10, 0xd8, 0x84, 0xd4,
 660        0xfc, 0xc0, 0x00, 0x61, 0x9c, 0x20, 0x9c, 0x24,
 661        0x06, 0x11, 0x06, 0xf1, 0x60, 0xc0, 0x00, 0x61,
 662        0x11, 0x48, 0x00, 0x89, 0x3d, 0xe0, 0x00, 0x11,
 663        0x02, 0xf1, 0x03, 0xe0, 0x04, 0x11, 0x06, 0xf1,
 664        0x56, 0xc0, 0x00, 0x61, 0x92, 0x48, 0x00, 0x89,
 665        0x33, 0xe0, 0x05, 0x11, 0x08, 0xf1, 0x4f, 0xc0,
 666        0x00, 0x61, 0x91, 0x49, 0x04, 0xf0, 0x91, 0x48,
 667        0x00, 0x89, 0x11, 0xe0, 0xde, 0xc0, 0x00, 0x61,
 668        0x98, 0x20, 0x98, 0x24, 0x25, 0x11, 0x24, 0xf1,
 669        0x45, 0xc0, 0x29, 0xe8, 0x95, 0x49, 0x20, 0xf0,
 670        0xd4, 0xc0, 0x00, 0x61, 0x98, 0x20, 0x98, 0x24,
 671        0x25, 0x11, 0x1a, 0xf1, 0x38, 0xc0, 0x00, 0x61,
 672        0x92, 0x49, 0x16, 0xf1, 0x12, 0x48, 0x00, 0x89,
 673        0x30, 0xc0, 0x00, 0x19, 0x00, 0x89, 0x2e, 0xc0,
 674        0x01, 0x89, 0x2e, 0xc0, 0x04, 0x19, 0x81, 0x1b,
 675        0x1c, 0xe8, 0x2b, 0xc0, 0x14, 0x19, 0x81, 0x1b,
 676        0x18, 0xe8, 0x22, 0xc0, 0x0c, 0xe8, 0x20, 0xc0,
 677        0x12, 0x48, 0x81, 0x1b, 0x12, 0xe8, 0xb3, 0xc3,
 678        0x62, 0x71, 0xb3, 0xc0, 0x02, 0x99, 0x02, 0xc0,
 679        0x00, 0xb8, 0x96, 0x07, 0x13, 0xc4, 0x84, 0x98,
 680        0x00, 0x1b, 0x86, 0x8b, 0x86, 0x73, 0xbf, 0x49,
 681        0xfe, 0xf1, 0x80, 0x71, 0x82, 0x72, 0x80, 0xff,
 682        0x09, 0xc4, 0x84, 0x98, 0x80, 0x99, 0x82, 0x9a,
 683        0x86, 0x8b, 0x86, 0x73, 0xbf, 0x49, 0xfe, 0xf1,
 684        0x80, 0xff, 0x08, 0xea, 0x10, 0xd4, 0x30, 0xd4,
 685        0x10, 0xc0, 0x12, 0xe8, 0x8a, 0xd3, 0x28, 0xe4,
 686        0x2c, 0xe4, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x00,
 687        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
 688
 689static u16 r8153_pla_patch_b_bp[] = {
 690        0xfc26, 0x8000, 0xfc28, 0x1154, 0xfc2a, 0x1606, 0xfc2c, 0x155a,
 691        0xfc2e, 0x0080, 0xfc30, 0x033c, 0xfc32, 0x01a0, 0xfc34, 0x0794,
 692        0xfc36, 0x0000, 0xfc38, 0x007f };
 693
 694static u16 r8153_ram_code_d[] = {
 695        0xa436, 0xb820, 0xa438, 0x0290, 0xa436, 0xa012, 0xa438, 0x0000,
 696        0xa436, 0xa014, 0xa438, 0x2c04, 0xb438, 0x2c07, 0xb438, 0x2c07,
 697        0xb438, 0x2c07, 0xb438, 0xa240, 0xb438, 0xa104, 0xb438, 0x2944,
 698        0xa436, 0xa01a, 0xa438, 0x0000, 0xa436, 0xa006, 0xa438, 0x0fff,
 699        0xa436, 0xa004, 0xa438, 0x0fff, 0xa436, 0xa002, 0xa438, 0x0fff,
 700        0xa436, 0xa000, 0xa438, 0x1943, 0xa436, 0xb820, 0xa438, 0x0210 };
 701
 702static u8 usb_patch_d[] = {
 703        0x08, 0xe0, 0x0a, 0xe0, 0x0c, 0xe0, 0x1f, 0xe0,
 704        0x28, 0xe0, 0x2a, 0xe0, 0x2c, 0xe0, 0x2e, 0xe0,
 705        0x02, 0xc5, 0x00, 0xbd, 0x00, 0x00, 0x02, 0xc3,
 706        0x00, 0xbb, 0x00, 0x00, 0x30, 0x18, 0x11, 0xc1,
 707        0x05, 0xe8, 0x10, 0xc6, 0x02, 0xc2, 0x00, 0xba,
 708        0x94, 0x17, 0x02, 0xb4, 0x09, 0xc2, 0x40, 0x99,
 709        0x0e, 0x48, 0x42, 0x98, 0x42, 0x70, 0x8e, 0x49,
 710        0xfe, 0xf1, 0x02, 0xb0, 0x80, 0xff, 0xc0, 0xd4,
 711        0xe4, 0x40, 0x20, 0xd4, 0xb0, 0x49, 0x04, 0xf0,
 712        0x30, 0x18, 0x06, 0xc1, 0xef, 0xef, 0xfa, 0xc7,
 713        0x02, 0xc0, 0x00, 0xb8, 0x38, 0x12, 0xe4, 0x4b,
 714        0x02, 0xc3, 0x00, 0xbb, 0x00, 0x00, 0x02, 0xc5,
 715        0x00, 0xbd, 0x00, 0x00, 0x02, 0xc1, 0x00, 0xb9,
 716        0x00, 0x00, 0x02, 0xc1, 0x00, 0xb9, 0x00, 0x00 };
 717
 718static u16 r8153_usb_patch_d_bp[] = {
 719        0xfc26, 0xa000, 0xfc28, 0x0000, 0xfc2a, 0x0000, 0xfc2c, 0x1792,
 720        0xfc2e, 0x1236, 0xfc30, 0x0000, 0xfc32, 0x0000, 0xfc34, 0x0000,
 721        0xfc36, 0x0000, 0xfc38, 0x000c };
 722
 723static void rtl_clear_bp(struct r8152 *tp)
 724{
 725        ocp_write_dword(tp, MCU_TYPE_PLA, PLA_BP_0, 0);
 726        ocp_write_dword(tp, MCU_TYPE_PLA, PLA_BP_2, 0);
 727        ocp_write_dword(tp, MCU_TYPE_PLA, PLA_BP_4, 0);
 728        ocp_write_dword(tp, MCU_TYPE_PLA, PLA_BP_6, 0);
 729        ocp_write_dword(tp, MCU_TYPE_USB, USB_BP_0, 0);
 730        ocp_write_dword(tp, MCU_TYPE_USB, USB_BP_2, 0);
 731        ocp_write_dword(tp, MCU_TYPE_USB, USB_BP_4, 0);
 732        ocp_write_dword(tp, MCU_TYPE_USB, USB_BP_6, 0);
 733
 734        mdelay(6);
 735
 736        ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_BA, 0);
 737        ocp_write_word(tp, MCU_TYPE_USB, USB_BP_BA, 0);
 738}
 739
 740static void r8153_clear_bp(struct r8152 *tp)
 741{
 742        ocp_write_byte(tp, MCU_TYPE_PLA, PLA_BP_EN, 0);
 743        ocp_write_byte(tp, MCU_TYPE_USB, USB_BP_EN, 0);
 744        rtl_clear_bp(tp);
 745}
 746
 747static void r8152b_set_dq_desc(struct r8152 *tp)
 748{
 749        u8 data;
 750
 751        data = ocp_read_byte(tp, MCU_TYPE_USB, 0xd429);
 752        data |= 0x80;
 753        ocp_write_byte(tp, MCU_TYPE_USB, 0xd429, data);
 754        ocp_write_word(tp, MCU_TYPE_USB, 0xc0ce, 0x0210);
 755        data = ocp_read_byte(tp, MCU_TYPE_USB, 0xd429);
 756        data &= ~0x80;
 757        ocp_write_byte(tp, MCU_TYPE_USB, 0xd429, data);
 758}
 759
 760static int r8153_pre_ram_code(struct r8152 *tp, u16 patch_key)
 761{
 762        u16 data;
 763        int i;
 764
 765        data = ocp_reg_read(tp, 0xb820);
 766        data |= 0x0010;
 767        ocp_reg_write(tp, 0xb820, data);
 768
 769        for (i = 0, data = 0; !data && i < 5000; i++) {
 770                mdelay(2);
 771                data = ocp_reg_read(tp, 0xb800) & 0x0040;
 772        }
 773
 774        sram_write(tp, 0x8146, patch_key);
 775        sram_write(tp, 0xb82e, 0x0001);
 776
 777        return -EBUSY;
 778}
 779
 780static int r8153_post_ram_code(struct r8152 *tp)
 781{
 782        u16 data;
 783
 784        sram_write(tp, 0x0000, 0x0000);
 785
 786        data = ocp_reg_read(tp, 0xb82e);
 787        data &= ~0x0001;
 788        ocp_reg_write(tp, 0xb82e, data);
 789
 790        sram_write(tp, 0x8146, 0x0000);
 791
 792        data = ocp_reg_read(tp, 0xb820);
 793        data &= ~0x0010;
 794        ocp_reg_write(tp, 0xb820, data);
 795
 796        ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, tp->ocp_base);
 797
 798        return 0;
 799}
 800
 801static void r8153_wdt1_end(struct r8152 *tp)
 802{
 803        int i;
 804
 805        for (i = 0; i < 104; i++) {
 806                if (!(ocp_read_byte(tp, MCU_TYPE_USB, 0xe404) & 1))
 807                        break;
 808                mdelay(2);
 809        }
 810}
 811
 812void r8152b_firmware(struct r8152 *tp)
 813{
 814        int i;
 815
 816        if (tp->version == RTL_VER_01) {
 817                int i;
 818
 819                r8152b_set_dq_desc(tp);
 820                rtl_clear_bp(tp);
 821
 822                generic_ocp_write(tp, 0xf800, 0x3f,
 823                                  sizeof(r8152b_pla_patch_a),
 824                                  r8152b_pla_patch_a, MCU_TYPE_PLA);
 825
 826                for (i = 0; i < ARRAY_SIZE(r8152b_pla_patch_a_bp); i += 2)
 827                        ocp_write_word(tp, MCU_TYPE_PLA,
 828                                       r8152b_pla_patch_a_bp[i],
 829                                       r8152b_pla_patch_a_bp[i+1]);
 830
 831                ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, 0x2000);
 832                ocp_write_word(tp, MCU_TYPE_PLA, 0xb092, 0x7070);
 833                ocp_write_word(tp, MCU_TYPE_PLA, 0xb098, 0x0600);
 834                for (i = 0; i < ARRAY_SIZE(r8152b_ram_code1); i++)
 835                        ocp_write_word(tp, MCU_TYPE_PLA, 0xb09a,
 836                                       r8152b_ram_code1[i]);
 837
 838                ocp_write_word(tp, MCU_TYPE_PLA, 0xb098, 0x0200);
 839                ocp_write_word(tp, MCU_TYPE_PLA, 0xb092, 0x7030);
 840        } else if (tp->version == RTL_VER_02) {
 841                rtl_clear_bp(tp);
 842
 843                generic_ocp_write(tp, 0xf800, 0xff,
 844                                  sizeof(r8152b_pla_patch_a2),
 845                                  r8152b_pla_patch_a2, MCU_TYPE_PLA);
 846
 847                for (i = 0; i < ARRAY_SIZE(r8152b_pla_patch_a2_bp);
 848                     i += 2)
 849                        ocp_write_word(tp, MCU_TYPE_PLA,
 850                                       r8152b_pla_patch_a2_bp[i],
 851                                       r8152b_pla_patch_a2_bp[i+1]);
 852        }
 853}
 854
 855void r8153_firmware(struct r8152 *tp)
 856{
 857        int i;
 858
 859        if (tp->version == RTL_VER_03) {
 860                r8153_clear_bp(tp);
 861
 862                r8153_pre_ram_code(tp, 0x7000);
 863
 864                for (i = 0; i < ARRAY_SIZE(r8153_ram_code_a); i += 2)
 865                        ocp_write_word(tp, MCU_TYPE_PLA,
 866                                       r8153_ram_code_a[i],
 867                                       r8153_ram_code_a[i+1]);
 868
 869                r8153_post_ram_code(tp);
 870        } else if (tp->version == RTL_VER_04) {
 871                r8153_pre_ram_code(tp, 0x7001);
 872
 873                for (i = 0; i < ARRAY_SIZE(r8153_ram_code_bc); i += 2)
 874                        ocp_write_word(tp, MCU_TYPE_PLA,
 875                                       r8153_ram_code_bc[i],
 876                                       r8153_ram_code_bc[i+1]);
 877
 878                r8153_post_ram_code(tp);
 879
 880                r8153_wdt1_end(tp);
 881                r8153_clear_bp(tp);
 882
 883                ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x0000);
 884                generic_ocp_write(tp, 0xf800, 0xff,
 885                                  sizeof(r8153_usb_patch_b),
 886                                  r8153_usb_patch_b, MCU_TYPE_USB);
 887
 888                for (i = 0; i < ARRAY_SIZE(r8153_usb_patch_b_bp); i += 2)
 889                        ocp_write_word(tp, MCU_TYPE_USB,
 890                                       r8153_usb_patch_b_bp[i],
 891                                       r8153_usb_patch_b_bp[i+1]);
 892
 893                if (!(ocp_read_word(tp, MCU_TYPE_PLA, 0xd38e) & BIT(0))) {
 894                        ocp_write_word(tp, MCU_TYPE_PLA, 0xd38c, 0x0082);
 895                        ocp_write_word(tp, MCU_TYPE_PLA, 0xd38e, 0x0082);
 896                }
 897
 898                ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, 0x0000);
 899                generic_ocp_write(tp, 0xf800, 0xff,
 900                                  sizeof(r8153_pla_patch_b),
 901                                  r8153_pla_patch_b, MCU_TYPE_PLA);
 902
 903                for (i = 0; i < ARRAY_SIZE(r8153_pla_patch_b_bp); i += 2)
 904                        ocp_write_word(tp, MCU_TYPE_PLA,
 905                                       r8153_pla_patch_b_bp[i],
 906                                       r8153_pla_patch_b_bp[i+1]);
 907
 908                ocp_write_word(tp, MCU_TYPE_PLA, 0xd388, 0x08ca);
 909        } else if (tp->version == RTL_VER_05) {
 910                u32 ocp_data;
 911
 912                ocp_data = ocp_read_word(tp, MCU_TYPE_USB, 0xcfca);
 913                ocp_data &= ~0x4000;
 914                ocp_write_word(tp, MCU_TYPE_USB, 0xcfca, ocp_data);
 915
 916                r8153_pre_ram_code(tp, 0x7001);
 917
 918                for (i = 0; i < ARRAY_SIZE(r8153_ram_code_bc); i += 2)
 919                        ocp_write_word(tp, MCU_TYPE_PLA,
 920                                       r8153_ram_code_bc[i],
 921                                       r8153_ram_code_bc[i+1]);
 922
 923                r8153_post_ram_code(tp);
 924
 925                r8153_wdt1_end(tp);
 926                r8153_clear_bp(tp);
 927
 928                ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x0000);
 929                generic_ocp_write(tp, 0xf800, 0xff,
 930                                  sizeof(r8153_usb_patch_c),
 931                                  r8153_usb_patch_c, MCU_TYPE_USB);
 932
 933                for (i = 0; i < ARRAY_SIZE(r8153_usb_patch_c_bp); i += 2)
 934                        ocp_write_word(tp, MCU_TYPE_USB,
 935                                       r8153_usb_patch_c_bp[i],
 936                                       r8153_usb_patch_c_bp[i+1]);
 937
 938                if (ocp_read_byte(tp, MCU_TYPE_USB, 0xcfef) & 1) {
 939                        ocp_write_word(tp, MCU_TYPE_USB, 0xfc30, 0x1578);
 940                        ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x00ff);
 941                } else {
 942                        ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x00ef);
 943                }
 944
 945                ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, 0x0000);
 946                generic_ocp_write(tp, 0xf800, 0xff,
 947                                  sizeof(r8153_pla_patch_c),
 948                                  r8153_pla_patch_c, MCU_TYPE_PLA);
 949
 950                for (i = 0; i < ARRAY_SIZE(r8153_pla_patch_c_bp); i += 2)
 951                        ocp_write_word(tp, MCU_TYPE_PLA,
 952                                       r8153_pla_patch_c_bp[i],
 953                                       r8153_pla_patch_c_bp[i+1]);
 954
 955                ocp_write_word(tp, MCU_TYPE_PLA, 0xd388, 0x08ca);
 956
 957                ocp_data = ocp_read_word(tp, MCU_TYPE_USB, 0xcfca);
 958                ocp_data |= 0x4000;
 959                ocp_write_word(tp, MCU_TYPE_USB, 0xcfca, ocp_data);
 960        } else if (tp->version == RTL_VER_06) {
 961                r8153_pre_ram_code(tp, 0x7002);
 962
 963                for (i = 0; i < ARRAY_SIZE(r8153_ram_code_d); i += 2)
 964                        ocp_write_word(tp, MCU_TYPE_PLA,
 965                                       r8153_ram_code_d[i],
 966                                       r8153_ram_code_d[i+1]);
 967
 968                r8153_post_ram_code(tp);
 969
 970                r8153_clear_bp(tp);
 971
 972                ocp_write_word(tp, MCU_TYPE_USB, USB_BP_EN, 0x0000);
 973                generic_ocp_write(tp, 0xf800, 0xff, sizeof(usb_patch_d),
 974                                  usb_patch_d, MCU_TYPE_USB);
 975
 976                for (i = 0; i < ARRAY_SIZE(r8153_usb_patch_d_bp); i += 2)
 977                        ocp_write_word(tp, MCU_TYPE_USB,
 978                                       r8153_usb_patch_d_bp[i],
 979                                       r8153_usb_patch_d_bp[i+1]);
 980        }
 981}
 982