diff mbox series

eth/r8152: update the firmware

Message ID 1394712342-15778-375-Taiwan-albertk@realtek.com
State Superseded
Headers show
Series eth/r8152: update the firmware | expand

Commit Message

Hayes Wang June 1, 2020, 8:42 a.m. UTC
Update the firmware to improve compatibility for none-intel USB
host controller.

Signed-off-by: Hayes Wang <hayeswang at realtek.com>
---
 drivers/usb/eth/r8152.h    |   8 +
 drivers/usb/eth/r8152_fw.c | 481 ++++++++++++++++++++-----------------
 2 files changed, 265 insertions(+), 224 deletions(-)

Comments

Marek Vasut June 1, 2020, 4:45 p.m. UTC | #1
On 6/1/20 10:42 AM, Hayes Wang wrote:
> Update the firmware to improve compatibility for none-intel USB
> host controller.

Can you be more specific about the problem you are fixing here ?
What is the problem ?
Hayes Wang June 2, 2020, 3:17 a.m. UTC | #2
Marek Vasut [mailto:marex at denx.de]
> Sent: Tuesday, June 02, 2020 12:46 AM
> > Update the firmware to improve compatibility for none-intel USB
> > host controller.
> 
> Can you be more specific about the problem you are fixing here ?
> What is the problem ?

There is low probability that the device may be lost when rebooting.
Should I submit v2 to reword the commit message?

Best Regards,
Hayes
Marek Vasut June 2, 2020, 11:02 a.m. UTC | #3
On 6/2/20 5:17 AM, Hayes Wang wrote:
> Marek Vasut [mailto:marex at denx.de]
>> Sent: Tuesday, June 02, 2020 12:46 AM
>>> Update the firmware to improve compatibility for none-intel USB
>>> host controller.
>>
>> Can you be more specific about the problem you are fixing here ?
>> What is the problem ?
> 
> There is low probability that the device may be lost when rebooting.
> Should I submit v2 to reword the commit message?

Lost how ?
Hayes Wang June 2, 2020, 11:48 a.m. UTC | #4
Marek Vasut [mailto:marex at denx.de]
> Sent: Tuesday, June 02, 2020 7:02 PM
[...]
> >> Can you be more specific about the problem you are fixing here ?
> >> What is the problem ?
> >
> > There is low probability that the device may be lost when rebooting.
> > Should I submit v2 to reword the commit message?
> 
> Lost how ?

USB enumeration may fail. The device would be at wrong state.
I don't know detail about the hardware behavior.
Marek Vasut June 2, 2020, 11:58 a.m. UTC | #5
On 6/2/20 1:48 PM, Hayes Wang wrote:
> Marek Vasut [mailto:marex at denx.de]
>> Sent: Tuesday, June 02, 2020 7:02 PM
> [...]
>>>> Can you be more specific about the problem you are fixing here ?
>>>> What is the problem ?
>>>
>>> There is low probability that the device may be lost when rebooting.
>>> Should I submit v2 to reword the commit message?
>>
>> Lost how ?
> 
> USB enumeration may fail. The device would be at wrong state.
> I don't know detail about the hardware behavior.

Is there any chance you can ask someone ? It would be real helpful to
know the details of the problem, in case someone runs into it, they
would know what is going on.
Hayes Wang June 4, 2020, 3:45 a.m. UTC | #6
Marek Vasut [mailto:marex at denx.de]
> Sent: Tuesday, June 02, 2020 7:59 PM
[...]
> >>>> Can you be more specific about the problem you are fixing here ?
> >>>> What is the problem ?
> >>>
> >>> There is low probability that the device may be lost when rebooting.
> >>> Should I submit v2 to reword the commit message?
> >>
> >> Lost how ?
> >
> > USB enumeration may fail. The device would be at wrong state.
> > I don't know detail about the hardware behavior.
> 
> Is there any chance you can ask someone ? It would be real helpful to
> know the details of the problem, in case someone runs into it, they
> would know what is going on.

I get the following information.

1.
Our device has auto-installed driver feature - via switch CD-ROM/NIC
mode. But in some corner cases, it would switch to CD-ROM unexpected.
This issue results in Lan Function Disabled.

2.
While USB PHY transits to P3 from P0 due to the absent of transmitter
control, it would issues undefined signal to its? link partner.
Some Down Stream Port misidentify the undefined signal as wakeup
signal. So the link state will not keep in suspend even the system
is idle.

Best Regards,
Hayes
Marek Vasut June 4, 2020, 8:12 p.m. UTC | #7
On 6/4/20 5:45 AM, Hayes Wang wrote:
> Marek Vasut [mailto:marex at denx.de]
>> Sent: Tuesday, June 02, 2020 7:59 PM
> [...]
>>>>>> Can you be more specific about the problem you are fixing here ?
>>>>>> What is the problem ?
>>>>>
>>>>> There is low probability that the device may be lost when rebooting.
>>>>> Should I submit v2 to reword the commit message?
>>>>
>>>> Lost how ?
>>>
>>> USB enumeration may fail. The device would be at wrong state.
>>> I don't know detail about the hardware behavior.
>>
>> Is there any chance you can ask someone ? It would be real helpful to
>> know the details of the problem, in case someone runs into it, they
>> would know what is going on.
> 
> I get the following information.
> 
> 1.
> Our device has auto-installed driver feature - via switch CD-ROM/NIC
> mode. But in some corner cases, it would switch to CD-ROM unexpected.
> This issue results in Lan Function Disabled.
> 
> 2.
> While USB PHY transits to P3 from P0 due to the absent of transmitter
> control, it would issues undefined signal to its? link partner.
> Some Down Stream Port misidentify the undefined signal as wakeup
> signal. So the link state will not keep in suspend even the system
> is idle.

OK, then please add this into the commit message and send a V2, I'll
pick it then. Thanks!
diff mbox series

Patch

diff --git a/drivers/usb/eth/r8152.h b/drivers/usb/eth/r8152.h
index c7f62b8b3e..10e0da8eb1 100644
--- a/drivers/usb/eth/r8152.h
+++ b/drivers/usb/eth/r8152.h
@@ -25,6 +25,7 @@ 
 #define PLA_BDC_CR		0xd1a0
 #define PLA_TEREDO_TIMER	0xd2cc
 #define PLA_REALWOW_TIMER	0xd2e8
+#define PLA_EXTRA_STATUS	0xd398
 #define PLA_LEDSEL		0xdd90
 #define PLA_LED_FEATURE		0xdd92
 #define PLA_PHYAR		0xde00
@@ -76,6 +77,7 @@ 
 #define USB_DEV_STAT		0xb808
 #define USB_CONNECT_TIMER	0xcbf8
 #define USB_BURST_SIZE		0xcfc0
+#define USB_FW_FIX_EN1		0xcfcc
 #define USB_USB_CTRL		0xd406
 #define USB_PHY_CTRL		0xd408
 #define USB_TX_AGG		0xd40a
@@ -285,6 +287,9 @@ 
 /* PLA_BOOT_CTRL */
 #define AUTOLOAD_DONE		0x0002
 
+/* PLA_EXTRA_STATUS */
+#define U3P3_CHECK_EN		BIT(7)
+
 /* USB_USB2PHY */
 #define USB2PHY_SUSPEND		0x0001
 #define USB2PHY_L1		0x0002
@@ -304,6 +309,9 @@ 
 #define STAT_SPEED_HIGH		0x0000
 #define STAT_SPEED_FULL		0x0002
 
+/* USB_FW_FIX_EN1 */
+#define FW_IP_RESET_EN		BIT(9)
+
 /* USB_TX_AGG */
 #define TX_AGG_MAX_THRESHOLD	0x03
 
