Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1193824 > unrolled thread

[PATCH net 0/2] r8152: device reset

Started byHayes Wang <hayeswang@realtek.com>
First post2015-07-28 09:40 +0200
Last post2015-07-29 04:10 +0200
Articles 5 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH net 0/2] r8152: device reset Hayes Wang <hayeswang@realtek.com> - 2015-07-28 09:40 +0200
    [PATCH net 1/2] r8152: add pre_reset and post_reset Hayes Wang <hayeswang@realtek.com> - 2015-07-28 09:40 +0200
      Re: [PATCH net 1/2] r8152: add pre_reset and post_reset Oliver Neukum <oneukum@suse.com> - 2015-07-28 11:00 +0200
        RE: [PATCH net 1/2] r8152: add pre_reset and post_reset Hayes Wang <hayeswang@realtek.com> - 2015-07-28 12:30 +0200
    RE: [PATCH net v2 2/2] r8152: reset device when tx timeout Hayes Wang <hayeswang@realtek.com> - 2015-07-29 04:10 +0200

#1193824 — [PATCH net 0/2] r8152: device reset

FromHayes Wang <hayeswang@realtek.com>
Date2015-07-28 09:40 +0200
Subject[PATCH net 0/2] r8152: device reset
Message-ID<pR7Eu-2w2-11@gated-at.bofh.it>
Although the driver works normally, we find the device may get all 0xff data when
tranmitting packets on certain platforms. It would break the device and no packet
could be transmitted. The reset is necessary to recover the hw for this situation.

Hayes Wang (2):
  r8152: add pre_reset and post_reset
  r8152: reset device when tx timeout

 drivers/net/usb/r8152.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 86 insertions(+), 4 deletions(-)

-- 
2.4.2

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [next] | [standalone]


#1193826 — [PATCH net 1/2] r8152: add pre_reset and post_reset

FromHayes Wang <hayeswang@realtek.com>
Date2015-07-28 09:40 +0200
Subject[PATCH net 1/2] r8152: add pre_reset and post_reset
Message-ID<pR7Eu-2w2-17@gated-at.bofh.it>
In reply to#1193824
Add rtl8152_pre_reset() and rtl8152_post_reset() which are used when
calling usb_reset_device(). The two functions could reduce the time
of reset when calling usb_reset_device() after probe().

Signed-off-by: Hayes Wang <hayeswang@realtek.com>
---
 drivers/net/usb/r8152.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 68 insertions(+)

diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
index 144dc64..a6caa60 100644
--- a/drivers/net/usb/r8152.c
+++ b/drivers/net/usb/r8152.c
@@ -3342,6 +3342,72 @@ static void r8153_init(struct r8152 *tp)
 	r8153_u2p3en(tp, true);
 }
 
