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: Hayes Wang <hayeswang@realtek.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
fece13ca00
Коммит
464ec10a2d
|
@ -104,7 +104,8 @@
|
|||
#define USB_TX_AGG 0xd40a
|
||||
#define USB_RX_BUF_TH 0xd40c
|
||||
#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_TX_DMA 0xd434
|
||||
#define USB_TOLERANCE 0xd490
|
||||
|
@ -349,10 +350,10 @@
|
|||
/* USB_MISC_0 */
|
||||
#define PCUT_STATUS 0x0001
|
||||
|
||||
/* USB_RX_EARLY_AGG */
|
||||
#define EARLY_AGG_SUPPER 0x0e832981
|
||||
#define EARLY_AGG_HIGH 0x0e837a12
|
||||
#define EARLY_AGG_SLOW 0x0e83ffff
|
||||
/* USB_RX_EARLY_TIMEOUT */
|
||||
#define COALESCE_SUPER 85000U
|
||||
#define COALESCE_HIGH 250000U
|
||||
#define COALESCE_SLOW 524280U
|
||||
|
||||
/* USB_WDT11_CTRL */
|
||||
#define TIMER11_EN 0x0001
|
||||
|
@ -606,6 +607,7 @@ struct r8152 {
|
|||
u32 saved_wolopts;
|
||||
u32 msg_enable;
|
||||
u32 tx_qlen;
|
||||
u32 coalesce;
|
||||
u16 ocp_base;
|
||||
u8 *intr_buff;
|
||||
u8 version;
|
||||
|
@ -2142,28 +2144,19 @@ static int rtl8152_enable(struct r8152 *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);
|
||||
if (speed & _1000bps) {
|
||||
if (tp->udev->speed == USB_SPEED_SUPER) {
|
||||
ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH,
|
||||
RX_THR_SUPPER);
|
||||
ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_EARLY_AGG,
|
||||
EARLY_AGG_SUPPER);
|
||||
} else {
|
||||
ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH,
|
||||
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);
|
||||
}
|
||||
ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT, ocp_data);
|
||||
}
|
||||
|
||||
static void r8153_set_rx_early_size(struct r8152 *tp)
|
||||
{
|
||||
u32 mtu = tp->netdev->mtu;
|
||||
u32 ocp_data = (agg_buf_sz - mtu - VLAN_ETH_HLEN - VLAN_HLEN) / 4;
|
||||
|
||||
ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE, ocp_data);
|
||||
}
|
||||
|
||||
static int rtl8153_enable(struct r8152 *tp)
|
||||
|
@ -2173,7 +2166,8 @@ static int rtl8153_enable(struct r8152 *tp)
|
|||
|
||||
set_tx_qlen(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);
|
||||
}
|
||||
|
@ -3966,6 +3960,18 @@ static int rtl8152_probe(struct usb_interface *intf,
|
|||
tp->mii.reg_num_mask = 0x1f;
|
||||
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;
|
||||
|
||||
tp->rtl_ops.init(tp);
|
||||
|
|
Загрузка…
Ссылка в новой задаче