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: [2/2] usb: host: xhci-plat: Fix clock resource by adding a register clock From: Gregory CLEMENT Message-Id: <20180214161620.4401-3-gregory.clement@bootlin.com> Date: Wed, 14 Feb 2018 17:16:20 +0100 To: Greg Kroah-Hartman , Mathias Nyman , linux-usb@vger.kernel.org Cc: Jason Cooper , Andrew Lunn , Sebastian Hesselbarth , Gregory CLEMENT , Thomas Petazzoni , linux-arm-kernel@lists.infradead.org, Antoine Tenart , =?UTF-8?q?Miqu=C3=A8l=20Raynal?= , Nadav Haklai , Shadi Ammouri , Omri Itach , Hanna Hawa , Igal Liberman , Marcin Wojtas List-ID: T24gQXJtYWRhIDdLLzhLIHdlIG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgdGhlIHJlZ2lzdGVy IGNsb2NrLiBUaGlzCmNsb2NrIGlzIG9wdGlvbmFsIGJlY2F1c2Ugbm90IGFsbCB0aGUgU29DcyB1 c2luZyB0aGlzIElQIG5lZWQgaXQgYnV0IGF0CmxlYXN0IGZvciBBcm1hZGEgN0svOEsgaXQgaXMg YWN0dWFsbHkgbWFuZGF0b3J5LgoKVGhlIGNoYW5nZSB3YXMgZG9uZSBhdCB4aGNpLXBsYXQgbGV2 ZWwgYW5kIG5vdCBhdCBhIHhoY2ktbXZlYnUuYyBiZWNhdXNlLAppdCBpcyBleHBlY3RlZCB0aGF0 IG90aGVyIFNvQyB3b3VsZCBoYXZlIHRoaXMga2luZCBvZiBjb25zdHJhaW50LgoKVGhlIGJpbmRp bmcgZG9jdW1lbnRhdGlvbiBpcyB1cGRhdGluZyBhY2NvcmRpbmdseS4KClNpZ25lZC1vZmYtYnk6 IEdyZWdvcnkgQ0xFTUVOVCA8Z3JlZ29yeS5jbGVtZW50QGJvb3RsaW4uY29tPgotLS0KIERvY3Vt ZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy91c2IvdXNiLXhoY2kudHh0IHwgIDUgKysrLQog ZHJpdmVycy91c2IvaG9zdC94aGNpLXBsYXQuYyAgICAgICAgICAgICAgICAgICAgICAgfCAzMyAr KysrKysrKysrKysrKysrKystLS0tCiBkcml2ZXJzL3VzYi9ob3N0L3hoY2kuaCAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAzICstCiAzIGZpbGVzIGNoYW5nZWQsIDMzIGluc2VydGlvbnMo KyksIDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVl L2JpbmRpbmdzL3VzYi91c2IteGhjaS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmlu ZGluZ3MvdXNiL3VzYi14aGNpLnR4dAppbmRleCBlMmVhNTliYmNhOTMuLmU0YjE0NTExZjRmOCAx MDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3VzYi91c2IteGhj aS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3VzYi91c2IteGhj aS50eHQKQEAgLTI3LDcgKzI3LDEwIEBAIFJlcXVpcmVkIHByb3BlcnRpZXM6CiAgIC0gaW50ZXJy dXB0czogb25lIFhIQ0kgaW50ZXJydXB0IHNob3VsZCBiZSBkZXNjcmliZWQgaGVyZS4KIAogT3B0 aW9uYWwgcHJvcGVydGllczoKLSAgLSBjbG9ja3M6IHJlZmVyZW5jZSB0byBhIGNsb2NrCisgIC0g Y2xvY2tzOiByZWZlcmVuY2UgdG8gdGhlIGNsb2NrcworICAtIGNsb2NrLW5hbWVzOiBtYW5kYXRv cnkgaWYgdGhlcmUgaXMgYSBzZWNvbmQgY2xvY2ssIGluIHRoaXMgY2FzZQorICAgIHRoZSBuYW1l IG11c3QgYmUgImNvcmUiIGZvciB0aGUgZmlyc3QgY2xvY2sgYW5kICJyZWciIGZvciB0aGUKKyAg ICBzZWNvbmQgb25lCiAgIC0gdXNiMi1scG0tZGlzYWJsZTogaW5kaWNhdGUgaWYgd2UgZG9uJ3Qg d2FudCB0byBlbmFibGUgVVNCMiBIVyBMUE0KICAgLSB1c2IzLWxwbS1jYXBhYmxlOiBkZXRlcm1p bmVzIGlmIHBsYXRmb3JtIGlzIFVTQjMgTFBNIGNhcGFibGUKICAgLSBxdWlyay1icm9rZW4tcG9y dC1wZWQ6IHNldCBpZiB0aGUgY29udHJvbGxlciBoYXMgYnJva2VuIHBvcnQgZGlzYWJsZSBtZWNo YW5pc20KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wbGF0LmMgYi9kcml2ZXJz L3VzYi9ob3N0L3hoY2ktcGxhdC5jCmluZGV4IDc5YWZhYWM1N2VmNi4uZmQwYzM5OTAxM2EyIDEw MDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGxhdC5jCisrKyBiL2RyaXZlcnMvdXNi L2hvc3QveGhjaS1wbGF0LmMKQEAgLTE1Nyw2ICsxNTcsNyBAQCBzdGF0aWMgaW50IHhoY2lfcGxh dF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCXN0cnVjdCByZXNvdXJjZSAg ICAgICAgICpyZXM7CiAJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CiAJc3RydWN0IGNsayAgICAgICAg ICAgICAgKmNsazsKKwlzdHJ1Y3QgY2xrICAgICAgICAgICAgICAqcmVnX2NsazsKIAlpbnQJCQly ZXQ7CiAJaW50CQkJaXJxOwogCkBAIC0yMjYsMTcgKzIyNywyNyBAQCBzdGF0aWMgaW50IHhoY2lf cGxhdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCWhjZC0+cnNyY19sZW4g PSByZXNvdXJjZV9zaXplKHJlcyk7CiAKIAkvKgotCSAqIE5vdCBhbGwgcGxhdGZvcm1zIGhhdmUg YSBjbGsgc28gaXQgaXMgbm90IGFuIGVycm9yIGlmIHRoZQotCSAqIGNsb2NrIGRvZXMgbm90IGV4 aXN0cy4KKwkgKiBOb3QgYWxsIHBsYXRmb3JtcyBoYXZlIGNsa3Mgc28gaXQgaXMgbm90IGFuIGVy cm9yIGlmIHRoZQorCSAqIGNsb2NrIGRvIG5vdCBleGlzdC4KIAkgKi8KKwlyZWdfY2xrID0gZGV2 bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJyZWciKTsKKwlpZiAoIUlTX0VSUihyZWdfY2xrKSkgewor CQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocmVnX2Nsayk7CisJCWlmIChyZXQpCisJCQlnb3Rv IHB1dF9oY2Q7CisJfSBlbHNlIGlmIChQVFJfRVJSKHJlZ19jbGspID09IC1FUFJPQkVfREVGRVIp IHsKKwkJcmV0ID0gLUVQUk9CRV9ERUZFUjsKKwkJZ290byBwdXRfaGNkOworCX0KKwogCWNsayA9 IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKIAlpZiAoIUlTX0VSUihjbGspKSB7CiAJ CXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShjbGspOwogCQlpZiAocmV0KQotCQkJZ290byBwdXRf aGNkOworCQkJZ290byBkaXNhYmxlX3JlZ19jbGs7CiAJfSBlbHNlIGlmIChQVFJfRVJSKGNsaykg PT0gLUVQUk9CRV9ERUZFUikgewogCQlyZXQgPSAtRVBST0JFX0RFRkVSOwotCQlnb3RvIHB1dF9o Y2Q7CisJCWdvdG8gZGlzYWJsZV9yZWdfY2xrOwogCX0KIAogCXhoY2kgPSBoY2RfdG9feGhjaSho Y2QpOwpAQCAtMjUyLDYgKzI2Myw3IEBAIHN0YXRpYyBpbnQgeGhjaV9wbGF0X3Byb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJZGV2aWNlX3dha2V1cF9lbmFibGUoaGNkLT5zZWxm LmNvbnRyb2xsZXIpOwogCiAJeGhjaS0+Y2xrID0gY2xrOworCXhoY2ktPnJlZ19jbGsgPSByZWdf Y2xrOwogCXhoY2ktPm1haW5faGNkID0gaGNkOwogCXhoY2ktPnNoYXJlZF9oY2QgPSBfX3VzYl9j cmVhdGVfaGNkKGRyaXZlciwgc3lzZGV2LCAmcGRldi0+ZGV2LAogCQkJZGV2X25hbWUoJnBkZXYt PmRldiksIGhjZCk7CkBAIC0zMjEsNiArMzMzLDkgQEAgc3RhdGljIGludCB4aGNpX3BsYXRfcHJv YmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIGRpc2FibGVfY2xrOgogCWNsa19kaXNh YmxlX3VucHJlcGFyZShjbGspOwogCitkaXNhYmxlX3JlZ19jbGs6CisJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKHJlZ19jbGspOworCiBwdXRfaGNkOgogCXVzYl9wdXRfaGNkKGhjZCk7CiAKQEAgLTMz Niw2ICszNTEsNyBAQCBzdGF0aWMgaW50IHhoY2lfcGxhdF9yZW1vdmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqZGV2KQogCXN0cnVjdCB1c2JfaGNkCSpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0 YShkZXYpOwogCXN0cnVjdCB4aGNpX2hjZAkqeGhjaSA9IGhjZF90b194aGNpKGhjZCk7CiAJc3Ry dWN0IGNsayAqY2xrID0geGhjaS0+Y2xrOworCXN0cnVjdCBjbGsgKnJlZ19jbGsgPSB4aGNpLT5y ZWdfY2xrOwogCiAJeGhjaS0+eGhjX3N0YXRlIHw9IFhIQ0lfU1RBVEVfUkVNT1ZJTkc7CiAKQEAg LTM0Niw2ICszNjIsNyBAQCBzdGF0aWMgaW50IHhoY2lfcGxhdF9yZW1vdmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqZGV2KQogCXVzYl9wdXRfaGNkKHhoY2ktPnNoYXJlZF9oY2QpOwogCiAJY2xr X2Rpc2FibGVfdW5wcmVwYXJlKGNsayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHJlZ19jbGsp OwogCXVzYl9wdXRfaGNkKGhjZCk7CiAKIAlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoJmRldi0+ ZGV2KTsKQEAgLTM3MCw4ICszODcsMTAgQEAgc3RhdGljIGludCBfX21heWJlX3VudXNlZCB4aGNp X3BsYXRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJICovCiAJcmV0ID0geGhjaV9zdXNw ZW5kKHhoY2ksIGRldmljZV9tYXlfd2FrZXVwKGRldikpOwogCi0JaWYgKCFkZXZpY2VfbWF5X3dh a2V1cChkZXYpICYmICFJU19FUlIoeGhjaS0+Y2xrKSkKKwlpZiAoIWRldmljZV9tYXlfd2FrZXVw KGRldikgJiYgIUlTX0VSUih4aGNpLT5jbGspKSB7CiAJCWNsa19kaXNhYmxlX3VucHJlcGFyZSh4 aGNpLT5jbGspOworCQljbGtfZGlzYWJsZV91bnByZXBhcmUoeGhjaS0+cmVnX2Nsayk7CisJfQog CiAJcmV0dXJuIHJldDsKIH0KQEAgLTM4Miw4ICs0MDEsMTAgQEAgc3RhdGljIGludCBfX21heWJl X3VudXNlZCB4aGNpX3BsYXRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIAlzdHJ1Y3QgeGhj aV9oY2QJKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOwogCWludCByZXQ7CiAKLQlpZiAoIWRldmlj ZV9tYXlfd2FrZXVwKGRldikgJiYgIUlTX0VSUih4aGNpLT5jbGspKQorCWlmICghZGV2aWNlX21h eV93YWtldXAoZGV2KSAmJiAhSVNfRVJSKHhoY2ktPmNsaykpIHsKKwkJY2xrX3ByZXBhcmVfZW5h YmxlKHhoY2ktPnJlZ19jbGspOwogCQljbGtfcHJlcGFyZV9lbmFibGUoeGhjaS0+Y2xrKTsKKwl9 CiAKIAlyZXQgPSB4aGNpX3ByaXZfcmVzdW1lX3F1aXJrKGhjZCk7CiAJaWYgKHJldCkKZGlmZiAt LWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmgK aW5kZXggOTYwOTlhMjQ1YzY5Li45ODg0YWFiYTFiNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNi L2hvc3QveGhjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oCkBAIC0xNzI2LDggKzE3 MjYsOSBAQCBzdHJ1Y3QgeGhjaV9oY2QgewogCWludAkJcGFnZV9zaGlmdDsKIAkvKiBtc2kteCB2 ZWN0b3JzICovCiAJaW50CQltc2l4X2NvdW50OwotCS8qIG9wdGlvbmFsIGNsb2NrICovCisJLyog b3B0aW9uYWwgY2xvY2tzICovCiAJc3RydWN0IGNsawkJKmNsazsKKwlzdHJ1Y3QgY2xrCQkqcmVn X2NsazsKIAkvKiBkYXRhIHN0cnVjdHVyZXMgKi8KIAlzdHJ1Y3QgeGhjaV9kZXZpY2VfY29udGV4 dF9hcnJheSAqZGNiYWE7CiAJc3RydWN0IHhoY2lfcmluZwkqY21kX3Jpbmc7Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: gregory.clement@bootlin.com (Gregory CLEMENT) Date: Wed, 14 Feb 2018 17:16:20 +0100 Subject: [PATCH 2/2] usb: host: xhci-plat: Fix clock resource by adding a register clock In-Reply-To: <20180214161620.4401-1-gregory.clement@bootlin.com> References: <20180214161620.4401-1-gregory.clement@bootlin.com> Message-ID: <20180214161620.4401-3-gregory.clement@bootlin.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Armada 7K/8K we need to explicitly enable the register clock. This clock is optional because not all the SoCs using this IP need it but at least for Armada 7K/8K it is actually mandatory. The change was done at xhci-plat level and not at a xhci-mvebu.c because, it is expected that other SoC would have this kind of constraint. The binding documentation is updating accordingly. Signed-off-by: Gregory CLEMENT --- Documentation/devicetree/bindings/usb/usb-xhci.txt | 5 +++- drivers/usb/host/xhci-plat.c | 33 ++++++++++++++++++---- drivers/usb/host/xhci.h | 3 +- 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/Documentation/devicetree/bindings/usb/usb-xhci.txt b/Documentation/devicetree/bindings/usb/usb-xhci.txt index e2ea59bbca93..e4b14511f4f8 100644 --- a/Documentation/devicetree/bindings/usb/usb-xhci.txt +++ b/Documentation/devicetree/bindings/usb/usb-xhci.txt @@ -27,7 +27,10 @@ Required properties: - interrupts: one XHCI interrupt should be described here. Optional properties: - - clocks: reference to a clock + - clocks: reference to the clocks + - clock-names: mandatory if there is a second clock, in this case + the name must be "core" for the first clock and "reg" for the + second one - usb2-lpm-disable: indicate if we don't want to enable USB2 HW LPM - usb3-lpm-capable: determines if platform is USB3 LPM capable - quirk-broken-port-ped: set if the controller has broken port disable mechanism diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c index 79afaac57ef6..fd0c399013a2 100644 --- a/drivers/usb/host/xhci-plat.c +++ b/drivers/usb/host/xhci-plat.c @@ -157,6 +157,7 @@ static int xhci_plat_probe(struct platform_device *pdev) struct resource *res; struct usb_hcd *hcd; struct clk *clk; + struct clk *reg_clk; int ret; int irq; @@ -226,17 +227,27 @@ static int xhci_plat_probe(struct platform_device *pdev) hcd->rsrc_len = resource_size(res); /* - * Not all platforms have a clk so it is not an error if the - * clock does not exists. + * Not all platforms have clks so it is not an error if the + * clock do not exist. */ + reg_clk = devm_clk_get(&pdev->dev, "reg"); + if (!IS_ERR(reg_clk)) { + ret = clk_prepare_enable(reg_clk); + if (ret) + goto put_hcd; + } else if (PTR_ERR(reg_clk) == -EPROBE_DEFER) { + ret = -EPROBE_DEFER; + goto put_hcd; + } + clk = devm_clk_get(&pdev->dev, NULL); if (!IS_ERR(clk)) { ret = clk_prepare_enable(clk); if (ret) - goto put_hcd; + goto disable_reg_clk; } else if (PTR_ERR(clk) == -EPROBE_DEFER) { ret = -EPROBE_DEFER; - goto put_hcd; + goto disable_reg_clk; } xhci = hcd_to_xhci(hcd); @@ -252,6 +263,7 @@ static int xhci_plat_probe(struct platform_device *pdev) device_wakeup_enable(hcd->self.controller); xhci->clk = clk; + xhci->reg_clk = reg_clk; xhci->main_hcd = hcd; xhci->shared_hcd = __usb_create_hcd(driver, sysdev, &pdev->dev, dev_name(&pdev->dev), hcd); @@ -321,6 +333,9 @@ static int xhci_plat_probe(struct platform_device *pdev) disable_clk: clk_disable_unprepare(clk); +disable_reg_clk: + clk_disable_unprepare(reg_clk); + put_hcd: usb_put_hcd(hcd); @@ -336,6 +351,7 @@ static int xhci_plat_remove(struct platform_device *dev) struct usb_hcd *hcd = platform_get_drvdata(dev); struct xhci_hcd *xhci = hcd_to_xhci(hcd); struct clk *clk = xhci->clk; + struct clk *reg_clk = xhci->reg_clk; xhci->xhc_state |= XHCI_STATE_REMOVING; @@ -346,6 +362,7 @@ static int xhci_plat_remove(struct platform_device *dev) usb_put_hcd(xhci->shared_hcd); clk_disable_unprepare(clk); + clk_disable_unprepare(reg_clk); usb_put_hcd(hcd); pm_runtime_set_suspended(&dev->dev); @@ -370,8 +387,10 @@ static int __maybe_unused xhci_plat_suspend(struct device *dev) */ ret = xhci_suspend(xhci, device_may_wakeup(dev)); - if (!device_may_wakeup(dev) && !IS_ERR(xhci->clk)) + if (!device_may_wakeup(dev) && !IS_ERR(xhci->clk)) { clk_disable_unprepare(xhci->clk); + clk_disable_unprepare(xhci->reg_clk); + } return ret; } @@ -382,8 +401,10 @@ static int __maybe_unused xhci_plat_resume(struct device *dev) struct xhci_hcd *xhci = hcd_to_xhci(hcd); int ret; - if (!device_may_wakeup(dev) && !IS_ERR(xhci->clk)) + if (!device_may_wakeup(dev) && !IS_ERR(xhci->clk)) { + clk_prepare_enable(xhci->reg_clk); clk_prepare_enable(xhci->clk); + } ret = xhci_priv_resume_quirk(hcd); if (ret) diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h index 96099a245c69..9884aaba1b40 100644 --- a/drivers/usb/host/xhci.h +++ b/drivers/usb/host/xhci.h @@ -1726,8 +1726,9 @@ struct xhci_hcd { int page_shift; /* msi-x vectors */ int msix_count; - /* optional clock */ + /* optional clocks */ struct clk *clk; + struct clk *reg_clk; /* data structures */ struct xhci_device_context_array *dcbaa; struct xhci_ring *cmd_ring; -- 2.15.1