From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Google-Smtp-Source: AG47ELuTNgxouB0rW9HGNwMwXxYx+SwE8f3e1Zzv7N8ahIvBC+JNuOZqHBTVN0uTdiUJZg/TJQDI ARC-Seal: i=1; a=rsa-sha256; t=1521541066; cv=none; d=google.com; s=arc-20160816; b=pT/anwISch/6+/i6AnfbyE72Cj2r6vx+482FH8OM/NZfU3zQB92h3ZAB8mKX1imhMd aflUuG4J5/ym0LpWSilkw1MbyMQtCtqL/Fw7GNoOzF4UdlwelUc9eal226AGNdpqO19B k1Qxo0VuZ1rBB9jbV3Ge61wCxFhggGO6Ey2Ui4qxfWIPT8W146nDRJAnIpQhUjQ6Be5J d4ToBlWNdzkpAaW4tXrbcyiLohZKbpS9eMhaBRKEKDCZsp4UbzyLnEMHXhEA4ew87UXl cSf9YlVo2r4shWonSPDrRaJMr+KMjbVNqlG6N5S96UkSPvWsG0ASGEJ/vBIf1BCRhQer tl/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=message-id:date:subject:cc:to:from:arc-authentication-results; bh=k4fqDmPnG0M/4+OL0GA0fJMzQig/KgOeMOsDIowxG/8=; b=zQsvEYlHmrBbRJ2Nt6niCePade4p3JZ70/7Q/k3ZwJhDBRDsytvNFoRq+LDjk7witc f/2Ij3ywI6uYekpGnY5nEDPZaVInK5RPqTs0Cebmn+m7nQcMOcmjZWNTO26XilOzrfHH g9DXHxcSH8aiqwwBQjtsKL+/okt0xDyzcVokaJ7cxdFYFy5GpSbbs9GV/l9KaqbbKE45 Tg3nx4uHXBT7FeNZSgVuwN+T63jzWuk2FjKgX2lrTaTr9QA6QI9J3QHYGQ1bUTjJ7H+F oPytIzfMNXOJbWw0Dot43RZi5pQz6V/9TdCIyWeagOCYvUDBFrfmWXPKvJg05kIbXjrU 8zvw== ARC-Authentication-Results: i=1; mx.google.com; spf=neutral (google.com: 109.237.142.238 is neither permitted nor denied by best guess record for domain of dev@g0hl1n.net) smtp.mailfrom=dev@g0hl1n.net Authentication-Results: mx.google.com; spf=neutral (google.com: 109.237.142.238 is neither permitted nor denied by best guess record for domain of dev@g0hl1n.net) smtp.mailfrom=dev@g0hl1n.net X-Spam-DCC: : From: Richard Leitner To: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org Cc: gregkh@linuxfoundation.org, stern@rowland.harvard.edu, linux@roeck-us.net, mathias.nyman@linux.intel.com, johan@kernel.org, felipe.balbi@linux.intel.com, ekorenevsky@gmail.com, peter.chen@nxp.com, drake@endlessm.com, joe@perches.com, Richard Leitner Subject: [PATCH v4] usb: core: introduce per-port over-current counters Date: Tue, 20 Mar 2018 11:17:13 +0100 Message-Id: <20180320101713.5650-1-dev@g0hl1n.net> X-Mailer: git-send-email 2.11.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: =?utf-8?q?1595451444613956744?= X-GMAIL-MSGID: =?utf-8?q?1595451444613956744?= X-Mailing-List: linux-kernel@vger.kernel.org List-ID: From: Richard Leitner For some userspace applications information on the number of over-current conditions at specific USB hub ports is relevant. In our case we have a series of USB hardware (using the cp210x driver) which communicates using a proprietary protocol. These devices sometimes trigger an over-current situation on some hubs. In case of such an over-current situation the USB devices offer an interface for reducing the max used power. As these conditions are quite rare and imply performance reductions of the device we don't want to reduce the max power always. Therefore give user-space applications the possibility to react adequately by introducing an over_current_counter in the usb port struct which is exported via sysfs. Signed-off-by: Richard Leitner --- Changes v4: - reintroduce forgotten Changelog Changes v3: - Improve sysfs file description as recommended by greg k-h Changes v2: - rename oc_count to over_current_count - add entry to Documentation/ABI - add detailled description to commit message --- Documentation/ABI/testing/sysfs-bus-usb | 10 ++++++++++ drivers/usb/core/hub.c | 4 +++- drivers/usb/core/hub.h | 1 + drivers/usb/core/port.c | 10 ++++++++++ 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/Documentation/ABI/testing/sysfs-bus-usb b/Documentation/ABI/testing/sysfs-bus-usb index 0bd731cbb50c..c702c78f24d8 100644 --- a/Documentation/ABI/testing/sysfs-bus-usb +++ b/Documentation/ABI/testing/sysfs-bus-usb @@ -189,6 +189,16 @@ Description: The file will read "hotplug", "wired" and "not used" if the information is available, and "unknown" otherwise. +What: /sys/bus/usb/devices/.../(hub interface)/portX/over_current_count +Date: February 2018 +Contact: Richard Leitner +Description: + Most hubs are able to detect over-current situations on their + ports and report them to the kernel. This attribute is to expose + the number of over-current situation occurred on a specific port + to user space. This file will contain an unsigned 32 bit value + which wraps to 0 after its maximum is reached. + What: /sys/bus/usb/devices/.../(hub interface)/portX/usb3_lpm_permit Date: November 2015 Contact: Lu Baolu diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index c5c1f6cf3228..6f779b518e75 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -5104,8 +5104,10 @@ static void port_event(struct usb_hub *hub, int port1) if (portchange & USB_PORT_STAT_C_OVERCURRENT) { u16 status = 0, unused; + port_dev->over_current_count++; - dev_dbg(&port_dev->dev, "over-current change\n"); + dev_dbg(&port_dev->dev, "over-current change #%u\n", + port_dev->over_current_count); usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_C_OVER_CURRENT); msleep(100); /* Cool down */ diff --git a/drivers/usb/core/hub.h b/drivers/usb/core/hub.h index 2a700ccc868c..78d7f4dad618 100644 --- a/drivers/usb/core/hub.h +++ b/drivers/usb/core/hub.h @@ -100,6 +100,7 @@ struct usb_port { unsigned int is_superspeed:1; unsigned int usb3_lpm_u1_permit:1; unsigned int usb3_lpm_u2_permit:1; + u32 over_current_count; }; #define to_usb_port(_dev) \ diff --git a/drivers/usb/core/port.c b/drivers/usb/core/port.c index 1a01e9ad3804..6979bde87d31 100644 --- a/drivers/usb/core/port.c +++ b/drivers/usb/core/port.c @@ -41,6 +41,15 @@ static ssize_t connect_type_show(struct device *dev, } static DEVICE_ATTR_RO(connect_type); +static ssize_t over_current_count_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct usb_port *port_dev = to_usb_port(dev); + + return sprintf(buf, "%u\n", port_dev->over_current_count); +} +static DEVICE_ATTR_RO(over_current_count); + static ssize_t usb3_lpm_permit_show(struct device *dev, struct device_attribute *attr, char *buf) { @@ -109,6 +118,7 @@ static DEVICE_ATTR_RW(usb3_lpm_permit); static struct attribute *port_dev_attrs[] = { &dev_attr_connect_type.attr, + &dev_attr_over_current_count.attr, NULL, }; -- 2.11.0 From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v4] usb: core: introduce per-port over-current counters From: Richard Leitner Message-Id: <20180320101713.5650-1-dev@g0hl1n.net> Date: Tue, 20 Mar 2018 11:17:13 +0100 To: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org Cc: gregkh@linuxfoundation.org, stern@rowland.harvard.edu, linux@roeck-us.net, mathias.nyman@linux.intel.com, johan@kernel.org, felipe.balbi@linux.intel.com, ekorenevsky@gmail.com, peter.chen@nxp.com, drake@endlessm.com, joe@perches.com, Richard Leitner List-ID: RnJvbTogUmljaGFyZCBMZWl0bmVyIDxyaWNoYXJkLmxlaXRuZXJAc2tpZGF0YS5jb20+CgpGb3Ig c29tZSB1c2Vyc3BhY2UgYXBwbGljYXRpb25zIGluZm9ybWF0aW9uIG9uIHRoZSBudW1iZXIgb2YK b3Zlci1jdXJyZW50IGNvbmRpdGlvbnMgYXQgc3BlY2lmaWMgVVNCIGh1YiBwb3J0cyBpcyByZWxl dmFudC4KCkluIG91ciBjYXNlIHdlIGhhdmUgYSBzZXJpZXMgb2YgVVNCIGhhcmR3YXJlICh1c2lu ZyB0aGUgY3AyMTB4IGRyaXZlcikKd2hpY2ggY29tbXVuaWNhdGVzIHVzaW5nIGEgcHJvcHJpZXRh cnkgcHJvdG9jb2wuIFRoZXNlIGRldmljZXMgc29tZXRpbWVzCnRyaWdnZXIgYW4gb3Zlci1jdXJy ZW50IHNpdHVhdGlvbiBvbiBzb21lIGh1YnMuIEluIGNhc2Ugb2Ygc3VjaCBhbgpvdmVyLWN1cnJl bnQgc2l0dWF0aW9uIHRoZSBVU0IgZGV2aWNlcyBvZmZlciBhbiBpbnRlcmZhY2UgZm9yIHJlZHVj aW5nCnRoZSBtYXggdXNlZCBwb3dlci4gQXMgdGhlc2UgY29uZGl0aW9ucyBhcmUgcXVpdGUgcmFy ZSBhbmQgaW1wbHkKcGVyZm9ybWFuY2UgcmVkdWN0aW9ucyBvZiB0aGUgZGV2aWNlIHdlIGRvbid0 IHdhbnQgdG8gcmVkdWNlIHRoZSBtYXgKcG93ZXIgYWx3YXlzLgoKVGhlcmVmb3JlIGdpdmUgdXNl ci1zcGFjZSBhcHBsaWNhdGlvbnMgdGhlIHBvc3NpYmlsaXR5IHRvIHJlYWN0CmFkZXF1YXRlbHkg YnkgaW50cm9kdWNpbmcgYW4gb3Zlcl9jdXJyZW50X2NvdW50ZXIgaW4gdGhlIHVzYiBwb3J0IHN0 cnVjdAp3aGljaCBpcyBleHBvcnRlZCB2aWEgc3lzZnMuCgpTaWduZWQtb2ZmLWJ5OiBSaWNoYXJk IExlaXRuZXIgPHJpY2hhcmQubGVpdG5lckBza2lkYXRhLmNvbT4KLS0tCkNoYW5nZXMgdjQ6Cgkt IHJlaW50cm9kdWNlIGZvcmdvdHRlbiBDaGFuZ2Vsb2cKQ2hhbmdlcyB2MzoKCS0gSW1wcm92ZSBz eXNmcyBmaWxlIGRlc2NyaXB0aW9uIGFzIHJlY29tbWVuZGVkIGJ5IGdyZWcgay1oCkNoYW5nZXMg djI6CgktIHJlbmFtZSBvY19jb3VudCB0byBvdmVyX2N1cnJlbnRfY291bnQKCS0gYWRkIGVudHJ5 IHRvIERvY3VtZW50YXRpb24vQUJJCgktIGFkZCBkZXRhaWxsZWQgZGVzY3JpcHRpb24gdG8gY29t bWl0IG1lc3NhZ2UKLS0tCiBEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy11c2Ig fCAxMCArKysrKysrKysrCiBkcml2ZXJzL3VzYi9jb3JlL2h1Yi5jICAgICAgICAgICAgICAgICAg fCAgNCArKystCiBkcml2ZXJzL3VzYi9jb3JlL2h1Yi5oICAgICAgICAgICAgICAgICAgfCAgMSAr CiBkcml2ZXJzL3VzYi9jb3JlL3BvcnQuYyAgICAgICAgICAgICAgICAgfCAxMCArKysrKysrKysr CiA0IGZpbGVzIGNoYW5nZWQsIDI0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYg LS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy11c2IgYi9Eb2N1bWVu dGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy11c2IKaW5kZXggMGJkNzMxY2JiNTBjLi5jNzAy Yzc4ZjI0ZDggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVz LXVzYgorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy11c2IKQEAgLTE4 OSw2ICsxODksMTYgQEAgRGVzY3JpcHRpb246CiAJCVRoZSBmaWxlIHdpbGwgcmVhZCAiaG90cGx1 ZyIsICJ3aXJlZCIgYW5kICJub3QgdXNlZCIgaWYgdGhlCiAJCWluZm9ybWF0aW9uIGlzIGF2YWls YWJsZSwgYW5kICJ1bmtub3duIiBvdGhlcndpc2UuCiAKK1doYXQ6CQkvc3lzL2J1cy91c2IvZGV2 aWNlcy8uLi4vKGh1YiBpbnRlcmZhY2UpL3BvcnRYL292ZXJfY3VycmVudF9jb3VudAorRGF0ZToJ CUZlYnJ1YXJ5IDIwMTgKK0NvbnRhY3Q6CVJpY2hhcmQgTGVpdG5lciA8cmljaGFyZC5sZWl0bmVy QHNraWRhdGEuY29tPgorRGVzY3JpcHRpb246CisJCU1vc3QgaHVicyBhcmUgYWJsZSB0byBkZXRl Y3Qgb3Zlci1jdXJyZW50IHNpdHVhdGlvbnMgb24gdGhlaXIKKwkJcG9ydHMgYW5kIHJlcG9ydCB0 aGVtIHRvIHRoZSBrZXJuZWwuIFRoaXMgYXR0cmlidXRlIGlzIHRvIGV4cG9zZQorCQl0aGUgbnVt YmVyIG9mIG92ZXItY3VycmVudCBzaXR1YXRpb24gb2NjdXJyZWQgb24gYSBzcGVjaWZpYyBwb3J0 CisJCXRvIHVzZXIgc3BhY2UuIFRoaXMgZmlsZSB3aWxsIGNvbnRhaW4gYW4gdW5zaWduZWQgMzIg Yml0IHZhbHVlCisJCXdoaWNoIHdyYXBzIHRvIDAgYWZ0ZXIgaXRzIG1heGltdW0gaXMgcmVhY2hl ZC4KKwogV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLy4uLi8oaHViIGludGVyZmFjZSkvcG9y dFgvdXNiM19scG1fcGVybWl0CiBEYXRlOgkJTm92ZW1iZXIgMjAxNQogQ29udGFjdDoJTHUgQmFv bHUgPGJhb2x1Lmx1QGxpbnV4LmludGVsLmNvbT4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2Nv cmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCmluZGV4IGM1YzFmNmNmMzIyOC4uNmY3 NzliNTE4ZTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZl cnMvdXNiL2NvcmUvaHViLmMKQEAgLTUxMDQsOCArNTEwNCwxMCBAQCBzdGF0aWMgdm9pZCBwb3J0 X2V2ZW50KHN0cnVjdCB1c2JfaHViICpodWIsIGludCBwb3J0MSkKIAogCWlmIChwb3J0Y2hhbmdl ICYgVVNCX1BPUlRfU1RBVF9DX09WRVJDVVJSRU5UKSB7CiAJCXUxNiBzdGF0dXMgPSAwLCB1bnVz ZWQ7CisJCXBvcnRfZGV2LT5vdmVyX2N1cnJlbnRfY291bnQrKzsKIAotCQlkZXZfZGJnKCZwb3J0 X2Rldi0+ZGV2LCAib3Zlci1jdXJyZW50IGNoYW5nZVxuIik7CisJCWRldl9kYmcoJnBvcnRfZGV2 LT5kZXYsICJvdmVyLWN1cnJlbnQgY2hhbmdlICMldVxuIiwKKwkJCXBvcnRfZGV2LT5vdmVyX2N1 cnJlbnRfY291bnQpOwogCQl1c2JfY2xlYXJfcG9ydF9mZWF0dXJlKGhkZXYsIHBvcnQxLAogCQkJ CVVTQl9QT1JUX0ZFQVRfQ19PVkVSX0NVUlJFTlQpOwogCQltc2xlZXAoMTAwKTsJLyogQ29vbCBk b3duICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5oIGIvZHJpdmVycy91c2Iv Y29yZS9odWIuaAppbmRleCAyYTcwMGNjYzg2OGMuLjc4ZDdmNGRhZDYxOCAxMDA2NDQKLS0tIGEv ZHJpdmVycy91c2IvY29yZS9odWIuaAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5oCkBAIC0x MDAsNiArMTAwLDcgQEAgc3RydWN0IHVzYl9wb3J0IHsKIAl1bnNpZ25lZCBpbnQgaXNfc3VwZXJz cGVlZDoxOwogCXVuc2lnbmVkIGludCB1c2IzX2xwbV91MV9wZXJtaXQ6MTsKIAl1bnNpZ25lZCBp bnQgdXNiM19scG1fdTJfcGVybWl0OjE7CisJdW5zaWduZWQgaW50IG92ZXJfY3VycmVudF9jb3Vu dDsKIH07CiAKICNkZWZpbmUgdG9fdXNiX3BvcnQoX2RldikgXApkaWZmIC0tZ2l0IGEvZHJpdmVy cy91c2IvY29yZS9wb3J0LmMgYi9kcml2ZXJzL3VzYi9jb3JlL3BvcnQuYwppbmRleCAxYTAxZTlh ZDM4MDQuLjY5NzliZGU4N2QzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9wb3J0LmMK KysrIGIvZHJpdmVycy91c2IvY29yZS9wb3J0LmMKQEAgLTQxLDYgKzQxLDE1IEBAIHN0YXRpYyBz c2l6ZV90IGNvbm5lY3RfdHlwZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIH0KIHN0YXRpYyBE RVZJQ0VfQVRUUl9STyhjb25uZWN0X3R5cGUpOwogCitzdGF0aWMgc3NpemVfdCBvdmVyX2N1cnJl bnRfY291bnRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBkZXZp Y2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9wb3J0ICpwb3J0 X2RldiA9IHRvX3VzYl9wb3J0KGRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwg cG9ydF9kZXYtPm92ZXJfY3VycmVudF9jb3VudCk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFJfUk8o b3Zlcl9jdXJyZW50X2NvdW50KTsKKwogc3RhdGljIHNzaXplX3QgdXNiM19scG1fcGVybWl0X3No b3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUg KmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTEwOSw2ICsxMTgsNyBAQCBzdGF0aWMgREVWSUNFX0FU VFJfUlcodXNiM19scG1fcGVybWl0KTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBvcnRf ZGV2X2F0dHJzW10gPSB7CiAJJmRldl9hdHRyX2Nvbm5lY3RfdHlwZS5hdHRyLAorCSZkZXZfYXR0 cl9vdmVyX2N1cnJlbnRfY291bnQuYXR0ciwKIAlOVUxMLAogfTsKIAo=