From b1648066b41f01057e2b802f71410bddae8dce45 Mon Sep 17 00:00:00 2001 From: hayeswang Date: Thu, 7 Jul 2016 15:09:18 +0800 Subject: [PATCH 1/3] r8152: remove rtl_phy_reset function In rtl_hw_phy_work_func_t(), the flag of PHY_RESET is set in rtl_ops.hw_phy_cfg() and cleared in rtl8152_set_speed(). Therefore, the rtl_phy_reset() is never run and is unnecessary. Signed-off-by: Hayes Wang Signed-off-by: David S. Miller --- drivers/net/usb/r8152.c | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c index b225bc27fbe2..e005ee648efe 100644 --- a/drivers/net/usb/r8152.c +++ b/drivers/net/usb/r8152.c @@ -2450,27 +2450,6 @@ static void rtl8153_runtime_enable(struct r8152 *tp, bool enable) } } -static void rtl_phy_reset(struct r8152 *tp) -{ - u16 data; - int i; - - data = r8152_mdio_read(tp, MII_BMCR); - - /* don't reset again before the previous one complete */ - if (data & BMCR_RESET) - return; - - data |= BMCR_RESET; - r8152_mdio_write(tp, MII_BMCR, data); - - for (i = 0; i < 50; i++) { - msleep(20); - if ((r8152_mdio_read(tp, MII_BMCR) & BMCR_RESET) == 0) - break; - } -} - static void r8153_teredo_off(struct r8152 *tp) { u32 ocp_data; @@ -3069,9 +3048,6 @@ static void rtl_work_func_t(struct work_struct *work) netif_carrier_ok(tp->netdev)) napi_schedule(&tp->napi); - if (test_and_clear_bit(PHY_RESET, &tp->flags)) - rtl_phy_reset(tp); - mutex_unlock(&tp->control); out1: From c79262f3f8e06e75e960ff45b48b3c12b2d6b709 Mon Sep 17 00:00:00 2001 From: hayeswang Date: Thu, 7 Jul 2016 15:09:19 +0800 Subject: [PATCH 2/3] r8152: remove a netif_carrier_off in rtl8152_open function After commit 90186af404ad ("r8152: fix lockup when runtime PM is enabled"), the autoresume wouldn't start the device before rtl8152_open() is finished. Therefore, we don't have to reset the linking status before and after autoresume. That is, one of netif_carrier_off() in rtl8152_open() could be removed. Signed-off-by: Hayes Wang Signed-off-by: David S. Miller --- drivers/net/usb/r8152.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c index e005ee648efe..f1c502026cae 100644 --- a/drivers/net/usb/r8152.c +++ b/drivers/net/usb/r8152.c @@ -3111,8 +3111,6 @@ static int rtl8152_open(struct net_device *netdev) if (res) goto out; - netif_carrier_off(netdev); - res = usb_autopm_get_interface(tp->intf); if (res < 0) { free_all_mem(tp); From c23d86ae94b5eda449e71560e9028907abc91764 Mon Sep 17 00:00:00 2001 From: hayeswang Date: Thu, 7 Jul 2016 15:09:20 +0800 Subject: [PATCH 3/3] r8152: remove cancel_delayed_work_sync in rtl8152_set_speed There is no conflict between the work_queue function and rtl8152_set_speed(), so we don't have to cancel the delayed work in rtl8152_set_speed(). Signed-off-by: Hayes Wang Signed-off-by: David S. Miller --- drivers/net/usb/r8152.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c index f1c502026cae..168a8e2e15c8 100644 --- a/drivers/net/usb/r8152.c +++ b/drivers/net/usb/r8152.c @@ -2829,7 +2829,6 @@ static int rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u16 speed, u8 duplex) u16 bmcr, anar, gbcr; int ret = 0; - cancel_delayed_work_sync(&tp->schedule); anar = r8152_mdio_read(tp, MII_ADVERTISE); anar &= ~(ADVERTISE_10HALF | ADVERTISE_10FULL | ADVERTISE_100HALF | ADVERTISE_100FULL);