+static int rtl8152_pre_reset(struct usb_interface *intf)
+{
+	struct r8152 *tp = usb_get_intfdata(intf);
+	struct net_device *netdev;
+	int ret;
+
+	if (intf->condition != USB_INTERFACE_BOUND || !tp)
+		return 0;
+
+	netdev = tp->netdev;
+	if (!netif_running(netdev))
+		return 0;
+
+	ret = usb_autopm_get_interface(intf);
+	if (ret < 0)
+		return ret;
+
+	napi_disable(&tp->napi);
+	clear_bit(WORK_ENABLE, &tp->flags);
+	usb_kill_urb(tp->intr_urb);
+	cancel_delayed_work_sync(&tp->schedule);
+	if (netif_carrier_ok(netdev)) {
+		netif_stop_queue(netdev);
+		mutex_lock(&tp->control);
+		tp->rtl_ops.disable(tp);
+		mutex_unlock(&tp->control);
+	}
+
+	usb_autopm_put_interface(intf);
+
+	return 0;
+}
+
+static int rtl8152_post_reset(struct usb_interface *intf)
+{
+	struct r8152 *tp = usb_get_intfdata(intf);
+	struct net_device *netdev;
+	int ret;
+
+	if (intf->condition != USB_INTERFACE_BOUND || !tp)
+		return 0;
+
+	netdev = tp->netdev;
+	if (!netif_running(netdev))
+		return 0;
+
+	ret = usb_autopm_get_interface(intf);
+	if (ret < 0)
+		return ret;
+
+	set_bit(WORK_ENABLE, &tp->flags);
+	if (netif_carrier_ok(netdev)) {
+		mutex_lock(&tp->control);
+		tp->rtl_ops.enable(tp);
+		rtl8152_set_rx_mode(netdev);
+		mutex_unlock(&tp->control);
+		netif_wake_queue(netdev);
+	}
+
+	napi_enable(&tp->napi);
+
+	usb_autopm_put_interface(intf);
+
+	return ret;
+}
+
 static int rtl8152_suspend(struct usb_interface *intf, pm_message_t message)
 {
 	struct r8152 *tp = usb_get_intfdata(intf);
@@ -4164,6 +4230,8 @@ static struct usb_driver rtl8152_driver = {
 	.suspend =	rtl8152_suspend,
 	.resume =	rtl8152_resume,
 	.reset_resume =	rtl8152_resume,
+	.pre_reset =	rtl8152_pre_reset,
+	.post_reset =	rtl8152_post_reset,
 	.supports_autosuspend = 1,
 	.disable_hub_initiated_lpm = 1,
 };
-- 
2.4.2

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1193903 — Re: [PATCH net 1/2] r8152: add pre_reset and post_reset

FromOliver Neukum <oneukum@suse.com>
Date2015-07-28 11:00 +0200
SubjectRe: [PATCH net 1/2] r8152: add pre_reset and post_reset
Message-ID<pR8TT-4eR-7@gated-at.bofh.it>
In reply to#1193826
On Tue, 2015-07-28 at 15:36 +0800, Hayes Wang wrote:
> Add rtl8152_pre_reset() and rtl8152_post_reset() which are used when
> calling usb_reset_device(). The two functions could reduce the time
> of reset when calling usb_reset_device() after probe().
> 
> Signed-off-by: Hayes Wang <hayeswang@realtek.com>
> ---
>  drivers/net/usb/r8152.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 68 insertions(+)
> 
> diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
> index 144dc64..a6caa60 100644
> --- a/drivers/net/usb/r8152.c
> +++ b/drivers/net/usb/r8152.c
> @@ -3342,6 +3342,72 @@ static void r8153_init(struct r8152 *tp)
>  	r8153_u2p3en(tp, true);
>  }
>  
> +static int rtl8152_pre_reset(struct usb_interface *intf)
> +{
> +	struct r8152 *tp = usb_get_intfdata(intf);
> +	struct net_device *netdev;
> +	int ret;
> +
> +	if (intf->condition != USB_INTERFACE_BOUND || !tp)

If the interface weren't bound, you wouldn't be called.

> +		return 0;
> +
> +	netdev = tp->netdev;
> +	if (!netif_running(netdev))
> +		return 0;
> +
> +	ret = usb_autopm_get_interface(intf);
> +	if (ret < 0)
> +		return ret;

What sense does this make?

> +
> +	napi_disable(&tp->napi);
> +	clear_bit(WORK_ENABLE, &tp->flags);
> +	usb_kill_urb(tp->intr_urb);
> +	cancel_delayed_work_sync(&tp->schedule);
> +	if (netif_carrier_ok(netdev)) {
> +		netif_stop_queue(netdev);
> +		mutex_lock(&tp->control);
> +		tp->rtl_ops.disable(tp);
> +		mutex_unlock(&tp->control);
> +	}
> +
> +	usb_autopm_put_interface(intf);
> +
> +	return 0;
> +}
> +
> +static int rtl8152_post_reset(struct usb_interface *intf)
> +{
> +	struct r8152 *tp = usb_get_intfdata(intf);
> +	struct net_device *netdev;
> +	int ret;
> +
> +	if (intf->condition != USB_INTERFACE_BOUND || !tp)

Again unnecessary

> +		return 0;
> +
> +	netdev = tp->netdev;
> +	if (!netif_running(netdev))
> +		return 0;
> +
> +	ret = usb_autopm_get_interface(intf);

The device will be awake.

> +	if (ret < 0)
> +		return ret;
> +
> +	set_bit(WORK_ENABLE, &tp->flags);
> +	if (netif_carrier_ok(netdev)) {
> +		mutex_lock(&tp->control);
> +		tp->rtl_ops.enable(tp);
> +		rtl8152_set_rx_mode(netdev);
> +		mutex_unlock(&tp->control);
> +		netif_wake_queue(netdev);
> +	}
> +
> +	napi_enable(&tp->napi);
> +
> +	usb_autopm_put_interface(intf);
> +
> +	return ret;
> +}
> +

	HTH
		Oliver


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1194060 — RE: [PATCH net 1/2] r8152: add pre_reset and post_reset

FromHayes Wang <hayeswang@realtek.com>
Date2015-07-28 12:30 +0200
SubjectRE: [PATCH net 1/2] r8152: add pre_reset and post_reset
Message-ID<pRaiZ-6q0-11@gated-at.bofh.it>
In reply to#1193903
T2xpdmVyIE5ldWt1bSBbbWFpbHRvOm9uZXVrdW1Ac3VzZS5jb21dDQo+IFNlbnQ6IFR1ZXNkYXks
IEp1bHkgMjgsIDIwMTUgNDo1MyBQTQ0KWy4uLl0NCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArDQo+
ID4gKwluZXRkZXYgPSB0cC0+bmV0ZGV2Ow0KPiA+ICsJaWYgKCFuZXRpZl9ydW5uaW5nKG5ldGRl
dikpDQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsJcmV0ID0gdXNiX2F1dG9wbV9nZXRf
aW50ZXJmYWNlKGludGYpOw0KPiA+ICsJaWYgKHJldCA8IDApDQo+ID4gKwkJcmV0dXJuIHJldDsN
Cj4gDQo+IFdoYXQgc2Vuc2UgZG9lcyB0aGlzIG1ha2U/DQo+IA0KWy4uLl0NCj4gPiArCQlyZXR1
cm4gMDsNCj4gPiArDQo+ID4gKwluZXRkZXYgPSB0cC0+bmV0ZGV2Ow0KPiA+ICsJaWYgKCFuZXRp
Zl9ydW5uaW5nKG5ldGRldikpDQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsJcmV0ID0g
dXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGludGYpOw0KPiANCj4gVGhlIGRldmljZSB3aWxsIGJl
IGF3YWtlLg0KDQpJIGRvbid0IHN1cmUgaWYgdGhlIGRldmljZSB3b3VsZCBiZSBpbiBydW50aW1l
c3VzcGVuZCwgc28gSSB3YWtlIGl0IHVwIGJ5IG15c2VsZi4NCkkgdGhpbmsgeW91IG1lYW4gSSBk
b24ndCBoYXZlIHRvIGRvIHRoaXMuIEkgd291bGQgcmVtb3ZlIHRoZW0gYW5kIHJlc2VuZCB0aGUN
CnBhdGNoLiBUaGFua3MuDQoNCkJlc3QgUmVnYXJkcywNCkhheWVzDQoNCg==
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1194772 — RE: [PATCH net v2 2/2] r8152: reset device when tx timeout

FromHayes Wang <hayeswang@realtek.com>
Date2015-07-29 04:10 +0200
SubjectRE: [PATCH net v2 2/2] r8152: reset device when tx timeout
Message-ID<pRoYF-2B2-7@gated-at.bofh.it>
In reply to#1193824
IE9saXZlciBOZXVrdW0gW21haWx0bzpvbmV1a3VtQHN1c2UuY29tXQ0KPiBTZW50OiBUdWVzZGF5
LCBKdWx5IDI4LCAyMDE1IDg6NTkgUE0NClsuLi5dDQo+ID4gPiA+ICBzdGF0aWMgdm9pZCBydGw4
MTUyX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikgIHsNCj4gPiA+ID4gICAg
ICAgICBzdHJ1Y3QgcjgxNTIgKnRwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsNCj4gPiA+ID4gLSAg
ICAgICBpbnQgaTsNCj4gPiA+ID4NCj4gPiA+ID4gICAgICAgICBuZXRpZl93YXJuKHRwLCB0eF9l
cnIsIG5ldGRldiwgIlR4IHRpbWVvdXRcbiIpOw0KPiA+ID4gPiAtICAgICAgIGZvciAoaSA9IDA7
IGkgPCBSVEw4MTUyX01BWF9UWDsgaSsrKQ0KPiA+ID4gPiAtICAgICAgICAgICAgICAgdXNiX3Vu
bGlua191cmIodHAtPnR4X2luZm9baV0udXJiKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICAg
IHVzYl9xdWV1ZV9yZXNldF9kZXZpY2UodHAtPmludGYpOw0KPiA+ID4gPiArICAgICAgIGNhbmNl
bF9kZWxheWVkX3dvcmsoJnRwLT5zY2hlZHVsZSk7DQo+ID4gPg0KPiA+ID4gU29ycnkgdG8gYm90
aGVyIHlvdSBhZ2FpbiwgYnV0IHRoaXMgbG9va3Mgd3JvbmcuDQo+ID4gPiBZb3Ugd2FudCB0byBj
YW5jZWwgZmlyc3QuIFRoZXJlIGlzIG5vIHBvaW50IGluIHJ1bm5pbmcgYW55IHdvcmsNCj4gPiA+
IGJlZm9yZSB0aGUgcmVzZXQgaXMgZG9uZS4gSXQgd2lsbCB1bmRvIGFueSBwcm9ncmVzcyBhbnl3
YXkuDQo+ID4NCj4gPiBFeGN1c2UgbWUuIERvIHlvdSBtZWFuIEkgZG9uJ3QgbmVlZCBjYW5jZWwg
dGhlIG90aGVyIHdvcmsgYmVjYXVzZSBpdA0KPiA+IHdvdWxkbid0IGJlIHJ1biBiZWZvcmUgdGhl
IHJlc2V0IGlzIGZpbmlzaGVkPw0KPiANCj4gTm8sIHdoYXRldmVyIHRoZSBvdGhlciB3b3JrIHdp
bGwgZG8sIHRoZSByZXNldCB3aWxsIHVuZG8uDQoNCkV4Y3VzZSBtZS4gSSBkb24ndCB1bmRlcnN0
YW5kIHdoeSBJIGNvdWxkbid0IHVzZSB1c2JfcXVldWVfcmVzZXRfZGV2aWNlKCkgZGlyZWN0bHku
DQpXaHkgdGhlIHJlc2V0IHdpbGwgdW5kbz8gDQoNCkJlc3QgUmVnYXJkcywNCkhheWVzDQoNCg==
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web