From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Mon, 9 Apr 2018 20:16:21 -0400 From: Marcin Ziemianowicz To: Boris Brezillon , Nicolas Ferre , Alexandre Belloni , Greg Kroah-Hartman Cc: Michael Turquette , Stephen Boyd , Alan Stern , linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org Subject: [PATCH v2 1/2] clk: at91: Added more information logging. Message-ID: <20180410001621.GA62230@hak8or> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii List-ID: I noticed that when debugging some USB clocking issue that there weren't many ways to tell what the state of the USB clocking system was. This adds a few logging statements to see what the relevant code is trying to do. Signed-off-by: Marcin Ziemianowicz --- drivers/clk/at91/clk-pll.c | 6 +++++- drivers/clk/at91/clk-usb.c | 10 ++++++++-- drivers/usb/host/ohci-at91.c | 16 ++++++++++------ 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/drivers/clk/at91/clk-pll.c b/drivers/clk/at91/clk-pll.c index 7d3223fc7161..534961766ae5 100644 --- a/drivers/clk/at91/clk-pll.c +++ b/drivers/clk/at91/clk-pll.c @@ -133,6 +133,7 @@ static unsigned long clk_pll_recalc_rate(struct clk_hw *hw, { struct clk_pll *pll = to_clk_pll(hw); unsigned int pllr; + unsigned long recalcedrate; u16 mul; u8 div; @@ -144,7 +145,10 @@ static unsigned long clk_pll_recalc_rate(struct clk_hw *hw, if (!div || !mul) return 0; - return (parent_rate / div) * (mul + 1); + recalcedrate = (parent_rate / div) * (mul + 1); + pr_debug("clk-pll: calculating new rate, (%lu hz / %u) * %u = %lu hz\n", + parent_rate, div, mul, recalcedrate); + return recalcedrate; } static long clk_pll_get_best_div_mul(struct clk_pll *pll, unsigned long rate, diff --git a/drivers/clk/at91/clk-usb.c b/drivers/clk/at91/clk-usb.c index 791770a563fc..2fa877e99bac 100644 --- a/drivers/clk/at91/clk-usb.c +++ b/drivers/clk/at91/clk-usb.c @@ -48,11 +48,15 @@ static unsigned long at91sam9x5_clk_usb_recalc_rate(struct clk_hw *hw, struct at91sam9x5_clk_usb *usb = to_at91sam9x5_clk_usb(hw); unsigned int usbr; u8 usbdiv; + unsigned int calcdclock; regmap_read(usb->regmap, AT91_PMC_USB, &usbr); usbdiv = (usbr & AT91_PMC_OHCIUSBDIV) >> SAM9X5_USB_DIV_SHIFT; - return DIV_ROUND_CLOSEST(parent_rate, (usbdiv + 1)); + calcdclock = DIV_ROUND_CLOSEST(parent_rate, (usbdiv + 1)); + pr_debug("clk-usb: calculating new rate, %lu hz / %u = %u hz\n", + parent_rate, usbdiv + 1, calcdclock); + return calcdclock; } static int at91sam9x5_clk_usb_determine_rate(struct clk_hw *hw, @@ -98,7 +102,6 @@ static int at91sam9x5_clk_usb_determine_rate(struct clk_hw *hw, if (!best_diff) break; } - if (best_rate < 0) return best_rate; @@ -142,6 +145,9 @@ static int at91sam9x5_clk_usb_set_rate(struct clk_hw *hw, unsigned long rate, if (div > SAM9X5_USB_MAX_DIV + 1 || !div) return -EINVAL; + pr_debug("clk-usb: setting USB clock divider to %lu hz / %lu = %lu hz\n", + parent_rate, div, rate); + regmap_update_bits(usb->regmap, AT91_PMC_USB, AT91_PMC_OHCIUSBDIV, (div - 1) << SAM9X5_USB_DIV_SHIFT); diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c index 5ad9e9bdc8ee..c57a239918f9 100644 --- a/drivers/usb/host/ohci-at91.c +++ b/drivers/usb/host/ohci-at91.c @@ -70,11 +70,13 @@ static const struct ohci_driver_overrides ohci_at91_drv_overrides __initconst = /*-------------------------------------------------------------------------*/ -static void at91_start_clock(struct ohci_at91_priv *ohci_at91) +static void at91_start_clock(struct ohci_at91_priv *ohci_at91, + struct device *dev) { if (ohci_at91->clocked) return; + dev_dbg(dev, "Enabling hclk, iclk, and setting fclk to 48 Mhz\n"); clk_set_rate(ohci_at91->fclk, 48000000); clk_prepare_enable(ohci_at91->hclk); clk_prepare_enable(ohci_at91->iclk); @@ -82,11 +84,13 @@ static void at91_start_clock(struct ohci_at91_priv *ohci_at91) ohci_at91->clocked = true; } -static void at91_stop_clock(struct ohci_at91_priv *ohci_at91) +static void at91_stop_clock(struct ohci_at91_priv *ohci_at91, + struct device *dev) { if (!ohci_at91->clocked) return; + dev_dbg(dev, "Disabling hclk, iclk, and fclk\n"); clk_disable_unprepare(ohci_at91->fclk); clk_disable_unprepare(ohci_at91->iclk); clk_disable_unprepare(ohci_at91->hclk); @@ -104,7 +108,7 @@ static void at91_start_hc(struct platform_device *pdev) /* * Start the USB clocks. */ - at91_start_clock(ohci_at91); + at91_start_clock(ohci_at91, &pdev->dev); /* * The USB host controller must remain in reset. @@ -128,7 +132,7 @@ static void at91_stop_hc(struct platform_device *pdev) /* * Stop the USB clocks. */ - at91_stop_clock(ohci_at91); + at91_stop_clock(ohci_at91, &pdev->dev); } @@ -623,7 +627,7 @@ ohci_hcd_at91_drv_suspend(struct device *dev) /* flush the writes */ (void) ohci_readl (ohci, &ohci->regs->control); - at91_stop_clock(ohci_at91); + at91_stop_clock(ohci_at91, dev); } return ret; @@ -638,7 +642,7 @@ ohci_hcd_at91_drv_resume(struct device *dev) if (ohci_at91->wakeup) disable_irq_wake(hcd->irq); - at91_start_clock(ohci_at91); + at91_start_clock(ohci_at91, dev); ohci_resume(hcd, false); -- 2.17.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: [v2,1/2] clk: at91: Added more information logging. From: Marcin Message-Id: <20180410001621.GA62230@hak8or> Date: Mon, 9 Apr 2018 20:16:21 -0400 To: Boris Brezillon , Nicolas Ferre , Alexandre Belloni , Greg Kroah-Hartman Cc: Michael Turquette , Stephen Boyd , Alan Stern , linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org List-ID: SSBub3RpY2VkIHRoYXQgd2hlbiBkZWJ1Z2dpbmcgc29tZSBVU0IgY2xvY2tpbmcgaXNzdWUgdGhh dCB0aGVyZSB3ZXJlbid0Cm1hbnkgd2F5cyB0byB0ZWxsIHdoYXQgdGhlIHN0YXRlIG9mIHRoZSBV U0IgY2xvY2tpbmcgc3lzdGVtIHdhcy4gVGhpcwphZGRzIGEgZmV3IGxvZ2dpbmcgc3RhdGVtZW50 cyB0byBzZWUgd2hhdCB0aGUgcmVsZXZhbnQgY29kZSBpcyB0cnlpbmcgdG8KZG8uCgpTaWduZWQt b2ZmLWJ5OiBNYXJjaW4gWmllbWlhbm93aWN6IDxtYXJjaW5AemllbWlhbm93aWN6LmNvbT4KLS0t CiBkcml2ZXJzL2Nsay9hdDkxL2Nsay1wbGwuYyAgIHwgIDYgKysrKystCiBkcml2ZXJzL2Nsay9h dDkxL2Nsay11c2IuYyAgIHwgMTAgKysrKysrKystLQogZHJpdmVycy91c2IvaG9zdC9vaGNpLWF0 OTEuYyB8IDE2ICsrKysrKysrKystLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgMjMgaW5zZXJ0aW9u cygrKSwgOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9hdDkxL2Nsay1w bGwuYyBiL2RyaXZlcnMvY2xrL2F0OTEvY2xrLXBsbC5jCmluZGV4IDdkMzIyM2ZjNzE2MS4uNTM0 OTYxNzY2YWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9hdDkxL2Nsay1wbGwuYworKysgYi9k cml2ZXJzL2Nsay9hdDkxL2Nsay1wbGwuYwpAQCAtMTMzLDYgKzEzMyw3IEBAIHN0YXRpYyB1bnNp Z25lZCBsb25nIGNsa19wbGxfcmVjYWxjX3JhdGUoc3RydWN0IGNsa19odyAqaHcsCiB7CiAJc3Ry dWN0IGNsa19wbGwgKnBsbCA9IHRvX2Nsa19wbGwoaHcpOwogCXVuc2lnbmVkIGludCBwbGxyOwor CXVuc2lnbmVkIGxvbmcgcmVjYWxjZWRyYXRlOwogCXUxNiBtdWw7CiAJdTggZGl2OwogCkBAIC0x NDQsNyArMTQ1LDEwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19wbGxfcmVjYWxjX3JhdGUo c3RydWN0IGNsa19odyAqaHcsCiAJaWYgKCFkaXYgfHwgIW11bCkKIAkJcmV0dXJuIDA7CiAKLQly ZXR1cm4gKHBhcmVudF9yYXRlIC8gZGl2KSAqIChtdWwgKyAxKTsKKwlyZWNhbGNlZHJhdGUgPSAo cGFyZW50X3JhdGUgLyBkaXYpICogKG11bCArIDEpOworCXByX2RlYnVnKCJjbGstcGxsOiBjYWxj dWxhdGluZyBuZXcgcmF0ZSwgKCVsdSBoeiAvICV1KSAqICV1ID0gJWx1IGh6XG4iLAorCQlwYXJl bnRfcmF0ZSwgZGl2LCBtdWwsIHJlY2FsY2VkcmF0ZSk7CisJcmV0dXJuIHJlY2FsY2VkcmF0ZTsK IH0KIAogc3RhdGljIGxvbmcgY2xrX3BsbF9nZXRfYmVzdF9kaXZfbXVsKHN0cnVjdCBjbGtfcGxs ICpwbGwsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2F0OTEv Y2xrLXVzYi5jIGIvZHJpdmVycy9jbGsvYXQ5MS9jbGstdXNiLmMKaW5kZXggNzkxNzcwYTU2M2Zj Li4yZmE4NzdlOTliYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL2F0OTEvY2xrLXVzYi5jCisr KyBiL2RyaXZlcnMvY2xrL2F0OTEvY2xrLXVzYi5jCkBAIC00OCwxMSArNDgsMTUgQEAgc3RhdGlj IHVuc2lnbmVkIGxvbmcgYXQ5MXNhbTl4NV9jbGtfdXNiX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtf aHcgKmh3LAogCXN0cnVjdCBhdDkxc2FtOXg1X2Nsa191c2IgKnVzYiA9IHRvX2F0OTFzYW05eDVf Y2xrX3VzYihodyk7CiAJdW5zaWduZWQgaW50IHVzYnI7CiAJdTggdXNiZGl2OworCXVuc2lnbmVk IGludCBjYWxjZGNsb2NrOwogCiAJcmVnbWFwX3JlYWQodXNiLT5yZWdtYXAsIEFUOTFfUE1DX1VT QiwgJnVzYnIpOwogCXVzYmRpdiA9ICh1c2JyICYgQVQ5MV9QTUNfT0hDSVVTQkRJVikgPj4gU0FN OVg1X1VTQl9ESVZfU0hJRlQ7CiAKLQlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QocGFyZW50X3Jh dGUsICh1c2JkaXYgKyAxKSk7CisJY2FsY2RjbG9jayA9IERJVl9ST1VORF9DTE9TRVNUKHBhcmVu dF9yYXRlLCAodXNiZGl2ICsgMSkpOworCXByX2RlYnVnKCJjbGstdXNiOiBjYWxjdWxhdGluZyBu ZXcgcmF0ZSwgJWx1IGh6IC8gJXUgPSAldSBoelxuIiwKKwkJcGFyZW50X3JhdGUsIHVzYmRpdiAr IDEsIGNhbGNkY2xvY2spOworCXJldHVybiBjYWxjZGNsb2NrOwogfQogCiBzdGF0aWMgaW50IGF0 OTFzYW05eDVfY2xrX3VzYl9kZXRlcm1pbmVfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywKQEAgLTk4 LDcgKzEwMiw2IEBAIHN0YXRpYyBpbnQgYXQ5MXNhbTl4NV9jbGtfdXNiX2RldGVybWluZV9yYXRl KHN0cnVjdCBjbGtfaHcgKmh3LAogCQlpZiAoIWJlc3RfZGlmZikKIAkJCWJyZWFrOwogCX0KLQog CWlmIChiZXN0X3JhdGUgPCAwKQogCQlyZXR1cm4gYmVzdF9yYXRlOwogCkBAIC0xNDIsNiArMTQ1 LDkgQEAgc3RhdGljIGludCBhdDkxc2FtOXg1X2Nsa191c2Jfc2V0X3JhdGUoc3RydWN0IGNsa19o dyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKIAlpZiAoZGl2ID4gU0FNOVg1X1VTQl9NQVhfRElW ICsgMSB8fCAhZGl2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCXByX2RlYnVnKCJjbGstdXNiOiBz ZXR0aW5nIFVTQiBjbG9jayBkaXZpZGVyIHRvICVsdSBoeiAvICVsdSA9ICVsdSBoelxuIiwKKwkJ cGFyZW50X3JhdGUsIGRpdiwgcmF0ZSk7CisKIAlyZWdtYXBfdXBkYXRlX2JpdHModXNiLT5yZWdt YXAsIEFUOTFfUE1DX1VTQiwgQVQ5MV9QTUNfT0hDSVVTQkRJViwKIAkJCSAgIChkaXYgLSAxKSA8 PCBTQU05WDVfVVNCX0RJVl9TSElGVCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qv b2hjaS1hdDkxLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXQ5MS5jCmluZGV4IDVhZDllOWJk YzhlZS4uYzU3YTIzOTkxOGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXQ5 MS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdDkxLmMKQEAgLTcwLDExICs3MCwxMyBA QCBzdGF0aWMgY29uc3Qgc3RydWN0IG9oY2lfZHJpdmVyX292ZXJyaWRlcyBvaGNpX2F0OTFfZHJ2 X292ZXJyaWRlcyBfX2luaXRjb25zdCA9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRp YyB2b2lkIGF0OTFfc3RhcnRfY2xvY2soc3RydWN0IG9oY2lfYXQ5MV9wcml2ICpvaGNpX2F0OTEp CitzdGF0aWMgdm9pZCBhdDkxX3N0YXJ0X2Nsb2NrKHN0cnVjdCBvaGNpX2F0OTFfcHJpdiAqb2hj aV9hdDkxLAorCQkJCXN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlpZiAob2hjaV9hdDkxLT5jbG9j a2VkKQogCQlyZXR1cm47CiAKKwlkZXZfZGJnKGRldiwgIkVuYWJsaW5nIGhjbGssIGljbGssIGFu ZCBzZXR0aW5nIGZjbGsgdG8gNDggTWh6XG4iKTsKIAljbGtfc2V0X3JhdGUob2hjaV9hdDkxLT5m Y2xrLCA0ODAwMDAwMCk7CiAJY2xrX3ByZXBhcmVfZW5hYmxlKG9oY2lfYXQ5MS0+aGNsayk7CiAJ Y2xrX3ByZXBhcmVfZW5hYmxlKG9oY2lfYXQ5MS0+aWNsayk7CkBAIC04MiwxMSArODQsMTMgQEAg c3RhdGljIHZvaWQgYXQ5MV9zdGFydF9jbG9jayhzdHJ1Y3Qgb2hjaV9hdDkxX3ByaXYgKm9oY2lf YXQ5MSkKIAlvaGNpX2F0OTEtPmNsb2NrZWQgPSB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBhdDkx X3N0b3BfY2xvY2soc3RydWN0IG9oY2lfYXQ5MV9wcml2ICpvaGNpX2F0OTEpCitzdGF0aWMgdm9p ZCBhdDkxX3N0b3BfY2xvY2soc3RydWN0IG9oY2lfYXQ5MV9wcml2ICpvaGNpX2F0OTEsCisJCQkJ c3RydWN0IGRldmljZSAqZGV2KQogewogCWlmICghb2hjaV9hdDkxLT5jbG9ja2VkKQogCQlyZXR1 cm47CiAKKwlkZXZfZGJnKGRldiwgIkRpc2FibGluZyBoY2xrLCBpY2xrLCBhbmQgZmNsa1xuIik7 CiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKG9oY2lfYXQ5MS0+ZmNsayk7CiAJY2xrX2Rpc2FibGVf dW5wcmVwYXJlKG9oY2lfYXQ5MS0+aWNsayk7CiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKG9oY2lf YXQ5MS0+aGNsayk7CkBAIC0xMDQsNyArMTA4LDcgQEAgc3RhdGljIHZvaWQgYXQ5MV9zdGFydF9o YyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCS8qCiAJICogU3RhcnQgdGhlIFVTQiBj bG9ja3MuCiAJICovCi0JYXQ5MV9zdGFydF9jbG9jayhvaGNpX2F0OTEpOworCWF0OTFfc3RhcnRf Y2xvY2sob2hjaV9hdDkxLCAmcGRldi0+ZGV2KTsKIAogCS8qCiAJICogVGhlIFVTQiBob3N0IGNv bnRyb2xsZXIgbXVzdCByZW1haW4gaW4gcmVzZXQuCkBAIC0xMjgsNyArMTMyLDcgQEAgc3RhdGlj IHZvaWQgYXQ5MV9zdG9wX2hjKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJLyoKIAkg KiBTdG9wIHRoZSBVU0IgY2xvY2tzLgogCSAqLwotCWF0OTFfc3RvcF9jbG9jayhvaGNpX2F0OTEp OworCWF0OTFfc3RvcF9jbG9jayhvaGNpX2F0OTEsICZwZGV2LT5kZXYpOwogfQogCiAKQEAgLTYy Myw3ICs2MjcsNyBAQCBvaGNpX2hjZF9hdDkxX2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRl dikKIAogCQkvKiBmbHVzaCB0aGUgd3JpdGVzICovCiAJCSh2b2lkKSBvaGNpX3JlYWRsIChvaGNp LCAmb2hjaS0+cmVncy0+Y29udHJvbCk7Ci0JCWF0OTFfc3RvcF9jbG9jayhvaGNpX2F0OTEpOwor CQlhdDkxX3N0b3BfY2xvY2sob2hjaV9hdDkxLCBkZXYpOwogCX0KIAogCXJldHVybiByZXQ7CkBA IC02MzgsNyArNjQyLDcgQEAgb2hjaV9oY2RfYXQ5MV9kcnZfcmVzdW1lKHN0cnVjdCBkZXZpY2Ug KmRldikKIAlpZiAob2hjaV9hdDkxLT53YWtldXApCiAJCWRpc2FibGVfaXJxX3dha2UoaGNkLT5p cnEpOwogCi0JYXQ5MV9zdGFydF9jbG9jayhvaGNpX2F0OTEpOworCWF0OTFfc3RhcnRfY2xvY2so b2hjaV9hdDkxLCBkZXYpOwogCiAJb2hjaV9yZXN1bWUoaGNkLCBmYWxzZSk7CiAK From mboxrd@z Thu Jan 1 00:00:00 1970 From: marcin@ziemianowicz.com (Marcin Ziemianowicz) Date: Mon, 9 Apr 2018 20:16:21 -0400 Subject: [PATCH v2 1/2] clk: at91: Added more information logging. Message-ID: <20180410001621.GA62230@hak8or> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org I noticed that when debugging some USB clocking issue that there weren't many ways to tell what the state of the USB clocking system was. This adds a few logging statements to see what the relevant code is trying to do. Signed-off-by: Marcin Ziemianowicz --- drivers/clk/at91/clk-pll.c | 6 +++++- drivers/clk/at91/clk-usb.c | 10 ++++++++-- drivers/usb/host/ohci-at91.c | 16 ++++++++++------ 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/drivers/clk/at91/clk-pll.c b/drivers/clk/at91/clk-pll.c index 7d3223fc7161..534961766ae5 100644 --- a/drivers/clk/at91/clk-pll.c +++ b/drivers/clk/at91/clk-pll.c @@ -133,6 +133,7 @@ static unsigned long clk_pll_recalc_rate(struct clk_hw *hw, { struct clk_pll *pll = to_clk_pll(hw); unsigned int pllr; + unsigned long recalcedrate; u16 mul; u8 div; @@ -144,7 +145,10 @@ static unsigned long clk_pll_recalc_rate(struct clk_hw *hw, if (!div || !mul) return 0; - return (parent_rate / div) * (mul + 1); + recalcedrate = (parent_rate / div) * (mul + 1); + pr_debug("clk-pll: calculating new rate, (%lu hz / %u) * %u = %lu hz\n", + parent_rate, div, mul, recalcedrate); + return recalcedrate; } static long clk_pll_get_best_div_mul(struct clk_pll *pll, unsigned long rate, diff --git a/drivers/clk/at91/clk-usb.c b/drivers/clk/at91/clk-usb.c index 791770a563fc..2fa877e99bac 100644 --- a/drivers/clk/at91/clk-usb.c +++ b/drivers/clk/at91/clk-usb.c @@ -48,11 +48,15 @@ static unsigned long at91sam9x5_clk_usb_recalc_rate(struct clk_hw *hw, struct at91sam9x5_clk_usb *usb = to_at91sam9x5_clk_usb(hw); unsigned int usbr; u8 usbdiv; + unsigned int calcdclock; regmap_read(usb->regmap, AT91_PMC_USB, &usbr); usbdiv = (usbr & AT91_PMC_OHCIUSBDIV) >> SAM9X5_USB_DIV_SHIFT; - return DIV_ROUND_CLOSEST(parent_rate, (usbdiv + 1)); + calcdclock = DIV_ROUND_CLOSEST(parent_rate, (usbdiv + 1)); + pr_debug("clk-usb: calculating new rate, %lu hz / %u = %u hz\n", + parent_rate, usbdiv + 1, calcdclock); + return calcdclock; } static int at91sam9x5_clk_usb_determine_rate(struct clk_hw *hw, @@ -98,7 +102,6 @@ static int at91sam9x5_clk_usb_determine_rate(struct clk_hw *hw, if (!best_diff) break; } - if (best_rate < 0) return best_rate; @@ -142,6 +145,9 @@ static int at91sam9x5_clk_usb_set_rate(struct clk_hw *hw, unsigned long rate, if (div > SAM9X5_USB_MAX_DIV + 1 || !div) return -EINVAL; + pr_debug("clk-usb: setting USB clock divider to %lu hz / %lu = %lu hz\n", + parent_rate, div, rate); + regmap_update_bits(usb->regmap, AT91_PMC_USB, AT91_PMC_OHCIUSBDIV, (div - 1) << SAM9X5_USB_DIV_SHIFT); diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c index 5ad9e9bdc8ee..c57a239918f9 100644 --- a/drivers/usb/host/ohci-at91.c +++ b/drivers/usb/host/ohci-at91.c @@ -70,11 +70,13 @@ static const struct ohci_driver_overrides ohci_at91_drv_overrides __initconst = /*-------------------------------------------------------------------------*/ -static void at91_start_clock(struct ohci_at91_priv *ohci_at91) +static void at91_start_clock(struct ohci_at91_priv *ohci_at91, + struct device *dev) { if (ohci_at91->clocked) return; + dev_dbg(dev, "Enabling hclk, iclk, and setting fclk to 48 Mhz\n"); clk_set_rate(ohci_at91->fclk, 48000000); clk_prepare_enable(ohci_at91->hclk); clk_prepare_enable(ohci_at91->iclk); @@ -82,11 +84,13 @@ static void at91_start_clock(struct ohci_at91_priv *ohci_at91) ohci_at91->clocked = true; } -static void at91_stop_clock(struct ohci_at91_priv *ohci_at91) +static void at91_stop_clock(struct ohci_at91_priv *ohci_at91, + struct device *dev) { if (!ohci_at91->clocked) return; + dev_dbg(dev, "Disabling hclk, iclk, and fclk\n"); clk_disable_unprepare(ohci_at91->fclk); clk_disable_unprepare(ohci_at91->iclk); clk_disable_unprepare(ohci_at91->hclk); @@ -104,7 +108,7 @@ static void at91_start_hc(struct platform_device *pdev) /* * Start the USB clocks. */ - at91_start_clock(ohci_at91); + at91_start_clock(ohci_at91, &pdev->dev); /* * The USB host controller must remain in reset. @@ -128,7 +132,7 @@ static void at91_stop_hc(struct platform_device *pdev) /* * Stop the USB clocks. */ - at91_stop_clock(ohci_at91); + at91_stop_clock(ohci_at91, &pdev->dev); } @@ -623,7 +627,7 @@ ohci_hcd_at91_drv_suspend(struct device *dev) /* flush the writes */ (void) ohci_readl (ohci, &ohci->regs->control); - at91_stop_clock(ohci_at91); + at91_stop_clock(ohci_at91, dev); } return ret; @@ -638,7 +642,7 @@ ohci_hcd_at91_drv_resume(struct device *dev) if (ohci_at91->wakeup) disable_irq_wake(hcd->irq); - at91_start_clock(ohci_at91); + at91_start_clock(ohci_at91, dev); ohci_resume(hcd, false); -- 2.17.0