public inbox for dev@dpdk.org
 help / color / mirror / Atom feed
* [PATCH v4 00/13] net/r8169: driver updates and new hardware support
@ 2026-02-13  3:20 Howard Wang
  2026-02-13  3:20 ` [PATCH v4 01/13] net/r8169: fix crash in RTL8168FP init Howard Wang
                   ` (13 more replies)
  0 siblings, 14 replies; 15+ messages in thread
From: Howard Wang @ 2026-02-13  3:20 UTC (permalink / raw)
  To: dev; +Cc: pro_nic_dpdk, Howard Wang

This patch series introduces several updates to the net/r8169 driver.

The changes are categorized as follows:

1. Bug Fixes:
   - Fix a crash during RTL8168FP initialization due to a missing function pointer.
   - Fix incorrect bitwise logic for RTL8127 capabilities.
   - Fix incorrect speed identification for RTL8168KB (it is a 1G device).
   - Fix link status reporting issues regarding old mapping.

2. New Hardware Support:
   - Add support for RTL8125K (2.5G).
   - Add support for RTL9151 (2.5G).
   - Add support for RTL8168KD (1G).

3. Hardware Configuration Updates:
   - Update MCU and PHY configurations for RTL8125, RTL8126, and RTL8127 series
     to match the latest hardware specifications.
   - Optimize Rx descriptor fetch numbers for RTL8126 and RTL8127 to improve performance.
   - Adjust jumbo frame size limits for non-1G cards.

4. Cleanup:
   - Remove support for the unreleased test chip (CFG_METHOD_69) to simplify the code.

Howard Wang (13):
  net/r8169: fix crash in RTL8168FP init
  net/r8169: optimize Rx descriptor fetch number
  net/r8169: add support for RTL8168KD
  net/r8169: update hardware configurations for 8127
  net/r8169: adjust jumbo frame size limit for non-1G cards
  net/r8169: remove support for CFG_METHOD_69
  net/r8169: update hardware configurations for 8126
  net/r8169: update hardware configurations for 8125
  net/r8169: add support for RTL9151
  net/r8169: add support for RTL8125K
  net/r8169: fix one bug about RTL8168KB
  net/r8169: ensure the old mapping is used
  net/r8169: fix bitmask logic for RTL8127

 drivers/net/r8169/base/rtl8125a_mcu.c  |  128 +--
 drivers/net/r8169/base/rtl8125b_mcu.c  |   56 +-
 drivers/net/r8169/base/rtl8125bp_mcu.c |   17 +-
 drivers/net/r8169/base/rtl8125cp.c     |   36 +
 drivers/net/r8169/base/rtl8125cp_mcu.c |   87 +-
 drivers/net/r8169/base/rtl8125cp_mcu.h |    1 +
 drivers/net/r8169/base/rtl8125d.c      |   31 +-
 drivers/net/r8169/base/rtl8125d_mcu.c  |  605 +++++++----
 drivers/net/r8169/base/rtl8125d_mcu.h  |    1 +
 drivers/net/r8169/base/rtl8126a.c      |   32 +-
 drivers/net/r8169/base/rtl8126a_mcu.c  |  689 +-----------
 drivers/net/r8169/base/rtl8126a_mcu.h  |    2 -
 drivers/net/r8169/base/rtl8127.c       |   15 +-
 drivers/net/r8169/base/rtl8127_mcu.c   | 1332 +++++++++++++++++-------
 drivers/net/r8169/base/rtl8168fp.c     |    1 +
 drivers/net/r8169/base/rtl8168fp.h     |    1 +
 drivers/net/r8169/base/rtl8168fp_mcu.c |    6 +
 drivers/net/r8169/base/rtl9151a.c      |   87 ++
 drivers/net/r8169/base/rtl9151a.h      |   10 +
 drivers/net/r8169/base/rtl9151a_mcu.c  |   53 +
 drivers/net/r8169/meson.build          |    2 +
 drivers/net/r8169/r8169_compat.h       |   10 +-
 drivers/net/r8169/r8169_ethdev.c       |   36 +-
 drivers/net/r8169/r8169_ethdev.h       |    3 +
 drivers/net/r8169/r8169_fiber.c        |   15 +-
 drivers/net/r8169/r8169_hw.c           |  239 +++--
 drivers/net/r8169/r8169_hw.h           |   11 +-
 drivers/net/r8169/r8169_phy.c          |   54 +-
 drivers/net/r8169/r8169_rxtx.c         |    1 -
 29 files changed, 2058 insertions(+), 1503 deletions(-)
 create mode 100644 drivers/net/r8169/base/rtl9151a.c
 create mode 100644 drivers/net/r8169/base/rtl9151a.h
 create mode 100644 drivers/net/r8169/base/rtl9151a_mcu.c

-- 
2.34.1


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [PATCH v4 01/13] net/r8169: fix crash in RTL8168FP init
  2026-02-13  3:20 [PATCH v4 00/13] net/r8169: driver updates and new hardware support Howard Wang
@ 2026-02-13  3:20 ` Howard Wang
  2026-02-13  3:20 ` [PATCH v4 02/13] net/r8169: optimize Rx descriptor fetch number Howard Wang
                   ` (12 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: Howard Wang @ 2026-02-13  3:20 UTC (permalink / raw)
  To: dev; +Cc: pro_nic_dpdk, Howard Wang, stable

The rtl8168fp_ops structure was missing the hw_phy_mcu_config function
pointer, causing a NULL pointer dereference during device initialization
when the driver attempts to configure the PHY microcontroller.

Add hw_phy_mcu_config_8168fp() as a no-op function since the RTL8168FP
does not require PHY MCU configuration. This matches the pattern used
by other chip variants that don't need PHY MCU updates.

Fixes: d9ee71b5f1bc ("net/r8169: support RTL8168 series")
Cc: stable@dpdk.org

Signed-off-by: Howard Wang <howard_wang@realsil.com.cn>
---
 drivers/net/r8169/base/rtl8168fp.c     | 1 +
 drivers/net/r8169/base/rtl8168fp.h     | 1 +
 drivers/net/r8169/base/rtl8168fp_mcu.c | 6 ++++++
 3 files changed, 8 insertions(+)

diff --git a/drivers/net/r8169/base/rtl8168fp.c b/drivers/net/r8169/base/rtl8168fp.c
index b8a058bbd9..9aa3cabeb8 100644
--- a/drivers/net/r8169/base/rtl8168fp.c
+++ b/drivers/net/r8169/base/rtl8168fp.c
@@ -192,4 +192,5 @@ const struct rtl_hw_ops rtl8168fp_ops = {
 	.hw_ephy_config    = hw_ephy_config_8168fp,
 	.hw_phy_config     = hw_phy_config_8168fp,
 	.hw_mac_mcu_config = hw_mac_mcu_config_8168fp,
+	.hw_phy_mcu_config = hw_phy_mcu_config_8168fp,
 };
diff --git a/drivers/net/r8169/base/rtl8168fp.h b/drivers/net/r8169/base/rtl8168fp.h
index 4613fe9a98..194f14af4e 100644
--- a/drivers/net/r8169/base/rtl8168fp.h
+++ b/drivers/net/r8169/base/rtl8168fp.h
@@ -10,5 +10,6 @@
 extern const struct rtl_hw_ops rtl8168fp_ops;
 
 void hw_mac_mcu_config_8168fp(struct rtl_hw *hw);
+void hw_phy_mcu_config_8168fp(struct rtl_hw *hw __rte_unused);
 
 #endif
diff --git a/drivers/net/r8169/base/rtl8168fp_mcu.c b/drivers/net/r8169/base/rtl8168fp_mcu.c
index 839dcfde61..7757e5f448 100644
--- a/drivers/net/r8169/base/rtl8168fp_mcu.c
+++ b/drivers/net/r8169/base/rtl8168fp_mcu.c
@@ -268,3 +268,9 @@ hw_mac_mcu_config_8168fp(struct rtl_hw *hw)
 		break;
 	}
 }
+
+void
+hw_phy_mcu_config_8168fp(struct rtl_hw *hw __rte_unused)
+{
+	/* Do nothing */
+}
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v4 02/13] net/r8169: optimize Rx descriptor fetch number
  2026-02-13  3:20 [PATCH v4 00/13] net/r8169: driver updates and new hardware support Howard Wang
  2026-02-13  3:20 ` [PATCH v4 01/13] net/r8169: fix crash in RTL8168FP init Howard Wang
@ 2026-02-13  3:20 ` Howard Wang
  2026-02-13  3:20 ` [PATCH v4 03/13] net/r8169: add support for RTL8168KD Howard Wang
                   ` (11 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: Howard Wang @ 2026-02-13  3:20 UTC (permalink / raw)
  To: dev; +Cc: pro_nic_dpdk, Howard Wang

Update the Rx descriptor fetch number to optimize Rx performance for
RTL8126 and RTL8127.

This parameter controls the number of Rx descriptors fetched in a
single batch. Based on hardware characteristics, the values are tuned
as follows:
- RTL8126: 20
- RTL8127: 12

Signed-off-by: Howard Wang <howard_wang@realsil.com.cn>
---
 drivers/net/r8169/base/rtl8126a.c | 4 ++--
 drivers/net/r8169/base/rtl8127.c  | 2 +-
 drivers/net/r8169/r8169_compat.h  | 2 ++
 3 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/net/r8169/base/rtl8126a.c b/drivers/net/r8169/base/rtl8126a.c
index 047ef83587..58b1cc2664 100644
--- a/drivers/net/r8169/base/rtl8126a.c
+++ b/drivers/net/r8169/base/rtl8126a.c
@@ -14,12 +14,12 @@ hw_init_rxcfg_8126a(struct rtl_hw *hw)
 {
 	switch (hw->mcfg) {
 	case CFG_METHOD_69:
-		RTL_W32(hw, RxConfig, Rx_Fetch_Number_8 | RxCfg_pause_slot_en |
+		RTL_W32(hw, RxConfig, Rx_Fetch_Number_20 | RxCfg_pause_slot_en |
 			(RX_DMA_BURST_512 << RxCfgDMAShift));
 		break;
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
-		RTL_W32(hw, RxConfig, Rx_Fetch_Number_8 | Rx_Close_Multiple |
+		RTL_W32(hw, RxConfig, Rx_Fetch_Number_20 | Rx_Close_Multiple |
 			RxCfg_pause_slot_en | (RX_DMA_BURST_512 << RxCfgDMAShift));
 		break;
 	}
diff --git a/drivers/net/r8169/base/rtl8127.c b/drivers/net/r8169/base/rtl8127.c
index 9e79255e3c..26c2cfd25b 100644
--- a/drivers/net/r8169/base/rtl8127.c
+++ b/drivers/net/r8169/base/rtl8127.c
@@ -14,7 +14,7 @@ hw_init_rxcfg_8127(struct rtl_hw *hw)
 {
 	switch (hw->mcfg) {
 	case CFG_METHOD_91:
-		RTL_W32(hw, RxConfig, Rx_Fetch_Number_8 | Rx_Close_Multiple |
+		RTL_W32(hw, RxConfig, Rx_Fetch_Number_12 | Rx_Close_Multiple |
 			RxCfg_pause_slot_en | (RX_DMA_BURST_512 << RxCfgDMAShift));
 		break;
 	}
diff --git a/drivers/net/r8169/r8169_compat.h b/drivers/net/r8169/r8169_compat.h
index 9163c7f59f..ab6a984a54 100644
--- a/drivers/net/r8169/r8169_compat.h
+++ b/drivers/net/r8169/r8169_compat.h
@@ -563,6 +563,8 @@ enum RTL_chipset_name {
 #define TX_DMA_BURST_16     0
 #define InterFrameGap       0x03    /* 3 means InterFrameGap = the shortest one */
 #define Rx_Fetch_Number_8  (1 << 30)
+#define Rx_Fetch_Number_12  (BIT_30 | BIT_29)
+#define Rx_Fetch_Number_20  (BIT_31 | BIT_29)
 #define Rx_Close_Multiple  (1 << 21)
 #define RxEarly_off_V2	   (1 << 11)
 #define Rx_Single_fetch_V2 (1 << 14)
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v4 03/13] net/r8169: add support for RTL8168KD
  2026-02-13  3:20 [PATCH v4 00/13] net/r8169: driver updates and new hardware support Howard Wang
  2026-02-13  3:20 ` [PATCH v4 01/13] net/r8169: fix crash in RTL8168FP init Howard Wang
  2026-02-13  3:20 ` [PATCH v4 02/13] net/r8169: optimize Rx descriptor fetch number Howard Wang
@ 2026-02-13  3:20 ` Howard Wang
  2026-02-13  3:20 ` [PATCH v4 04/13] net/r8169: update hardware configurations for 8127 Howard Wang
                   ` (10 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: Howard Wang @ 2026-02-13  3:20 UTC (permalink / raw)
  To: dev; +Cc: pro_nic_dpdk, Howard Wang

This chip supports network speeds up to 1Gbps.

Signed-off-by: Howard Wang <howard_wang@realsil.com.cn>
---
 drivers/net/r8169/base/rtl8125d.c     |  15 +++-
 drivers/net/r8169/base/rtl8125d_mcu.c | 112 +++++++++++++++++++++++++-
 drivers/net/r8169/base/rtl8125d_mcu.h |   1 +
 drivers/net/r8169/r8169_compat.h      |   3 +-
 drivers/net/r8169/r8169_hw.c          |  64 ++++++++-------
 drivers/net/r8169/r8169_phy.c         |  18 ++---
 6 files changed, 168 insertions(+), 45 deletions(-)

diff --git a/drivers/net/r8169/base/rtl8125d.c b/drivers/net/r8169/base/rtl8125d.c
index 55bfdbcf21..29be122e6b 100644
--- a/drivers/net/r8169/base/rtl8125d.c
+++ b/drivers/net/r8169/base/rtl8125d.c
@@ -7,7 +7,10 @@
 #include "../r8169_phy.h"
 #include "rtl8125d_mcu.h"
 
-/* For RTL8125D, CFG_METHOD_56,57 */
+/*
+ * For RTL8125D, CFG_METHOD_56,57
+ * For RTL8168KD, CFG_METHOD_59
+ */
 
 static void
 hw_init_rxcfg_8125d(struct rtl_hw *hw)
@@ -22,6 +25,7 @@ hw_ephy_config_8125d(struct rtl_hw *hw)
 	switch (hw->mcfg) {
 	case CFG_METHOD_56:
 	case CFG_METHOD_57:
+	case CFG_METHOD_59:
 		/* Nothing to do */
 		break;
 	}
@@ -264,6 +268,7 @@ hw_phy_config_8125d(struct rtl_hw *hw)
 		rtl_hw_phy_config_8125d_1(hw);
 		break;
 	case CFG_METHOD_57:
+	case CFG_METHOD_59:
 		rtl_hw_phy_config_8125d_2(hw);
 		break;
 	}
@@ -277,10 +282,17 @@ hw_mac_mcu_config_8125d(struct rtl_hw *hw)
 
 	rtl_hw_disable_mac_mcu_bps(hw);
 
+	/* Get H/W mac mcu patch code version */
+	hw->hw_mcu_patch_code_ver = rtl_get_hw_mcu_patch_code_ver(hw);
+
 	switch (hw->mcfg) {
 	case CFG_METHOD_56:
 		rtl_set_mac_mcu_8125d_1(hw);
 		break;
+	case CFG_METHOD_57:
+	case CFG_METHOD_59:
+		rtl_set_mac_mcu_8125d_2(hw);
+		break;
 	}
 }
 
@@ -292,6 +304,7 @@ hw_phy_mcu_config_8125d(struct rtl_hw *hw)
 		rtl_set_phy_mcu_8125d_1(hw);
 		break;
 	case CFG_METHOD_57:
+	case CFG_METHOD_59:
 		rtl_set_phy_mcu_8125d_2(hw);
 		break;
 	}
diff --git a/drivers/net/r8169/base/rtl8125d_mcu.c b/drivers/net/r8169/base/rtl8125d_mcu.c
index 2f6d1df584..c99681ad33 100644
--- a/drivers/net/r8169/base/rtl8125d_mcu.c
+++ b/drivers/net/r8169/base/rtl8125d_mcu.c
@@ -7,7 +7,10 @@
 #include "../r8169_phy.h"
 #include "rtl8125d_mcu.h"
 
-/* For RTL8125D, CFG_METHOD_56,57 */
+/*
+ * For RTL8125D, CFG_METHOD_56,57
+ * For RTL8168KD, CFG_METHOD_59
+ */
 
 /* ------------------------------------MAC 8125D------------------------------------- */
 
@@ -110,6 +113,113 @@ rtl_set_mac_mcu_8125d_1(struct rtl_hw *hw)
 	rtl_mac_ocp_write(hw, 0xFC48, 0x0001);
 }
 
+void
+rtl_set_mac_mcu_8125d_2(struct rtl_hw *hw)
+{
+	u16 entry_cnt;
+	static const u16 mcu_patch_code[] = {
+		0xE010, 0xE014, 0xE016, 0xE018, 0xE01A, 0xE01C, 0xE01E, 0xE020, 0xE022,
+		0xE024, 0xE026, 0xE028, 0xE02A, 0xE02C, 0xE02E, 0xE030, 0xC104, 0xC202,
+		0xBA00, 0x2384, 0xD116, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000,
+		0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000,
+		0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000,
+		0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000,
+		0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000,
+		0xC602, 0xBE00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6938,
+		0x0A19, 0x030E, 0x0B2F
+	};
+
+	entry_cnt = ARRAY_SIZE(mcu_patch_code);
+
+	/* Get BIN mac mcu patch code version */
+	hw->bin_mcu_patch_code_ver = rtl_get_bin_mcu_patch_code_ver(mcu_patch_code,
+								    entry_cnt);
+
+	if (hw->hw_mcu_patch_code_ver != hw->bin_mcu_patch_code_ver)
+		rtl_write_mac_mcu_ram_code(hw, mcu_patch_code, entry_cnt);
+
+	rtl_mac_ocp_write(hw, 0xFC26, 0x8000);
+	rtl_mac_ocp_write(hw, 0xFC28, 0x2382);
+	rtl_mac_ocp_write(hw, 0xFC48, 0x0001);
+}
+
 /* ------------------------------------PHY 8125D--------------------------------------- */
 
 static const u16 phy_mcu_ram_code_8125d_1_1[] = {
diff --git a/drivers/net/r8169/base/rtl8125d_mcu.h b/drivers/net/r8169/base/rtl8125d_mcu.h
index 163e0e8123..82b70e5b53 100644
--- a/drivers/net/r8169/base/rtl8125d_mcu.h
+++ b/drivers/net/r8169/base/rtl8125d_mcu.h
@@ -6,6 +6,7 @@
 #define RTL8125D_MCU_H
 
 void rtl_set_mac_mcu_8125d_1(struct rtl_hw *hw);
+void rtl_set_mac_mcu_8125d_2(struct rtl_hw *hw);
 
 void rtl_set_phy_mcu_8125d_1(struct rtl_hw *hw);
 void rtl_set_phy_mcu_8125d_2(struct rtl_hw *hw);
diff --git a/drivers/net/r8169/r8169_compat.h b/drivers/net/r8169/r8169_compat.h
index ab6a984a54..d2d928cdd7 100644
--- a/drivers/net/r8169/r8169_compat.h
+++ b/drivers/net/r8169/r8169_compat.h
@@ -105,7 +105,7 @@ enum mcfg {
 	CFG_METHOD_69,
 	CFG_METHOD_70,
 	CFG_METHOD_71,
-	CFG_METHOD_91,
+	CFG_METHOD_91 = 91,
 	CFG_METHOD_MAX,
 	CFG_METHOD_DEFAULT = 0xFF
 };
@@ -525,6 +525,7 @@ enum RTL_chipset_name {
 	RTL8125BP,
 	RTL8125D,
 	RTL8125CP,
+	RTL8168KD,
 	RTL8126A,
 	RTL8168EP,
 	RTL8168FP,
diff --git a/drivers/net/r8169/r8169_hw.c b/drivers/net/r8169/r8169_hw.c
index e1521f5f9d..32c370deba 100644
--- a/drivers/net/r8169/r8169_hw.c
+++ b/drivers/net/r8169/r8169_hw.c
@@ -630,6 +630,7 @@ rtl_stop_all_request(struct rtl_hw *hw)
 	case CFG_METHOD_56:
 	case CFG_METHOD_57:
 	case CFG_METHOD_58:
+	case CFG_METHOD_59:
 	case CFG_METHOD_69:
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
@@ -687,6 +688,7 @@ rtl_wait_txrx_fifo_empty(struct rtl_hw *hw)
 	case CFG_METHOD_56:
 	case CFG_METHOD_57:
 	case CFG_METHOD_58:
+	case CFG_METHOD_59:
 	case CFG_METHOD_69:
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
@@ -924,6 +926,7 @@ rtl8125_set_rx_desc_type(struct rtl_hw *hw)
 	case CFG_METHOD_56:
 	case CFG_METHOD_57:
 	case CFG_METHOD_58:
+	case CFG_METHOD_59:
 		RTL_W8(hw, 0xD8, RTL_R8(hw, 0xD8) & ~EnableRxDescV4_0);
 		break;
 	case CFG_METHOD_69:
@@ -1044,8 +1047,11 @@ rtl8125_hw_config(struct rtl_hw *hw)
 
 	rtl_oob_mutex_lock(hw);
 
-	/* MAC_PWRDWN_CR0 */
-	rtl_mac_ocp_write(hw, 0xE0C0, 0x4000);
+	if (hw->mcfg == CFG_METHOD_56 || hw->mcfg == CFG_METHOD_57 ||
+	    hw->mcfg == CFG_METHOD_59)
+		rtl_mac_ocp_write(hw, 0xE0C0, 0x4403);
+	else
+		rtl_mac_ocp_write(hw, 0xE0C0, 0x4000);
 
 	rtl_set_mac_ocp_bit(hw, 0xE052, (BIT_6 | BIT_5));
 	rtl_clear_mac_ocp_bit(hw, 0xE052, (BIT_3 | BIT_7));
@@ -1065,10 +1071,15 @@ rtl8125_hw_config(struct rtl_hw *hw)
 	mac_ocp_data |= 0x45F;
 	rtl_mac_ocp_write(hw, 0xD430, mac_ocp_data);
 
-	if (!hw->DASH)
-		RTL_W8(hw, 0xD0, RTL_R8(hw, 0xD0) | BIT_6 | BIT_7);
-	else
-		RTL_W8(hw, 0xD0, RTL_R8(hw, 0xD0) & ~(BIT_6 | BIT_7));
+	if (hw->DASH) {
+		RTL_W8(hw, 0xD0, RTL_R8(hw, 0xD0) & ~BIT_6);
+		RTL_W8(hw, 0xF2, RTL_R8(hw, 0xF2) & ~BIT_6);
+		RTL_W8(hw, 0xD0, RTL_R8(hw, 0xD0) & ~BIT_7);
+	} else {
+		RTL_W8(hw, 0xD0, RTL_R8(hw, 0xD0) | BIT_6);
+		RTL_W8(hw, 0xF2, RTL_R8(hw, 0xF2) | BIT_6);
+		RTL_W8(hw, 0xD0, RTL_R8(hw, 0xD0) | BIT_7);
+	}
 
 	if (hw->mcfg == CFG_METHOD_48 || hw->mcfg == CFG_METHOD_49 ||
 	    hw->mcfg == CFG_METHOD_52)
@@ -1243,9 +1254,10 @@ rtl_set_hw_ops(struct rtl_hw *hw)
 	case CFG_METHOD_55:
 		hw->hw_ops = rtl8125bp_ops;
 		return 0;
-	/* 8125D */
+	/* 8125D and 8168KD */
 	case CFG_METHOD_56:
 	case CFG_METHOD_57:
+	case CFG_METHOD_59:
 		hw->hw_ops = rtl8125d_ops;
 		return 0;
 	/* 8125CP */
@@ -1538,6 +1550,9 @@ rtl_init_software_variable(struct rtl_hw *hw)
 	case CFG_METHOD_58:
 		hw->chipset_name = RTL8125CP;
 		break;
+	case CFG_METHOD_59:
+		hw->chipset_name = RTL8168KD;
+		break;
 	case CFG_METHOD_69:
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
@@ -1688,6 +1703,7 @@ rtl_init_software_variable(struct rtl_hw *hw)
 	case CFG_METHOD_56:
 	case CFG_METHOD_57:
 	case CFG_METHOD_58:
+	case CFG_METHOD_59:
 	case CFG_METHOD_69:
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
@@ -1710,6 +1726,7 @@ rtl_init_software_variable(struct rtl_hw *hw)
 	case CFG_METHOD_56:
 	case CFG_METHOD_57:
 	case CFG_METHOD_58:
+	case CFG_METHOD_59:
 	case CFG_METHOD_91:
 		hw->HwSuppTxNoCloseVer = 6;
 		break;
@@ -1801,6 +1818,7 @@ rtl_init_software_variable(struct rtl_hw *hw)
 		hw->sw_ram_code_ver = NIC_RAMCODE_VERSION_CFG_METHOD_56;
 		break;
 	case CFG_METHOD_57:
+	case CFG_METHOD_59:
 		hw->sw_ram_code_ver = NIC_RAMCODE_VERSION_CFG_METHOD_57;
 		break;
 	case CFG_METHOD_58:
@@ -1859,6 +1877,7 @@ rtl_init_software_variable(struct rtl_hw *hw)
 	case CFG_METHOD_56:
 	case CFG_METHOD_57:
 	case CFG_METHOD_58:
+	case CFG_METHOD_59:
 	case CFG_METHOD_91:
 		hw->HwSuppIntMitiVer = 6;
 		break;
@@ -1902,37 +1921,18 @@ rtl_exit_realwow(struct rtl_hw *hw)
 	u32 csi_tmp;
 
 	/* Disable realwow function */
-	switch (hw->mcfg) {
-	case CFG_METHOD_21:
-	case CFG_METHOD_22:
+	if (rtl_is_8125(hw)) {
+		rtl_mac_ocp_write(hw, 0xC0BC, 0x00FF);
+	} else if (hw->mcfg == CFG_METHOD_21 || hw->mcfg == CFG_METHOD_22) {
 		RTL_W32(hw, MACOCP, 0x605E0000);
 		RTL_W32(hw, MACOCP, (0xE05E << 16) |
 				    (RTL_R32(hw, MACOCP) & 0xFFFE));
 		RTL_W32(hw, MACOCP, 0xE9720000);
 		RTL_W32(hw, MACOCP, 0xF2140010);
-		break;
-	case CFG_METHOD_26:
+	} else if (hw->mcfg == CFG_METHOD_26) {
 		RTL_W32(hw, MACOCP, 0xE05E00FF);
 		RTL_W32(hw, MACOCP, 0xE9720000);
 		rtl_mac_ocp_write(hw, 0xE428, 0x0010);
-		break;
-	case CFG_METHOD_48:
-	case CFG_METHOD_49:
-	case CFG_METHOD_50:
-	case CFG_METHOD_51:
-	case CFG_METHOD_52:
-	case CFG_METHOD_53:
-	case CFG_METHOD_54:
-	case CFG_METHOD_55:
-	case CFG_METHOD_56:
-	case CFG_METHOD_57:
-	case CFG_METHOD_58:
-	case CFG_METHOD_69:
-	case CFG_METHOD_70:
-	case CFG_METHOD_71:
-	case CFG_METHOD_91:
-		rtl_mac_ocp_write(hw, 0xC0BC, 0x00FF);
-		break;
 	}
 
 	switch (hw->mcfg) {
@@ -2059,7 +2059,7 @@ rtl_disable_ocp_phy_power_saving(struct rtl_hw *hw)
 			rtl_clear_phy_mcu_patch_request(hw);
 		}
 	} else if (hw->mcfg == CFG_METHOD_48 || hw->mcfg == CFG_METHOD_49 ||
-		   hw->mcfg == CFG_METHOD_52){
+		   hw->mcfg == CFG_METHOD_52) {
 		val = rtl_mdio_direct_read_phy_ocp(hw, 0xC416);
 		if (val != 0x0050) {
 			rtl_set_phy_mcu_patch_request(hw);
@@ -2400,6 +2400,8 @@ rtl_get_mac_version(struct rtl_hw *hw, struct rte_pci_device *pci_dev)
 			hw->mcfg = CFG_METHOD_52;
 		else if (hw->mcfg == CFG_METHOD_51)
 			hw->mcfg = CFG_METHOD_53;
+		else if (hw->mcfg == CFG_METHOD_57)
+			hw->mcfg = CFG_METHOD_59;
 	}
 }
 
diff --git a/drivers/net/r8169/r8169_phy.c b/drivers/net/r8169/r8169_phy.c
index 50c24d1504..1239319da5 100644
--- a/drivers/net/r8169/r8169_phy.c
+++ b/drivers/net/r8169/r8169_phy.c
@@ -558,10 +558,6 @@ rtl_powerdown_pll(struct rtl_hw *hw)
 	if (hw->mcfg >= CFG_METHOD_21 && hw->mcfg <= CFG_METHOD_36) {
 		RTL_W8(hw, 0xD0, RTL_R8(hw, 0xD0) & ~BIT_6);
 		RTL_W8(hw, 0xF2, RTL_R8(hw, 0xF2) & ~BIT_6);
-	} else if ((hw->mcfg >= CFG_METHOD_48 && hw->mcfg <= CFG_METHOD_58) ||
-		   (hw->mcfg >= CFG_METHOD_69 && hw->mcfg <= CFG_METHOD_71) ||
-		   hw->mcfg == CFG_METHOD_91) {
-		RTL_W8(hw, 0xF2, RTL_R8(hw, 0xF2) & ~BIT_6);
 	}
 }
 
@@ -893,17 +889,14 @@ rtl_is_adv_eee_enabled(struct rtl_hw *hw)
 {
 	bool enabled = false;
 
-	if (hw->mcfg >= CFG_METHOD_25 && hw->mcfg <= CFG_METHOD_36) {
+	if (rtl_is_8125(hw)) {
+		if (rtl_mdio_direct_read_phy_ocp(hw, 0xA430) & BIT_15)
+			enabled = true;
+	} else if (hw->mcfg >= CFG_METHOD_25 && hw->mcfg <= CFG_METHOD_36) {
 		rtl_mdio_write(hw, 0x1F, 0x0A43);
 		if (rtl_mdio_read(hw, 0x10) & BIT_15)
 			enabled = true;
 		rtl_mdio_write(hw, 0x1F, 0x0000);
-	} else if ((hw->mcfg >= CFG_METHOD_48 && hw->mcfg <= CFG_METHOD_55) ||
-		   hw->mcfg == CFG_METHOD_58 || hw->mcfg == CFG_METHOD_69 ||
-		   hw->mcfg == CFG_METHOD_70 || hw->mcfg == CFG_METHOD_71 ||
-		   hw->mcfg == CFG_METHOD_91){
-		if (rtl_mdio_direct_read_phy_ocp(hw, 0xA430) & BIT_15)
-			enabled = true;
 	}
 
 	return enabled;
@@ -982,6 +975,7 @@ _rtl_disable_adv_eee(struct rtl_hw *hw)
 	case CFG_METHOD_56:
 	case CFG_METHOD_57:
 	case CFG_METHOD_58:
+	case CFG_METHOD_59:
 	case CFG_METHOD_69:
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
@@ -1068,6 +1062,7 @@ rtl_disable_eee(struct rtl_hw *hw)
 	case CFG_METHOD_56:
 	case CFG_METHOD_57:
 	case CFG_METHOD_58:
+	case CFG_METHOD_59:
 		rtl_clear_mac_ocp_bit(hw, 0xE040, (BIT_1 | BIT_0));
 
 		rtl_set_eth_phy_ocp_bit(hw, 0xA432, BIT_4);
@@ -1232,6 +1227,7 @@ rtl_set_speed_xmii(struct rtl_hw *hw, u8 autoneg, u32 speed, u8 duplex, u64 adv)
 	case CFG_METHOD_56:
 	case CFG_METHOD_57:
 	case CFG_METHOD_58:
+	case CFG_METHOD_59:
 		mask |= BIT_0;
 		rtl_clear_eth_phy_ocp_bit(hw, 0xA428, BIT_9);
 		rtl_clear_eth_phy_ocp_bit(hw, 0xA5EA, mask);
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v4 04/13] net/r8169: update hardware configurations for 8127
  2026-02-13  3:20 [PATCH v4 00/13] net/r8169: driver updates and new hardware support Howard Wang
                   ` (2 preceding siblings ...)
  2026-02-13  3:20 ` [PATCH v4 03/13] net/r8169: add support for RTL8168KD Howard Wang
@ 2026-02-13  3:20 ` Howard Wang
  2026-02-13  3:20 ` [PATCH v4 05/13] net/r8169: adjust jumbo frame size limit for non-1G cards Howard Wang
                   ` (9 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: Howard Wang @ 2026-02-13  3:20 UTC (permalink / raw)
  To: dev; +Cc: pro_nic_dpdk, Howard Wang

Update hw configurations as below:
enable RTL8127ATF flow control,
phy config,
mac mcu patch,
phy mcu patch.

Signed-off-by: Howard Wang <howard_wang@realsil.com.cn>
---
 drivers/net/r8169/base/rtl8127.c     |   13 +-
 drivers/net/r8169/base/rtl8127_mcu.c | 1332 +++++++++++++++++++-------
 drivers/net/r8169/r8169_fiber.c      |   11 +
 drivers/net/r8169/r8169_hw.h         |    2 +-
 4 files changed, 1007 insertions(+), 351 deletions(-)

diff --git a/drivers/net/r8169/base/rtl8127.c b/drivers/net/r8169/base/rtl8127.c
index 26c2cfd25b..3ed7b18d84 100644
--- a/drivers/net/r8169/base/rtl8127.c
+++ b/drivers/net/r8169/base/rtl8127.c
@@ -195,6 +195,15 @@ rtl_hw_phy_config_8127a_1(struct rtl_hw *hw)
 	rtl_mdio_direct_write_phy_ocp(hw, 0xB87C, 0x82CE);
 	rtl_clear_and_set_eth_phy_ocp_bit(hw, 0xB87E, 0xF000, 0x4000);
 
+	rtl_mdio_direct_write_phy_ocp(hw, 0xB87C, 0x83A5);
+	rtl_clear_and_set_eth_phy_ocp_bit(hw, 0xB87E, 0xFF00, 0x0400);
+	rtl_mdio_direct_write_phy_ocp(hw, 0xB87C, 0x83A6);
+	rtl_clear_and_set_eth_phy_ocp_bit(hw, 0xB87E, 0xFF00, 0x0400);
+	rtl_mdio_direct_write_phy_ocp(hw, 0xB87C, 0x83A7);
+	rtl_clear_and_set_eth_phy_ocp_bit(hw, 0xB87E, 0xFF00, 0x0400);
+	rtl_mdio_direct_write_phy_ocp(hw, 0xB87C, 0x83A8);
+	rtl_clear_and_set_eth_phy_ocp_bit(hw, 0xB87E, 0xFF00, 0x0400);
+
 	rtl_mdio_direct_write_phy_ocp(hw, 0xB87C, 0x84AC);
 	rtl_mdio_direct_write_phy_ocp(hw, 0xB87E, 0x0000);
 	rtl_mdio_direct_write_phy_ocp(hw, 0xB87C, 0x84AE);
@@ -207,7 +216,7 @@ rtl_hw_phy_config_8127a_1(struct rtl_hw *hw)
 	rtl_mdio_direct_write_phy_ocp(hw, 0xB87C, 0x8FFC);
 	rtl_mdio_direct_write_phy_ocp(hw, 0xB87E, 0x6008);
 	rtl_mdio_direct_write_phy_ocp(hw, 0xB87C, 0x8FFE);
-	rtl_mdio_direct_write_phy_ocp(hw, 0xB87E, 0xF450);
+	rtl_mdio_direct_write_phy_ocp(hw, 0xB87E, 0xF4FF);
 
 	rtl_mdio_direct_write_phy_ocp(hw, 0xB87C, 0x8015);
 	rtl_set_eth_phy_ocp_bit(hw, 0xB87E, BIT_9);
@@ -336,6 +345,8 @@ rtl_hw_phy_config_8127a_1(struct rtl_hw *hw)
 	rtl_clear_and_set_eth_phy_ocp_bit(hw, 0xA438, 0xFF00, 0x1600);
 
 	rtl_set_eth_phy_ocp_bit(hw, 0xA430, BIT_1 | BIT_0);
+	rtl_set_eth_phy_ocp_bit(hw, 0xA442, BIT_7);
+	rtl_clear_eth_phy_ocp_bit(hw, 0xA430, BIT_12);
 }
 
 static void
diff --git a/drivers/net/r8169/base/rtl8127_mcu.c b/drivers/net/r8169/base/rtl8127_mcu.c
index facbae8132..79e518a91f 100644
--- a/drivers/net/r8169/base/rtl8127_mcu.c
+++ b/drivers/net/r8169/base/rtl8127_mcu.c
@@ -17,7 +17,7 @@ rtl_set_mac_mcu_8127a_1(struct rtl_hw *hw)
 	u16 entry_cnt;
 	static const u16 mcu_patch_code[] =  {
 		0xE010, 0xE023, 0xE036, 0xE049, 0xE05C, 0xE075, 0xE0B1, 0xE117, 0xE11B,
-		0xE11D, 0xE11F, 0xE121, 0xE123, 0xE125, 0xE127, 0xE129, 0x7020, 0xB405,
+		0xE1F7, 0xE1F9, 0xE297, 0xE299, 0xE29B, 0xE29D, 0xE29F, 0x7020, 0xB405,
 		0xB404, 0xC50F, 0x74A0, 0xC50E, 0x4025, 0xF005, 0x4850, 0x4025, 0xF002,
 		0xE002, 0x4809, 0xB004, 0xB005, 0xC502, 0xBD00, 0x1522, 0xD006, 0x0004,
 		0x7760, 0xB405, 0xB404, 0xC50F, 0x74A0, 0xC50E, 0x4025, 0xF005, 0x4850,
@@ -48,10 +48,51 @@ rtl_set_mac_mcu_8127a_1(struct rtl_hw *hw)
 		0xB000, 0xB001, 0xB002, 0xB003, 0xB004, 0xB005, 0xB006, 0xB007, 0x2125,
 		0xC102, 0xB900, 0x1A6C, 0xD410, 0xC000, 0xE86C, 0xB600, 0xB800, 0xB40A,
 		0xE024, 0x5A00, 0x5A81, 0x0073, 0x5A80, 0x0042, 0x0001, 0xC104, 0xC202,
-		0xBA00, 0x1A2E, 0xC896, 0xC302, 0xBB00, 0x0000, 0xC002, 0xB800, 0x0000,
-		0xC002, 0xB800, 0x0000, 0xC502, 0xBD00, 0x0000, 0xC102, 0xB900, 0x0000,
-		0xC102, 0xB900, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000,
-		0x6961, 0x0019, 0x050C, 0x140C
+		0xBA00, 0x1A2E, 0xC896, 0xB400, 0xB401, 0xB402, 0xB403, 0xB404, 0xB405,
+		0xB406, 0xB407, 0xC11F, 0xC21F, 0x9A24, 0xC21B, 0x9A26, 0xE83B, 0x7320,
+		0x7422, 0xC010, 0x7200, 0x4822, 0x9A00, 0x7218, 0x4822, 0x9A18, 0x7206,
+		0x4822, 0x9A06, 0x720C, 0x49C0, 0xF00D, 0x4822, 0x9A0C, 0xE00C, 0xDC46,
+		0xD40C, 0xE008, 0xDEAD, 0xDE20, 0x0012, 0x3D02, 0xE8E0, 0x0168, 0x48A2,
+		0x9A0C, 0x49CF, 0xF058, 0x1301, 0xF00A, 0x1302, 0xF00D, 0x1303, 0xF01B,
+		0x1304, 0xF01F, 0x1305, 0xF024, 0xE043, 0xE858, 0xC7EC, 0xE863, 0xE893,
+		0xE048, 0xE853, 0xC7E7, 0x4878, 0xE85D, 0xE88D, 0xE042, 0xE8E0, 0xF180,
+		0xBD02, 0x8FFE, 0xC000, 0xC1DF, 0x6227, 0x49A6, 0xF1FD, 0xFF80, 0xE843,
+		0xC7D7, 0x4879, 0xE84D, 0xE87D, 0xE032, 0xE83D, 0xC7D1, 0x4878, 0x4879,
+		0xE846, 0xE876, 0xE02B, 0xC5C8, 0x76A0, 0x4868, 0x9EA0, 0xC5C3, 0x71A0,
+		0xC5E7, 0x70A0, 0xC2E1, 0x9940, 0x9842, 0xC1DF, 0x9944, 0xC1DE, 0x9946,
+		0xEFDF, 0x71A2, 0x70A4, 0xC2D7, 0x9940, 0x9842, 0xC16C, 0x9944, 0xC1D4,
+		0x9946, 0xEFD5, 0xC5AE, 0x76A0, 0x48E8, 0x9EA0, 0xE856, 0xE00B, 0xC6A9,
+		0xC2C8, 0x9E40, 0x9E42, 0xC1C6, 0x9944, 0xC1C5, 0x9946, 0xEFC6, 0xE84B,
+		0xB007, 0xB006, 0xB005, 0xB004, 0xB003, 0xB002, 0xB001, 0xB000, 0x1100,
+		0xC202, 0xBA00, 0x1A86, 0xC694, 0xE807, 0x1D00, 0x9DC0, 0xC5B2, 0x9DC2,
+		0xE802, 0xFF80, 0xC18C, 0x7222, 0x49AE, 0xF1FD, 0xFF80, 0xC687, 0x9FC2,
+		0xEFF9, 0x70C0, 0x0702, 0x9FC2, 0xEFF5, 0x71C0, 0xC235, 0x9940, 0x9842,
+		0xC19C, 0x9944, 0xC12E, 0x9946, 0xEF9C, 0x0701, 0x9FC2, 0xEFE9, 0x70C0,
+		0x0704, 0x9FC2, 0xEFE5, 0x71C0, 0xC225, 0x9940, 0x9842, 0xC123, 0x9944,
+		0xC11E, 0x9946, 0xEF8C, 0x071A, 0x9FC2, 0xEFD9, 0x70C0, 0x0728, 0x9FC2,
+		0xEFD5, 0x71C0, 0xC215, 0x9940, 0x9842, 0xC114, 0x9944, 0xC10E, 0x9946,
+		0xEF7C, 0xFF80, 0x48CF, 0xC20B, 0x9B40, 0x9C42, 0xC107, 0x9944, 0xC104,
+		0x9946, 0xEF72, 0xFF80, 0xBD02, 0xF168, 0xE8E0, 0xF184, 0xF188, 0xC502,
+		0xBD00, 0x0000, 0xB400, 0xB401, 0xB402, 0xB403, 0xC079, 0xC377, 0x7160,
+		0x9906, 0xC376, 0xE87C, 0xC073, 0x9900, 0x1906, 0xC371, 0xE884, 0xC170,
+		0xC370, 0xE881, 0x1908, 0xC36B, 0xE87E, 0xC36C, 0xE86F, 0x1A88, 0x44CA,
+		0xE879, 0xC367, 0x4833, 0xE869, 0x4816, 0xE874, 0xC362, 0x4838, 0xE864,
+		0x1A88, 0x44CA, 0xE86E, 0xC35C, 0x4838, 0x4833, 0xE85D, 0x4816, 0xE868,
+		0xC357, 0xE859, 0x1A88, 0x44CA, 0xE863, 0xC352, 0x4833, 0xE853, 0x4816,
+		0xE85E, 0xC34D, 0x4838, 0xE84E, 0x1A88, 0x44CA, 0xE858, 0xC347, 0x4838,
+		0x4833, 0xE847, 0x4816, 0xE852, 0xC342, 0xE843, 0x1A58, 0x44CA, 0xE84D,
+		0xC33D, 0x4833, 0xE83D, 0x4816, 0xE848, 0xC338, 0x4838, 0xE838, 0x1A58,
+		0x44CA, 0xE842, 0xC332, 0x4838, 0x4833, 0xE831, 0x4816, 0xE83C, 0xC32D,
+		0xE82D, 0x1A58, 0x44CA, 0xE837, 0xC328, 0x4833, 0xE827, 0x4816, 0xE832,
+		0xC323, 0x4838, 0xE822, 0x1A58, 0x44CA, 0xE82C, 0xC31D, 0x4838, 0x4833,
+		0xE81B, 0x4816, 0xE826, 0xC010, 0x7100, 0xC30F, 0xE822, 0xC00C, 0x7106,
+		0xC309, 0x9960, 0xB003, 0xB002, 0xB001, 0xB000, 0xC402, 0xBC00, 0x15B0,
+		0xDE20, 0xDD26, 0x0FFE, 0x0000, 0x6F00, 0x8086, 0x8486, 0x8886, 0x8C86,
+		0xC0F7, 0x7202, 0x49AE, 0xF1FD, 0x44D3, 0x4413, 0x48AF, 0x9A02, 0x7202,
+		0x49AE, 0xF1FE, 0x7100, 0xFF80, 0xC0EA, 0x7202, 0x49AE, 0xF1FD, 0x9900,
+		0x44D3, 0x4413, 0x482F, 0x9A02, 0x7202, 0x49AE, 0xF1FE, 0xFF80, 0xC502,
+		0xBD00, 0x0000, 0xC102, 0xB900, 0x0000, 0xC102, 0xB900, 0x0000, 0xC602,
+		0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0x6961, 0x0019, 0x0A1E, 0x0F2A
 	};
 
 	entry_cnt = ARRAY_SIZE(mcu_patch_code);
@@ -73,8 +114,9 @@ rtl_set_mac_mcu_8127a_1(struct rtl_hw *hw)
 	rtl_mac_ocp_write(hw, 0xFC32, 0x0166);
 	rtl_mac_ocp_write(hw, 0xFC34, 0x1A6A);
 	rtl_mac_ocp_write(hw, 0xFC36, 0x1A2C);
+	rtl_mac_ocp_write(hw, 0xFC3C, 0x1598);
 
-	rtl_mac_ocp_write(hw, 0xFC48, 0x00FF);
+	rtl_mac_ocp_write(hw, 0xFC48, 0x04FF);
 }
 
 /* ------------------------------------PHY 8127------------------------------------- */
@@ -124,97 +166,649 @@ static const u16 phy_mcu_ram_code_8127a_1[] = {
 	0xa436, 0xA082, 0xa438, 0x0117, 0xa436, 0xA080, 0xa438, 0x0027,
 	0xa436, 0xA090, 0xa438, 0x00ff, 0xa436, 0xA016, 0xa438, 0x0020,
 	0xa436, 0xA012, 0xa438, 0x0000, 0xa436, 0xA014, 0xa438, 0x1800,
-	0xa438, 0x8010, 0xa438, 0x1800, 0xa438, 0x801d, 0xa438, 0x1800,
-	0xa438, 0x803b, 0xa438, 0x1800, 0xa438, 0x8087, 0xa438, 0x1800,
-	0xa438, 0x808e, 0xa438, 0x1800, 0xa438, 0x809d, 0xa438, 0x1800,
-	0xa438, 0x80b7, 0xa438, 0x1800, 0xa438, 0x80c4, 0xa438, 0xd1bc,
+	0xa438, 0x8010, 0xa438, 0x1800, 0xa438, 0x8663, 0xa438, 0x1800,
+	0xa438, 0x8681, 0xa438, 0x1800, 0xa438, 0x86cd, 0xa438, 0x1800,
+	0xa438, 0x86d4, 0xa438, 0x1800, 0xa438, 0x86e3, 0xa438, 0x1800,
+	0xa438, 0x8944, 0xa438, 0x1800, 0xa438, 0x8951, 0xa438, 0xd1bc,
 	0xa438, 0xd040, 0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0xd700,
-	0xa438, 0x5fba, 0xa438, 0xd700, 0xa438, 0x273d, 0xa438, 0x801b,
-	0xa438, 0x1800, 0xa438, 0x07d1, 0xa438, 0x1800, 0xa438, 0x080e,
-	0xa438, 0xd700, 0xa438, 0x37c9, 0xa438, 0x8032, 0xa438, 0x33a9,
-	0xa438, 0x802a, 0xa438, 0xd705, 0xa438, 0x4084, 0xa438, 0xd1f4,
-	0xa438, 0xd048, 0xa438, 0xf013, 0xa438, 0xd1b7, 0xa438, 0xd04b,
-	0xa438, 0xf010, 0xa438, 0xd705, 0xa438, 0x4084, 0xa438, 0xd1f4,
-	0xa438, 0xd048, 0xa438, 0xf00b, 0xa438, 0xd1b7, 0xa438, 0xd04b,
-	0xa438, 0xf008, 0xa438, 0xd705, 0xa438, 0x4084, 0xa438, 0xd1f4,
-	0xa438, 0xd048, 0xa438, 0xf003, 0xa438, 0xd1b7, 0xa438, 0xd04b,
-	0xa438, 0x1800, 0xa438, 0x14cc, 0xa438, 0xd700, 0xa438, 0x2b59,
-	0xa438, 0x803f, 0xa438, 0xf003, 0xa438, 0x1800, 0xa438, 0x118f,
-	0xa438, 0x6060, 0xa438, 0x1800, 0xa438, 0x1167, 0xa438, 0xd700,
-	0xa438, 0x60c7, 0xa438, 0xd704, 0xa438, 0x609f, 0xa438, 0xd705,
-	0xa438, 0x4043, 0xa438, 0xf003, 0xa438, 0x1800, 0xa438, 0x1150,
-	0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x8702, 0xa438, 0x8011,
-	0xa438, 0x9503, 0xa438, 0x800a, 0xa438, 0x81a0, 0xa438, 0x8302,
-	0xa438, 0x8480, 0xa438, 0x8686, 0xa438, 0xcde0, 0xa438, 0xd1ff,
-	0xa438, 0xd049, 0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0xd700,
-	0xa438, 0x5fba, 0xa438, 0xd705, 0xa438, 0x417e, 0xa438, 0x0c03,
-	0xa438, 0x1502, 0xa438, 0xa011, 0xa438, 0x9503, 0xa438, 0xd1c8,
-	0xa438, 0xd045, 0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0xd700,
-	0xa438, 0x5fba, 0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0xa702,
-	0xa438, 0x9503, 0xa438, 0xa00a, 0xa438, 0xa1a0, 0xa438, 0xa480,
-	0xa438, 0xa686, 0xa438, 0xd705, 0xa438, 0x605e, 0xa438, 0xa302,
-	0xa438, 0x9503, 0xa438, 0xd700, 0xa438, 0x37c9, 0xa438, 0x8083,
-	0xa438, 0x33a9, 0xa438, 0x807f, 0xa438, 0xd178, 0xa438, 0xd04b,
-	0xa438, 0x1800, 0xa438, 0x115d, 0xa438, 0xd1c8, 0xa438, 0xd04b,
-	0xa438, 0x1800, 0xa438, 0x115d, 0xa438, 0xd1e6, 0xa438, 0xd04b,
-	0xa438, 0x1800, 0xa438, 0x115d, 0xa438, 0xd71f, 0xa438, 0x6080,
-	0xa438, 0xd704, 0xa438, 0x1800, 0xa438, 0x1bc0, 0xa438, 0x1800,
-	0xa438, 0x1bc4, 0xa438, 0x4134, 0xa438, 0xd115, 0xa438, 0xd04f,
-	0xa438, 0x1000, 0xa438, 0x1d0b, 0xa438, 0x1000, 0xa438, 0x80ad,
-	0xa438, 0x1800, 0xa438, 0x01f2, 0xa438, 0x1000, 0xa438, 0x1d0b,
-	0xa438, 0x1000, 0xa438, 0x80ad, 0xa438, 0x1800, 0xa438, 0x01f9,
-	0xa438, 0x2969, 0xa438, 0x80a3, 0xa438, 0xd700, 0xa438, 0x606b,
-	0xa438, 0xd701, 0xa438, 0x60b4, 0xa438, 0x1000, 0xa438, 0x80ad,
-	0xa438, 0x1800, 0xa438, 0x0551, 0xa438, 0xd196, 0xa438, 0xd04d,
-	0xa438, 0x1000, 0xa438, 0x80ad, 0xa438, 0x1800, 0xa438, 0x054d,
-	0xa438, 0xd208, 0xa438, 0x0c09, 0xa438, 0x1301, 0xa438, 0x1000,
-	0xa438, 0x1cd2, 0xa438, 0xd701, 0xa438, 0x5fa3, 0xa438, 0xb302,
-	0xa438, 0xd200, 0xa438, 0x0800, 0xa438, 0xd705, 0xa438, 0x6064,
-	0xa438, 0x1800, 0xa438, 0x140a, 0xa438, 0x8810, 0xa438, 0xd199,
-	0xa438, 0xd04b, 0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0xd700,
-	0xa438, 0x5fba, 0xa438, 0x1800, 0xa438, 0x140a, 0xa436, 0xA10E,
-	0xa438, 0xffff, 0xa436, 0xA10C, 0xa438, 0x1352, 0xa436, 0xA10A,
-	0xa438, 0x0545, 0xa436, 0xA108, 0xa438, 0x01ed, 0xa436, 0xA106,
-	0xa438, 0x1bbf, 0xa436, 0xA104, 0xa438, 0x114b, 0xa436, 0xA102,
-	0xa438, 0x14bf, 0xa436, 0xA100, 0xa438, 0x07ce, 0xa436, 0xA110,
-	0xa438, 0x007f, 0xa436, 0xA016, 0xa438, 0x0020, 0xa436, 0xA012,
-	0xa438, 0x1ff8, 0xa436, 0xA014, 0xa438, 0xd1ce, 0xa438, 0x0000,
+	0xa438, 0x5fba, 0xa438, 0xd700, 0xa438, 0x273d, 0xa438, 0x8056,
+	0xa438, 0xd700, 0xa438, 0x37c9, 0xa438, 0x802e, 0xa438, 0x33a9,
+	0xa438, 0x8026, 0xa438, 0xd702, 0xa438, 0x6099, 0xa438, 0xd1b7,
+	0xa438, 0xd05c, 0xa438, 0xf013, 0xa438, 0xd1b7, 0xa438, 0xd05c,
+	0xa438, 0xf010, 0xa438, 0xd702, 0xa438, 0x6099, 0xa438, 0xd1b7,
+	0xa438, 0xd05c, 0xa438, 0xf00b, 0xa438, 0xd1b7, 0xa438, 0xd05c,
+	0xa438, 0xf008, 0xa438, 0xd702, 0xa438, 0x6099, 0xa438, 0xd199,
+	0xa438, 0xd05d, 0xa438, 0xf003, 0xa438, 0xd199, 0xa438, 0xd05d,
+	0xa438, 0xd700, 0xa438, 0x37c9, 0xa438, 0x804a, 0xa438, 0x33a9,
+	0xa438, 0x8042, 0xa438, 0xd702, 0xa438, 0x6099, 0xa438, 0xd1bf,
+	0xa438, 0xd06d, 0xa438, 0xf013, 0xa438, 0xd1e5, 0xa438, 0xd06d,
+	0xa438, 0xf010, 0xa438, 0xd702, 0xa438, 0x6099, 0xa438, 0xd1ec,
+	0xa438, 0xd06d, 0xa438, 0xf00b, 0xa438, 0xd1bf, 0xa438, 0xd06d,
+	0xa438, 0xf008, 0xa438, 0xd702, 0xa438, 0x6099, 0xa438, 0xd199,
+	0xa438, 0xd06e, 0xa438, 0xf003, 0xa438, 0xd199, 0xa438, 0xd06e,
+	0xa438, 0xd703, 0xa438, 0x6090, 0xa438, 0xd41a, 0xa438, 0x1000,
+	0xa438, 0x1cc8, 0xa438, 0xd408, 0xa438, 0x1000, 0xa438, 0x1cc8,
+	0xa438, 0xcd31, 0xa438, 0xd700, 0xa438, 0x2fa9, 0xa438, 0x8061,
+	0xa438, 0x33c9, 0xa438, 0x8064, 0xa438, 0x6117, 0xa438, 0xf00a,
+	0xa438, 0xd141, 0xa438, 0xd043, 0xa438, 0xf009, 0xa438, 0xd121,
+	0xa438, 0xd043, 0xa438, 0xf006, 0xa438, 0xd122, 0xa438, 0xd042,
+	0xa438, 0xf003, 0xa438, 0xd181, 0xa438, 0xd043, 0xa438, 0x1000,
+	0xa438, 0x1cd2, 0xa438, 0xd700, 0xa438, 0x5fba, 0xa438, 0xd700,
+	0xa438, 0x2969, 0xa438, 0x80da, 0xa438, 0xd700, 0xa438, 0x6ccb,
+	0xa438, 0xd700, 0xa438, 0x6d67, 0xa438, 0x800a, 0xa438, 0x81a0,
+	0xa438, 0x8312, 0xa438, 0x8480, 0xa438, 0x0c86, 0xa438, 0x0680,
+	0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x8702, 0xa438, 0x9503,
+	0xa438, 0xd407, 0xa438, 0x1000, 0xa438, 0x1cc8, 0xa438, 0xd703,
+	0xa438, 0x6090, 0xa438, 0xd41a, 0xa438, 0x1000, 0xa438, 0x1cc8,
+	0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x8380, 0xa438, 0x9503,
+	0xa438, 0xd406, 0xa438, 0x1000, 0xa438, 0x1cc8, 0xa438, 0xcd39,
+	0xa438, 0xd404, 0xa438, 0x1000, 0xa438, 0x1cc8, 0xa438, 0xd700,
+	0xa438, 0x60cf, 0xa438, 0x60f1, 0xa438, 0x6113, 0xa438, 0x6135,
+	0xa438, 0x6157, 0xa438, 0xf00b, 0xa438, 0xce03, 0xa438, 0xf00a,
+	0xa438, 0xce03, 0xa438, 0xf008, 0xa438, 0xce03, 0xa438, 0xf006,
+	0xa438, 0xce03, 0xa438, 0xf004, 0xa438, 0xce03, 0xa438, 0xf002,
+	0xa438, 0xce03, 0xa438, 0x1000, 0xa438, 0x1ce7, 0xa438, 0x0c03,
+	0xa438, 0x1502, 0xa438, 0x0c07, 0xa438, 0x0c01, 0xa438, 0x8d07,
+	0xa438, 0x0cc3, 0xa438, 0x0b40, 0xa438, 0x8d07, 0xa438, 0x9503,
+	0xa438, 0xa810, 0xa438, 0xa00a, 0xa438, 0xa302, 0xa438, 0x0ca0,
+	0xa438, 0x0480, 0xa438, 0xa684, 0xa438, 0x1000, 0xa438, 0x1cd2,
+	0xa438, 0xd706, 0xa438, 0x5fa7, 0xa438, 0xb920, 0xa438, 0x1000,
+	0xa438, 0x1cd2, 0xa438, 0xd71f, 0xa438, 0x7fb4, 0xa438, 0x8810,
+	0xa438, 0x9920, 0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0xd71f,
+	0xa438, 0x60e5, 0xa438, 0x5f94, 0xa438, 0x1000, 0xa438, 0x1cd2,
+	0xa438, 0xd706, 0xa438, 0x5fa7, 0xa438, 0xfff0, 0xa438, 0xb820,
+	0xa438, 0xa810, 0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0xd71f,
+	0xa438, 0x7fa5, 0xa438, 0x9820, 0xa438, 0x1000, 0xa438, 0x1cd2,
+	0xa438, 0x1000, 0xa438, 0x1d2b, 0xa438, 0xd706, 0xa438, 0x5f69,
+	0xa438, 0xf010, 0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0xae80,
+	0xa438, 0x9503, 0xa438, 0xd700, 0xa438, 0x2b6d, 0xa438, 0x8184,
+	0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x8380, 0xa438, 0x9503,
+	0xa438, 0xd406, 0xa438, 0x1000, 0xa438, 0x1cc8, 0xa438, 0xcd32,
+	0xa438, 0xd701, 0xa438, 0x6191, 0xa438, 0xa504, 0xa438, 0xcd3a,
+	0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0xd700, 0xa438, 0x6067,
+	0xa438, 0x1000, 0xa438, 0x1d2b, 0xa438, 0xd701, 0xa438, 0x5f3a,
+	0xa438, 0x8504, 0xa438, 0xd700, 0xa438, 0x2739, 0xa438, 0x817a,
+	0xa438, 0xd707, 0xa438, 0x6061, 0xa438, 0x1800, 0xa438, 0x816c,
+	0xa438, 0xd193, 0xa438, 0xd047, 0xa438, 0x1000, 0xa438, 0x1cd2,
+	0xa438, 0x1000, 0xa438, 0x1d2b, 0xa438, 0xd700, 0xa438, 0x5f7a,
+	0xa438, 0xd706, 0xa438, 0x5f29, 0xa438, 0xd700, 0xa438, 0x60cf,
+	0xa438, 0x60f1, 0xa438, 0x6113, 0xa438, 0x6135, 0xa438, 0x6157,
+	0xa438, 0xf00b, 0xa438, 0xce06, 0xa438, 0xf00a, 0xa438, 0xce06,
+	0xa438, 0xf008, 0xa438, 0xce06, 0xa438, 0xf006, 0xa438, 0xce06,
+	0xa438, 0xf004, 0xa438, 0xce06, 0xa438, 0xf002, 0xa438, 0xce06,
+	0xa438, 0x1000, 0xa438, 0x1ce7, 0xa438, 0x0c03, 0xa438, 0x1502,
+	0xa438, 0x0c0f, 0xa438, 0x0b01, 0xa438, 0x0c3f, 0xa438, 0x0c08,
+	0xa438, 0x8bc0, 0xa438, 0x9503, 0xa438, 0xd707, 0xa438, 0x409f,
+	0xa438, 0x4062, 0xa438, 0x8310, 0xa438, 0xf002, 0xa438, 0xa310,
+	0xa438, 0xa120, 0xa438, 0xa420, 0xa438, 0xd193, 0xa438, 0xd048,
+	0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0x1000, 0xa438, 0x1d2b,
+	0xa438, 0xd700, 0xa438, 0x5f7a, 0xa438, 0xd706, 0xa438, 0x5f29,
+	0xa438, 0xd700, 0xa438, 0x60cf, 0xa438, 0x60f1, 0xa438, 0x6113,
+	0xa438, 0x6135, 0xa438, 0x6157, 0xa438, 0xf00b, 0xa438, 0xce03,
+	0xa438, 0xf00a, 0xa438, 0xce03, 0xa438, 0xf008, 0xa438, 0xce03,
+	0xa438, 0xf006, 0xa438, 0xce03, 0xa438, 0xf004, 0xa438, 0xce03,
+	0xa438, 0xf002, 0xa438, 0xce03, 0xa438, 0x1000, 0xa438, 0x1ce7,
+	0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x0c07, 0xa438, 0x0c01,
+	0xa438, 0x9503, 0xa438, 0x8420, 0xa438, 0x800a, 0xa438, 0x8120,
+	0xa438, 0x8312, 0xa438, 0x8480, 0xa438, 0x8604, 0xa438, 0xd419,
+	0xa438, 0x1000, 0xa438, 0x1cc8, 0xa438, 0xd702, 0xa438, 0x4080,
+	0xa438, 0xbb20, 0xa438, 0x1800, 0xa438, 0x8507, 0xa438, 0xa00a,
+	0xa438, 0xa302, 0xa438, 0xa480, 0xa438, 0xa604, 0xa438, 0xd193,
+	0xa438, 0xd047, 0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0x1000,
+	0xa438, 0x1d2b, 0xa438, 0xd700, 0xa438, 0x5f7a, 0xa438, 0xd706,
+	0xa438, 0x5f29, 0xa438, 0x1800, 0xa438, 0x814f, 0xa438, 0x800a,
+	0xa438, 0x8302, 0xa438, 0x8480, 0xa438, 0x8604, 0xa438, 0xd405,
+	0xa438, 0x1000, 0xa438, 0x1cc8, 0xa438, 0xbb20, 0xa438, 0xa00a,
+	0xa438, 0xa302, 0xa438, 0xa480, 0xa438, 0xa604, 0xa438, 0x1800,
+	0xa438, 0x8507, 0xa438, 0xd405, 0xa438, 0x1000, 0xa438, 0x1cc8,
+	0xa438, 0xd404, 0xa438, 0x1000, 0xa438, 0x1cc8, 0xa438, 0xd700,
+	0xa438, 0x2b69, 0xa438, 0x8184, 0xa438, 0xf06d, 0xa438, 0xd700,
+	0xa438, 0x60cf, 0xa438, 0x60f1, 0xa438, 0x6113, 0xa438, 0x6135,
+	0xa438, 0x6157, 0xa438, 0xf00b, 0xa438, 0xce03, 0xa438, 0xf00a,
+	0xa438, 0xce03, 0xa438, 0xf008, 0xa438, 0xce03, 0xa438, 0xf006,
+	0xa438, 0xce03, 0xa438, 0xf004, 0xa438, 0xce03, 0xa438, 0xf002,
+	0xa438, 0xce03, 0xa438, 0x1000, 0xa438, 0x1ce7, 0xa438, 0x0c03,
+	0xa438, 0x1502, 0xa438, 0x0c07, 0xa438, 0x0c01, 0xa438, 0x0c3f,
+	0xa438, 0x0d08, 0xa438, 0x9503, 0xa438, 0xa810, 0xa438, 0xa00a,
+	0xa438, 0xa302, 0xa438, 0x0ca0, 0xa438, 0x0480, 0xa438, 0xd700,
+	0xa438, 0x2969, 0xa438, 0x0960, 0xa438, 0x60a4, 0xa438, 0xd704,
+	0xa438, 0x407d, 0xa438, 0x8604, 0xa438, 0xf002, 0xa438, 0xa604,
+	0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0xa340, 0xa438, 0xd700,
+	0xa438, 0x37cd, 0xa438, 0x81b4, 0xa438, 0x8310, 0xa438, 0x9503,
+	0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0xd706, 0xa438, 0x5fa7,
+	0xa438, 0xb920, 0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0xd71f,
+	0xa438, 0x7fb4, 0xa438, 0x8810, 0xa438, 0x9920, 0xa438, 0x1000,
+	0xa438, 0x1cd2, 0xa438, 0xd71f, 0xa438, 0x60e5, 0xa438, 0x5f94,
+	0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0xd706, 0xa438, 0x5fa7,
+	0xa438, 0xfff0, 0xa438, 0xb820, 0xa438, 0xa810, 0xa438, 0x1000,
+	0xa438, 0x1cd2, 0xa438, 0xd71f, 0xa438, 0x7fa5, 0xa438, 0x9820,
+	0xa438, 0xd700, 0xa438, 0x2d59, 0xa438, 0x8507, 0xa438, 0x0c03,
+	0xa438, 0x1502, 0xa438, 0x8c07, 0xa438, 0x9503, 0xa438, 0xa120,
+	0xa438, 0xd700, 0xa438, 0x2969, 0xa438, 0x81e3, 0xa438, 0x60e4,
+	0xa438, 0xd704, 0xa438, 0x40bd, 0xa438, 0xd704, 0xa438, 0x407b,
+	0xa438, 0x8310, 0xa438, 0xf002, 0xa438, 0xa310, 0xa438, 0xd700,
+	0xa438, 0x2969, 0xa438, 0x81ec, 0xa438, 0x60a4, 0xa438, 0xd704,
+	0xa438, 0x407d, 0xa438, 0xa202, 0xa438, 0xf002, 0xa438, 0x8202,
+	0xa438, 0xa420, 0xa438, 0x1800, 0xa438, 0x861d, 0xa438, 0x8810,
+	0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0xd700, 0xa438, 0x5fbb,
+	0xa438, 0xd17a, 0xa438, 0xd05a, 0xa438, 0xd700, 0xa438, 0x60cf,
+	0xa438, 0x60f1, 0xa438, 0x6113, 0xa438, 0x6135, 0xa438, 0x6157,
+	0xa438, 0xf00b, 0xa438, 0xce06, 0xa438, 0xf00a, 0xa438, 0xce06,
+	0xa438, 0xf008, 0xa438, 0xce06, 0xa438, 0xf006, 0xa438, 0xce06,
+	0xa438, 0xf004, 0xa438, 0xce06, 0xa438, 0xf002, 0xa438, 0xce06,
+	0xa438, 0x1000, 0xa438, 0x1ce7, 0xa438, 0x0c03, 0xa438, 0x1502,
+	0xa438, 0x0c0f, 0xa438, 0x0b04, 0xa438, 0x0c3f, 0xa438, 0x0c21,
+	0xa438, 0x8d07, 0xa438, 0x9503, 0xa438, 0xa340, 0xa438, 0x1000,
+	0xa438, 0x1d47, 0xa438, 0xa110, 0xa438, 0x1000, 0xa438, 0x1cef,
+	0xa438, 0x8110, 0xa438, 0x1000, 0xa438, 0x1d50, 0xa438, 0xa304,
+	0xa438, 0xa440, 0xa438, 0xa8c0, 0xa438, 0x8810, 0xa438, 0xa00a,
+	0xa438, 0xa120, 0xa438, 0xa310, 0xa438, 0xd704, 0xa438, 0x405d,
+	0xa438, 0xa308, 0xa438, 0x0cfc, 0xa438, 0x0224, 0xa438, 0x0ca0,
+	0xa438, 0x0480, 0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0xa340,
+	0xa438, 0xd700, 0xa438, 0x37cd, 0xa438, 0x8231, 0xa438, 0x8310,
+	0xa438, 0x9503, 0xa438, 0xd162, 0xa438, 0xd048, 0xa438, 0x1000,
+	0xa438, 0x1cd2, 0xa438, 0xd700, 0xa438, 0x5fba, 0xa438, 0x8840,
+	0xa438, 0xd1c4, 0xa438, 0xd045, 0xa438, 0x1000, 0xa438, 0x1cd2,
+	0xa438, 0xd700, 0xa438, 0x5fba, 0xa438, 0xd706, 0xa438, 0x6127,
+	0xa438, 0xd700, 0xa438, 0x5f3b, 0xa438, 0x88c0, 0xa438, 0x800a,
+	0xa438, 0x8120, 0xa438, 0x8350, 0xa438, 0x84a0, 0xa438, 0xffad,
+	0xa438, 0xb920, 0xa438, 0xcd33, 0xa438, 0x1000, 0xa438, 0x1cd2,
+	0xa438, 0xd71f, 0xa438, 0x7fb4, 0xa438, 0x9920, 0xa438, 0x1000,
+	0xa438, 0x1cd2, 0xa438, 0xd71f, 0xa438, 0x6065, 0xa438, 0x5f94,
+	0xa438, 0xffee, 0xa438, 0xb820, 0xa438, 0x1000, 0xa438, 0x1cd2,
+	0xa438, 0xd71f, 0xa438, 0x7fa5, 0xa438, 0x9820, 0xa438, 0x800a,
+	0xa438, 0x8120, 0xa438, 0x1000, 0xa438, 0x1d47, 0xa438, 0xa108,
+	0xa438, 0x1000, 0xa438, 0x1cef, 0xa438, 0x8108, 0xa438, 0x1000,
+	0xa438, 0x1d50, 0xa438, 0xd704, 0xa438, 0x60bd, 0xa438, 0xd707,
+	0xa438, 0x413f, 0xa438, 0x4100, 0xa438, 0xf004, 0xa438, 0x0cfd,
+	0xa438, 0x0201, 0xa438, 0xf005, 0xa438, 0x0cfc, 0xa438, 0x02bc,
+	0xa438, 0xf002, 0xa438, 0xa2fc, 0xa438, 0xa304, 0xa438, 0x8880,
+	0xa438, 0x0cc0, 0xa438, 0x0440, 0xa438, 0xcd34, 0xa438, 0xd704,
+	0xa438, 0x407d, 0xa438, 0x405b, 0xa438, 0xf006, 0xa438, 0xd704,
+	0xa438, 0x60fd, 0xa438, 0xd707, 0xa438, 0x40bf, 0xa438, 0x4080,
+	0xa438, 0x8310, 0xa438, 0x1000, 0xa438, 0x1d15, 0xa438, 0x0c03,
+	0xa438, 0x1502, 0xa438, 0x8c07, 0xa438, 0xd704, 0xa438, 0x409d,
+	0xa438, 0x8b0f, 0xa438, 0x8c38, 0xa438, 0xf004, 0xa438, 0x0c0f,
+	0xa438, 0x0b07, 0xa438, 0xac38, 0xa438, 0x0c38, 0xa438, 0x0d10,
+	0xa438, 0x9503, 0xa438, 0xa810, 0xa438, 0xa00a, 0xa438, 0xa120,
+	0xa438, 0xd704, 0xa438, 0x607d, 0xa438, 0xa4a0, 0xa438, 0xa604,
+	0xa438, 0xd700, 0xa438, 0x37c9, 0xa438, 0x829f, 0xa438, 0xd17a,
+	0xa438, 0xd049, 0xa438, 0xf003, 0xa438, 0xd19f, 0xa438, 0xd049,
+	0xa438, 0xd704, 0xa438, 0x413d, 0xa438, 0xa00a, 0xa438, 0xa120,
+	0xa438, 0xd704, 0xa438, 0x407b, 0xa438, 0x8310, 0xa438, 0xf002,
+	0xa438, 0xa310, 0xa438, 0xa403, 0xa438, 0x1000, 0xa438, 0x1cd2,
+	0xa438, 0xd71f, 0xa438, 0x6a14, 0xa438, 0xd700, 0xa438, 0x409a,
+	0xa438, 0xd706, 0xa438, 0x4988, 0xa438, 0xf014, 0xa438, 0xd704,
+	0xa438, 0x6055, 0xa438, 0xfff5, 0xa438, 0x1000, 0xa438, 0x1d47,
+	0xa438, 0x800a, 0xa438, 0x8120, 0xa438, 0x8310, 0xa438, 0xa380,
+	0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0x1000, 0xa438, 0x1d2b,
+	0xa438, 0xd705, 0xa438, 0x5f77, 0xa438, 0x8380, 0xa438, 0x1000,
+	0xa438, 0x1d50, 0xa438, 0xffdd, 0xa438, 0x0c03, 0xa438, 0x1502,
+	0xa438, 0x8b0f, 0xa438, 0x8c38, 0xa438, 0x8d38, 0xa438, 0x9503,
+	0xa438, 0xd700, 0xa438, 0x37c9, 0xa438, 0x82d8, 0xa438, 0x33a9,
+	0xa438, 0x82d5, 0xa438, 0xd1f4, 0xa438, 0xd04b, 0xa438, 0xf006,
+	0xa438, 0xd1b7, 0xa438, 0xd04b, 0xa438, 0xf003, 0xa438, 0xd1c6,
+	0xa438, 0xd04c, 0xa438, 0xd704, 0xa438, 0x413d, 0xa438, 0xa00a,
+	0xa438, 0xa120, 0xa438, 0xd704, 0xa438, 0x407b, 0xa438, 0x8310,
+	0xa438, 0xf002, 0xa438, 0xa310, 0xa438, 0xa403, 0xa438, 0x1000,
+	0xa438, 0x1cd2, 0xa438, 0xd71f, 0xa438, 0x62f4, 0xa438, 0xd700,
+	0xa438, 0x405a, 0xa438, 0xf01a, 0xa438, 0xd704, 0xa438, 0x6055,
+	0xa438, 0xfff7, 0xa438, 0x1000, 0xa438, 0x1d47, 0xa438, 0x800a,
+	0xa438, 0x8120, 0xa438, 0x8310, 0xa438, 0xa380, 0xa438, 0x1000,
+	0xa438, 0x1cd2, 0xa438, 0x1000, 0xa438, 0x1d2b, 0xa438, 0xd705,
+	0xa438, 0x5f77, 0xa438, 0x8380, 0xa438, 0x1000, 0xa438, 0x1d50,
+	0xa438, 0xffdf, 0xa438, 0x8403, 0xa438, 0x1000, 0xa438, 0x1cd2,
+	0xa438, 0xd700, 0xa438, 0x629c, 0xa438, 0xfffb, 0xa438, 0x8403,
+	0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0xd71f, 0xa438, 0x6096,
+	0xa438, 0xd700, 0xa438, 0x619c, 0xa438, 0xfffa, 0xa438, 0xd706,
+	0xa438, 0x4128, 0xa438, 0xd702, 0xa438, 0x60b0, 0xa438, 0x0c03,
+	0xa438, 0x1502, 0xa438, 0xae80, 0xa438, 0x9503, 0xa438, 0x1800,
+	0xa438, 0x8431, 0xa438, 0xd17a, 0xa438, 0xd05a, 0xa438, 0xd700,
+	0xa438, 0x60cf, 0xa438, 0x60f1, 0xa438, 0x6113, 0xa438, 0x6135,
+	0xa438, 0x6157, 0xa438, 0xf00b, 0xa438, 0xce06, 0xa438, 0xf00a,
+	0xa438, 0xce06, 0xa438, 0xf008, 0xa438, 0xce06, 0xa438, 0xf006,
+	0xa438, 0xce06, 0xa438, 0xf004, 0xa438, 0xce06, 0xa438, 0xf002,
+	0xa438, 0xce06, 0xa438, 0x1000, 0xa438, 0x1ce7, 0xa438, 0x0c03,
+	0xa438, 0x1502, 0xa438, 0x0c0f, 0xa438, 0x0b04, 0xa438, 0x0c3f,
+	0xa438, 0x0c21, 0xa438, 0x8d07, 0xa438, 0x0cc3, 0xa438, 0x0b40,
+	0xa438, 0x0c3f, 0xa438, 0x0c24, 0xa438, 0x8d07, 0xa438, 0x9503,
+	0xa438, 0xa340, 0xa438, 0x1000, 0xa438, 0x1d47, 0xa438, 0xa110,
+	0xa438, 0x1000, 0xa438, 0x1cef, 0xa438, 0x8110, 0xa438, 0x1000,
+	0xa438, 0x1d50, 0xa438, 0xa304, 0xa438, 0xa440, 0xa438, 0xa8c0,
+	0xa438, 0x8810, 0xa438, 0xa00a, 0xa438, 0xa120, 0xa438, 0xa310,
+	0xa438, 0xd704, 0xa438, 0x405d, 0xa438, 0xa308, 0xa438, 0x0cfc,
+	0xa438, 0x0224, 0xa438, 0x0ca0, 0xa438, 0x0480, 0xa438, 0x8604,
+	0xa438, 0xcd35, 0xa438, 0xd162, 0xa438, 0xd048, 0xa438, 0x1000,
+	0xa438, 0x1cd2, 0xa438, 0xd700, 0xa438, 0x5fba, 0xa438, 0x8840,
+	0xa438, 0xd1c4, 0xa438, 0xd045, 0xa438, 0x1000, 0xa438, 0x1cd2,
+	0xa438, 0xd700, 0xa438, 0x5fba, 0xa438, 0xd706, 0xa438, 0x6127,
+	0xa438, 0xd700, 0xa438, 0x5f3b, 0xa438, 0x88c0, 0xa438, 0x800a,
+	0xa438, 0x8120, 0xa438, 0x8350, 0xa438, 0x84a0, 0xa438, 0xffae,
+	0xa438, 0xbb80, 0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0xd71f,
+	0xa438, 0x5fb4, 0xa438, 0xb920, 0xa438, 0xcd36, 0xa438, 0x1000,
+	0xa438, 0x1cd2, 0xa438, 0xd71f, 0xa438, 0x7fb4, 0xa438, 0x9920,
+	0xa438, 0x9b80, 0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0xd71f,
+	0xa438, 0x6065, 0xa438, 0x5f94, 0xa438, 0xffe8, 0xa438, 0xb820,
+	0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0xd71f, 0xa438, 0x7fa5,
+	0xa438, 0x9820, 0xa438, 0x800a, 0xa438, 0x8120, 0xa438, 0x1000,
+	0xa438, 0x1d47, 0xa438, 0xa108, 0xa438, 0x1000, 0xa438, 0x1cef,
+	0xa438, 0x8108, 0xa438, 0x1000, 0xa438, 0x1d50, 0xa438, 0xd704,
+	0xa438, 0x60bd, 0xa438, 0xd707, 0xa438, 0x413f, 0xa438, 0x4100,
+	0xa438, 0xf004, 0xa438, 0x0cfd, 0xa438, 0x0201, 0xa438, 0xf005,
+	0xa438, 0x0cfc, 0xa438, 0x02bc, 0xa438, 0xf002, 0xa438, 0xa2fc,
+	0xa438, 0xa304, 0xa438, 0x8880, 0xa438, 0x0cc0, 0xa438, 0x0440,
+	0xa438, 0xcd37, 0xa438, 0xd704, 0xa438, 0x407d, 0xa438, 0x405b,
+	0xa438, 0xf006, 0xa438, 0xd704, 0xa438, 0x60fd, 0xa438, 0xd707,
+	0xa438, 0x40bf, 0xa438, 0x4080, 0xa438, 0x8310, 0xa438, 0x1000,
+	0xa438, 0x1d15, 0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x8c07,
+	0xa438, 0x0cc0, 0xa438, 0x0b00, 0xa438, 0xd704, 0xa438, 0x40bd,
+	0xa438, 0x8b0f, 0xa438, 0x8c38, 0xa438, 0x8c3f, 0xa438, 0xf005,
+	0xa438, 0x0c0f, 0xa438, 0x0b07, 0xa438, 0xac38, 0xa438, 0xac3f,
+	0xa438, 0x0c38, 0xa438, 0x0d10, 0xa438, 0x0c38, 0xa438, 0x0d10,
+	0xa438, 0x9503, 0xa438, 0xa810, 0xa438, 0xa00a, 0xa438, 0xa120,
+	0xa438, 0xd704, 0xa438, 0x607d, 0xa438, 0xa4a0, 0xa438, 0xa604,
+	0xa438, 0xd700, 0xa438, 0x37c9, 0xa438, 0x83d0, 0xa438, 0x33a9,
+	0xa438, 0x83cd, 0xa438, 0xd17a, 0xa438, 0xd048, 0xa438, 0xf006,
+	0xa438, 0xd17a, 0xa438, 0xd048, 0xa438, 0xf003, 0xa438, 0xd17a,
+	0xa438, 0xd048, 0xa438, 0xd704, 0xa438, 0x413d, 0xa438, 0xa00a,
+	0xa438, 0xa120, 0xa438, 0xd704, 0xa438, 0x407b, 0xa438, 0x8310,
+	0xa438, 0xf002, 0xa438, 0xa310, 0xa438, 0xa403, 0xa438, 0x1000,
+	0xa438, 0x1cd2, 0xa438, 0x1000, 0xa438, 0x1d2b, 0xa438, 0xd700,
+	0xa438, 0x409a, 0xa438, 0xd706, 0xa438, 0x4048, 0xa438, 0xf014,
+	0xa438, 0xd704, 0xa438, 0x6055, 0xa438, 0xfff5, 0xa438, 0x1000,
+	0xa438, 0x1d47, 0xa438, 0x800a, 0xa438, 0x8120, 0xa438, 0x8310,
+	0xa438, 0xa380, 0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0x1000,
+	0xa438, 0x1d2b, 0xa438, 0xd705, 0xa438, 0x5f77, 0xa438, 0x8380,
+	0xa438, 0x1000, 0xa438, 0x1d50, 0xa438, 0xffdd, 0xa438, 0x0c03,
+	0xa438, 0x1502, 0xa438, 0x8b0f, 0xa438, 0x8c38, 0xa438, 0x8d38,
+	0xa438, 0x9503, 0xa438, 0xd700, 0xa438, 0x37c9, 0xa438, 0x8409,
+	0xa438, 0x33a9, 0xa438, 0x8406, 0xa438, 0xd13d, 0xa438, 0xd04b,
+	0xa438, 0xf006, 0xa438, 0xd17a, 0xa438, 0xd04a, 0xa438, 0xf003,
+	0xa438, 0xd189, 0xa438, 0xd04c, 0xa438, 0xd704, 0xa438, 0x413d,
+	0xa438, 0xa00a, 0xa438, 0xa120, 0xa438, 0xd704, 0xa438, 0x407b,
+	0xa438, 0x8310, 0xa438, 0xf002, 0xa438, 0xa310, 0xa438, 0xa403,
+	0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0x1000, 0xa438, 0x1d2b,
+	0xa438, 0xd700, 0xa438, 0x409a, 0xa438, 0xd706, 0xa438, 0x4048,
+	0xa438, 0xf014, 0xa438, 0xd704, 0xa438, 0x6055, 0xa438, 0xfff5,
+	0xa438, 0x1000, 0xa438, 0x1d47, 0xa438, 0x800a, 0xa438, 0x8120,
+	0xa438, 0x8310, 0xa438, 0xa380, 0xa438, 0x1000, 0xa438, 0x1cd2,
+	0xa438, 0x1000, 0xa438, 0x1d2b, 0xa438, 0xd705, 0xa438, 0x5f77,
+	0xa438, 0x8380, 0xa438, 0x1000, 0xa438, 0x1d50, 0xa438, 0xffdd,
+	0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x0c07, 0xa438, 0x0d01,
+	0xa438, 0x0c03, 0xa438, 0x0b01, 0xa438, 0x0c07, 0xa438, 0x0d01,
+	0xa438, 0x9503, 0xa438, 0xd700, 0xa438, 0x60cf, 0xa438, 0x60f1,
+	0xa438, 0x6113, 0xa438, 0x6135, 0xa438, 0x6157, 0xa438, 0xf00b,
+	0xa438, 0xce08, 0xa438, 0xf00a, 0xa438, 0xce08, 0xa438, 0xf008,
+	0xa438, 0xce08, 0xa438, 0xf006, 0xa438, 0xce08, 0xa438, 0xf004,
+	0xa438, 0xce08, 0xa438, 0xf002, 0xa438, 0xce08, 0xa438, 0x1000,
+	0xa438, 0x1ce7, 0xa438, 0xa180, 0xa438, 0xcd38, 0xa438, 0xd700,
+	0xa438, 0x37c9, 0xa438, 0x8465, 0xa438, 0x33a9, 0xa438, 0x845d,
+	0xa438, 0xd702, 0xa438, 0x4098, 0xa438, 0xd17a, 0xa438, 0xd04a,
+	0xa438, 0xf013, 0xa438, 0xd100, 0xa438, 0xd049, 0xa438, 0xf010,
+	0xa438, 0xd702, 0xa438, 0x4098, 0xa438, 0xd1b7, 0xa438, 0xd049,
+	0xa438, 0xf00b, 0xa438, 0xd100, 0xa438, 0xd048, 0xa438, 0xf008,
+	0xa438, 0xd702, 0xa438, 0x4098, 0xa438, 0xd17a, 0xa438, 0xd04b,
+	0xa438, 0xf003, 0xa438, 0xd199, 0xa438, 0xd04a, 0xa438, 0xd13b,
+	0xa438, 0xd055, 0xa438, 0xd704, 0xa438, 0x413d, 0xa438, 0xa00a,
+	0xa438, 0xa1a0, 0xa438, 0xd704, 0xa438, 0x407b, 0xa438, 0x8310,
+	0xa438, 0xf002, 0xa438, 0xa310, 0xa438, 0xa403, 0xa438, 0x1000,
+	0xa438, 0x1cd2, 0xa438, 0x1000, 0xa438, 0x1d2b, 0xa438, 0xd700,
+	0xa438, 0x405b, 0xa438, 0xf014, 0xa438, 0xd704, 0xa438, 0x6055,
+	0xa438, 0xfff7, 0xa438, 0x1000, 0xa438, 0x1d47, 0xa438, 0x800a,
+	0xa438, 0x81a0, 0xa438, 0x8310, 0xa438, 0xa380, 0xa438, 0x1000,
+	0xa438, 0x1cd2, 0xa438, 0x1000, 0xa438, 0x1d2b, 0xa438, 0xd705,
+	0xa438, 0x5f77, 0xa438, 0x8380, 0xa438, 0x1000, 0xa438, 0x1d50,
+	0xa438, 0xffdf, 0xa438, 0xa302, 0xa438, 0xd704, 0xa438, 0x415d,
+	0xa438, 0xa00a, 0xa438, 0xa1a0, 0xa438, 0xd704, 0xa438, 0x407b,
+	0xa438, 0x8310, 0xa438, 0xf002, 0xa438, 0xa310, 0xa438, 0xa302,
+	0xa438, 0xa403, 0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0x1000,
+	0xa438, 0x1d2b, 0xa438, 0xd700, 0xa438, 0x409a, 0xa438, 0xd706,
+	0xa438, 0x4048, 0xa438, 0xf014, 0xa438, 0xd704, 0xa438, 0x6055,
+	0xa438, 0xfff5, 0xa438, 0x1000, 0xa438, 0x1d47, 0xa438, 0x800a,
+	0xa438, 0x81a0, 0xa438, 0x8312, 0xa438, 0xa380, 0xa438, 0x1000,
+	0xa438, 0x1cd2, 0xa438, 0x1000, 0xa438, 0x1d2b, 0xa438, 0xd705,
+	0xa438, 0x5f77, 0xa438, 0x8380, 0xa438, 0x1000, 0xa438, 0x1d50,
+	0xa438, 0xffdc, 0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x0c0f,
+	0xa438, 0x0b02, 0xa438, 0x0c38, 0xa438, 0x0c10, 0xa438, 0x0c3f,
+	0xa438, 0x0c12, 0xa438, 0x9503, 0xa438, 0xd700, 0xa438, 0x37c9,
+	0xa438, 0x84d8, 0xa438, 0x33a9, 0xa438, 0x84d0, 0xa438, 0xd702,
+	0xa438, 0x4098, 0xa438, 0xd199, 0xa438, 0xd04a, 0xa438, 0xf013,
+	0xa438, 0xd100, 0xa438, 0xd04a, 0xa438, 0xf010, 0xa438, 0xd702,
+	0xa438, 0x4098, 0xa438, 0xd17a, 0xa438, 0xd04a, 0xa438, 0xf00b,
+	0xa438, 0xd100, 0xa438, 0xd048, 0xa438, 0xf008, 0xa438, 0xd702,
+	0xa438, 0x4098, 0xa438, 0xd199, 0xa438, 0xd04b, 0xa438, 0xf003,
+	0xa438, 0xd16b, 0xa438, 0xd04b, 0xa438, 0xd704, 0xa438, 0x415d,
+	0xa438, 0xa00a, 0xa438, 0xa1a0, 0xa438, 0xd704, 0xa438, 0x407b,
+	0xa438, 0x8310, 0xa438, 0xf002, 0xa438, 0xa310, 0xa438, 0xa302,
+	0xa438, 0xa403, 0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0x1000,
+	0xa438, 0x1d2b, 0xa438, 0xd700, 0xa438, 0x40ba, 0xa438, 0xd706,
+	0xa438, 0x406a, 0xa438, 0x8403, 0xa438, 0xf014, 0xa438, 0xd704,
+	0xa438, 0x6055, 0xa438, 0xfff4, 0xa438, 0x1000, 0xa438, 0x1d47,
+	0xa438, 0x800a, 0xa438, 0x81a0, 0xa438, 0x8312, 0xa438, 0xa380,
+	0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0x1000, 0xa438, 0x1d2b,
+	0xa438, 0xd705, 0xa438, 0x5f77, 0xa438, 0x8380, 0xa438, 0x1000,
+	0xa438, 0x1d50, 0xa438, 0xffdb, 0xa438, 0x81a0, 0xa438, 0x8310,
+	0xa438, 0xa302, 0xa438, 0xa00a, 0xa438, 0xa480, 0xa438, 0x8420,
+	0xa438, 0xd700, 0xa438, 0x2969, 0xa438, 0x8517, 0xa438, 0x60e4,
+	0xa438, 0xd700, 0xa438, 0x40a7, 0xa438, 0xd704, 0xa438, 0x407d,
+	0xa438, 0x8604, 0xa438, 0xf002, 0xa438, 0xa604, 0xa438, 0xd700,
+	0xa438, 0x60c7, 0xa438, 0xa602, 0xa438, 0x0c03, 0xa438, 0x1502,
+	0xa438, 0xa702, 0xa438, 0x9503, 0xa438, 0x0c03, 0xa438, 0x1502,
+	0xa438, 0xa340, 0xa438, 0x9503, 0xa438, 0xd700, 0xa438, 0x60cf,
+	0xa438, 0x60f1, 0xa438, 0x6113, 0xa438, 0x6135, 0xa438, 0x6157,
+	0xa438, 0xf00b, 0xa438, 0xce03, 0xa438, 0xf00a, 0xa438, 0xce03,
+	0xa438, 0xf008, 0xa438, 0xce03, 0xa438, 0xf006, 0xa438, 0xce03,
+	0xa438, 0xf004, 0xa438, 0xce03, 0xa438, 0xf002, 0xa438, 0xce03,
+	0xa438, 0x1000, 0xa438, 0x1ce7, 0xa438, 0x0c03, 0xa438, 0x1502,
+	0xa438, 0x0c07, 0xa438, 0x0c01, 0xa438, 0x0c3f, 0xa438, 0x0d08,
+	0xa438, 0x9503, 0xa438, 0xd700, 0xa438, 0x646d, 0xa438, 0x37c9,
+	0xa438, 0x8558, 0xa438, 0x33a9, 0xa438, 0x854e, 0xa438, 0xd700,
+	0xa438, 0x40c7, 0xa438, 0xd702, 0xa438, 0x6098, 0xa438, 0xd100,
+	0xa438, 0xd048, 0xa438, 0xf01a, 0xa438, 0xd17a, 0xa438, 0xd049,
+	0xa438, 0xf017, 0xa438, 0xd700, 0xa438, 0x40c7, 0xa438, 0xd702,
+	0xa438, 0x6098, 0xa438, 0xd100, 0xa438, 0xd049, 0xa438, 0xf010,
+	0xa438, 0xd17a, 0xa438, 0xd04c, 0xa438, 0xf00d, 0xa438, 0xd700,
+	0xa438, 0x40c7, 0xa438, 0xd702, 0xa438, 0x6098, 0xa438, 0xd17a,
+	0xa438, 0xd04a, 0xa438, 0xf006, 0xa438, 0xd17a, 0xa438, 0xd04a,
+	0xa438, 0xf003, 0xa438, 0xd17a, 0xa438, 0xd048, 0xa438, 0x1000,
+	0xa438, 0x1cd2, 0xa438, 0x1000, 0xa438, 0x1d2b, 0xa438, 0xd700,
+	0xa438, 0x5f7a, 0xa438, 0xd706, 0xa438, 0x5f29, 0xa438, 0xd700,
+	0xa438, 0x60cf, 0xa438, 0x60f1, 0xa438, 0x6113, 0xa438, 0x6135,
+	0xa438, 0x6157, 0xa438, 0xf00b, 0xa438, 0xce06, 0xa438, 0xf00a,
+	0xa438, 0xce06, 0xa438, 0xf008, 0xa438, 0xce06, 0xa438, 0xf006,
+	0xa438, 0xce06, 0xa438, 0xf004, 0xa438, 0xce06, 0xa438, 0xf002,
+	0xa438, 0xce06, 0xa438, 0x1000, 0xa438, 0x1ce7, 0xa438, 0x0c03,
+	0xa438, 0x1502, 0xa438, 0x0c0f, 0xa438, 0x0b01, 0xa438, 0x0c3f,
+	0xa438, 0x0c08, 0xa438, 0x9503, 0xa438, 0xa120, 0xa438, 0xd700,
+	0xa438, 0x2969, 0xa438, 0x859c, 0xa438, 0x6224, 0xa438, 0xd700,
+	0xa438, 0x4147, 0xa438, 0xd704, 0xa438, 0x409d, 0xa438, 0xd704,
+	0xa438, 0x613b, 0xa438, 0xf00a, 0xa438, 0xd707, 0xa438, 0x411f,
+	0xa438, 0x40e0, 0xa438, 0xf004, 0xa438, 0xd707, 0xa438, 0x409f,
+	0xa438, 0x4062, 0xa438, 0x8310, 0xa438, 0xf002, 0xa438, 0xa310,
+	0xa438, 0xd700, 0xa438, 0x2969, 0xa438, 0x85a7, 0xa438, 0x60e4,
+	0xa438, 0xd700, 0xa438, 0x40a7, 0xa438, 0xd704, 0xa438, 0x407d,
+	0xa438, 0xa202, 0xa438, 0xf002, 0xa438, 0x8202, 0xa438, 0xa420,
+	0xa438, 0xcd3b, 0xa438, 0xd700, 0xa438, 0x65ad, 0xa438, 0x43c7,
+	0xa438, 0xd700, 0xa438, 0x37c9, 0xa438, 0x85c2, 0xa438, 0x33a9,
+	0xa438, 0x85ba, 0xa438, 0xd702, 0xa438, 0x4098, 0xa438, 0xd199,
+	0xa438, 0xd04c, 0xa438, 0xf024, 0xa438, 0xd13d, 0xa438, 0xd04a,
+	0xa438, 0xf021, 0xa438, 0xd702, 0xa438, 0x4098, 0xa438, 0xd1c6,
+	0xa438, 0xd04c, 0xa438, 0xf01c, 0xa438, 0xd15c, 0xa438, 0xd04a,
+	0xa438, 0xf019, 0xa438, 0xd702, 0xa438, 0x4098, 0xa438, 0xd199,
+	0xa438, 0xd04c, 0xa438, 0xf014, 0xa438, 0xd17a, 0xa438, 0xd04c,
+	0xa438, 0xf011, 0xa438, 0xd700, 0xa438, 0x37c9, 0xa438, 0x85d5,
+	0xa438, 0x33a9, 0xa438, 0x85d2, 0xa438, 0xd1e5, 0xa438, 0xd04c,
+	0xa438, 0xf009, 0xa438, 0xd191, 0xa438, 0xd04d, 0xa438, 0xf006,
+	0xa438, 0xd17a, 0xa438, 0xd04d, 0xa438, 0xf003, 0xa438, 0xd16b,
+	0xa438, 0xd04c, 0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0x1000,
+	0xa438, 0x1d2b, 0xa438, 0xd700, 0xa438, 0x5f7a, 0xa438, 0xd706,
+	0xa438, 0x5f2c, 0xa438, 0xd700, 0xa438, 0x40e7, 0xa438, 0x0c03,
+	0xa438, 0x1502, 0xa438, 0x0c07, 0xa438, 0x0d01, 0xa438, 0x9503,
+	0xa438, 0xf006, 0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x0c07,
+	0xa438, 0x0d02, 0xa438, 0x9503, 0xa438, 0xcd3c, 0xa438, 0xd700,
+	0xa438, 0x644d, 0xa438, 0x43c7, 0xa438, 0xd700, 0xa438, 0x37c9,
+	0xa438, 0x8608, 0xa438, 0x33a9, 0xa438, 0x8600, 0xa438, 0xd702,
+	0xa438, 0x4098, 0xa438, 0xd17a, 0xa438, 0xd04a, 0xa438, 0xf019,
+	0xa438, 0xd17a, 0xa438, 0xd048, 0xa438, 0xf016, 0xa438, 0xd702,
+	0xa438, 0x4098, 0xa438, 0xd17a, 0xa438, 0xd04b, 0xa438, 0xf011,
+	0xa438, 0xd17a, 0xa438, 0xd048, 0xa438, 0xf00e, 0xa438, 0xd702,
+	0xa438, 0x4098, 0xa438, 0xd17a, 0xa438, 0xd04a, 0xa438, 0xf009,
+	0xa438, 0xd17a, 0xa438, 0xd049, 0xa438, 0xf006, 0xa438, 0xd17a,
+	0xa438, 0xd04b, 0xa438, 0xf003, 0xa438, 0xd17a, 0xa438, 0xd048,
+	0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0x1000, 0xa438, 0x1d2b,
+	0xa438, 0xd700, 0xa438, 0x5f7a, 0xa438, 0xd706, 0xa438, 0x5f2d,
+	0xa438, 0xd700, 0xa438, 0x60cf, 0xa438, 0x60f1, 0xa438, 0x6113,
+	0xa438, 0x6135, 0xa438, 0x6157, 0xa438, 0xf00b, 0xa438, 0xce08,
+	0xa438, 0xf00a, 0xa438, 0xce08, 0xa438, 0xf008, 0xa438, 0xce08,
+	0xa438, 0xf006, 0xa438, 0xce08, 0xa438, 0xf004, 0xa438, 0xce08,
+	0xa438, 0xf002, 0xa438, 0xce08, 0xa438, 0x1000, 0xa438, 0x1ce7,
+	0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x0c0f, 0xa438, 0x0b02,
+	0xa438, 0x0c38, 0xa438, 0x0c10, 0xa438, 0x9503, 0xa438, 0xa180,
+	0xa438, 0xcd3d, 0xa438, 0xd700, 0xa438, 0x2969, 0xa438, 0x865f,
+	0xa438, 0x37c9, 0xa438, 0x8655, 0xa438, 0x33a9, 0xa438, 0x864b,
+	0xa438, 0xd700, 0xa438, 0x40c7, 0xa438, 0xd702, 0xa438, 0x6098,
+	0xa438, 0xd11f, 0xa438, 0xd04a, 0xa438, 0xf01a, 0xa438, 0xd199,
+	0xa438, 0xd04b, 0xa438, 0xf017, 0xa438, 0xd700, 0xa438, 0x40c7,
+	0xa438, 0xd702, 0xa438, 0x6098, 0xa438, 0xd11f, 0xa438, 0xd04a,
+	0xa438, 0xf010, 0xa438, 0xd199, 0xa438, 0xd04b, 0xa438, 0xf00d,
+	0xa438, 0xd700, 0xa438, 0x40c7, 0xa438, 0xd702, 0xa438, 0x6098,
+	0xa438, 0xd17a, 0xa438, 0xd04c, 0xa438, 0xf006, 0xa438, 0xd199,
+	0xa438, 0xd04c, 0xa438, 0xf003, 0xa438, 0xd17a, 0xa438, 0xd04b,
+	0xa438, 0x1800, 0xa438, 0x0e04, 0xa438, 0xd700, 0xa438, 0x37c9,
+	0xa438, 0x8678, 0xa438, 0x33a9, 0xa438, 0x8670, 0xa438, 0xd705,
+	0xa438, 0x4084, 0xa438, 0xd1f4, 0xa438, 0xd048, 0xa438, 0xf013,
+	0xa438, 0xd1b7, 0xa438, 0xd04b, 0xa438, 0xf010, 0xa438, 0xd705,
+	0xa438, 0x4084, 0xa438, 0xd1f4, 0xa438, 0xd048, 0xa438, 0xf00b,
+	0xa438, 0xd1b7, 0xa438, 0xd04b, 0xa438, 0xf008, 0xa438, 0xd705,
+	0xa438, 0x4084, 0xa438, 0xd1f4, 0xa438, 0xd048, 0xa438, 0xf003,
+	0xa438, 0xd1b7, 0xa438, 0xd04b, 0xa438, 0x1800, 0xa438, 0x14cc,
+	0xa438, 0xd700, 0xa438, 0x2b59, 0xa438, 0x8685, 0xa438, 0xf003,
+	0xa438, 0x1800, 0xa438, 0x118f, 0xa438, 0x6060, 0xa438, 0x1800,
+	0xa438, 0x1167, 0xa438, 0xd700, 0xa438, 0x60c7, 0xa438, 0xd704,
+	0xa438, 0x609f, 0xa438, 0xd705, 0xa438, 0x4043, 0xa438, 0xf003,
+	0xa438, 0x1800, 0xa438, 0x1150, 0xa438, 0x0c03, 0xa438, 0x1502,
+	0xa438, 0x8702, 0xa438, 0x8011, 0xa438, 0x9503, 0xa438, 0x800a,
+	0xa438, 0x81a0, 0xa438, 0x8302, 0xa438, 0x8480, 0xa438, 0x8686,
+	0xa438, 0xcde0, 0xa438, 0xd1ff, 0xa438, 0xd049, 0xa438, 0x1000,
+	0xa438, 0x1cd2, 0xa438, 0xd700, 0xa438, 0x5fba, 0xa438, 0xd705,
+	0xa438, 0x417e, 0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0xa011,
+	0xa438, 0x9503, 0xa438, 0xd1c8, 0xa438, 0xd045, 0xa438, 0x1000,
+	0xa438, 0x1cd2, 0xa438, 0xd700, 0xa438, 0x5fba, 0xa438, 0x0c03,
+	0xa438, 0x1502, 0xa438, 0xa702, 0xa438, 0x9503, 0xa438, 0xa00a,
+	0xa438, 0xa1a0, 0xa438, 0xa480, 0xa438, 0xa686, 0xa438, 0xd705,
+	0xa438, 0x605e, 0xa438, 0xa302, 0xa438, 0x9503, 0xa438, 0xd700,
+	0xa438, 0x37c9, 0xa438, 0x86c9, 0xa438, 0x33a9, 0xa438, 0x86c5,
+	0xa438, 0xd178, 0xa438, 0xd04b, 0xa438, 0x1800, 0xa438, 0x115d,
+	0xa438, 0xd1c8, 0xa438, 0xd04b, 0xa438, 0x1800, 0xa438, 0x115d,
+	0xa438, 0xd1e6, 0xa438, 0xd04b, 0xa438, 0x1800, 0xa438, 0x115d,
+	0xa438, 0xd71f, 0xa438, 0x6080, 0xa438, 0xd704, 0xa438, 0x1800,
+	0xa438, 0x1bc0, 0xa438, 0x1800, 0xa438, 0x1bc4, 0xa438, 0x4134,
+	0xa438, 0xd115, 0xa438, 0xd04f, 0xa438, 0x1000, 0xa438, 0x1d0b,
+	0xa438, 0x1000, 0xa438, 0x893a, 0xa438, 0x1800, 0xa438, 0x01f2,
+	0xa438, 0x1000, 0xa438, 0x1d0b, 0xa438, 0x1000, 0xa438, 0x893a,
+	0xa438, 0x1800, 0xa438, 0x01f9, 0xa438, 0x2969, 0xa438, 0x86e9,
+	0xa438, 0xd700, 0xa438, 0x606b, 0xa438, 0xd701, 0xa438, 0x60b4,
+	0xa438, 0x1000, 0xa438, 0x893a, 0xa438, 0x1800, 0xa438, 0x0551,
+	0xa438, 0xd196, 0xa438, 0xd04d, 0xa438, 0x1000, 0xa438, 0x893a,
+	0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0xd700, 0xa438, 0x5fba,
+	0xa438, 0x8802, 0xa438, 0xcd22, 0xa438, 0xd17a, 0xa438, 0xd05a,
+	0xa438, 0xa501, 0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0xd701,
+	0xa438, 0x5fbd, 0xa438, 0x8501, 0xa438, 0xa502, 0xa438, 0x1000,
+	0xa438, 0x1cd2, 0xa438, 0xd702, 0xa438, 0x5fbe, 0xa438, 0x0c03,
+	0xa438, 0x1502, 0xa438, 0x8380, 0xa438, 0x9503, 0xa438, 0xd403,
+	0xa438, 0x1000, 0xa438, 0x1cc8, 0xa438, 0x8502, 0xa438, 0x0c03,
+	0xa438, 0x1502, 0xa438, 0x8a80, 0xa438, 0x9503, 0xa438, 0xd40c,
+	0xa438, 0x1000, 0xa438, 0x1cc8, 0xa438, 0xd707, 0xa438, 0x428f,
+	0xa438, 0xd700, 0xa438, 0x60cf, 0xa438, 0x60f1, 0xa438, 0x6113,
+	0xa438, 0x6135, 0xa438, 0x6157, 0xa438, 0xf00b, 0xa438, 0xce06,
+	0xa438, 0xf01d, 0xa438, 0xce06, 0xa438, 0xf01b, 0xa438, 0xce06,
+	0xa438, 0xf019, 0xa438, 0xce06, 0xa438, 0xf017, 0xa438, 0xce06,
+	0xa438, 0xf015, 0xa438, 0xce06, 0xa438, 0xf013, 0xa438, 0xd700,
+	0xa438, 0x60cf, 0xa438, 0x60f1, 0xa438, 0x6113, 0xa438, 0x6135,
+	0xa438, 0x6157, 0xa438, 0xf00b, 0xa438, 0xce02, 0xa438, 0xf00a,
+	0xa438, 0xce02, 0xa438, 0xf008, 0xa438, 0xce01, 0xa438, 0xf006,
+	0xa438, 0xce01, 0xa438, 0xf004, 0xa438, 0xce01, 0xa438, 0xf002,
+	0xa438, 0xce01, 0xa438, 0x1000, 0xa438, 0x1ce7, 0xa438, 0xa340,
+	0xa438, 0x1000, 0xa438, 0x1d47, 0xa438, 0xa110, 0xa438, 0x1000,
+	0xa438, 0x1cef, 0xa438, 0x8110, 0xa438, 0x1000, 0xa438, 0x1d50,
+	0xa438, 0xa304, 0xa438, 0xa440, 0xa438, 0xa8c0, 0xa438, 0xd707,
+	0xa438, 0x40cf, 0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x8d07,
+	0xa438, 0x9503, 0xa438, 0xa00a, 0xa438, 0xa120, 0xa438, 0xa310,
+	0xa438, 0x0ca0, 0xa438, 0x0480, 0xa438, 0xd700, 0xa438, 0x2969,
+	0xa438, 0x05b7, 0xa438, 0x60a4, 0xa438, 0xd704, 0xa438, 0x407d,
+	0xa438, 0xa308, 0xa438, 0xf002, 0xa438, 0x8308, 0xa438, 0x0c03,
+	0xa438, 0x1502, 0xa438, 0x0c60, 0xa438, 0x0340, 0xa438, 0x9503,
+	0xa438, 0xcd23, 0xa438, 0xd162, 0xa438, 0xd048, 0xa438, 0x1000,
+	0xa438, 0x1cd2, 0xa438, 0xd700, 0xa438, 0x5fba, 0xa438, 0x8840,
+	0xa438, 0xd1c4, 0xa438, 0xd045, 0xa438, 0x1000, 0xa438, 0x1cd2,
+	0xa438, 0xd700, 0xa438, 0x5fba, 0xa438, 0xd706, 0xa438, 0x6327,
+	0xa438, 0xd700, 0xa438, 0x5f3b, 0xa438, 0x88c0, 0xa438, 0x800a,
+	0xa438, 0x8120, 0xa438, 0x8358, 0xa438, 0x8308, 0xa438, 0x84a0,
+	0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x8360, 0xa438, 0x9503,
+	0xa438, 0xd707, 0xa438, 0x2f7d, 0xa438, 0x86f7, 0xa438, 0xd17a,
+	0xa438, 0xd05a, 0xa438, 0xa501, 0xa438, 0x1000, 0xa438, 0x1cd2,
+	0xa438, 0xd701, 0xa438, 0x5fbd, 0xa438, 0x8501, 0xa438, 0xff8b,
+	0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0xd71f, 0xa438, 0x5fb4,
+	0xa438, 0xb920, 0xa438, 0xcd24, 0xa438, 0x1000, 0xa438, 0x1cd2,
+	0xa438, 0xd71f, 0xa438, 0x7fb4, 0xa438, 0x9920, 0xa438, 0x9a20,
+	0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0xd71f, 0xa438, 0x6065,
+	0xa438, 0x5f94, 0xa438, 0xffd9, 0xa438, 0xb820, 0xa438, 0x1000,
+	0xa438, 0x1cd2, 0xa438, 0xd71f, 0xa438, 0x7fa5, 0xa438, 0x9820,
+	0xa438, 0x800a, 0xa438, 0x8120, 0xa438, 0x1000, 0xa438, 0x1d47,
+	0xa438, 0xa108, 0xa438, 0x1000, 0xa438, 0x1cef, 0xa438, 0x8108,
+	0xa438, 0x1000, 0xa438, 0x1d50, 0xa438, 0xd700, 0xa438, 0x2969,
+	0xa438, 0x87b8, 0xa438, 0x6144, 0xa438, 0xd704, 0xa438, 0x60bd,
+	0xa438, 0xd707, 0xa438, 0x417f, 0xa438, 0x4140, 0xa438, 0xf006,
+	0xa438, 0x82fc, 0xa438, 0xa201, 0xa438, 0xf007, 0xa438, 0xa2fc,
+	0xa438, 0xf005, 0xa438, 0x0cfc, 0xa438, 0x02bc, 0xa438, 0xf002,
+	0xa438, 0xa2fc, 0xa438, 0xa304, 0xa438, 0x8880, 0xa438, 0x0cc0,
+	0xa438, 0x0440, 0xa438, 0xcd25, 0xa438, 0xd700, 0xa438, 0x2969,
+	0xa438, 0x87d7, 0xa438, 0x6224, 0xa438, 0xd704, 0xa438, 0x605d,
+	0xa438, 0xf004, 0xa438, 0xd704, 0xa438, 0x613b, 0xa438, 0xf00b,
+	0xa438, 0xd700, 0xa438, 0x2969, 0xa438, 0x87d7, 0xa438, 0x60eb,
+	0xa438, 0xd707, 0xa438, 0x40bf, 0xa438, 0x4080, 0xa438, 0x8310,
+	0xa438, 0x1000, 0xa438, 0x1d15, 0xa438, 0xd700, 0xa438, 0x60cf,
+	0xa438, 0x60f1, 0xa438, 0x6113, 0xa438, 0x6135, 0xa438, 0x6157,
+	0xa438, 0xf00b, 0xa438, 0xce06, 0xa438, 0xf00a, 0xa438, 0xce06,
+	0xa438, 0xf008, 0xa438, 0xce06, 0xa438, 0xf006, 0xa438, 0xce06,
+	0xa438, 0xf004, 0xa438, 0xce06, 0xa438, 0xf002, 0xa438, 0xce06,
+	0xa438, 0x1000, 0xa438, 0x1ce7, 0xa438, 0x0c03, 0xa438, 0x1502,
+	0xa438, 0x8c07, 0xa438, 0x0c07, 0xa438, 0x0d03, 0xa438, 0xd700,
+	0xa438, 0x2969, 0xa438, 0x87f9, 0xa438, 0x60c4, 0xa438, 0xd704,
+	0xa438, 0x409d, 0xa438, 0x8b0f, 0xa438, 0x8c38, 0xa438, 0xf003,
+	0xa438, 0xab07, 0xa438, 0xac38, 0xa438, 0x0c07, 0xa438, 0x0d03,
+	0xa438, 0x9503, 0xa438, 0xa810, 0xa438, 0xa00a, 0xa438, 0xa120,
+	0xa438, 0xd700, 0xa438, 0x2969, 0xa438, 0x8807, 0xa438, 0x6064,
+	0xa438, 0xd704, 0xa438, 0x607d, 0xa438, 0xa4a0, 0xa438, 0xa605,
+	0xa438, 0xd17a, 0xa438, 0xd049, 0xa438, 0xd700, 0xa438, 0x2969,
+	0xa438, 0x8819, 0xa438, 0x6164, 0xa438, 0xd704, 0xa438, 0x413d,
+	0xa438, 0xa00a, 0xa438, 0xa120, 0xa438, 0xd704, 0xa438, 0x407b,
+	0xa438, 0x8310, 0xa438, 0xf002, 0xa438, 0xa310, 0xa438, 0xa403,
+	0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0x1000, 0xa438, 0x1d2b,
+	0xa438, 0xd700, 0xa438, 0x409a, 0xa438, 0xd706, 0xa438, 0x4046,
+	0xa438, 0xf014, 0xa438, 0xd704, 0xa438, 0x6055, 0xa438, 0xfff5,
+	0xa438, 0x1000, 0xa438, 0x1d47, 0xa438, 0x800a, 0xa438, 0x8120,
+	0xa438, 0x8310, 0xa438, 0xa380, 0xa438, 0x1000, 0xa438, 0x1cd2,
+	0xa438, 0x1000, 0xa438, 0x1d2b, 0xa438, 0xd705, 0xa438, 0x5f77,
+	0xa438, 0x8380, 0xa438, 0x1000, 0xa438, 0x1d50, 0xa438, 0xffdd,
+	0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x8b0f, 0xa438, 0x8c38,
+	0xa438, 0x8d38, 0xa438, 0x9503, 0xa438, 0xcd26, 0xa438, 0xd704,
+	0xa438, 0x63d1, 0xa438, 0xd700, 0xa438, 0x2969, 0xa438, 0x8858,
+	0xa438, 0x37c9, 0xa438, 0x8855, 0xa438, 0x33a9, 0xa438, 0x884d,
+	0xa438, 0xd705, 0xa438, 0x6084, 0xa438, 0xd18a, 0xa438, 0xd04b,
+	0xa438, 0xf014, 0xa438, 0xd14c, 0xa438, 0xd04b, 0xa438, 0xf011,
+	0xa438, 0xd705, 0xa438, 0x6084, 0xa438, 0xd17a, 0xa438, 0xd04b,
+	0xa438, 0xf00c, 0xa438, 0xd15c, 0xa438, 0xd04b, 0xa438, 0xf009,
+	0xa438, 0xd1c6, 0xa438, 0xd04b, 0xa438, 0xf006, 0xa438, 0xd1b7,
+	0xa438, 0xd04a, 0xa438, 0xf003, 0xa438, 0xd1c4, 0xa438, 0xd046,
+	0xa438, 0xd700, 0xa438, 0x2969, 0xa438, 0x886b, 0xa438, 0x6164,
+	0xa438, 0xd704, 0xa438, 0x413d, 0xa438, 0xa00a, 0xa438, 0xa120,
+	0xa438, 0xd704, 0xa438, 0x407b, 0xa438, 0x8310, 0xa438, 0xf002,
+	0xa438, 0xa310, 0xa438, 0xa403, 0xa438, 0x1000, 0xa438, 0x1cd2,
+	0xa438, 0x1000, 0xa438, 0x1d2b, 0xa438, 0xd700, 0xa438, 0x409a,
+	0xa438, 0xd706, 0xa438, 0x4048, 0xa438, 0xf014, 0xa438, 0xd704,
+	0xa438, 0x6055, 0xa438, 0xfff5, 0xa438, 0x1000, 0xa438, 0x1d47,
+	0xa438, 0x800a, 0xa438, 0x8120, 0xa438, 0x8310, 0xa438, 0xa380,
+	0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0x1000, 0xa438, 0x1d2b,
+	0xa438, 0xd705, 0xa438, 0x5f77, 0xa438, 0x8380, 0xa438, 0x1000,
+	0xa438, 0x1d50, 0xa438, 0xffdd, 0xa438, 0x0c03, 0xa438, 0x1502,
+	0xa438, 0x0c07, 0xa438, 0x0d01, 0xa438, 0x9503, 0xa438, 0xd700,
+	0xa438, 0x60cf, 0xa438, 0x60f1, 0xa438, 0x6113, 0xa438, 0x6135,
+	0xa438, 0x6157, 0xa438, 0xf00b, 0xa438, 0xce08, 0xa438, 0xf00a,
+	0xa438, 0xce08, 0xa438, 0xf008, 0xa438, 0xce08, 0xa438, 0xf006,
+	0xa438, 0xce08, 0xa438, 0xf004, 0xa438, 0xce08, 0xa438, 0xf002,
+	0xa438, 0xce08, 0xa438, 0x1000, 0xa438, 0x1ce7, 0xa438, 0xa180,
+	0xa438, 0xcd27, 0xa438, 0xd704, 0xa438, 0x6331, 0xa438, 0xd700,
+	0xa438, 0x37c9, 0xa438, 0x88b9, 0xa438, 0x33a9, 0xa438, 0x88b1,
+	0xa438, 0xd705, 0xa438, 0x6084, 0xa438, 0xd17a, 0xa438, 0xd04a,
+	0xa438, 0xf011, 0xa438, 0xd13d, 0xa438, 0xd04a, 0xa438, 0xf00e,
+	0xa438, 0xd705, 0xa438, 0x6084, 0xa438, 0xd1b7, 0xa438, 0xd049,
+	0xa438, 0xf009, 0xa438, 0xd17a, 0xa438, 0xd049, 0xa438, 0xf006,
+	0xa438, 0xd17a, 0xa438, 0xd04a, 0xa438, 0xf003, 0xa438, 0xd128,
+	0xa438, 0xd044, 0xa438, 0xd13b, 0xa438, 0xd055, 0xa438, 0xd700,
+	0xa438, 0x2969, 0xa438, 0x88ce, 0xa438, 0x6164, 0xa438, 0xd704,
+	0xa438, 0x413d, 0xa438, 0xa00a, 0xa438, 0xa1a0, 0xa438, 0xd704,
+	0xa438, 0x407b, 0xa438, 0x8310, 0xa438, 0xf002, 0xa438, 0xa310,
+	0xa438, 0xa403, 0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0x1000,
+	0xa438, 0x1d2b, 0xa438, 0xd700, 0xa438, 0x405b, 0xa438, 0xf014,
+	0xa438, 0xd704, 0xa438, 0x6055, 0xa438, 0xfff7, 0xa438, 0x1000,
+	0xa438, 0x1d47, 0xa438, 0x800a, 0xa438, 0x81a0, 0xa438, 0x8310,
+	0xa438, 0xa380, 0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0x1000,
+	0xa438, 0x1d2b, 0xa438, 0xd705, 0xa438, 0x5f77, 0xa438, 0x8380,
+	0xa438, 0x1000, 0xa438, 0x1d50, 0xa438, 0xffdf, 0xa438, 0xa302,
+	0xa438, 0xd700, 0xa438, 0x2969, 0xa438, 0x0740, 0xa438, 0x6184,
+	0xa438, 0xd704, 0xa438, 0x415d, 0xa438, 0xa00a, 0xa438, 0xa1a0,
+	0xa438, 0xd704, 0xa438, 0x407b, 0xa438, 0x8310, 0xa438, 0xf002,
+	0xa438, 0xa310, 0xa438, 0xa302, 0xa438, 0xa403, 0xa438, 0x1000,
+	0xa438, 0x1cd2, 0xa438, 0x1000, 0xa438, 0x1d2b, 0xa438, 0xd700,
+	0xa438, 0x409a, 0xa438, 0xd706, 0xa438, 0x4048, 0xa438, 0xf014,
+	0xa438, 0xd704, 0xa438, 0x6055, 0xa438, 0xfff5, 0xa438, 0x1000,
+	0xa438, 0x1d47, 0xa438, 0x800a, 0xa438, 0x81a0, 0xa438, 0x8312,
+	0xa438, 0xa380, 0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0x1000,
+	0xa438, 0x1d2b, 0xa438, 0xd705, 0xa438, 0x5f77, 0xa438, 0x8380,
+	0xa438, 0x1000, 0xa438, 0x1d50, 0xa438, 0xffdc, 0xa438, 0x0c03,
+	0xa438, 0x1502, 0xa438, 0x0c0f, 0xa438, 0x0b02, 0xa438, 0x0c38,
+	0xa438, 0x0c10, 0xa438, 0x9503, 0xa438, 0xcd28, 0xa438, 0xd704,
+	0xa438, 0x6331, 0xa438, 0xd700, 0xa438, 0x37c9, 0xa438, 0x8933,
+	0xa438, 0x33a9, 0xa438, 0x892b, 0xa438, 0xd705, 0xa438, 0x6084,
+	0xa438, 0xd199, 0xa438, 0xd04a, 0xa438, 0xf011, 0xa438, 0xd13d,
+	0xa438, 0xd04a, 0xa438, 0xf00e, 0xa438, 0xd705, 0xa438, 0x6084,
+	0xa438, 0xd17a, 0xa438, 0xd04a, 0xa438, 0xf009, 0xa438, 0xd13d,
+	0xa438, 0xd04a, 0xa438, 0xf006, 0xa438, 0xd199, 0xa438, 0xd04a,
+	0xa438, 0xf003, 0xa438, 0xd128, 0xa438, 0xd044, 0xa438, 0x1800,
+	0xa438, 0x0776, 0xa438, 0xd208, 0xa438, 0x0c09, 0xa438, 0x1301,
+	0xa438, 0x1000, 0xa438, 0x1cd2, 0xa438, 0xd701, 0xa438, 0x5fa3,
+	0xa438, 0xb302, 0xa438, 0xd200, 0xa438, 0x0800, 0xa438, 0xd705,
+	0xa438, 0x6064, 0xa438, 0x1800, 0xa438, 0x140a, 0xa438, 0x8810,
+	0xa438, 0xd199, 0xa438, 0xd04b, 0xa438, 0x1000, 0xa438, 0x1cd2,
+	0xa438, 0xd700, 0xa438, 0x5fba, 0xa438, 0x1800, 0xa438, 0x140a,
+	0xa438, 0x8910, 0xa438, 0xd704, 0xa438, 0x61a8, 0xa438, 0x8480,
+	0xa438, 0x8604, 0xa438, 0x8302, 0xa438, 0x81a0, 0xa438, 0xd703,
+	0xa438, 0x4112, 0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0xa990,
+	0xa438, 0x9503, 0xa438, 0xb904, 0xa438, 0xf002, 0xa438, 0x0000,
+	0xa438, 0x0800, 0xa436, 0xA10E, 0xa438, 0x1de8, 0xa436, 0xA10C,
+	0xa438, 0x1352, 0xa436, 0xA10A, 0xa438, 0x0545, 0xa436, 0xA108,
+	0xa438, 0x01ed, 0xa436, 0xA106, 0xa438, 0x1bbf, 0xa436, 0xA104,
+	0xa438, 0x114b, 0xa436, 0xA102, 0xa438, 0x14bf, 0xa436, 0xA100,
+	0xa438, 0x07ce, 0xa436, 0xA110, 0xa438, 0x00ff, 0xa436, 0xA016,
+	0xa438, 0x0020, 0xa436, 0xA012, 0xa438, 0x1ff8, 0xa436, 0xA014,
 	0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000,
-	0xa438, 0x0000, 0xa438, 0x0000, 0xa436, 0xA164, 0xa438, 0x07fc,
-	0xa436, 0xA166, 0xa438, 0x143d, 0xa436, 0xA168, 0xa438, 0x3fff,
-	0xa436, 0xA16A, 0xa438, 0x3fff, 0xa436, 0xA16C, 0xa438, 0x3fff,
-	0xa436, 0xA16E, 0xa438, 0x3fff, 0xa436, 0xA170, 0xa438, 0x3fff,
-	0xa436, 0xA172, 0xa438, 0x3fff, 0xa436, 0xA162, 0xa438, 0x0003,
-	0xa436, 0xb87c, 0xa438, 0x8994, 0xa436, 0xb87e, 0xa438, 0xaf89,
-	0xa438, 0xacaf, 0xa438, 0x89e4, 0xa438, 0xaf89, 0xa438, 0xecaf,
-	0xa438, 0x8a04, 0xa438, 0xaf8a, 0xa438, 0x2eaf, 0xa438, 0x8a4a,
-	0xa438, 0xaf8d, 0xa438, 0x31af, 0xa438, 0x8dc6, 0xa438, 0x1f55,
-	0xa438, 0xe18f, 0xa438, 0xe3a1, 0xa438, 0x0007, 0xa438, 0xee86,
+	0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000,
+	0xa436, 0xA164, 0xa438, 0x143d, 0xa436, 0xA166, 0xa438, 0x14d7,
+	0xa436, 0xA168, 0xa438, 0x3fff, 0xa436, 0xA16A, 0xa438, 0x3fff,
+	0xa436, 0xA16C, 0xa438, 0x3fff, 0xa436, 0xA16E, 0xa438, 0x3fff,
+	0xa436, 0xA170, 0xa438, 0x3fff, 0xa436, 0xA172, 0xa438, 0x3fff,
+	0xa436, 0xA162, 0xa438, 0x0003, 0xa436, 0xb87c, 0xa438, 0x8994,
+	0xa436, 0xb87e, 0xa438, 0xaf89, 0xa438, 0xacaf, 0xa438, 0x89e8,
+	0xa438, 0xaf89, 0xa438, 0xf0af, 0xa438, 0x8a08, 0xa438, 0xaf8a,
+	0xa438, 0x32af, 0xa438, 0x8a4e, 0xa438, 0xaf8d, 0xa438, 0x44af,
+	0xa438, 0x8de9, 0xa438, 0x1f55, 0xa438, 0xe18f, 0xa438, 0xe3a1,
+	0xa438, 0x000b, 0xa438, 0xee8f, 0xa438, 0xd700, 0xa438, 0xee86,
 	0xa438, 0xe900, 0xa438, 0xaf4f, 0xa438, 0x9ead, 0xa438, 0x281b,
 	0xa438, 0xe18f, 0xa438, 0xfcef, 0xa438, 0x71bf, 0xa438, 0x74f6,
 	0xa438, 0x027e, 0xa438, 0xd2ef, 0xa438, 0x641c, 0xa438, 0x670d,
 	0xa438, 0x67ef, 0xa438, 0x461f, 0xa438, 0x00bf, 0xa438, 0x74f6,
 	0xa438, 0x027e, 0xa438, 0xdee1, 0xa438, 0x8fe3, 0xa438, 0x0d11,
-	0xa438, 0xe58f, 0xa438, 0xe313, 0xa438, 0xaeca, 0xa438, 0x028d,
-	0xa438, 0xd1d3, 0xa438, 0x01af, 0xa438, 0x40d1, 0xa438, 0xbf7a,
+	0xa438, 0xe58f, 0xa438, 0xe313, 0xa438, 0xaec6, 0xa438, 0x028d,
+	0xa438, 0xfbd3, 0xa438, 0x01af, 0xa438, 0x40d1, 0xa438, 0xbf7a,
 	0xa438, 0x6102, 0xa438, 0x7d44, 0xa438, 0xa100, 0xa438, 0x09e0,
 	0xa438, 0x8ffa, 0xa438, 0xe18f, 0xa438, 0xfbaf, 0xa438, 0x683d,
 	0xa438, 0x027f, 0xa438, 0xa9af, 0xa438, 0x682c, 0xa438, 0xbf8e,
-	0xa438, 0x4102, 0xa438, 0x7d44, 0xa438, 0xe58f, 0xa438, 0xecbf,
+	0xa438, 0x6b02, 0xa438, 0x7d44, 0xa438, 0xe58f, 0xa438, 0xecbf,
 	0xa438, 0x74cc, 0xa438, 0x027d, 0xa438, 0x44e3, 0xa438, 0x8fed,
 	0xa438, 0x0d31, 0xa438, 0xf63f, 0xa438, 0x0d11, 0xa438, 0xf62f,
-	0xa438, 0x1b13, 0xa438, 0xad2f, 0xa438, 0x06bf, 0xa438, 0x8e41,
+	0xa438, 0x1b13, 0xa438, 0xad2f, 0xa438, 0x06bf, 0xa438, 0x8e6b,
 	0xa438, 0x027c, 0xa438, 0xf9d1, 0xa438, 0x01af, 0xa438, 0x5974,
 	0xa438, 0xee88, 0xa438, 0x8600, 0xa438, 0xe08f, 0xa438, 0xebad,
-	0xa438, 0x200b, 0xa438, 0xe18f, 0xa438, 0xecbf, 0xa438, 0x8e41,
+	0xa438, 0x200b, 0xa438, 0xe18f, 0xa438, 0xecbf, 0xa438, 0x8e6b,
 	0xa438, 0x027d, 0xa438, 0x25ae, 0xa438, 0x04ee, 0xa438, 0x8feb,
 	0xa438, 0x01af, 0xa438, 0x5945, 0xa438, 0xad28, 0xa438, 0x2ce0,
-	0xa438, 0x8fea, 0xa438, 0xa000, 0xa438, 0x0502, 0xa438, 0x8af0,
-	0xa438, 0xae1e, 0xa438, 0xa001, 0xa438, 0x0502, 0xa438, 0x8b9f,
-	0xa438, 0xae16, 0xa438, 0xa002, 0xa438, 0x0502, 0xa438, 0x8c0f,
-	0xa438, 0xae0e, 0xa438, 0xa003, 0xa438, 0x0502, 0xa438, 0x8c95,
-	0xa438, 0xae06, 0xa438, 0xa004, 0xa438, 0x0302, 0xa438, 0x8d08,
-	0xa438, 0xaf63, 0xa438, 0x8902, 0xa438, 0x8a7f, 0xa438, 0xaf63,
+	0xa438, 0x8fea, 0xa438, 0xa000, 0xa438, 0x0502, 0xa438, 0x8af4,
+	0xa438, 0xae1e, 0xa438, 0xa001, 0xa438, 0x0502, 0xa438, 0x8ba3,
+	0xa438, 0xae16, 0xa438, 0xa002, 0xa438, 0x0502, 0xa438, 0x8c13,
+	0xa438, 0xae0e, 0xa438, 0xa003, 0xa438, 0x0502, 0xa438, 0x8c9f,
+	0xa438, 0xae06, 0xa438, 0xa004, 0xa438, 0x0302, 0xa438, 0x8d1b,
+	0xa438, 0xaf63, 0xa438, 0x8902, 0xa438, 0x8a83, 0xa438, 0xaf63,
 	0xa438, 0x81f8, 0xa438, 0xef49, 0xa438, 0xf8e0, 0xa438, 0x8015,
 	0xa438, 0xad21, 0xa438, 0x19bf, 0xa438, 0x7bd8, 0xa438, 0x027c,
 	0xa438, 0xf9bf, 0xa438, 0x7bf3, 0xa438, 0x027d, 0xa438, 0x44bf,
@@ -222,16 +816,16 @@ static const u16 phy_mcu_ram_code_8127a_1[] = {
 	0xa438, 0xee8f, 0xa438, 0xea00, 0xa438, 0xe080, 0xa438, 0x16ad,
 	0xa438, 0x233d, 0xa438, 0xbf7b, 0xa438, 0xf302, 0xa438, 0x7d44,
 	0xa438, 0xbf7a, 0xa438, 0x9402, 0xa438, 0x7cf9, 0xa438, 0xbf8e,
-	0xa438, 0x4402, 0xa438, 0x7cf9, 0xa438, 0xbf7a, 0xa438, 0xa602,
+	0xa438, 0x6e02, 0xa438, 0x7cf9, 0xa438, 0xbf7a, 0xa438, 0xa602,
 	0xa438, 0x7cf9, 0xa438, 0xbf7a, 0xa438, 0xa302, 0xa438, 0x7cf9,
 	0xa438, 0xbf7a, 0xa438, 0xa902, 0xa438, 0x7cf9, 0xa438, 0xbf7a,
-	0xa438, 0xac02, 0xa438, 0x7cf9, 0xa438, 0xbf8e, 0xa438, 0x4702,
-	0xa438, 0x7cf9, 0xa438, 0xbf8e, 0xa438, 0x4a02, 0xa438, 0x7cf9,
+	0xa438, 0xac02, 0xa438, 0x7cf9, 0xa438, 0xbf8e, 0xa438, 0x7102,
+	0xa438, 0x7cf9, 0xa438, 0xbf8e, 0xa438, 0x7402, 0xa438, 0x7cf9,
 	0xa438, 0x0263, 0xa438, 0x8eee, 0xa438, 0x8fea, 0xa438, 0x00bf,
 	0xa438, 0x7c02, 0xa438, 0x027c, 0xa438, 0xf9fc, 0xa438, 0xef94,
 	0xa438, 0xfc04, 0xa438, 0xf8f9, 0xa438, 0xfbef, 0xa438, 0x79fb,
 	0xa438, 0xe080, 0xa438, 0x15ac, 0xa438, 0x2103, 0xa438, 0xaf8b,
-	0xa438, 0x70ee, 0xa438, 0x8888, 0xa438, 0x00ee, 0xa438, 0x888a,
+	0xa438, 0x74ee, 0xa438, 0x8888, 0xa438, 0x00ee, 0xa438, 0x888a,
 	0xa438, 0x00ee, 0xa438, 0x888b, 0xa438, 0x00bf, 0xa438, 0x7bd8,
 	0xa438, 0x027d, 0xa438, 0x02bf, 0xa438, 0x6000, 0xa438, 0xd788,
 	0xa438, 0x881f, 0xa438, 0x44d4, 0xa438, 0x000c, 0xa438, 0x0273,
@@ -247,7 +841,7 @@ static const u16 phy_mcu_ram_code_8127a_1[] = {
 	0xa438, 0x0004, 0xa438, 0xf302, 0xa438, 0x63cd, 0xa438, 0xee8f,
 	0xa438, 0xea01, 0xa438, 0xe080, 0xa438, 0x16ad, 0xa438, 0x2319,
 	0xa438, 0xee88, 0xa438, 0x8800, 0xa438, 0xee88, 0xa438, 0x8a00,
-	0xa438, 0xee88, 0xa438, 0x8b00, 0xa438, 0xbf8e, 0xa438, 0x4402,
+	0xa438, 0xee88, 0xa438, 0x8b00, 0xa438, 0xbf8e, 0xa438, 0x6e02,
 	0xa438, 0x7d02, 0xa438, 0x0263, 0xa438, 0xcdee, 0xa438, 0x8fea,
 	0xa438, 0x0102, 0xa438, 0x70de, 0xa438, 0xbf7c, 0xa438, 0x0202,
 	0xa438, 0x7d02, 0xa438, 0xffef, 0xa438, 0x97ff, 0xa438, 0xfdfc,
@@ -261,293 +855,298 @@ static const u16 phy_mcu_ram_code_8127a_1[] = {
 	0xa438, 0x8016, 0xa438, 0xad23, 0xa438, 0x1602, 0xa438, 0x7c86,
 	0xa438, 0xef47, 0xa438, 0xe48f, 0xa438, 0xe9e5, 0xa438, 0x8fe8,
 	0xa438, 0xee8f, 0xa438, 0xea02, 0xa438, 0xae0b, 0xa438, 0x028c,
-	0xa438, 0x2eae, 0xa438, 0x0602, 0xa438, 0x8bfe, 0xa438, 0x0270,
+	0xa438, 0x32ae, 0xa438, 0x0602, 0xa438, 0x8c02, 0xa438, 0x0270,
 	0xa438, 0xdefe, 0xa438, 0xef96, 0xa438, 0xfefd, 0xa438, 0xfc04,
 	0xa438, 0xf8e1, 0xa438, 0x8888, 0xa438, 0x11e5, 0xa438, 0x8888,
 	0xa438, 0xad2a, 0xa438, 0x04ee, 0xa438, 0x8888, 0xa438, 0x00fc,
 	0xa438, 0x04f8, 0xa438, 0xfafb, 0xa438, 0xe08f, 0xa438, 0xe9e1,
 	0xa438, 0x8fe8, 0xa438, 0xef64, 0xa438, 0x1f00, 0xa438, 0xe18f,
 	0xa438, 0xe6ef, 0xa438, 0x7402, 0xa438, 0x7ca1, 0xa438, 0xad50,
-	0xa438, 0x0302, 0xa438, 0x8c2e, 0xa438, 0xfffe, 0xa438, 0xfc04,
-	0xa438, 0xf8fa, 0xa438, 0xef69, 0xa438, 0xfbbf, 0xa438, 0x7bf3,
-	0xa438, 0x027d, 0xa438, 0x44ac, 0xa438, 0x284c, 0xa438, 0x0264,
-	0xa438, 0x1cbf, 0xa438, 0x8e47, 0xa438, 0x027d, 0xa438, 0x02bf,
-	0xa438, 0x8e4a, 0xa438, 0x027d, 0xa438, 0x02d1, 0xa438, 0x43b1,
-	0xa438, 0xfebf, 0xa438, 0x7aa6, 0xa438, 0x027c, 0xa438, 0xf9bf,
-	0xa438, 0x7aa3, 0xa438, 0x027c, 0xa438, 0xf9bf, 0xa438, 0x7aa9,
-	0xa438, 0x027c, 0xa438, 0xf9bf, 0xa438, 0x7aac, 0xa438, 0x027d,
-	0xa438, 0x02d1, 0xa438, 0x80e0, 0xa438, 0x8888, 0xa438, 0x100e,
-	0xa438, 0x11b0, 0xa438, 0xfcbf, 0xa438, 0x7a94, 0xa438, 0x027d,
-	0xa438, 0x2502, 0xa438, 0x7c86, 0xa438, 0xef47, 0xa438, 0xe48f,
-	0xa438, 0xe9e5, 0xa438, 0x8fe8, 0xa438, 0xee8f, 0xa438, 0xea03,
-	0xa438, 0xae07, 0xa438, 0xee8f, 0xa438, 0xea01, 0xa438, 0x0270,
-	0xa438, 0xdeff, 0xa438, 0xef96, 0xa438, 0xfefc, 0xa438, 0x04f8,
-	0xa438, 0xf9fa, 0xa438, 0xfbef, 0xa438, 0x79fb, 0xa438, 0xbf7a,
-	0xa438, 0x9402, 0xa438, 0x7d44, 0xa438, 0xef21, 0xa438, 0xbf7a,
-	0xa438, 0xb802, 0xa438, 0x7d44, 0xa438, 0x1f21, 0xa438, 0x9e19,
-	0xa438, 0xe08f, 0xa438, 0xe9e1, 0xa438, 0x8fe8, 0xa438, 0xef64,
-	0xa438, 0x1f00, 0xa438, 0xe18f, 0xa438, 0xe4ef, 0xa438, 0x7402,
-	0xa438, 0x7ca1, 0xa438, 0xad50, 0xa438, 0x3dee, 0xa438, 0x8fe7,
-	0xa438, 0x01bf, 0xa438, 0x7a94, 0xa438, 0x027c, 0xa438, 0xf9bf,
+	0xa438, 0x0302, 0xa438, 0x8c32, 0xa438, 0xfffe, 0xa438, 0xfc04,
+	0xa438, 0xf8fa, 0xa438, 0xef69, 0xa438, 0xfbe0, 0xa438, 0x8fd6,
+	0xa438, 0xac20, 0xa438, 0x55bf, 0xa438, 0x7bf3, 0xa438, 0x027d,
+	0xa438, 0x44ac, 0xa438, 0x284c, 0xa438, 0x0264, 0xa438, 0x1cbf,
+	0xa438, 0x8e71, 0xa438, 0x027d, 0xa438, 0x02bf, 0xa438, 0x8e74,
+	0xa438, 0x027d, 0xa438, 0x02d1, 0xa438, 0x43b1, 0xa438, 0xfebf,
 	0xa438, 0x7aa6, 0xa438, 0x027c, 0xa438, 0xf9bf, 0xa438, 0x7aa3,
 	0xa438, 0x027c, 0xa438, 0xf9bf, 0xa438, 0x7aa9, 0xa438, 0x027c,
-	0xa438, 0xf9bf, 0xa438, 0x7aac, 0xa438, 0x027d, 0xa438, 0x02bf,
-	0xa438, 0x8e47, 0xa438, 0x027c, 0xa438, 0xf9bf, 0xa438, 0x8e4a,
-	0xa438, 0x027c, 0xa438, 0xf902, 0xa438, 0x7c86, 0xa438, 0xef47,
-	0xa438, 0xe48f, 0xa438, 0xe9e5, 0xa438, 0x8fe8, 0xa438, 0xee8f,
-	0xa438, 0xea04, 0xa438, 0xffef, 0xa438, 0x97ff, 0xa438, 0xfefd,
-	0xa438, 0xfc04, 0xa438, 0xf8fa, 0xa438, 0xfbe0, 0xa438, 0x8fe9,
-	0xa438, 0xe18f, 0xa438, 0xe8ef, 0xa438, 0x641f, 0xa438, 0x00e1,
-	0xa438, 0x8fe5, 0xa438, 0xef74, 0xa438, 0x027c, 0xa438, 0xa1ad,
-	0xa438, 0x500d, 0xa438, 0x0263, 0xa438, 0x8e02, 0xa438, 0x8bfe,
+	0xa438, 0xf9bf, 0xa438, 0x7aac, 0xa438, 0x027d, 0xa438, 0x02d1,
+	0xa438, 0x80e0, 0xa438, 0x8888, 0xa438, 0x100e, 0xa438, 0x11b0,
+	0xa438, 0xfcbf, 0xa438, 0x7a94, 0xa438, 0x027d, 0xa438, 0x2502,
+	0xa438, 0x7c86, 0xa438, 0xef47, 0xa438, 0xe48f, 0xa438, 0xe9e5,
+	0xa438, 0x8fe8, 0xa438, 0xee8f, 0xa438, 0xea03, 0xa438, 0xae07,
 	0xa438, 0xee8f, 0xa438, 0xea01, 0xa438, 0x0270, 0xa438, 0xdeff,
-	0xa438, 0xfefc, 0xa438, 0x04e3, 0xa438, 0x8fd8, 0xa438, 0xe787,
-	0xa438, 0x75e4, 0xa438, 0x8fe1, 0xa438, 0xe58f, 0xa438, 0xe2bf,
-	0xa438, 0x8fd9, 0xa438, 0xef32, 0xa438, 0x0c31, 0xa438, 0x1a93,
-	0xa438, 0xdc19, 0xa438, 0xdd02, 0xa438, 0x7fa9, 0xa438, 0xac2a,
-	0xa438, 0x18e0, 0xa438, 0x8fe1, 0xa438, 0xe18f, 0xa438, 0xe2ef,
-	0xa438, 0x74e1, 0xa438, 0x8775, 0xa438, 0x1f00, 0xa438, 0xef64,
-	0xa438, 0xe18f, 0xa438, 0xd8e5, 0xa438, 0x8775, 0xa438, 0xaf4d,
-	0xa438, 0x72bf, 0xa438, 0x7b3c, 0xa438, 0xef32, 0xa438, 0x4b03,
-	0xa438, 0x1a93, 0xa438, 0x027d, 0xa438, 0x44ef, 0xa438, 0x64e1,
-	0xa438, 0x8fff, 0xa438, 0x1f00, 0xa438, 0xef74, 0xa438, 0x1b67,
-	0xa438, 0xac4f, 0xa438, 0xcee0, 0xa438, 0x8ffd, 0xa438, 0xe18f,
-	0xa438, 0xfeef, 0xa438, 0x64e0, 0xa438, 0x8fe1, 0xa438, 0xe18f,
-	0xa438, 0xe2ef, 0xa438, 0x7402, 0xa438, 0x7c53, 0xa438, 0xac50,
-	0xa438, 0x02ae, 0xa438, 0xb6e1, 0xa438, 0x8775, 0xa438, 0x1f00,
-	0xa438, 0xef64, 0xa438, 0xe18f, 0xa438, 0xfcef, 0xa438, 0x711c,
-	0xa438, 0x670d, 0xa438, 0x67ef, 0xa438, 0x46e5, 0xa438, 0x8775,
-	0xa438, 0xef32, 0xa438, 0xd101, 0xa438, 0xa300, 0xa438, 0x02ae,
-	0xa438, 0x050c, 0xa438, 0x1183, 0xa438, 0xaef6, 0xa438, 0xe08f,
-	0xa438, 0xe31e, 0xa438, 0x10e5, 0xa438, 0x8fe3, 0xa438, 0xae89,
-	0xa438, 0xe287, 0xa438, 0x75e6, 0xa438, 0x8fd8, 0xa438, 0x1f22,
-	0xa438, 0xaf4d, 0xa438, 0x42f8, 0xa438, 0xf9ef, 0xa438, 0x59fa,
-	0xa438, 0xfbbf, 0xa438, 0x8fee, 0xa438, 0x027f, 0xa438, 0xa90d,
-	0xa438, 0x1149, 0xa438, 0x041a, 0xa438, 0x91d7, 0xa438, 0x8df3,
-	0xa438, 0xd68e, 0xa438, 0x2302, 0xa438, 0x72aa, 0xa438, 0xfffe,
-	0xa438, 0xef95, 0xa438, 0xfdfc, 0xa438, 0x0400, 0xa438, 0x7591,
-	0xa438, 0x0275, 0xa438, 0x4404, 0xa438, 0x758e, 0xa438, 0x2675,
-	0xa438, 0x4100, 0xa438, 0x8e26, 0xa438, 0x028e, 0xa438, 0x2304,
-	0xa438, 0x759d, 0xa438, 0x2675, 0xa438, 0x4700, 0xa438, 0x8e32,
-	0xa438, 0x028e, 0xa438, 0x2f04, 0xa438, 0x8e2c, 0xa438, 0x268e,
-	0xa438, 0x2900, 0xa438, 0x8e3e, 0xa438, 0x028e, 0xa438, 0x3b04,
-	0xa438, 0x8e38, 0xa438, 0x268e, 0xa438, 0x35fe, 0xa438, 0xad96,
-	0xa438, 0xdcad, 0xa438, 0x96ba, 0xa438, 0xad96, 0xa438, 0x98ad,
-	0xa438, 0x9676, 0xa438, 0xad98, 0xa438, 0x54ad, 0xa438, 0x9876,
-	0xa438, 0xae38, 0xa438, 0x54ae, 0xa438, 0x38fe, 0xa438, 0xae3a,
-	0xa438, 0xdcae, 0xa438, 0x3abb, 0xa438, 0xbf14, 0xa438, 0x99bd,
-	0xa438, 0xe0cc, 0xa438, 0xbdc8, 0xa438, 0xddbd, 0xa438, 0xc800,
-	0xa436, 0xb85e, 0xa438, 0x4f9a, 0xa436, 0xb860, 0xa438, 0x40cf,
-	0xa436, 0xb862, 0xa438, 0x6829, 0xa436, 0xb864, 0xa438, 0x5972,
-	0xa436, 0xb886, 0xa438, 0x5941, 0xa436, 0xb888, 0xa438, 0x636b,
-	0xa436, 0xb88a, 0xa438, 0x4d6b, 0xa436, 0xb88c, 0xa438, 0x4d40,
-	0xa436, 0xb838, 0xa438, 0x00ff, 0xb820, 0x0010, 0xa436, 0x8608,
-	0xa438, 0xaf86, 0xa438, 0xdaaf, 0xa438, 0x894c, 0xa438, 0xaf8a,
-	0xa438, 0xf8af, 0xa438, 0x8bf3, 0xa438, 0xaf8b, 0xa438, 0xf3af,
+	0xa438, 0xef96, 0xa438, 0xfefc, 0xa438, 0x04f8, 0xa438, 0xf9fa,
+	0xa438, 0xfbef, 0xa438, 0x79fb, 0xa438, 0xbf7b, 0xa438, 0xf302,
+	0xa438, 0x7d44, 0xa438, 0xac28, 0xa438, 0x2bbf, 0xa438, 0x7a94,
+	0xa438, 0x027d, 0xa438, 0x44ef, 0xa438, 0x21bf, 0xa438, 0x7ab8,
+	0xa438, 0x027d, 0xa438, 0x441f, 0xa438, 0x219e, 0xa438, 0x19e0,
+	0xa438, 0x8fe9, 0xa438, 0xe18f, 0xa438, 0xe8ef, 0xa438, 0x641f,
+	0xa438, 0x00e1, 0xa438, 0x8fe4, 0xa438, 0xef74, 0xa438, 0x027c,
+	0xa438, 0xa1ad, 0xa438, 0x503d, 0xa438, 0xee8f, 0xa438, 0xe701,
+	0xa438, 0xbf7a, 0xa438, 0x9402, 0xa438, 0x7cf9, 0xa438, 0xbf7a,
+	0xa438, 0xa602, 0xa438, 0x7cf9, 0xa438, 0xbf7a, 0xa438, 0xa302,
+	0xa438, 0x7cf9, 0xa438, 0xbf7a, 0xa438, 0xa902, 0xa438, 0x7cf9,
+	0xa438, 0xbf7a, 0xa438, 0xac02, 0xa438, 0x7d02, 0xa438, 0xbf8e,
+	0xa438, 0x7102, 0xa438, 0x7cf9, 0xa438, 0xbf8e, 0xa438, 0x7402,
+	0xa438, 0x7cf9, 0xa438, 0x027c, 0xa438, 0x86ef, 0xa438, 0x47e4,
+	0xa438, 0x8fe9, 0xa438, 0xe58f, 0xa438, 0xe8ee, 0xa438, 0x8fea,
+	0xa438, 0x04ff, 0xa438, 0xef97, 0xa438, 0xfffe, 0xa438, 0xfdfc,
+	0xa438, 0x04f8, 0xa438, 0xfafb, 0xa438, 0xe08f, 0xa438, 0xe9e1,
+	0xa438, 0x8fe8, 0xa438, 0xef64, 0xa438, 0x1f00, 0xa438, 0xe18f,
+	0xa438, 0xe5ef, 0xa438, 0x7402, 0xa438, 0x7ca1, 0xa438, 0xad50,
+	0xa438, 0x0d02, 0xa438, 0x638e, 0xa438, 0x028c, 0xa438, 0x02ee,
+	0xa438, 0x8fea, 0xa438, 0x0102, 0xa438, 0x70de, 0xa438, 0xfffe,
+	0xa438, 0xfc04, 0xa438, 0xe38f, 0xa438, 0xd7a3, 0xa438, 0x000a,
+	0xa438, 0xe387, 0xa438, 0x75e7, 0xa438, 0x8fd8, 0xa438, 0xee8f,
+	0xa438, 0xd701, 0xa438, 0xe38f, 0xa438, 0xd8e7, 0xa438, 0x8775,
+	0xa438, 0xe48f, 0xa438, 0xe1e5, 0xa438, 0x8fe2, 0xa438, 0xbf8f,
+	0xa438, 0xd9ef, 0xa438, 0x320c, 0xa438, 0x311a, 0xa438, 0x93dc,
+	0xa438, 0x19dd, 0xa438, 0x027f, 0xa438, 0xa9ac, 0xa438, 0x2a18,
+	0xa438, 0xe08f, 0xa438, 0xe1e1, 0xa438, 0x8fe2, 0xa438, 0xef74,
+	0xa438, 0xe187, 0xa438, 0x751f, 0xa438, 0x00ef, 0xa438, 0x64e1,
+	0xa438, 0x8fd8, 0xa438, 0xe587, 0xa438, 0x75af, 0xa438, 0x4d72,
+	0xa438, 0xbf7b, 0xa438, 0x3cef, 0xa438, 0x324b, 0xa438, 0x031a,
+	0xa438, 0x9302, 0xa438, 0x7d44, 0xa438, 0xef64, 0xa438, 0xe18f,
+	0xa438, 0xff1f, 0xa438, 0x00ef, 0xa438, 0x741b, 0xa438, 0x67ac,
+	0xa438, 0x4fce, 0xa438, 0xe08f, 0xa438, 0xfde1, 0xa438, 0x8ffe,
+	0xa438, 0xef64, 0xa438, 0xe08f, 0xa438, 0xe1e1, 0xa438, 0x8fe2,
+	0xa438, 0xef74, 0xa438, 0x027c, 0xa438, 0x53ac, 0xa438, 0x5002,
+	0xa438, 0xaeb6, 0xa438, 0xe187, 0xa438, 0x751f, 0xa438, 0x00ef,
+	0xa438, 0x64e1, 0xa438, 0x8ffc, 0xa438, 0xef71, 0xa438, 0x1c67,
+	0xa438, 0x0d67, 0xa438, 0xef46, 0xa438, 0xe587, 0xa438, 0x75ef,
+	0xa438, 0x32d1, 0xa438, 0x01a3, 0xa438, 0x0002, 0xa438, 0xae05,
+	0xa438, 0x0c11, 0xa438, 0x83ae, 0xa438, 0xf6e0, 0xa438, 0x8fe3,
+	0xa438, 0x1e10, 0xa438, 0xe58f, 0xa438, 0xe3ae, 0xa438, 0x89bf,
+	0xa438, 0x7bf3, 0xa438, 0x027d, 0xa438, 0x44e5, 0xa438, 0x8fd6,
+	0xa438, 0xad28, 0xa438, 0x03af, 0xa438, 0x606b, 0xa438, 0xaf60,
+	0xa438, 0xa0f8, 0xa438, 0xf9ef, 0xa438, 0x59fa, 0xa438, 0xfbbf,
+	0xa438, 0x8fee, 0xa438, 0x027f, 0xa438, 0xa90d, 0xa438, 0x1149,
+	0xa438, 0x041a, 0xa438, 0x91d7, 0xa438, 0x8e1d, 0xa438, 0xd68e,
+	0xa438, 0x4d02, 0xa438, 0x72aa, 0xa438, 0xfffe, 0xa438, 0xef95,
+	0xa438, 0xfdfc, 0xa438, 0x0400, 0xa438, 0x7591, 0xa438, 0x0275,
+	0xa438, 0x4404, 0xa438, 0x758e, 0xa438, 0x2675, 0xa438, 0x4100,
+	0xa438, 0x8e50, 0xa438, 0x028e, 0xa438, 0x4d04, 0xa438, 0x759d,
+	0xa438, 0x2675, 0xa438, 0x4700, 0xa438, 0x8e5c, 0xa438, 0x028e,
+	0xa438, 0x5904, 0xa438, 0x8e56, 0xa438, 0x268e, 0xa438, 0x5300,
+	0xa438, 0x8e68, 0xa438, 0x028e, 0xa438, 0x6504, 0xa438, 0x8e62,
+	0xa438, 0x268e, 0xa438, 0x5ffe, 0xa438, 0xad96, 0xa438, 0xdcad,
+	0xa438, 0x96ba, 0xa438, 0xad96, 0xa438, 0x98ad, 0xa438, 0x9676,
+	0xa438, 0xad98, 0xa438, 0x54ad, 0xa438, 0x9876, 0xa438, 0xae38,
+	0xa438, 0x54ae, 0xa438, 0x38fe, 0xa438, 0xae3a, 0xa438, 0xdcae,
+	0xa438, 0x3abb, 0xa438, 0xbf14, 0xa438, 0x99bd, 0xa438, 0xe0cc,
+	0xa438, 0xbdc8, 0xa438, 0xddbd, 0xa438, 0xc800, 0xa436, 0xb85e,
+	0xa438, 0x4f9a, 0xa436, 0xb860, 0xa438, 0x40cf, 0xa436, 0xb862,
+	0xa438, 0x6829, 0xa436, 0xb864, 0xa438, 0x5972, 0xa436, 0xb886,
+	0xa438, 0x5941, 0xa436, 0xb888, 0xa438, 0x636b, 0xa436, 0xb88a,
+	0xa438, 0x4d6b, 0xa436, 0xb88c, 0xa438, 0x6062, 0xa436, 0xb838,
+	0xa438, 0x00ff, 0xb820, 0x0010, 0xa436, 0x8608, 0xa438, 0xaf86,
+	0xa438, 0xdaaf, 0xa438, 0x894c, 0xa438, 0xaf8a, 0xa438, 0xf8af,
 	0xa438, 0x8bf3, 0xa438, 0xaf8b, 0xa438, 0xf3af, 0xa438, 0x8bf3,
-	0xa438, 0x006f, 0xa438, 0x4a03, 0xa438, 0x6f47, 0xa438, 0x266f,
-	0xa438, 0x5900, 0xa438, 0x6f4d, 0xa438, 0x016f, 0xa438, 0x5004,
-	0xa438, 0x6f56, 0xa438, 0x056f, 0xa438, 0x5f06, 0xa438, 0x6f5c,
-	0xa438, 0x2774, 0xa438, 0x7800, 0xa438, 0x6f68, 0xa438, 0x246f,
-	0xa438, 0x6b20, 0xa438, 0x6f6e, 0xa438, 0x206f, 0xa438, 0x7410,
-	0xa438, 0x7469, 0xa438, 0x1074, 0xa438, 0x6c10, 0xa438, 0x746f,
-	0xa438, 0x1074, 0xa438, 0x7225, 0xa438, 0x8bfc, 0xa438, 0x008c,
-	0xa438, 0x0802, 0xa438, 0x8c02, 0xa438, 0x038b, 0xa438, 0xff04,
-	0xa438, 0x6eed, 0xa438, 0x278c, 0xa438, 0x0520, 0xa438, 0x74da,
-	0xa438, 0x2074, 0xa438, 0xdd20, 0xa438, 0x74e0, 0xa438, 0x0074,
-	0xa438, 0xe300, 0xa438, 0x6ef3, 0xa438, 0x006e, 0xa438, 0xf600,
-	0xa438, 0x6ef9, 0xa438, 0x006e, 0xa438, 0xfc00, 0xa438, 0x6eff,
-	0xa438, 0x006f, 0xa438, 0x0200, 0xa438, 0x6f05, 0xa438, 0x026f,
-	0xa438, 0x0802, 0xa438, 0x6f0b, 0xa438, 0x026f, 0xa438, 0x0e02,
-	0xa438, 0x6f11, 0xa438, 0x026f, 0xa438, 0x1402, 0xa438, 0x6f17,
-	0xa438, 0x226f, 0xa438, 0x1a00, 0xa438, 0x723e, 0xa438, 0x016e,
-	0xa438, 0xed24, 0xa438, 0x6f50, 0xa438, 0x0072, 0xa438, 0x4701,
-	0xa438, 0x724a, 0xa438, 0x0272, 0xa438, 0x4d23, 0xa438, 0x7250,
-	0xa438, 0x1074, 0xa438, 0x6910, 0xa438, 0x746c, 0xa438, 0x1074,
-	0xa438, 0x6f00, 0xa438, 0x7472, 0xa438, 0x158c, 0xa438, 0x0b15,
-	0xa438, 0x8c0e, 0xa438, 0x158c, 0xa438, 0x1105, 0xa438, 0x8c14,
-	0xa438, 0x006f, 0xa438, 0x4a03, 0xa438, 0x6f47, 0xa438, 0x266f,
-	0xa438, 0x5900, 0xa438, 0x731f, 0xa438, 0x0273, 0xa438, 0x2203,
-	0xa438, 0x8c08, 0xa438, 0xee84, 0xa438, 0x7100, 0xa438, 0x0286,
-	0xa438, 0xece0, 0xa438, 0x8043, 0xa438, 0xf626, 0xa438, 0xe480,
-	0xa438, 0x43af, 0xa438, 0x6611, 0xa438, 0xf8e0, 0xa438, 0x8012,
-	0xa438, 0xac26, 0xa438, 0x03af, 0xa438, 0x86ff, 0xa438, 0x0287,
-	0xa438, 0x0102, 0xa438, 0x8906, 0xa438, 0x0289, 0xa438, 0x29fc,
-	0xa438, 0x04f8, 0xa438, 0xf9ef, 0xa438, 0x59f9, 0xa438, 0xfaee,
-	0xa438, 0x8476, 0xa438, 0x00d6, 0xa438, 0x008f, 0xa438, 0x0266,
-	0xa438, 0x53ef, 0xa438, 0x643e, 0xa438, 0x1200, 0xa438, 0xac4f,
-	0xa438, 0x08e4, 0xa438, 0x8fe7, 0xa438, 0xe58f, 0xa438, 0xe8ae,
-	0xa438, 0x06e0, 0xa438, 0x8fe7, 0xa438, 0xe18f, 0xa438, 0xe8ee,
-	0xa438, 0x8476, 0xa438, 0x01d6, 0xa438, 0x00c0, 0xa438, 0x0266,
-	0xa438, 0x71ee, 0xa438, 0x8476, 0xa438, 0x00d6, 0xa438, 0x0090,
-	0xa438, 0x0266, 0xa438, 0x53ef, 0xa438, 0x643e, 0xa438, 0x1200,
-	0xa438, 0xac4f, 0xa438, 0x08e4, 0xa438, 0x8fe9, 0xa438, 0xe58f,
-	0xa438, 0xeaae, 0xa438, 0x06e0, 0xa438, 0x8fe9, 0xa438, 0xe18f,
-	0xa438, 0xeaee, 0xa438, 0x8476, 0xa438, 0x01d6, 0xa438, 0x00c1,
-	0xa438, 0x0266, 0xa438, 0x71ee, 0xa438, 0x8476, 0xa438, 0x00d6,
-	0xa438, 0x0091, 0xa438, 0x0266, 0xa438, 0x53ef, 0xa438, 0x643e,
-	0xa438, 0x1200, 0xa438, 0xac4f, 0xa438, 0x08e4, 0xa438, 0x8feb,
-	0xa438, 0xe58f, 0xa438, 0xecae, 0xa438, 0x06e0, 0xa438, 0x8feb,
-	0xa438, 0xe18f, 0xa438, 0xecee, 0xa438, 0x8476, 0xa438, 0x01d6,
-	0xa438, 0x00c2, 0xa438, 0x0266, 0xa438, 0x71ee, 0xa438, 0x8476,
-	0xa438, 0x01d6, 0xa438, 0x008f, 0xa438, 0x0266, 0xa438, 0x53ef,
+	0xa438, 0xaf8b, 0xa438, 0xf3af, 0xa438, 0x8bf3, 0xa438, 0x006f,
+	0xa438, 0x4a03, 0xa438, 0x6f47, 0xa438, 0x266f, 0xa438, 0x5900,
+	0xa438, 0x6f4d, 0xa438, 0x016f, 0xa438, 0x5004, 0xa438, 0x6f56,
+	0xa438, 0x056f, 0xa438, 0x5f06, 0xa438, 0x6f5c, 0xa438, 0x2774,
+	0xa438, 0x7800, 0xa438, 0x6f68, 0xa438, 0x246f, 0xa438, 0x6b20,
+	0xa438, 0x6f6e, 0xa438, 0x206f, 0xa438, 0x7410, 0xa438, 0x7469,
+	0xa438, 0x1074, 0xa438, 0x6c10, 0xa438, 0x746f, 0xa438, 0x1074,
+	0xa438, 0x7225, 0xa438, 0x8bfc, 0xa438, 0x008c, 0xa438, 0x0802,
+	0xa438, 0x8c02, 0xa438, 0x038b, 0xa438, 0xff04, 0xa438, 0x6eed,
+	0xa438, 0x278c, 0xa438, 0x0520, 0xa438, 0x74da, 0xa438, 0x2074,
+	0xa438, 0xdd20, 0xa438, 0x74e0, 0xa438, 0x0074, 0xa438, 0xe300,
+	0xa438, 0x6ef3, 0xa438, 0x006e, 0xa438, 0xf600, 0xa438, 0x6ef9,
+	0xa438, 0x006e, 0xa438, 0xfc00, 0xa438, 0x6eff, 0xa438, 0x006f,
+	0xa438, 0x0200, 0xa438, 0x6f05, 0xa438, 0x026f, 0xa438, 0x0802,
+	0xa438, 0x6f0b, 0xa438, 0x026f, 0xa438, 0x0e02, 0xa438, 0x6f11,
+	0xa438, 0x026f, 0xa438, 0x1402, 0xa438, 0x6f17, 0xa438, 0x226f,
+	0xa438, 0x1a00, 0xa438, 0x723e, 0xa438, 0x016e, 0xa438, 0xed24,
+	0xa438, 0x6f50, 0xa438, 0x0072, 0xa438, 0x4701, 0xa438, 0x724a,
+	0xa438, 0x0272, 0xa438, 0x4d23, 0xa438, 0x7250, 0xa438, 0x1074,
+	0xa438, 0x6910, 0xa438, 0x746c, 0xa438, 0x1074, 0xa438, 0x6f00,
+	0xa438, 0x7472, 0xa438, 0x158c, 0xa438, 0x0b15, 0xa438, 0x8c0e,
+	0xa438, 0x158c, 0xa438, 0x1105, 0xa438, 0x8c14, 0xa438, 0x006f,
+	0xa438, 0x4a03, 0xa438, 0x6f47, 0xa438, 0x266f, 0xa438, 0x5900,
+	0xa438, 0x731f, 0xa438, 0x0273, 0xa438, 0x2203, 0xa438, 0x8c08,
+	0xa438, 0xee84, 0xa438, 0x7100, 0xa438, 0x0286, 0xa438, 0xece0,
+	0xa438, 0x8043, 0xa438, 0xf626, 0xa438, 0xe480, 0xa438, 0x43af,
+	0xa438, 0x6611, 0xa438, 0xf8e0, 0xa438, 0x8012, 0xa438, 0xac26,
+	0xa438, 0x03af, 0xa438, 0x86ff, 0xa438, 0x0287, 0xa438, 0x0102,
+	0xa438, 0x8906, 0xa438, 0x0289, 0xa438, 0x29fc, 0xa438, 0x04f8,
+	0xa438, 0xf9ef, 0xa438, 0x59f9, 0xa438, 0xfaee, 0xa438, 0x8476,
+	0xa438, 0x00d6, 0xa438, 0x008f, 0xa438, 0x0266, 0xa438, 0x53ef,
 	0xa438, 0x643e, 0xa438, 0x1200, 0xa438, 0xac4f, 0xa438, 0x08e4,
-	0xa438, 0x8fed, 0xa438, 0xe58f, 0xa438, 0xeeae, 0xa438, 0x06e0,
-	0xa438, 0x8fed, 0xa438, 0xe18f, 0xa438, 0xeeee, 0xa438, 0x8476,
-	0xa438, 0x02d6, 0xa438, 0x00c0, 0xa438, 0x0266, 0xa438, 0x71ee,
-	0xa438, 0x8476, 0xa438, 0x01d6, 0xa438, 0x0090, 0xa438, 0x0266,
+	0xa438, 0x8fe7, 0xa438, 0xe58f, 0xa438, 0xe8ae, 0xa438, 0x06e0,
+	0xa438, 0x8fe7, 0xa438, 0xe18f, 0xa438, 0xe8ee, 0xa438, 0x8476,
+	0xa438, 0x01d6, 0xa438, 0x00c0, 0xa438, 0x0266, 0xa438, 0x71ee,
+	0xa438, 0x8476, 0xa438, 0x00d6, 0xa438, 0x0090, 0xa438, 0x0266,
 	0xa438, 0x53ef, 0xa438, 0x643e, 0xa438, 0x1200, 0xa438, 0xac4f,
-	0xa438, 0x08e4, 0xa438, 0x8fef, 0xa438, 0xe58f, 0xa438, 0xf0ae,
-	0xa438, 0x06e0, 0xa438, 0x8fef, 0xa438, 0xe18f, 0xa438, 0xf0ee,
-	0xa438, 0x8476, 0xa438, 0x02d6, 0xa438, 0x00c1, 0xa438, 0x0266,
-	0xa438, 0x71ee, 0xa438, 0x8476, 0xa438, 0x01d6, 0xa438, 0x0091,
+	0xa438, 0x08e4, 0xa438, 0x8fe9, 0xa438, 0xe58f, 0xa438, 0xeaae,
+	0xa438, 0x06e0, 0xa438, 0x8fe9, 0xa438, 0xe18f, 0xa438, 0xeaee,
+	0xa438, 0x8476, 0xa438, 0x01d6, 0xa438, 0x00c1, 0xa438, 0x0266,
+	0xa438, 0x71ee, 0xa438, 0x8476, 0xa438, 0x00d6, 0xa438, 0x0091,
 	0xa438, 0x0266, 0xa438, 0x53ef, 0xa438, 0x643e, 0xa438, 0x1200,
-	0xa438, 0xac4f, 0xa438, 0x08e4, 0xa438, 0x8ff1, 0xa438, 0xe58f,
-	0xa438, 0xf2ae, 0xa438, 0x06e0, 0xa438, 0x8ff1, 0xa438, 0xe18f,
-	0xa438, 0xf2ee, 0xa438, 0x8476, 0xa438, 0x02d6, 0xa438, 0x00c2,
-	0xa438, 0x0266, 0xa438, 0x71ee, 0xa438, 0x8476, 0xa438, 0x02d6,
+	0xa438, 0xac4f, 0xa438, 0x08e4, 0xa438, 0x8feb, 0xa438, 0xe58f,
+	0xa438, 0xecae, 0xa438, 0x06e0, 0xa438, 0x8feb, 0xa438, 0xe18f,
+	0xa438, 0xecee, 0xa438, 0x8476, 0xa438, 0x01d6, 0xa438, 0x00c2,
+	0xa438, 0x0266, 0xa438, 0x71ee, 0xa438, 0x8476, 0xa438, 0x01d6,
 	0xa438, 0x008f, 0xa438, 0x0266, 0xa438, 0x53ef, 0xa438, 0x643e,
-	0xa438, 0x1200, 0xa438, 0xac4f, 0xa438, 0x08e4, 0xa438, 0x8ff3,
-	0xa438, 0xe58f, 0xa438, 0xf4ae, 0xa438, 0x06e0, 0xa438, 0x8ff3,
-	0xa438, 0xe18f, 0xa438, 0xf4ee, 0xa438, 0x8476, 0xa438, 0x04d6,
+	0xa438, 0x1200, 0xa438, 0xac4f, 0xa438, 0x08e4, 0xa438, 0x8fed,
+	0xa438, 0xe58f, 0xa438, 0xeeae, 0xa438, 0x06e0, 0xa438, 0x8fed,
+	0xa438, 0xe18f, 0xa438, 0xeeee, 0xa438, 0x8476, 0xa438, 0x02d6,
 	0xa438, 0x00c0, 0xa438, 0x0266, 0xa438, 0x71ee, 0xa438, 0x8476,
-	0xa438, 0x02d6, 0xa438, 0x0090, 0xa438, 0x0266, 0xa438, 0x53ef,
+	0xa438, 0x01d6, 0xa438, 0x0090, 0xa438, 0x0266, 0xa438, 0x53ef,
 	0xa438, 0x643e, 0xa438, 0x1200, 0xa438, 0xac4f, 0xa438, 0x08e4,
-	0xa438, 0x8ff5, 0xa438, 0xe58f, 0xa438, 0xf6ae, 0xa438, 0x06e0,
-	0xa438, 0x8ff5, 0xa438, 0xe18f, 0xa438, 0xf6ee, 0xa438, 0x8476,
-	0xa438, 0x04d6, 0xa438, 0x00c1, 0xa438, 0x0266, 0xa438, 0x71ee,
-	0xa438, 0x8476, 0xa438, 0x02d6, 0xa438, 0x0091, 0xa438, 0x0266,
+	0xa438, 0x8fef, 0xa438, 0xe58f, 0xa438, 0xf0ae, 0xa438, 0x06e0,
+	0xa438, 0x8fef, 0xa438, 0xe18f, 0xa438, 0xf0ee, 0xa438, 0x8476,
+	0xa438, 0x02d6, 0xa438, 0x00c1, 0xa438, 0x0266, 0xa438, 0x71ee,
+	0xa438, 0x8476, 0xa438, 0x01d6, 0xa438, 0x0091, 0xa438, 0x0266,
 	0xa438, 0x53ef, 0xa438, 0x643e, 0xa438, 0x1200, 0xa438, 0xac4f,
-	0xa438, 0x08e4, 0xa438, 0x8ff7, 0xa438, 0xe58f, 0xa438, 0xf8ae,
-	0xa438, 0x06e0, 0xa438, 0x8ff7, 0xa438, 0xe18f, 0xa438, 0xf8ee,
-	0xa438, 0x8476, 0xa438, 0x04d6, 0xa438, 0x00c2, 0xa438, 0x0266,
-	0xa438, 0x71ee, 0xa438, 0x8476, 0xa438, 0x03d6, 0xa438, 0x008f,
+	0xa438, 0x08e4, 0xa438, 0x8ff1, 0xa438, 0xe58f, 0xa438, 0xf2ae,
+	0xa438, 0x06e0, 0xa438, 0x8ff1, 0xa438, 0xe18f, 0xa438, 0xf2ee,
+	0xa438, 0x8476, 0xa438, 0x02d6, 0xa438, 0x00c2, 0xa438, 0x0266,
+	0xa438, 0x71ee, 0xa438, 0x8476, 0xa438, 0x02d6, 0xa438, 0x008f,
 	0xa438, 0x0266, 0xa438, 0x53ef, 0xa438, 0x643e, 0xa438, 0x1200,
-	0xa438, 0xac4f, 0xa438, 0x08e4, 0xa438, 0x8ff9, 0xa438, 0xe58f,
-	0xa438, 0xfaae, 0xa438, 0x06e0, 0xa438, 0x8ff9, 0xa438, 0xe18f,
-	0xa438, 0xfaee, 0xa438, 0x8476, 0xa438, 0x08d6, 0xa438, 0x00c0,
-	0xa438, 0x0266, 0xa438, 0x71ee, 0xa438, 0x8476, 0xa438, 0x03d6,
+	0xa438, 0xac4f, 0xa438, 0x08e4, 0xa438, 0x8ff3, 0xa438, 0xe58f,
+	0xa438, 0xf4ae, 0xa438, 0x06e0, 0xa438, 0x8ff3, 0xa438, 0xe18f,
+	0xa438, 0xf4ee, 0xa438, 0x8476, 0xa438, 0x04d6, 0xa438, 0x00c0,
+	0xa438, 0x0266, 0xa438, 0x71ee, 0xa438, 0x8476, 0xa438, 0x02d6,
 	0xa438, 0x0090, 0xa438, 0x0266, 0xa438, 0x53ef, 0xa438, 0x643e,
-	0xa438, 0x1200, 0xa438, 0xac4f, 0xa438, 0x08e4, 0xa438, 0x8ffb,
-	0xa438, 0xe58f, 0xa438, 0xfcae, 0xa438, 0x06e0, 0xa438, 0x8ffb,
-	0xa438, 0xe18f, 0xa438, 0xfcee, 0xa438, 0x8476, 0xa438, 0x08d6,
+	0xa438, 0x1200, 0xa438, 0xac4f, 0xa438, 0x08e4, 0xa438, 0x8ff5,
+	0xa438, 0xe58f, 0xa438, 0xf6ae, 0xa438, 0x06e0, 0xa438, 0x8ff5,
+	0xa438, 0xe18f, 0xa438, 0xf6ee, 0xa438, 0x8476, 0xa438, 0x04d6,
 	0xa438, 0x00c1, 0xa438, 0x0266, 0xa438, 0x71ee, 0xa438, 0x8476,
-	0xa438, 0x03d6, 0xa438, 0x0091, 0xa438, 0x0266, 0xa438, 0x53ef,
+	0xa438, 0x02d6, 0xa438, 0x0091, 0xa438, 0x0266, 0xa438, 0x53ef,
 	0xa438, 0x643e, 0xa438, 0x1200, 0xa438, 0xac4f, 0xa438, 0x08e4,
-	0xa438, 0x8ffd, 0xa438, 0xe58f, 0xa438, 0xfeae, 0xa438, 0x06e0,
-	0xa438, 0x8ffd, 0xa438, 0xe18f, 0xa438, 0xfeee, 0xa438, 0x8476,
-	0xa438, 0x08d6, 0xa438, 0x00c2, 0xa438, 0x0266, 0xa438, 0x71fe,
-	0xa438, 0xfdef, 0xa438, 0x95fd, 0xa438, 0xfc04, 0xa438, 0xf8f9,
-	0xa438, 0xfad4, 0xa438, 0x0400, 0xa438, 0xd600, 0xa438, 0x0dd3,
-	0xa438, 0x0fe7, 0xa438, 0x8476, 0xa438, 0x0266, 0xa438, 0x71d4,
-	0xa438, 0x1400, 0xa438, 0xd600, 0xa438, 0x0dd3, 0xa438, 0x0fe7,
-	0xa438, 0x8476, 0xa438, 0x0266, 0xa438, 0x71fe, 0xa438, 0xfdfc,
-	0xa438, 0x04f8, 0xa438, 0xf9fa, 0xa438, 0xd410, 0xa438, 0x00d6,
-	0xa438, 0x000d, 0xa438, 0xd30f, 0xa438, 0xe784, 0xa438, 0x7602,
-	0xa438, 0x6671, 0xa438, 0xd400, 0xa438, 0x00d6, 0xa438, 0x000d,
+	0xa438, 0x8ff7, 0xa438, 0xe58f, 0xa438, 0xf8ae, 0xa438, 0x06e0,
+	0xa438, 0x8ff7, 0xa438, 0xe18f, 0xa438, 0xf8ee, 0xa438, 0x8476,
+	0xa438, 0x04d6, 0xa438, 0x00c2, 0xa438, 0x0266, 0xa438, 0x71ee,
+	0xa438, 0x8476, 0xa438, 0x03d6, 0xa438, 0x008f, 0xa438, 0x0266,
+	0xa438, 0x53ef, 0xa438, 0x643e, 0xa438, 0x1200, 0xa438, 0xac4f,
+	0xa438, 0x08e4, 0xa438, 0x8ff9, 0xa438, 0xe58f, 0xa438, 0xfaae,
+	0xa438, 0x06e0, 0xa438, 0x8ff9, 0xa438, 0xe18f, 0xa438, 0xfaee,
+	0xa438, 0x8476, 0xa438, 0x08d6, 0xa438, 0x00c0, 0xa438, 0x0266,
+	0xa438, 0x71ee, 0xa438, 0x8476, 0xa438, 0x03d6, 0xa438, 0x0090,
+	0xa438, 0x0266, 0xa438, 0x53ef, 0xa438, 0x643e, 0xa438, 0x1200,
+	0xa438, 0xac4f, 0xa438, 0x08e4, 0xa438, 0x8ffb, 0xa438, 0xe58f,
+	0xa438, 0xfcae, 0xa438, 0x06e0, 0xa438, 0x8ffb, 0xa438, 0xe18f,
+	0xa438, 0xfcee, 0xa438, 0x8476, 0xa438, 0x08d6, 0xa438, 0x00c1,
+	0xa438, 0x0266, 0xa438, 0x71ee, 0xa438, 0x8476, 0xa438, 0x03d6,
+	0xa438, 0x0091, 0xa438, 0x0266, 0xa438, 0x53ef, 0xa438, 0x643e,
+	0xa438, 0x1200, 0xa438, 0xac4f, 0xa438, 0x08e4, 0xa438, 0x8ffd,
+	0xa438, 0xe58f, 0xa438, 0xfeae, 0xa438, 0x06e0, 0xa438, 0x8ffd,
+	0xa438, 0xe18f, 0xa438, 0xfeee, 0xa438, 0x8476, 0xa438, 0x08d6,
+	0xa438, 0x00c2, 0xa438, 0x0266, 0xa438, 0x71fe, 0xa438, 0xfdef,
+	0xa438, 0x95fd, 0xa438, 0xfc04, 0xa438, 0xf8f9, 0xa438, 0xfad4,
+	0xa438, 0x0400, 0xa438, 0xd600, 0xa438, 0x0dd3, 0xa438, 0x0fe7,
+	0xa438, 0x8476, 0xa438, 0x0266, 0xa438, 0x71d4, 0xa438, 0x1400,
+	0xa438, 0xd600, 0xa438, 0x0dd3, 0xa438, 0x0fe7, 0xa438, 0x8476,
+	0xa438, 0x0266, 0xa438, 0x71fe, 0xa438, 0xfdfc, 0xa438, 0x04f8,
+	0xa438, 0xf9fa, 0xa438, 0xd410, 0xa438, 0x00d6, 0xa438, 0x000d,
 	0xa438, 0xd30f, 0xa438, 0xe784, 0xa438, 0x7602, 0xa438, 0x6671,
-	0xa438, 0xfefd, 0xa438, 0xfc04, 0xa438, 0xe080, 0xa438, 0x4fac,
-	0xa438, 0x2317, 0xa438, 0xe080, 0xa438, 0x44ad, 0xa438, 0x231a,
-	0xa438, 0x0289, 0xa438, 0x75e0, 0xa438, 0x8044, 0xa438, 0xac23,
-	0xa438, 0x11bf, 0xa438, 0x6ecf, 0xa438, 0x0276, 0xa438, 0x74ae,
-	0xa438, 0x0902, 0xa438, 0x8adb, 0xa438, 0x021f, 0xa438, 0xe702,
-	0xa438, 0x1fbb, 0xa438, 0xaf1f, 0xa438, 0x95f8, 0xa438, 0xf9ef,
-	0xa438, 0x59f9, 0xa438, 0xfafb, 0xa438, 0xe080, 0xa438, 0x12ac,
-	0xa438, 0x2303, 0xa438, 0xaf8a, 0xa438, 0xd0d4, 0xa438, 0x0120,
-	0xa438, 0xd600, 0xa438, 0x10d2, 0xa438, 0x0fe6, 0xa438, 0x8476,
-	0xa438, 0x0266, 0xa438, 0x71ee, 0xa438, 0x846f, 0xa438, 0x00d4,
-	0xa438, 0x000f, 0xa438, 0xbf72, 0xa438, 0x9e02, 0xa438, 0x7697,
-	0xa438, 0x0275, 0xa438, 0xbeef, 0xa438, 0x47e4, 0xa438, 0x8474,
-	0xa438, 0xe584, 0xa438, 0x75bf, 0xa438, 0x729b, 0xa438, 0x0276,
-	0xa438, 0xb6e5, 0xa438, 0x846f, 0xa438, 0xef31, 0xa438, 0xbf6e,
+	0xa438, 0xd400, 0xa438, 0x00d6, 0xa438, 0x000d, 0xa438, 0xd30f,
+	0xa438, 0xe784, 0xa438, 0x7602, 0xa438, 0x6671, 0xa438, 0xfefd,
+	0xa438, 0xfc04, 0xa438, 0xe080, 0xa438, 0x4fac, 0xa438, 0x2317,
+	0xa438, 0xe080, 0xa438, 0x44ad, 0xa438, 0x231a, 0xa438, 0x0289,
+	0xa438, 0x75e0, 0xa438, 0x8044, 0xa438, 0xac23, 0xa438, 0x11bf,
+	0xa438, 0x6ecf, 0xa438, 0x0276, 0xa438, 0x74ae, 0xa438, 0x0902,
+	0xa438, 0x8adb, 0xa438, 0x021f, 0xa438, 0xe702, 0xa438, 0x1fbb,
+	0xa438, 0xaf1f, 0xa438, 0x95f8, 0xa438, 0xf9ef, 0xa438, 0x59f9,
+	0xa438, 0xfafb, 0xa438, 0xe080, 0xa438, 0x12ac, 0xa438, 0x2303,
+	0xa438, 0xaf8a, 0xa438, 0xd0d4, 0xa438, 0x0120, 0xa438, 0xd600,
+	0xa438, 0x10d2, 0xa438, 0x0fe6, 0xa438, 0x8476, 0xa438, 0x0266,
+	0xa438, 0x71ee, 0xa438, 0x846f, 0xa438, 0x00d4, 0xa438, 0x000f,
+	0xa438, 0xbf72, 0xa438, 0x9e02, 0xa438, 0x7697, 0xa438, 0x0275,
+	0xa438, 0xbeef, 0xa438, 0x47e4, 0xa438, 0x8474, 0xa438, 0xe584,
+	0xa438, 0x75bf, 0xa438, 0x729b, 0xa438, 0x0276, 0xa438, 0xb6e5,
+	0xa438, 0x846f, 0xa438, 0xef31, 0xa438, 0xbf6e, 0xa438, 0x0602,
+	0xa438, 0x76b6, 0xa438, 0xef64, 0xa438, 0xbf6e, 0xa438, 0x0902,
+	0xa438, 0x76b6, 0xa438, 0x1e64, 0xa438, 0xbf6e, 0xa438, 0x0f02,
+	0xa438, 0x76b6, 0xa438, 0x1e64, 0xa438, 0xac40, 0xa438, 0x05a3,
+	0xa438, 0x0f0c, 0xa438, 0xae26, 0xa438, 0xa303, 0xa438, 0x02ae,
+	0xa438, 0x21a3, 0xa438, 0x0c02, 0xa438, 0xae1c, 0xa438, 0xe084,
+	0xa438, 0x74e1, 0xa438, 0x8475, 0xa438, 0xef64, 0xa438, 0xd000,
+	0xa438, 0xd196, 0xa438, 0xef74, 0xa438, 0x0275, 0xa438, 0xd9ad,
+	0xa438, 0x50b7, 0xa438, 0xe083, 0xa438, 0xecf7, 0xa438, 0x23e4,
+	0xa438, 0x83ec, 0xa438, 0xbf72, 0xa438, 0x9e02, 0xa438, 0x766b,
+	0xa438, 0x0287, 0xa438, 0x0102, 0xa438, 0x8906, 0xa438, 0xee83,
+	0xa438, 0xe800, 0xa438, 0xbf72, 0xa438, 0x6b02, 0xa438, 0x766b,
+	0xa438, 0xbf72, 0xa438, 0x6e02, 0xa438, 0x766b, 0xa438, 0xbf72,
+	0xa438, 0x7102, 0xa438, 0x766b, 0xa438, 0xbf72, 0xa438, 0x7402,
+	0xa438, 0x766b, 0xa438, 0xbf72, 0xa438, 0x7702, 0xa438, 0x766b,
+	0xa438, 0xbf72, 0xa438, 0x7a02, 0xa438, 0x766b, 0xa438, 0xd400,
+	0xa438, 0x0fbf, 0xa438, 0x7295, 0xa438, 0x0276, 0xa438, 0x97d7,
+	0xa438, 0x0400, 0xa438, 0xbf6e, 0xa438, 0x0602, 0xa438, 0x76b6,
+	0xa438, 0xef64, 0xa438, 0xbf6e, 0xa438, 0x0902, 0xa438, 0x76b6,
+	0xa438, 0x1e64, 0xa438, 0xbf6e, 0xa438, 0x0f02, 0xa438, 0x76b6,
+	0xa438, 0x1e64, 0xa438, 0xac40, 0xa438, 0x0fbf, 0xa438, 0x7298,
+	0xa438, 0x0276, 0xa438, 0xb6e5, 0xa438, 0x83e8, 0xa438, 0xa10f,
+	0xa438, 0x28af, 0xa438, 0x8a95, 0xa438, 0xbf8b, 0xa438, 0xf302,
+	0xa438, 0x76b6, 0xa438, 0xac28, 0xa438, 0x02ae, 0xa438, 0x0bbf,
+	0xa438, 0x8bf9, 0xa438, 0x0276, 0xa438, 0xb6e5, 0xa438, 0x83e8,
+	0xa438, 0xae09, 0xa438, 0xbf8b, 0xa438, 0xf602, 0xa438, 0x76b6,
+	0xa438, 0xe583, 0xa438, 0xe8a1, 0xa438, 0x0303, 0xa438, 0xaf8a,
+	0xa438, 0x95b7, 0xa438, 0xafe2, 0xa438, 0x83ec, 0xa438, 0xf735,
+	0xa438, 0xe683, 0xa438, 0xecbf, 0xa438, 0x7295, 0xa438, 0x0276,
+	0xa438, 0x6bbf, 0xa438, 0x726b, 0xa438, 0x0276, 0xa438, 0x74bf,
+	0xa438, 0x726e, 0xa438, 0x0276, 0xa438, 0x74bf, 0xa438, 0x7271,
+	0xa438, 0x0276, 0xa438, 0x74bf, 0xa438, 0x7274, 0xa438, 0x0276,
+	0xa438, 0x74bf, 0xa438, 0x7277, 0xa438, 0x0276, 0xa438, 0x74bf,
+	0xa438, 0x727a, 0xa438, 0x0276, 0xa438, 0x7402, 0xa438, 0x8929,
+	0xa438, 0xd401, 0xa438, 0x28d6, 0xa438, 0x0010, 0xa438, 0xd20f,
+	0xa438, 0xe684, 0xa438, 0x7602, 0xa438, 0x6671, 0xa438, 0x021f,
+	0xa438, 0xbbff, 0xa438, 0xfefd, 0xa438, 0xef95, 0xa438, 0xfdfc,
+	0xa438, 0x04f8, 0xa438, 0xf9ef, 0xa438, 0x59f9, 0xa438, 0xe080,
+	0xa438, 0x12ad, 0xa438, 0x230c, 0xa438, 0xbf72, 0xa438, 0x9e02,
+	0xa438, 0x766b, 0xa438, 0xbf72, 0xa438, 0x9502, 0xa438, 0x766b,
+	0xa438, 0xfdef, 0xa438, 0x95fd, 0xa438, 0xfc04, 0xa438, 0xbf6e,
 	0xa438, 0x0602, 0xa438, 0x76b6, 0xa438, 0xef64, 0xa438, 0xbf6e,
 	0xa438, 0x0902, 0xa438, 0x76b6, 0xa438, 0x1e64, 0xa438, 0xbf6e,
 	0xa438, 0x0f02, 0xa438, 0x76b6, 0xa438, 0x1e64, 0xa438, 0xac40,
-	0xa438, 0x05a3, 0xa438, 0x0f0c, 0xa438, 0xae26, 0xa438, 0xa303,
-	0xa438, 0x02ae, 0xa438, 0x21a3, 0xa438, 0x0c02, 0xa438, 0xae1c,
-	0xa438, 0xe084, 0xa438, 0x74e1, 0xa438, 0x8475, 0xa438, 0xef64,
-	0xa438, 0xd000, 0xa438, 0xd196, 0xa438, 0xef74, 0xa438, 0x0275,
-	0xa438, 0xd9ad, 0xa438, 0x50b7, 0xa438, 0xe083, 0xa438, 0xecf7,
-	0xa438, 0x23e4, 0xa438, 0x83ec, 0xa438, 0xbf72, 0xa438, 0x9e02,
-	0xa438, 0x766b, 0xa438, 0x0287, 0xa438, 0x0102, 0xa438, 0x8906,
-	0xa438, 0xee83, 0xa438, 0xe800, 0xa438, 0xbf72, 0xa438, 0x6b02,
-	0xa438, 0x766b, 0xa438, 0xbf72, 0xa438, 0x6e02, 0xa438, 0x766b,
-	0xa438, 0xbf72, 0xa438, 0x7102, 0xa438, 0x766b, 0xa438, 0xbf72,
-	0xa438, 0x7402, 0xa438, 0x766b, 0xa438, 0xbf72, 0xa438, 0x7702,
-	0xa438, 0x766b, 0xa438, 0xbf72, 0xa438, 0x7a02, 0xa438, 0x766b,
-	0xa438, 0xd400, 0xa438, 0x0fbf, 0xa438, 0x7295, 0xa438, 0x0276,
-	0xa438, 0x97d7, 0xa438, 0x0400, 0xa438, 0xbf6e, 0xa438, 0x0602,
-	0xa438, 0x76b6, 0xa438, 0xef64, 0xa438, 0xbf6e, 0xa438, 0x0902,
-	0xa438, 0x76b6, 0xa438, 0x1e64, 0xa438, 0xbf6e, 0xa438, 0x0f02,
-	0xa438, 0x76b6, 0xa438, 0x1e64, 0xa438, 0xac40, 0xa438, 0x0fbf,
-	0xa438, 0x7298, 0xa438, 0x0276, 0xa438, 0xb6e5, 0xa438, 0x83e8,
-	0xa438, 0xa10f, 0xa438, 0x28af, 0xa438, 0x8a95, 0xa438, 0xbf8b,
-	0xa438, 0xf302, 0xa438, 0x76b6, 0xa438, 0xac28, 0xa438, 0x02ae,
-	0xa438, 0x0bbf, 0xa438, 0x8bf9, 0xa438, 0x0276, 0xa438, 0xb6e5,
-	0xa438, 0x83e8, 0xa438, 0xae09, 0xa438, 0xbf8b, 0xa438, 0xf602,
-	0xa438, 0x76b6, 0xa438, 0xe583, 0xa438, 0xe8a1, 0xa438, 0x0303,
-	0xa438, 0xaf8a, 0xa438, 0x95b7, 0xa438, 0xafe2, 0xa438, 0x83ec,
-	0xa438, 0xf735, 0xa438, 0xe683, 0xa438, 0xecbf, 0xa438, 0x7295,
-	0xa438, 0x0276, 0xa438, 0x6bbf, 0xa438, 0x726b, 0xa438, 0x0276,
-	0xa438, 0x74bf, 0xa438, 0x726e, 0xa438, 0x0276, 0xa438, 0x74bf,
-	0xa438, 0x7271, 0xa438, 0x0276, 0xa438, 0x74bf, 0xa438, 0x7274,
-	0xa438, 0x0276, 0xa438, 0x74bf, 0xa438, 0x7277, 0xa438, 0x0276,
-	0xa438, 0x74bf, 0xa438, 0x727a, 0xa438, 0x0276, 0xa438, 0x7402,
-	0xa438, 0x8929, 0xa438, 0xd401, 0xa438, 0x28d6, 0xa438, 0x0010,
-	0xa438, 0xd20f, 0xa438, 0xe684, 0xa438, 0x7602, 0xa438, 0x6671,
-	0xa438, 0x021f, 0xa438, 0xbbff, 0xa438, 0xfefd, 0xa438, 0xef95,
-	0xa438, 0xfdfc, 0xa438, 0x04f8, 0xa438, 0xf9ef, 0xa438, 0x59f9,
-	0xa438, 0xe080, 0xa438, 0x12ad, 0xa438, 0x230c, 0xa438, 0xbf72,
-	0xa438, 0x9e02, 0xa438, 0x766b, 0xa438, 0xbf72, 0xa438, 0x9502,
-	0xa438, 0x766b, 0xa438, 0xfdef, 0xa438, 0x95fd, 0xa438, 0xfc04,
-	0xa438, 0xbf6e, 0xa438, 0x0602, 0xa438, 0x76b6, 0xa438, 0xef64,
-	0xa438, 0xbf6e, 0xa438, 0x0902, 0xa438, 0x76b6, 0xa438, 0x1e64,
-	0xa438, 0xbf6e, 0xa438, 0x0f02, 0xa438, 0x76b6, 0xa438, 0x1e64,
-	0xa438, 0xac40, 0xa438, 0x0ebf, 0xa438, 0x7298, 0xa438, 0x0276,
-	0xa438, 0xb6e5, 0xa438, 0x8478, 0xa438, 0xa10f, 0xa438, 0x26ae,
-	0xa438, 0x47bf, 0xa438, 0x8bf3, 0xa438, 0x0276, 0xa438, 0xb6ac,
-	0xa438, 0x2802, 0xa438, 0xae0b, 0xa438, 0xbf8b, 0xa438, 0xf902,
-	0xa438, 0x76b6, 0xa438, 0xe584, 0xa438, 0x78ae, 0xa438, 0x09bf,
-	0xa438, 0x8bf6, 0xa438, 0x0276, 0xa438, 0xb6e5, 0xa438, 0x8478,
-	0xa438, 0xa103, 0xa438, 0x02ae, 0xa438, 0x23e0, 0xa438, 0x8474,
-	0xa438, 0xe184, 0xa438, 0x75ef, 0xa438, 0x64e0, 0xa438, 0x83fc,
-	0xa438, 0xe183, 0xa438, 0xfdef, 0xa438, 0x7402, 0xa438, 0x75d9,
-	0xa438, 0xad50, 0xa438, 0x0ae0, 0xa438, 0x83ec, 0xa438, 0xf721,
-	0xa438, 0xe483, 0xa438, 0xecae, 0xa438, 0x03af, 0xa438, 0x68e4,
-	0xa438, 0xbf72, 0xa438, 0x9502, 0xa438, 0x766b, 0xa438, 0xe083,
-	0xa438, 0xebad, 0xa438, 0x2170, 0xa438, 0xbf73, 0xa438, 0x7f02,
-	0xa438, 0x766b, 0xa438, 0xd700, 0xa438, 0x64bf, 0xa438, 0x73c4,
-	0xa438, 0x0276, 0xa438, 0xb6a4, 0xa438, 0x0000, 0xa438, 0x02ae,
-	0xa438, 0x0d87, 0xa438, 0xa700, 0xa438, 0x00ef, 0xa438, 0xe183,
-	0xa438, 0xecf7, 0xa438, 0x2ae5, 0xa438, 0x83ec, 0xa438, 0xbf73,
-	0xa438, 0xbe02, 0xa438, 0x766b, 0xa438, 0xbf73, 0xa438, 0xb802,
-	0xa438, 0x766b, 0xa438, 0xbf73, 0xa438, 0xc102, 0xa438, 0x766b,
-	0xa438, 0xbf73, 0xa438, 0xbb02, 0xa438, 0x766b, 0xa438, 0xe084,
-	0xa438, 0x9ee1, 0xa438, 0x849f, 0xa438, 0xbf72, 0xa438, 0x7d02,
-	0xa438, 0x7697, 0xa438, 0xbf72, 0xa438, 0x8002, 0xa438, 0x7697,
-	0xa438, 0xbf72, 0xa438, 0x8302, 0xa438, 0x7697, 0xa438, 0xbf72,
-	0xa438, 0x8602, 0xa438, 0x7697, 0xa438, 0xbf72, 0xa438, 0x8902,
-	0xa438, 0x7674, 0xa438, 0xbf72, 0xa438, 0x8c02, 0xa438, 0x7674,
-	0xa438, 0xbf72, 0xa438, 0x8f02, 0xa438, 0x7674, 0xa438, 0xbf72,
-	0xa438, 0x9202, 0xa438, 0x7674, 0xa438, 0xee84, 0xa438, 0x7700,
-	0xa438, 0xe080, 0xa438, 0x44f6, 0xa438, 0x21e4, 0xa438, 0x8044,
-	0xa438, 0xaf68, 0xa438, 0xe411, 0xa438, 0xd1a4, 0xa438, 0x10bc,
-	0xa438, 0x7432, 0xa438, 0xbc74, 0xa438, 0xbbbf, 0xa438, 0x14cc,
-	0xa438, 0xbfaa, 0xa438, 0x00bf, 0xa438, 0x9055, 0xa438, 0xbf06,
-	0xa438, 0x10bf, 0xa438, 0xb876, 0xa438, 0xbe02, 0xa438, 0x54be,
-	0xa438, 0x0232, 0xa438, 0xbe02, 0xa438, 0x10be, 0xa438, 0x0200,
-	0xa436, 0x8fe7, 0xa438, 0x1200, 0xa436, 0x8fe9, 0xa438, 0x1200,
-	0xa436, 0x8feb, 0xa438, 0x1200, 0xa436, 0x8fed, 0xa438, 0x1200,
-	0xa436, 0x8fef, 0xa438, 0x1200, 0xa436, 0x8ff1, 0xa438, 0x1200,
-	0xa436, 0x8ff3, 0xa438, 0x1200, 0xa436, 0x8ff5, 0xa438, 0x1200,
-	0xa436, 0x8ff7, 0xa438, 0x1200, 0xa436, 0x8ff9, 0xa438, 0x1200,
-	0xa436, 0x8ffb, 0xa438, 0x1200, 0xa436, 0x8ffd, 0xa438, 0x1200,
-	0xa436, 0xb818, 0xa438, 0x6602, 0xa436, 0xb81a, 0xa438, 0x1f75,
-	0xa436, 0xb81c, 0xa438, 0x67eb, 0xa436, 0xb81e, 0xa438, 0xffff,
-	0xa436, 0xb850, 0xa438, 0xffff, 0xa436, 0xb852, 0xa438, 0xffff,
-	0xa436, 0xb878, 0xa438, 0xffff, 0xa436, 0xb884, 0xa438, 0xffff,
-	0xa436, 0xb832, 0xa438, 0x0007, 0xB82E, 0x0000, 0xa436, 0x8023,
-	0xa438, 0x0000, 0xB820, 0x0000, 0xFFFF, 0xFFFF
+	0xa438, 0x0ebf, 0xa438, 0x7298, 0xa438, 0x0276, 0xa438, 0xb6e5,
+	0xa438, 0x8478, 0xa438, 0xa10f, 0xa438, 0x26ae, 0xa438, 0x47bf,
+	0xa438, 0x8bf3, 0xa438, 0x0276, 0xa438, 0xb6ac, 0xa438, 0x2802,
+	0xa438, 0xae0b, 0xa438, 0xbf8b, 0xa438, 0xf902, 0xa438, 0x76b6,
+	0xa438, 0xe584, 0xa438, 0x78ae, 0xa438, 0x09bf, 0xa438, 0x8bf6,
+	0xa438, 0x0276, 0xa438, 0xb6e5, 0xa438, 0x8478, 0xa438, 0xa103,
+	0xa438, 0x02ae, 0xa438, 0x23e0, 0xa438, 0x8474, 0xa438, 0xe184,
+	0xa438, 0x75ef, 0xa438, 0x64e0, 0xa438, 0x83fc, 0xa438, 0xe183,
+	0xa438, 0xfdef, 0xa438, 0x7402, 0xa438, 0x75d9, 0xa438, 0xad50,
+	0xa438, 0x0ae0, 0xa438, 0x83ec, 0xa438, 0xf721, 0xa438, 0xe483,
+	0xa438, 0xecae, 0xa438, 0x03af, 0xa438, 0x68e4, 0xa438, 0xbf72,
+	0xa438, 0x9502, 0xa438, 0x766b, 0xa438, 0xe083, 0xa438, 0xebad,
+	0xa438, 0x2170, 0xa438, 0xbf73, 0xa438, 0x7f02, 0xa438, 0x766b,
+	0xa438, 0xd700, 0xa438, 0x64bf, 0xa438, 0x73c4, 0xa438, 0x0276,
+	0xa438, 0xb6a4, 0xa438, 0x0000, 0xa438, 0x02ae, 0xa438, 0x0d87,
+	0xa438, 0xa700, 0xa438, 0x00ef, 0xa438, 0xe183, 0xa438, 0xecf7,
+	0xa438, 0x2ae5, 0xa438, 0x83ec, 0xa438, 0xbf73, 0xa438, 0xbe02,
+	0xa438, 0x766b, 0xa438, 0xbf73, 0xa438, 0xb802, 0xa438, 0x766b,
+	0xa438, 0xbf73, 0xa438, 0xc102, 0xa438, 0x766b, 0xa438, 0xbf73,
+	0xa438, 0xbb02, 0xa438, 0x766b, 0xa438, 0xe084, 0xa438, 0x9ee1,
+	0xa438, 0x849f, 0xa438, 0xbf72, 0xa438, 0x7d02, 0xa438, 0x7697,
+	0xa438, 0xbf72, 0xa438, 0x8002, 0xa438, 0x7697, 0xa438, 0xbf72,
+	0xa438, 0x8302, 0xa438, 0x7697, 0xa438, 0xbf72, 0xa438, 0x8602,
+	0xa438, 0x7697, 0xa438, 0xbf72, 0xa438, 0x8902, 0xa438, 0x7674,
+	0xa438, 0xbf72, 0xa438, 0x8c02, 0xa438, 0x7674, 0xa438, 0xbf72,
+	0xa438, 0x8f02, 0xa438, 0x7674, 0xa438, 0xbf72, 0xa438, 0x9202,
+	0xa438, 0x7674, 0xa438, 0xee84, 0xa438, 0x7700, 0xa438, 0xe080,
+	0xa438, 0x44f6, 0xa438, 0x21e4, 0xa438, 0x8044, 0xa438, 0xaf68,
+	0xa438, 0xe411, 0xa438, 0xd1a4, 0xa438, 0x10bc, 0xa438, 0x7432,
+	0xa438, 0xbc74, 0xa438, 0xbbbf, 0xa438, 0x14cc, 0xa438, 0xbfaa,
+	0xa438, 0x00bf, 0xa438, 0x9055, 0xa438, 0xbf06, 0xa438, 0x10bf,
+	0xa438, 0xb876, 0xa438, 0xbe02, 0xa438, 0x54be, 0xa438, 0x0232,
+	0xa438, 0xbe02, 0xa438, 0x10be, 0xa438, 0x0200, 0xa436, 0x8fe7,
+	0xa438, 0x1200, 0xa436, 0x8fe9, 0xa438, 0x1200, 0xa436, 0x8feb,
+	0xa438, 0x1200, 0xa436, 0x8fed, 0xa438, 0x1200, 0xa436, 0x8fef,
+	0xa438, 0x1200, 0xa436, 0x8ff1, 0xa438, 0x1200, 0xa436, 0x8ff3,
+	0xa438, 0x1200, 0xa436, 0x8ff5, 0xa438, 0x1200, 0xa436, 0x8ff7,
+	0xa438, 0x1200, 0xa436, 0x8ff9, 0xa438, 0x1200, 0xa436, 0x8ffb,
+	0xa438, 0x1200, 0xa436, 0x8ffd, 0xa438, 0x1200, 0xa436, 0xb818,
+	0xa438, 0x6602, 0xa436, 0xb81a, 0xa438, 0x1f75, 0xa436, 0xb81c,
+	0xa438, 0x67eb, 0xa436, 0xb81e, 0xa438, 0xffff, 0xa436, 0xb850,
+	0xa438, 0xffff, 0xa436, 0xb852, 0xa438, 0xffff, 0xa436, 0xb878,
+	0xa438, 0xffff, 0xa436, 0xb884, 0xa438, 0xffff, 0xa436, 0xb832,
+	0xa438, 0x0007, 0xB82E, 0x0000, 0xa436, 0x8023, 0xa438, 0x0000,
+	0xB820, 0x0000, 0xFFFF, 0xFFFF
 };
 
 static const u16 phy_mcu_ram_code_8127a_2[] = {
@@ -567,7 +1166,42 @@ static const u16 phy_mcu_ram_code_8127a_2[] = {
 	0xB890, 0x5060, 0xB890, 0xE0D0, 0xB890, 0xA000, 0xB890, 0x3030,
 	0xB890, 0x4070, 0xB890, 0xE0E0, 0xB890, 0xD080, 0xB890, 0xA010,
 	0xB890, 0xE040, 0xB890, 0x80B0, 0xB890, 0x50B0, 0xB890, 0x2090,
-	0xB820, 0x0000, 0xFFFF, 0xFFFF
+	0xB88E, 0xC110, 0xB890, 0xE8F4, 0xB890, 0xF4F4, 0xB88E, 0xC14E,
+	0xB890, 0x26EF, 0xB890, 0xEFEF, 0xB88E, 0xC374, 0xB890, 0x00FA,
+	0xB890, 0x008C, 0xB890, 0x03D2, 0xB890, 0x0373, 0xB890, 0x03B9,
+	0xB890, 0x0006, 0xB890, 0x0013, 0xB890, 0x03FE, 0xB890, 0x03DE,
+	0xB890, 0x0008, 0xB890, 0x0008, 0xB890, 0x000D, 0xB890, 0x03F3,
+	0xB890, 0x0010, 0xB890, 0x000A, 0xB890, 0x000E, 0xB890, 0x03F5,
+	0xB890, 0x0001, 0xB890, 0x03FF, 0xB890, 0x0000, 0xB890, 0x0005,
+	0xB890, 0x000A, 0xB890, 0x03F3, 0xB890, 0x0003, 0xB890, 0x03F1,
+	0xB890, 0x0003, 0xB890, 0x000C, 0xB890, 0x000E, 0xB890, 0x03FA,
+	0xB890, 0x0007, 0xB890, 0x0008, 0xB890, 0x0010, 0xB890, 0x03EE,
+	0xB890, 0x000E, 0xB890, 0x03F6, 0xB890, 0x0007, 0xB890, 0x03FC,
+	0xB890, 0x000B, 0xB890, 0x03FB, 0xB890, 0x000F, 0xB890, 0x03F6,
+	0xB890, 0x0016, 0xB890, 0x03F9, 0xB890, 0x03FF, 0xB890, 0x03FF,
+	0xB890, 0x0007, 0xB890, 0x03FD, 0xB890, 0x000D, 0xB890, 0x03FE,
+	0xB890, 0x0003, 0xB890, 0x03F1, 0xB890, 0x000B, 0xB890, 0x0000,
+	0xB890, 0x0012, 0xB890, 0x03FD, 0xB890, 0x03FC, 0xB890, 0x0004,
+	0xB890, 0x000F, 0xB890, 0x03EF, 0xB890, 0x03F9, 0xB890, 0x000D,
+	0xB890, 0x0002, 0xB890, 0x000C, 0xB890, 0x0003, 0xB890, 0x0069,
+	0xB890, 0x0064, 0xB890, 0x004F, 0xB890, 0x001E, 0xB890, 0x03ED,
+	0xB890, 0x03DC, 0xB890, 0x03BC, 0xB890, 0x03D1, 0xB890, 0x03C5,
+	0xB890, 0x03E4, 0xB890, 0x03EA, 0xB890, 0x03FF, 0xB890, 0x03FA,
+	0xB890, 0x0007, 0xB890, 0x03FF, 0xB890, 0x03E5, 0xB890, 0x03FA,
+	0xB890, 0x03F1, 0xB890, 0x03F8, 0xB890, 0x03EF, 0xB890, 0x0007,
+	0xB890, 0x0002, 0xB890, 0x0016, 0xB890, 0x0001, 0xB890, 0x000A,
+	0xB890, 0x03F6, 0xB890, 0x0000, 0xB890, 0x03F7, 0xB890, 0x0004,
+	0xB890, 0x0002, 0xB890, 0x0010, 0xB890, 0x0004, 0xB890, 0x03FD,
+	0xB890, 0x03F2, 0xB890, 0x03EE, 0xB890, 0x03FA, 0xB890, 0x03F1,
+	0xB890, 0x03FE, 0xB890, 0x03FB, 0xB890, 0x0008, 0xB890, 0x03EE,
+	0xB890, 0x000F, 0xB890, 0x03F0, 0xB890, 0x000F, 0xB890, 0x03F3,
+	0xB890, 0x0004, 0xB890, 0x03F3, 0xB890, 0x0003, 0xB890, 0x03F5,
+	0xB890, 0x03FE, 0xB890, 0x03F5, 0xB890, 0x0008, 0xB890, 0x03F7,
+	0xB890, 0x000A, 0xB890, 0x03F9, 0xB890, 0x0000, 0xB890, 0x03FB,
+	0xB890, 0x000C, 0xB890, 0x03EC, 0xB890, 0x03FB, 0xB890, 0x03EE,
+	0xB890, 0x000E, 0xB890, 0x03F5, 0xB890, 0x0007, 0xB88E, 0xC128,
+	0xB890, 0xF0F0, 0xB890, 0xF0EB, 0xB88E, 0xC166, 0xB890, 0xEAEA,
+	0xB890, 0xEA0E, 0xB820, 0x0000, 0xFFFF, 0xFFFF
 };
 
 static void
diff --git a/drivers/net/r8169/r8169_fiber.c b/drivers/net/r8169/r8169_fiber.c
index 9108fa6bba..8533ade15e 100644
--- a/drivers/net/r8169/r8169_fiber.c
+++ b/drivers/net/r8169/r8169_fiber.c
@@ -107,9 +107,15 @@ rtl8127_set_sds_phy_caps_1g_8127(struct rtl_hw *hw)
 {
 	u16 val;
 
+	if (hw->fcpause == rtl_fc_full)
+		rtl8127_set_sds_phy_bit(hw, 0, 2, 4, BIT_8 | BIT_7);
+	else
+		rtl8127_clear_sds_phy_bit(hw, 0, 2, 4, BIT_8 | BIT_7);
+
 	rtl8127_set_sds_phy_bit(hw, 0, 1, 31, BIT_3);
 	rtl8127_clear_and_set_sds_phy_bit(hw, 0, 2, 0, BIT_13 | BIT_12 | BIT_6,
 					  BIT_12 | BIT_6);
+	rtl8127_set_sds_phy_bit(hw, 0, 0, 4, BIT_2);
 	RTL_W16(hw, 0x233A, 0x8004);
 
 	val = RTL_R16(hw, 0x233E);
@@ -139,6 +145,11 @@ rtl8127_set_sds_phy_caps_10g_8127(struct rtl_hw *hw)
 {
 	u16 val;
 
+	if (hw->fcpause == rtl_fc_full)
+		rtl8127_set_sds_phy_bit(hw, 0, 31, 11, BIT_3 | BIT_2);
+	else
+		rtl8127_clear_sds_phy_bit(hw, 0, 31, 11, BIT_3 | BIT_2);
+
 	RTL_W16(hw, 0x233A, 0x801A);
 
 	val = RTL_R16(hw, 0x233E);
diff --git a/drivers/net/r8169/r8169_hw.h b/drivers/net/r8169/r8169_hw.h
index e1fe238b85..c8705edad4 100644
--- a/drivers/net/r8169/r8169_hw.h
+++ b/drivers/net/r8169/r8169_hw.h
@@ -140,7 +140,7 @@ extern const struct rtl_hw_ops rtl8125cp_ops;
 #define NIC_RAMCODE_VERSION_CFG_METHOD_69  (0x0023)
 #define NIC_RAMCODE_VERSION_CFG_METHOD_70  (0x0033)
 #define NIC_RAMCODE_VERSION_CFG_METHOD_71  (0x0060)
-#define NIC_RAMCODE_VERSION_CFG_METHOD_91  (0x0036)
+#define NIC_RAMCODE_VERSION_CFG_METHOD_91  (0x0051)
 
 #define RTL_MAC_MCU_PAGE_SIZE 256
 #define RTL_DEFAULT_MTU       1500
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v4 05/13] net/r8169: adjust jumbo frame size limit for non-1G cards
  2026-02-13  3:20 [PATCH v4 00/13] net/r8169: driver updates and new hardware support Howard Wang
                   ` (3 preceding siblings ...)
  2026-02-13  3:20 ` [PATCH v4 04/13] net/r8169: update hardware configurations for 8127 Howard Wang
@ 2026-02-13  3:20 ` Howard Wang
  2026-02-13  3:20 ` [PATCH v4 06/13] net/r8169: remove support for CFG_METHOD_69 Howard Wang
                   ` (8 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: Howard Wang @ 2026-02-13  3:20 UTC (permalink / raw)
  To: dev; +Cc: pro_nic_dpdk, Howard Wang

For 8125A, set the max size to (16K - 1).
For other non-1G cards, set the max size to 16K.

Signed-off-by: Howard Wang <howard_wang@realsil.com.cn>
---
 drivers/net/r8169/r8169_compat.h |  1 +
 drivers/net/r8169/r8169_ethdev.c | 23 ++++++++++++++++++++++-
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/drivers/net/r8169/r8169_compat.h b/drivers/net/r8169/r8169_compat.h
index d2d928cdd7..673a1ca274 100644
--- a/drivers/net/r8169/r8169_compat.h
+++ b/drivers/net/r8169/r8169_compat.h
@@ -617,6 +617,7 @@ enum RTL_chipset_name {
  */
 #define RTL_ETH_OVERHEAD (RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN + VLAN_TAG_SIZE)
 #define JUMBO_FRAME_9K  (9 * 1024 - RTE_ETHER_HDR_LEN - RTE_VLAN_HLEN - RTE_ETHER_CRC_LEN)
+#define JUMBO_FRAME_16K  (16 * 1024 - RTE_ETHER_HDR_LEN - RTE_VLAN_HLEN - RTE_ETHER_CRC_LEN)
 
 #define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL << (n)) - 1))
 
diff --git a/drivers/net/r8169/r8169_ethdev.c b/drivers/net/r8169/r8169_ethdev.c
index f620154bf0..8e46ce09a1 100644
--- a/drivers/net/r8169/r8169_ethdev.c
+++ b/drivers/net/r8169/r8169_ethdev.c
@@ -412,9 +412,30 @@ rtl_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
 	struct rtl_hw *hw = &adapter->hw;
 
 	dev_info->min_rx_bufsize = 1024;
-	dev_info->max_rx_pktlen = JUMBO_FRAME_9K;
 	dev_info->max_mac_addrs = 1;
 
+	switch (hw->mcfg) {
+	case CFG_METHOD_48:
+	case CFG_METHOD_49:
+		dev_info->max_rx_pktlen = JUMBO_FRAME_16K - 1;
+		break;
+	case CFG_METHOD_50:
+	case CFG_METHOD_51:
+	case CFG_METHOD_54:
+	case CFG_METHOD_55:
+	case CFG_METHOD_56:
+	case CFG_METHOD_57:
+	case CFG_METHOD_58:
+	case CFG_METHOD_70:
+	case CFG_METHOD_71:
+	case CFG_METHOD_91:
+		dev_info->max_rx_pktlen = JUMBO_FRAME_16K;
+		break;
+	default:
+		dev_info->max_rx_pktlen = JUMBO_FRAME_9K;
+		break;
+	}
+
 	if (hw->mcfg >= CFG_METHOD_69) {
 		dev_info->max_rx_queues = 4;
 		dev_info->max_tx_queues = 2;
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v4 06/13] net/r8169: remove support for CFG_METHOD_69
  2026-02-13  3:20 [PATCH v4 00/13] net/r8169: driver updates and new hardware support Howard Wang
                   ` (4 preceding siblings ...)
  2026-02-13  3:20 ` [PATCH v4 05/13] net/r8169: adjust jumbo frame size limit for non-1G cards Howard Wang
@ 2026-02-13  3:20 ` Howard Wang
  2026-02-13  3:20 ` [PATCH v4 07/13] net/r8169: update hardware configurations for 8126 Howard Wang
                   ` (7 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: Howard Wang @ 2026-02-13  3:20 UTC (permalink / raw)
  To: dev; +Cc: pro_nic_dpdk, Howard Wang

CFG_METHOD_69(RLE0949) is a test chip and it will not on the market.
So remove it to simplify code.

Signed-off-by: Howard Wang <howard_wang@realsil.com.cn>
---
 drivers/net/r8169/base/rtl8126a.c     |  22 +-
 drivers/net/r8169/base/rtl8126a_mcu.c | 613 +-------------------------
 drivers/net/r8169/base/rtl8126a_mcu.h |   2 -
 drivers/net/r8169/r8169_ethdev.c      |   4 +-
 drivers/net/r8169/r8169_hw.c          |  25 +-
 drivers/net/r8169/r8169_hw.h          |   1 -
 drivers/net/r8169/r8169_phy.c         |   3 -
 drivers/net/r8169/r8169_rxtx.c        |   1 -
 8 files changed, 7 insertions(+), 664 deletions(-)

diff --git a/drivers/net/r8169/base/rtl8126a.c b/drivers/net/r8169/base/rtl8126a.c
index 58b1cc2664..e3f68c1292 100644
--- a/drivers/net/r8169/base/rtl8126a.c
+++ b/drivers/net/r8169/base/rtl8126a.c
@@ -7,16 +7,12 @@
 #include "../r8169_phy.h"
 #include "rtl8126a_mcu.h"
 
-/* For RTL8126A, CFG_METHOD_69,70,71 */
+/* For RTL8126A, CFG_METHOD_70,71 */
 
 static void
 hw_init_rxcfg_8126a(struct rtl_hw *hw)
 {
 	switch (hw->mcfg) {
-	case CFG_METHOD_69:
-		RTL_W32(hw, RxConfig, Rx_Fetch_Number_20 | RxCfg_pause_slot_en |
-			(RX_DMA_BURST_512 << RxCfgDMAShift));
-		break;
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
 		RTL_W32(hw, RxConfig, Rx_Fetch_Number_20 | Rx_Close_Multiple |
@@ -29,7 +25,6 @@ static void
 hw_ephy_config_8126a(struct rtl_hw *hw)
 {
 	switch (hw->mcfg) {
-	case CFG_METHOD_69:
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
 		/* nothing to do */
@@ -37,12 +32,6 @@ hw_ephy_config_8126a(struct rtl_hw *hw)
 	}
 }
 
-static void
-rtl_hw_phy_config_8126a_1(struct rtl_hw *hw)
-{
-	rtl_set_eth_phy_ocp_bit(hw, 0xA442, BIT_11);
-}
-
 static void
 rtl_hw_phy_config_8126a_2(struct rtl_hw *hw)
 {
@@ -473,9 +462,6 @@ static void
 hw_phy_config_8126a(struct rtl_hw *hw)
 {
 	switch (hw->mcfg) {
-	case CFG_METHOD_69:
-		rtl_hw_phy_config_8126a_1(hw);
-		break;
 	case CFG_METHOD_70:
 		rtl_hw_phy_config_8126a_2(hw);
 		break;
@@ -497,9 +483,6 @@ hw_mac_mcu_config_8126a(struct rtl_hw *hw)
 	hw->hw_mcu_patch_code_ver = rtl_get_hw_mcu_patch_code_ver(hw);
 
 	switch (hw->mcfg) {
-	case CFG_METHOD_69:
-		rtl_set_mac_mcu_8126a_1(hw);
-		break;
 	case CFG_METHOD_70:
 		rtl_set_mac_mcu_8126a_2(hw);
 		break;
@@ -513,9 +496,6 @@ static void
 hw_phy_mcu_config_8126a(struct rtl_hw *hw)
 {
 	switch (hw->mcfg) {
-	case CFG_METHOD_69:
-		rtl_set_phy_mcu_8126a_1(hw);
-		break;
 	case CFG_METHOD_70:
 		rtl_set_phy_mcu_8126a_2(hw);
 		break;
diff --git a/drivers/net/r8169/base/rtl8126a_mcu.c b/drivers/net/r8169/base/rtl8126a_mcu.c
index 759e2df7cf..89ad5f6deb 100644
--- a/drivers/net/r8169/base/rtl8126a_mcu.c
+++ b/drivers/net/r8169/base/rtl8126a_mcu.c
@@ -7,34 +7,10 @@
 #include "../r8169_phy.h"
 #include "rtl8126a_mcu.h"
 
-/* For RTL8126A, CFG_METHOD_69,70,71 */
+/* For RTL8126A, CFG_METHOD_70,71 */
 
 /* ------------------------------------MAC 8126A------------------------------------- */
 
-void
-rtl_set_mac_mcu_8126a_1(struct rtl_hw *hw)
-{
-	static const u16 mcu_patch_code_8126a_1[] = {
-		0xE010, 0xE019, 0xE01B, 0xE01D, 0xE01F, 0xE021, 0xE023, 0xE025, 0xE027,
-		0xE029, 0xE02B, 0xE02D, 0xE02F, 0xE031, 0xE033, 0xE035, 0x48C0, 0x9C66,
-		0x7446, 0x4840, 0x48C1, 0x48C2, 0x9C46, 0xC402, 0xBC00, 0x0AD6, 0xC602,
-		0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602,
-		0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602,
-		0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602,
-		0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602,
-		0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000
-	};
-
-	rtl_write_mac_mcu_ram_code(hw, mcu_patch_code_8126a_1,
-				   ARRAY_SIZE(mcu_patch_code_8126a_1));
-
-	rtl_mac_ocp_write(hw, 0xFC26, 0x8000);
-
-	rtl_mac_ocp_write(hw, 0xFC28, 0x0AAA);
-
-	rtl_mac_ocp_write(hw, 0xFC48, 0x0001);
-}
-
 void
 rtl_set_mac_mcu_8126a_2(struct rtl_hw *hw)
 {
@@ -125,550 +101,6 @@ rtl_set_mac_mcu_8126a_3(struct rtl_hw *hw)
 
 /* ------------------------------------PHY 8126A------------------------------------- */
 
-static const u16 phy_mcu_ram_code_8126a_1_1[] = {
-	0xa436, 0x8023, 0xa438, 0x4900, 0xa436, 0xB82E, 0xa438, 0x0001,
-	0xBFBA, 0xE000, 0xBF1A, 0xC1B9, 0xBFA8, 0x10F0, 0xBFB0, 0x0210,
-	0xBFB4, 0xE7E4, 0xb820, 0x0090, 0xa436, 0xA016, 0xa438, 0x0000,
-	0xa436, 0xA012, 0xa438, 0x0000, 0xa436, 0xA014, 0xa438, 0x1800,
-	0xa438, 0x8010, 0xa438, 0x1800, 0xa438, 0x8062, 0xa438, 0x1800,
-	0xa438, 0x8069, 0xa438, 0x1800, 0xa438, 0x80e2, 0xa438, 0x1800,
-	0xa438, 0x80eb, 0xa438, 0x1800, 0xa438, 0x80f5, 0xa438, 0x1800,
-	0xa438, 0x811b, 0xa438, 0x1800, 0xa438, 0x8120, 0xa438, 0xd500,
-	0xa438, 0xd049, 0xa438, 0xd1b9, 0xa438, 0xa208, 0xa438, 0x8208,
-	0xa438, 0xd503, 0xa438, 0xa104, 0xa438, 0x0c07, 0xa438, 0x0902,
-	0xa438, 0xd500, 0xa438, 0xbc10, 0xa438, 0xc484, 0xa438, 0xd503,
-	0xa438, 0xcc02, 0xa438, 0xcd0d, 0xa438, 0xaf01, 0xa438, 0xd500,
-	0xa438, 0xd703, 0xa438, 0x4531, 0xa438, 0xbd08, 0xa438, 0x1000,
-	0xa438, 0x16bb, 0xa438, 0xd75e, 0xa438, 0x5fb3, 0xa438, 0xd503,
-	0xa438, 0xd04d, 0xa438, 0xd1c7, 0xa438, 0x0cf0, 0xa438, 0x0e10,
-	0xa438, 0xd704, 0xa438, 0x5ffc, 0xa438, 0xd04d, 0xa438, 0xd1c7,
-	0xa438, 0x0cf0, 0xa438, 0x0e20, 0xa438, 0xd704, 0xa438, 0x5ffc,
-	0xa438, 0xd04d, 0xa438, 0xd1c7, 0xa438, 0x0cf0, 0xa438, 0x0e40,
-	0xa438, 0xd704, 0xa438, 0x5ffc, 0xa438, 0xd04d, 0xa438, 0xd1c7,
-	0xa438, 0x0cf0, 0xa438, 0x0e80, 0xa438, 0xd704, 0xa438, 0x5ffc,
-	0xa438, 0xd07b, 0xa438, 0xd1c5, 0xa438, 0x8ef0, 0xa438, 0xd704,
-	0xa438, 0x5ffc, 0xa438, 0x9d08, 0xa438, 0x1000, 0xa438, 0x16bb,
-	0xa438, 0xd75e, 0xa438, 0x7fb3, 0xa438, 0x1000, 0xa438, 0x16bb,
-	0xa438, 0xd75e, 0xa438, 0x5fad, 0xa438, 0x1000, 0xa438, 0x181f,
-	0xa438, 0xd703, 0xa438, 0x3181, 0xa438, 0x8059, 0xa438, 0x60ad,
-	0xa438, 0x1000, 0xa438, 0x16bb, 0xa438, 0xd703, 0xa438, 0x5fbb,
-	0xa438, 0x1000, 0xa438, 0x16bb, 0xa438, 0xd719, 0xa438, 0x7fa8,
-	0xa438, 0xd500, 0xa438, 0xd049, 0xa438, 0xd1b9, 0xa438, 0x1800,
-	0xa438, 0x0f0b, 0xa438, 0xd500, 0xa438, 0xd07b, 0xa438, 0xd1b5,
-	0xa438, 0xd0f6, 0xa438, 0xd1c5, 0xa438, 0x1800, 0xa438, 0x1049,
-	0xa438, 0xd707, 0xa438, 0x4121, 0xa438, 0xd706, 0xa438, 0x40fa,
-	0xa438, 0xd099, 0xa438, 0xd1c6, 0xa438, 0x1000, 0xa438, 0x16bb,
-	0xa438, 0xd704, 0xa438, 0x5fbc, 0xa438, 0xbc80, 0xa438, 0xc489,
-	0xa438, 0xd503, 0xa438, 0xcc08, 0xa438, 0xcd46, 0xa438, 0xaf01,
-	0xa438, 0xd500, 0xa438, 0x1000, 0xa438, 0x0903, 0xa438, 0x1000,
-	0xa438, 0x16bb, 0xa438, 0xd75e, 0xa438, 0x5f6d, 0xa438, 0x1000,
-	0xa438, 0x181f, 0xa438, 0xd504, 0xa438, 0xa210, 0xa438, 0xd500,
-	0xa438, 0x1000, 0xa438, 0x16bb, 0xa438, 0xd719, 0xa438, 0x5fbc,
-	0xa438, 0xd504, 0xa438, 0x8210, 0xa438, 0xd503, 0xa438, 0xc6d0,
-	0xa438, 0xa521, 0xa438, 0xcd49, 0xa438, 0xaf01, 0xa438, 0xd504,
-	0xa438, 0xa220, 0xa438, 0xd500, 0xa438, 0x1000, 0xa438, 0x16bb,
-	0xa438, 0xd75e, 0xa438, 0x5fad, 0xa438, 0x1000, 0xa438, 0x181f,
-	0xa438, 0xd503, 0xa438, 0xa704, 0xa438, 0x0c07, 0xa438, 0x0904,
-	0xa438, 0xd504, 0xa438, 0xa102, 0xa438, 0xd500, 0xa438, 0x1000,
-	0xa438, 0x16bb, 0xa438, 0xd718, 0xa438, 0x5fab, 0xa438, 0xd503,
-	0xa438, 0xc6f0, 0xa438, 0xa521, 0xa438, 0xd505, 0xa438, 0xa404,
-	0xa438, 0xd500, 0xa438, 0xd701, 0xa438, 0x6085, 0xa438, 0xd504,
-	0xa438, 0xc9f1, 0xa438, 0xf003, 0xa438, 0xd504, 0xa438, 0xc9f0,
-	0xa438, 0xd503, 0xa438, 0xcd4a, 0xa438, 0xaf01, 0xa438, 0xd500,
-	0xa438, 0xd504, 0xa438, 0xa802, 0xa438, 0xd500, 0xa438, 0x1000,
-	0xa438, 0x16bb, 0xa438, 0xd707, 0xa438, 0x5fb1, 0xa438, 0xd707,
-	0xa438, 0x5f10, 0xa438, 0xd505, 0xa438, 0xa402, 0xa438, 0xd503,
-	0xa438, 0xd707, 0xa438, 0x41a1, 0xa438, 0xd706, 0xa438, 0x60ba,
-	0xa438, 0x60fc, 0xa438, 0x0c07, 0xa438, 0x0204, 0xa438, 0xf009,
-	0xa438, 0x0c07, 0xa438, 0x0202, 0xa438, 0xf006, 0xa438, 0x0c07,
-	0xa438, 0x0206, 0xa438, 0xf003, 0xa438, 0x0c07, 0xa438, 0x0202,
-	0xa438, 0xd500, 0xa438, 0xd703, 0xa438, 0x3181, 0xa438, 0x80e0,
-	0xa438, 0x616d, 0xa438, 0xd701, 0xa438, 0x6065, 0xa438, 0x1800,
-	0xa438, 0x1229, 0xa438, 0x1000, 0xa438, 0x16bb, 0xa438, 0xd707,
-	0xa438, 0x6061, 0xa438, 0xd704, 0xa438, 0x5f7c, 0xa438, 0x1800,
-	0xa438, 0x124a, 0xa438, 0xd504, 0xa438, 0x8c0f, 0xa438, 0xd505,
-	0xa438, 0xa20e, 0xa438, 0xd500, 0xa438, 0x1000, 0xa438, 0x1871,
-	0xa438, 0x1800, 0xa438, 0x1899, 0xa438, 0xd70b, 0xa438, 0x60b0,
-	0xa438, 0xd05a, 0xa438, 0xd19a, 0xa438, 0x1800, 0xa438, 0x1aef,
-	0xa438, 0xd0ef, 0xa438, 0xd19a, 0xa438, 0x1800, 0xa438, 0x1aef,
-	0xa438, 0x1000, 0xa438, 0x1d09, 0xa438, 0xd708, 0xa438, 0x3399,
-	0xa438, 0x1b63, 0xa438, 0xd709, 0xa438, 0x5f5d, 0xa438, 0xd70b,
-	0xa438, 0x6130, 0xa438, 0xd70d, 0xa438, 0x6163, 0xa438, 0xd709,
-	0xa438, 0x430b, 0xa438, 0xd71e, 0xa438, 0x62c2, 0xa438, 0xb401,
-	0xa438, 0xf014, 0xa438, 0xc901, 0xa438, 0x1000, 0xa438, 0x810e,
-	0xa438, 0xf010, 0xa438, 0xc902, 0xa438, 0x1000, 0xa438, 0x810e,
-	0xa438, 0xf00c, 0xa438, 0xce04, 0xa438, 0xcf01, 0xa438, 0xd70a,
-	0xa438, 0x5fe2, 0xa438, 0xce04, 0xa438, 0xcf02, 0xa438, 0xc900,
-	0xa438, 0xd70a, 0xa438, 0x4057, 0xa438, 0xb401, 0xa438, 0x0800,
-	0xa438, 0x1800, 0xa438, 0x1b5d, 0xa438, 0xa480, 0xa438, 0xa2b0,
-	0xa438, 0xa806, 0xa438, 0x1800, 0xa438, 0x225c, 0xa438, 0xa7e8,
-	0xa438, 0xac08, 0xa438, 0x1800, 0xa438, 0x1a4e, 0xa436, 0xA026,
-	0xa438, 0x1a4d, 0xa436, 0xA024, 0xa438, 0x225a, 0xa436, 0xA022,
-	0xa438, 0x1b53, 0xa436, 0xA020, 0xa438, 0x1aed, 0xa436, 0xA006,
-	0xa438, 0x1892, 0xa436, 0xA004, 0xa438, 0x11a4, 0xa436, 0xA002,
-	0xa438, 0x103c, 0xa436, 0xA000, 0xa438, 0x0ea6, 0xa436, 0xA008,
-	0xa438, 0xff00, 0xa436, 0xA016, 0xa438, 0x0000, 0xa436, 0xA012,
-	0xa438, 0x0ff8, 0xa436, 0xA014, 0xa438, 0x0000, 0xa438, 0xD098,
-	0xa438, 0xc483, 0xa438, 0xc483, 0xa438, 0x0000, 0xa438, 0x0000,
-	0xa438, 0x0000, 0xa438, 0x0000, 0xa436, 0xA152, 0xa438, 0x3fff,
-	0xa436, 0xA154, 0xa438, 0x0413, 0xa436, 0xA156, 0xa438, 0x1A32,
-	0xa436, 0xA158, 0xa438, 0x1CC0, 0xa436, 0xA15A, 0xa438, 0x3fff,
-	0xa436, 0xA15C, 0xa438, 0x3fff, 0xa436, 0xA15E, 0xa438, 0x3fff,
-	0xa436, 0xA160, 0xa438, 0x3fff, 0xa436, 0xA150, 0xa438, 0x000E,
-	0xa436, 0xA016, 0xa438, 0x0020, 0xa436, 0xA012, 0xa438, 0x0000,
-	0xa436, 0xA014, 0xa438, 0x1800, 0xa438, 0x8010, 0xa438, 0x1800,
-	0xa438, 0x8021, 0xa438, 0x1800, 0xa438, 0x8037, 0xa438, 0x1800,
-	0xa438, 0x803f, 0xa438, 0x1800, 0xa438, 0x8084, 0xa438, 0x1800,
-	0xa438, 0x80c5, 0xa438, 0x1800, 0xa438, 0x80cc, 0xa438, 0x1800,
-	0xa438, 0x80d5, 0xa438, 0xa00a, 0xa438, 0xa280, 0xa438, 0xa404,
-	0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000,
-	0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000,
-	0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000,
-	0xa438, 0x1800, 0xa438, 0x099b, 0xa438, 0x1000, 0xa438, 0x1021,
-	0xa438, 0xd700, 0xa438, 0x5fab, 0xa438, 0xa208, 0xa438, 0x8204,
-	0xa438, 0xcb38, 0xa438, 0xaa40, 0xa438, 0x0000, 0xa438, 0x0000,
-	0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000,
-	0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000,
-	0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x1800, 0xa438, 0x0b2a,
-	0xa438, 0x82a0, 0xa438, 0x8404, 0xa438, 0xa110, 0xa438, 0xd706,
-	0xa438, 0x4041, 0xa438, 0xa180, 0xa438, 0x1800, 0xa438, 0x0e7f,
-	0xa438, 0x8190, 0xa438, 0xcb93, 0xa438, 0x1000, 0xa438, 0x0ef4,
-	0xa438, 0xd704, 0xa438, 0x7fb8, 0xa438, 0xa008, 0xa438, 0xd706,
-	0xa438, 0x4040, 0xa438, 0xa002, 0xa438, 0xd705, 0xa438, 0x4079,
-	0xa438, 0x1000, 0xa438, 0x10ad, 0xa438, 0x0c03, 0xa438, 0x1502,
-	0xa438, 0x85f0, 0xa438, 0x9503, 0xa438, 0xd705, 0xa438, 0x40d9,
-	0xa438, 0xd70c, 0xa438, 0x6083, 0xa438, 0x0c1f, 0xa438, 0x0d09,
-	0xa438, 0xf003, 0xa438, 0x0c1f, 0xa438, 0x0d0a, 0xa438, 0x0cc0,
-	0xa438, 0x0d80, 0xa438, 0x1000, 0xa438, 0x104f, 0xa438, 0x1000,
-	0xa438, 0x0ef4, 0xa438, 0x8020, 0xa438, 0xd705, 0xa438, 0x40d9,
-	0xa438, 0xd704, 0xa438, 0x609f, 0xa438, 0xd70c, 0xa438, 0x6043,
-	0xa438, 0x8504, 0xa438, 0xcb94, 0xa438, 0x1000, 0xa438, 0x0ef4,
-	0xa438, 0xd706, 0xa438, 0x7fa2, 0xa438, 0x800a, 0xa438, 0x0c03,
-	0xa438, 0x1502, 0xa438, 0x0cf0, 0xa438, 0x05a0, 0xa438, 0x9503,
-	0xa438, 0xd705, 0xa438, 0x40b9, 0xa438, 0x0c1f, 0xa438, 0x0d00,
-	0xa438, 0x8dc0, 0xa438, 0xf005, 0xa438, 0xa190, 0xa438, 0x0c1f,
-	0xa438, 0x0d17, 0xa438, 0x8dc0, 0xa438, 0x1000, 0xa438, 0x104f,
-	0xa438, 0xd705, 0xa438, 0x39cc, 0xa438, 0x0c7d, 0xa438, 0x1800,
-	0xa438, 0x0e67, 0xa438, 0xcb96, 0xa438, 0x0c03, 0xa438, 0x1502,
-	0xa438, 0xab05, 0xa438, 0xac04, 0xa438, 0xac08, 0xa438, 0x9503,
-	0xa438, 0x0c1f, 0xa438, 0x0d00, 0xa438, 0x8dc0, 0xa438, 0x1000,
-	0xa438, 0x104f, 0xa438, 0x1000, 0xa438, 0x1021, 0xa438, 0xd706,
-	0xa438, 0x2215, 0xa438, 0x8099, 0xa438, 0x0c03, 0xa438, 0x1502,
-	0xa438, 0xae02, 0xa438, 0x9503, 0xa438, 0xd706, 0xa438, 0x6451,
-	0xa438, 0xd71f, 0xa438, 0x2e70, 0xa438, 0x0f00, 0xa438, 0xd706,
-	0xa438, 0x3290, 0xa438, 0x80be, 0xa438, 0xd704, 0xa438, 0x2e70,
-	0xa438, 0x8090, 0xa438, 0xd706, 0xa438, 0x339c, 0xa438, 0x8090,
-	0xa438, 0x8718, 0xa438, 0x8910, 0xa438, 0x0c03, 0xa438, 0x1502,
-	0xa438, 0xc500, 0xa438, 0x9503, 0xa438, 0x0c1f, 0xa438, 0x0d17,
-	0xa438, 0x8dc0, 0xa438, 0x1000, 0xa438, 0x104f, 0xa438, 0x0c03,
-	0xa438, 0x1502, 0xa438, 0x8c04, 0xa438, 0x9503, 0xa438, 0xa00a,
-	0xa438, 0xa190, 0xa438, 0xa280, 0xa438, 0xa404, 0xa438, 0x1800,
-	0xa438, 0x0f35, 0xa438, 0x1800, 0xa438, 0x0f07, 0xa438, 0x0c03,
-	0xa438, 0x1502, 0xa438, 0x8c08, 0xa438, 0x8c04, 0xa438, 0x9503,
-	0xa438, 0x1800, 0xa438, 0x0f02, 0xa438, 0x1000, 0xa438, 0x1021,
-	0xa438, 0xd700, 0xa438, 0x5fb4, 0xa438, 0xaa10, 0xa438, 0x1800,
-	0xa438, 0x0c6b, 0xa438, 0x82a0, 0xa438, 0x8406, 0xa438, 0x0c03,
-	0xa438, 0x1502, 0xa438, 0xac04, 0xa438, 0x8602, 0xa438, 0x9503,
-	0xa438, 0x1800, 0xa438, 0x0e09, 0xa438, 0x0000, 0xa438, 0x0000,
-	0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000,
-	0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000,
-	0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x8308, 0xa438, 0x0c03,
-	0xa438, 0x1502, 0xa438, 0xc555, 0xa438, 0x9503, 0xa438, 0xa728,
-	0xa438, 0x8440, 0xa438, 0x0c03, 0xa438, 0x0901, 0xa438, 0x8801,
-	0xa438, 0xd700, 0xa438, 0x4040, 0xa438, 0xa801, 0xa438, 0xd701,
-	0xa438, 0x4052, 0xa438, 0xa810, 0xa438, 0xd701, 0xa438, 0x4054,
-	0xa438, 0xa820, 0xa438, 0xd701, 0xa438, 0x4057, 0xa438, 0xa640,
-	0xa438, 0xd704, 0xa438, 0x4046, 0xa438, 0xa840, 0xa438, 0xd706,
-	0xa438, 0x40b5, 0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0xae20,
-	0xa438, 0x9503, 0xa438, 0xd401, 0xa438, 0x1000, 0xa438, 0x0fcf,
-	0xa438, 0x1000, 0xa438, 0x0fda, 0xa438, 0x1000, 0xa438, 0x1008,
-	0xa438, 0x1000, 0xa438, 0x0fe3, 0xa438, 0xcc00, 0xa438, 0x80c0,
-	0xa438, 0x8103, 0xa438, 0x83e0, 0xa438, 0xd71e, 0xa438, 0x2318,
-	0xa438, 0x01ae, 0xa438, 0xd704, 0xa438, 0x40bc, 0xa438, 0x0c03,
-	0xa438, 0x1502, 0xa438, 0x8302, 0xa438, 0x9503, 0xa438, 0xb801,
-	0xa438, 0xd706, 0xa438, 0x2b59, 0xa438, 0x07f8, 0xa438, 0xd700,
-	0xa438, 0x2109, 0xa438, 0x04ab, 0xa438, 0xa508, 0xa438, 0xcb15,
-	0xa438, 0xd70c, 0xa438, 0x430c, 0xa438, 0x1000, 0xa438, 0x10ca,
-	0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0xa108, 0xa438, 0x9503,
-	0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x0c1f, 0xa438, 0x0f13,
-	0xa438, 0x9503, 0xa438, 0x1000, 0xa438, 0x1021, 0xa438, 0xd70c,
-	0xa438, 0x5fb3, 0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x8f1f,
-	0xa438, 0x9503, 0xa438, 0x1000, 0xa438, 0x1021, 0xa438, 0xd70c,
-	0xa438, 0x7f33, 0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x0c0f,
-	0xa438, 0x0d00, 0xa438, 0x0c70, 0xa438, 0x0b00, 0xa438, 0xab08,
-	0xa438, 0x9503, 0xa438, 0xd704, 0xa438, 0x3cf1, 0xa438, 0x01f9,
-	0xa438, 0x0c1f, 0xa438, 0x0d11, 0xa438, 0xf003, 0xa438, 0x0c1f,
-	0xa438, 0x0d0d, 0xa438, 0x0cc0, 0xa438, 0x0d40, 0xa438, 0x1000,
-	0xa438, 0x104f, 0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0xab80,
-	0xa438, 0x9503, 0xa438, 0x1000, 0xa438, 0x1021, 0xa438, 0xa940,
-	0xa438, 0xd700, 0xa438, 0x5f99, 0xa438, 0x0c03, 0xa438, 0x1502,
-	0xa438, 0x8b80, 0xa438, 0x9503, 0xa438, 0x8940, 0xa438, 0xd700,
-	0xa438, 0x5bbf, 0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x8b08,
-	0xa438, 0x9503, 0xa438, 0xba20, 0xa438, 0xd704, 0xa438, 0x4100,
-	0xa438, 0xd115, 0xa438, 0xd04f, 0xa438, 0xf001, 0xa438, 0x1000,
-	0xa438, 0x1021, 0xa438, 0xd700, 0xa438, 0x5fb4, 0xa438, 0x0c03,
-	0xa438, 0x1502, 0xa438, 0x0c0f, 0xa438, 0x0d00, 0xa438, 0x0c70,
-	0xa438, 0x0b10, 0xa438, 0xab08, 0xa438, 0x9503, 0xa438, 0xd704,
-	0xa438, 0x3cf1, 0xa438, 0x8178, 0xa438, 0x0c1f, 0xa438, 0x0d11,
-	0xa438, 0xf003, 0xa438, 0x0c1f, 0xa438, 0x0d0d, 0xa438, 0x0cc0,
-	0xa438, 0x0d40, 0xa438, 0x1000, 0xa438, 0x104f, 0xa438, 0x0c03,
-	0xa438, 0x1502, 0xa438, 0xab80, 0xa438, 0x9503, 0xa438, 0x1000,
-	0xa438, 0x1021, 0xa438, 0xd706, 0xa438, 0x5fad, 0xa438, 0xd407,
-	0xa438, 0x1000, 0xa438, 0x0fcf, 0xa438, 0x0c03, 0xa438, 0x1502,
-	0xa438, 0x8b88, 0xa438, 0x9503, 0xa438, 0x1000, 0xa438, 0x1021,
-	0xa438, 0xd702, 0xa438, 0x7fa4, 0xa438, 0xd706, 0xa438, 0x61bf,
-	0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x0c30, 0xa438, 0x0110,
-	0xa438, 0xa304, 0xa438, 0x9503, 0xa438, 0xd199, 0xa438, 0xd04b,
-	0xa438, 0x1000, 0xa438, 0x1021, 0xa438, 0xd700, 0xa438, 0x5fb4,
-	0xa438, 0xd704, 0xa438, 0x3cf1, 0xa438, 0x81a5, 0xa438, 0x0c1f,
-	0xa438, 0x0d02, 0xa438, 0xf003, 0xa438, 0x0c1f, 0xa438, 0x0d01,
-	0xa438, 0x0cc0, 0xa438, 0x0d40, 0xa438, 0xa420, 0xa438, 0x8720,
-	0xa438, 0x1000, 0xa438, 0x104f, 0xa438, 0x1000, 0xa438, 0x0fda,
-	0xa438, 0xd70c, 0xa438, 0x41ac, 0xa438, 0x0c03, 0xa438, 0x1502,
-	0xa438, 0x8108, 0xa438, 0x9503, 0xa438, 0x0cc0, 0xa438, 0x0040,
-	0xa438, 0x0c03, 0xa438, 0x0102, 0xa438, 0x0ce0, 0xa438, 0x03e0,
-	0xa438, 0xccce, 0xa438, 0xf008, 0xa438, 0x0cc0, 0xa438, 0x0040,
-	0xa438, 0x0c03, 0xa438, 0x0100, 0xa438, 0x0ce0, 0xa438, 0x0380,
-	0xa438, 0xcc9c, 0xa438, 0x1000, 0xa438, 0x103f, 0xa438, 0x0c03,
-	0xa438, 0x1502, 0xa438, 0xa640, 0xa438, 0x9503, 0xa438, 0xcb16,
-	0xa438, 0xd706, 0xa438, 0x6129, 0xa438, 0xd70c, 0xa438, 0x608c,
-	0xa438, 0xd17a, 0xa438, 0xd04a, 0xa438, 0xf006, 0xa438, 0xd17a,
-	0xa438, 0xd04b, 0xa438, 0xf003, 0xa438, 0xd13d, 0xa438, 0xd04b,
-	0xa438, 0x0c1f, 0xa438, 0x0f14, 0xa438, 0xcb17, 0xa438, 0x8fc0,
-	0xa438, 0x1000, 0xa438, 0x0fbd, 0xa438, 0xaf40, 0xa438, 0x1000,
-	0xa438, 0x0fbd, 0xa438, 0x0cc0, 0xa438, 0x0f80, 0xa438, 0x1000,
-	0xa438, 0x0fbd, 0xa438, 0xafc0, 0xa438, 0x1000, 0xa438, 0x0fbd,
-	0xa438, 0x1000, 0xa438, 0x1021, 0xa438, 0xd701, 0xa438, 0x652e,
-	0xa438, 0xd700, 0xa438, 0x5db4, 0xa438, 0x0c03, 0xa438, 0x1502,
-	0xa438, 0x8640, 0xa438, 0xa702, 0xa438, 0x9503, 0xa438, 0xa720,
-	0xa438, 0x1000, 0xa438, 0x0fda, 0xa438, 0xa108, 0xa438, 0x1000,
-	0xa438, 0x0fec, 0xa438, 0x8108, 0xa438, 0x1000, 0xa438, 0x0fe3,
-	0xa438, 0xa202, 0xa438, 0xa308, 0xa438, 0x0000, 0xa438, 0x0000,
-	0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000,
-	0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000,
-	0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x8308, 0xa438, 0xcb18,
-	0xa438, 0x1000, 0xa438, 0x10c2, 0xa438, 0x1000, 0xa438, 0x1021,
-	0xa438, 0xd70c, 0xa438, 0x2c60, 0xa438, 0x02bd, 0xa438, 0xff58,
-	0xa438, 0x8f1f, 0xa438, 0x1000, 0xa438, 0x1021, 0xa438, 0xd701,
-	0xa438, 0x7f8e, 0xa438, 0x1000, 0xa438, 0x0fe3, 0xa438, 0xa130,
-	0xa438, 0xaa2f, 0xa438, 0xa2d5, 0xa438, 0xa407, 0xa438, 0xa720,
-	0xa438, 0x8310, 0xa438, 0xa308, 0xa438, 0x0000, 0xa438, 0x0000,
-	0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000,
-	0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000,
-	0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x8308, 0xa438, 0x1800,
-	0xa438, 0x02d2, 0xa436, 0xA10E, 0xa438, 0x017f, 0xa436, 0xA10C,
-	0xa438, 0x0e04, 0xa436, 0xA10A, 0xa438, 0x0c67, 0xa436, 0xA108,
-	0xa438, 0x0f13, 0xa436, 0xA106, 0xa438, 0x0eb1, 0xa436, 0xA104,
-	0xa438, 0x0e79, 0xa436, 0xA102, 0xa438, 0x0b23, 0xa436, 0xA100,
-	0xa438, 0x0908, 0xa436, 0xA110, 0xa438, 0x00ff, 0xa436, 0xb87c,
-	0xa438, 0x8ad8, 0xa436, 0xb87e, 0xa438, 0xaf8a, 0xa438, 0xf0af,
-	0xa438, 0x8af9, 0xa438, 0xaf8d, 0xa438, 0xdaaf, 0xa438, 0x8e1c,
-	0xa438, 0xaf8f, 0xa438, 0x03af, 0xa438, 0x8f06, 0xa438, 0xaf8f,
-	0xa438, 0x06af, 0xa438, 0x8f06, 0xa438, 0x0265, 0xa438, 0xa002,
-	0xa438, 0x8d78, 0xa438, 0xaf23, 0xa438, 0x47a1, 0xa438, 0x0d06,
-	0xa438, 0x028b, 0xa438, 0x05af, 0xa438, 0x225a, 0xa438, 0xaf22,
-	0xa438, 0x66f8, 0xa438, 0xe08a, 0xa438, 0x33a0, 0xa438, 0x0005,
-	0xa438, 0x028b, 0xa438, 0x21ae, 0xa438, 0x0ea0, 0xa438, 0x0105,
-	0xa438, 0x028b, 0xa438, 0xb3ae, 0xa438, 0x06a0, 0xa438, 0x0203,
-	0xa438, 0x028c, 0xa438, 0x9dfc, 0xa438, 0x04f8, 0xa438, 0xfbfa,
-	0xa438, 0xef69, 0xa438, 0xe080, 0xa438, 0x13ad, 0xa438, 0x267e,
-	0xa438, 0xd067, 0xa438, 0xe48a, 0xa438, 0x34e4, 0xa438, 0x8a36,
-	0xa438, 0xe48a, 0xa438, 0x38e4, 0xa438, 0x8a3a, 0xa438, 0xd0ae,
-	0xa438, 0xe48a, 0xa438, 0x35e4, 0xa438, 0x8a37, 0xa438, 0xe48a,
-	0xa438, 0x39e4, 0xa438, 0x8a3b, 0xa438, 0xd000, 0xa438, 0xe48a,
-	0xa438, 0x3ce4, 0xa438, 0x8a3d, 0xa438, 0xe48a, 0xa438, 0x3ee4,
-	0xa438, 0x8a3f, 0xa438, 0xe48a, 0xa438, 0x40e4, 0xa438, 0x8a41,
-	0xa438, 0xe48a, 0xa438, 0x42e4, 0xa438, 0x8a43, 0xa438, 0xe48a,
-	0xa438, 0x44d0, 0xa438, 0x02e4, 0xa438, 0x8a45, 0xa438, 0xd00a,
-	0xa438, 0xe48a, 0xa438, 0x46d0, 0xa438, 0x16e4, 0xa438, 0x8a47,
-	0xa438, 0xd01e, 0xa438, 0xe48a, 0xa438, 0x48d1, 0xa438, 0x02bf,
-	0xa438, 0x8dce, 0xa438, 0x026b, 0xa438, 0xd0d1, 0xa438, 0x0abf,
-	0xa438, 0x8dd1, 0xa438, 0x026b, 0xa438, 0xd0d1, 0xa438, 0x16bf,
-	0xa438, 0x8dd4, 0xa438, 0x026b, 0xa438, 0xd0d1, 0xa438, 0x1ebf,
-	0xa438, 0x8dd7, 0xa438, 0x026b, 0xa438, 0xd002, 0xa438, 0x73ab,
-	0xa438, 0xef47, 0xa438, 0xe585, 0xa438, 0x5de4, 0xa438, 0x855c,
-	0xa438, 0xee8a, 0xa438, 0x3301, 0xa438, 0xae03, 0xa438, 0x0224,
-	0xa438, 0x95ef, 0xa438, 0x96fe, 0xa438, 0xfffc, 0xa438, 0x04f8,
-	0xa438, 0xf9fa, 0xa438, 0xcefa, 0xa438, 0xef69, 0xa438, 0xfb02,
-	0xa438, 0x8dab, 0xa438, 0xad50, 0xa438, 0x2ee1, 0xa438, 0x8a44,
-	0xa438, 0xa104, 0xa438, 0x2bee, 0xa438, 0x8a33, 0xa438, 0x02e1,
-	0xa438, 0x8a45, 0xa438, 0xbf8d, 0xa438, 0xce02, 0xa438, 0x6bd0,
-	0xa438, 0xe18a, 0xa438, 0x46bf, 0xa438, 0x8dd1, 0xa438, 0x026b,
-	0xa438, 0xd0e1, 0xa438, 0x8a47, 0xa438, 0xbf8d, 0xa438, 0xd402,
-	0xa438, 0x6bd0, 0xa438, 0xe18a, 0xa438, 0x48bf, 0xa438, 0x8dd7,
-	0xa438, 0x026b, 0xa438, 0xd0af, 0xa438, 0x8c94, 0xa438, 0xd200,
-	0xa438, 0xbe00, 0xa438, 0x0002, 0xa438, 0x8ca5, 0xa438, 0x12a2,
-	0xa438, 0x04f6, 0xa438, 0xe18a, 0xa438, 0x44a1, 0xa438, 0x0020,
-	0xa438, 0xd129, 0xa438, 0xbf8d, 0xa438, 0xce02, 0xa438, 0x6bd0,
-	0xa438, 0xd121, 0xa438, 0xbf8d, 0xa438, 0xd102, 0xa438, 0x6bd0,
-	0xa438, 0xd125, 0xa438, 0xbf8d, 0xa438, 0xd402, 0xa438, 0x6bd0,
-	0xa438, 0xbf8d, 0xa438, 0xd702, 0xa438, 0x6bd0, 0xa438, 0xae44,
-	0xa438, 0xa101, 0xa438, 0x1ed1, 0xa438, 0x31bf, 0xa438, 0x8dce,
-	0xa438, 0x026b, 0xa438, 0xd0bf, 0xa438, 0x8dd1, 0xa438, 0x026b,
-	0xa438, 0xd0d1, 0xa438, 0x2dbf, 0xa438, 0x8dd4, 0xa438, 0x026b,
-	0xa438, 0xd0bf, 0xa438, 0x8dd7, 0xa438, 0x026b, 0xa438, 0xd0ae,
-	0xa438, 0x23a1, 0xa438, 0x0220, 0xa438, 0xd139, 0xa438, 0xbf8d,
-	0xa438, 0xce02, 0xa438, 0x6bd0, 0xa438, 0xbf8d, 0xa438, 0xd102,
-	0xa438, 0x6bd0, 0xa438, 0xd13d, 0xa438, 0xbf8d, 0xa438, 0xd402,
-	0xa438, 0x6bd0, 0xa438, 0xd135, 0xa438, 0xbf8d, 0xa438, 0xd702,
-	0xa438, 0x6bd0, 0xa438, 0xae00, 0xa438, 0xe18a, 0xa438, 0x4411,
-	0xa438, 0xe58a, 0xa438, 0x44d0, 0xa438, 0x00e4, 0xa438, 0x8a3c,
-	0xa438, 0xe48a, 0xa438, 0x3de4, 0xa438, 0x8a3e, 0xa438, 0xe48a,
-	0xa438, 0x3fe4, 0xa438, 0x8a40, 0xa438, 0xe48a, 0xa438, 0x41e4,
-	0xa438, 0x8a42, 0xa438, 0xe48a, 0xa438, 0x4302, 0xa438, 0x73ab,
-	0xa438, 0xef47, 0xa438, 0xe585, 0xa438, 0x5de4, 0xa438, 0x855c,
-	0xa438, 0xffef, 0xa438, 0x96fe, 0xa438, 0xc6fe, 0xa438, 0xfdfc,
-	0xa438, 0x0402, 0xa438, 0x2495, 0xa438, 0xee8a, 0xa438, 0x3300,
-	0xa438, 0x04f8, 0xa438, 0xf9fa, 0xa438, 0xfbef, 0xa438, 0x79fb,
-	0xa438, 0xcffb, 0xa438, 0xd300, 0xa438, 0xa200, 0xa438, 0x09bf,
-	0xa438, 0x8dc2, 0xa438, 0x026b, 0xa438, 0xefaf, 0xa438, 0x8cda,
-	0xa438, 0xa201, 0xa438, 0x09bf, 0xa438, 0x8dc5, 0xa438, 0x026b,
-	0xa438, 0xefaf, 0xa438, 0x8cda, 0xa438, 0xa202, 0xa438, 0x09bf,
-	0xa438, 0x8dc8, 0xa438, 0x026b, 0xa438, 0xefaf, 0xa438, 0x8cda,
-	0xa438, 0xbf8d, 0xa438, 0xcb02, 0xa438, 0x6bef, 0xa438, 0xef64,
-	0xa438, 0xbf8a, 0xa438, 0x3c1a, 0xa438, 0x921a, 0xa438, 0x92d8,
-	0xa438, 0x19d9, 0xa438, 0xef74, 0xa438, 0x0273, 0xa438, 0x93ef,
-	0xa438, 0x47bf, 0xa438, 0x8a3c, 0xa438, 0x1a92, 0xa438, 0x1a92,
-	0xa438, 0xdc19, 0xa438, 0xddd1, 0xa438, 0x0011, 0xa438, 0xa1ff,
-	0xa438, 0xfc13, 0xa438, 0xa310, 0xa438, 0xaf02, 0xa438, 0x8d0e,
-	0xa438, 0xffc7, 0xa438, 0xffef, 0xa438, 0x97ff, 0xa438, 0xfefd,
-	0xa438, 0xfc04, 0xa438, 0xf8fa, 0xa438, 0xfbef, 0xa438, 0x79fb,
-	0xa438, 0xcffb, 0xa438, 0xbf8a, 0xa438, 0x3c1a, 0xa438, 0x921a,
-	0xa438, 0x92d8, 0xa438, 0x19d9, 0xa438, 0xef64, 0xa438, 0xbf8a,
-	0xa438, 0x341a, 0xa438, 0x921a, 0xa438, 0x92d8, 0xa438, 0x19d9,
-	0xa438, 0xef74, 0xa438, 0x0273, 0xa438, 0x78a2, 0xa438, 0x0005,
-	0xa438, 0xbe8d, 0xa438, 0xceae, 0xa438, 0x13a2, 0xa438, 0x0105,
-	0xa438, 0xbe8d, 0xa438, 0xd1ae, 0xa438, 0x0ba2, 0xa438, 0x0205,
-	0xa438, 0xbe8d, 0xa438, 0xd4ae, 0xa438, 0x03be, 0xa438, 0x8dd7,
-	0xa438, 0xad50, 0xa438, 0x17bf, 0xa438, 0x8a45, 0xa438, 0x1a92,
-	0xa438, 0x0702, 0xa438, 0x6bef, 0xa438, 0x07dd, 0xa438, 0xef46,
-	0xa438, 0xbf8a, 0xa438, 0x341a, 0xa438, 0x921a, 0xa438, 0x92dc,
-	0xa438, 0x19dd, 0xa438, 0xffc7, 0xa438, 0xffef, 0xa438, 0x97ff,
-	0xa438, 0xfefc, 0xa438, 0x04ee, 0xa438, 0x8a33, 0xa438, 0x00ee,
-	0xa438, 0x8a32, 0xa438, 0x0404, 0xa438, 0xf8fa, 0xa438, 0xef69,
-	0xa438, 0xe080, 0xa438, 0x13ad, 0xa438, 0x2624, 0xa438, 0xd102,
-	0xa438, 0xbf8d, 0xa438, 0xce02, 0xa438, 0x6bd0, 0xa438, 0xd10a,
-	0xa438, 0xbf8d, 0xa438, 0xd102, 0xa438, 0x6bd0, 0xa438, 0xd116,
-	0xa438, 0xbf8d, 0xa438, 0xd402, 0xa438, 0x6bd0, 0xa438, 0xd11e,
-	0xa438, 0xbf8d, 0xa438, 0xd702, 0xa438, 0x6bd0, 0xa438, 0xee8a,
-	0xa438, 0x3300, 0xa438, 0xef96, 0xa438, 0xfefc, 0xa438, 0x04f8,
-	0xa438, 0xfae0, 0xa438, 0x855c, 0xa438, 0xe185, 0xa438, 0x5def,
-	0xa438, 0x64d0, 0xa438, 0x00e1, 0xa438, 0x8a32, 0xa438, 0xef74,
-	0xa438, 0x0273, 0xa438, 0xc6fe, 0xa438, 0xfc04, 0xa438, 0xf0b2,
-	0xa438, 0x02f0, 0xa438, 0xb282, 0xa438, 0xf0b3, 0xa438, 0x02f0,
-	0xa438, 0xb382, 0xa438, 0x50ac, 0xa438, 0xd450, 0xa438, 0xacd6,
-	0xa438, 0xb6ac, 0xa438, 0xd4b6, 0xa438, 0xacd6, 0xa438, 0xbf8e,
-	0xa438, 0x0d02, 0xa438, 0x6bd0, 0xa438, 0xd0ff, 0xa438, 0xd1fe,
-	0xa438, 0xbf8e, 0xa438, 0x1002, 0xa438, 0x6bd0, 0xa438, 0xd004,
-	0xa438, 0xd14d, 0xa438, 0xbf8e, 0xa438, 0x1302, 0xa438, 0x6bd0,
-	0xa438, 0xd0fc, 0xa438, 0xd1c6, 0xa438, 0xbf8e, 0xa438, 0x1602,
-	0xa438, 0x6bd0, 0xa438, 0xd009, 0xa438, 0xd146, 0xa438, 0xbf8e,
-	0xa438, 0x1902, 0xa438, 0x6bd0, 0xa438, 0xef13, 0xa438, 0xaf2d,
-	0xa438, 0xbdf0, 0xa438, 0xac1c, 0xa438, 0xf0ac, 0xa438, 0x2af0,
-	0xa438, 0xac2c, 0xa438, 0xf0ac, 0xa438, 0x2ef0, 0xa438, 0xac30,
-	0xa438, 0xbf8e, 0xa438, 0xf102, 0xa438, 0x6bef, 0xa438, 0xac28,
-	0xa438, 0x70bf, 0xa438, 0x8eeb, 0xa438, 0x026b, 0xa438, 0xefac,
-	0xa438, 0x2867, 0xa438, 0xbf8e, 0xa438, 0xee02, 0xa438, 0x6bef,
-	0xa438, 0xad28, 0xa438, 0x5bbf, 0xa438, 0x8ff2, 0xa438, 0xd8bf,
-	0xa438, 0x8ff3, 0xa438, 0xd9bf, 0xa438, 0x8ef4, 0xa438, 0x026b,
-	0xa438, 0xd0bf, 0xa438, 0x8ff0, 0xa438, 0xd8bf, 0xa438, 0x8ff1,
-	0xa438, 0xd9bf, 0xa438, 0x8ef7, 0xa438, 0x026b, 0xa438, 0xd0bf,
-	0xa438, 0x8fee, 0xa438, 0xd8bf, 0xa438, 0x8fef, 0xa438, 0xd9bf,
-	0xa438, 0x8efa, 0xa438, 0x026b, 0xa438, 0xd0bf, 0xa438, 0x8fec,
-	0xa438, 0xd8bf, 0xa438, 0x8fed, 0xa438, 0xd9bf, 0xa438, 0x8efd,
-	0xa438, 0x026b, 0xa438, 0xd0bf, 0xa438, 0x8fea, 0xa438, 0xd8bf,
-	0xa438, 0x8feb, 0xa438, 0xd9bf, 0xa438, 0x8f00, 0xa438, 0x026b,
-	0xa438, 0xd0bf, 0xa438, 0x8fe8, 0xa438, 0xd8bf, 0xa438, 0x8fe9,
-	0xa438, 0xd9bf, 0xa438, 0x8e0d, 0xa438, 0x026b, 0xa438, 0xd01f,
-	0xa438, 0x00e1, 0xa438, 0x86ee, 0xa438, 0x1b64, 0xa438, 0xaf3d,
-	0xa438, 0x7abf, 0xa438, 0x8ffe, 0xa438, 0xd8bf, 0xa438, 0x8fff,
-	0xa438, 0xd9bf, 0xa438, 0x8ef4, 0xa438, 0x026b, 0xa438, 0xd0bf,
-	0xa438, 0x8ffc, 0xa438, 0xd8bf, 0xa438, 0x8ffd, 0xa438, 0xd9bf,
-	0xa438, 0x8ef7, 0xa438, 0x026b, 0xa438, 0xd0bf, 0xa438, 0x8ffa,
-	0xa438, 0xd8bf, 0xa438, 0x8ffb, 0xa438, 0xd9bf, 0xa438, 0x8efa,
-	0xa438, 0x026b, 0xa438, 0xd0bf, 0xa438, 0x8ff8, 0xa438, 0xd8bf,
-	0xa438, 0x8ff9, 0xa438, 0xd9bf, 0xa438, 0x8efd, 0xa438, 0x026b,
-	0xa438, 0xd0bf, 0xa438, 0x8ff6, 0xa438, 0xd8bf, 0xa438, 0x8ff7,
-	0xa438, 0xd9bf, 0xa438, 0x8f00, 0xa438, 0x026b, 0xa438, 0xd0bf,
-	0xa438, 0x8ff4, 0xa438, 0xd8bf, 0xa438, 0x8ff5, 0xa438, 0xd9bf,
-	0xa438, 0x8e0d, 0xa438, 0x026b, 0xa438, 0xd0ae, 0xa438, 0xa766,
-	0xa438, 0xac5c, 0xa438, 0xbbac, 0xa438, 0x5c99, 0xa438, 0xac5c,
-	0xa438, 0xf0ac, 0xa438, 0x26f0, 0xa438, 0xac24, 0xa438, 0xf0ac,
-	0xa438, 0x22f0, 0xa438, 0xac20, 0xa438, 0xf0ac, 0xa438, 0x1eaf,
-	0xa438, 0x44f8, 0xa436, 0xb85e, 0xa438, 0x2344, 0xa436, 0xb860,
-	0xa438, 0x2254, 0xa436, 0xb862, 0xa438, 0x2DB5, 0xa436, 0xb864,
-	0xa438, 0x3D6C, 0xa436, 0xb886, 0xa438, 0x44ED, 0xa436, 0xb888,
-	0xa438, 0xffff, 0xa436, 0xb88a, 0xa438, 0xffff, 0xa436, 0xb88c,
-	0xa438, 0xffff, 0xa436, 0xb838, 0xa438, 0x001f, 0xb820, 0x0010,
-	0xa436, 0x87ad, 0xa438, 0xaf87, 0xa438, 0xc5af, 0xa438, 0x87e4,
-	0xa438, 0xaf8a, 0xa438, 0x3daf, 0xa438, 0x8a62, 0xa438, 0xaf8a,
-	0xa438, 0x62af, 0xa438, 0x8a62, 0xa438, 0xaf8a, 0xa438, 0x62af,
-	0xa438, 0x8a62, 0xa438, 0x2810, 0xa438, 0x0d01, 0xa438, 0xe484,
-	0xa438, 0xbf29, 0xa438, 0x100d, 0xa438, 0x11e5, 0xa438, 0x84c0,
-	0xa438, 0x2a10, 0xa438, 0x0d21, 0xa438, 0xe684, 0xa438, 0xc12b,
-	0xa438, 0x100d, 0xa438, 0x31e7, 0xa438, 0x84c2, 0xa438, 0xaf3f,
-	0xa438, 0x7cf8, 0xa438, 0xe080, 0xa438, 0x4cac, 0xa438, 0x222c,
-	0xa438, 0xe080, 0xa438, 0x40ad, 0xa438, 0x2232, 0xa438, 0xbf8a,
-	0xa438, 0x2502, 0xa438, 0x6752, 0xa438, 0xad29, 0xa438, 0x0502,
-	0xa438, 0x8827, 0xa438, 0xae0d, 0xa438, 0xad28, 0xa438, 0x0502,
-	0xa438, 0x8961, 0xa438, 0xae05, 0xa438, 0x0214, 0xa438, 0x04ae,
-	0xa438, 0x00e0, 0xa438, 0x8040, 0xa438, 0xac22, 0xa438, 0x1102,
-	0xa438, 0x13e1, 0xa438, 0xae0c, 0xa438, 0x0288, 0xa438, 0x7c02,
-	0xa438, 0x8a10, 0xa438, 0x0214, 0xa438, 0x2502, 0xa438, 0x1404,
-	0xa438, 0xfcaf, 0xa438, 0x13c6, 0xa438, 0xf8f8, 0xa438, 0xccf9,
-	0xa438, 0xfaef, 0xa438, 0x69fb, 0xa438, 0xe080, 0xa438, 0x18ad,
-	0xa438, 0x223b, 0xa438, 0xbf8a, 0xa438, 0x2b02, 0xa438, 0x6752,
-	0xa438, 0xad28, 0xa438, 0x32bf, 0xa438, 0x8a28, 0xa438, 0x026f,
-	0xa438, 0x17ee, 0xa438, 0x8ff3, 0xa438, 0x00bf, 0xa438, 0x6854,
-	0xa438, 0x0267, 0xa438, 0x52ad, 0xa438, 0x281f, 0xa438, 0xbf68,
-	0xa438, 0x5d02, 0xa438, 0x6752, 0xa438, 0xad28, 0xa438, 0x16e0,
-	0xa438, 0x8ff4, 0xa438, 0xe18f, 0xa438, 0xf502, 0xa438, 0x8891,
-	0xa438, 0xad50, 0xa438, 0x0abf, 0xa438, 0x8a28, 0xa438, 0x026f,
-	0xa438, 0x20ee, 0xa438, 0x8ff3, 0xa438, 0x0102, 0xa438, 0x1404,
-	0xa438, 0xffef, 0xa438, 0x96fe, 0xa438, 0xfdc4, 0xa438, 0xfcfc,
-	0xa438, 0x04f8, 0xa438, 0xf9ef, 0xa438, 0x59e0, 0xa438, 0x8018,
-	0xa438, 0xad22, 0xa438, 0x06bf, 0xa438, 0x8a28, 0xa438, 0x026f,
-	0xa438, 0x17ef, 0xa438, 0x95fd, 0xa438, 0xfc04, 0xa438, 0xf8f9,
-	0xa438, 0xf9ef, 0xa438, 0x59fa, 0xa438, 0xface, 0xa438, 0xe48f,
-	0xa438, 0xfee5, 0xa438, 0x8fff, 0xa438, 0xbf6e, 0xa438, 0x1b02,
-	0xa438, 0x6f20, 0xa438, 0xbf6e, 0xa438, 0x1802, 0xa438, 0x6f17,
-	0xa438, 0xd102, 0xa438, 0xbf6e, 0xa438, 0x1202, 0xa438, 0x6733,
-	0xa438, 0xbf6e, 0xa438, 0x1502, 0xa438, 0x6f17, 0xa438, 0xbe00,
-	0xa438, 0x00cc, 0xa438, 0xbf69, 0xa438, 0xcb02, 0xa438, 0x6733,
-	0xa438, 0xbf69, 0xa438, 0xce02, 0xa438, 0x6f17, 0xa438, 0xbf69,
-	0xa438, 0xce02, 0xa438, 0x6f20, 0xa438, 0xbf69, 0xa438, 0xd102,
-	0xa438, 0x6752, 0xa438, 0xad28, 0xa438, 0xf70c, 0xa438, 0x81bf,
-	0xa438, 0x8ff6, 0xa438, 0x1a98, 0xa438, 0xef59, 0xa438, 0xbf69,
-	0xa438, 0xd402, 0xa438, 0x6752, 0xa438, 0xef95, 0xa438, 0xdc19,
-	0xa438, 0xdd0d, 0xa438, 0x8118, 0xa438, 0xa800, 0xa438, 0x04c9,
-	0xa438, 0xbf69, 0xa438, 0xce02, 0xa438, 0x6f17, 0xa438, 0xe08f,
-	0xa438, 0xfce1, 0xa438, 0x8ffd, 0xa438, 0xef74, 0xa438, 0xe08f,
-	0xa438, 0xfae1, 0xa438, 0x8ffb, 0xa438, 0xef64, 0xa438, 0x026e,
-	0xa438, 0x57ad, 0xa438, 0x5008, 0xa438, 0xe08f, 0xa438, 0xfce1,
-	0xa438, 0x8ffd, 0xa438, 0xae06, 0xa438, 0xe08f, 0xa438, 0xfae1,
-	0xa438, 0x8ffb, 0xa438, 0xe28f, 0xa438, 0xf8e3, 0xa438, 0x8ff9,
-	0xa438, 0xef75, 0xa438, 0xe28f, 0xa438, 0xf6e3, 0xa438, 0x8ff7,
-	0xa438, 0xef65, 0xa438, 0x026e, 0xa438, 0x57ad, 0xa438, 0x5008,
-	0xa438, 0xe28f, 0xa438, 0xf8e3, 0xa438, 0x8ff9, 0xa438, 0xae06,
-	0xa438, 0xe28f, 0xa438, 0xf6e3, 0xa438, 0x8ff7, 0xa438, 0x1b45,
-	0xa438, 0xad27, 0xa438, 0x05d7, 0xa438, 0x0000, 0xa438, 0xae0d,
-	0xa438, 0xef74, 0xa438, 0xe08f, 0xa438, 0xfee1, 0xa438, 0x8fff,
-	0xa438, 0xef64, 0xa438, 0x026e, 0xa438, 0x57c6, 0xa438, 0xfefe,
-	0xa438, 0xef95, 0xa438, 0xfdfd, 0xa438, 0xfc04, 0xa438, 0xf8f9,
-	0xa438, 0xfaef, 0xa438, 0x69fb, 0xa438, 0xe080, 0xa438, 0x18ac,
-	0xa438, 0x2103, 0xa438, 0xaf8a, 0xa438, 0x06bf, 0xa438, 0x8a2b,
-	0xa438, 0xac21, 0xa438, 0x03af, 0xa438, 0x8a06, 0xa438, 0xbf8a,
-	0xa438, 0x2802, 0xa438, 0x6f17, 0xa438, 0xee8f, 0xa438, 0xee00,
-	0xa438, 0xee8f, 0xa438, 0xed00, 0xa438, 0xbf8a, 0xa438, 0x2e02,
-	0xa438, 0x6752, 0xa438, 0xad28, 0xa438, 0x03af, 0xa438, 0x8a06,
-	0xa438, 0xe28f, 0xa438, 0xefe3, 0xa438, 0x8ff0, 0xa438, 0xbf68,
-	0xa438, 0x5102, 0xa438, 0x6752, 0xa438, 0xac28, 0xa438, 0x11e2,
-	0xa438, 0x8ff1, 0xa438, 0xe38f, 0xa438, 0xf2bf, 0xa438, 0x6848,
-	0xa438, 0x0267, 0xa438, 0x52ac, 0xa438, 0x2802, 0xa438, 0xae53,
-	0xa438, 0xbf68, 0xa438, 0x5a02, 0xa438, 0x6752, 0xa438, 0xad28,
-	0xa438, 0x0aef, 0xa438, 0x4502, 0xa438, 0x8891, 0xa438, 0xac50,
-	0xa438, 0x38ae, 0xa438, 0x40bf, 0xa438, 0x8a31, 0xa438, 0x0267,
-	0xa438, 0x52ef, 0xa438, 0x31bf, 0xa438, 0x8a34, 0xa438, 0x0267,
-	0xa438, 0x520c, 0xa438, 0x311e, 0xa438, 0x31bf, 0xa438, 0x8a37,
-	0xa438, 0x0267, 0xa438, 0x520c, 0xa438, 0x311e, 0xa438, 0x31bf,
-	0xa438, 0x8a3a, 0xa438, 0x0267, 0xa438, 0x520c, 0xa438, 0x311e,
-	0xa438, 0x31e7, 0xa438, 0x8fee, 0xa438, 0xa30c, 0xa438, 0x02ae,
-	0xa438, 0x08a3, 0xa438, 0x0e02, 0xa438, 0xae03, 0xa438, 0xa30d,
-	0xa438, 0x0aee, 0xa438, 0x8fed, 0xa438, 0x01bf, 0xa438, 0x8a28,
-	0xa438, 0x026f, 0xa438, 0x2002, 0xa438, 0x1404, 0xa438, 0xffef,
-	0xa438, 0x96fe, 0xa438, 0xfdfc, 0xa438, 0x04f8, 0xa438, 0xfaef,
-	0xa438, 0x69e0, 0xa438, 0x8018, 0xa438, 0xad21, 0xa438, 0x06bf,
-	0xa438, 0x8a28, 0xa438, 0x026f, 0xa438, 0x17ef, 0xa438, 0x96fe,
-	0xa438, 0xfc04, 0xa438, 0xf8a4, 0xa438, 0xb677, 0xa438, 0xa4b6,
-	0xa438, 0x22a4, 0xa438, 0x4222, 0xa438, 0xa668, 0xa438, 0x00b2,
-	0xa438, 0x3e00, 0xa438, 0xb2be, 0xa438, 0x00b3, 0xa438, 0x3e00,
-	0xa438, 0xb3be, 0xa438, 0xd10f, 0xa438, 0xbf8a, 0xa438, 0x5c02,
-	0xa438, 0x6733, 0xa438, 0xbf8a, 0xa438, 0x5f02, 0xa438, 0x6733,
-	0xa438, 0xbf8a, 0xa438, 0x5c02, 0xa438, 0x6f17, 0xa438, 0xbf8a,
-	0xa438, 0x5f02, 0xa438, 0x6f17, 0xa438, 0x1f00, 0xa438, 0xaf3d,
-	0xa438, 0x0c30, 0xa438, 0xa85a, 0xa438, 0xfcad, 0xa438, 0x0e00,
-	0xa436, 0xb818, 0xa438, 0x3f31, 0xa436, 0xb81a, 0xa438, 0x13a4,
-	0xa436, 0xb81c, 0xa438, 0x3d0a, 0xa436, 0xb81e, 0xa438, 0xffff,
-	0xa436, 0xb850, 0xa438, 0xffff, 0xa436, 0xb852, 0xa438, 0xffff,
-	0xa436, 0xb878, 0xa438, 0xffff, 0xa436, 0xb884, 0xa438, 0xffff,
-	0xa436, 0xb832, 0xa438, 0x0007, 0xa436, 0x84cf, 0xa438, 0x0101,
-	0xa466, 0x0002, 0xa436, 0x86a7, 0xa438, 0x0000, 0xa436, 0x0000,
-	0xa438, 0x0000, 0xa436, 0xB82E, 0xa438, 0x0000, 0xa436, 0x8023,
-	0xa438, 0x0000, 0xa436, 0x801E, 0xa438, 0x0023, 0xb820, 0x0000,
-	0xFFFF, 0xFFFF
-};
-
-static const u16 phy_mcu_ram_code_8126a_1_2[] = {
-	0xB87C, 0x8a32, 0xB87E, 0x0400, 0xB87C, 0x8376, 0xB87E, 0x0300,
-	0xce00, 0x6CAF, 0xB87C, 0x8301, 0xB87E, 0x1133, 0xB87C, 0x8105,
-	0xB87E, 0xa000, 0xB87C, 0x8148, 0xB87E, 0xa000, 0xa436, 0x81d8,
-	0xa438, 0x5865, 0xacf8, 0xCCC0, 0xac90, 0x52B0, 0xad2C, 0x8000,
-	0xB87C, 0x83e6, 0xB87E, 0x4A0E, 0xB87C, 0x83d2, 0xB87E, 0x0A0E,
-	0xB87C, 0x80a0, 0xB87E, 0xB8B6, 0xB87C, 0x805e, 0xB87E, 0xB8B6,
-	0xB87C, 0x8057, 0xB87E, 0x305A, 0xB87C, 0x8099, 0xB87E, 0x305A,
-	0xB87C, 0x8052, 0xB87E, 0x3333, 0xB87C, 0x8094, 0xB87E, 0x3333,
-	0xB87C, 0x807F, 0xB87E, 0x7975, 0xB87C, 0x803D, 0xB87E, 0x7975,
-	0xB87C, 0x8036, 0xB87E, 0x305A, 0xB87C, 0x8078, 0xB87E, 0x305A,
-	0xB87C, 0x8031, 0xB87E, 0x3335, 0xB87C, 0x8073, 0xB87E, 0x3335,
-	0xa436, 0x81D8, 0xa438, 0x5865, 0xB87C, 0x867c, 0xB87E, 0x0617,
-	0xad94, 0x0092, 0xB87C, 0x89B1, 0xB87E, 0x5050, 0xB87C, 0x86E0,
-	0xB87E, 0x809A, 0xB87C, 0x86E2, 0xB87E, 0xB34D, 0xB87C, 0x8FD2,
-	0xB87E, 0x004B, 0xB87C, 0x8691, 0xB87E, 0x007D, 0xB87E, 0x00AF,
-	0xB87E, 0x00E1, 0xB87E, 0x00FF, 0xB87C, 0x867F, 0xB87E, 0x0201,
-	0xB87E, 0x0201, 0xB87E, 0x0201, 0xB87E, 0x0201, 0xB87E, 0x0201,
-	0xB87E, 0x0201, 0xB87C, 0x86DA, 0xB87E, 0xCDCD, 0xB87E, 0xE6CD,
-	0xB87E, 0xCDCD, 0xB87C, 0x8FE8, 0xB87E, 0x0368, 0xB87E, 0x033F,
-	0xB87E, 0x1046, 0xB87E, 0x147D, 0xB87E, 0x147D, 0xB87E, 0x147D,
-	0xB87E, 0x0368, 0xB87E, 0x033F, 0xB87E, 0x1046, 0xB87E, 0x147D,
-	0xB87E, 0x147D, 0xB87E, 0x147D, 0xa436, 0x80dd, 0xa438, 0xf0AB,
-	0xa436, 0x80df, 0xa438, 0xC009, 0xa436, 0x80e7, 0xa438, 0x401E,
-	0xa436, 0x80e1, 0xa438, 0x120A, 0xa436, 0x86f2, 0xa438, 0x5094,
-	0xa436, 0x8701, 0xa438, 0x5094, 0xa436, 0x80f1, 0xa438, 0x30CC,
-	0xa436, 0x80f3, 0xa438, 0x0001, 0xa436, 0x80f5, 0xa438, 0x330B,
-	0xa436, 0x80f8, 0xa438, 0xCB76, 0xa436, 0x8105, 0xa438, 0xf0D3,
-	0xa436, 0x8107, 0xa438, 0x0002, 0xa436, 0x8109, 0xa438, 0xff0B,
-	0xa436, 0x810c, 0xa438, 0xC86D, 0xB87C, 0x8a32, 0xB87E, 0x0400,
-	0xa6f8, 0x0000, 0xa6f8, 0x0000, 0xa436, 0x81bc, 0xa438, 0x1300,
-	0xa846, 0x2410, 0xa86A, 0x0801, 0xa85C, 0x9680, 0xa436, 0x841D,
-	0xa438, 0x4A28, 0xa436, 0x8016, 0xa438, 0xBE05, 0xBF9C, 0x004A,
-	0xBF96, 0x41FA, 0xBF9A, 0xDC81, 0xa436, 0x8018, 0xa438, 0x0700,
-	0xa436, 0x8ff4, 0xa438, 0x01AE, 0xa436, 0x8fef, 0xa438, 0x0172,
-	0xa438, 0x00dc, 0xc842, 0x0002, 0xFFFF, 0xFFFF
-};
-
-static const u16 phy_mcu_ram_code_8126a_1_3[] = {
-	0xb892, 0x0000, 0xB88E, 0xC236, 0xB890, 0x1A1C, 0xB88E, 0xC238,
-	0xB890, 0x1C1C, 0xB890, 0x1C1C, 0xB890, 0x2D2D, 0xB890, 0x2D2D,
-	0xB890, 0x2D2A, 0xB890, 0x2A2A, 0xB890, 0x2A2A, 0xB890, 0x2A19,
-	0xB88E, 0xC272, 0xB890, 0x8484, 0xB890, 0x8484, 0xB890, 0x84B4,
-	0xB890, 0xB4B4, 0xB890, 0xB4B4, 0xB890, 0xF8F8, 0xB890, 0xF8F8,
-	0xB890, 0xF8F8, 0xB88E, 0xC000, 0xB890, 0x0303, 0xB890, 0x0405,
-	0xB890, 0x0608, 0xB890, 0x0A0B, 0xB890, 0x0E11, 0xB890, 0x1519,
-	0xB890, 0x2028, 0xB890, 0x3503, 0xB890, 0x0304, 0xB890, 0x0405,
-	0xB890, 0x0606, 0xB890, 0x0708, 0xB890, 0x090A, 0xB890, 0x0B0D,
-	0xB890, 0x0F11, 0xB890, 0x1315, 0xB890, 0x181A, 0xB890, 0x2029,
-	0xB890, 0x2F36, 0xB890, 0x3D43, 0xB890, 0x0101, 0xB890, 0x0102,
-	0xB890, 0x0202, 0xB890, 0x0303, 0xB890, 0x0405, 0xB890, 0x0607,
-	0xB890, 0x090A, 0xB890, 0x0C0E, 0xB88E, 0xC038, 0xB890, 0x6AE1,
-	0xB890, 0x8E6B, 0xB890, 0xA767, 0xB890, 0x01EF, 0xB890, 0x5A63,
-	0xB890, 0x2B99, 0xB890, 0x7F5D, 0xB890, 0x361F, 0xB890, 0xA127,
-	0xB890, 0xB558, 0xB890, 0x11C3, 0xB890, 0x7D85, 0xB890, 0xBAC5,
-	0xB890, 0xE691, 0xB890, 0x8F79, 0xB890, 0x3164, 0xB890, 0x3293,
-	0xB890, 0xB80D, 0xB890, 0xE2B7, 0xB890, 0x0D62, 0xB890, 0x4F85,
-	0xB890, 0xC919, 0xB890, 0x78F3, 0xB890, 0x77FF, 0xB890, 0xBD9E,
-	0xB890, 0x69D6, 0xB890, 0x6DA4, 0xB890, 0x0CC5, 0xB88E, 0xC1D2,
-	0xB890, 0x2425, 0xB890, 0x2627, 0xB890, 0x2829, 0xB890, 0x2A2B,
-	0xB890, 0x2C2D, 0xB890, 0x2E2F, 0xB890, 0x3031, 0xB890, 0x3233,
-	0xB890, 0x2323, 0xB890, 0x2424, 0xB890, 0x2525, 0xB890, 0x2626,
-	0xB890, 0x2727, 0xB890, 0x2828, 0xB890, 0x2929, 0xB890, 0x2A2A,
-	0xB890, 0x2B2C, 0xB890, 0x2C2D, 0xB890, 0x2D2E, 0xB890, 0x2E2F,
-	0xB890, 0x2F30, 0xB890, 0x1A1B, 0xB890, 0x1D1E, 0xB890, 0x1F20,
-	0xB890, 0x2123, 0xB890, 0x2425, 0xB890, 0x2628, 0xB890, 0x292A,
-	0xB890, 0x2B2C, 0xB890, 0x2E12, 0xB88E, 0xC09A, 0xB890, 0xD3D3,
-	0xB890, 0xD3D3, 0xB890, 0xD3D3, 0xB890, 0xD3D3, 0xB890, 0xD3D3,
-	0xB890, 0xD3D3, 0xB890, 0xD3D3, 0xB890, 0xD3D3, 0xFFFF, 0xFFFF
-};
-
 static const u16 phy_mcu_ram_code_8126a_2_1[] = {
 	0xa436, 0x8023, 0xa438, 0x4700, 0xa436, 0xB82E, 0xa438, 0x0001,
 	0xb820, 0x0090, 0xa436, 0xA016, 0xa438, 0x0000, 0xa436, 0xA012,
@@ -3086,49 +2518,6 @@ static const u16 phy_mcu_ram_code_8126a_3_1[] = {
 	0xB820, 0x0000, 0xFFFF, 0xFFFF
 };
 
-static void
-rtl_real_set_phy_mcu_8126a_1_1(struct rtl_hw *hw)
-{
-	rtl_set_phy_mcu_ram_code(hw, phy_mcu_ram_code_8126a_1_1,
-				 ARRAY_SIZE(phy_mcu_ram_code_8126a_1_1));
-}
-
-static void
-rtl_real_set_phy_mcu_8126a_1_2(struct rtl_hw *hw)
-{
-	rtl_set_phy_mcu_ram_code(hw, phy_mcu_ram_code_8126a_1_2,
-				 ARRAY_SIZE(phy_mcu_ram_code_8126a_1_2));
-}
-
-static void
-rtl_real_set_phy_mcu_8126a_1_3(struct rtl_hw *hw)
-{
-	rtl_set_phy_mcu_ram_code(hw, phy_mcu_ram_code_8126a_1_3,
-				 ARRAY_SIZE(phy_mcu_ram_code_8126a_1_3));
-}
-
-void
-rtl_set_phy_mcu_8126a_1(struct rtl_hw *hw)
-{
-	rtl_set_phy_mcu_patch_request(hw);
-
-	rtl_real_set_phy_mcu_8126a_1_1(hw);
-
-	rtl_clear_phy_mcu_patch_request(hw);
-
-	rtl_set_phy_mcu_patch_request(hw);
-
-	rtl_real_set_phy_mcu_8126a_1_2(hw);
-
-	rtl_clear_phy_mcu_patch_request(hw);
-
-	rtl_set_phy_mcu_patch_request(hw);
-
-	rtl_real_set_phy_mcu_8126a_1_3(hw);
-
-	rtl_clear_phy_mcu_patch_request(hw);
-}
-
 static void
 rtl_real_set_phy_mcu_8126a_2_1(struct rtl_hw *hw)
 {
diff --git a/drivers/net/r8169/base/rtl8126a_mcu.h b/drivers/net/r8169/base/rtl8126a_mcu.h
index 61da1d884c..e6d2783487 100644
--- a/drivers/net/r8169/base/rtl8126a_mcu.h
+++ b/drivers/net/r8169/base/rtl8126a_mcu.h
@@ -5,11 +5,9 @@
 #ifndef RTL8126A_MCU_H
 #define RTL8126A_MCU_H
 
-void rtl_set_mac_mcu_8126a_1(struct rtl_hw *hw);
 void rtl_set_mac_mcu_8126a_2(struct rtl_hw *hw);
 void rtl_set_mac_mcu_8126a_3(struct rtl_hw *hw);
 
-void rtl_set_phy_mcu_8126a_1(struct rtl_hw *hw);
 void rtl_set_phy_mcu_8126a_2(struct rtl_hw *hw);
 void rtl_set_phy_mcu_8126a_3(struct rtl_hw *hw);
 
diff --git a/drivers/net/r8169/r8169_ethdev.c b/drivers/net/r8169/r8169_ethdev.c
index 8e46ce09a1..80e03dd53c 100644
--- a/drivers/net/r8169/r8169_ethdev.c
+++ b/drivers/net/r8169/r8169_ethdev.c
@@ -38,7 +38,7 @@ static int rtl_dev_infos_get(struct rte_eth_dev *dev,
 			     struct rte_eth_dev_info *dev_info);
 static int rtl_dev_stats_get(struct rte_eth_dev *dev,
 			     struct rte_eth_stats *rte_stats,
-			     struct eth_queue_stats *qstats);
+			     struct eth_queue_stats *qstats __rte_unused);
 static int rtl_dev_stats_reset(struct rte_eth_dev *dev);
 static int rtl_promiscuous_enable(struct rte_eth_dev *dev);
 static int rtl_promiscuous_disable(struct rte_eth_dev *dev);
@@ -436,7 +436,7 @@ rtl_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
 		break;
 	}
 
-	if (hw->mcfg >= CFG_METHOD_69) {
+	if (hw->mcfg >= CFG_METHOD_70) {
 		dev_info->max_rx_queues = 4;
 		dev_info->max_tx_queues = 2;
 	} else {
diff --git a/drivers/net/r8169/r8169_hw.c b/drivers/net/r8169/r8169_hw.c
index 32c370deba..05d977379a 100644
--- a/drivers/net/r8169/r8169_hw.c
+++ b/drivers/net/r8169/r8169_hw.c
@@ -631,7 +631,6 @@ rtl_stop_all_request(struct rtl_hw *hw)
 	case CFG_METHOD_57:
 	case CFG_METHOD_58:
 	case CFG_METHOD_59:
-	case CFG_METHOD_69:
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
 	case CFG_METHOD_91:
@@ -689,7 +688,6 @@ rtl_wait_txrx_fifo_empty(struct rtl_hw *hw)
 	case CFG_METHOD_57:
 	case CFG_METHOD_58:
 	case CFG_METHOD_59:
-	case CFG_METHOD_69:
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
 	case CFG_METHOD_91:
@@ -929,9 +927,6 @@ rtl8125_set_rx_desc_type(struct rtl_hw *hw)
 	case CFG_METHOD_59:
 		RTL_W8(hw, 0xD8, RTL_R8(hw, 0xD8) & ~EnableRxDescV4_0);
 		break;
-	case CFG_METHOD_69:
-		RTL_W32(hw, RxConfig, EnableRxDescV3 | RTL_R32(hw, RxConfig));
-		break;
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
 	case CFG_METHOD_91:
@@ -967,7 +962,7 @@ rtl8125_hw_config(struct rtl_hw *hw)
 	if (hw->mcfg >= CFG_METHOD_48 && hw->mcfg <= CFG_METHOD_53)
 		RTL_W16(hw, 0x382, 0x221B);
 
-	if ((hw->mcfg >= CFG_METHOD_69 && hw->mcfg <= CFG_METHOD_71) ||
+	if ((hw->mcfg >= CFG_METHOD_70 && hw->mcfg <= CFG_METHOD_71) ||
 	    hw->mcfg == CFG_METHOD_91)
 		rtl_disable_l1_timeout(hw);
 
@@ -1265,7 +1260,6 @@ rtl_set_hw_ops(struct rtl_hw *hw)
 		hw->hw_ops = rtl8125cp_ops;
 		return 0;
 	/* 8126A */
-	case CFG_METHOD_69:
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
 		hw->hw_ops = rtl8126a_ops;
@@ -1553,7 +1547,6 @@ rtl_init_software_variable(struct rtl_hw *hw)
 	case CFG_METHOD_59:
 		hw->chipset_name = RTL8168KD;
 		break;
-	case CFG_METHOD_69:
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
 		hw->chipset_name = RTL8126A;
@@ -1704,7 +1697,6 @@ rtl_init_software_variable(struct rtl_hw *hw)
 	case CFG_METHOD_57:
 	case CFG_METHOD_58:
 	case CFG_METHOD_59:
-	case CFG_METHOD_69:
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
 	case CFG_METHOD_91:
@@ -1730,9 +1722,6 @@ rtl_init_software_variable(struct rtl_hw *hw)
 	case CFG_METHOD_91:
 		hw->HwSuppTxNoCloseVer = 6;
 		break;
-	case CFG_METHOD_69:
-		hw->HwSuppTxNoCloseVer = 4;
-		break;
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
 		hw->HwSuppTxNoCloseVer = 5;
@@ -1824,9 +1813,6 @@ rtl_init_software_variable(struct rtl_hw *hw)
 	case CFG_METHOD_58:
 		hw->sw_ram_code_ver = NIC_RAMCODE_VERSION_CFG_METHOD_58;
 		break;
-	case CFG_METHOD_69:
-		hw->sw_ram_code_ver = NIC_RAMCODE_VERSION_CFG_METHOD_69;
-		break;
 	case CFG_METHOD_70:
 		hw->sw_ram_code_ver = NIC_RAMCODE_VERSION_CFG_METHOD_70;
 		break;
@@ -1849,7 +1835,7 @@ rtl_init_software_variable(struct rtl_hw *hw)
 		hw->mcu_pme_setting = rtl_mac_ocp_read(hw, 0xE00A);
 	}
 
-	if (hw->mcfg >= CFG_METHOD_69)
+	if (hw->mcfg >= CFG_METHOD_70)
 		hw->EnableRss = 1;
 	else
 		hw->EnableRss = 0;
@@ -1869,7 +1855,6 @@ rtl_init_software_variable(struct rtl_hw *hw)
 	case CFG_METHOD_50:
 	case CFG_METHOD_51:
 	case CFG_METHOD_53:
-	case CFG_METHOD_69:
 		hw->HwSuppIntMitiVer = 4;
 		break;
 	case CFG_METHOD_54:
@@ -1888,10 +1873,6 @@ rtl_init_software_variable(struct rtl_hw *hw)
 	}
 
 	switch (hw->mcfg) {
-	case CFG_METHOD_69:
-		hw->HwSuppRxDescType = RX_DESC_RING_TYPE_3;
-		hw->RxDescLength = RX_DESC_LEN_TYPE_3;
-		break;
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
 	case CFG_METHOD_91:
@@ -2370,7 +2351,7 @@ rtl_get_mac_version(struct rtl_hw *hw, struct rte_pci_device *pci_dev)
 		break;
 	case 0x64800000:
 		if (ic_version_id == 0x00000000) {
-			hw->mcfg = CFG_METHOD_69;
+			hw->mcfg = CFG_METHOD_DEFAULT;
 		} else if (ic_version_id == 0x100000) {
 			hw->mcfg = CFG_METHOD_70;
 		} else if (ic_version_id == 0x200000) {
diff --git a/drivers/net/r8169/r8169_hw.h b/drivers/net/r8169/r8169_hw.h
index c8705edad4..a1f841c88d 100644
--- a/drivers/net/r8169/r8169_hw.h
+++ b/drivers/net/r8169/r8169_hw.h
@@ -137,7 +137,6 @@ extern const struct rtl_hw_ops rtl8125cp_ops;
 #define NIC_RAMCODE_VERSION_CFG_METHOD_56  (0x0027)
 #define NIC_RAMCODE_VERSION_CFG_METHOD_57  (0x0027)
 #define NIC_RAMCODE_VERSION_CFG_METHOD_58  (0x0008)
-#define NIC_RAMCODE_VERSION_CFG_METHOD_69  (0x0023)
 #define NIC_RAMCODE_VERSION_CFG_METHOD_70  (0x0033)
 #define NIC_RAMCODE_VERSION_CFG_METHOD_71  (0x0060)
 #define NIC_RAMCODE_VERSION_CFG_METHOD_91  (0x0051)
diff --git a/drivers/net/r8169/r8169_phy.c b/drivers/net/r8169/r8169_phy.c
index 1239319da5..8988c6f288 100644
--- a/drivers/net/r8169/r8169_phy.c
+++ b/drivers/net/r8169/r8169_phy.c
@@ -976,7 +976,6 @@ _rtl_disable_adv_eee(struct rtl_hw *hw)
 	case CFG_METHOD_57:
 	case CFG_METHOD_58:
 	case CFG_METHOD_59:
-	case CFG_METHOD_69:
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
 	case CFG_METHOD_91:
@@ -1073,7 +1072,6 @@ rtl_disable_eee(struct rtl_hw *hw)
 		rtl_clear_eth_phy_ocp_bit(hw, 0xA428, BIT_7);
 		rtl_clear_eth_phy_ocp_bit(hw, 0xA4A2, BIT_9);
 		break;
-	case CFG_METHOD_69:
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
 	case CFG_METHOD_91:
@@ -1211,7 +1209,6 @@ rtl_set_speed_xmii(struct rtl_hw *hw, u8 autoneg, u32 speed, u8 duplex, u64 adv)
 	case CFG_METHOD_91:
 		mask |= BIT_2;
 	/* Fall through */
-	case CFG_METHOD_69:
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
 		mask |= BIT_1;
diff --git a/drivers/net/r8169/r8169_rxtx.c b/drivers/net/r8169/r8169_rxtx.c
index 37f4c4da80..a2e9139ec6 100644
--- a/drivers/net/r8169/r8169_rxtx.c
+++ b/drivers/net/r8169/r8169_rxtx.c
@@ -1345,7 +1345,6 @@ rtl8125_set_tx_tag_num(struct rtl_hw *hw)
 	case CFG_METHOD_53:
 		mac_ocp_data |= (2 << 8);
 		break;
-	case CFG_METHOD_69:
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
 		if (hw->EnableTxNoClose)
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v4 07/13] net/r8169: update hardware configurations for 8126
  2026-02-13  3:20 [PATCH v4 00/13] net/r8169: driver updates and new hardware support Howard Wang
                   ` (5 preceding siblings ...)
  2026-02-13  3:20 ` [PATCH v4 06/13] net/r8169: remove support for CFG_METHOD_69 Howard Wang
@ 2026-02-13  3:20 ` Howard Wang
  2026-02-13  3:20 ` [PATCH v4 08/13] net/r8169: update hardware configurations for 8125 Howard Wang
                   ` (6 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: Howard Wang @ 2026-02-13  3:20 UTC (permalink / raw)
  To: dev; +Cc: pro_nic_dpdk, Howard Wang

Update hw configurations as below:
phy config,
mac mcu patch.

Signed-off-by: Howard Wang <howard_wang@realsil.com.cn>
---
 drivers/net/r8169/base/rtl8126a.c     |  8 +++
 drivers/net/r8169/base/rtl8126a_mcu.c | 76 +++++++++++++++++++--------
 2 files changed, 61 insertions(+), 23 deletions(-)

diff --git a/drivers/net/r8169/base/rtl8126a.c b/drivers/net/r8169/base/rtl8126a.c
index e3f68c1292..5de4ff1274 100644
--- a/drivers/net/r8169/base/rtl8126a.c
+++ b/drivers/net/r8169/base/rtl8126a.c
@@ -456,6 +456,14 @@ rtl_hw_phy_config_8126a_3(struct rtl_hw *hw)
 	rtl_set_eth_phy_ocp_bit(hw, 0xA430, BIT_1 | BIT_0);
 
 	rtl_clear_and_set_eth_phy_ocp_bit(hw, 0xB54C, 0xFFC0, 0x3700);
+
+	rtl_set_eth_phy_ocp_bit(hw, 0xB648, BIT_6);
+	rtl_mdio_direct_write_phy_ocp(hw, 0xB87C, 0x8082);
+	rtl_clear_and_set_eth_phy_ocp_bit(hw, 0xB87E, 0xFF00, 0x5D00);
+	rtl_mdio_direct_write_phy_ocp(hw, 0xB87C, 0x807C);
+	rtl_clear_and_set_eth_phy_ocp_bit(hw, 0xB87E, 0xFF00, 0x5000);
+	rtl_mdio_direct_write_phy_ocp(hw, 0xB87C, 0x809D);
+	rtl_clear_and_set_eth_phy_ocp_bit(hw, 0xB87E, 0xFF00, 0x5000);
 }
 
 static void
diff --git a/drivers/net/r8169/base/rtl8126a_mcu.c b/drivers/net/r8169/base/rtl8126a_mcu.c
index 89ad5f6deb..80de797807 100644
--- a/drivers/net/r8169/base/rtl8126a_mcu.c
+++ b/drivers/net/r8169/base/rtl8126a_mcu.c
@@ -15,8 +15,8 @@ void
 rtl_set_mac_mcu_8126a_2(struct rtl_hw *hw)
 {
 	static const u16 mcu_patch_code[] =  {
-		0xE010, 0xE02C, 0xE04E, 0xE0A4, 0xE0A8, 0xE0AB, 0xE0AE, 0xE0B1, 0xE0B3,
-		0xE0B5, 0xE0B7, 0xE0B9, 0xE0BB, 0xE0BD, 0xE0BF, 0xE0C1, 0xC716, 0xC616,
+		0xE010, 0xE02C, 0xE04E, 0xE0A4, 0xE0A8, 0xE0AB, 0xE0AE, 0xE0B1, 0xE0B5,
+		0xE0B7, 0xE0B9, 0xE0BB, 0xE0BD, 0xE0BF, 0xE0C1, 0xE0C3, 0xC716, 0xC616,
 		0x9EE0, 0xC616, 0x65C0, 0x1500, 0xF009, 0xC714, 0x66E0, 0x41B5, 0x8EE0,
 		0xC611, 0x75C0, 0x4858, 0x9DC0, 0xC707, 0xC608, 0x9EE0, 0xC608, 0xC502,
 		0xBD00, 0x0100, 0xE86C, 0xE000, 0xA000, 0xB404, 0xB430, 0xC070, 0xE926,
@@ -35,10 +35,11 @@ rtl_set_mac_mcu_8126a_2(struct rtl_hw *hw)
 		0x4898, 0x9902, 0xE7C0, 0xC00A, 0xC606, 0xBE00, 0x0C01, 0x1400, 0xF1FE,
 		0xFF80, 0x2362, 0xD456, 0xD404, 0xE400, 0x4166, 0x9CF6, 0xC002, 0xB800,
 		0x14A6, 0x49D1, 0xC602, 0xBE00, 0x4160, 0x49D1, 0xC602, 0xBE00, 0x41E6,
-		0x49D1, 0xC602, 0xBE00, 0x4282, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00,
-		0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00,
-		0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00,
-		0x0000, 0xC602, 0xBE00, 0x0000, 0x6847, 0x0A18, 0x0C02, 0x0B30
+		0x49D1, 0xC602, 0xBE00, 0x4282, 0xC104, 0xC202, 0xBA00, 0x234C, 0xD116,
+		0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000,
+		0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000,
+		0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0x6847, 0x0019, 0x041C,
+		0x1322
 	};
 
 	/* Get BIN mac mcu patch code version */
@@ -51,34 +52,60 @@ rtl_set_mac_mcu_8126a_2(struct rtl_hw *hw)
 
 	rtl_mac_ocp_write(hw, 0xFC26, 0x8000);
 
+	rtl_mac_ocp_write(hw, 0xFC28, 0x00FE);
+	rtl_mac_ocp_write(hw, 0xFC2A, 0x4A14);
 	rtl_mac_ocp_write(hw, 0xFC2C, 0x2360);
 	rtl_mac_ocp_write(hw, 0xFC2E, 0x14A4);
 	rtl_mac_ocp_write(hw, 0xFC30, 0x415E);
 	rtl_mac_ocp_write(hw, 0xFC32, 0x41E4);
 	rtl_mac_ocp_write(hw, 0xFC34, 0x4280);
+	rtl_mac_ocp_write(hw, 0xFC36, 0x234A);
 
-	rtl_mac_ocp_write(hw, 0xFC48, 0x007C);
+	rtl_mac_ocp_write(hw, 0xFC48, 0x00FF);
 }
 
 void
 rtl_set_mac_mcu_8126a_3(struct rtl_hw *hw)
 {
 	static const u16 mcu_patch_code[] =  {
-		0xE010, 0xE02C, 0xE04E, 0xE052, 0xE055, 0xE058, 0xE05B, 0xE05D, 0xE05F,
-		0xE061, 0xE063, 0xE065, 0xE067, 0xE069, 0xE06B, 0xE06D, 0xC716, 0xC616,
-		0x9EE0, 0xC616, 0x65C0, 0x1500, 0xF009, 0xC714, 0x66E0, 0x41B5, 0x8EE0,
-		0xC611, 0x75C0, 0x4858, 0x9DC0, 0xC707, 0xC608, 0x9EE0, 0xC608, 0xC502,
-		0xBD00, 0x0100, 0xE86C, 0xE000, 0xA000, 0xB404, 0xB430, 0xC070, 0xE926,
-		0xC2FE, 0x400A, 0xF11A, 0x63A4, 0x1A00, 0x49B0, 0xF002, 0x4820, 0x49B1,
-		0xF002, 0x4821, 0x49B2, 0xF002, 0x4822, 0x49B3, 0xF002, 0x4823, 0xC411,
-		0x6380, 0x48B0, 0x8B80, 0x6320, 0x41DA, 0x8B20, 0x6380, 0x4830, 0x8B80,
-		0xE003, 0x73A4, 0x9B20, 0xC302, 0xBB00, 0x55E2, 0xC070, 0xE022, 0x4166,
-		0x9CF6, 0xC602, 0xBE00, 0x14A6, 0x49D1, 0xC602, 0xBE00, 0x4178, 0x49D1,
-		0xC602, 0xBE00, 0x41FE, 0x49D1, 0xC602, 0xBE00, 0x429A, 0xC602, 0xBE00,
-		0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00,
-		0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00,
-		0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00,
-		0x0000, 0x6847, 0x0B18, 0x0C02, 0x0D10
+		0xE00A, 0xE026, 0xE048, 0xE04C, 0xE04F, 0xE052, 0xE055, 0xE0AB, 0xE0F8,
+		0xE141, 0xC716, 0xC616, 0x9EE0, 0xC616, 0x65C0, 0x1500, 0xF009, 0xC714,
+		0x66E0, 0x41B5, 0x8EE0, 0xC611, 0x75C0, 0x4858, 0x9DC0, 0xC707, 0xC608,
+		0x9EE0, 0xC608, 0xC502, 0xBD00, 0x0100, 0xE86C, 0xE000, 0xA000, 0xB404,
+		0xB430, 0xC070, 0xE926, 0xC2FE, 0x400A, 0xF11A, 0x63A4, 0x1A00, 0x49B0,
+		0xF002, 0x4820, 0x49B1, 0xF002, 0x4821, 0x49B2, 0xF002, 0x4822, 0x49B3,
+		0xF002, 0x4823, 0xC411, 0x6380, 0x48B0, 0x8B80, 0x6320, 0x41DA, 0x8B20,
+		0x6380, 0x4830, 0x8B80, 0xE003, 0x73A4, 0x9B20, 0xC302, 0xBB00, 0x55E2,
+		0xC070, 0xE022, 0x4166, 0x9CF6, 0xC602, 0xBE00, 0x14A6, 0x49D1, 0xC602,
+		0xBE00, 0x4178, 0x49D1, 0xC602, 0xBE00, 0x41FE, 0x49D1, 0xC602, 0xBE00,
+		0x429A, 0xC74B, 0x76E2, 0xC54A, 0x402E, 0xF034, 0x76E0, 0x402E, 0xF006,
+		0xC503, 0xC403, 0xBC00, 0xC0BC, 0x0AAE, 0x76F0, 0x1601, 0xF023, 0xC741,
+		0x1E04, 0x9EE0, 0x1E40, 0x9EE4, 0xC63D, 0x9EE8, 0xC73D, 0x76E0, 0x4863,
+		0x9EE0, 0xC73A, 0x76E0, 0x48EA, 0x48EB, 0x9EE0, 0xC736, 0x1E01, 0x9EE2,
+		0xC72D, 0x76E0, 0x486F, 0x9EE0, 0xC72D, 0x76E0, 0x48E3, 0x9EE0, 0xC728,
+		0x1E0E, 0x9EE0, 0xC71D, 0x1E01, 0x9EE4, 0xE00D, 0x1E00, 0x9EF0, 0x1E05,
+		0xC715, 0x9EE0, 0xE00A, 0x1E00, 0x9EE2, 0xC614, 0x75CC, 0x48D2, 0x9DCC,
+		0x1E04, 0xC70B, 0x9EE0, 0xB000, 0xB001, 0xB002, 0xB003, 0xB004, 0xB005,
+		0xB006, 0xB007, 0xFFC0, 0xE428, 0xD3C0, 0xBEEF, 0x5B4A, 0xDC46, 0xE0CC,
+		0xE84E, 0xC0A2, 0x0100, 0xC010, 0xE85A, 0xE812, 0xC0B4, 0xC5F4, 0x74A0,
+		0xC6F3, 0x4026, 0xF107, 0x74A2, 0xC6EF, 0x4026, 0xF107, 0xC6ED, 0xBE00,
+		0x753A, 0xC602, 0xBE00, 0x5A3A, 0x7520, 0x49DE, 0xF102, 0xE7F9, 0xC6A1,
+		0x67C6, 0x7520, 0x22D2, 0x26DD, 0x1500, 0xF002, 0xE7F1, 0x7532, 0x26D5,
+		0x0530, 0x0D6C, 0xC42D, 0x308D, 0x7540, 0x4025, 0xF11E, 0x7542, 0x4025,
+		0xF11B, 0x7544, 0x4025, 0xF118, 0xC423, 0x7546, 0x4025, 0xF114, 0x7548,
+		0x4025, 0xF111, 0x754A, 0x4025, 0xF10E, 0xC5C0, 0xC4C0, 0x9CA2, 0xC6C0,
+		0x75CC, 0x4852, 0x9DCC, 0xC6B8, 0x1D7D, 0x9DC2, 0x1D01, 0x9DC0, 0xE7C9,
+		0xC40B, 0x7546, 0x4025, 0xF1FC, 0x7548, 0x4025, 0xF1F9, 0x754A, 0x4025,
+		0xF1F6, 0xE7C0, 0xFFFF, 0xEEEE, 0xC2A6, 0x7340, 0xC2A5, 0x4013, 0xF013,
+		0xC2AC, 0x7340, 0x4835, 0x9B40, 0xC240, 0x7358, 0x48B7, 0x48B2, 0x9B58,
+		0x7346, 0x48B7, 0x48B2, 0x9B46, 0x7340, 0x48B7, 0x48B2, 0x9B40, 0xE012,
+		0xC29A, 0x7340, 0x48B5, 0x9B40, 0xC22E, 0x7358, 0x4837, 0x4832, 0x9B58,
+		0x7346, 0x4837, 0x4832, 0x9B46, 0x7340, 0x4837, 0x4832, 0x9B40, 0xC283,
+		0x7340, 0x49BF, 0xF010, 0xC21B, 0x7344, 0x1300, 0xF104, 0x1B00, 0xC217,
+		0x9B40, 0x1B01, 0xC213, 0x9B44, 0xC213, 0x734C, 0x48B7, 0x9B4C, 0xE008,
+		0xC20C, 0x1B00, 0x9B44, 0xC20B, 0x734C, 0x4837, 0x9B4C, 0xC204, 0xC302,
+		0xBB00, 0x2384, 0xE092, 0xD3C0, 0xE428, 0xDC46, 0xC104, 0xC202, 0xBA00,
+		0x234C, 0xD116, 0x6847, 0x0119, 0x041C, 0x1134
 	};
 
 	/* Get BIN mac mcu patch code version */
@@ -91,12 +118,15 @@ rtl_set_mac_mcu_8126a_3(struct rtl_hw *hw)
 
 	rtl_mac_ocp_write(hw, 0xFC26, 0x8000);
 
+	rtl_mac_ocp_write(hw, 0xFC28, 0x00FE);
+	rtl_mac_ocp_write(hw, 0xFC2A, 0x55DE);
 	rtl_mac_ocp_write(hw, 0xFC2C, 0x14A4);
 	rtl_mac_ocp_write(hw, 0xFC2E, 0x4176);
 	rtl_mac_ocp_write(hw, 0xFC30, 0x41FC);
 	rtl_mac_ocp_write(hw, 0xFC32, 0x4298);
+	rtl_mac_ocp_write(hw, 0xFC3A, 0x234A);
 
-	rtl_mac_ocp_write(hw, 0xFC48, 0x003C);
+	rtl_mac_ocp_write(hw, 0xFC48, 0x023F);
 }
 
 /* ------------------------------------PHY 8126A------------------------------------- */
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v4 08/13] net/r8169: update hardware configurations for 8125
  2026-02-13  3:20 [PATCH v4 00/13] net/r8169: driver updates and new hardware support Howard Wang
                   ` (6 preceding siblings ...)
  2026-02-13  3:20 ` [PATCH v4 07/13] net/r8169: update hardware configurations for 8126 Howard Wang
@ 2026-02-13  3:20 ` Howard Wang
  2026-02-13  3:20 ` [PATCH v4 09/13] net/r8169: add support for RTL9151 Howard Wang
                   ` (5 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: Howard Wang @ 2026-02-13  3:20 UTC (permalink / raw)
  To: dev; +Cc: pro_nic_dpdk, Howard Wang

Update hw configurations as below:
8125a's mac mcu,
8125b's mac mcu,
8125bp's mac mcu,
8125cp's phy config, mac mcu and phy mcu,
8125d's phy config, mac mcu and phy mcu.

Signed-off-by: Howard Wang <howard_wang@realsil.com.cn>
---
 drivers/net/r8169/base/rtl8125a_mcu.c  | 128 ++-----
 drivers/net/r8169/base/rtl8125b_mcu.c  |  56 ++-
 drivers/net/r8169/base/rtl8125bp_mcu.c |  17 +-
 drivers/net/r8169/base/rtl8125cp.c     |  36 ++
 drivers/net/r8169/base/rtl8125cp_mcu.c |  87 ++++-
 drivers/net/r8169/base/rtl8125cp_mcu.h |   1 +
 drivers/net/r8169/base/rtl8125d.c      |   9 +
 drivers/net/r8169/base/rtl8125d_mcu.c  | 506 +++++++++++++++----------
 drivers/net/r8169/r8169_hw.c           |   4 +-
 drivers/net/r8169/r8169_hw.h           |   4 +-
 10 files changed, 514 insertions(+), 334 deletions(-)

diff --git a/drivers/net/r8169/base/rtl8125a_mcu.c b/drivers/net/r8169/base/rtl8125a_mcu.c
index b810787daa..9fd1d59541 100644
--- a/drivers/net/r8169/base/rtl8125a_mcu.c
+++ b/drivers/net/r8169/base/rtl8125a_mcu.c
@@ -15,103 +15,53 @@ void
 rtl_set_mac_mcu_8125a_2(struct rtl_hw *hw)
 {
 	u16 entry_cnt;
-	static const u16 mcu_patch_code_8125a_2[] = {
-		0xE010, 0xE012, 0xE022, 0xE024, 0xE029, 0xE02B, 0xE094, 0xE09D, 0xE09F,
-		0xE0AA, 0xE0B5, 0xE0C6, 0xE0CC, 0xE0D1, 0xE0D6, 0xE0D8, 0xC602, 0xBE00,
-		0x0000, 0xC60F, 0x73C4, 0x49B3, 0xF106, 0x73C2, 0xC608, 0xB406, 0xC609,
-		0xFF80, 0xC605, 0xB406, 0xC605, 0xFF80, 0x0544, 0x0568, 0xE906, 0xCDE8,
-		0xC602, 0xBE00, 0x0000, 0x48C1, 0x48C2, 0x9C46, 0xC402, 0xBC00, 0x0A12,
-		0xC602, 0xBE00, 0x0EBA, 0x1501, 0xF02A, 0x1500, 0xF15D, 0xC661, 0x75C8,
-		0x49D5, 0xF00A, 0x49D6, 0xF008, 0x49D7, 0xF006, 0x49D8, 0xF004, 0x75D2,
-		0x49D9, 0xF150, 0xC553, 0x77A0, 0x75C8, 0x4855, 0x4856, 0x4857, 0x4858,
-		0x48DA, 0x48DB, 0x49FE, 0xF002, 0x485A, 0x49FF, 0xF002, 0x485B, 0x9DC8,
-		0x75D2, 0x4859, 0x9DD2, 0xC643, 0x75C0, 0x49D4, 0xF033, 0x49D0, 0xF137,
-		0xE030, 0xC63A, 0x75C8, 0x49D5, 0xF00E, 0x49D6, 0xF00C, 0x49D7, 0xF00A,
-		0x49D8, 0xF008, 0x75D2, 0x49D9, 0xF005, 0xC62E, 0x75C0, 0x49D7, 0xF125,
-		0xC528, 0x77A0, 0xC627, 0x75C8, 0x4855, 0x4856, 0x4857, 0x4858, 0x48DA,
+	static const u16 mcu_patch_code[] = {
+		0xE010, 0xE062, 0xE072, 0xE074, 0xE079, 0xE07B, 0xE0E4, 0xE0ED, 0xE0EF,
+		0xE0FA, 0xE105, 0xE116, 0xE11C, 0xE121, 0xE126, 0xE12A, 0xB400, 0xB401,
+		0xB402, 0xB403, 0xB404, 0xB405, 0xC03F, 0x7206, 0x49AE, 0xF1FE, 0xC13C,
+		0x9904, 0xC13B, 0x9906, 0x7206, 0x49AE, 0xF1FE, 0x7200, 0x49A0, 0xF10D,
+		0xC534, 0xC133, 0xC238, 0xC338, 0xE817, 0xC337, 0xE815, 0xC336, 0xE813,
+		0xC335, 0xE811, 0xE01B, 0xC129, 0xC22D, 0xC528, 0xC32C, 0xE80B, 0xC526,
+		0xC32A, 0xE808, 0xC524, 0xC328, 0xE805, 0xC522, 0xC326, 0xE802, 0xE00C,
+		0x740E, 0x49CE, 0xF1FE, 0x9908, 0x9D0A, 0x9A0C, 0x9B0E, 0x740E, 0x49CE,
+		0xF1FE, 0xFF80, 0xB005, 0xB004, 0xB003, 0xB002, 0xB001, 0xB000, 0xC604,
+		0xC002, 0xB800, 0x3044, 0xE000, 0xE8E0, 0xF128, 0x0002, 0xFFFF, 0x10EC,
+		0x816A, 0x816F, 0x8164, 0x816D, 0xF000, 0x8001, 0x8002, 0x8003, 0x8004,
+		0xC60F, 0x73C4, 0x49B3, 0xF106, 0x73C2, 0xC608, 0xB406, 0xC609, 0xFF80,
+		0xC605, 0xB406, 0xC605, 0xFF80, 0x0544, 0x0568, 0xE906, 0xCDE8, 0xC602,
+		0xBE00, 0x0000, 0x48C1, 0x48C2, 0x9C46, 0xC402, 0xBC00, 0x0A12, 0xC602,
+		0xBE00, 0x0EBA, 0x1501, 0xF02A, 0x1500, 0xF15D, 0xC661, 0x75C8, 0x49D5,
+		0xF00A, 0x49D6, 0xF008, 0x49D7, 0xF006, 0x49D8, 0xF004, 0x75D2, 0x49D9,
+		0xF150, 0xC553, 0x77A0, 0x75C8, 0x4855, 0x4856, 0x4857, 0x4858, 0x48DA,
 		0x48DB, 0x49FE, 0xF002, 0x485A, 0x49FF, 0xF002, 0x485B, 0x9DC8, 0x75D2,
-		0x4859, 0x9DD2, 0xC616, 0x75C0, 0x4857, 0x9DC0, 0xC613, 0x75C0, 0x49DA,
-		0xF003, 0x49D0, 0xF107, 0xC60B, 0xC50E, 0x48D9, 0x9DC0, 0x4859, 0x9DC0,
-		0xC608, 0xC702, 0xBF00, 0x3AE0, 0xE860, 0xB400, 0xB5D4, 0xE908, 0xE86C,
-		0x1200, 0xC409, 0x6780, 0x48F1, 0x8F80, 0xC404, 0xC602, 0xBE00, 0x10AA,
-		0xC010, 0xEA7C, 0xC602, 0xBE00, 0x0000, 0x740A, 0x4846, 0x4847, 0x9C0A,
-		0xC607, 0x74C0, 0x48C6, 0x9CC0, 0xC602, 0xBE00, 0x13FE, 0xE054, 0x72CA,
-		0x4826, 0x4827, 0x9ACA, 0xC607, 0x72C0, 0x48A6, 0x9AC0, 0xC602, 0xBE00,
-		0x07DC, 0xE054, 0xC60F, 0x74C4, 0x49CC, 0xF109, 0xC60C, 0x74CA, 0x48C7,
-		0x9CCA, 0xC609, 0x74C0, 0x4846, 0x9CC0, 0xC602, 0xBE00, 0x2480, 0xE092,
-		0xE0C0, 0xE054, 0x7420, 0x48C0, 0x9C20, 0x7444, 0xC602, 0xBE00, 0x12F8,
-		0x1BFF, 0x46EB, 0x1BFF, 0xC102, 0xB900, 0x0D5A, 0x1BFF, 0x46EB, 0x1BFF,
-		0xC102, 0xB900, 0x0E2A, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6486,
-		0x0B15, 0x090E, 0x1139
+		0x4859, 0x9DD2, 0xC643, 0x75C0, 0x49D4, 0xF033, 0x49D1, 0xF137, 0xE030,
+		0xC63A, 0x75C8, 0x49D5, 0xF00E, 0x49D6, 0xF00C, 0x49D7, 0xF00A, 0x49D8,
+		0xF008, 0x75D2, 0x49D9, 0xF005, 0xC62E, 0x75C0, 0x49D7, 0xF125, 0xC528,
+		0x77A0, 0xC627, 0x75C8, 0x4855, 0x4856, 0x4857, 0x4858, 0x48DA, 0x48DB,
+		0x49FE, 0xF002, 0x485A, 0x49FF, 0xF002, 0x485B, 0x9DC8, 0x75D2, 0x4859,
+		0x9DD2, 0xC616, 0x75C0, 0x4857, 0x9DC0, 0xC613, 0x75C0, 0x49DA, 0xF003,
+		0x49D1, 0xF107, 0xC60B, 0xC50E, 0x48D9, 0x9DC0, 0x4859, 0x9DC0, 0xC608,
+		0xC702, 0xBF00, 0x3AE0, 0xE860, 0xB400, 0xB5D4, 0xE908, 0xE86C, 0x1200,
+		0xC409, 0x6780, 0x48F1, 0x8F80, 0xC404, 0xC602, 0xBE00, 0x10AA, 0xC010,
+		0xEA7C, 0xC602, 0xBE00, 0x0000, 0x740A, 0x4846, 0x4847, 0x9C0A, 0xC607,
+		0x74C0, 0x48C6, 0x9CC0, 0xC602, 0xBE00, 0x13FE, 0xE054, 0x72CA, 0x4826,
+		0x4827, 0x9ACA, 0xC607, 0x72C0, 0x48A6, 0x9AC0, 0xC602, 0xBE00, 0x07DC,
+		0xE054, 0xC60F, 0x74C4, 0x49CC, 0xF109, 0xC60C, 0x74CA, 0x48C7, 0x9CCA,
+		0xC609, 0x74C0, 0x4846, 0x9CC0, 0xC602, 0xBE00, 0x2480, 0xE092, 0xE0C0,
+		0xE054, 0x7420, 0x48C0, 0x9C20, 0x7444, 0xC602, 0xBE00, 0x12F8, 0x1BFF,
+		0x46EB, 0x1BFF, 0xC102, 0xB900, 0x0D5A, 0x1BFF, 0x46EB, 0x1BFF, 0xC102,
+		0xB900, 0x0E2A, 0xC104, 0xC202, 0xBA00, 0x21DE, 0xD116, 0xC602, 0xBE00,
+		0x0000, 0x6486, 0x0119, 0x0606, 0x1327
 	};
 
-	entry_cnt = ARRAY_SIZE(mcu_patch_code_8125a_2);
+	entry_cnt = ARRAY_SIZE(mcu_patch_code);
 
 	/* Get BIN mac mcu patch code version */
-	hw->bin_mcu_patch_code_ver = rtl_get_bin_mcu_patch_code_ver(mcu_patch_code_8125a_2,
+	hw->bin_mcu_patch_code_ver = rtl_get_bin_mcu_patch_code_ver(mcu_patch_code,
 								    entry_cnt);
 
 	if (hw->hw_mcu_patch_code_ver != hw->bin_mcu_patch_code_ver)
-		rtl_write_mac_mcu_ram_code(hw, mcu_patch_code_8125a_2, entry_cnt);
+		rtl_write_mac_mcu_ram_code(hw, mcu_patch_code, entry_cnt);
 
 	rtl_mac_ocp_write(hw, 0xFC26, 0x8000);
 
diff --git a/drivers/net/r8169/base/rtl8125b_mcu.c b/drivers/net/r8169/base/rtl8125b_mcu.c
index afc17707ec..db3b368b64 100644
--- a/drivers/net/r8169/base/rtl8125b_mcu.c
+++ b/drivers/net/r8169/base/rtl8125b_mcu.c
@@ -14,9 +14,10 @@
 void
 rtl_set_mac_mcu_8125b_2(struct rtl_hw *hw)
 {
-	static const u16 mcu_patch_code_8125b_2[] = {
-		0xE010, 0xE01B, 0xE026, 0xE037, 0xE03D, 0xE057, 0xE05B, 0xE060, 0xE062,
-		0xE064, 0xE066, 0xE068, 0xE06A, 0xE06C, 0xE06E, 0xE070, 0x740A, 0x4846,
+	u16 entry_cnt;
+	static const u16 mcu_patch_code[] = {
+		0xE010, 0xE01B, 0xE026, 0xE037, 0xE03D, 0xE057, 0xE05B, 0xE060, 0xE0B6,
+		0xE103, 0xE14C, 0xE150, 0xE153, 0xE156, 0xE158, 0xE15A, 0x740A, 0x4846,
 		0x4847, 0x9C0A, 0xC607, 0x74C0, 0x48C6, 0x9CC0, 0xC602, 0xBE00, 0x13F0,
 		0xE054, 0x72CA, 0x4826, 0x4827, 0x9ACA, 0xC607, 0x72C0, 0x48A6, 0x9AC0,
 		0xC602, 0xBE00, 0x081C, 0xE054, 0xC60F, 0x74C4, 0x49CC, 0xF109, 0xC60C,
@@ -26,14 +27,46 @@ rtl_set_mac_mcu_8125b_2(struct rtl_hw *hw)
 		0x3168, 0x3ADA, 0x31AB, 0x1A00, 0x9AC0, 0x1300, 0xF1FB, 0x7620, 0x236E,
 		0x276F, 0x1A3C, 0x22A1, 0x41B5, 0x9EE2, 0x76E4, 0x486F, 0x9EE4, 0xC602,
 		0xBE00, 0x4A26, 0x733A, 0x49BB, 0xC602, 0xBE00, 0x47A2, 0x48C1, 0x48C2,
-		0x9C46, 0xC402, 0xBC00, 0x0A52, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00,
-		0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00,
-		0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00,
-		0x0000, 0xC602, 0xBE00, 0x0000
+		0x9C46, 0xC402, 0xBC00, 0x0A52, 0xC74B, 0x76E2, 0xC54A, 0x402E, 0xF034,
+		0x76E0, 0x402E, 0xF006, 0xC703, 0xC403, 0xBC00, 0xC0BC, 0x0980, 0x76F0,
+		0x1601, 0xF023, 0xC741, 0x1E04, 0x9EE0, 0x1E40, 0x9EE4, 0xC63D, 0x9EE8,
+		0xC73D, 0x76E0, 0x4863, 0x9EE0, 0xC73A, 0x76E0, 0x48EA, 0x48EB, 0x9EE0,
+		0xC736, 0x1E01, 0x9EE2, 0xC72D, 0x76E0, 0x486F, 0x9EE0, 0xC72D, 0x76E0,
+		0x48E3, 0x9EE0, 0xC728, 0x1E0E, 0x9EE0, 0xC71D, 0x1E01, 0x9EE4, 0xE00D,
+		0x1E00, 0x9EF0, 0x1E05, 0xC715, 0x9EE0, 0xE00A, 0x1E00, 0x9EE2, 0xC614,
+		0x75CC, 0x48D2, 0x9DCC, 0x1E04, 0xC70B, 0x9EE0, 0xB000, 0xB001, 0xB002,
+		0xB003, 0xB004, 0xB005, 0xB006, 0xB007, 0xFFC0, 0xE428, 0xD3C0, 0xBEEF,
+		0x473E, 0xDC46, 0xE0CC, 0xE84E, 0xC0A2, 0x0100, 0xC010, 0xE85A, 0xE812,
+		0xC0B4, 0xC5F4, 0x74A0, 0xC6F3, 0x4026, 0xF107, 0x74A2, 0xC6EF, 0x4026,
+		0xF107, 0xC6ED, 0xBE00, 0x753A, 0xC602, 0xBE00, 0x462E, 0x7520, 0x49DE,
+		0xF102, 0xE7F9, 0xC6A1, 0x67C6, 0x7520, 0x22D2, 0x26DD, 0x1500, 0xF002,
+		0xE7F1, 0x7532, 0x26D5, 0x0530, 0x0D6C, 0xC42D, 0x308D, 0x7540, 0x4025,
+		0xF11E, 0x7542, 0x4025, 0xF11B, 0x7544, 0x4025, 0xF118, 0xC423, 0x7546,
+		0x4025, 0xF114, 0x7548, 0x4025, 0xF111, 0x754A, 0x4025, 0xF10E, 0xC5C0,
+		0xC4C0, 0x9CA2, 0xC6C0, 0x75CC, 0x4852, 0x9DCC, 0xC6B8, 0x1D7D, 0x9DC2,
+		0x1D01, 0x9DC0, 0xE7C9, 0xC40B, 0x7546, 0x4025, 0xF1FC, 0x7548, 0x4025,
+		0xF1F9, 0x754A, 0x4025, 0xF1F6, 0xE7C0, 0xFFFF, 0xEEEE, 0xC2A6, 0x7340,
+		0xC2A5, 0x4013, 0xF013, 0xC2AC, 0x7340, 0x4835, 0x9B40, 0xC240, 0x7358,
+		0x48B7, 0x48B2, 0x9B58, 0x7346, 0x48B7, 0x48B2, 0x9B46, 0x7340, 0x48B7,
+		0x48B2, 0x9B40, 0xE012, 0xC29A, 0x7340, 0x48B5, 0x9B40, 0xC22E, 0x7358,
+		0x4837, 0x4832, 0x9B58, 0x7346, 0x4837, 0x4832, 0x9B46, 0x7340, 0x4837,
+		0x4832, 0x9B40, 0xC283, 0x7340, 0x49BF, 0xF010, 0xC21B, 0x7344, 0x1300,
+		0xF104, 0x1B00, 0xC217, 0x9B40, 0x1B01, 0xC213, 0x9B44, 0xC213, 0x734C,
+		0x48B7, 0x9B4C, 0xE008, 0xC20C, 0x1B00, 0x9B44, 0xC20B, 0x734C, 0x4837,
+		0x9B4C, 0xC204, 0xC302, 0xBB00, 0x2230, 0xE092, 0xD3C0, 0xE428, 0xDC46,
+		0xC104, 0xC202, 0xBA00, 0x21F8, 0xD116, 0x49D1, 0xC602, 0xBE00, 0x3E7A,
+		0x49D1, 0xC602, 0xBE00, 0x3EDA, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00,
+		0x0000, 0xC602, 0xBE00, 0x0000, 0x6637, 0x0119, 0x0604, 0x1203
 	};
 
-	rtl_write_mac_mcu_ram_code(hw, mcu_patch_code_8125b_2,
-				   ARRAY_SIZE(mcu_patch_code_8125b_2));
+	entry_cnt = ARRAY_SIZE(mcu_patch_code);
+
+	/* Get BIN mac mcu patch code version */
+	hw->bin_mcu_patch_code_ver = rtl_get_bin_mcu_patch_code_ver(mcu_patch_code,
+								    entry_cnt);
+
+	if (hw->hw_mcu_patch_code_ver != hw->bin_mcu_patch_code_ver)
+		rtl_write_mac_mcu_ram_code(hw, mcu_patch_code, entry_cnt);
 
 	rtl_mac_ocp_write(hw, 0xFC26, 0x8000);
 
@@ -43,8 +76,11 @@ rtl_set_mac_mcu_8125b_2(struct rtl_hw *hw)
 	rtl_mac_ocp_write(hw, 0xFC2E, 0x12DA);
 	rtl_mac_ocp_write(hw, 0xFC30, 0x4A20);
 	rtl_mac_ocp_write(hw, 0xFC32, 0x47A0);
+	rtl_mac_ocp_write(hw, 0xFC3C, 0x21F6);
+	rtl_mac_ocp_write(hw, 0xFC3E, 0x3E78);
+	rtl_mac_ocp_write(hw, 0xFC40, 0x3ED8);
 
-	rtl_mac_ocp_write(hw, 0xFC48, 0x003F);
+	rtl_mac_ocp_write(hw, 0xFC48, 0x1C7B);
 }
 
 /* ------------------------------------PHY 8125B--------------------------------------- */
diff --git a/drivers/net/r8169/base/rtl8125bp_mcu.c b/drivers/net/r8169/base/rtl8125bp_mcu.c
index 2a9d0a3d48..a591988657 100644
--- a/drivers/net/r8169/base/rtl8125bp_mcu.c
+++ b/drivers/net/r8169/base/rtl8125bp_mcu.c
@@ -59,8 +59,8 @@ rtl_set_mac_mcu_8125bp_2(struct rtl_hw *hw)
 {
 	u16 entry_cnt;
 	static const u16 mcu_patch_code[] = {
-		0xE010, 0xE033, 0xE046, 0xE04A, 0xE04D, 0xE050, 0xE052, 0xE054, 0xE056,
-		0xE058, 0xE05A, 0xE05C, 0xE05E, 0xE060, 0xE062, 0xE064, 0xB406, 0x1000,
+		0xE010, 0xE033, 0xE046, 0xE04A, 0xE04D, 0xE050, 0xE054, 0xE056, 0xE058,
+		0xE05A, 0xE05C, 0xE05E, 0xE060, 0xE062, 0xE064, 0xE066, 0xB406, 0x1000,
 		0xF016, 0xC61F, 0x400E, 0xF012, 0x218E, 0x25BE, 0x1300, 0xF007, 0x7340,
 		0xC618, 0x400E, 0xF102, 0x48B0, 0x8320, 0xB400, 0x2402, 0x1000, 0xF003,
 		0x7342, 0x8322, 0xB000, 0xE007, 0x7322, 0x9B42, 0x7320, 0x9B40, 0x0300,
@@ -68,11 +68,11 @@ rtl_set_mac_mcu_8125bp_2(struct rtl_hw *hw)
 		0xF00A, 0xC20F, 0x400A, 0xF007, 0x73A4, 0xC20C, 0x400A, 0xF102, 0x48B0,
 		0x9B20, 0x1B00, 0x9BA0, 0xC602, 0xBE00, 0x4392, 0xE6E0, 0xE6E2, 0xC01C,
 		0x4166, 0x9CF6, 0xC002, 0xB800, 0x143C, 0x49D1, 0xC602, 0xBE00, 0x3FC4,
-		0x49D1, 0xC602, 0xBE00, 0x405A, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00,
-		0x0000, 0xC102, 0xB900, 0x0000, 0xC002, 0xB800, 0x0000, 0xC602, 0xBE00,
-		0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00,
-		0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00,
-		0x0000, 0x6936, 0x0B18, 0x0C02, 0x0D22
+		0x49D1, 0xC602, 0xBE00, 0x405A, 0xC104, 0xC202, 0xBA00, 0x22E6, 0xD116,
+		0xC602, 0xBE00, 0x0000, 0xC102, 0xB900, 0x0000, 0xC002, 0xB800, 0x0000,
+		0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000,
+		0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000,
+		0xC602, 0xBE00, 0x0000, 0x6936, 0x0119, 0x030E, 0x0B18
 	};
 
 	entry_cnt = ARRAY_SIZE(mcu_patch_code);
@@ -91,8 +91,9 @@ rtl_set_mac_mcu_8125bp_2(struct rtl_hw *hw)
 	rtl_mac_ocp_write(hw, 0xFC2C, 0x143A);
 	rtl_mac_ocp_write(hw, 0xFC2E, 0x3FC2);
 	rtl_mac_ocp_write(hw, 0xFC30, 0x4058);
+	rtl_mac_ocp_write(hw, 0xFC32, 0x22E4);
 
-	rtl_mac_ocp_write(hw, 0xFC48, 0x001F);
+	rtl_mac_ocp_write(hw, 0xFC48, 0x003F);
 }
 
 /* ------------------------------------PHY 8125BP--------------------------------------- */
diff --git a/drivers/net/r8169/base/rtl8125cp.c b/drivers/net/r8169/base/rtl8125cp.c
index aabee94f4c..9309b20def 100644
--- a/drivers/net/r8169/base/rtl8125cp.c
+++ b/drivers/net/r8169/base/rtl8125cp.c
@@ -26,13 +26,40 @@ hw_ephy_config_8125cp(struct rtl_hw *hw)
 	}
 }
 
+static void
+rtl_tgphy_irq_mask_and_ack(struct rtl_hw *hw)
+{
+	if (hw->mcfg == CFG_METHOD_58) {
+		rtl_mdio_direct_write_phy_ocp(hw, 0xA4D2, 0x0000);
+		(void)rtl_mdio_direct_read_phy_ocp(hw, 0xA4D4);
+	}
+}
+
 static void
 rtl_hw_phy_config_8125cp_1(struct rtl_hw *hw)
 {
+	rtl_tgphy_irq_mask_and_ack(hw);
+
 	rtl_set_eth_phy_ocp_bit(hw, 0xA442, BIT_11);
 
 	rtl_clear_and_set_eth_phy_ocp_bit(hw, 0xad0e, 0x007F, 0x000B);
 	rtl_set_eth_phy_ocp_bit(hw, 0xad78, BIT_4);
+
+	rtl_mdio_direct_write_phy_ocp(hw, 0xB87C, 0x807F);
+	rtl_clear_and_set_eth_phy_ocp_bit(hw, 0xB87E, 0xFF00, 0x5300);
+
+	rtl_mdio_direct_write_phy_ocp(hw, 0xA436, 0x81B8);
+	rtl_mdio_direct_write_phy_ocp(hw, 0xA438, 0x00B4);
+	rtl_mdio_direct_write_phy_ocp(hw, 0xA436, 0x81BA);
+	rtl_mdio_direct_write_phy_ocp(hw, 0xA438, 0x00E4);
+	rtl_mdio_direct_write_phy_ocp(hw, 0xA436, 0x81C5);
+	rtl_mdio_direct_write_phy_ocp(hw, 0xA438, 0x0104);
+	rtl_mdio_direct_write_phy_ocp(hw, 0xA436, 0x81D0);
+	rtl_mdio_direct_write_phy_ocp(hw, 0xA438, 0x054D);
+
+	rtl_set_eth_phy_ocp_bit(hw, 0xA430, BIT_1 | BIT_0);
+	rtl_set_eth_phy_ocp_bit(hw, 0xA442, BIT_7);
+	rtl_clear_eth_phy_ocp_bit(hw, 0xA430, BIT_12);
 }
 
 static void
@@ -52,6 +79,15 @@ hw_mac_mcu_config_8125cp(struct rtl_hw *hw)
 		return;
 
 	rtl_hw_disable_mac_mcu_bps(hw);
+
+	/* Get H/W mac mcu patch code version */
+	hw->hw_mcu_patch_code_ver = rtl_get_hw_mcu_patch_code_ver(hw);
+
+	switch (hw->mcfg) {
+	case CFG_METHOD_58:
+		rtl_set_mac_mcu_8125cp_1(hw);
+		break;
+	}
 }
 
 static void
diff --git a/drivers/net/r8169/base/rtl8125cp_mcu.c b/drivers/net/r8169/base/rtl8125cp_mcu.c
index e4609f46de..e52027ee23 100644
--- a/drivers/net/r8169/base/rtl8125cp_mcu.c
+++ b/drivers/net/r8169/base/rtl8125cp_mcu.c
@@ -11,7 +11,34 @@
 
 /* ------------------------------------MAC 8125CP------------------------------------- */
 
-/* No mac mcu patch code */
+void
+rtl_set_mac_mcu_8125cp_1(struct rtl_hw *hw)
+{
+	u16 entry_cnt;
+	static const u16 mcu_patch_code[] = {
+		0xE010, 0xE014, 0xE016, 0xE018, 0xE01A, 0xE01C, 0xE01E, 0xE020, 0xE022,
+		0xE024, 0xE026, 0xE028, 0xE02A, 0xE02C, 0xE02E, 0xE030, 0xC104, 0xC202,
+		0xBA00, 0x2438, 0xD116, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000,
+		0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000,
+		0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000,
+		0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000,
+		0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000,
+		0xC602, 0xBE00, 0x0000, 0x7023, 0x0019, 0x031A, 0x0E20
+	};
+
+	entry_cnt = ARRAY_SIZE(mcu_patch_code);
+
+	/* Get BIN mac mcu patch code version */
+	hw->bin_mcu_patch_code_ver = rtl_get_bin_mcu_patch_code_ver(mcu_patch_code,
+								    entry_cnt);
+
+	if (hw->hw_mcu_patch_code_ver != hw->bin_mcu_patch_code_ver)
+		rtl_write_mac_mcu_ram_code(hw, mcu_patch_code, entry_cnt);
+
+	rtl_mac_ocp_write(hw, 0xFC26, 0x8000);
+	rtl_mac_ocp_write(hw, 0xFC28, 0x2436);
+	rtl_mac_ocp_write(hw, 0xFC48, 0x0001);
+}
 
 /* ------------------------------------PHY 8125CP------------------------------------- */
 
@@ -28,9 +55,9 @@ static const u16 phy_mcu_ram_code_8125cp_1_1[] = {
 	0xa436, 0xA016, 0xa438, 0x0020, 0xa436, 0xA012, 0xa438, 0x0000,
 	0xa436, 0xA014, 0xa438, 0x1800, 0xa438, 0x8010, 0xa438, 0x1800,
 	0xa438, 0x801b, 0xa438, 0x1800, 0xa438, 0x802b, 0xa438, 0x1800,
-	0xa438, 0x8031, 0xa438, 0x1800, 0xa438, 0x8031, 0xa438, 0x1800,
-	0xa438, 0x8031, 0xa438, 0x1800, 0xa438, 0x8031, 0xa438, 0x1800,
-	0xa438, 0x8031, 0xa438, 0x800a, 0xa438, 0x8530, 0xa438, 0x0c03,
+	0xa438, 0x8031, 0xa438, 0x1800, 0xa438, 0x8037, 0xa438, 0x1800,
+	0xa438, 0x8085, 0xa438, 0x1800, 0xa438, 0x8085, 0xa438, 0x1800,
+	0xa438, 0x8085, 0xa438, 0x800a, 0xa438, 0x8530, 0xa438, 0x0c03,
 	0xa438, 0x1502, 0xa438, 0x8d10, 0xa438, 0x9503, 0xa438, 0xd700,
 	0xa438, 0x6050, 0xa438, 0xaa20, 0xa438, 0x1800, 0xa438, 0x0d53,
 	0xa438, 0xd707, 0xa438, 0x40f6, 0xa438, 0x8901, 0xa438, 0xd704,
@@ -38,26 +65,52 @@ static const u16 phy_mcu_ram_code_8125cp_1_1[] = {
 	0xa438, 0x1000, 0xa438, 0x0e4d, 0xa438, 0x1000, 0xa438, 0x1277,
 	0xa438, 0xd704, 0xa438, 0x7e77, 0xa438, 0x1800, 0xa438, 0x0dc5,
 	0xa438, 0xd700, 0xa438, 0x4063, 0xa438, 0x1800, 0xa438, 0x0d15,
-	0xa438, 0x1800, 0xa438, 0x0d18, 0xa436, 0xA10E, 0xa438, 0xffff,
+	0xa438, 0x1800, 0xa438, 0x0d18, 0xa438, 0xd700, 0xa438, 0x6063,
+	0xa438, 0x1800, 0xa438, 0x0ca6, 0xa438, 0x1800, 0xa438, 0x0ca7,
+	0xa438, 0xd700, 0xa438, 0x6123, 0xa438, 0x1000, 0xa438, 0x1224,
+	0xa438, 0xcd84, 0xa438, 0xd706, 0xa438, 0x6159, 0xa438, 0xd700,
+	0xa438, 0x611c, 0xa438, 0xfff9, 0xa438, 0x1000, 0xa438, 0x1224,
+	0xa438, 0xcd84, 0xa438, 0xd700, 0xa438, 0x605c, 0xa438, 0xfffb,
+	0xa438, 0xcd8a, 0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0xd706,
+	0xa438, 0x6679, 0xa438, 0xd700, 0xa438, 0x663d, 0xa438, 0xd707,
+	0xa438, 0x5f16, 0xa438, 0xd700, 0xa438, 0x5ed0, 0xa438, 0xd700,
+	0xa438, 0x6043, 0xa438, 0xfff3, 0xa438, 0x0c3f, 0xa438, 0x0635,
+	0xa438, 0xa120, 0xa438, 0x8410, 0xa438, 0x800a, 0xa438, 0x8290,
+	0xa438, 0x8306, 0xa438, 0x8b06, 0xa438, 0x8364, 0xa438, 0xcd87,
+	0xa438, 0xa502, 0xa438, 0x8502, 0xa438, 0xa220, 0xa438, 0xa310,
+	0xa438, 0xa340, 0xa438, 0xa00a, 0xa438, 0x0c06, 0xa438, 0x0102,
+	0xa438, 0xa240, 0xa438, 0xa290, 0xa438, 0x8320, 0xa438, 0xa304,
+	0xa438, 0xab02, 0xa438, 0xa404, 0xa438, 0xd1c7, 0xa438, 0xd045,
+	0xa438, 0xd700, 0xa438, 0x605b, 0xa438, 0xfffe, 0xa438, 0xa320,
+	0xa438, 0x1000, 0xa438, 0x1224, 0xa438, 0xd706, 0xa438, 0x5fb5,
+	0xa438, 0x0c3f, 0xa438, 0x062d, 0xa438, 0x8120, 0xa438, 0xcd88,
+	0xa438, 0xd700, 0xa438, 0x605d, 0xa438, 0xfffa, 0xa438, 0xcd8b,
+	0xa438, 0x1000, 0xa438, 0x1224, 0xa438, 0xd706, 0xa438, 0x5f99,
+	0xa438, 0x1800, 0xa438, 0x0c9e, 0xa436, 0xA10E, 0xa438, 0xffff,
 	0xa436, 0xA10C, 0xa438, 0xffff, 0xa436, 0xA10A, 0xa438, 0xffff,
-	0xa436, 0xA108, 0xa438, 0xffff, 0xa436, 0xA106, 0xa438, 0xffff,
+	0xa436, 0xA108, 0xa438, 0x0c89, 0xa436, 0xA106, 0xa438, 0x0ca2,
 	0xa436, 0xA104, 0xa438, 0x0d13, 0xa436, 0xA102, 0xa438, 0x0dbf,
-	0xa436, 0xA100, 0xa438, 0x0d52, 0xa436, 0xA110, 0xa438, 0x0007,
+	0xa436, 0xA100, 0xa438, 0x0d52, 0xa436, 0xA110, 0xa438, 0x001f,
 	0xa436, 0xb87c, 0xa438, 0x85bd, 0xa436, 0xb87e, 0xa438, 0xaf85,
-	0xa438, 0xd5af, 0xa438, 0x85fb, 0xa438, 0xaf85, 0xa438, 0xfbaf,
-	0xa438, 0x85fb, 0xa438, 0xaf85, 0xa438, 0xfbaf, 0xa438, 0x85fb,
-	0xa438, 0xaf85, 0xa438, 0xfbaf, 0xa438, 0x85fb, 0xa438, 0xac28,
+	0xa438, 0xd5af, 0xa438, 0x85fb, 0xa438, 0xaf86, 0xa438, 0x24af,
+	0xa438, 0x8624, 0xa438, 0xaf86, 0xa438, 0x24af, 0xa438, 0x8624,
+	0xa438, 0xaf86, 0xa438, 0x24af, 0xa438, 0x8624, 0xa438, 0xac28,
 	0xa438, 0x0bd4, 0xa438, 0x0294, 0xa438, 0xbf85, 0xa438, 0xf802,
 	0xa438, 0x61c2, 0xa438, 0xae09, 0xa438, 0xd414, 0xa438, 0x50bf,
 	0xa438, 0x85f8, 0xa438, 0x0261, 0xa438, 0xc2bf, 0xa438, 0x60de,
 	0xa438, 0x0261, 0xa438, 0xe1bf, 0xa438, 0x80cf, 0xa438, 0xaf24,
-	0xa438, 0xe8f0, 0xa438, 0xac52, 0xa436, 0xb85e, 0xa438, 0x24e5,
-	0xa436, 0xb860, 0xa438, 0xffff, 0xa436, 0xb862, 0xa438, 0xffff,
-	0xa436, 0xb864, 0xa438, 0xffff, 0xa436, 0xb886, 0xa438, 0xffff,
-	0xa436, 0xb888, 0xa438, 0xffff, 0xa436, 0xb88a, 0xa438, 0xffff,
-	0xa436, 0xb88c, 0xa438, 0xffff, 0xa436, 0xb838, 0xa438, 0x0001,
-	0xb820, 0x0010, 0xB82E, 0x0000, 0xa436, 0x8023, 0xa438, 0x0000,
-	0xB820, 0x0000, 0xFFFF, 0xFFFF
+	0xa438, 0xe8f0, 0xa438, 0xac52, 0xa438, 0xef79, 0xa438, 0xf705,
+	0xa438, 0xeeff, 0xa438, 0xd200, 0xa438, 0xbf86, 0xa438, 0x22d7,
+	0xa438, 0xc201, 0xa438, 0x87d4, 0xa438, 0x0001, 0xa438, 0x025a,
+	0xa438, 0x0abf, 0xa438, 0x8623, 0xa438, 0xd7c2, 0xa438, 0xcc17,
+	0xa438, 0xd400, 0xa438, 0x0102, 0xa438, 0x5a0a, 0xa438, 0xf605,
+	0xa438, 0xaf33, 0xa438, 0x78ff, 0xa438, 0xff00, 0xa436, 0xb85e,
+	0xa438, 0x24e5, 0xa436, 0xb860, 0xa438, 0x3376, 0xa436, 0xb862,
+	0xa438, 0xffff, 0xa436, 0xb864, 0xa438, 0xffff, 0xa436, 0xb886,
+	0xa438, 0xffff, 0xa436, 0xb888, 0xa438, 0xffff, 0xa436, 0xb88a,
+	0xa438, 0xffff, 0xa436, 0xb88c, 0xa438, 0xffff, 0xa436, 0xb838,
+	0xa438, 0x0003, 0xb820, 0x0010, 0xB82E, 0x0000, 0xa436, 0x8023,
+	0xa438, 0x0000, 0xB820, 0x0000, 0xFFFF, 0xFFFF
 };
 
 static void
diff --git a/drivers/net/r8169/base/rtl8125cp_mcu.h b/drivers/net/r8169/base/rtl8125cp_mcu.h
index 8114dab2b9..1f08151818 100644
--- a/drivers/net/r8169/base/rtl8125cp_mcu.h
+++ b/drivers/net/r8169/base/rtl8125cp_mcu.h
@@ -5,6 +5,7 @@
 #ifndef RTL8125CP_MCU_H
 #define RTL8125CP_MCU_H
 
+void rtl_set_mac_mcu_8125cp_1(struct rtl_hw *hw);
 void rtl_set_phy_mcu_8125cp_1(struct rtl_hw *hw);
 
 #endif /* RTL8125CP_MCU_H */
diff --git a/drivers/net/r8169/base/rtl8125d.c b/drivers/net/r8169/base/rtl8125d.c
index 29be122e6b..ac500587e0 100644
--- a/drivers/net/r8169/base/rtl8125d.c
+++ b/drivers/net/r8169/base/rtl8125d.c
@@ -256,6 +256,15 @@ rtl_hw_phy_config_8125d_2(struct rtl_hw *hw)
 	rtl_clear_eth_phy_ocp_bit(hw, 0xA5D4, BIT_5);
 	rtl_clear_eth_phy_ocp_bit(hw, 0xA654, BIT_11);
 
+	rtl_clear_eth_phy_ocp_bit(hw, 0xA448, BIT_10);
+	rtl_clear_eth_phy_ocp_bit(hw, 0xA586, BIT_10);
+
+	rtl_clear_eth_phy_ocp_bit(hw, 0xA4E0, BIT_15);
+	rtl_mdio_direct_write_phy_ocp(hw, 0xA436, 0x8155);
+	rtl_clear_and_set_eth_phy_ocp_bit(hw, 0xA438, 0xFF00, 0x0200);
+	rtl_mdio_direct_write_phy_ocp(hw, 0xA436, 0x815C);
+	rtl_clear_and_set_eth_phy_ocp_bit(hw, 0xA438, 0xFF00, 0x0200);
+
 	rtl_set_eth_phy_ocp_bit(hw, 0xA430, BIT_12 | BIT_0);
 	rtl_set_eth_phy_ocp_bit(hw, 0xA442, BIT_7);
 }
diff --git a/drivers/net/r8169/base/rtl8125d_mcu.c b/drivers/net/r8169/base/rtl8125d_mcu.c
index c99681ad33..304bad2998 100644
--- a/drivers/net/r8169/base/rtl8125d_mcu.c
+++ b/drivers/net/r8169/base/rtl8125d_mcu.c
@@ -17,15 +17,16 @@
 void
 rtl_set_mac_mcu_8125d_1(struct rtl_hw *hw)
 {
-	static const u16 mcu_patch_code_8125d_1[] = {
-		0xE002, 0xE006, 0x4166, 0x9CF6, 0xC002, 0xB800, 0x14A4, 0xC102, 0xB900,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+	u16 entry_cnt;
+	static const u16 mcu_patch_code[] = {
+		0xE010, 0xE014, 0xE018, 0xE01A, 0xE01C, 0xE01E, 0xE020, 0xE022, 0xE024,
+		0xE026, 0xE028, 0xE02A, 0xE02C, 0xE02E, 0xE030, 0xE032, 0x4166, 0x9CF6,
+		0xC002, 0xB800, 0x14A4, 0xC104, 0xC202, 0xBA00, 0x2378, 0xD116, 0xC602,
+		0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602,
+		0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602,
+		0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602,
+		0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602,
+		0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -103,14 +104,24 @@ rtl_set_mac_mcu_8125d_1(struct rtl_hw *hw)
 		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 		0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6938,
-		0x0A18, 0x0217, 0x0D2A
+		0x0A19, 0x030E, 0x0B2B
 	};
 
-	rtl_write_mac_mcu_ram_code(hw, mcu_patch_code_8125d_1,
-				   ARRAY_SIZE(mcu_patch_code_8125d_1));
+	entry_cnt = ARRAY_SIZE(mcu_patch_code);
+
+	/* Get BIN mac mcu patch code version */
+	hw->bin_mcu_patch_code_ver = rtl_get_bin_mcu_patch_code_ver(mcu_patch_code,
+								    entry_cnt);
+
+	if (hw->hw_mcu_patch_code_ver != hw->bin_mcu_patch_code_ver)
+		rtl_write_mac_mcu_ram_code(hw, mcu_patch_code, entry_cnt);
+
 	rtl_mac_ocp_write(hw, 0xFC26, 0x8000);
+
 	rtl_mac_ocp_write(hw, 0xFC28, 0x14A2);
-	rtl_mac_ocp_write(hw, 0xFC48, 0x0001);
+	rtl_mac_ocp_write(hw, 0xFC2A, 0x2376);
+
+	rtl_mac_ocp_write(hw, 0xFC48, 0x0003);
 }
 
 void
@@ -825,6 +836,7 @@ static const u16 phy_mcu_ram_code_8125d_1_1[] = {
 	0xa438, 0x0000, 0xB82E, 0x0000, 0xa436, 0x8023, 0xa438, 0x0000,
 	0xa436, 0x801E, 0xa438, 0x0031, 0xB820, 0x0000, 0xFFFF, 0xFFFF
 };
+
 static const u16 phy_mcu_ram_code_8125d_1_2[] = {
 	0xb892, 0x0000, 0xB88E, 0xC28F, 0xB890, 0x252D, 0xB88E, 0xC290,
 	0xB890, 0xC924, 0xB88E, 0xC291, 0xB890, 0xC92E, 0xB88E, 0xC292,
@@ -859,6 +871,7 @@ static const u16 phy_mcu_ram_code_8125d_1_2[] = {
 	0xB890, 0x9F3A, 0xB88E, 0xC2CB, 0xB890, 0x9F3A, 0xB88E, 0xC2CC,
 	0xB890, 0x4430, 0xFFFF, 0xFFFF
 };
+
 static const u16 phy_mcu_ram_code_8125d_1_3[] = {
 	0xa436, 0xacca, 0xa438, 0x0104, 0xa436, 0xaccc, 0xa438, 0x8000,
 	0xa436, 0xacce, 0xa438, 0xffff, 0xa436, 0xacd0, 0xa438, 0x0fff,
@@ -1045,54 +1058,60 @@ static const u16 phy_mcu_ram_code_8125d_2_1[] = {
 	0xa436, 0x8023, 0xa438, 0x3801, 0xa436, 0xB82E, 0xa438, 0x0001,
 	0xb820, 0x0090, 0xa436, 0xA016, 0xa438, 0x0000, 0xa436, 0xA012,
 	0xa438, 0x0000, 0xa436, 0xA014, 0xa438, 0x1800, 0xa438, 0x8010,
-	0xa438, 0x1800, 0xa438, 0x807e, 0xa438, 0x1800, 0xa438, 0x80be,
-	0xa438, 0x1800, 0xa438, 0x81c8, 0xa438, 0x1800, 0xa438, 0x81c8,
-	0xa438, 0x1800, 0xa438, 0x81c8, 0xa438, 0x1800, 0xa438, 0x81c8,
-	0xa438, 0x1800, 0xa438, 0x81c8, 0xa438, 0xd500, 0xa438, 0xc48d,
+	0xa438, 0x1800, 0xa438, 0x808e, 0xa438, 0x1800, 0xa438, 0x80d6,
+	0xa438, 0x1800, 0xa438, 0x81e2, 0xa438, 0x1800, 0xa438, 0x8205,
+	0xa438, 0x1800, 0xa438, 0x8227, 0xa438, 0x1800, 0xa438, 0x8227,
+	0xa438, 0x1800, 0xa438, 0x8227, 0xa438, 0xd500, 0xa438, 0xc48d,
 	0xa438, 0xd504, 0xa438, 0x8d03, 0xa438, 0xd701, 0xa438, 0x4045,
 	0xa438, 0xad02, 0xa438, 0xd504, 0xa438, 0xd706, 0xa438, 0x2529,
 	0xa438, 0x8021, 0xa438, 0xd718, 0xa438, 0x607b, 0xa438, 0x40da,
-	0xa438, 0xf01b, 0xa438, 0x461a, 0xa438, 0xf045, 0xa438, 0xd718,
-	0xa438, 0x62fb, 0xa438, 0xbb01, 0xa438, 0xd75e, 0xa438, 0x6271,
+	0xa438, 0xf019, 0xa438, 0x459a, 0xa438, 0xf03f, 0xa438, 0xd718,
+	0xa438, 0x62bb, 0xa438, 0xbb01, 0xa438, 0xd75e, 0xa438, 0x6231,
 	0xa438, 0x0cf0, 0xa438, 0x0c10, 0xa438, 0xd501, 0xa438, 0xce01,
-	0xa438, 0xd70c, 0xa438, 0x6187, 0xa438, 0x0cf0, 0xa438, 0x0470,
-	0xa438, 0x0cf0, 0xa438, 0x0430, 0xa438, 0x0cf0, 0xa438, 0x0410,
-	0xa438, 0xce00, 0xa438, 0xd505, 0xa438, 0x0c0f, 0xa438, 0x0808,
-	0xa438, 0xf002, 0xa438, 0xa4f0, 0xa438, 0xf042, 0xa438, 0xbb02,
-	0xa438, 0xd75e, 0xa438, 0x6271, 0xa438, 0x0cf0, 0xa438, 0x0c20,
-	0xa438, 0xd501, 0xa438, 0xce01, 0xa438, 0xd70c, 0xa438, 0x6187,
-	0xa438, 0x0cf0, 0xa438, 0x0470, 0xa438, 0x0cf0, 0xa438, 0x0430,
-	0xa438, 0x0cf0, 0xa438, 0x0420, 0xa438, 0xce00, 0xa438, 0xd505,
+	0xa438, 0xd70c, 0xa438, 0x6147, 0xa438, 0x8480, 0xa438, 0x8440,
+	0xa438, 0x8420, 0xa438, 0xa410, 0xa438, 0xce00, 0xa438, 0xd505,
+	0xa438, 0x0c0f, 0xa438, 0x0808, 0xa438, 0xf002, 0xa438, 0xa4f0,
+	0xa438, 0xf03c, 0xa438, 0xbb02, 0xa438, 0xd75e, 0xa438, 0x6231,
+	0xa438, 0x0cf0, 0xa438, 0x0c20, 0xa438, 0xd501, 0xa438, 0xce01,
+	0xa438, 0xd70c, 0xa438, 0x6147, 0xa438, 0x8480, 0xa438, 0x8440,
+	0xa438, 0xa420, 0xa438, 0x8410, 0xa438, 0xce00, 0xa438, 0xd505,
 	0xa438, 0x0c0f, 0xa438, 0x0804, 0xa438, 0xf002, 0xa438, 0xa4f0,
-	0xa438, 0xf02c, 0xa438, 0xbb04, 0xa438, 0xd75e, 0xa438, 0x6271,
+	0xa438, 0xf028, 0xa438, 0xbb04, 0xa438, 0xd75e, 0xa438, 0x6231,
 	0xa438, 0x0cf0, 0xa438, 0x0c40, 0xa438, 0xd501, 0xa438, 0xce01,
-	0xa438, 0xd70c, 0xa438, 0x6187, 0xa438, 0x0cf0, 0xa438, 0x0470,
-	0xa438, 0x0cf0, 0xa438, 0x0450, 0xa438, 0x0cf0, 0xa438, 0x0440,
-	0xa438, 0xce00, 0xa438, 0xd505, 0xa438, 0x0c0f, 0xa438, 0x0802,
-	0xa438, 0xf002, 0xa438, 0xa4f0, 0xa438, 0xf016, 0xa438, 0xbb08,
-	0xa438, 0xd75e, 0xa438, 0x6271, 0xa438, 0x0cf0, 0xa438, 0x0c80,
-	0xa438, 0xd501, 0xa438, 0xce01, 0xa438, 0xd70c, 0xa438, 0x6187,
-	0xa438, 0x0cf0, 0xa438, 0x04b0, 0xa438, 0x0cf0, 0xa438, 0x0490,
-	0xa438, 0x0cf0, 0xa438, 0x0480, 0xa438, 0xce00, 0xa438, 0xd505,
+	0xa438, 0xd70c, 0xa438, 0x6147, 0xa438, 0x8480, 0xa438, 0xa440,
+	0xa438, 0x8420, 0xa438, 0x8410, 0xa438, 0xce00, 0xa438, 0xd505,
+	0xa438, 0x0c0f, 0xa438, 0x0802, 0xa438, 0xf002, 0xa438, 0xa4f0,
+	0xa438, 0xf014, 0xa438, 0xbb08, 0xa438, 0xd75e, 0xa438, 0x6231,
+	0xa438, 0x0cf0, 0xa438, 0x0c80, 0xa438, 0xd501, 0xa438, 0xce01,
+	0xa438, 0xd70c, 0xa438, 0x6147, 0xa438, 0xa480, 0xa438, 0x8440,
+	0xa438, 0x8420, 0xa438, 0x8410, 0xa438, 0xce00, 0xa438, 0xd505,
 	0xa438, 0x0c0f, 0xa438, 0x0801, 0xa438, 0xf002, 0xa438, 0xa4f0,
-	0xa438, 0xce00, 0xa438, 0xd500, 0xa438, 0x1800, 0xa438, 0x165a,
-	0xa438, 0xd75e, 0xa438, 0x67b1, 0xa438, 0xd504, 0xa438, 0xd71e,
-	0xa438, 0x65bb, 0xa438, 0x63da, 0xa438, 0x61f9, 0xa438, 0x0cf0,
+	0xa438, 0xce00, 0xa438, 0xd500, 0xa438, 0x1000, 0xa438, 0x1a8a,
+	0xa438, 0x1000, 0xa438, 0x1829, 0xa438, 0xd73e, 0xa438, 0x6074,
+	0xa438, 0xd718, 0xa438, 0x5f2d, 0xa438, 0x1000, 0xa438, 0x81b7,
+	0xa438, 0x1000, 0xa438, 0x1a8a, 0xa438, 0x1000, 0xa438, 0x1829,
+	0xa438, 0xd73e, 0xa438, 0x7f74, 0xa438, 0x1000, 0xa438, 0x81ce,
+	0xa438, 0x1000, 0xa438, 0x1a8a, 0xa438, 0x1000, 0xa438, 0x1829,
+	0xa438, 0xd718, 0xa438, 0x5f6d, 0xa438, 0x1800, 0xa438, 0x1660,
+	0xa438, 0xd75e, 0xa438, 0x68b1, 0xa438, 0xd504, 0xa438, 0xd71e,
+	0xa438, 0x667b, 0xa438, 0x645a, 0xa438, 0x6239, 0xa438, 0x0cf0,
 	0xa438, 0x0c10, 0xa438, 0xd505, 0xa438, 0x0c0f, 0xa438, 0x0808,
-	0xa438, 0xd501, 0xa438, 0xce01, 0xa438, 0xd70c, 0xa438, 0x6087,
-	0xa438, 0x0cf0, 0xa438, 0x0410, 0xa438, 0xf02c, 0xa438, 0xa4f0,
-	0xa438, 0xf02a, 0xa438, 0x0cf0, 0xa438, 0x0c20, 0xa438, 0xd505,
-	0xa438, 0x0c0f, 0xa438, 0x0804, 0xa438, 0xd501, 0xa438, 0xce01,
-	0xa438, 0xd70c, 0xa438, 0x6087, 0xa438, 0x0cf0, 0xa438, 0x0420,
-	0xa438, 0xf01e, 0xa438, 0xa4f0, 0xa438, 0xf01c, 0xa438, 0x0cf0,
+	0xa438, 0xd501, 0xa438, 0xce01, 0xa438, 0xd70c, 0xa438, 0x60c7,
+	0xa438, 0x8480, 0xa438, 0x8440, 0xa438, 0x8420, 0xa438, 0xa410,
+	0xa438, 0xf032, 0xa438, 0xa4f0, 0xa438, 0xf030, 0xa438, 0x0cf0,
+	0xa438, 0x0c20, 0xa438, 0xd505, 0xa438, 0x0c0f, 0xa438, 0x0804,
+	0xa438, 0xd501, 0xa438, 0xce01, 0xa438, 0xd70c, 0xa438, 0x60c7,
+	0xa438, 0x8480, 0xa438, 0x8440, 0xa438, 0xa420, 0xa438, 0x8410,
+	0xa438, 0xf022, 0xa438, 0xa4f0, 0xa438, 0xf020, 0xa438, 0x0cf0,
 	0xa438, 0x0c40, 0xa438, 0xd505, 0xa438, 0x0c0f, 0xa438, 0x0802,
-	0xa438, 0xd501, 0xa438, 0xce01, 0xa438, 0xd70c, 0xa438, 0x6087,
-	0xa438, 0x0cf0, 0xa438, 0x0440, 0xa438, 0xf010, 0xa438, 0xa4f0,
-	0xa438, 0xf00e, 0xa438, 0x0cf0, 0xa438, 0x0c80, 0xa438, 0xd505,
-	0xa438, 0x0c0f, 0xa438, 0x0801, 0xa438, 0xd501, 0xa438, 0xce01,
-	0xa438, 0xd70c, 0xa438, 0x6087, 0xa438, 0x0cf0, 0xa438, 0x0480,
+	0xa438, 0xd501, 0xa438, 0xce01, 0xa438, 0xd70c, 0xa438, 0x60c7,
+	0xa438, 0x8480, 0xa438, 0xa440, 0xa438, 0x8420, 0xa438, 0x8410,
+	0xa438, 0xf012, 0xa438, 0xa4f0, 0xa438, 0xf010, 0xa438, 0x0cf0,
+	0xa438, 0x0c80, 0xa438, 0xd505, 0xa438, 0x0c0f, 0xa438, 0x0801,
+	0xa438, 0xd501, 0xa438, 0xce01, 0xa438, 0xd70c, 0xa438, 0x60c7,
+	0xa438, 0xa480, 0xa438, 0x8440, 0xa438, 0x8420, 0xa438, 0x8410,
 	0xa438, 0xf002, 0xa438, 0xa4f0, 0xa438, 0x1800, 0xa438, 0x168c,
-	0xa438, 0xd500, 0xa438, 0xd706, 0xa438, 0x2529, 0xa438, 0x80c8,
+	0xa438, 0xd500, 0xa438, 0xd706, 0xa438, 0x2529, 0xa438, 0x80e0,
 	0xa438, 0xd718, 0xa438, 0x607b, 0xa438, 0x40da, 0xa438, 0xf00f,
 	0xa438, 0x431a, 0xa438, 0xf021, 0xa438, 0xd718, 0xa438, 0x617b,
 	0xa438, 0x1000, 0xa438, 0x1a8a, 0xa438, 0x1000, 0xa438, 0x1b1a,
@@ -1105,18 +1124,18 @@ static const u16 phy_mcu_ram_code_8125d_2_1[] = {
 	0xa438, 0xf026, 0xa438, 0xf07b, 0xa438, 0x1000, 0xa438, 0x1a8a,
 	0xa438, 0x1000, 0xa438, 0x1b1a, 0xa438, 0xd718, 0xa438, 0x608e,
 	0xa438, 0xd73e, 0xa438, 0x5f34, 0xa438, 0xf029, 0xa438, 0xf08f,
-	0xa438, 0x1000, 0xa438, 0x819f, 0xa438, 0x1000, 0xa438, 0x1a8a,
-	0xa438, 0xd73e, 0xa438, 0x7fb4, 0xa438, 0x1000, 0xa438, 0x81b4,
+	0xa438, 0x1000, 0xa438, 0x81b7, 0xa438, 0x1000, 0xa438, 0x1a8a,
+	0xa438, 0xd73e, 0xa438, 0x7fb4, 0xa438, 0x1000, 0xa438, 0x81ce,
 	0xa438, 0x1000, 0xa438, 0x1a8a, 0xa438, 0xd718, 0xa438, 0x5fae,
-	0xa438, 0xf028, 0xa438, 0x1000, 0xa438, 0x819f, 0xa438, 0x1000,
+	0xa438, 0xf028, 0xa438, 0x1000, 0xa438, 0x81b7, 0xa438, 0x1000,
 	0xa438, 0x1a8a, 0xa438, 0xd73e, 0xa438, 0x7fb4, 0xa438, 0x1000,
-	0xa438, 0x81b4, 0xa438, 0x1000, 0xa438, 0x1a8a, 0xa438, 0xd718,
-	0xa438, 0x5fae, 0xa438, 0xf039, 0xa438, 0x1000, 0xa438, 0x819f,
+	0xa438, 0x81ce, 0xa438, 0x1000, 0xa438, 0x1a8a, 0xa438, 0xd718,
+	0xa438, 0x5fae, 0xa438, 0xf039, 0xa438, 0x1000, 0xa438, 0x81b7,
 	0xa438, 0x1000, 0xa438, 0x1a8a, 0xa438, 0xd73e, 0xa438, 0x7fb4,
-	0xa438, 0x1000, 0xa438, 0x81b4, 0xa438, 0x1000, 0xa438, 0x1a8a,
+	0xa438, 0x1000, 0xa438, 0x81ce, 0xa438, 0x1000, 0xa438, 0x1a8a,
 	0xa438, 0xd718, 0xa438, 0x5fae, 0xa438, 0xf04a, 0xa438, 0x1000,
-	0xa438, 0x819f, 0xa438, 0x1000, 0xa438, 0x1a8a, 0xa438, 0xd73e,
-	0xa438, 0x7fb4, 0xa438, 0x1000, 0xa438, 0x81b4, 0xa438, 0x1000,
+	0xa438, 0x81b7, 0xa438, 0x1000, 0xa438, 0x1a8a, 0xa438, 0xd73e,
+	0xa438, 0x7fb4, 0xa438, 0x1000, 0xa438, 0x81ce, 0xa438, 0x1000,
 	0xa438, 0x1a8a, 0xa438, 0xd718, 0xa438, 0x5fae, 0xa438, 0xf05b,
 	0xa438, 0xd719, 0xa438, 0x4119, 0xa438, 0xd504, 0xa438, 0xac01,
 	0xa438, 0xae01, 0xa438, 0xd500, 0xa438, 0x1000, 0xa438, 0x1a78,
@@ -1149,158 +1168,233 @@ static const u16 phy_mcu_ram_code_8125d_2_1[] = {
 	0xa438, 0xd505, 0xa438, 0xd719, 0xa438, 0x4079, 0xa438, 0xa80f,
 	0xa438, 0xf003, 0xa438, 0x4058, 0xa438, 0xa801, 0xa438, 0x1800,
 	0xa438, 0x1736, 0xa438, 0xd73e, 0xa438, 0xd505, 0xa438, 0x3088,
-	0xa438, 0x81a6, 0xa438, 0x6193, 0xa438, 0x6132, 0xa438, 0x60d1,
-	0xa438, 0x3298, 0xa438, 0x81b1, 0xa438, 0xf00a, 0xa438, 0xa808,
-	0xa438, 0xf008, 0xa438, 0xa804, 0xa438, 0xf006, 0xa438, 0xa802,
-	0xa438, 0xf004, 0xa438, 0xa801, 0xa438, 0xf002, 0xa438, 0xa80f,
-	0xa438, 0xd500, 0xa438, 0x0800, 0xa438, 0xd505, 0xa438, 0xd75e,
-	0xa438, 0x6211, 0xa438, 0xd71e, 0xa438, 0x619b, 0xa438, 0x611a,
-	0xa438, 0x6099, 0xa438, 0x0c0f, 0xa438, 0x0808, 0xa438, 0xf009,
-	0xa438, 0x0c0f, 0xa438, 0x0804, 0xa438, 0xf006, 0xa438, 0x0c0f,
-	0xa438, 0x0802, 0xa438, 0xf003, 0xa438, 0x0c0f, 0xa438, 0x0801,
-	0xa438, 0xd500, 0xa438, 0x0800, 0xa436, 0xA026, 0xa438, 0xffff,
-	0xa436, 0xA024, 0xa438, 0xffff, 0xa436, 0xA022, 0xa438, 0xffff,
-	0xa436, 0xA020, 0xa438, 0xffff, 0xa436, 0xA006, 0xa438, 0xffff,
-	0xa436, 0xA004, 0xa438, 0x16ab, 0xa436, 0xA002, 0xa438, 0x1663,
-	0xa436, 0xA000, 0xa438, 0x1608, 0xa436, 0xA008, 0xa438, 0x0700,
-	0xa436, 0xA016, 0xa438, 0x0000, 0xa436, 0xA012, 0xa438, 0x07f8,
-	0xa436, 0xA014, 0xa438, 0xcc01, 0xa438, 0x0000, 0xa438, 0x0000,
+	0xa438, 0x81c0, 0xa438, 0x61d3, 0xa438, 0x6172, 0xa438, 0x6111,
+	0xa438, 0x60b0, 0xa438, 0xf00d, 0xa438, 0x3298, 0xa438, 0x81cb,
+	0xa438, 0xf00a, 0xa438, 0xa808, 0xa438, 0xf008, 0xa438, 0xa804,
+	0xa438, 0xf006, 0xa438, 0xa802, 0xa438, 0xf004, 0xa438, 0xa801,
+	0xa438, 0xf002, 0xa438, 0xa80f, 0xa438, 0xd500, 0xa438, 0x0800,
+	0xa438, 0xd505, 0xa438, 0xd75e, 0xa438, 0x6211, 0xa438, 0xd71e,
+	0xa438, 0x619b, 0xa438, 0x611a, 0xa438, 0x6099, 0xa438, 0x0c0f,
+	0xa438, 0x0808, 0xa438, 0xf009, 0xa438, 0x0c0f, 0xa438, 0x0804,
+	0xa438, 0xf006, 0xa438, 0x0c0f, 0xa438, 0x0802, 0xa438, 0xf003,
+	0xa438, 0x0c0f, 0xa438, 0x0801, 0xa438, 0xd500, 0xa438, 0x0800,
+	0xa438, 0xd707, 0xa438, 0x4141, 0xa438, 0xd706, 0xa438, 0x4112,
+	0xa438, 0xd705, 0xa438, 0x40da, 0xa438, 0xbc01, 0xa438, 0xd028,
+	0xa438, 0xd1c1, 0xa438, 0x1800, 0xa438, 0x81f0, 0xa438, 0x9c01,
+	0xa438, 0xd07b, 0xa438, 0xd1c5, 0xa438, 0xbe10, 0xa438, 0xd503,
+	0xa438, 0xa108, 0xa438, 0xd505, 0xa438, 0x8103, 0xa438, 0xd504,
+	0xa438, 0xa002, 0xa438, 0xa302, 0xa438, 0xd707, 0xa438, 0x4061,
+	0xa438, 0xd503, 0xa438, 0x8b01, 0xa438, 0xd500, 0xa438, 0xc48a,
+	0xa438, 0xd503, 0xa438, 0xcc09, 0xa438, 0xcd58, 0xa438, 0xaf01,
+	0xa438, 0xd500, 0xa438, 0x1800, 0xa438, 0x134c, 0xa438, 0xd71e,
+	0xa438, 0x4097, 0xa438, 0xd078, 0xa438, 0xd1aa, 0xa438, 0xf003,
+	0xa438, 0xd078, 0xa438, 0xd1aa, 0xa438, 0xd707, 0xa438, 0x40a1,
+	0xa438, 0xd706, 0xa438, 0x4072, 0xa438, 0xd705, 0xa438, 0x621a,
+	0xa438, 0xd706, 0xa438, 0x6065, 0xa438, 0xcc89, 0xa438, 0xf002,
+	0xa438, 0xcc8b, 0xa438, 0x1000, 0xa438, 0x0bc8, 0xa438, 0xd705,
+	0xa438, 0x2ad0, 0xa438, 0x821d, 0xa438, 0xf003, 0xa438, 0x1000,
+	0xa438, 0x0bce, 0xa438, 0x1000, 0xa438, 0x0bd4, 0xa438, 0x1000,
+	0xa438, 0x0cfa, 0xa438, 0xd04d, 0xa438, 0xd1c6, 0xa438, 0x1800,
+	0xa438, 0x13b8, 0xa436, 0xA026, 0xa438, 0xffff, 0xa436, 0xA024,
+	0xa438, 0xffff, 0xa436, 0xA022, 0xa438, 0xffff, 0xa436, 0xA020,
+	0xa438, 0x1393, 0xa436, 0xA006, 0xa438, 0x1331, 0xa436, 0xA004,
+	0xa438, 0x16ab, 0xa436, 0xA002, 0xa438, 0x1663, 0xa436, 0xA000,
+	0xa438, 0x1608, 0xa436, 0xA008, 0xa438, 0x1f00, 0xa436, 0xA016,
+	0xa438, 0x0000, 0xa436, 0xA012, 0xa438, 0x07f8, 0xa436, 0xA014,
+	0xa438, 0xcc01, 0xa438, 0x20f6, 0xa438, 0x0000, 0xa438, 0x0000,
 	0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0x0000,
-	0xa438, 0x0000, 0xa436, 0xA152, 0xa438, 0x021c, 0xa436, 0xA154,
-	0xa438, 0x3fff, 0xa436, 0xA156, 0xa438, 0x3fff, 0xa436, 0xA158,
-	0xa438, 0x3fff, 0xa436, 0xA15A, 0xa438, 0x3fff, 0xa436, 0xA15C,
-	0xa438, 0x3fff, 0xa436, 0xA15E, 0xa438, 0x3fff, 0xa436, 0xA160,
-	0xa438, 0x3fff, 0xa436, 0xA150, 0xa438, 0x0001, 0xa436, 0xA016,
-	0xa438, 0x0010, 0xa436, 0xA012, 0xa438, 0x0000, 0xa436, 0xA014,
-	0xa438, 0x1800, 0xa438, 0x8010, 0xa438, 0x1800, 0xa438, 0x8013,
-	0xa438, 0x1800, 0xa438, 0x803a, 0xa438, 0x1800, 0xa438, 0x8045,
-	0xa438, 0x1800, 0xa438, 0x8049, 0xa438, 0x1800, 0xa438, 0x804d,
-	0xa438, 0x1800, 0xa438, 0x8059, 0xa438, 0x1800, 0xa438, 0x805d,
-	0xa438, 0xc2ff, 0xa438, 0x1800, 0xa438, 0x0042, 0xa438, 0x1000,
-	0xa438, 0x02e5, 0xa438, 0x1000, 0xa438, 0x02b4, 0xa438, 0xd701,
-	0xa438, 0x40e3, 0xa438, 0xd700, 0xa438, 0x5f6c, 0xa438, 0x1000,
-	0xa438, 0x8021, 0xa438, 0x1800, 0xa438, 0x0073, 0xa438, 0x1800,
-	0xa438, 0x0084, 0xa438, 0xd701, 0xa438, 0x4061, 0xa438, 0xba0f,
-	0xa438, 0xf004, 0xa438, 0x4060, 0xa438, 0x1000, 0xa438, 0x802a,
-	0xa438, 0xba10, 0xa438, 0x0800, 0xa438, 0xd700, 0xa438, 0x60bb,
-	0xa438, 0x611c, 0xa438, 0x0c0f, 0xa438, 0x1a01, 0xa438, 0xf00a,
-	0xa438, 0x60fc, 0xa438, 0x0c0f, 0xa438, 0x1a02, 0xa438, 0xf006,
-	0xa438, 0x0c0f, 0xa438, 0x1a04, 0xa438, 0xf003, 0xa438, 0x0c0f,
-	0xa438, 0x1a08, 0xa438, 0x0800, 0xa438, 0x0c0f, 0xa438, 0x0504,
-	0xa438, 0xad02, 0xa438, 0x1000, 0xa438, 0x02c0, 0xa438, 0xd700,
-	0xa438, 0x5fac, 0xa438, 0x1000, 0xa438, 0x8021, 0xa438, 0x1800,
-	0xa438, 0x0139, 0xa438, 0x9a1f, 0xa438, 0x8bf0, 0xa438, 0x1800,
-	0xa438, 0x02df, 0xa438, 0x9a1f, 0xa438, 0x9910, 0xa438, 0x1800,
-	0xa438, 0x02d7, 0xa438, 0xad02, 0xa438, 0x8d01, 0xa438, 0x9a1f,
+	0xa436, 0xA152, 0xa438, 0x021c, 0xa436, 0xA154, 0xa438, 0x2100,
+	0xa436, 0xA156, 0xa438, 0x3fff, 0xa436, 0xA158, 0xa438, 0x3fff,
+	0xa436, 0xA15A, 0xa438, 0x3fff, 0xa436, 0xA15C, 0xa438, 0x3fff,
+	0xa436, 0xA15E, 0xa438, 0x3fff, 0xa436, 0xA160, 0xa438, 0x3fff,
+	0xa436, 0xA150, 0xa438, 0x0003, 0xa436, 0xA016, 0xa438, 0x0010,
+	0xa436, 0xA012, 0xa438, 0x0000, 0xa436, 0xA014, 0xa438, 0x1800,
+	0xa438, 0x8010, 0xa438, 0x1800, 0xa438, 0x8014, 0xa438, 0x1800,
+	0xa438, 0x803d, 0xa438, 0x1800, 0xa438, 0x804a, 0xa438, 0x1800,
+	0xa438, 0x804e, 0xa438, 0x1800, 0xa438, 0x8052, 0xa438, 0x1800,
+	0xa438, 0x8092, 0xa438, 0x1800, 0xa438, 0x80a0, 0xa438, 0xc2ff,
+	0xa438, 0x9a40, 0xa438, 0x1800, 0xa438, 0x0042, 0xa438, 0x1000,
+	0xa438, 0x02e5, 0xa438, 0xba20, 0xa438, 0x1000, 0xa438, 0x02b4,
+	0xa438, 0xd701, 0xa438, 0x4103, 0xa438, 0xd700, 0xa438, 0x5f6c,
+	0xa438, 0x1000, 0xa438, 0x8024, 0xa438, 0x9a20, 0xa438, 0x1800,
+	0xa438, 0x0073, 0xa438, 0x1800, 0xa438, 0x0084, 0xa438, 0xd701,
+	0xa438, 0x4061, 0xa438, 0xba0f, 0xa438, 0xf004, 0xa438, 0x4060,
+	0xa438, 0x1000, 0xa438, 0x802d, 0xa438, 0xba10, 0xa438, 0x0800,
+	0xa438, 0xd700, 0xa438, 0x60bb, 0xa438, 0x611c, 0xa438, 0x0c0f,
+	0xa438, 0x1a01, 0xa438, 0xf00a, 0xa438, 0x60fc, 0xa438, 0x0c0f,
+	0xa438, 0x1a02, 0xa438, 0xf006, 0xa438, 0x0c0f, 0xa438, 0x1a04,
+	0xa438, 0xf003, 0xa438, 0x0c0f, 0xa438, 0x1a08, 0xa438, 0x0800,
+	0xa438, 0x0c0f, 0xa438, 0x0504, 0xa438, 0xad02, 0xa438, 0xd73e,
+	0xa438, 0x40f6, 0xa438, 0x1000, 0xa438, 0x02c0, 0xa438, 0xd700,
+	0xa438, 0x5fac, 0xa438, 0x1000, 0xa438, 0x8024, 0xa438, 0x1800,
+	0xa438, 0x0139, 0xa438, 0x9a3f, 0xa438, 0x8bf0, 0xa438, 0x1800,
+	0xa438, 0x02df, 0xa438, 0x9a3f, 0xa438, 0x9910, 0xa438, 0x1800,
+	0xa438, 0x02d7, 0xa438, 0xad02, 0xa438, 0x8d01, 0xa438, 0x9a7f,
 	0xa438, 0x9910, 0xa438, 0x9860, 0xa438, 0xcb00, 0xa438, 0xd501,
-	0xa438, 0xce01, 0xa438, 0x85f0, 0xa438, 0xd500, 0xa438, 0x1800,
-	0xa438, 0x015c, 0xa438, 0x8580, 0xa438, 0x8d02, 0xa438, 0x1800,
-	0xa438, 0x018f, 0xa438, 0x0c0f, 0xa438, 0x0503, 0xa438, 0xad02,
-	0xa438, 0x1800, 0xa438, 0x00dd, 0xa436, 0xA08E, 0xa438, 0x00db,
-	0xa436, 0xA08C, 0xa438, 0x018e, 0xa436, 0xA08A, 0xa438, 0x015a,
-	0xa436, 0xA088, 0xa438, 0x02d6, 0xa436, 0xA086, 0xa438, 0x02de,
-	0xa436, 0xA084, 0xa438, 0x0137, 0xa436, 0xA082, 0xa438, 0x0071,
-	0xa436, 0xA080, 0xa438, 0x0041, 0xa436, 0xA090, 0xa438, 0x00ff,
-	0xa436, 0xA016, 0xa438, 0x0020, 0xa436, 0xA012, 0xa438, 0x0000,
-	0xa436, 0xA014, 0xa438, 0x1800, 0xa438, 0x8010, 0xa438, 0x1800,
-	0xa438, 0x801d, 0xa438, 0x1800, 0xa438, 0x808a, 0xa438, 0x1800,
-	0xa438, 0x80a1, 0xa438, 0x1800, 0xa438, 0x80b4, 0xa438, 0x1800,
-	0xa438, 0x8104, 0xa438, 0x1800, 0xa438, 0x810b, 0xa438, 0x1800,
-	0xa438, 0x810f, 0xa438, 0x8980, 0xa438, 0xd702, 0xa438, 0x6126,
-	0xa438, 0xd704, 0xa438, 0x4063, 0xa438, 0xd702, 0xa438, 0x6060,
-	0xa438, 0xd702, 0xa438, 0x6077, 0xa438, 0x1800, 0xa438, 0x0c29,
-	0xa438, 0x1800, 0xa438, 0x0c2b, 0xa438, 0x1000, 0xa438, 0x115a,
-	0xa438, 0xd71f, 0xa438, 0x5fb4, 0xa438, 0xd702, 0xa438, 0x6c46,
-	0xa438, 0xd704, 0xa438, 0x4063, 0xa438, 0xd702, 0xa438, 0x6060,
-	0xa438, 0xd702, 0xa438, 0x6b97, 0xa438, 0xa340, 0xa438, 0x0c06,
-	0xa438, 0x0102, 0xa438, 0xce01, 0xa438, 0x1000, 0xa438, 0x117a,
-	0xa438, 0xa240, 0xa438, 0xa902, 0xa438, 0xa204, 0xa438, 0xa280,
-	0xa438, 0xa364, 0xa438, 0xab02, 0xa438, 0x8380, 0xa438, 0xa00a,
-	0xa438, 0xcd8d, 0xa438, 0x1000, 0xa438, 0x115a, 0xa438, 0xd706,
-	0xa438, 0x5fb5, 0xa438, 0xb920, 0xa438, 0x1000, 0xa438, 0x115a,
-	0xa438, 0xd71f, 0xa438, 0x7fb4, 0xa438, 0x9920, 0xa438, 0x1000,
-	0xa438, 0x115a, 0xa438, 0xd71f, 0xa438, 0x6065, 0xa438, 0x7c74,
-	0xa438, 0xfffb, 0xa438, 0xb820, 0xa438, 0x1000, 0xa438, 0x115a,
-	0xa438, 0xd71f, 0xa438, 0x7fa5, 0xa438, 0x9820, 0xa438, 0xa410,
-	0xa438, 0x8902, 0xa438, 0xa120, 0xa438, 0xa380, 0xa438, 0xce02,
-	0xa438, 0x1000, 0xa438, 0x117a, 0xa438, 0x8280, 0xa438, 0xa324,
-	0xa438, 0xab02, 0xa438, 0xa00a, 0xa438, 0x8118, 0xa438, 0x863f,
-	0xa438, 0x87fb, 0xa438, 0xcd8e, 0xa438, 0xd193, 0xa438, 0xd047,
-	0xa438, 0x1000, 0xa438, 0x115a, 0xa438, 0x1000, 0xa438, 0x115f,
-	0xa438, 0xd700, 0xa438, 0x5f7b, 0xa438, 0xa280, 0xa438, 0x1000,
-	0xa438, 0x115a, 0xa438, 0x1000, 0xa438, 0x115f, 0xa438, 0xd706,
-	0xa438, 0x5f78, 0xa438, 0xa210, 0xa438, 0xd700, 0xa438, 0x6083,
-	0xa438, 0xd101, 0xa438, 0xd047, 0xa438, 0xf003, 0xa438, 0xd160,
-	0xa438, 0xd04b, 0xa438, 0x1000, 0xa438, 0x115a, 0xa438, 0x1000,
-	0xa438, 0x115f, 0xa438, 0xd700, 0xa438, 0x5f7b, 0xa438, 0x1000,
-	0xa438, 0x115a, 0xa438, 0x1000, 0xa438, 0x115f, 0xa438, 0xd706,
-	0xa438, 0x5f79, 0xa438, 0x8120, 0xa438, 0xbb20, 0xa438, 0x1800,
-	0xa438, 0x0c8b, 0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x8f80,
-	0xa438, 0x9503, 0xa438, 0x1800, 0xa438, 0x0c3c, 0xa438, 0x0c03,
-	0xa438, 0x1502, 0xa438, 0x8f80, 0xa438, 0x9503, 0xa438, 0xd704,
-	0xa438, 0x6192, 0xa438, 0xd702, 0xa438, 0x4116, 0xa438, 0xce04,
-	0xa438, 0x1000, 0xa438, 0x117a, 0xa438, 0x0c03, 0xa438, 0x1502,
-	0xa438, 0x8f40, 0xa438, 0x9503, 0xa438, 0x1800, 0xa438, 0x0b3d,
-	0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0xaf40, 0xa438, 0x9503,
-	0xa438, 0x1800, 0xa438, 0x0b48, 0xa438, 0xd704, 0xa438, 0x6192,
-	0xa438, 0xd702, 0xa438, 0x4116, 0xa438, 0xce04, 0xa438, 0x1000,
-	0xa438, 0x117a, 0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x8f40,
-	0xa438, 0x9503, 0xa438, 0x1800, 0xa438, 0x1269, 0xa438, 0x0c03,
-	0xa438, 0x1502, 0xa438, 0xaf40, 0xa438, 0x9503, 0xa438, 0x1800,
-	0xa438, 0x1274, 0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0xa608,
-	0xa438, 0xc700, 0xa438, 0x9503, 0xa438, 0xce54, 0xa438, 0x1000,
-	0xa438, 0x117a, 0xa438, 0xa290, 0xa438, 0xa304, 0xa438, 0xab02,
-	0xa438, 0xd700, 0xa438, 0x6050, 0xa438, 0xab04, 0xa438, 0x0c38,
-	0xa438, 0x0608, 0xa438, 0xaa0b, 0xa438, 0xd702, 0xa438, 0x0c03,
-	0xa438, 0x1502, 0xa438, 0x8d01, 0xa438, 0xae40, 0xa438, 0x4044,
-	0xa438, 0x8e20, 0xa438, 0x9503, 0xa438, 0x0c03, 0xa438, 0x1502,
-	0xa438, 0x8c20, 0xa438, 0x9503, 0xa438, 0xd700, 0xa438, 0x6078,
-	0xa438, 0xd700, 0xa438, 0x609a, 0xa438, 0xd109, 0xa438, 0xd074,
-	0xa438, 0xf003, 0xa438, 0xd109, 0xa438, 0xd075, 0xa438, 0x1000,
-	0xa438, 0x115a, 0xa438, 0xd704, 0xa438, 0x6252, 0xa438, 0xd702,
-	0xa438, 0x4116, 0xa438, 0xce54, 0xa438, 0x1000, 0xa438, 0x117a,
+	0xa438, 0xce01, 0xa438, 0x85f0, 0xa438, 0xd500, 0xa438, 0x0c0f,
+	0xa438, 0x0505, 0xa438, 0xb820, 0xa438, 0xc000, 0xa438, 0xc100,
+	0xa438, 0xc628, 0xa438, 0xc700, 0xa438, 0xc801, 0xa438, 0xc91e,
+	0xa438, 0xc001, 0xa438, 0x4019, 0xa438, 0xc6f8, 0xa438, 0xc702,
+	0xa438, 0xc809, 0xa438, 0xc940, 0xa438, 0xc002, 0xa438, 0x4019,
+	0xa438, 0x1000, 0xa438, 0x02cc, 0xa438, 0xd700, 0xa438, 0x5fa7,
+	0xa438, 0xc010, 0xa438, 0x1000, 0xa438, 0x02cc, 0xa438, 0xd700,
+	0xa438, 0x5fa0, 0xa438, 0xc020, 0xa438, 0x1000, 0xa438, 0x02cc,
+	0xa438, 0xd700, 0xa438, 0x5fa1, 0xa438, 0x0c0f, 0xa438, 0x0506,
+	0xa438, 0xb840, 0xa438, 0xc6ca, 0xa438, 0xc701, 0xa438, 0xc809,
+	0xa438, 0xc900, 0xa438, 0xc001, 0xa438, 0x4019, 0xa438, 0xc6b8,
+	0xa438, 0xc700, 0xa438, 0xc800, 0xa438, 0xc900, 0xa438, 0xc008,
+	0xa438, 0x4019, 0xa438, 0x1000, 0xa438, 0x02cc, 0xa438, 0xd700,
+	0xa438, 0x5fa5, 0xa438, 0x8580, 0xa438, 0x8d02, 0xa438, 0x1800,
+	0xa438, 0x018f, 0xa438, 0x1000, 0xa438, 0x02cc, 0xa438, 0xd700,
+	0xa438, 0x6124, 0xa438, 0xd73e, 0xa438, 0x5f75, 0xa438, 0xd700,
+	0xa438, 0x5f2c, 0xa438, 0x1000, 0xa438, 0x8024, 0xa438, 0x9a20,
+	0xa438, 0xfff5, 0xa438, 0x1800, 0xa438, 0x00b8, 0xa438, 0x0c0f,
+	0xa438, 0x0503, 0xa438, 0xad02, 0xa438, 0x68c8, 0xa438, 0x1000,
+	0xa438, 0x02c0, 0xa438, 0xd700, 0xa438, 0x6848, 0xa438, 0x604d,
+	0xa438, 0xfffb, 0xa438, 0xd73e, 0xa438, 0x6082, 0xa438, 0x1000,
+	0xa438, 0x02a1, 0xa438, 0x8a0f, 0xa438, 0x1000, 0xa438, 0x02c0,
+	0xa438, 0xd700, 0xa438, 0x5fae, 0xa438, 0x1000, 0xa438, 0x02de,
+	0xa438, 0x1000, 0xa438, 0x02c0, 0xa438, 0xd700, 0xa438, 0x5faf,
+	0xa438, 0x8d01, 0xa438, 0x8b0f, 0xa438, 0x1000, 0xa438, 0x02c0,
+	0xa438, 0xd700, 0xa438, 0x2a58, 0xa438, 0x80c5, 0xa438, 0x2a5b,
+	0xa438, 0x80cd, 0xa438, 0x2b53, 0xa438, 0x80d9, 0xa438, 0xfff7,
+	0xa438, 0x1000, 0xa438, 0x022a, 0xa438, 0x1000, 0xa438, 0x02e5,
+	0xa438, 0xba40, 0xa438, 0x1000, 0xa438, 0x02fd, 0xa438, 0xf018,
+	0xa438, 0x1000, 0xa438, 0x022a, 0xa438, 0x1000, 0xa438, 0x02e5,
+	0xa438, 0xba40, 0xa438, 0x1000, 0xa438, 0x02c0, 0xa438, 0xd700,
+	0xa438, 0x5faa, 0xa438, 0x1000, 0xa438, 0x02fd, 0xa438, 0xf00c,
+	0xa438, 0x1000, 0xa438, 0x022a, 0xa438, 0x1000, 0xa438, 0x02fd,
+	0xa438, 0x1000, 0xa438, 0x02c0, 0xa438, 0xd700, 0xa438, 0x5fab,
+	0xa438, 0x1000, 0xa438, 0x02e5, 0xa438, 0xba40, 0xa438, 0x1000,
+	0xa438, 0x02c0, 0xa438, 0xd700, 0xa438, 0x6088, 0xa438, 0xfffc,
+	0xa438, 0x1800, 0xa438, 0x0120, 0xa438, 0x1800, 0xa438, 0x0122,
+	0xa436, 0xA08E, 0xa438, 0x00db, 0xa436, 0xA08C, 0xa438, 0x00b4,
+	0xa436, 0xA08A, 0xa438, 0x015a, 0xa436, 0xA088, 0xa438, 0x02d6,
+	0xa436, 0xA086, 0xa438, 0x02de, 0xa436, 0xA084, 0xa438, 0x0137,
+	0xa436, 0xA082, 0xa438, 0x0071, 0xa436, 0xA080, 0xa438, 0x0041,
+	0xa436, 0xA090, 0xa438, 0x00ff, 0xa436, 0xA016, 0xa438, 0x0020,
+	0xa436, 0xA012, 0xa438, 0x0000, 0xa436, 0xA014, 0xa438, 0x1800,
+	0xa438, 0x8010, 0xa438, 0x1800, 0xa438, 0x8019, 0xa438, 0x1800,
+	0xa438, 0x809e, 0xa438, 0x1800, 0xa438, 0x80b9, 0xa438, 0x1800,
+	0xa438, 0x80cc, 0xa438, 0x1800, 0xa438, 0x811c, 0xa438, 0x1800,
+	0xa438, 0x8123, 0xa438, 0x1800, 0xa438, 0x812f, 0xa438, 0xd71f,
+	0xa438, 0x6080, 0xa438, 0xd141, 0xa438, 0xd043, 0xa438, 0xf003,
+	0xa438, 0xd101, 0xa438, 0xd040, 0xa438, 0x1800, 0xa438, 0x0ac8,
+	0xa438, 0x8980, 0xa438, 0xd702, 0xa438, 0x6126, 0xa438, 0xd704,
+	0xa438, 0x4063, 0xa438, 0xd702, 0xa438, 0x6060, 0xa438, 0xd702,
+	0xa438, 0x6077, 0xa438, 0x8410, 0xa438, 0xf002, 0xa438, 0xa410,
+	0xa438, 0xce02, 0xa438, 0x1000, 0xa438, 0x117a, 0xa438, 0xcd81,
+	0xa438, 0xd412, 0xa438, 0x1000, 0xa438, 0x1125, 0xa438, 0xcd82,
+	0xa438, 0xd40e, 0xa438, 0x1000, 0xa438, 0x1125, 0xa438, 0xcd83,
+	0xa438, 0x1000, 0xa438, 0x115a, 0xa438, 0xd71f, 0xa438, 0x5fb4,
+	0xa438, 0xd702, 0xa438, 0x6c46, 0xa438, 0xd704, 0xa438, 0x4063,
+	0xa438, 0xd702, 0xa438, 0x6060, 0xa438, 0xd702, 0xa438, 0x6b97,
+	0xa438, 0xa340, 0xa438, 0x0c06, 0xa438, 0x0102, 0xa438, 0xce01,
+	0xa438, 0x1000, 0xa438, 0x117a, 0xa438, 0xa240, 0xa438, 0xa902,
+	0xa438, 0xa204, 0xa438, 0xa280, 0xa438, 0xa364, 0xa438, 0xab02,
+	0xa438, 0x8380, 0xa438, 0xa00a, 0xa438, 0xcd8d, 0xa438, 0x1000,
+	0xa438, 0x115a, 0xa438, 0xd706, 0xa438, 0x5fb5, 0xa438, 0xb920,
+	0xa438, 0x1000, 0xa438, 0x115a, 0xa438, 0xd71f, 0xa438, 0x7fb4,
+	0xa438, 0x9920, 0xa438, 0x1000, 0xa438, 0x115a, 0xa438, 0xd71f,
+	0xa438, 0x6065, 0xa438, 0x7c74, 0xa438, 0xfffb, 0xa438, 0xb820,
+	0xa438, 0x1000, 0xa438, 0x115a, 0xa438, 0xd71f, 0xa438, 0x7fa5,
+	0xa438, 0x9820, 0xa438, 0xa410, 0xa438, 0x8902, 0xa438, 0xa120,
+	0xa438, 0xa380, 0xa438, 0xce02, 0xa438, 0x1000, 0xa438, 0x117a,
+	0xa438, 0x8280, 0xa438, 0xa324, 0xa438, 0xab02, 0xa438, 0xa00a,
+	0xa438, 0x8118, 0xa438, 0x863f, 0xa438, 0x87fb, 0xa438, 0xcd8e,
+	0xa438, 0xd193, 0xa438, 0xd047, 0xa438, 0x1000, 0xa438, 0x115a,
+	0xa438, 0x1000, 0xa438, 0x115f, 0xa438, 0xd700, 0xa438, 0x5f7b,
+	0xa438, 0xa280, 0xa438, 0x1000, 0xa438, 0x115a, 0xa438, 0x1000,
+	0xa438, 0x115f, 0xa438, 0xd706, 0xa438, 0x5f78, 0xa438, 0xa210,
+	0xa438, 0xd700, 0xa438, 0x6083, 0xa438, 0xd101, 0xa438, 0xd047,
+	0xa438, 0xf003, 0xa438, 0xd160, 0xa438, 0xd04b, 0xa438, 0x1000,
+	0xa438, 0x115a, 0xa438, 0x1000, 0xa438, 0x115f, 0xa438, 0xd700,
+	0xa438, 0x5f7b, 0xa438, 0x1000, 0xa438, 0x115a, 0xa438, 0x1000,
+	0xa438, 0x115f, 0xa438, 0xd706, 0xa438, 0x5f79, 0xa438, 0x8120,
+	0xa438, 0xbb20, 0xa438, 0x1800, 0xa438, 0x0c8b, 0xa438, 0x0c03,
+	0xa438, 0x1502, 0xa438, 0x8f80, 0xa438, 0x9503, 0xa438, 0x1800,
+	0xa438, 0x0c3c, 0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0xa608,
+	0xa438, 0x9503, 0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x8f80,
+	0xa438, 0x9503, 0xa438, 0xd704, 0xa438, 0x6192, 0xa438, 0xd702,
+	0xa438, 0x4116, 0xa438, 0xce04, 0xa438, 0x1000, 0xa438, 0x117a,
 	0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x8f40, 0xa438, 0x9503,
-	0xa438, 0xa00a, 0xa438, 0xd704, 0xa438, 0x41e7, 0xa438, 0x0c03,
-	0xa438, 0x1502, 0xa438, 0xa570, 0xa438, 0x9503, 0xa438, 0xf00a,
-	0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0xaf40, 0xa438, 0x9503,
-	0xa438, 0x800a, 0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x8570,
-	0xa438, 0x9503, 0xa438, 0xd704, 0xa438, 0x60f3, 0xa438, 0xd71f,
-	0xa438, 0x60ee, 0xa438, 0xd700, 0xa438, 0x5bbe, 0xa438, 0x1800,
-	0xa438, 0x0e71, 0xa438, 0x1800, 0xa438, 0x0e7c, 0xa438, 0x1800,
-	0xa438, 0x0e7e, 0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0xaf80,
-	0xa438, 0x9503, 0xa438, 0xcd62, 0xa438, 0x1800, 0xa438, 0x0bd2,
-	0xa438, 0x800a, 0xa438, 0x8306, 0xa438, 0x1800, 0xa438, 0x0cb6,
-	0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x8608, 0xa438, 0x8c20,
-	0xa438, 0x9503, 0xa438, 0x1800, 0xa438, 0x0eb9, 0xa436, 0xA10E,
-	0xa438, 0x0eb5, 0xa436, 0xA10C, 0xa438, 0x0cb5, 0xa436, 0xA10A,
+	0xa438, 0x1800, 0xa438, 0x0b3d, 0xa438, 0x0c03, 0xa438, 0x1502,
+	0xa438, 0xaf40, 0xa438, 0x9503, 0xa438, 0x1800, 0xa438, 0x0b48,
+	0xa438, 0xd704, 0xa438, 0x6192, 0xa438, 0xd702, 0xa438, 0x4116,
+	0xa438, 0xce04, 0xa438, 0x1000, 0xa438, 0x117a, 0xa438, 0x0c03,
+	0xa438, 0x1502, 0xa438, 0x8f40, 0xa438, 0x9503, 0xa438, 0x1800,
+	0xa438, 0x1269, 0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0xaf40,
+	0xa438, 0x9503, 0xa438, 0x1800, 0xa438, 0x1274, 0xa438, 0x0c03,
+	0xa438, 0x1502, 0xa438, 0xa608, 0xa438, 0xc700, 0xa438, 0x9503,
+	0xa438, 0xce54, 0xa438, 0x1000, 0xa438, 0x117a, 0xa438, 0xa290,
+	0xa438, 0xa304, 0xa438, 0xab02, 0xa438, 0xd700, 0xa438, 0x6050,
+	0xa438, 0xab04, 0xa438, 0x0c38, 0xa438, 0x0608, 0xa438, 0xaa0b,
+	0xa438, 0xd702, 0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x8d01,
+	0xa438, 0xae40, 0xa438, 0x4044, 0xa438, 0x8e20, 0xa438, 0x9503,
+	0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x8c20, 0xa438, 0x9503,
+	0xa438, 0xd700, 0xa438, 0x6078, 0xa438, 0xd700, 0xa438, 0x609a,
+	0xa438, 0xd109, 0xa438, 0xd074, 0xa438, 0xf003, 0xa438, 0xd109,
+	0xa438, 0xd075, 0xa438, 0x1000, 0xa438, 0x115a, 0xa438, 0xd704,
+	0xa438, 0x6252, 0xa438, 0xd702, 0xa438, 0x4116, 0xa438, 0xce54,
+	0xa438, 0x1000, 0xa438, 0x117a, 0xa438, 0x0c03, 0xa438, 0x1502,
+	0xa438, 0x8f40, 0xa438, 0x9503, 0xa438, 0xa00a, 0xa438, 0xd704,
+	0xa438, 0x41e7, 0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0xa570,
+	0xa438, 0x9503, 0xa438, 0xf00a, 0xa438, 0x0c03, 0xa438, 0x1502,
+	0xa438, 0xaf40, 0xa438, 0x9503, 0xa438, 0x800a, 0xa438, 0x0c03,
+	0xa438, 0x1502, 0xa438, 0x8570, 0xa438, 0x9503, 0xa438, 0xd704,
+	0xa438, 0x60f3, 0xa438, 0xd71f, 0xa438, 0x60ee, 0xa438, 0xd700,
+	0xa438, 0x5bbe, 0xa438, 0x1800, 0xa438, 0x0e71, 0xa438, 0x1800,
+	0xa438, 0x0e7c, 0xa438, 0x1800, 0xa438, 0x0e7e, 0xa438, 0x0c03,
+	0xa438, 0x1502, 0xa438, 0xaf80, 0xa438, 0x9503, 0xa438, 0xcd62,
+	0xa438, 0x1800, 0xa438, 0x0bd2, 0xa438, 0x800a, 0xa438, 0x8530,
+	0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x8d10, 0xa438, 0x9503,
+	0xa438, 0xd700, 0xa438, 0x6050, 0xa438, 0xaa20, 0xa438, 0x8306,
+	0xa438, 0x1800, 0xa438, 0x0cb6, 0xa438, 0xd105, 0xa438, 0xd040,
+	0xa438, 0x1000, 0xa438, 0x0d8f, 0xa438, 0xd700, 0xa438, 0x5fbb,
+	0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x8608, 0xa438, 0x9503,
+	0xa438, 0x1000, 0xa438, 0x0d8f, 0xa438, 0xd704, 0xa438, 0x7fb6,
+	0xa438, 0x0c03, 0xa438, 0x1502, 0xa438, 0x87f0, 0xa438, 0x9503,
+	0xa438, 0xce88, 0xa438, 0x1000, 0xa438, 0x117a, 0xa438, 0x0c03,
+	0xa438, 0x1502, 0xa438, 0xa608, 0xa438, 0x9503, 0xa438, 0xd73e,
+	0xa438, 0x60a5, 0xa438, 0xd705, 0xa438, 0x4071, 0xa438, 0x1800,
+	0xa438, 0x0d65, 0xa438, 0x1800, 0xa438, 0x0d6f, 0xa436, 0xA10E,
+	0xa438, 0x0d58, 0xa436, 0xA10C, 0xa438, 0x0cb5, 0xa436, 0xA10A,
 	0xa438, 0x0bd1, 0xa436, 0xA108, 0xa438, 0x0e37, 0xa436, 0xA106,
 	0xa438, 0x1267, 0xa436, 0xA104, 0xa438, 0x0b3b, 0xa436, 0xA102,
-	0xa438, 0x0c38, 0xa436, 0xA100, 0xa438, 0x0c24, 0xa436, 0xA110,
-	0xa438, 0x00ff, 0xa436, 0xb87c, 0xa438, 0x85bf, 0xa436, 0xb87e,
-	0xa438, 0xaf85, 0xa438, 0xd7af, 0xa438, 0x85fb, 0xa438, 0xaf86,
-	0xa438, 0x10af, 0xa438, 0x8638, 0xa438, 0xaf86, 0xa438, 0x47af,
-	0xa438, 0x8647, 0xa438, 0xaf86, 0xa438, 0x47af, 0xa438, 0x8647,
-	0xa438, 0xbf85, 0xa438, 0xf802, 0xa438, 0x627f, 0xa438, 0xbf61,
-	0xa438, 0xc702, 0xa438, 0x627f, 0xa438, 0xae0c, 0xa438, 0xbf85,
-	0xa438, 0xf802, 0xa438, 0x6276, 0xa438, 0xbf61, 0xa438, 0xc702,
-	0xa438, 0x6276, 0xa438, 0xee85, 0xa438, 0x4200, 0xa438, 0xaf1b,
-	0xa438, 0x2333, 0xa438, 0xa484, 0xa438, 0xbf86, 0xa438, 0x0a02,
-	0xa438, 0x627f, 0xa438, 0xbf86, 0xa438, 0x0d02, 0xa438, 0x627f,
-	0xa438, 0xaf1b, 0xa438, 0x8422, 0xa438, 0xa484, 0xa438, 0x66ac,
-	0xa438, 0x0ef8, 0xa438, 0xfbef, 0xa438, 0x79fb, 0xa438, 0xe080,
-	0xa438, 0x16ad, 0xa438, 0x230f, 0xa438, 0xee85, 0xa438, 0x4200,
-	0xa438, 0x1f44, 0xa438, 0xbf86, 0xa438, 0x30d7, 0xa438, 0x0008,
-	0xa438, 0x0264, 0xa438, 0xa3ff, 0xa438, 0xef97, 0xa438, 0xfffc,
-	0xa438, 0x0485, 0xa438, 0xf861, 0xa438, 0xc786, 0xa438, 0x0a86,
-	0xa438, 0x0de1, 0xa438, 0x8feb, 0xa438, 0xe583, 0xa438, 0x20e1,
-	0xa438, 0x8fea, 0xa438, 0xe583, 0xa438, 0x21af, 0xa438, 0x41a7,
-	0xa436, 0xb85e, 0xa438, 0x1b05, 0xa436, 0xb860, 0xa438, 0x1b78,
-	0xa436, 0xb862, 0xa438, 0x1a08, 0xa436, 0xb864, 0xa438, 0x419F,
-	0xa436, 0xb886, 0xa438, 0xffff, 0xa436, 0xb888, 0xa438, 0xffff,
-	0xa436, 0xb88a, 0xa438, 0xffff, 0xa436, 0xb88c, 0xa438, 0xffff,
-	0xa436, 0xb838, 0xa438, 0x000f, 0xb820, 0x0010, 0xa436, 0x0000,
-	0xa438, 0x0000, 0xB82E, 0x0000, 0xa436, 0x8023, 0xa438, 0x0000,
-	0xa436, 0x801E, 0xa438, 0x0008, 0xB820, 0x0000, 0xFFFF, 0xFFFF
+	0xa438, 0x0c24, 0xa436, 0xA100, 0xa438, 0x0ac6, 0xa436, 0xA110,
+	0xa438, 0x00ff, 0xa436, 0xA016, 0xa438, 0x0020, 0xa436, 0xA012,
+	0xa438, 0x1ff8, 0xa436, 0xA014, 0xa438, 0x0000, 0xa438, 0x0000,
+	0xa438, 0x0000, 0xa438, 0xd100, 0xa438, 0x0000, 0xa438, 0x0000,
+	0xa438, 0x0000, 0xa438, 0x0000, 0xa436, 0xA164, 0xa438, 0x0ceb,
+	0xa436, 0xA166, 0xa438, 0x0e73, 0xa436, 0xA168, 0xa438, 0x0deb,
+	0xa436, 0xA16A, 0xa438, 0x0c63, 0xa436, 0xA16C, 0xa438, 0x3fff,
+	0xa436, 0xA16E, 0xa438, 0x3fff, 0xa436, 0xA170, 0xa438, 0x3fff,
+	0xa436, 0xA172, 0xa438, 0x3fff, 0xa436, 0xA162, 0xa438, 0x000f,
+	0xa436, 0xb87c, 0xa438, 0x85bf, 0xa436, 0xb87e, 0xa438, 0xaf85,
+	0xa438, 0xd7af, 0xa438, 0x85fb, 0xa438, 0xaf86, 0xa438, 0x10af,
+	0xa438, 0x8638, 0xa438, 0xaf86, 0xa438, 0x47af, 0xa438, 0x8647,
+	0xa438, 0xaf86, 0xa438, 0x47af, 0xa438, 0x8647, 0xa438, 0xbf85,
+	0xa438, 0xf802, 0xa438, 0x627f, 0xa438, 0xbf61, 0xa438, 0xc702,
+	0xa438, 0x627f, 0xa438, 0xae0c, 0xa438, 0xbf85, 0xa438, 0xf802,
+	0xa438, 0x6276, 0xa438, 0xbf61, 0xa438, 0xc702, 0xa438, 0x6276,
+	0xa438, 0xee85, 0xa438, 0x4200, 0xa438, 0xaf1b, 0xa438, 0x2333,
+	0xa438, 0xa484, 0xa438, 0xbf86, 0xa438, 0x0a02, 0xa438, 0x627f,
+	0xa438, 0xbf86, 0xa438, 0x0d02, 0xa438, 0x627f, 0xa438, 0xaf1b,
+	0xa438, 0x8422, 0xa438, 0xa484, 0xa438, 0x66ac, 0xa438, 0x0ef8,
+	0xa438, 0xfbef, 0xa438, 0x79fb, 0xa438, 0xe080, 0xa438, 0x16ad,
+	0xa438, 0x230f, 0xa438, 0xee85, 0xa438, 0x4200, 0xa438, 0x1f44,
+	0xa438, 0xbf86, 0xa438, 0x30d7, 0xa438, 0x0008, 0xa438, 0x0264,
+	0xa438, 0xa3ff, 0xa438, 0xef97, 0xa438, 0xfffc, 0xa438, 0x0485,
+	0xa438, 0xf861, 0xa438, 0xc786, 0xa438, 0x0a86, 0xa438, 0x0de1,
+	0xa438, 0x8feb, 0xa438, 0xe583, 0xa438, 0x20e1, 0xa438, 0x8fea,
+	0xa438, 0xe583, 0xa438, 0x21af, 0xa438, 0x41a7, 0xa436, 0xb85e,
+	0xa438, 0x1b05, 0xa436, 0xb860, 0xa438, 0x1b78, 0xa436, 0xb862,
+	0xa438, 0x1a08, 0xa436, 0xb864, 0xa438, 0x419F, 0xa436, 0xb886,
+	0xa438, 0xffff, 0xa436, 0xb888, 0xa438, 0xffff, 0xa436, 0xb88a,
+	0xa438, 0xffff, 0xa436, 0xb88c, 0xa438, 0xffff, 0xa436, 0xb838,
+	0xa438, 0x000f, 0xb820, 0x0010, 0xa436, 0x0000, 0xa438, 0x0000,
+	0xB82E, 0x0000, 0xa436, 0x8023, 0xa438, 0x0000, 0xa436, 0x801E,
+	0xa438, 0x0014, 0xB820, 0x0000, 0xFFFF, 0xFFFF
 };
 
 static const u16 phy_mcu_ram_code_8125d_2_2[] = {
diff --git a/drivers/net/r8169/r8169_hw.c b/drivers/net/r8169/r8169_hw.c
index 05d977379a..3f7e452132 100644
--- a/drivers/net/r8169/r8169_hw.c
+++ b/drivers/net/r8169/r8169_hw.c
@@ -769,8 +769,8 @@ rtl_enable_aspm_clkreq_lock(struct rtl_hw *hw, bool enable)
 	if (unlock_cfg_wr)
 		rtl_enable_cfg9346_write(hw);
 
-	if (hw->mcfg == CFG_METHOD_70 || hw->mcfg == CFG_METHOD_71 ||
-	    hw->mcfg == CFG_METHOD_91) {
+	if (hw->mcfg == CFG_METHOD_58 || hw->mcfg == CFG_METHOD_70 ||
+	    hw->mcfg == CFG_METHOD_71 || hw->mcfg == CFG_METHOD_91) {
 		if (enable) {
 			RTL_W8(hw, INT_CFG0_8125, RTL_R8(hw, INT_CFG0_8125) | BIT_3);
 			RTL_W8(hw, Config5, RTL_R8(hw, Config5) | BIT_0);
diff --git a/drivers/net/r8169/r8169_hw.h b/drivers/net/r8169/r8169_hw.h
index a1f841c88d..1bdc46bd17 100644
--- a/drivers/net/r8169/r8169_hw.h
+++ b/drivers/net/r8169/r8169_hw.h
@@ -135,8 +135,8 @@ extern const struct rtl_hw_ops rtl8125cp_ops;
 #define NIC_RAMCODE_VERSION_CFG_METHOD_54  (0x0013)
 #define NIC_RAMCODE_VERSION_CFG_METHOD_55  (0x0001)
 #define NIC_RAMCODE_VERSION_CFG_METHOD_56  (0x0027)
-#define NIC_RAMCODE_VERSION_CFG_METHOD_57  (0x0027)
-#define NIC_RAMCODE_VERSION_CFG_METHOD_58  (0x0008)
+#define NIC_RAMCODE_VERSION_CFG_METHOD_57  (0x0034)
+#define NIC_RAMCODE_VERSION_CFG_METHOD_58  (0x0024)
 #define NIC_RAMCODE_VERSION_CFG_METHOD_70  (0x0033)
 #define NIC_RAMCODE_VERSION_CFG_METHOD_71  (0x0060)
 #define NIC_RAMCODE_VERSION_CFG_METHOD_91  (0x0051)
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v4 09/13] net/r8169: add support for RTL9151
  2026-02-13  3:20 [PATCH v4 00/13] net/r8169: driver updates and new hardware support Howard Wang
                   ` (7 preceding siblings ...)
  2026-02-13  3:20 ` [PATCH v4 08/13] net/r8169: update hardware configurations for 8125 Howard Wang
@ 2026-02-13  3:20 ` Howard Wang
  2026-02-13  3:20 ` [PATCH v4 10/13] net/r8169: add support for RTL8125K Howard Wang
                   ` (4 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: Howard Wang @ 2026-02-13  3:20 UTC (permalink / raw)
  To: dev; +Cc: pro_nic_dpdk, Howard Wang

This device supports network speeds up to 2.5Gbps.

Signed-off-by: Howard Wang <howard_wang@realsil.com.cn>
---
 drivers/net/r8169/base/rtl9151a.c     |  87 ++++++++++++++++++++
 drivers/net/r8169/base/rtl9151a.h     |  10 +++
 drivers/net/r8169/base/rtl9151a_mcu.c |  53 ++++++++++++
 drivers/net/r8169/meson.build         |   2 +
 drivers/net/r8169/r8169_compat.h      |   3 +
 drivers/net/r8169/r8169_ethdev.c      |   5 +-
 drivers/net/r8169/r8169_ethdev.h      |   3 +
 drivers/net/r8169/r8169_hw.c          | 112 +++++++++++++++++---------
 drivers/net/r8169/r8169_hw.h          |   4 +-
 drivers/net/r8169/r8169_phy.c         |  36 ++-------
 10 files changed, 246 insertions(+), 69 deletions(-)
 create mode 100644 drivers/net/r8169/base/rtl9151a.c
 create mode 100644 drivers/net/r8169/base/rtl9151a.h
 create mode 100644 drivers/net/r8169/base/rtl9151a_mcu.c

diff --git a/drivers/net/r8169/base/rtl9151a.c b/drivers/net/r8169/base/rtl9151a.c
new file mode 100644
index 0000000000..4eca5fb96b
--- /dev/null
+++ b/drivers/net/r8169/base/rtl9151a.c
@@ -0,0 +1,87 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2024 Realtek Corporation. All rights reserved
+ */
+
+#include "../r8169_ethdev.h"
+#include "../r8169_hw.h"
+#include "../r8169_phy.h"
+#include "rtl9151a.h"
+
+/* For RTL9151A, CFG_METHOD_60 */
+
+static void
+hw_init_rxcfg_9151a(struct rtl_hw *hw)
+{
+	RTL_W32(hw, RxConfig, Rx_Fetch_Number_8 | Rx_Close_Multiple |
+		RxCfg_pause_slot_en | (RX_DMA_BURST_512 << RxCfgDMAShift));
+}
+
+static void
+hw_ephy_config_9151a(struct rtl_hw *hw)
+{
+	switch (hw->mcfg) {
+	case CFG_METHOD_60:
+		/* nothing to do */
+		break;
+	}
+}
+
+static void
+rtl_hw_phy_config_9151a_1(struct rtl_hw *hw)
+{
+	rtl_set_eth_phy_ocp_bit(hw, 0xA442, BIT_11);
+
+	rtl_mdio_direct_write_phy_ocp(hw, 0xB87C, 0x8079);
+	rtl_clear_and_set_eth_phy_ocp_bit(hw, 0xB87E, 0xFF00, 0x4400);
+	rtl_clear_and_set_eth_phy_ocp_bit(hw, 0xAC16, 0x00FF, 0x0001);
+	rtl_clear_and_set_eth_phy_ocp_bit(hw, 0xAD0E, 0x007F, 0x000D);
+
+	rtl_mdio_direct_write_phy_ocp(hw, 0xA436, 0x80B6);
+	rtl_mdio_direct_write_phy_ocp(hw, 0xA438, 0xB6C3);
+}
+
+static void
+hw_phy_config_9151a(struct rtl_hw *hw)
+{
+	switch (hw->mcfg) {
+	case CFG_METHOD_60:
+		rtl_hw_phy_config_9151a_1(hw);
+		break;
+	}
+}
+
+static void
+hw_mac_mcu_config_9151a(struct rtl_hw *hw)
+{
+	if (hw->NotWrMcuPatchCode)
+		return;
+
+	rtl_hw_disable_mac_mcu_bps(hw);
+
+	/* Get H/W mac mcu patch code version */
+	hw->hw_mcu_patch_code_ver = rtl_get_hw_mcu_patch_code_ver(hw);
+
+	switch (hw->mcfg) {
+	case CFG_METHOD_60:
+		/* no mac mcu patch code */
+		break;
+	}
+}
+
+static void
+hw_phy_mcu_config_9151a(struct rtl_hw *hw)
+{
+	switch (hw->mcfg) {
+	case CFG_METHOD_60:
+		rtl_set_phy_mcu_9151a_1(hw);
+		break;
+	}
+}
+
+const struct rtl_hw_ops rtl9151a_ops = {
+	.hw_init_rxcfg     = hw_init_rxcfg_9151a,
+	.hw_ephy_config    = hw_ephy_config_9151a,
+	.hw_phy_config     = hw_phy_config_9151a,
+	.hw_mac_mcu_config = hw_mac_mcu_config_9151a,
+	.hw_phy_mcu_config = hw_phy_mcu_config_9151a,
+};
diff --git a/drivers/net/r8169/base/rtl9151a.h b/drivers/net/r8169/base/rtl9151a.h
new file mode 100644
index 0000000000..bf0e2017d6
--- /dev/null
+++ b/drivers/net/r8169/base/rtl9151a.h
@@ -0,0 +1,10 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2024 Realtek Corporation. All rights reserved
+ */
+
+#ifndef RTL9151A_H
+#define RTL9151A_H
+
+void rtl_set_phy_mcu_9151a_1(struct rtl_hw *hw);
+
+#endif /* RTL9151A_H */
diff --git a/drivers/net/r8169/base/rtl9151a_mcu.c b/drivers/net/r8169/base/rtl9151a_mcu.c
new file mode 100644
index 0000000000..50a2cd90e6
--- /dev/null
+++ b/drivers/net/r8169/base/rtl9151a_mcu.c
@@ -0,0 +1,53 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2024 Realtek Corporation. All rights reserved
+ */
+
+#include "../r8169_ethdev.h"
+#include "../r8169_hw.h"
+#include "../r8169_phy.h"
+#include "rtl9151a.h"
+
+/* For RTL9151A, CFG_METHOD_60 */
+
+/* ------------------------------------MAC 9151A------------------------------------- */
+
+/* ------------------------------------PHY 9151A--------------------------------------- */
+
+static const u16 phy_mcu_ram_code_9151a_1_1[] = {
+	0xa436, 0x8023, 0xa438, 0x5100, 0xa436, 0xB82E, 0xa438, 0x0001,
+	0xb820, 0x0090, 0xa436, 0xA016, 0xa438, 0x0020, 0xa436, 0xA012,
+	0xa438, 0x0000, 0xa436, 0xA014, 0xa438, 0x1800, 0xa438, 0x8010,
+	0xa438, 0x1800, 0xa438, 0x8017, 0xa438, 0x1800, 0xa438, 0x8028,
+	0xa438, 0x1800, 0xa438, 0x8028, 0xa438, 0x1800, 0xa438, 0x8028,
+	0xa438, 0x1800, 0xa438, 0x8028, 0xa438, 0x1800, 0xa438, 0x8028,
+	0xa438, 0x1800, 0xa438, 0x8028, 0xa438, 0x8901, 0xa438, 0xd707,
+	0xa438, 0x4076, 0xa438, 0x1800, 0xa438, 0x1399, 0xa438, 0x1800,
+	0xa438, 0x139f, 0xa438, 0xa00a, 0xa438, 0x0c06, 0xa438, 0x0102,
+	0xa438, 0xa240, 0xa438, 0xa290, 0xa438, 0xa344, 0xa438, 0xab02,
+	0xa438, 0xa404, 0xa438, 0xd1c7, 0xa438, 0xd045, 0xa438, 0x1000,
+	0xa438, 0x125f, 0xa438, 0xd700, 0xa438, 0x5fbb, 0xa438, 0xa320,
+	0xa438, 0x1800, 0xa438, 0x0cc2, 0xa436, 0xA10E, 0xa438, 0xffff,
+	0xa436, 0xA10C, 0xa438, 0xffff, 0xa436, 0xA10A, 0xa438, 0xffff,
+	0xa436, 0xA108, 0xa438, 0xffff, 0xa436, 0xA106, 0xa438, 0xffff,
+	0xa436, 0xA104, 0xa438, 0xffff, 0xa436, 0xA102, 0xa438, 0x0cb4,
+	0xa436, 0xA100, 0xa438, 0x1398, 0xa436, 0xA110, 0xa438, 0x0003,
+	0xb820, 0x0010, 0xB82E, 0x0000, 0xa436, 0x8023, 0xa438, 0x0000,
+	0xB820, 0x0000, 0xFFFF, 0xFFFF
+};
+
+static void
+rtl_real_set_phy_mcu_9151a_1_1(struct rtl_hw *hw)
+{
+	rtl_set_phy_mcu_ram_code(hw, phy_mcu_ram_code_9151a_1_1,
+				 ARRAY_SIZE(phy_mcu_ram_code_9151a_1_1));
+}
+
+void
+rtl_set_phy_mcu_9151a_1(struct rtl_hw *hw)
+{
+	rtl_set_phy_mcu_patch_request(hw);
+
+	rtl_real_set_phy_mcu_9151a_1_1(hw);
+
+	rtl_clear_phy_mcu_patch_request(hw);
+}
diff --git a/drivers/net/r8169/meson.build b/drivers/net/r8169/meson.build
index e0b3e88c3d..3747e198bc 100644
--- a/drivers/net/r8169/meson.build
+++ b/drivers/net/r8169/meson.build
@@ -32,4 +32,6 @@ sources = files(
         'base/rtl8168m.c',
         'base/rtl8127.c',
         'base/rtl8127_mcu.c',
+        'base/rtl9151a.c',
+        'base/rtl9151a_mcu.c',
 )
diff --git a/drivers/net/r8169/r8169_compat.h b/drivers/net/r8169/r8169_compat.h
index 673a1ca274..4339522f2d 100644
--- a/drivers/net/r8169/r8169_compat.h
+++ b/drivers/net/r8169/r8169_compat.h
@@ -271,6 +271,8 @@ enum RTL_registers {
 	IB2SOC_DATA    = 0x0014,
 	IB2SOC_CMD     = 0x0018,
 	IB2SOC_IMR     = 0x001C,
+	/* 9151 */
+	TxConfigV2     = 0x60B0,
 };
 
 enum RTL_register_content {
@@ -526,6 +528,7 @@ enum RTL_chipset_name {
 	RTL8125D,
 	RTL8125CP,
 	RTL8168KD,
+	RTL9151A,
 	RTL8126A,
 	RTL8168EP,
 	RTL8168FP,
diff --git a/drivers/net/r8169/r8169_ethdev.c b/drivers/net/r8169/r8169_ethdev.c
index 80e03dd53c..625f50853e 100644
--- a/drivers/net/r8169/r8169_ethdev.c
+++ b/drivers/net/r8169/r8169_ethdev.c
@@ -171,6 +171,7 @@ _rtl_setup_link(struct rte_eth_dev *dev)
 		case RTL8125BP:
 		case RTL8125D:
 		case RTL8125CP:
+		case RTL9151A:
 			speed_mode = SPEED_2500;
 			break;
 		case RTL8126A:
@@ -426,6 +427,7 @@ rtl_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
 	case CFG_METHOD_56:
 	case CFG_METHOD_57:
 	case CFG_METHOD_58:
+	case CFG_METHOD_60:
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
 	case CFG_METHOD_91:
@@ -471,6 +473,7 @@ rtl_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
 	case RTL8125BP:
 	case RTL8125D:
 	case RTL8125CP:
+	case RTL9151A:
 		dev_info->speed_capa |= RTE_ETH_LINK_SPEED_2_5G;
 		break;
 	}
@@ -931,7 +934,7 @@ rtl_dev_init(struct rte_eth_dev *dev)
 
 	rtl_disable_intr(hw);
 
-	rtl_hw_initialize(hw);
+	rtl_hw_initialize(hw, pci_dev);
 
 	/* Read the permanent MAC address out of ROM */
 	rtl_get_mac_address(hw, perm_addr);
diff --git a/drivers/net/r8169/r8169_ethdev.h b/drivers/net/r8169/r8169_ethdev.h
index a7604df6c2..d3676ee7d2 100644
--- a/drivers/net/r8169/r8169_ethdev.h
+++ b/drivers/net/r8169/r8169_ethdev.h
@@ -117,6 +117,9 @@ struct rtl_hw {
 
 	u16 mcu_pme_setting;
 
+	/* Device function */
+	u8 function;
+
 	/* Enable Tx No Close */
 	u8  HwSuppTxNoCloseVer;
 	u8  EnableTxNoClose;
diff --git a/drivers/net/r8169/r8169_hw.c b/drivers/net/r8169/r8169_hw.c
index 3f7e452132..ef2b0654a5 100644
--- a/drivers/net/r8169/r8169_hw.c
+++ b/drivers/net/r8169/r8169_hw.c
@@ -496,22 +496,7 @@ rtl_csi_other_fun_read(struct rtl_hw *hw, u8 multi_fun_sel_bit, u32 addr)
 u32
 rtl_csi_read(struct rtl_hw *hw, u32 addr)
 {
-	u8 multi_fun_sel_bit;
-
-	switch (hw->mcfg) {
-	case CFG_METHOD_26:
-	case CFG_METHOD_31:
-	case CFG_METHOD_32:
-	case CFG_METHOD_33:
-	case CFG_METHOD_34:
-		multi_fun_sel_bit = 1;
-		break;
-	default:
-		multi_fun_sel_bit = 0;
-		break;
-	}
-
-	return rtl_csi_other_fun_read(hw, multi_fun_sel_bit, addr);
+	return rtl_csi_other_fun_read(hw, hw->function, addr);
 }
 
 void
@@ -546,22 +531,7 @@ rtl_csi_other_fun_write(struct rtl_hw *hw, u8 multi_fun_sel_bit, u32 addr,
 void
 rtl_csi_write(struct rtl_hw *hw, u32 addr, u32 value)
 {
-	u8 multi_fun_sel_bit;
-
-	switch (hw->mcfg) {
-	case CFG_METHOD_26:
-	case CFG_METHOD_31:
-	case CFG_METHOD_32:
-	case CFG_METHOD_33:
-	case CFG_METHOD_34:
-		multi_fun_sel_bit = 1;
-		break;
-	default:
-		multi_fun_sel_bit = 0;
-		break;
-	}
-
-	rtl_csi_other_fun_write(hw, multi_fun_sel_bit, addr, value);
+	rtl_csi_other_fun_write(hw, hw->function, addr, value);
 }
 
 void
@@ -631,6 +601,7 @@ rtl_stop_all_request(struct rtl_hw *hw)
 	case CFG_METHOD_57:
 	case CFG_METHOD_58:
 	case CFG_METHOD_59:
+	case CFG_METHOD_60:
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
 	case CFG_METHOD_91:
@@ -688,6 +659,7 @@ rtl_wait_txrx_fifo_empty(struct rtl_hw *hw)
 	case CFG_METHOD_57:
 	case CFG_METHOD_58:
 	case CFG_METHOD_59:
+	case CFG_METHOD_60:
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
 	case CFG_METHOD_91:
@@ -925,6 +897,7 @@ rtl8125_set_rx_desc_type(struct rtl_hw *hw)
 	case CFG_METHOD_57:
 	case CFG_METHOD_58:
 	case CFG_METHOD_59:
+	case CFG_METHOD_60:
 		RTL_W8(hw, 0xD8, RTL_R8(hw, 0xD8) & ~EnableRxDescV4_0);
 		break;
 	case CFG_METHOD_70:
@@ -1043,7 +1016,7 @@ rtl8125_hw_config(struct rtl_hw *hw)
 	rtl_oob_mutex_lock(hw);
 
 	if (hw->mcfg == CFG_METHOD_56 || hw->mcfg == CFG_METHOD_57 ||
-	    hw->mcfg == CFG_METHOD_59)
+	    hw->mcfg == CFG_METHOD_59 || hw->mcfg == CFG_METHOD_60)
 		rtl_mac_ocp_write(hw, 0xE0C0, 0x4403);
 	else
 		rtl_mac_ocp_write(hw, 0xE0C0, 0x4000);
@@ -1259,6 +1232,10 @@ rtl_set_hw_ops(struct rtl_hw *hw)
 	case CFG_METHOD_58:
 		hw->hw_ops = rtl8125cp_ops;
 		return 0;
+	/* 9151A */
+	case CFG_METHOD_60:
+		hw->hw_ops = rtl9151a_ops;
+		return 0;
 	/* 8126A */
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
@@ -1486,7 +1463,7 @@ rtl_set_link_option(struct rtl_hw *hw, u8 autoneg, u32 speed, u8 duplex,
 }
 
 static void
-rtl_init_software_variable(struct rtl_hw *hw)
+rtl_init_software_variable(struct rtl_hw *hw, struct rte_pci_device *pci_dev)
 {
 	int tx_no_close_enable = 1;
 	unsigned int speed_mode;
@@ -1547,6 +1524,9 @@ rtl_init_software_variable(struct rtl_hw *hw)
 	case CFG_METHOD_59:
 		hw->chipset_name = RTL8168KD;
 		break;
+	case CFG_METHOD_60:
+		hw->chipset_name = RTL9151A;
+		break;
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
 		hw->chipset_name = RTL8126A;
@@ -1566,6 +1546,7 @@ rtl_init_software_variable(struct rtl_hw *hw)
 	case RTL8125BP:
 	case RTL8125D:
 	case RTL8125CP:
+	case RTL9151A:
 		speed_mode = SPEED_2500;
 		break;
 	case RTL8126A:
@@ -1697,6 +1678,7 @@ rtl_init_software_variable(struct rtl_hw *hw)
 	case CFG_METHOD_57:
 	case CFG_METHOD_58:
 	case CFG_METHOD_59:
+	case CFG_METHOD_60:
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
 	case CFG_METHOD_91:
@@ -1719,6 +1701,7 @@ rtl_init_software_variable(struct rtl_hw *hw)
 	case CFG_METHOD_57:
 	case CFG_METHOD_58:
 	case CFG_METHOD_59:
+	case CFG_METHOD_60:
 	case CFG_METHOD_91:
 		hw->HwSuppTxNoCloseVer = 6;
 		break;
@@ -1813,6 +1796,9 @@ rtl_init_software_variable(struct rtl_hw *hw)
 	case CFG_METHOD_58:
 		hw->sw_ram_code_ver = NIC_RAMCODE_VERSION_CFG_METHOD_58;
 		break;
+	case CFG_METHOD_60:
+		hw->sw_ram_code_ver = NIC_RAMCODE_VERSION_CFG_METHOD_60;
+		break;
 	case CFG_METHOD_70:
 		hw->sw_ram_code_ver = NIC_RAMCODE_VERSION_CFG_METHOD_70;
 		break;
@@ -1863,6 +1849,7 @@ rtl_init_software_variable(struct rtl_hw *hw)
 	case CFG_METHOD_57:
 	case CFG_METHOD_58:
 	case CFG_METHOD_59:
+	case CFG_METHOD_60:
 	case CFG_METHOD_91:
 		hw->HwSuppIntMitiVer = 6;
 		break;
@@ -1894,6 +1881,8 @@ rtl_init_software_variable(struct rtl_hw *hw)
 	rtl_set_link_option(hw, autoneg_mode, speed_mode, duplex_mode, rtl_fc_full);
 
 	hw->mtu = RTL_DEFAULT_MTU;
+
+	hw->function = pci_dev->addr.function;
 }
 
 static void
@@ -2104,9 +2093,9 @@ rtl_hw_init(struct rtl_hw *hw)
 }
 
 void
-rtl_hw_initialize(struct rtl_hw *hw)
+rtl_hw_initialize(struct rtl_hw *hw, struct rte_pci_device *pci_dev)
 {
-	rtl_init_software_variable(hw);
+	rtl_init_software_variable(hw, pci_dev);
 
 	rtl_exit_oob(hw);
 
@@ -2115,6 +2104,36 @@ rtl_hw_initialize(struct rtl_hw *hw)
 	rtl_nic_reset(hw);
 }
 
+static void
+rtl8125_get_mac_version_v2(struct rtl_hw *hw)
+{
+	u32 reg, val32;
+	u32 ic_version_id;
+
+	val32 = RTL_R32(hw, TxConfigV2);
+	reg = val32 & 0x7fffffc0;
+	ic_version_id = val32 & 0x3f;
+
+	RTE_ASSERT(val32 != UINT_MAX &&
+		   (val32 & RTL_R32(hw, TxConfig) & 0x7c800000) == 0x7c800000);
+
+	if (val32 == UINT_MAX)
+		return;
+
+	switch (reg) {
+	case 0x00000000:
+		if (ic_version_id == 0x00000000) {
+			hw->mcfg = CFG_METHOD_60;
+		} else {
+			hw->mcfg = CFG_METHOD_60;
+			hw->HwIcVerUnknown = TRUE;
+		}
+		break;
+	default:
+		break;
+	}
+}
+
 void
 rtl_get_mac_version(struct rtl_hw *hw, struct rte_pci_device *pci_dev)
 {
@@ -2125,6 +2144,13 @@ rtl_get_mac_version(struct rtl_hw *hw, struct rte_pci_device *pci_dev)
 	reg = val32 & 0x7c800000;
 	ic_version_id = val32 & 0x00700000;
 
+	hw->mcfg = CFG_METHOD_DEFAULT;
+
+	RTE_ASSERT(val32 != UINT_MAX);
+
+	if (val32 == UINT_MAX)
+		goto exit;
+
 	switch (reg) {
 	case 0x30000000:
 		hw->mcfg = CFG_METHOD_1;
@@ -2336,8 +2362,10 @@ rtl_get_mac_version(struct rtl_hw *hw, struct rte_pci_device *pci_dev)
 			hw->mcfg = CFG_METHOD_56;
 		} else if (ic_version_id == 0x100000) {
 			hw->mcfg = CFG_METHOD_57;
+		} else if (ic_version_id == 0x300000) {
+			hw->mcfg = CFG_METHOD_60;
 		} else {
-			hw->mcfg = CFG_METHOD_57;
+			hw->mcfg = CFG_METHOD_61;
 			hw->HwIcVerUnknown = TRUE;
 		}
 		break;
@@ -2369,11 +2397,17 @@ rtl_get_mac_version(struct rtl_hw *hw, struct rte_pci_device *pci_dev)
 			hw->HwIcVerUnknown = TRUE;
 		}
 		break;
+	case 0x7C800000:
+		rtl8125_get_mac_version_v2(hw);
+		break;
 	default:
+		break;
+	}
+
+exit:
+	if (hw->mcfg == CFG_METHOD_DEFAULT) {
 		PMD_INIT_LOG(NOTICE, "unknown chip version (%x)", reg);
-		hw->mcfg = CFG_METHOD_DEFAULT;
 		hw->HwIcVerUnknown = TRUE;
-		break;
 	}
 
 	if (pci_dev->id.device_id == 0x8162) {
diff --git a/drivers/net/r8169/r8169_hw.h b/drivers/net/r8169/r8169_hw.h
index 1bdc46bd17..65007c2a7e 100644
--- a/drivers/net/r8169/r8169_hw.h
+++ b/drivers/net/r8169/r8169_hw.h
@@ -45,7 +45,7 @@ void rtl_hw_disable_mac_mcu_bps(struct rtl_hw *hw);
 void rtl_write_mac_mcu_ram_code(struct rtl_hw *hw, const u16 *entry,
 				u16 entry_cnt);
 
-void rtl_hw_initialize(struct rtl_hw *hw);
+void rtl_hw_initialize(struct rtl_hw *hw, struct rte_pci_device *pci_dev);
 
 bool rtl_is_speed_mode_valid(struct rtl_hw *hw, u32 speed);
 
@@ -91,6 +91,7 @@ extern const struct rtl_hw_ops rtl8125a_ops;
 extern const struct rtl_hw_ops rtl8125b_ops;
 extern const struct rtl_hw_ops rtl8125bp_ops;
 extern const struct rtl_hw_ops rtl8125d_ops;
+extern const struct rtl_hw_ops rtl9151a_ops;
 extern const struct rtl_hw_ops rtl8126a_ops;
 extern const struct rtl_hw_ops rtl8168kb_ops;
 extern const struct rtl_hw_ops rtl8127_ops;
@@ -137,6 +138,7 @@ extern const struct rtl_hw_ops rtl8125cp_ops;
 #define NIC_RAMCODE_VERSION_CFG_METHOD_56  (0x0027)
 #define NIC_RAMCODE_VERSION_CFG_METHOD_57  (0x0034)
 #define NIC_RAMCODE_VERSION_CFG_METHOD_58  (0x0024)
+#define NIC_RAMCODE_VERSION_CFG_METHOD_60  (0x0003)
 #define NIC_RAMCODE_VERSION_CFG_METHOD_70  (0x0033)
 #define NIC_RAMCODE_VERSION_CFG_METHOD_71  (0x0060)
 #define NIC_RAMCODE_VERSION_CFG_METHOD_91  (0x0051)
diff --git a/drivers/net/r8169/r8169_phy.c b/drivers/net/r8169/r8169_phy.c
index 8988c6f288..de6e512375 100644
--- a/drivers/net/r8169/r8169_phy.c
+++ b/drivers/net/r8169/r8169_phy.c
@@ -551,7 +551,7 @@ rtl_powerdown_pll(struct rtl_hw *hw)
 
 	if (!hw->HwIcVerUnknown) {
 		if (!(hw->mcfg == CFG_METHOD_23 || hw->mcfg == CFG_METHOD_37 ||
-		      hw->mcfg == CFG_METHOD_91))
+		      hw->mcfg == CFG_METHOD_60 || hw->mcfg == CFG_METHOD_91))
 			RTL_W8(hw, PMCH, RTL_R8(hw, PMCH) & ~BIT_7);
 	}
 
@@ -964,21 +964,9 @@ _rtl_disable_adv_eee(struct rtl_hw *hw)
 		rtl_mdio_write(hw, 0x11, data);
 		rtl_mdio_write(hw, 0x1F, 0x0000);
 		break;
-	case CFG_METHOD_48:
-	case CFG_METHOD_49:
-	case CFG_METHOD_50:
-	case CFG_METHOD_51:
-	case CFG_METHOD_52:
-	case CFG_METHOD_53:
-	case CFG_METHOD_54:
-	case CFG_METHOD_55:
-	case CFG_METHOD_56:
-	case CFG_METHOD_57:
-	case CFG_METHOD_58:
-	case CFG_METHOD_59:
-	case CFG_METHOD_70:
-	case CFG_METHOD_71:
-	case CFG_METHOD_91:
+	default:
+		if (!rtl_is_8125(hw))
+			break;
 		rtl_clear_mac_ocp_bit(hw, 0xE052, BIT_0);
 		rtl_clear_eth_phy_ocp_bit(hw, 0xA442, (BIT_12 | BIT_13));
 		rtl_clear_eth_phy_ocp_bit(hw, 0xA430, BIT_15);
@@ -1062,6 +1050,7 @@ rtl_disable_eee(struct rtl_hw *hw)
 	case CFG_METHOD_57:
 	case CFG_METHOD_58:
 	case CFG_METHOD_59:
+	case CFG_METHOD_60:
 		rtl_clear_mac_ocp_bit(hw, 0xE040, (BIT_1 | BIT_0));
 
 		rtl_set_eth_phy_ocp_bit(hw, 0xA432, BIT_4);
@@ -1213,18 +1202,9 @@ rtl_set_speed_xmii(struct rtl_hw *hw, u8 autoneg, u32 speed, u8 duplex, u64 adv)
 	case CFG_METHOD_71:
 		mask |= BIT_1;
 	/* Fall through */
-	case CFG_METHOD_48:
-	case CFG_METHOD_49:
-	case CFG_METHOD_50:
-	case CFG_METHOD_51:
-	case CFG_METHOD_52:
-	case CFG_METHOD_53:
-	case CFG_METHOD_54:
-	case CFG_METHOD_55:
-	case CFG_METHOD_56:
-	case CFG_METHOD_57:
-	case CFG_METHOD_58:
-	case CFG_METHOD_59:
+	default:
+		if (!rtl_is_8125(hw))
+			break;
 		mask |= BIT_0;
 		rtl_clear_eth_phy_ocp_bit(hw, 0xA428, BIT_9);
 		rtl_clear_eth_phy_ocp_bit(hw, 0xA5EA, mask);
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v4 10/13] net/r8169: add support for RTL8125K
  2026-02-13  3:20 [PATCH v4 00/13] net/r8169: driver updates and new hardware support Howard Wang
                   ` (8 preceding siblings ...)
  2026-02-13  3:20 ` [PATCH v4 09/13] net/r8169: add support for RTL9151 Howard Wang
@ 2026-02-13  3:20 ` Howard Wang
  2026-02-13  3:20 ` [PATCH v4 11/13] net/r8169: fix one bug about RTL8168KB Howard Wang
                   ` (3 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: Howard Wang @ 2026-02-13  3:20 UTC (permalink / raw)
  To: dev; +Cc: pro_nic_dpdk, Howard Wang

This device supports network speeds up to 2.5Gbps.

Signed-off-by: Howard Wang <howard_wang@realsil.com.cn>
---
 drivers/net/r8169/base/rtl8125d.c     |  7 +++++
 drivers/net/r8169/base/rtl8125d_mcu.c |  1 +
 drivers/net/r8169/r8169_compat.h      |  1 +
 drivers/net/r8169/r8169_ethdev.c      |  3 ++
 drivers/net/r8169/r8169_hw.c          | 42 +++++++++++----------------
 drivers/net/r8169/r8169_phy.c         |  1 +
 6 files changed, 30 insertions(+), 25 deletions(-)

diff --git a/drivers/net/r8169/base/rtl8125d.c b/drivers/net/r8169/base/rtl8125d.c
index ac500587e0..70b82858ef 100644
--- a/drivers/net/r8169/base/rtl8125d.c
+++ b/drivers/net/r8169/base/rtl8125d.c
@@ -10,6 +10,7 @@
 /*
  * For RTL8125D, CFG_METHOD_56,57
  * For RTL8168KD, CFG_METHOD_59
+ * For RTL8125K, CFG_METHOD_61
  */
 
 static void
@@ -26,6 +27,7 @@ hw_ephy_config_8125d(struct rtl_hw *hw)
 	case CFG_METHOD_56:
 	case CFG_METHOD_57:
 	case CFG_METHOD_59:
+	case CFG_METHOD_61:
 		/* Nothing to do */
 		break;
 	}
@@ -278,6 +280,7 @@ hw_phy_config_8125d(struct rtl_hw *hw)
 		break;
 	case CFG_METHOD_57:
 	case CFG_METHOD_59:
+	case CFG_METHOD_61:
 		rtl_hw_phy_config_8125d_2(hw);
 		break;
 	}
@@ -302,6 +305,9 @@ hw_mac_mcu_config_8125d(struct rtl_hw *hw)
 	case CFG_METHOD_59:
 		rtl_set_mac_mcu_8125d_2(hw);
 		break;
+	default:
+		/* no mac mcu patch code */
+		break;
 	}
 }
 
@@ -314,6 +320,7 @@ hw_phy_mcu_config_8125d(struct rtl_hw *hw)
 		break;
 	case CFG_METHOD_57:
 	case CFG_METHOD_59:
+	case CFG_METHOD_61:
 		rtl_set_phy_mcu_8125d_2(hw);
 		break;
 	}
diff --git a/drivers/net/r8169/base/rtl8125d_mcu.c b/drivers/net/r8169/base/rtl8125d_mcu.c
index 304bad2998..953c80da5b 100644
--- a/drivers/net/r8169/base/rtl8125d_mcu.c
+++ b/drivers/net/r8169/base/rtl8125d_mcu.c
@@ -10,6 +10,7 @@
 /*
  * For RTL8125D, CFG_METHOD_56,57
  * For RTL8168KD, CFG_METHOD_59
+ * For RTL8125K, CFG_METHOD_61
  */
 
 /* ------------------------------------MAC 8125D------------------------------------- */
diff --git a/drivers/net/r8169/r8169_compat.h b/drivers/net/r8169/r8169_compat.h
index 4339522f2d..91c84c7633 100644
--- a/drivers/net/r8169/r8169_compat.h
+++ b/drivers/net/r8169/r8169_compat.h
@@ -529,6 +529,7 @@ enum RTL_chipset_name {
 	RTL8125CP,
 	RTL8168KD,
 	RTL9151A,
+	RTL8125K,
 	RTL8126A,
 	RTL8168EP,
 	RTL8168FP,
diff --git a/drivers/net/r8169/r8169_ethdev.c b/drivers/net/r8169/r8169_ethdev.c
index 625f50853e..72e014e22b 100644
--- a/drivers/net/r8169/r8169_ethdev.c
+++ b/drivers/net/r8169/r8169_ethdev.c
@@ -172,6 +172,7 @@ _rtl_setup_link(struct rte_eth_dev *dev)
 		case RTL8125D:
 		case RTL8125CP:
 		case RTL9151A:
+		case RTL8125K:
 			speed_mode = SPEED_2500;
 			break;
 		case RTL8126A:
@@ -428,6 +429,7 @@ rtl_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
 	case CFG_METHOD_57:
 	case CFG_METHOD_58:
 	case CFG_METHOD_60:
+	case CFG_METHOD_61:
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
 	case CFG_METHOD_91:
@@ -474,6 +476,7 @@ rtl_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
 	case RTL8125D:
 	case RTL8125CP:
 	case RTL9151A:
+	case RTL8125K:
 		dev_info->speed_capa |= RTE_ETH_LINK_SPEED_2_5G;
 		break;
 	}
diff --git a/drivers/net/r8169/r8169_hw.c b/drivers/net/r8169/r8169_hw.c
index ef2b0654a5..aa5e160feb 100644
--- a/drivers/net/r8169/r8169_hw.c
+++ b/drivers/net/r8169/r8169_hw.c
@@ -602,6 +602,7 @@ rtl_stop_all_request(struct rtl_hw *hw)
 	case CFG_METHOD_58:
 	case CFG_METHOD_59:
 	case CFG_METHOD_60:
+	case CFG_METHOD_61:
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
 	case CFG_METHOD_91:
@@ -660,6 +661,7 @@ rtl_wait_txrx_fifo_empty(struct rtl_hw *hw)
 	case CFG_METHOD_58:
 	case CFG_METHOD_59:
 	case CFG_METHOD_60:
+	case CFG_METHOD_61:
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
 	case CFG_METHOD_91:
@@ -898,6 +900,7 @@ rtl8125_set_rx_desc_type(struct rtl_hw *hw)
 	case CFG_METHOD_58:
 	case CFG_METHOD_59:
 	case CFG_METHOD_60:
+	case CFG_METHOD_61:
 		RTL_W8(hw, 0xD8, RTL_R8(hw, 0xD8) & ~EnableRxDescV4_0);
 		break;
 	case CFG_METHOD_70:
@@ -1016,7 +1019,8 @@ rtl8125_hw_config(struct rtl_hw *hw)
 	rtl_oob_mutex_lock(hw);
 
 	if (hw->mcfg == CFG_METHOD_56 || hw->mcfg == CFG_METHOD_57 ||
-	    hw->mcfg == CFG_METHOD_59 || hw->mcfg == CFG_METHOD_60)
+	    hw->mcfg == CFG_METHOD_59 || hw->mcfg == CFG_METHOD_60 ||
+	    hw->mcfg == CFG_METHOD_61)
 		rtl_mac_ocp_write(hw, 0xE0C0, 0x4403);
 	else
 		rtl_mac_ocp_write(hw, 0xE0C0, 0x4000);
@@ -1222,10 +1226,11 @@ rtl_set_hw_ops(struct rtl_hw *hw)
 	case CFG_METHOD_55:
 		hw->hw_ops = rtl8125bp_ops;
 		return 0;
-	/* 8125D and 8168KD */
+	/* 8125D, 8168KD, 8125K */
 	case CFG_METHOD_56:
 	case CFG_METHOD_57:
 	case CFG_METHOD_59:
+	case CFG_METHOD_61:
 		hw->hw_ops = rtl8125d_ops;
 		return 0;
 	/* 8125CP */
@@ -1527,6 +1532,9 @@ rtl_init_software_variable(struct rtl_hw *hw, struct rte_pci_device *pci_dev)
 	case CFG_METHOD_60:
 		hw->chipset_name = RTL9151A;
 		break;
+	case CFG_METHOD_61:
+		hw->chipset_name = RTL8125K;
+		break;
 	case CFG_METHOD_70:
 	case CFG_METHOD_71:
 		hw->chipset_name = RTL8126A;
@@ -1547,6 +1555,7 @@ rtl_init_software_variable(struct rtl_hw *hw, struct rte_pci_device *pci_dev)
 	case RTL8125D:
 	case RTL8125CP:
 	case RTL9151A:
+	case RTL8125K:
 		speed_mode = SPEED_2500;
 		break;
 	case RTL8126A:
@@ -1659,29 +1668,7 @@ rtl_init_software_variable(struct rtl_hw *hw, struct rte_pci_device *pci_dev)
 	case CFG_METHOD_37:
 		hw->HwSuppCheckPhyDisableModeVer = 2;
 		break;
-	case CFG_METHOD_23:
-	case CFG_METHOD_27:
-	case CFG_METHOD_28:
-	case CFG_METHOD_31:
-	case CFG_METHOD_32:
-	case CFG_METHOD_33:
-	case CFG_METHOD_34:
-	case CFG_METHOD_48:
-	case CFG_METHOD_49:
-	case CFG_METHOD_50:
-	case CFG_METHOD_51:
-	case CFG_METHOD_52:
-	case CFG_METHOD_53:
-	case CFG_METHOD_54:
-	case CFG_METHOD_55:
-	case CFG_METHOD_56:
-	case CFG_METHOD_57:
-	case CFG_METHOD_58:
-	case CFG_METHOD_59:
-	case CFG_METHOD_60:
-	case CFG_METHOD_70:
-	case CFG_METHOD_71:
-	case CFG_METHOD_91:
+	default:
 		hw->HwSuppCheckPhyDisableModeVer = 3;
 		break;
 	}
@@ -1702,6 +1689,7 @@ rtl_init_software_variable(struct rtl_hw *hw, struct rte_pci_device *pci_dev)
 	case CFG_METHOD_58:
 	case CFG_METHOD_59:
 	case CFG_METHOD_60:
+	case CFG_METHOD_61:
 	case CFG_METHOD_91:
 		hw->HwSuppTxNoCloseVer = 6;
 		break;
@@ -1791,6 +1779,7 @@ rtl_init_software_variable(struct rtl_hw *hw, struct rte_pci_device *pci_dev)
 		break;
 	case CFG_METHOD_57:
 	case CFG_METHOD_59:
+	case CFG_METHOD_61:
 		hw->sw_ram_code_ver = NIC_RAMCODE_VERSION_CFG_METHOD_57;
 		break;
 	case CFG_METHOD_58:
@@ -1850,6 +1839,7 @@ rtl_init_software_variable(struct rtl_hw *hw, struct rte_pci_device *pci_dev)
 	case CFG_METHOD_58:
 	case CFG_METHOD_59:
 	case CFG_METHOD_60:
+	case CFG_METHOD_61:
 	case CFG_METHOD_91:
 		hw->HwSuppIntMitiVer = 6;
 		break;
@@ -2362,6 +2352,8 @@ rtl_get_mac_version(struct rtl_hw *hw, struct rte_pci_device *pci_dev)
 			hw->mcfg = CFG_METHOD_56;
 		} else if (ic_version_id == 0x100000) {
 			hw->mcfg = CFG_METHOD_57;
+		} else if (ic_version_id == 0x200000) {
+			hw->mcfg = CFG_METHOD_61;
 		} else if (ic_version_id == 0x300000) {
 			hw->mcfg = CFG_METHOD_60;
 		} else {
diff --git a/drivers/net/r8169/r8169_phy.c b/drivers/net/r8169/r8169_phy.c
index de6e512375..079b9e5f00 100644
--- a/drivers/net/r8169/r8169_phy.c
+++ b/drivers/net/r8169/r8169_phy.c
@@ -1051,6 +1051,7 @@ rtl_disable_eee(struct rtl_hw *hw)
 	case CFG_METHOD_58:
 	case CFG_METHOD_59:
 	case CFG_METHOD_60:
+	case CFG_METHOD_61:
 		rtl_clear_mac_ocp_bit(hw, 0xE040, (BIT_1 | BIT_0));
 
 		rtl_set_eth_phy_ocp_bit(hw, 0xA432, BIT_4);
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v4 11/13] net/r8169: fix one bug about RTL8168KB
  2026-02-13  3:20 [PATCH v4 00/13] net/r8169: driver updates and new hardware support Howard Wang
                   ` (9 preceding siblings ...)
  2026-02-13  3:20 ` [PATCH v4 10/13] net/r8169: add support for RTL8125K Howard Wang
@ 2026-02-13  3:20 ` Howard Wang
  2026-02-13  3:20 ` [PATCH v4 12/13] net/r8169: ensure the old mapping is used Howard Wang
                   ` (2 subsequent siblings)
  13 siblings, 0 replies; 15+ messages in thread
From: Howard Wang @ 2026-02-13  3:20 UTC (permalink / raw)
  To: dev; +Cc: pro_nic_dpdk, Howard Wang, stable

The RTL8168KB was incorrectly treated as a 2.5G device.
This chip actually supports a maximum speed of 1Gbps.

Fixes: 4e6ed7284f50 ("net/r8169: simplify config method check")
Cc: stable@dpdk.org

Signed-off-by: Howard Wang <howard_wang@realsil.com.cn>
---
 drivers/net/r8169/r8169_ethdev.c | 1 -
 drivers/net/r8169/r8169_hw.c     | 1 -
 2 files changed, 2 deletions(-)

diff --git a/drivers/net/r8169/r8169_ethdev.c b/drivers/net/r8169/r8169_ethdev.c
index 72e014e22b..b2b1882aa5 100644
--- a/drivers/net/r8169/r8169_ethdev.c
+++ b/drivers/net/r8169/r8169_ethdev.c
@@ -167,7 +167,6 @@ _rtl_setup_link(struct rte_eth_dev *dev)
 		switch (hw->chipset_name) {
 		case RTL8125A:
 		case RTL8125B:
-		case RTL8168KB:
 		case RTL8125BP:
 		case RTL8125D:
 		case RTL8125CP:
diff --git a/drivers/net/r8169/r8169_hw.c b/drivers/net/r8169/r8169_hw.c
index aa5e160feb..acc16f3e48 100644
--- a/drivers/net/r8169/r8169_hw.c
+++ b/drivers/net/r8169/r8169_hw.c
@@ -1550,7 +1550,6 @@ rtl_init_software_variable(struct rtl_hw *hw, struct rte_pci_device *pci_dev)
 	switch (hw->chipset_name) {
 	case RTL8125A:
 	case RTL8125B:
-	case RTL8168KB:
 	case RTL8125BP:
 	case RTL8125D:
 	case RTL8125CP:
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v4 12/13] net/r8169: ensure the old mapping is used
  2026-02-13  3:20 [PATCH v4 00/13] net/r8169: driver updates and new hardware support Howard Wang
                   ` (10 preceding siblings ...)
  2026-02-13  3:20 ` [PATCH v4 11/13] net/r8169: fix one bug about RTL8168KB Howard Wang
@ 2026-02-13  3:20 ` Howard Wang
  2026-02-13  3:20 ` [PATCH v4 13/13] net/r8169: fix bitmask logic for RTL8127 Howard Wang
  2026-02-13 16:53 ` [PATCH v4 00/13] net/r8169: driver updates and new hardware support Stephen Hemminger
  13 siblings, 0 replies; 15+ messages in thread
From: Howard Wang @ 2026-02-13  3:20 UTC (permalink / raw)
  To: dev; +Cc: pro_nic_dpdk, Howard Wang, stable

Fix the incorrect link status reported when binding the PMD after
the NIC has been initialized by the vendor driver.

Fixes: 619f6ebce115 ("net/r8169: support hardware configuration")
Cc: stable@dpdk.org

Signed-off-by: Howard Wang <howard_wang@realsil.com.cn>
---
 drivers/net/r8169/r8169_hw.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/r8169/r8169_hw.c b/drivers/net/r8169/r8169_hw.c
index acc16f3e48..27d52c81c9 100644
--- a/drivers/net/r8169/r8169_hw.c
+++ b/drivers/net/r8169/r8169_hw.c
@@ -1083,6 +1083,9 @@ rtl8125_hw_config(struct rtl_hw *hw)
 
 	rtl_mac_ocp_write(hw, 0xE098, 0xC302);
 
+	/* Ensure the old mapping is used. */
+	RTL_W8(hw, INT_CFG0_8125, RTL_R8(hw, INT_CFG0_8125) & ~BIT_0);
+
 	rtl_disable_cfg9346_write(hw);
 
 	rte_delay_us(10);
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v4 13/13] net/r8169: fix bitmask logic for RTL8127
  2026-02-13  3:20 [PATCH v4 00/13] net/r8169: driver updates and new hardware support Howard Wang
                   ` (11 preceding siblings ...)
  2026-02-13  3:20 ` [PATCH v4 12/13] net/r8169: ensure the old mapping is used Howard Wang
@ 2026-02-13  3:20 ` Howard Wang
  2026-02-13 16:53 ` [PATCH v4 00/13] net/r8169: driver updates and new hardware support Stephen Hemminger
  13 siblings, 0 replies; 15+ messages in thread
From: Howard Wang @ 2026-02-13  3:20 UTC (permalink / raw)
  To: dev; +Cc: pro_nic_dpdk, Howard Wang, stable

Fix incorrect bitwise operation (used & instead of &~) when setting
RTL8127 1G and 10G capabilities.

Fixes: 8d9c29c2de93 ("net/r8169: support RTL8127ATF serdes interface")
Cc: stable@dpdk.org

Signed-off-by: Howard Wang <howard_wang@realsil.com.cn>
---
 drivers/net/r8169/r8169_fiber.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/r8169/r8169_fiber.c b/drivers/net/r8169/r8169_fiber.c
index 8533ade15e..caad868cf5 100644
--- a/drivers/net/r8169/r8169_fiber.c
+++ b/drivers/net/r8169/r8169_fiber.c
@@ -119,7 +119,7 @@ rtl8127_set_sds_phy_caps_1g_8127(struct rtl_hw *hw)
 	RTL_W16(hw, 0x233A, 0x8004);
 
 	val = RTL_R16(hw, 0x233E);
-	val &= (BIT_13 | BIT_12 | BIT_1 | BIT_0);
+	val &= ~(BIT_13 | BIT_12 | BIT_1 | BIT_0);
 	val |= BIT_1;
 	RTL_W16(hw, 0x233E, val);
 
@@ -153,7 +153,7 @@ rtl8127_set_sds_phy_caps_10g_8127(struct rtl_hw *hw)
 	RTL_W16(hw, 0x233A, 0x801A);
 
 	val = RTL_R16(hw, 0x233E);
-	val &= (BIT_13 | BIT_12 | BIT_1 | BIT_0);
+	val &= ~(BIT_13 | BIT_12 | BIT_1 | BIT_0);
 	val |= BIT_12;
 	RTL_W16(hw, 0x233E, val);
 
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [PATCH v4 00/13] net/r8169: driver updates and new hardware support
  2026-02-13  3:20 [PATCH v4 00/13] net/r8169: driver updates and new hardware support Howard Wang
                   ` (12 preceding siblings ...)
  2026-02-13  3:20 ` [PATCH v4 13/13] net/r8169: fix bitmask logic for RTL8127 Howard Wang
@ 2026-02-13 16:53 ` Stephen Hemminger
  13 siblings, 0 replies; 15+ messages in thread
From: Stephen Hemminger @ 2026-02-13 16:53 UTC (permalink / raw)
  To: Howard Wang; +Cc: dev, pro_nic_dpdk

On Fri, 13 Feb 2026 11:20:05 +0800
Howard Wang <howard_wang@realsil.com.cn> wrote:

> This patch series introduces several updates to the net/r8169 driver.
> 
> The changes are categorized as follows:
> 
> 1. Bug Fixes:
>    - Fix a crash during RTL8168FP initialization due to a missing function pointer.
>    - Fix incorrect bitwise logic for RTL8127 capabilities.
>    - Fix incorrect speed identification for RTL8168KB (it is a 1G device).
>    - Fix link status reporting issues regarding old mapping.
> 
> 2. New Hardware Support:
>    - Add support for RTL8125K (2.5G).
>    - Add support for RTL9151 (2.5G).
>    - Add support for RTL8168KD (1G).
> 
> 3. Hardware Configuration Updates:
>    - Update MCU and PHY configurations for RTL8125, RTL8126, and RTL8127 series
>      to match the latest hardware specifications.
>    - Optimize Rx descriptor fetch numbers for RTL8126 and RTL8127 to improve performance.
>    - Adjust jumbo frame size limits for non-1G cards.
> 
> 4. Cleanup:
>    - Remove support for the unreleased test chip (CFG_METHOD_69) to simplify the code.
> 
> Howard Wang (13):
>   net/r8169: fix crash in RTL8168FP init
>   net/r8169: optimize Rx descriptor fetch number
>   net/r8169: add support for RTL8168KD
>   net/r8169: update hardware configurations for 8127
>   net/r8169: adjust jumbo frame size limit for non-1G cards
>   net/r8169: remove support for CFG_METHOD_69
>   net/r8169: update hardware configurations for 8126
>   net/r8169: update hardware configurations for 8125
>   net/r8169: add support for RTL9151
>   net/r8169: add support for RTL8125K
>   net/r8169: fix one bug about RTL8168KB
>   net/r8169: ensure the old mapping is used
>   net/r8169: fix bitmask logic for RTL8127
> 
>  drivers/net/r8169/base/rtl8125a_mcu.c  |  128 +--
>  drivers/net/r8169/base/rtl8125b_mcu.c  |   56 +-
>  drivers/net/r8169/base/rtl8125bp_mcu.c |   17 +-
>  drivers/net/r8169/base/rtl8125cp.c     |   36 +
>  drivers/net/r8169/base/rtl8125cp_mcu.c |   87 +-
>  drivers/net/r8169/base/rtl8125cp_mcu.h |    1 +
>  drivers/net/r8169/base/rtl8125d.c      |   31 +-
>  drivers/net/r8169/base/rtl8125d_mcu.c  |  605 +++++++----
>  drivers/net/r8169/base/rtl8125d_mcu.h  |    1 +
>  drivers/net/r8169/base/rtl8126a.c      |   32 +-
>  drivers/net/r8169/base/rtl8126a_mcu.c  |  689 +-----------
>  drivers/net/r8169/base/rtl8126a_mcu.h  |    2 -
>  drivers/net/r8169/base/rtl8127.c       |   15 +-
>  drivers/net/r8169/base/rtl8127_mcu.c   | 1332 +++++++++++++++++-------
>  drivers/net/r8169/base/rtl8168fp.c     |    1 +
>  drivers/net/r8169/base/rtl8168fp.h     |    1 +
>  drivers/net/r8169/base/rtl8168fp_mcu.c |    6 +
>  drivers/net/r8169/base/rtl9151a.c      |   87 ++
>  drivers/net/r8169/base/rtl9151a.h      |   10 +
>  drivers/net/r8169/base/rtl9151a_mcu.c  |   53 +
>  drivers/net/r8169/meson.build          |    2 +
>  drivers/net/r8169/r8169_compat.h       |   10 +-
>  drivers/net/r8169/r8169_ethdev.c       |   36 +-
>  drivers/net/r8169/r8169_ethdev.h       |    3 +
>  drivers/net/r8169/r8169_fiber.c        |   15 +-
>  drivers/net/r8169/r8169_hw.c           |  239 +++--
>  drivers/net/r8169/r8169_hw.h           |   11 +-
>  drivers/net/r8169/r8169_phy.c          |   54 +-
>  drivers/net/r8169/r8169_rxtx.c         |    1 -
>  29 files changed, 2058 insertions(+), 1503 deletions(-)
>  create mode 100644 drivers/net/r8169/base/rtl9151a.c
>  create mode 100644 drivers/net/r8169/base/rtl9151a.h
>  create mode 100644 drivers/net/r8169/base/rtl9151a_mcu.c
> 


Looks good merged to next-net.
I will take the suggestion from AI for one patch
subject.

If interested here is the verbose AI review.

# DPDK net/r8169 Patchset v4 Review — Deep Dive

**Series**: `[PATCH v4 01/13] net/r8169: ...` (13 patches)
**Author**: Howard Wang `<howard_wang@realsil.com.cn>`
**Date**: 2026-02-13

---

## Series Overview

This 13-patch series covers the Realtek r8169 PMD with a mix of bug fixes, new device support, hardware config updates, and code cleanup:

- **Bug fixes** (patches 1, 11, 12, 13): NULL pointer crash in RTL8168FP, incorrect RTL8168KB speed classification, stale link status after vendor driver init, and wrong bitmask logic in RTL8127 serdes.
- **New device support** (patches 3, 9, 10): RTL8168KD (1G), RTL9151 (2.5G), RTL8125K (2.5G).
- **Hardware config updates** (patches 4, 7, 8): MCU patches for 8127, 8126, 8125 families.
- **Performance tuning** (patch 2): Rx descriptor fetch number optimization.
- **Jumbo frame adjustment** (patch 5): Per-device max frame sizes for non-1G cards.
- **Code removal** (patch 6): Drop CFG_METHOD_69 (test chip never released).

---

## Patches With Findings

### Patch 5: `net/r8169: adjust jumbo frame size limit for non-1G cards`

**Warning — Missing CFG_METHOD_59 (RTL8168KD) in jumbo frame switch**

The switch statement in `rtl_dev_infos_get()` lists the 16K-capable non-1G devices:

```c
case CFG_METHOD_50: case CFG_METHOD_51: case CFG_METHOD_54:
case CFG_METHOD_55: case CFG_METHOD_56: case CFG_METHOD_57:
case CFG_METHOD_58: case CFG_METHOD_70: case CFG_METHOD_71:
case CFG_METHOD_91:
    dev_info->max_rx_pktlen = JUMBO_FRAME_16K;
```

CFG_METHOD_59 (RTL8168KD, added in patch 3) is absent. If it's a 1G device using the 8125D base code, it may still benefit from the 16K path, or it may intentionally fall through to the 9K default. Either way, this should be clarified — the commit description says "For other non-1G cards, set the max size to 16K" but RTL8168KD is a 1G card, so the 9K default may be correct. Worth explicit confirmation.

---

### Patch 6: `net/r8169: remove support for CFG_METHOD_69`

**Warning — Interaction with patch 2**

Patch 2 modifies the `CFG_METHOD_69` case in `hw_init_rxcfg_8126a()` to use `Rx_Fetch_Number_20`, then patch 6 removes `CFG_METHOD_69` entirely including that same code path. The patches should apply cleanly in sequence, but this creates churn — patch 2's changes to the CFG_METHOD_69 path are immediately deleted by patch 6.

This is not a correctness bug, but as a reviewer observation: reordering patches 2 and 6 (remove first, then tune the remaining methods) would reduce noise in the series.

**Info — `CFG_METHOD_69` mapping to `CFG_METHOD_DEFAULT`**

In `rtl_get_mac_version()`, the device ID `0x64800000` with `ic_version_id == 0x00000000` is remapped from `CFG_METHOD_69` to `CFG_METHOD_DEFAULT`. This means any hardware that previously matched this ID will now be treated as an unknown chip. This is intentional per the commit message (test chip not released), but worth noting that any such hardware in the field would lose functionality.

---

### Patch 9: `net/r8169: add support for RTL9151`

**Error (Confidence ~60%) — `RTE_ASSERT` followed by guard in `rtl8125_get_mac_version_v2()`**

```c
RTE_ASSERT(val32 != UINT_MAX &&
           (val32 & RTL_R32(hw, TxConfig) & 0x7c800000) == 0x7c800000);

if (val32 == UINT_MAX)
    return;
```

`RTE_ASSERT` is typically compiled out in release builds (`RTE_ASSERT` is a no-op unless `RTE_ENABLE_ASSERT` is defined). The logic here defensively checks `val32 == UINT_MAX` after the assert, which is good. However, if the assert fires in debug builds, it will abort before the graceful return path is reached. The assert also issues a second MMIO read (`RTL_R32(hw, TxConfig)`) inside the assert condition — this read happens only in debug builds and has a side effect (MMIO access). This is unusual and potentially confusing.

**Suggested fix**: Move the MMIO cross-check outside the assert or just use a log warning:

```c
if (val32 == UINT_MAX)
    return;

/* Verify TxConfig signature matches V2 register layout */
if ((val32 & RTL_R32(hw, TxConfig) & 0x7c800000) != 0x7c800000) {
    PMD_INIT_LOG(WARNING, "TxConfigV2 signature mismatch");
    return;
}
```

**Warning — Missing `CFG_METHOD_60` in `r8169_compat.h` enumeration**

Patch 9 adds `CFG_METHOD_60` in several places and `RTL9151A` to the chipset enum, but the `CFG_METHOD_60` enum value itself needs to exist in `r8169_compat.h`. It's not shown in the diff. This may exist in the base code already, or be added by a dependency — cannot verify from the patch alone, so noting it for completeness.

**Warning — Missing release notes for new device (RTL9151)**

Per AGENTS.md guidelines: "New drivers or subsystems must have release notes." The RTL9151 is a new device type being added to an existing driver. There are no doc changes in this patch or the series. A release notes entry should be added.

**Warning — Missing `doc/guides/nics/features/r8169.ini` update**

If RTL9151 has different feature support than existing devices, the features matrix should be updated.

---

### Patch 10: `net/r8169: add support for RTL8125K`

**Warning — `CFG_METHOD_61` shares RAM code version with `CFG_METHOD_57`**

```c
case CFG_METHOD_57:
case CFG_METHOD_59:
case CFG_METHOD_61:
    hw->sw_ram_code_ver = NIC_RAMCODE_VERSION_CFG_METHOD_57;
    break;
```

This is intentional (RTL8125K uses the same MCU firmware as RTL8125D rev 2), but it means the ram code version define is named after a different chip method. This is just informational — the code is correct.

**Warning — Missing release notes for new device (RTL8125K)**

Same as patch 9 — new device support should be noted in release notes.

---

### Patch 11: `net/r8169: fix one bug about RTL8168KB`

**Warning — Subject line wording**

"fix one bug about RTL8168KB" is vague. A more descriptive subject like `net/r8169: fix RTL8168KB speed classification` would better communicate what the patch does.

---

### Patch 13: `net/r8169: fix bitmask logic for RTL8127`

**This is a genuine correctness bug fix — good catch by the author.**

The original code:

```c
val &= (BIT_13 | BIT_12 | BIT_1 | BIT_0);  /* BUG: clears everything EXCEPT these bits */
val |= BIT_1;
```

The fix:

```c
val &= ~(BIT_13 | BIT_12 | BIT_1 | BIT_0);  /* Correct: clears these specific bits */
val |= BIT_1;
```

Without the `~`, the `&=` would mask the value to *only* keep bits 13, 12, 1, and 0, destroying all other bits in the register. With the fix, only the targeted bits are cleared before setting BIT_1. This would have caused incorrect serdes capability configuration for RTL8127 1G and 10G modes. The fix is correct.

---

## Patches With No Issues

Patches 1, 2, 3, 4, 7, 8, 12 were reviewed and no issues requiring report were found. The bug fixes (1, 12) are straightforward and correct. The hardware config updates (3, 4, 7, 8) follow established patterns in the driver. Patch 2's register constant definitions (`Rx_Fetch_Number_12`, `Rx_Fetch_Number_20`) use existing macro patterns correctly.

---

## Summary

| Severity | Count | Details |
|----------|-------|---------|
| Error    | 1     | MMIO read inside `RTE_ASSERT` in patch 9 |
| Warning  | 5     | Missing release notes (9, 10), subject wording (11), CFG_METHOD_59 jumbo clarification (5), patch ordering churn (6) |
| Info     | 1     | CFG_METHOD_69 default remap (6) |

The series is overall well-structured. The high-value finding is patch 13's bitmask fix which addresses a real hardware misconfiguration bug. The main areas for improvement are documentation (release notes for new devices) and minor commit message polish.

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2026-02-13 16:53 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-13  3:20 [PATCH v4 00/13] net/r8169: driver updates and new hardware support Howard Wang
2026-02-13  3:20 ` [PATCH v4 01/13] net/r8169: fix crash in RTL8168FP init Howard Wang
2026-02-13  3:20 ` [PATCH v4 02/13] net/r8169: optimize Rx descriptor fetch number Howard Wang
2026-02-13  3:20 ` [PATCH v4 03/13] net/r8169: add support for RTL8168KD Howard Wang
2026-02-13  3:20 ` [PATCH v4 04/13] net/r8169: update hardware configurations for 8127 Howard Wang
2026-02-13  3:20 ` [PATCH v4 05/13] net/r8169: adjust jumbo frame size limit for non-1G cards Howard Wang
2026-02-13  3:20 ` [PATCH v4 06/13] net/r8169: remove support for CFG_METHOD_69 Howard Wang
2026-02-13  3:20 ` [PATCH v4 07/13] net/r8169: update hardware configurations for 8126 Howard Wang
2026-02-13  3:20 ` [PATCH v4 08/13] net/r8169: update hardware configurations for 8125 Howard Wang
2026-02-13  3:20 ` [PATCH v4 09/13] net/r8169: add support for RTL9151 Howard Wang
2026-02-13  3:20 ` [PATCH v4 10/13] net/r8169: add support for RTL8125K Howard Wang
2026-02-13  3:20 ` [PATCH v4 11/13] net/r8169: fix one bug about RTL8168KB Howard Wang
2026-02-13  3:20 ` [PATCH v4 12/13] net/r8169: ensure the old mapping is used Howard Wang
2026-02-13  3:20 ` [PATCH v4 13/13] net/r8169: fix bitmask logic for RTL8127 Howard Wang
2026-02-13 16:53 ` [PATCH v4 00/13] net/r8169: driver updates and new hardware support Stephen Hemminger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox