Commit 464ec10a authored by hayeswang's avatar hayeswang Committed by David S. Miller

r8152: separate USB_RX_EARLY_AGG

Separate USB_RX_EARLY_AGG into USB_RX_EARLY_TIMEOUT and USB_RX_EARLY_SIZE.

Replace r8153_set_rx_agg() with r8153_set_rx_early_timeout() and
r8153_set_rx_early_size().

Set the default timeout value according to the USB speed.
Signed-off-by: default avatarHayes Wang <hayeswang@realtek.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent fece13ca
...@@ -104,7 +104,8 @@ ...@@ -104,7 +104,8 @@
#define USB_TX_AGG 0xd40a #define USB_TX_AGG 0xd40a
#define USB_RX_BUF_TH 0xd40c #define USB_RX_BUF_TH 0xd40c
#define USB_USB_TIMER 0xd428 #define USB_USB_TIMER 0xd428
#define USB_RX_EARLY_AGG 0xd42c #define USB_RX_EARLY_TIMEOUT 0xd42c
#define USB_RX_EARLY_SIZE 0xd42e
#define USB_PM_CTRL_STATUS 0xd432 #define USB_PM_CTRL_STATUS 0xd432
#define USB_TX_DMA 0xd434 #define USB_TX_DMA 0xd434
#define USB_TOLERANCE 0xd490 #define USB_TOLERANCE 0xd490
...@@ -349,10 +350,10 @@ ...@@ -349,10 +350,10 @@
/* USB_MISC_0 */ /* USB_MISC_0 */
#define PCUT_STATUS 0x0001 #define PCUT_STATUS 0x0001
/* USB_RX_EARLY_AGG */ /* USB_RX_EARLY_TIMEOUT */
#define EARLY_AGG_SUPPER 0x0e832981 #define COALESCE_SUPER 85000U
#define EARLY_AGG_HIGH 0x0e837a12 #define COALESCE_HIGH 250000U
#define EARLY_AGG_SLOW 0x0e83ffff #define COALESCE_SLOW 524280U
/* USB_WDT11_CTRL */ /* USB_WDT11_CTRL */
#define TIMER11_EN 0x0001 #define TIMER11_EN 0x0001
...@@ -606,6 +607,7 @@ struct r8152 { ...@@ -606,6 +607,7 @@ struct r8152 {
u32 saved_wolopts; u32 saved_wolopts;
u32 msg_enable; u32 msg_enable;
u32 tx_qlen; u32 tx_qlen;
u32 coalesce;
u16 ocp_base; u16 ocp_base;
u8 *intr_buff; u8 *intr_buff;
u8 version; u8 version;
...@@ -2142,28 +2144,19 @@ static int rtl8152_enable(struct r8152 *tp) ...@@ -2142,28 +2144,19 @@ static int rtl8152_enable(struct r8152 *tp)
return rtl_enable(tp); return rtl_enable(tp);
} }
static void r8153_set_rx_agg(struct r8152 *tp) static void r8153_set_rx_early_timeout(struct r8152 *tp)
{ {
u8 speed; u32 ocp_data = tp->coalesce / 8;
speed = rtl8152_get_speed(tp); ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT, ocp_data);
if (speed & _1000bps) { }
if (tp->udev->speed == USB_SPEED_SUPER) {
ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, static void r8153_set_rx_early_size(struct r8152 *tp)
RX_THR_SUPPER); {
ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_EARLY_AGG, u32 mtu = tp->netdev->mtu;
EARLY_AGG_SUPPER); u32 ocp_data = (agg_buf_sz - mtu - VLAN_ETH_HLEN - VLAN_HLEN) / 4;
} else {
ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE, ocp_data);
RX_THR_HIGH);
ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_EARLY_AGG,
EARLY_AGG_HIGH);
}
} else {
ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_SLOW);
ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_EARLY_AGG,
EARLY_AGG_SLOW);
}
} }
static int rtl8153_enable(struct r8152 *tp) static int rtl8153_enable(struct r8152 *tp)
...@@ -2173,7 +2166,8 @@ static int rtl8153_enable(struct r8152 *tp) ...@@ -2173,7 +2166,8 @@ static int rtl8153_enable(struct r8152 *tp)
set_tx_qlen(tp); set_tx_qlen(tp);
rtl_set_eee_plus(tp); rtl_set_eee_plus(tp);
r8153_set_rx_agg(tp); r8153_set_rx_early_timeout(tp);
r8153_set_rx_early_size(tp);
return rtl_enable(tp); return rtl_enable(tp);
} }
...@@ -3966,6 +3960,18 @@ static int rtl8152_probe(struct usb_interface *intf, ...@@ -3966,6 +3960,18 @@ static int rtl8152_probe(struct usb_interface *intf,
tp->mii.reg_num_mask = 0x1f; tp->mii.reg_num_mask = 0x1f;
tp->mii.phy_id = R8152_PHY_ID; tp->mii.phy_id = R8152_PHY_ID;
switch (udev->speed) {
case USB_SPEED_SUPER:
tp->coalesce = COALESCE_SUPER;
break;
case USB_SPEED_HIGH:
tp->coalesce = COALESCE_HIGH;
break;
default:
tp->coalesce = COALESCE_SLOW;
break;
}
intf->needs_remote_wakeup = 1; intf->needs_remote_wakeup = 1;
tp->rtl_ops.init(tp); tp->rtl_ops.init(tp);
......
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