Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1193824 > unrolled thread
| Started by | Hayes Wang <hayeswang@realtek.com> |
|---|---|
| First post | 2015-07-28 09:40 +0200 |
| Last post | 2015-07-29 04:10 +0200 |
| Articles | 5 — 2 participants |
Back to article view | Back to linux.kernel
[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
| From | Hayes Wang <hayeswang@realtek.com> |
|---|---|
| Date | 2015-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]
| From | Hayes Wang <hayeswang@realtek.com> |
|---|---|
| Date | 2015-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]
| From | Oliver Neukum <oneukum@suse.com> |
|---|---|
| Date | 2015-07-28 11:00 +0200 |
| Subject | Re: [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]
| From | Hayes Wang <hayeswang@realtek.com> |
|---|---|
| Date | 2015-07-28 12:30 +0200 |
| Subject | RE: [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]
| From | Hayes Wang <hayeswang@realtek.com> |
|---|---|
| Date | 2015-07-29 04:10 +0200 |
| Subject | RE: [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