Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: drivers/net/usb/r8152.c net/netfilter/nfnetlink.c Both r8152 and nfnetlink conflicts were simple overlapping changes. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -26,7 +26,7 @@
|
||||
#include <linux/mdio.h>
|
||||
|
||||
/* Version Information */
|
||||
#define DRIVER_VERSION "v1.06.0 (2014/03/03)"
|
||||
#define DRIVER_VERSION "v1.06.1 (2014/10/01)"
|
||||
#define DRIVER_AUTHOR "Realtek linux nic maintainers <nic_swsd@realtek.com>"
|
||||
#define DRIVER_DESC "Realtek RTL8152/RTL8153 Based USB Ethernet Adapters"
|
||||
#define MODULENAME "r8152"
|
||||
@@ -1979,10 +1979,34 @@ static void rxdy_gated_en(struct r8152 *tp, bool enable)
|
||||
ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data);
|
||||
}
|
||||
|
||||
static int rtl_start_rx(struct r8152 *tp)
|
||||
{
|
||||
int i, ret = 0;
|
||||
|
||||
INIT_LIST_HEAD(&tp->rx_done);
|
||||
for (i = 0; i < RTL8152_MAX_RX; i++) {
|
||||
INIT_LIST_HEAD(&tp->rx_info[i].list);
|
||||
ret = r8152_submit_rx(tp, &tp->rx_info[i], GFP_KERNEL);
|
||||
if (ret)
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int rtl_stop_rx(struct r8152 *tp)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < RTL8152_MAX_RX; i++)
|
||||
usb_kill_urb(tp->rx_info[i].urb);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rtl_enable(struct r8152 *tp)
|
||||
{
|
||||
u32 ocp_data;
|
||||
int i, ret;
|
||||
|
||||
r8152b_reset_packet_filter(tp);
|
||||
|
||||
@@ -1992,14 +2016,7 @@ static int rtl_enable(struct r8152 *tp)
|
||||
|
||||
rxdy_gated_en(tp, false);
|
||||
|
||||
INIT_LIST_HEAD(&tp->rx_done);
|
||||
ret = 0;
|
||||
for (i = 0; i < RTL8152_MAX_RX; i++) {
|
||||
INIT_LIST_HEAD(&tp->rx_info[i].list);
|
||||
ret |= r8152_submit_rx(tp, &tp->rx_info[i], GFP_KERNEL);
|
||||
}
|
||||
|
||||
return ret;
|
||||
return rtl_start_rx(tp);
|
||||
}
|
||||
|
||||
static int rtl8152_enable(struct r8152 *tp)
|
||||
@@ -2083,8 +2100,7 @@ static void rtl_disable(struct r8152 *tp)
|
||||
usleep_range(1000, 2000);
|
||||
}
|
||||
|
||||
for (i = 0; i < RTL8152_MAX_RX; i++)
|
||||
usb_kill_urb(tp->rx_info[i].urb);
|
||||
rtl_stop_rx(tp);
|
||||
|
||||
rtl8152_nic_reset(tp);
|
||||
}
|
||||
@@ -2243,28 +2259,6 @@ static void rtl_phy_reset(struct r8152 *tp)
|
||||
}
|
||||
}
|
||||
|
||||
static void rtl_clear_bp(struct r8152 *tp)
|
||||
{
|
||||
ocp_write_dword(tp, MCU_TYPE_PLA, PLA_BP_0, 0);
|
||||
ocp_write_dword(tp, MCU_TYPE_PLA, PLA_BP_2, 0);
|
||||
ocp_write_dword(tp, MCU_TYPE_PLA, PLA_BP_4, 0);
|
||||
ocp_write_dword(tp, MCU_TYPE_PLA, PLA_BP_6, 0);
|
||||
ocp_write_dword(tp, MCU_TYPE_USB, USB_BP_0, 0);
|
||||
ocp_write_dword(tp, MCU_TYPE_USB, USB_BP_2, 0);
|
||||
ocp_write_dword(tp, MCU_TYPE_USB, USB_BP_4, 0);
|
||||
ocp_write_dword(tp, MCU_TYPE_USB, USB_BP_6, 0);
|
||||
usleep_range(3000, 6000);
|
||||
ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_BA, 0);
|
||||
ocp_write_word(tp, MCU_TYPE_USB, USB_BP_BA, 0);
|
||||
}
|
||||
|
||||
static void r8153_clear_bp(struct r8152 *tp)
|
||||
{
|
||||
ocp_write_byte(tp, MCU_TYPE_PLA, PLA_BP_EN, 0);
|
||||
ocp_write_byte(tp, MCU_TYPE_USB, USB_BP_EN, 0);
|
||||
rtl_clear_bp(tp);
|
||||
}
|
||||
|
||||
static void r8153_teredo_off(struct r8152 *tp)
|
||||
{
|
||||
u32 ocp_data;
|
||||
@@ -2307,8 +2301,6 @@ static void r8152b_hw_phy_cfg(struct r8152 *tp)
|
||||
r8152_mdio_write(tp, MII_BMCR, data);
|
||||
}
|
||||
|
||||
rtl_clear_bp(tp);
|
||||
|
||||
set_bit(PHY_RESET, &tp->flags);
|
||||
}
|
||||
|
||||
@@ -2455,8 +2447,6 @@ static void r8153_hw_phy_cfg(struct r8152 *tp)
|
||||
r8152_mdio_write(tp, MII_BMCR, data);
|
||||
}
|
||||
|
||||
r8153_clear_bp(tp);
|
||||
|
||||
if (tp->version == RTL_VER_03) {
|
||||
data = ocp_reg_read(tp, OCP_EEE_CFG);
|
||||
data &= ~CTAP_SHORT_EN;
|
||||
@@ -3181,13 +3171,14 @@ static int rtl8152_suspend(struct usb_interface *intf, pm_message_t message)
|
||||
clear_bit(WORK_ENABLE, &tp->flags);
|
||||
usb_kill_urb(tp->intr_urb);
|
||||
cancel_delayed_work_sync(&tp->schedule);
|
||||
tasklet_disable(&tp->tl);
|
||||
if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) {
|
||||
rtl_stop_rx(tp);
|
||||
rtl_runtime_suspend_enable(tp, true);
|
||||
} else {
|
||||
tasklet_disable(&tp->tl);
|
||||
tp->rtl_ops.down(tp);
|
||||
tasklet_enable(&tp->tl);
|
||||
}
|
||||
tasklet_enable(&tp->tl);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -3206,18 +3197,19 @@ static int rtl8152_resume(struct usb_interface *intf)
|
||||
if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) {
|
||||
rtl_runtime_suspend_enable(tp, false);
|
||||
clear_bit(SELECTIVE_SUSPEND, &tp->flags);
|
||||
set_bit(WORK_ENABLE, &tp->flags);
|
||||
if (tp->speed & LINK_STATUS)
|
||||
tp->rtl_ops.disable(tp);
|
||||
rtl_start_rx(tp);
|
||||
} else {
|
||||
tp->rtl_ops.up(tp);
|
||||
rtl8152_set_speed(tp, AUTONEG_ENABLE,
|
||||
tp->mii.supports_gmii ?
|
||||
SPEED_1000 : SPEED_100,
|
||||
DUPLEX_FULL);
|
||||
tp->speed = 0;
|
||||
netif_carrier_off(tp->netdev);
|
||||
set_bit(WORK_ENABLE, &tp->flags);
|
||||
}
|
||||
tp->speed = 0;
|
||||
netif_carrier_off(tp->netdev);
|
||||
set_bit(WORK_ENABLE, &tp->flags);
|
||||
usb_submit_urb(tp->intr_urb, GFP_KERNEL);
|
||||
}
|
||||
|
||||
@@ -3623,7 +3615,7 @@ static void rtl8153_unload(struct r8152 *tp)
|
||||
if (test_bit(RTL8152_UNPLUG, &tp->flags))
|
||||
return;
|
||||
|
||||
r8153_power_cut_en(tp, true);
|
||||
r8153_power_cut_en(tp, false);
|
||||
}
|
||||
|
||||
static int rtl_ops_init(struct r8152 *tp, const struct usb_device_id *id)
|
||||
@@ -3788,7 +3780,11 @@ static void rtl8152_disconnect(struct usb_interface *intf)
|
||||
|
||||
usb_set_intfdata(intf, NULL);
|
||||
if (tp) {
|
||||
set_bit(RTL8152_UNPLUG, &tp->flags);
|
||||
struct usb_device *udev = tp->udev;
|
||||
|
||||
if (udev->state == USB_STATE_NOTATTACHED)
|
||||
set_bit(RTL8152_UNPLUG, &tp->flags);
|
||||
|
||||
tasklet_kill(&tp->tl);
|
||||
unregister_netdev(tp->netdev);
|
||||
tp->rtl_ops.unload(tp);
|
||||
|
Reference in New Issue
Block a user