diff --git a/drivers/usb/eth/r8152_fw.c b/drivers/usb/eth/r8152_fw.c
index 3ebbd533cc..f953b0384b 100644
--- a/drivers/usb/eth/r8152_fw.c
+++ b/drivers/usb/eth/r8152_fw.c
@@ -293,7 +293,7 @@  static u8 r8152b_pla_patch_a2[] = {
 	0x00, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
 
 static u16 r8152b_pla_patch_a2_bp[] = {
-	0xfc28, 0x8000, 0xfc28, 0x17a5, 0xfc2a, 0x13ad,
+	0xfc26, 0x8000, 0xfc28, 0x17a5, 0xfc2a, 0x13ad,
 	0xfc2c, 0x184d, 0xfc2e, 0x01e1 };
 
 static u16 r8153_ram_code_a[] = {
@@ -321,181 +321,150 @@  static u16 r8153_ram_code_a[] = {
 	0xB438, 0x3591, 0xB436, 0xB820, 0xB438, 0x0210 };
 
 static u8 r8153_usb_patch_c[] = {
-	0x08, 0xe0, 0x0a, 0xe0, 0x14, 0xe0, 0x2e, 0xe0,
-	0x37, 0xe0, 0x3e, 0xe0, 0x6d, 0xe0, 0x78, 0xe0,
+	0x08, 0xe0, 0x0a, 0xe0, 0x14, 0xe0, 0x58, 0xe0,
+	0x64, 0xe0, 0x79, 0xe0, 0xab, 0xe0, 0xb6, 0xe0,
 	0x02, 0xc5, 0x00, 0xbd, 0x38, 0x3b, 0xdb, 0x49,
 	0x04, 0xf1, 0x06, 0xc3, 0x00, 0xbb, 0x5a, 0x02,
 	0x05, 0xc4, 0x03, 0xc3, 0x00, 0xbb, 0xa4, 0x04,
-	0x7e, 0x02, 0x30, 0xd4, 0x30, 0x18, 0x18, 0xc1,
-	0x0c, 0xe8, 0x17, 0xc6, 0xc7, 0x65, 0xd0, 0x49,
+	0x7e, 0x02, 0x30, 0xd4, 0x65, 0xc6, 0x66, 0x61,
+	0x92, 0x49, 0x12, 0xf1, 0x3e, 0xc0, 0x02, 0x61,
+	0x97, 0x49, 0x05, 0xf0, 0x3c, 0xc0, 0x00, 0x61,
+	0x90, 0x49, 0x0a, 0xf1, 0xca, 0x63, 0xb0, 0x49,
+	0x09, 0xf1, 0xb1, 0x49, 0x05, 0xf0, 0x32, 0xc0,
+	0x00, 0x71, 0x9e, 0x49, 0x03, 0xf1, 0xb0, 0x48,
+	0x05, 0xe0, 0x30, 0x48, 0xda, 0x61, 0x10, 0x48,
+	0xda, 0x89, 0x4a, 0xc6, 0xc0, 0x60, 0x85, 0x49,
+	0x03, 0xf0, 0x31, 0x48, 0x04, 0xe0, 0xb1, 0x48,
+	0xb2, 0x48, 0x0f, 0xe0, 0x30, 0x18, 0x1b, 0xc1,
+	0x0f, 0xe8, 0x1a, 0xc6, 0xc7, 0x65, 0xd0, 0x49,
 	0x05, 0xf0, 0x32, 0x48, 0x02, 0xc2, 0x00, 0xba,
 	0x3e, 0x16, 0x02, 0xc2, 0x00, 0xba, 0x48, 0x16,
-	0x02, 0xb4, 0x09, 0xc2, 0x40, 0x99, 0x0e, 0x48,
-	0x42, 0x98, 0x42, 0x70, 0x8e, 0x49, 0xfe, 0xf1,
-	0x02, 0xb0, 0x80, 0xff, 0xc0, 0xd4, 0xe4, 0x40,
-	0x20, 0xd4, 0xb0, 0x49, 0x04, 0xf0, 0x30, 0x18,
-	0x06, 0xc1, 0xef, 0xef, 0xfa, 0xc7, 0x02, 0xc0,
-	0x00, 0xb8, 0xd0, 0x10, 0xe4, 0x4b, 0x07, 0xc3,
-	0x70, 0x61, 0x12, 0x48, 0x70, 0x89, 0x02, 0xc3,
-	0x00, 0xbb, 0x9c, 0x15, 0x20, 0xd4, 0x2b, 0xc5,
-	0xa0, 0x77, 0x00, 0x1c, 0xa0, 0x9c, 0x28, 0xc5,
-	0xa0, 0x64, 0xc0, 0x48, 0xc1, 0x48, 0xc2, 0x48,
-	0xa0, 0x8c, 0xb1, 0x64, 0xc0, 0x48, 0xb1, 0x8c,
-	0x20, 0xc5, 0xa0, 0x64, 0x40, 0x48, 0x41, 0x48,
-	0xc2, 0x48, 0xa0, 0x8c, 0x19, 0xc5, 0xa4, 0x64,
-	0x44, 0x48, 0xa4, 0x8c, 0xb1, 0x64, 0x40, 0x48,
-	0xb1, 0x8c, 0x14, 0xc4, 0x80, 0x73, 0x13, 0xc4,
-	0x82, 0x9b, 0x11, 0x1b, 0x80, 0x9b, 0x0c, 0xc5,
-	0xa0, 0x64, 0x40, 0x48, 0x41, 0x48, 0x42, 0x48,
-	0xa0, 0x8c, 0x05, 0xc5, 0xa0, 0x9f, 0x02, 0xc5,
-	0x00, 0xbd, 0x6c, 0x3a, 0x1e, 0xfc, 0x10, 0xd8,
-	0x86, 0xd4, 0xf8, 0xcb, 0x20, 0xe4, 0x0a, 0xc0,
-	0x16, 0x61, 0x91, 0x48, 0x16, 0x89, 0x07, 0xc0,
-	0x11, 0x19, 0x0c, 0x89, 0x02, 0xc1, 0x00, 0xb9,
-	0x02, 0x06, 0x00, 0xd4, 0x40, 0xb4, 0xfe, 0xc0,
-	0x16, 0x61, 0x91, 0x48, 0x16, 0x89, 0xfb, 0xc0,
-	0x11, 0x19, 0x0c, 0x89, 0x02, 0xc1, 0x00, 0xb9,
-	0xd2, 0x05, 0x00, 0x00 };
+	0x02, 0xc2, 0x00, 0xba, 0x4a, 0x16, 0x02, 0xb4,
+	0x09, 0xc2, 0x40, 0x99, 0x0e, 0x48, 0x42, 0x98,
+	0x42, 0x70, 0x8e, 0x49, 0xfe, 0xf1, 0x02, 0xb0,
+	0x80, 0xff, 0xc0, 0xd4, 0xe4, 0x40, 0x20, 0xd4,
+	0xca, 0xcf, 0x00, 0xcf, 0x3c, 0xe4, 0x0c, 0xc0,
+	0x00, 0x63, 0xb5, 0x49, 0x09, 0xc0, 0x30, 0x18,
+	0x06, 0xc1, 0xea, 0xef, 0xf5, 0xc7, 0x02, 0xc0,
+	0x00, 0xb8, 0xd0, 0x10, 0xe4, 0x4b, 0x00, 0xd8,
+	0x14, 0xc3, 0x60, 0x61, 0x90, 0x49, 0x06, 0xf0,
+	0x11, 0xc3, 0x70, 0x61, 0x12, 0x48, 0x70, 0x89,
+	0x08, 0xe0, 0x0a, 0xc6, 0xd4, 0x61, 0x93, 0x48,
+	0xd4, 0x89, 0x02, 0xc1, 0x00, 0xb9, 0x72, 0x17,
+	0x02, 0xc1, 0x00, 0xb9, 0x9c, 0x15, 0x00, 0xd8,
+	0xef, 0xcf, 0x20, 0xd4, 0x30, 0x18, 0xe7, 0xc1,
+	0xcb, 0xef, 0x2b, 0xc5, 0xa0, 0x77, 0x00, 0x1c,
+	0xa0, 0x9c, 0x28, 0xc5, 0xa0, 0x64, 0xc0, 0x48,
+	0xc1, 0x48, 0xc2, 0x48, 0xa0, 0x8c, 0xb1, 0x64,
+	0xc0, 0x48, 0xb1, 0x8c, 0x20, 0xc5, 0xa0, 0x64,
+	0x40, 0x48, 0x41, 0x48, 0xc2, 0x48, 0xa0, 0x8c,
+	0x19, 0xc5, 0xa4, 0x64, 0x44, 0x48, 0xa4, 0x8c,
+	0xb1, 0x64, 0x40, 0x48, 0xb1, 0x8c, 0x14, 0xc4,
+	0x80, 0x73, 0x13, 0xc4, 0x82, 0x9b, 0x11, 0x1b,
+	0x80, 0x9b, 0x0c, 0xc5, 0xa0, 0x64, 0x40, 0x48,
+	0x41, 0x48, 0x42, 0x48, 0xa0, 0x8c, 0x05, 0xc5,
+	0xa0, 0x9f, 0x02, 0xc5, 0x00, 0xbd, 0x6c, 0x3a,
+	0x1e, 0xfc, 0x10, 0xd8, 0x86, 0xd4, 0xf8, 0xcb,
+	0x20, 0xe4, 0x0a, 0xc0, 0x16, 0x61, 0x91, 0x48,
+	0x16, 0x89, 0x07, 0xc0, 0x11, 0x19, 0x0c, 0x89,
+	0x02, 0xc1, 0x00, 0xb9, 0x02, 0x06, 0x00, 0xd4,
+	0x40, 0xb4, 0xfe, 0xc0, 0x16, 0x61, 0x91, 0x48,
+	0x16, 0x89, 0xfb, 0xc0, 0x11, 0x19, 0x0c, 0x89,
+	0x02, 0xc1, 0x00, 0xb9, 0xd2, 0x05, 0x00, 0x00 };
 
 static u16 r8153_usb_patch_c_bp[] = {
-	0xfc26, 0xa000, 0xfc28, 0x3b34, 0xfc2a, 0x027c, 0xfc2c, 0x162c,
-	0xfc2e, 0x10ce, 0xfc30, 0x0000, 0xfc32, 0x3a28, 0xfc34, 0x05f8,
-	0xfc36, 0x05c8 };
+	0xfc26, 0xa000, 0xfc28, 0x3b34, 0xfc2a, 0x027c, 0xfc2c, 0x15de,
+	0xfc2e, 0x10ce, 0xfc30, 0x1adc, 0xfc32, 0x3a28, 0xfc34, 0x05f8,
+	0xfc36, 0x05c8, 0xfc38, 0x00f3 };
 
 static u8 r8153_pla_patch_c[] = {
-	0x08, 0xe0, 0xea, 0xe0, 0xf2, 0xe0, 0x04, 0xe1,
-	0x06, 0xe1, 0x08, 0xe1, 0x40, 0xe1, 0xf1, 0xe1,
-	0x14, 0xc2, 0x40, 0x73, 0xba, 0x48, 0x40, 0x9b,
-	0x11, 0xc2, 0x40, 0x73, 0xb0, 0x49, 0x17, 0xf0,
-	0xbf, 0x49, 0x03, 0xf1, 0x09, 0xc5, 0x00, 0xbd,
-	0xb1, 0x49, 0x11, 0xf0, 0xb1, 0x48, 0x40, 0x9b,
-	0x02, 0xc2, 0x00, 0xba, 0xde, 0x18, 0x00, 0xe0,
-	0x1e, 0xfc, 0xbc, 0xc0, 0xf0, 0xc0, 0xde, 0xe8,
-	0x00, 0x80, 0x00, 0x20, 0x2c, 0x75, 0xd4, 0x49,
-	0x12, 0xf1, 0x32, 0xe0, 0xf8, 0xc2, 0x46, 0x71,
-	0xf7, 0xc2, 0x40, 0x73, 0xbe, 0x49, 0x03, 0xf1,
-	0xf5, 0xc7, 0x02, 0xe0, 0xf2, 0xc7, 0x4f, 0x30,
-	0x26, 0x62, 0xa1, 0x49, 0xf0, 0xf1, 0x22, 0x72,
-	0xa0, 0x49, 0xed, 0xf1, 0x25, 0x25, 0x18, 0x1f,
-	0x97, 0x30, 0x91, 0x30, 0x36, 0x9a, 0x2c, 0x75,
-	0x3c, 0xc3, 0x60, 0x73, 0xb1, 0x49, 0x0d, 0xf1,
-	0xdc, 0x21, 0xbc, 0x25, 0x30, 0xc6, 0xc0, 0x77,
-	0x04, 0x13, 0x21, 0xf0, 0x03, 0x13, 0x22, 0xf0,
-	0x02, 0x13, 0x23, 0xf0, 0x01, 0x13, 0x24, 0xf0,
-	0x08, 0x13, 0x08, 0xf1, 0x2e, 0x73, 0xba, 0x21,
-	0xbd, 0x25, 0x05, 0x13, 0x03, 0xf1, 0x24, 0xc5,
-	0x00, 0xbd, 0xd4, 0x49, 0x03, 0xf1, 0x1c, 0xc5,
-	0x00, 0xbd, 0xc4, 0xc6, 0xc6, 0x67, 0x2e, 0x75,
-	0xd7, 0x22, 0xdd, 0x26, 0x05, 0x15, 0x1b, 0xf0,
-	0x14, 0xc6, 0x00, 0xbe, 0x13, 0xc5, 0x00, 0xbd,
-	0x12, 0xc5, 0x00, 0xbd, 0xf1, 0x49, 0xfb, 0xf1,
-	0xef, 0xe7, 0xf4, 0x49, 0xfa, 0xf1, 0xec, 0xe7,
-	0xf3, 0x49, 0xf7, 0xf1, 0xe9, 0xe7, 0xf2, 0x49,
-	0xf4, 0xf1, 0xe6, 0xe7, 0xb6, 0xc0, 0x50, 0x14,
-	0x90, 0x13, 0xbc, 0x13, 0xf2, 0x14, 0x00, 0xa0,
-	0xa0, 0xd1, 0x00, 0x00, 0xc0, 0x75, 0xd0, 0x49,
-	0x46, 0xf0, 0x26, 0x72, 0xa7, 0x49, 0x43, 0xf0,
-	0x22, 0x72, 0x25, 0x25, 0x20, 0x1f, 0x97, 0x30,
-	0x91, 0x30, 0x40, 0x73, 0xf3, 0xc4, 0x1c, 0x40,
-	0x04, 0xf0, 0xd7, 0x49, 0x05, 0xf1, 0x37, 0xe0,
-	0x53, 0x48, 0xc0, 0x9d, 0x08, 0x02, 0x40, 0x66,
-	0x64, 0x27, 0x06, 0x16, 0x30, 0xf1, 0x46, 0x63,
-	0x3b, 0x13, 0x2d, 0xf1, 0x34, 0x9b, 0x18, 0x1b,
-	0x93, 0x30, 0x2b, 0xc3, 0x10, 0x1c, 0x2b, 0xe8,
-	0x01, 0x14, 0x25, 0xf1, 0x00, 0x1d, 0x26, 0x1a,
-	0x8a, 0x30, 0x22, 0x73, 0xb5, 0x25, 0x0e, 0x0b,
-	0x00, 0x1c, 0x2c, 0xe8, 0x1f, 0xc7, 0x27, 0x40,
-	0x1a, 0xf1, 0x38, 0xe8, 0x32, 0x1f, 0x8f, 0x30,
-	0x08, 0x1b, 0x24, 0xe8, 0x36, 0x72, 0x46, 0x77,
-	0x00, 0x17, 0x0d, 0xf0, 0x13, 0xc3, 0x1f, 0x40,
-	0x03, 0xf1, 0x00, 0x1f, 0x46, 0x9f, 0x44, 0x77,
-	0x9f, 0x44, 0x5f, 0x44, 0x17, 0xe8, 0x0a, 0xc7,
-	0x27, 0x40, 0x05, 0xf1, 0x02, 0xc3, 0x00, 0xbb,
-	0xbe, 0x1a, 0x74, 0x14, 0xff, 0xc7, 0x00, 0xbf,
-	0xb8, 0xcd, 0xff, 0xff, 0x02, 0x0c, 0x54, 0xa5,
-	0xdc, 0xa5, 0x2f, 0x40, 0x05, 0xf1, 0x00, 0x14,
-	0xfa, 0xf1, 0x01, 0x1c, 0x02, 0xe0, 0x00, 0x1c,
-	0x80, 0xff, 0xb0, 0x49, 0x04, 0xf0, 0x01, 0x0b,
-	0xd3, 0xa1, 0x03, 0xe0, 0x02, 0x0b, 0xd3, 0xa5,
-	0x27, 0x31, 0x20, 0x37, 0x02, 0x0b, 0xd3, 0xa5,
-	0x27, 0x31, 0x20, 0x37, 0x00, 0x13, 0xfb, 0xf1,
-	0x80, 0xff, 0x22, 0x73, 0xb5, 0x25, 0x18, 0x1e,
-	0xde, 0x30, 0xd9, 0x30, 0x64, 0x72, 0x11, 0x1e,
-	0x68, 0x23, 0x16, 0x31, 0x80, 0xff, 0x08, 0xc2,
-	0x40, 0x73, 0x3a, 0x48, 0x40, 0x9b, 0x06, 0xff,
-	0x02, 0xc6, 0x00, 0xbe, 0xcc, 0x17, 0x1e, 0xfc,
-	0x2c, 0x75, 0xdc, 0x21, 0xbc, 0x25, 0x04, 0x13,
-	0x0b, 0xf0, 0x03, 0x13, 0x09, 0xf0, 0x02, 0x13,
-	0x07, 0xf0, 0x01, 0x13, 0x05, 0xf0, 0x08, 0x13,
-	0x03, 0xf0, 0x04, 0xc3, 0x00, 0xbb, 0x03, 0xc3,
-	0x00, 0xbb, 0x50, 0x17, 0x3a, 0x17, 0x02, 0xc6,
-	0x00, 0xbe, 0x00, 0x00, 0x02, 0xc6, 0x00, 0xbe,
-	0x00, 0x00, 0x33, 0xc5, 0xa0, 0x74, 0xc0, 0x49,
-	0x1f, 0xf0, 0x30, 0xc5, 0xa0, 0x73, 0x00, 0x13,
-	0x04, 0xf1, 0xa2, 0x73, 0x00, 0x13, 0x14, 0xf0,
-	0x28, 0xc5, 0xa0, 0x74, 0xc8, 0x49, 0x1b, 0xf1,
-	0x26, 0xc5, 0xa0, 0x76, 0xa2, 0x74, 0x01, 0x06,
-	0x20, 0x37, 0xa0, 0x9e, 0xa2, 0x9c, 0x1e, 0xc5,
-	0xa2, 0x73, 0x23, 0x40, 0x10, 0xf8, 0x04, 0xf3,
-	0xa0, 0x73, 0x33, 0x40, 0x0c, 0xf8, 0x15, 0xc5,
-	0xa0, 0x74, 0x41, 0x48, 0xa0, 0x9c, 0x14, 0xc5,
-	0xa0, 0x76, 0x62, 0x48, 0xe0, 0x48, 0xa0, 0x9e,
-	0x10, 0xc6, 0x00, 0xbe, 0x0a, 0xc5, 0xa0, 0x74,
-	0x48, 0x48, 0xa0, 0x9c, 0x0b, 0xc5, 0x20, 0x1e,
-	0xa0, 0x9e, 0xe5, 0x48, 0xa0, 0x9e, 0xf0, 0xe7,
-	0xbc, 0xc0, 0xc8, 0xd2, 0xcc, 0xd2, 0x28, 0xe4,
-	0xfa, 0x01, 0xf0, 0xc0, 0x18, 0x89, 0x00, 0x1d,
-	0x43, 0xc3, 0x62, 0x62, 0xa0, 0x49, 0x06, 0xf0,
-	0x41, 0xc0, 0x02, 0x71, 0x60, 0x99, 0x3f, 0xc1,
-	0x03, 0xe0, 0x3c, 0xc0, 0x3d, 0xc1, 0x02, 0x99,
-	0x00, 0x61, 0x67, 0x11, 0x3d, 0xf1, 0x69, 0x33,
-	0x34, 0xc0, 0x28, 0x40, 0xf7, 0xf1, 0x35, 0xc0,
-	0x00, 0x19, 0x81, 0x1b, 0x89, 0xe8, 0x32, 0xc0,
-	0x04, 0x1a, 0x84, 0x1b, 0x85, 0xe8, 0x7a, 0xe8,
-	0xa3, 0x49, 0xfe, 0xf0, 0x2c, 0xc0, 0x76, 0xe8,
-	0xa1, 0x48, 0x29, 0xc0, 0x84, 0x1b, 0x7c, 0xe8,
-	0x00, 0x1d, 0x69, 0x33, 0x00, 0x1e, 0x01, 0x06,
-	0xff, 0x18, 0x30, 0x40, 0xfd, 0xf1, 0x7f, 0xc0,
-	0x00, 0x76, 0x2e, 0x40, 0xf7, 0xf1, 0x21, 0x48,
-	0x1a, 0xc0, 0x84, 0x1b, 0x6d, 0xe8, 0x76, 0xc0,
-	0x61, 0xe8, 0xa1, 0x49, 0xfd, 0xf0, 0x12, 0xc0,
-	0x00, 0x1a, 0x84, 0x1b, 0x65, 0xe8, 0x5a, 0xe8,
-	0xa5, 0x49, 0xfe, 0xf0, 0x0a, 0xc0, 0x01, 0x19,
-	0x81, 0x1b, 0x5e, 0xe8, 0x48, 0xe0, 0x8c, 0xd3,
-	0xb8, 0x0b, 0x50, 0xe8, 0x83, 0x00, 0x82, 0x00,
-	0x20, 0xb4, 0x10, 0xd8, 0x84, 0xd4, 0xfa, 0xc0,
-	0x00, 0x61, 0x9c, 0x20, 0x9c, 0x24, 0x06, 0x11,
-	0x06, 0xf1, 0x5d, 0xc0, 0x00, 0x61, 0x11, 0x48,
-	0x00, 0x89, 0x35, 0xe0, 0x00, 0x11, 0x02, 0xf1,
-	0x03, 0xe0, 0x04, 0x11, 0x06, 0xf1, 0x53, 0xc0,
-	0x00, 0x61, 0x92, 0x48, 0x00, 0x89, 0x2b, 0xe0,
-	0x05, 0x11, 0x08, 0xf1, 0x4c, 0xc0, 0x00, 0x61,
-	0x91, 0x49, 0x04, 0xf0, 0x91, 0x48, 0x00, 0x89,
-	0x11, 0xe0, 0xdc, 0xc0, 0x00, 0x61, 0x98, 0x20,
-	0x98, 0x24, 0x25, 0x11, 0x1c, 0xf1, 0x40, 0xc0,
-	0x25, 0xe8, 0x95, 0x49, 0x18, 0xf0, 0xd2, 0xc0,
-	0x00, 0x61, 0x98, 0x20, 0x98, 0x24, 0x25, 0x11,
-	0x12, 0xf1, 0x35, 0xc0, 0x00, 0x61, 0x92, 0x49,
-	0x0e, 0xf1, 0x12, 0x48, 0x00, 0x89, 0x2d, 0xc0,
-	0x00, 0x19, 0x00, 0x89, 0x2b, 0xc0, 0x01, 0x89,
-	0x27, 0xc0, 0x10, 0xe8, 0x25, 0xc0, 0x12, 0x48,
-	0x81, 0x1b, 0x16, 0xe8, 0xb9, 0xc3, 0x62, 0x62,
-	0xa0, 0x49, 0x05, 0xf0, 0xb5, 0xc3, 0x60, 0x71,
-	0xb5, 0xc0, 0x02, 0x99, 0x02, 0xc0, 0x00, 0xb8,
-	0xd6, 0x07, 0x13, 0xc4, 0x84, 0x98, 0x00, 0x1b,
-	0x86, 0x8b, 0x86, 0x73, 0xbf, 0x49, 0xfe, 0xf1,
-	0x80, 0x71, 0x82, 0x72, 0x80, 0xff, 0x09, 0xc4,
-	0x84, 0x98, 0x80, 0x99, 0x82, 0x9a, 0x86, 0x8b,
-	0x86, 0x73, 0xbf, 0x49, 0xfe, 0xf1, 0x80, 0xff,
-	0x08, 0xea, 0x10, 0xd4, 0x88, 0xd3, 0x30, 0xd4,
-	0x10, 0xc0, 0x12, 0xe8, 0x8a, 0xd3, 0x00, 0xd8,
-	0x02, 0xc0, 0x00, 0xb8, 0xe0, 0x08, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+	0x5d, 0xe0, 0x07, 0xe0, 0x0f, 0xe0, 0x5a, 0xe0,
+	0x59, 0xe0, 0x1f, 0xe0, 0x57, 0xe0, 0x3e, 0xe1,
+	0x08, 0xc2, 0x40, 0x73, 0x3a, 0x48, 0x40, 0x9b,
+	0x06, 0xff, 0x02, 0xc6, 0x00, 0xbe, 0xcc, 0x17,
+	0x1e, 0xfc, 0x2c, 0x75, 0xdc, 0x21, 0xbc, 0x25,
+	0x04, 0x13, 0x0b, 0xf0, 0x03, 0x13, 0x09, 0xf0,
+	0x02, 0x13, 0x07, 0xf0, 0x01, 0x13, 0x05, 0xf0,
+	0x08, 0x13, 0x03, 0xf0, 0x04, 0xc3, 0x00, 0xbb,
+	0x03, 0xc3, 0x00, 0xbb, 0x50, 0x17, 0x3a, 0x17,
+	0x33, 0xc5, 0xa0, 0x74, 0xc0, 0x49, 0x1f, 0xf0,
+	0x30, 0xc5, 0xa0, 0x73, 0x00, 0x13, 0x04, 0xf1,
+	0xa2, 0x73, 0x00, 0x13, 0x14, 0xf0, 0x28, 0xc5,
+	0xa0, 0x74, 0xc8, 0x49, 0x1b, 0xf1, 0x26, 0xc5,
+	0xa0, 0x76, 0xa2, 0x74, 0x01, 0x06, 0x20, 0x37,
+	0xa0, 0x9e, 0xa2, 0x9c, 0x1e, 0xc5, 0xa2, 0x73,
+	0x23, 0x40, 0x10, 0xf8, 0x04, 0xf3, 0xa0, 0x73,
+	0x33, 0x40, 0x0c, 0xf8, 0x15, 0xc5, 0xa0, 0x74,
+	0x41, 0x48, 0xa0, 0x9c, 0x14, 0xc5, 0xa0, 0x76,
+	0x62, 0x48, 0xe0, 0x48, 0xa0, 0x9e, 0x10, 0xc6,
+	0x00, 0xbe, 0x0a, 0xc5, 0xa0, 0x74, 0x48, 0x48,
+	0xa0, 0x9c, 0x0b, 0xc5, 0x20, 0x1e, 0xa0, 0x9e,
+	0xe5, 0x48, 0xa0, 0x9e, 0xf0, 0xe7, 0xbc, 0xc0,
+	0xc8, 0xd2, 0xcc, 0xd2, 0x28, 0xe4, 0xfa, 0x01,
+	0xf0, 0xc0, 0x18, 0x89, 0x74, 0xc0, 0xcd, 0xe8,
+	0x80, 0x76, 0x00, 0x1d, 0x6e, 0xc3, 0x66, 0x62,
+	0xa0, 0x49, 0x06, 0xf0, 0x64, 0xc0, 0x02, 0x71,
+	0x60, 0x99, 0x62, 0xc1, 0x03, 0xe0, 0x5f, 0xc0,
+	0x60, 0xc1, 0x02, 0x99, 0x00, 0x61, 0x0f, 0x1b,
+	0x59, 0x41, 0x03, 0x13, 0x18, 0xf1, 0xe4, 0x49,
+	0x20, 0xf1, 0xe5, 0x49, 0x1e, 0xf0, 0x59, 0xc6,
+	0xd0, 0x73, 0xb7, 0x49, 0x08, 0xf0, 0x01, 0x0b,
+	0x80, 0x13, 0x03, 0xf0, 0xd0, 0x8b, 0x03, 0xe0,
+	0x3f, 0x48, 0xd0, 0x9b, 0x51, 0xc0, 0x10, 0x1a,
+	0x84, 0x1b, 0xb1, 0xe8, 0x4b, 0xc2, 0x40, 0x63,
+	0x30, 0x48, 0x0a, 0xe0, 0xe5, 0x49, 0x09, 0xf0,
+	0x47, 0xc0, 0x00, 0x1a, 0x84, 0x1b, 0xa7, 0xe8,
+	0x41, 0xc2, 0x40, 0x63, 0xb0, 0x48, 0x40, 0x8b,
+	0x67, 0x11, 0x3f, 0xf1, 0x69, 0x33, 0x32, 0xc0,
+	0x28, 0x40, 0xd2, 0xf1, 0x33, 0xc0, 0x00, 0x19,
+	0x81, 0x1b, 0x99, 0xe8, 0x30, 0xc0, 0x04, 0x1a,
+	0x84, 0x1b, 0x95, 0xe8, 0x8a, 0xe8, 0xa3, 0x49,
+	0xfe, 0xf0, 0x2a, 0xc0, 0x86, 0xe8, 0xa1, 0x48,
+	0x84, 0x1b, 0x8d, 0xe8, 0x00, 0x1d, 0x69, 0x33,
+	0x00, 0x1e, 0x01, 0x06, 0xff, 0x18, 0x30, 0x40,
+	0xfd, 0xf1, 0x1f, 0xc0, 0x00, 0x76, 0x2e, 0x40,
+	0xf7, 0xf1, 0x21, 0x48, 0x19, 0xc0, 0x84, 0x1b,
+	0x7e, 0xe8, 0x74, 0x08, 0x72, 0xe8, 0xa1, 0x49,
+	0xfd, 0xf0, 0x11, 0xc0, 0x00, 0x1a, 0x84, 0x1b,
+	0x76, 0xe8, 0x6b, 0xe8, 0xa5, 0x49, 0xfe, 0xf0,
+	0x09, 0xc0, 0x01, 0x19, 0x81, 0x1b, 0x6f, 0xe8,
+	0x5a, 0xe0, 0xb8, 0x0b, 0x50, 0xe8, 0x83, 0x00,
+	0x82, 0x00, 0x20, 0xb4, 0x10, 0xd8, 0x84, 0xd4,
+	0x88, 0xd3, 0x10, 0xe0, 0x00, 0xd8, 0x24, 0xd4,
+	0xf9, 0xc0, 0x57, 0xe8, 0x48, 0x33, 0xf3, 0xc0,
+	0x00, 0x61, 0x6a, 0xc0, 0x47, 0x11, 0x03, 0xf0,
+	0x57, 0x11, 0x05, 0xf1, 0x00, 0x61, 0x17, 0x48,
+	0x00, 0x89, 0x41, 0xe0, 0x9c, 0x20, 0x9c, 0x24,
+	0xd0, 0x49, 0x09, 0xf0, 0x04, 0x11, 0x07, 0xf1,
+	0x00, 0x61, 0x97, 0x49, 0x38, 0xf0, 0x97, 0x48,
+	0x00, 0x89, 0x2b, 0xe0, 0x00, 0x11, 0x05, 0xf1,
+	0x00, 0x61, 0x92, 0x48, 0x00, 0x89, 0x2f, 0xe0,
+	0x06, 0x11, 0x05, 0xf1, 0x00, 0x61, 0x11, 0x48,
+	0x00, 0x89, 0x29, 0xe0, 0x05, 0x11, 0x0f, 0xf1,
+	0x00, 0x61, 0x93, 0x49, 0x1a, 0xf1, 0x91, 0x49,
+	0x0a, 0xf0, 0x91, 0x48, 0x00, 0x89, 0x0f, 0xe0,
+	0xc6, 0xc0, 0x00, 0x61, 0x98, 0x20, 0x98, 0x24,
+	0x25, 0x11, 0x80, 0xff, 0xfa, 0xef, 0x17, 0xf1,
+	0x38, 0xc0, 0x1f, 0xe8, 0x95, 0x49, 0x13, 0xf0,
+	0xf4, 0xef, 0x11, 0xf1, 0x31, 0xc0, 0x00, 0x61,
+	0x92, 0x49, 0x0d, 0xf1, 0x12, 0x48, 0x00, 0x89,
+	0x29, 0xc0, 0x00, 0x19, 0x00, 0x89, 0x27, 0xc0,
+	0x01, 0x89, 0x23, 0xc0, 0x0e, 0xe8, 0x12, 0x48,
+	0x81, 0x1b, 0x15, 0xe8, 0xae, 0xc3, 0x66, 0x62,
+	0xa0, 0x49, 0x04, 0xf0, 0x64, 0x71, 0xa3, 0xc0,
+	0x02, 0x99, 0x02, 0xc0, 0x00, 0xb8, 0xd6, 0x07,
+	0x13, 0xc4, 0x84, 0x98, 0x00, 0x1b, 0x86, 0x8b,
+	0x86, 0x73, 0xbf, 0x49, 0xfe, 0xf1, 0x80, 0x71,
+	0x82, 0x72, 0x80, 0xff, 0x09, 0xc4, 0x84, 0x98,
+	0x80, 0x99, 0x82, 0x9a, 0x86, 0x8b, 0x86, 0x73,
+	0xbf, 0x49, 0xfe, 0xf1, 0x80, 0xff, 0x08, 0xea,
+	0x30, 0xd4, 0x10, 0xc0, 0x12, 0xe8, 0x8a, 0xd3,
+	0x00, 0xd8, 0x02, 0xc6, 0x00, 0xbe, 0xe0, 0x08 };
 
 static u16 r8153_pla_patch_c_bp[] = {
 	0xfc26, 0x8000, 0xfc28, 0x1306, 0xfc2a, 0x17ca, 0xfc2c, 0x171e,
 	0xfc2e, 0x0000, 0xfc30, 0x0000, 0xfc32, 0x01b4, 0xfc34, 0x07d4,
-	0xfc36, 0x0894, 0xfc38, 0x00e7 };
+	0xfc36, 0x0894, 0xfc38, 0x00e6 };
 
 static u16 r8153_ram_code_bc[] = {
 	0xB436, 0xB820, 0xB438, 0x0290, 0xB436, 0xA012, 0xB438, 0x0000,
@@ -560,7 +529,7 @@  static u16 r8153_usb_patch_b_bp[] = {
 
 static u8 r8153_pla_patch_b[] = {
 	0x08, 0xe0, 0xea, 0xe0, 0xf2, 0xe0, 0x04, 0xe1,
-	0x09, 0xe1, 0x0e, 0xe1, 0x46, 0xe1, 0xf3, 0xe1,
+	0x09, 0xe1, 0x0e, 0xe1, 0x46, 0xe1, 0xf7, 0xe1,
 	0x14, 0xc2, 0x40, 0x73, 0xba, 0x48, 0x40, 0x9b,
 	0x11, 0xc2, 0x40, 0x73, 0xb0, 0x49, 0x17, 0xf0,
 	0xbf, 0x49, 0x03, 0xf1, 0x09, 0xc5, 0x00, 0xbd,
@@ -642,51 +611,51 @@  static u8 r8153_pla_patch_b[] = {
 	0x0b, 0xc5, 0x20, 0x1e, 0xa0, 0x9e, 0xe5, 0x48,
 	0xa0, 0x9e, 0xf0, 0xe7, 0xbc, 0xc0, 0xc8, 0xd2,
 	0xcc, 0xd2, 0x28, 0xe4, 0xe6, 0x01, 0xf0, 0xc0,
-	0x18, 0x89, 0x00, 0x1d, 0x3c, 0xc3, 0x60, 0x71,
+	0x18, 0x89, 0x00, 0x1d, 0x3c, 0xc3, 0x64, 0x71,
 	0x3c, 0xc0, 0x02, 0x99, 0x00, 0x61, 0x67, 0x11,
 	0x3c, 0xf1, 0x69, 0x33, 0x35, 0xc0, 0x28, 0x40,
 	0xf6, 0xf1, 0x34, 0xc0, 0x00, 0x19, 0x81, 0x1b,
-	0x8c, 0xe8, 0x31, 0xc0, 0x04, 0x1a, 0x84, 0x1b,
-	0x88, 0xe8, 0x7d, 0xe8, 0xa3, 0x49, 0xfe, 0xf0,
-	0x2b, 0xc0, 0x79, 0xe8, 0xa1, 0x48, 0x28, 0xc0,
-	0x84, 0x1b, 0x7f, 0xe8, 0x00, 0x1d, 0x69, 0x33,
+	0x91, 0xe8, 0x31, 0xc0, 0x04, 0x1a, 0x84, 0x1b,
+	0x8d, 0xe8, 0x82, 0xe8, 0xa3, 0x49, 0xfe, 0xf0,
+	0x2b, 0xc0, 0x7e, 0xe8, 0xa1, 0x48, 0x28, 0xc0,
+	0x84, 0x1b, 0x84, 0xe8, 0x00, 0x1d, 0x69, 0x33,
 	0x00, 0x1e, 0x01, 0x06, 0xff, 0x18, 0x30, 0x40,
-	0xfd, 0xf1, 0x18, 0xc0, 0x00, 0x76, 0x2e, 0x40,
+	0xfd, 0xf1, 0x19, 0xc0, 0x00, 0x76, 0x2e, 0x40,
 	0xf7, 0xf1, 0x21, 0x48, 0x19, 0xc0, 0x84, 0x1b,
-	0x70, 0xe8, 0x79, 0xc0, 0x64, 0xe8, 0xa1, 0x49,
+	0x75, 0xe8, 0x10, 0xc0, 0x69, 0xe8, 0xa1, 0x49,
 	0xfd, 0xf0, 0x11, 0xc0, 0x00, 0x1a, 0x84, 0x1b,
-	0x68, 0xe8, 0x5d, 0xe8, 0xa5, 0x49, 0xfe, 0xf0,
-	0x09, 0xc0, 0x01, 0x19, 0x81, 0x1b, 0x61, 0xe8,
-	0x4f, 0xe0, 0x88, 0xd3, 0x8c, 0xd3, 0xb8, 0x0b,
+	0x6d, 0xe8, 0x62, 0xe8, 0xa5, 0x49, 0xfe, 0xf0,
+	0x09, 0xc0, 0x01, 0x19, 0x81, 0x1b, 0x66, 0xe8,
+	0x54, 0xe0, 0x10, 0xd4, 0x88, 0xd3, 0xb8, 0x0b,
 	0x50, 0xe8, 0x20, 0xb4, 0x10, 0xd8, 0x84, 0xd4,
-	0xfc, 0xc0, 0x00, 0x61, 0x9c, 0x20, 0x9c, 0x24,
-	0x06, 0x11, 0x06, 0xf1, 0x60, 0xc0, 0x00, 0x61,
-	0x11, 0x48, 0x00, 0x89, 0x3d, 0xe0, 0x00, 0x11,
-	0x02, 0xf1, 0x03, 0xe0, 0x04, 0x11, 0x06, 0xf1,
-	0x56, 0xc0, 0x00, 0x61, 0x92, 0x48, 0x00, 0x89,
-	0x33, 0xe0, 0x05, 0x11, 0x08, 0xf1, 0x4f, 0xc0,
-	0x00, 0x61, 0x91, 0x49, 0x04, 0xf0, 0x91, 0x48,
-	0x00, 0x89, 0x11, 0xe0, 0xde, 0xc0, 0x00, 0x61,
-	0x98, 0x20, 0x98, 0x24, 0x25, 0x11, 0x24, 0xf1,
-	0x45, 0xc0, 0x29, 0xe8, 0x95, 0x49, 0x20, 0xf0,
-	0xd4, 0xc0, 0x00, 0x61, 0x98, 0x20, 0x98, 0x24,
-	0x25, 0x11, 0x1a, 0xf1, 0x38, 0xc0, 0x00, 0x61,
-	0x92, 0x49, 0x16, 0xf1, 0x12, 0x48, 0x00, 0x89,
-	0x30, 0xc0, 0x00, 0x19, 0x00, 0x89, 0x2e, 0xc0,
-	0x01, 0x89, 0x2e, 0xc0, 0x04, 0x19, 0x81, 0x1b,
-	0x1c, 0xe8, 0x2b, 0xc0, 0x14, 0x19, 0x81, 0x1b,
-	0x18, 0xe8, 0x22, 0xc0, 0x0c, 0xe8, 0x20, 0xc0,
-	0x12, 0x48, 0x81, 0x1b, 0x12, 0xe8, 0xb3, 0xc3,
-	0x62, 0x71, 0xb3, 0xc0, 0x02, 0x99, 0x02, 0xc0,
-	0x00, 0xb8, 0x96, 0x07, 0x13, 0xc4, 0x84, 0x98,
-	0x00, 0x1b, 0x86, 0x8b, 0x86, 0x73, 0xbf, 0x49,
-	0xfe, 0xf1, 0x80, 0x71, 0x82, 0x72, 0x80, 0xff,
-	0x09, 0xc4, 0x84, 0x98, 0x80, 0x99, 0x82, 0x9a,
-	0x86, 0x8b, 0x86, 0x73, 0xbf, 0x49, 0xfe, 0xf1,
-	0x80, 0xff, 0x08, 0xea, 0x10, 0xd4, 0x30, 0xd4,
+	0xfd, 0xc0, 0x52, 0xe8, 0x48, 0x33, 0xf9, 0xc0,
+	0x00, 0x61, 0x9c, 0x20, 0x9c, 0x24, 0xd0, 0x49,
+	0x04, 0xf0, 0x04, 0x11, 0x02, 0xf1, 0x03, 0xe0,
+	0x00, 0x11, 0x06, 0xf1, 0x5c, 0xc0, 0x00, 0x61,
+	0x92, 0x48, 0x00, 0x89, 0x3a, 0xe0, 0x06, 0x11,
+	0x06, 0xf1, 0x55, 0xc0, 0x00, 0x61, 0x11, 0x48,
+	0x00, 0x89, 0x33, 0xe0, 0x05, 0x11, 0x08, 0xf1,
+	0x4e, 0xc0, 0x00, 0x61, 0x91, 0x49, 0x04, 0xf0,
+	0x91, 0x48, 0x00, 0x89, 0x11, 0xe0, 0xd9, 0xc0,
+	0x00, 0x61, 0x98, 0x20, 0x98, 0x24, 0x25, 0x11,
+	0x24, 0xf1, 0x44, 0xc0, 0x29, 0xe8, 0x95, 0x49,
+	0x20, 0xf0, 0xcf, 0xc0, 0x00, 0x61, 0x98, 0x20,
+	0x98, 0x24, 0x25, 0x11, 0x1a, 0xf1, 0x37, 0xc0,
+	0x00, 0x61, 0x92, 0x49, 0x16, 0xf1, 0x12, 0x48,
+	0x00, 0x89, 0x2f, 0xc0, 0x00, 0x19, 0x00, 0x89,
+	0x2d, 0xc0, 0x01, 0x89, 0x2d, 0xc0, 0x04, 0x19,
+	0x81, 0x1b, 0x1c, 0xe8, 0x2a, 0xc0, 0x14, 0x19,
+	0x81, 0x1b, 0x18, 0xe8, 0x21, 0xc0, 0x0c, 0xe8,
+	0x1f, 0xc0, 0x12, 0x48, 0x81, 0x1b, 0x12, 0xe8,
+	0xae, 0xc3, 0x66, 0x71, 0xae, 0xc0, 0x02, 0x99,
+	0x02, 0xc0, 0x00, 0xb8, 0x96, 0x07, 0x13, 0xc4,
+	0x84, 0x98, 0x00, 0x1b, 0x86, 0x8b, 0x86, 0x73,
+	0xbf, 0x49, 0xfe, 0xf1, 0x80, 0x71, 0x82, 0x72,
+	0x80, 0xff, 0x09, 0xc4, 0x84, 0x98, 0x80, 0x99,
+	0x82, 0x9a, 0x86, 0x8b, 0x86, 0x73, 0xbf, 0x49,
+	0xfe, 0xf1, 0x80, 0xff, 0x08, 0xea, 0x30, 0xd4,
 	0x10, 0xc0, 0x12, 0xe8, 0x8a, 0xd3, 0x28, 0xe4,
-	0x2c, 0xe4, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+	0x2c, 0xe4, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x00 };
 
 static u16 r8153_pla_patch_b_bp[] = {
 	0xfc26, 0x8000, 0xfc28, 0x1154, 0xfc2a, 0x1606, 0xfc2c, 0x155a,
@@ -694,33 +663,71 @@  static u16 r8153_pla_patch_b_bp[] = {
 	0xfc36, 0x0000, 0xfc38, 0x007f };
 
 static u16 r8153_ram_code_d[] = {
-	0xa436, 0xb820, 0xa438, 0x0290, 0xa436, 0xa012, 0xa438, 0x0000,
-	0xa436, 0xa014, 0xa438, 0x2c04, 0xb438, 0x2c07, 0xb438, 0x2c07,
-	0xb438, 0x2c07, 0xb438, 0xa240, 0xb438, 0xa104, 0xb438, 0x2944,
-	0xa436, 0xa01a, 0xa438, 0x0000, 0xa436, 0xa006, 0xa438, 0x0fff,
-	0xa436, 0xa004, 0xa438, 0x0fff, 0xa436, 0xa002, 0xa438, 0x0fff,
-	0xa436, 0xa000, 0xa438, 0x1943, 0xa436, 0xb820, 0xa438, 0x0210 };
+	0xB436, 0xB820, 0xB438, 0x0290, 0xB436, 0xA012, 0xB438, 0x0000,
+	0xB436, 0xA014, 0xB438, 0x2c04, 0xB438, 0x2c07, 0xB438, 0x2c07,
+	0xB438, 0x2c07, 0xB438, 0xa240, 0xB438, 0xa104, 0xB438, 0x2944,
+	0xB436, 0xA01A, 0xB438, 0x0000, 0xB436, 0xA006, 0xB438, 0x0fff,
+	0xB436, 0xA004, 0xB438, 0x0fff, 0xB436, 0xA002, 0xB438, 0x0fff,
+	0xB436, 0xA000, 0xB438, 0x1943, 0xB436, 0xB820, 0xB438, 0x0210 };
 
 static u8 usb_patch_d[] = {
-	0x08, 0xe0, 0x0a, 0xe0, 0x0c, 0xe0, 0x1f, 0xe0,
-	0x28, 0xe0, 0x2a, 0xe0, 0x2c, 0xe0, 0x2e, 0xe0,
-	0x02, 0xc5, 0x00, 0xbd, 0x00, 0x00, 0x02, 0xc3,
-	0x00, 0xbb, 0x00, 0x00, 0x30, 0x18, 0x11, 0xc1,
-	0x05, 0xe8, 0x10, 0xc6, 0x02, 0xc2, 0x00, 0xba,
-	0x94, 0x17, 0x02, 0xb4, 0x09, 0xc2, 0x40, 0x99,
-	0x0e, 0x48, 0x42, 0x98, 0x42, 0x70, 0x8e, 0x49,
-	0xfe, 0xf1, 0x02, 0xb0, 0x80, 0xff, 0xc0, 0xd4,
-	0xe4, 0x40, 0x20, 0xd4, 0xb0, 0x49, 0x04, 0xf0,
-	0x30, 0x18, 0x06, 0xc1, 0xef, 0xef, 0xfa, 0xc7,
-	0x02, 0xc0, 0x00, 0xb8, 0x38, 0x12, 0xe4, 0x4b,
-	0x02, 0xc3, 0x00, 0xbb, 0x00, 0x00, 0x02, 0xc5,
-	0x00, 0xbd, 0x00, 0x00, 0x02, 0xc1, 0x00, 0xb9,
-	0x00, 0x00, 0x02, 0xc1, 0x00, 0xb9, 0x00, 0x00 };
+	0x08, 0xe0, 0x0e, 0xe0, 0x11, 0xe0, 0x24, 0xe0,
+	0x2b, 0xe0, 0x33, 0xe0, 0x3a, 0xe0, 0x3c, 0xe0,
+	0x1e, 0xc3, 0x70, 0x61, 0x12, 0x48, 0x70, 0x89,
+	0x02, 0xc3, 0x00, 0xbb, 0x02, 0x17, 0x32, 0x19,
+	0x02, 0xc3, 0x00, 0xbb, 0x44, 0x14, 0x30, 0x18,
+	0x11, 0xc1, 0x05, 0xe8, 0x10, 0xc6, 0x02, 0xc2,
+	0x00, 0xba, 0x94, 0x17, 0x02, 0xb4, 0x09, 0xc2,
+	0x40, 0x99, 0x0e, 0x48, 0x42, 0x98, 0x42, 0x70,
+	0x8e, 0x49, 0xfe, 0xf1, 0x02, 0xb0, 0x80, 0xff,
+	0xc0, 0xd4, 0xe4, 0x40, 0x20, 0xd4, 0x30, 0x18,
+	0x06, 0xc1, 0xf1, 0xef, 0xfc, 0xc7, 0x02, 0xc0,
+	0x00, 0xb8, 0x38, 0x12, 0xe4, 0x4b, 0x0c, 0x61,
+	0x92, 0x48, 0x93, 0x48, 0x95, 0x48, 0x96, 0x48,
+	0x0c, 0x89, 0x02, 0xc0, 0x00, 0xb8, 0x0e, 0x06,
+	0x30, 0x18, 0xf5, 0xc1, 0xe0, 0xef, 0x04, 0xc5,
+	0x02, 0xc4, 0x00, 0xbc, 0x76, 0x3c, 0x1e, 0xfc,
+	0x02, 0xc6, 0x00, 0xbe, 0x00, 0x00, 0x02, 0xc6,
+	0x00, 0xbe, 0x00, 0x00 };
 
 static u16 r8153_usb_patch_d_bp[] = {
-	0xfc26, 0xa000, 0xfc28, 0x0000, 0xfc2a, 0x0000, 0xfc2c, 0x1792,
-	0xfc2e, 0x1236, 0xfc30, 0x0000, 0xfc32, 0x0000, 0xfc34, 0x0000,
-	0xfc36, 0x0000, 0xfc38, 0x000c };
+	0xfc26, 0xa000, 0xfc28, 0x16de, 0xfc2a, 0x1442, 0xfc2c, 0x1792,
+	0xfc2e, 0x1236, 0xfc30, 0x0606, 0xfc32, 0x3c74, 0xfc34, 0x0000,
+	0xfc36, 0x0000, 0xfc38, 0x003e };
+
+static u8 pla_patch_d[] = {
+	0x03, 0xe0, 0x16, 0xe0, 0x30, 0xe0, 0x12, 0xc2,
+	0x40, 0x73, 0xb0, 0x49, 0x08, 0xf0, 0xb8, 0x49,
+	0x06, 0xf0, 0xb8, 0x48, 0x40, 0x9b, 0x0b, 0xc2,
+	0x40, 0x76, 0x05, 0xe0, 0x02, 0x61, 0x02, 0xc3,
+	0x00, 0xbb, 0x54, 0x08, 0x02, 0xc3, 0x00, 0xbb,
+	0x64, 0x08, 0x98, 0xd3, 0x1e, 0xfc, 0xfe, 0xc0,
+	0x02, 0x62, 0xa0, 0x48, 0x02, 0x8a, 0x00, 0x72,
+	0xa0, 0x49, 0x11, 0xf0, 0x13, 0xc1, 0x20, 0x62,
+	0x2e, 0x21, 0x2f, 0x25, 0x00, 0x71, 0x9f, 0x24,
+	0x0a, 0x40, 0x09, 0xf0, 0x00, 0x71, 0x18, 0x48,
+	0xa0, 0x49, 0x03, 0xf1, 0x9f, 0x48, 0x02, 0xe0,
+	0x1f, 0x48, 0x00, 0x99, 0x02, 0xc2, 0x00, 0xba,
+	0xac, 0x0c, 0x08, 0xe9, 0x36, 0xc0, 0x00, 0x61,
+	0x9c, 0x20, 0x9c, 0x24, 0x33, 0xc0, 0x07, 0x11,
+	0x05, 0xf1, 0x00, 0x61, 0x17, 0x48, 0x00, 0x89,
+	0x0d, 0xe0, 0x04, 0x11, 0x0b, 0xf1, 0x00, 0x61,
+	0x97, 0x49, 0x08, 0xf0, 0x97, 0x48, 0x00, 0x89,
+	0x23, 0xc0, 0x0e, 0xe8, 0x12, 0x48, 0x81, 0x1b,
+	0x15, 0xe8, 0x1f, 0xc0, 0x00, 0x61, 0x67, 0x11,
+	0x04, 0xf0, 0x02, 0xc0, 0x00, 0xb8, 0x42, 0x09,
+	0x02, 0xc0, 0x00, 0xb8, 0x90, 0x08, 0x13, 0xc4,
+	0x84, 0x98, 0x00, 0x1b, 0x86, 0x8b, 0x86, 0x73,
+	0xbf, 0x49, 0xfe, 0xf1, 0x80, 0x71, 0x82, 0x72,
+	0x80, 0xff, 0x09, 0xc4, 0x84, 0x98, 0x80, 0x99,
+	0x82, 0x9a, 0x86, 0x8b, 0x86, 0x73, 0xbf, 0x49,
+	0xfe, 0xf1, 0x80, 0xff, 0x08, 0xea, 0x30, 0xd4,
+	0x50, 0xe8, 0x8a, 0xd3 };
+
+static u16 r8153_pla_patch_d_bp[] = {
+	0xfc26, 0x8000, 0xfc28, 0x0852, 0xfc2a, 0x0c92, 0xfc2c, 0x088c,
+	0xfc2e, 0x0000, 0xfc30, 0x0000, 0xfc32, 0x0000, 0xfc34, 0x0000,
+	0xfc36, 0x0000, 0xfc38, 0x0007 };
 
 static void rtl_clear_bp(struct r8152 *tp)
 {
@@ -956,10 +963,19 @@  void r8153_firmware(struct r8152 *tp)
 
 		ocp_write_word(tp, MCU_TYPE_PLA, 0xd388, 0x08ca);
 
+		ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS,
+			       U3P3_CHECK_EN | 4);
+
 		ocp_data = ocp_read_word(tp, MCU_TYPE_USB, 0xcfca);
 		ocp_data |= 0x4000;
 		ocp_write_word(tp, MCU_TYPE_USB, 0xcfca, ocp_data);
+
+		ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY);
+		ocp_data |= USB2PHY_L1 | USB2PHY_SUSPEND;
+		ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data);
 	} else if (tp->version == RTL_VER_06) {
+		u32 ocp_data;
+
 		r8153_pre_ram_code(tp, 0x7002);
 
 		for (i = 0; i < ARRAY_SIZE(r8153_ram_code_d); i += 2)
@@ -979,5 +995,22 @@  void r8153_firmware(struct r8152 *tp)
 			ocp_write_word(tp, MCU_TYPE_USB,
 				       r8153_usb_patch_d_bp[i],
 				       r8153_usb_patch_d_bp[i+1]);
+
+		ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, 0x0000);
+		generic_ocp_write(tp, 0xf800, 0xff, sizeof(pla_patch_d),
+				  pla_patch_d, MCU_TYPE_PLA);
+
+		for (i = 0; i < ARRAY_SIZE(r8153_pla_patch_d_bp); i += 2)
+			ocp_write_word(tp, MCU_TYPE_PLA,
+				       r8153_pla_patch_d_bp[i],
+				       r8153_pla_patch_d_bp[i + 1]);
+
+		ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY);
+		ocp_data |= USB2PHY_L1 | USB2PHY_SUSPEND;
+		ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data);
+
+		ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1);
+		ocp_data |= FW_IP_RESET_EN;
+		ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, ocp_data);
 	}
 }