mirror of
git://git.openwrt.org/openwrt/openwrt.git
synced 2025-10-24 10:34:27 -04:00
Fixes issues with RTL8156 2.5G USB adapters
- # ethtool eth1
Settings for eth1:
Supported ports: [ ]
Supported link modes: Not reported
Supported pause frame use: No
Supports auto-negotiation: No
Supported FEC modes: Not reported
Advertised link modes: Not reported
Advertised pause frame use: No
Advertised auto-negotiation: No
Advertised FEC modes: Not reported
Speed: 2500Mb/s
Duplex: Half
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: off
MDI-X: Unknown
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes
- #
- r8152: break the loop when the budget is exhausted
- r8152: Block future register access if register access fails
- r8152: Rename RTL8152_UNPLUG to RTL8152_INACCESSIBLE
- r8152: add vendor/device ID pair for D-Link DUB-E250
- r8152: try to use a normal budget
- r8152: set bp in bulk
- r8152: adjust generic_ocp_write function
- r8152: fix the autosuspend doesn't work
- r8152: Add __GFP_NOWARN to big allocations
- r8152: reduce the control transfer of rtl8152_get_version()
- r8152: remove rtl_vendor_mode function
- r8152: avoid to change cfg for all devices
- r8152: add USB device driver for config selection
- r8152: use napi_gro_frags
- cdc_ether: no need to blacklist any r8152 devices
- cdc_ether: add u-blox 0x1313 composition
Build system: x86_64
Build-tested: bcm2711, rockchip, x86/64
Run-tested: bcm2711/RPi4B, rockchip/nanopi r2s, x86/64
Signed-off-by: Marty Jones <mj8263788@gmail.com>
71 lines
2.0 KiB
Diff
71 lines
2.0 KiB
Diff
From 57df0fb9d511f91202114813e90128d65c0589f0 Mon Sep 17 00:00:00 2001
|
|
From: Hayes Wang <hayeswang@realtek.com>
|
|
Date: Wed, 26 Jul 2023 11:08:07 +0800
|
|
Subject: [PATCH] r8152: adjust generic_ocp_write function
|
|
|
|
Reduce the control transfer if all bytes of first or the last DWORD are
|
|
written.
|
|
|
|
The original method is to split the control transfer into three parts
|
|
(the first DWORD, middle continuous data, and the last DWORD). However,
|
|
they could be combined if whole bytes of the first DWORD or last DWORD
|
|
are written. That is, the first DWORD or the last DWORD could be combined
|
|
with the middle continuous data, if the byte_en is 0xff.
|
|
|
|
Signed-off-by: Hayes Wang <hayeswang@realtek.com>
|
|
Link: https://lore.kernel.org/r/20230726030808.9093-418-nic_swsd@realtek.com
|
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|
---
|
|
drivers/net/usb/r8152.c | 29 ++++++++++++++++++-----------
|
|
1 file changed, 18 insertions(+), 11 deletions(-)
|
|
|
|
--- a/drivers/net/usb/r8152.c
|
|
+++ b/drivers/net/usb/r8152.c
|
|
@@ -1313,16 +1313,24 @@ static int generic_ocp_write(struct r815
|
|
byteen_end = byteen & BYTE_EN_END_MASK;
|
|
|
|
byen = byteen_start | (byteen_start << 4);
|
|
- ret = set_registers(tp, index, type | byen, 4, data);
|
|
- if (ret < 0)
|
|
- goto error1;
|
|
-
|
|
- index += 4;
|
|
- data += 4;
|
|
- size -= 4;
|
|
|
|
- if (size) {
|
|
+ /* Split the first DWORD if the byte_en is not 0xff */
|
|
+ if (byen != BYTE_EN_DWORD) {
|
|
+ ret = set_registers(tp, index, type | byen, 4, data);
|
|
+ if (ret < 0)
|
|
+ goto error1;
|
|
+
|
|
+ index += 4;
|
|
+ data += 4;
|
|
size -= 4;
|
|
+ }
|
|
+
|
|
+ if (size) {
|
|
+ byen = byteen_end | (byteen_end >> 4);
|
|
+
|
|
+ /* Split the last DWORD if the byte_en is not 0xff */
|
|
+ if (byen != BYTE_EN_DWORD)
|
|
+ size -= 4;
|
|
|
|
while (size) {
|
|
if (size > limit) {
|
|
@@ -1349,10 +1357,9 @@ static int generic_ocp_write(struct r815
|
|
}
|
|
}
|
|
|
|
- byen = byteen_end | (byteen_end >> 4);
|
|
- ret = set_registers(tp, index, type | byen, 4, data);
|
|
- if (ret < 0)
|
|
- goto error1;
|
|
+ /* Set the last DWORD */
|
|
+ if (byen != BYTE_EN_DWORD)
|
|
+ ret = set_registers(tp, index, type | byen, 4, data);
|
|
}
|
|
|
|
error1:
|