Commit 8fb106b2 authored by David S. Miller's avatar David S. Miller

Merge branch 'r8152-rx-settings'

Hayes Wang says:

====================
r8152: fix the rx settings of RTL8153

The RMS and the rx early size should base on the same rx size. However,
the RMS is set to 9K bytes now and the rx early depends on mtu. For using
the rx buffer effectively, sync the two settings according to the mtu.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents a05d4fd9 b20cb60e
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
#define NETNEXT_VERSION "08" #define NETNEXT_VERSION "08"
/* Information for net */ /* Information for net */
#define NET_VERSION "8" #define NET_VERSION "9"
#define DRIVER_VERSION "v1." NETNEXT_VERSION "." NET_VERSION #define DRIVER_VERSION "v1." NETNEXT_VERSION "." NET_VERSION
#define DRIVER_AUTHOR "Realtek linux nic maintainers <nic_swsd@realtek.com>" #define DRIVER_AUTHOR "Realtek linux nic maintainers <nic_swsd@realtek.com>"
...@@ -501,6 +501,8 @@ enum rtl_register_content { ...@@ -501,6 +501,8 @@ enum rtl_register_content {
#define RTL8153_RMS RTL8153_MAX_PACKET #define RTL8153_RMS RTL8153_MAX_PACKET
#define RTL8152_TX_TIMEOUT (5 * HZ) #define RTL8152_TX_TIMEOUT (5 * HZ)
#define RTL8152_NAPI_WEIGHT 64 #define RTL8152_NAPI_WEIGHT 64
#define rx_reserved_size(x) ((x) + VLAN_ETH_HLEN + CRC_SIZE + \
sizeof(struct rx_desc) + RX_ALIGN)
/* rtl8152 flags */ /* rtl8152 flags */
enum rtl8152_flags { enum rtl8152_flags {
...@@ -2253,8 +2255,7 @@ static void r8153_set_rx_early_timeout(struct r8152 *tp) ...@@ -2253,8 +2255,7 @@ static void r8153_set_rx_early_timeout(struct r8152 *tp)
static void r8153_set_rx_early_size(struct r8152 *tp) static void r8153_set_rx_early_size(struct r8152 *tp)
{ {
u32 mtu = tp->netdev->mtu; u32 ocp_data = (agg_buf_sz - rx_reserved_size(tp->netdev->mtu)) / 4;
u32 ocp_data = (agg_buf_sz - mtu - VLAN_ETH_HLEN - VLAN_HLEN) / 8;
ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE, ocp_data); ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE, ocp_data);
} }
...@@ -2899,7 +2900,8 @@ static void r8153_first_init(struct r8152 *tp) ...@@ -2899,7 +2900,8 @@ static void r8153_first_init(struct r8152 *tp)
rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX);
ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8153_RMS); ocp_data = tp->netdev->mtu + VLAN_ETH_HLEN + CRC_SIZE;
ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, ocp_data);
ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, MTPS_JUMBO); ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, MTPS_JUMBO);
ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0); ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0);
...@@ -2951,7 +2953,8 @@ static void r8153_enter_oob(struct r8152 *tp) ...@@ -2951,7 +2953,8 @@ static void r8153_enter_oob(struct r8152 *tp)
usleep_range(1000, 2000); usleep_range(1000, 2000);
} }
ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8153_RMS); ocp_data = tp->netdev->mtu + VLAN_ETH_HLEN + CRC_SIZE;
ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, ocp_data);
ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG); ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG);
ocp_data &= ~TEREDO_WAKE_MASK; ocp_data &= ~TEREDO_WAKE_MASK;
...@@ -4201,8 +4204,14 @@ static int rtl8152_change_mtu(struct net_device *dev, int new_mtu) ...@@ -4201,8 +4204,14 @@ static int rtl8152_change_mtu(struct net_device *dev, int new_mtu)
dev->mtu = new_mtu; dev->mtu = new_mtu;
if (netif_running(dev) && netif_carrier_ok(dev)) if (netif_running(dev)) {
r8153_set_rx_early_size(tp); u32 rms = new_mtu + VLAN_ETH_HLEN + CRC_SIZE;
ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, rms);
if (netif_carrier_ok(dev))
r8153_set_rx_early_size(tp);
}
mutex_unlock(&tp->control); mutex_unlock(&tp->control);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment