From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sender-of-o52.zoho.com ([135.84.80.217]:21453 "EHLO sender-of-o52.zoho.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751402AbeDHJn4 (ORCPT ); Sun, 8 Apr 2018 05:43:56 -0400 Date: Sun, 8 Apr 2018 05:43:30 -0400 From: Marcin To: Boris Brezillon , Nicolas Ferre , Alexandre Belloni Cc: Michael Turquette , Stephen Boyd , Alan Stern , Greg Kroah-Hartman , linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org Subject: [PATCH 1/2] clk: at91: Added more information logging. Message-ID: <20180408094330.GA51669@hak8or> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Sender: linux-clk-owner@vger.kernel.org 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 | 21 +++++++++++++++------ 3 files changed, 28 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..5dfc4e464cfe 100644 --- a/drivers/usb/host/ohci-at91.c +++ b/drivers/usb/host/ohci-at91.c @@ -70,11 +70,12 @@ 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 +83,12 @@ 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,12 +106,19 @@ 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. */ writel(0, ®s->control); + + /* + * Say what the clocks are set to. + */ + dev_dbg(&pdev->dev, "hclk set to: %lu hz\n", clk_get_rate(ohci_at91->hclk)); + dev_dbg(&pdev->dev, "iclk set to: %lu hz\n", clk_get_rate(ohci_at91->iclk)); + dev_dbg(&pdev->dev, "fclk set to: %lu hz\n", clk_get_rate(ohci_at91->fclk)); } static void at91_stop_hc(struct platform_device *pdev) @@ -128,7 +137,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 +632,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 +647,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.16.3 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: [1/2] clk: at91: Added more information logging. From: Marcin Message-Id: <20180408094330.GA51669@hak8or> Date: Sun, 8 Apr 2018 05:43:30 -0400 To: Boris Brezillon , Nicolas Ferre , Alexandre Belloni Cc: Michael Turquette , Stephen Boyd , Alan Stern , Greg Kroah-Hartman , 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 OTEuYyB8IDIxICsrKysrKysrKysrKysrKy0tLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCAyOCBpbnNl cnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2F0OTEv Y2xrLXBsbC5jIGIvZHJpdmVycy9jbGsvYXQ5MS9jbGstcGxsLmMKaW5kZXggN2QzMjIzZmM3MTYx Li41MzQ5NjE3NjZhZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL2F0OTEvY2xrLXBsbC5jCisr KyBiL2RyaXZlcnMvY2xrL2F0OTEvY2xrLXBsbC5jCkBAIC0xMzMsNiArMTMzLDcgQEAgc3RhdGlj IHVuc2lnbmVkIGxvbmcgY2xrX3BsbF9yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywKIHsK IAlzdHJ1Y3QgY2xrX3BsbCAqcGxsID0gdG9fY2xrX3BsbChodyk7CiAJdW5zaWduZWQgaW50IHBs bHI7CisJdW5zaWduZWQgbG9uZyByZWNhbGNlZHJhdGU7CiAJdTE2IG11bDsKIAl1OCBkaXY7CiAK QEAgLTE0NCw3ICsxNDUsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX3BsbF9yZWNhbGNf cmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywKIAlpZiAoIWRpdiB8fCAhbXVsKQogCQlyZXR1cm4gMDsK IAotCXJldHVybiAocGFyZW50X3JhdGUgLyBkaXYpICogKG11bCArIDEpOworCXJlY2FsY2VkcmF0 ZSA9IChwYXJlbnRfcmF0ZSAvIGRpdikgKiAobXVsICsgMSk7CisJcHJfZGVidWcoImNsay1wbGw6 IGNhbGN1bGF0aW5nIG5ldyByYXRlLCAoJWx1IGh6IC8gJXUpICogJXUgPSAlbHUgaHpcbiIsCisJ CXBhcmVudF9yYXRlLCBkaXYsIG11bCwgcmVjYWxjZWRyYXRlKTsKKwlyZXR1cm4gcmVjYWxjZWRy YXRlOwogfQogCiBzdGF0aWMgbG9uZyBjbGtfcGxsX2dldF9iZXN0X2Rpdl9tdWwoc3RydWN0IGNs a19wbGwgKnBsbCwgdW5zaWduZWQgbG9uZyByYXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsv YXQ5MS9jbGstdXNiLmMgYi9kcml2ZXJzL2Nsay9hdDkxL2Nsay11c2IuYwppbmRleCA3OTE3NzBh NTYzZmMuLjJmYTg3N2U5OWJhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvYXQ5MS9jbGstdXNi LmMKKysrIGIvZHJpdmVycy9jbGsvYXQ5MS9jbGstdXNiLmMKQEAgLTQ4LDExICs0OCwxNSBAQCBz dGF0aWMgdW5zaWduZWQgbG9uZyBhdDkxc2FtOXg1X2Nsa191c2JfcmVjYWxjX3JhdGUoc3RydWN0 IGNsa19odyAqaHcsCiAJc3RydWN0IGF0OTFzYW05eDVfY2xrX3VzYiAqdXNiID0gdG9fYXQ5MXNh bTl4NV9jbGtfdXNiKGh3KTsKIAl1bnNpZ25lZCBpbnQgdXNicjsKIAl1OCB1c2JkaXY7CisJdW5z aWduZWQgaW50IGNhbGNkY2xvY2s7CiAKIAlyZWdtYXBfcmVhZCh1c2ItPnJlZ21hcCwgQVQ5MV9Q TUNfVVNCLCAmdXNicik7CiAJdXNiZGl2ID0gKHVzYnIgJiBBVDkxX1BNQ19PSENJVVNCRElWKSA+ PiBTQU05WDVfVVNCX0RJVl9TSElGVDsKIAotCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVChwYXJl bnRfcmF0ZSwgKHVzYmRpdiArIDEpKTsKKwljYWxjZGNsb2NrID0gRElWX1JPVU5EX0NMT1NFU1Qo cGFyZW50X3JhdGUsICh1c2JkaXYgKyAxKSk7CisJcHJfZGVidWcoImNsay11c2I6IGNhbGN1bGF0 aW5nIG5ldyByYXRlLCAlbHUgaHogLyAldSA9ICV1IGh6XG4iLAorCQlwYXJlbnRfcmF0ZSwgdXNi ZGl2ICsgMSwgY2FsY2RjbG9jayk7CisJcmV0dXJuIGNhbGNkY2xvY2s7CiB9CiAKIHN0YXRpYyBp bnQgYXQ5MXNhbTl4NV9jbGtfdXNiX2RldGVybWluZV9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LApA QCAtOTgsNyArMTAyLDYgQEAgc3RhdGljIGludCBhdDkxc2FtOXg1X2Nsa191c2JfZGV0ZXJtaW5l X3JhdGUoc3RydWN0IGNsa19odyAqaHcsCiAJCWlmICghYmVzdF9kaWZmKQogCQkJYnJlYWs7CiAJ fQotCiAJaWYgKGJlc3RfcmF0ZSA8IDApCiAJCXJldHVybiBiZXN0X3JhdGU7CiAKQEAgLTE0Miw2 ICsxNDUsOSBAQCBzdGF0aWMgaW50IGF0OTFzYW05eDVfY2xrX3VzYl9zZXRfcmF0ZShzdHJ1Y3Qg Y2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAogCWlmIChkaXYgPiBTQU05WDVfVVNCX01B WF9ESVYgKyAxIHx8ICFkaXYpCiAJCXJldHVybiAtRUlOVkFMOwogCisJcHJfZGVidWcoImNsay11 c2I6IHNldHRpbmcgVVNCIGNsb2NrIGRpdmlkZXIgdG8gJWx1IGh6IC8gJWx1ID0gJWx1IGh6XG4i LAorCQlwYXJlbnRfcmF0ZSwgZGl2LCByYXRlKTsKKwogCXJlZ21hcF91cGRhdGVfYml0cyh1c2It PnJlZ21hcCwgQVQ5MV9QTUNfVVNCLCBBVDkxX1BNQ19PSENJVVNCRElWLAogCQkJICAgKGRpdiAt IDEpIDw8IFNBTTlYNV9VU0JfRElWX1NISUZUKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Iv aG9zdC9vaGNpLWF0OTEuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdDkxLmMKaW5kZXggNWFk OWU5YmRjOGVlLi41ZGZjNGU0NjRjZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hj aS1hdDkxLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF0OTEuYwpAQCAtNzAsMTEgKzcw LDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2hjaV9kcml2ZXJfb3ZlcnJpZGVzIG9oY2lfYXQ5 MV9kcnZfb3ZlcnJpZGVzIF9faW5pdGNvbnN0ID0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAot c3RhdGljIHZvaWQgYXQ5MV9zdGFydF9jbG9jayhzdHJ1Y3Qgb2hjaV9hdDkxX3ByaXYgKm9oY2lf YXQ5MSkKK3N0YXRpYyB2b2lkIGF0OTFfc3RhcnRfY2xvY2soc3RydWN0IG9oY2lfYXQ5MV9wcml2 ICpvaGNpX2F0OTEsIHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlpZiAob2hjaV9hdDkxLT5jbG9j a2VkKQogCQlyZXR1cm47CiAKKwlkZXZfZGJnKGRldiwgIkVuYWJsaW5nIGhjbGssIGljbGssIGFu ZCBzZXR0aW5nIGZjbGsgdG8gNDggTWh6XG4iKTsKIAljbGtfc2V0X3JhdGUob2hjaV9hdDkxLT5m Y2xrLCA0ODAwMDAwMCk7CiAJY2xrX3ByZXBhcmVfZW5hYmxlKG9oY2lfYXQ5MS0+aGNsayk7CiAJ Y2xrX3ByZXBhcmVfZW5hYmxlKG9oY2lfYXQ5MS0+aWNsayk7CkBAIC04MiwxMSArODMsMTIgQEAg c3RhdGljIHZvaWQgYXQ5MV9zdGFydF9jbG9jayhzdHJ1Y3Qgb2hjaV9hdDkxX3ByaXYgKm9oY2lf YXQ5MSkKIAlvaGNpX2F0OTEtPmNsb2NrZWQgPSB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBhdDkx X3N0b3BfY2xvY2soc3RydWN0IG9oY2lfYXQ5MV9wcml2ICpvaGNpX2F0OTEpCitzdGF0aWMgdm9p ZCBhdDkxX3N0b3BfY2xvY2soc3RydWN0IG9oY2lfYXQ5MV9wcml2ICpvaGNpX2F0OTEsIHN0cnVj dCBkZXZpY2UgKmRldikKIHsKIAlpZiAoIW9oY2lfYXQ5MS0+Y2xvY2tlZCkKIAkJcmV0dXJuOwog CisJZGV2X2RiZyhkZXYsICJEaXNhYmxpbmcgaGNsaywgaWNsaywgYW5kIGZjbGtcbiIpOwogCWNs a19kaXNhYmxlX3VucHJlcGFyZShvaGNpX2F0OTEtPmZjbGspOwogCWNsa19kaXNhYmxlX3VucHJl cGFyZShvaGNpX2F0OTEtPmljbGspOwogCWNsa19kaXNhYmxlX3VucHJlcGFyZShvaGNpX2F0OTEt PmhjbGspOwpAQCAtMTA0LDEyICsxMDYsMTkgQEAgc3RhdGljIHZvaWQgYXQ5MV9zdGFydF9oYyhz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCS8qCiAJICogU3RhcnQgdGhlIFVTQiBjbG9j a3MuCiAJICovCi0JYXQ5MV9zdGFydF9jbG9jayhvaGNpX2F0OTEpOworCWF0OTFfc3RhcnRfY2xv Y2sob2hjaV9hdDkxLCAmcGRldi0+ZGV2KTsKIAogCS8qCiAJICogVGhlIFVTQiBob3N0IGNvbnRy b2xsZXIgbXVzdCByZW1haW4gaW4gcmVzZXQuCiAJICovCiAJd3JpdGVsKDAsICZyZWdzLT5jb250 cm9sKTsKKworCS8qCisJICogU2F5IHdoYXQgdGhlIGNsb2NrcyBhcmUgc2V0IHRvLgorCSAqLwor CWRldl9kYmcoJnBkZXYtPmRldiwgImhjbGsgc2V0IHRvOiAlbHUgaHpcbiIsIGNsa19nZXRfcmF0 ZShvaGNpX2F0OTEtPmhjbGspKTsKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJpY2xrIHNldCB0bzog JWx1IGh6XG4iLCBjbGtfZ2V0X3JhdGUob2hjaV9hdDkxLT5pY2xrKSk7CisJZGV2X2RiZygmcGRl di0+ZGV2LCAiZmNsayBzZXQgdG86ICVsdSBoelxuIiwgY2xrX2dldF9yYXRlKG9oY2lfYXQ5MS0+ ZmNsaykpOwogfQogCiBzdGF0aWMgdm9pZCBhdDkxX3N0b3BfaGMoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKQEAgLTEyOCw3ICsxMzcsNyBAQCBzdGF0aWMgdm9pZCBhdDkxX3N0b3BfaGMo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkvKgogCSAqIFN0b3AgdGhlIFVTQiBjbG9j a3MuCiAJICovCi0JYXQ5MV9zdG9wX2Nsb2NrKG9oY2lfYXQ5MSk7CisJYXQ5MV9zdG9wX2Nsb2Nr KG9oY2lfYXQ5MSwgJnBkZXYtPmRldik7CiB9CiAKIApAQCAtNjIzLDcgKzYzMiw3IEBAIG9oY2lf aGNkX2F0OTFfZHJ2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogCiAJCS8qIGZsdXNoIHRo ZSB3cml0ZXMgKi8KIAkJKHZvaWQpIG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250 cm9sKTsKLQkJYXQ5MV9zdG9wX2Nsb2NrKG9oY2lfYXQ5MSk7CisJCWF0OTFfc3RvcF9jbG9jayhv aGNpX2F0OTEsIGRldik7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTYzOCw3ICs2NDcsNyBAQCBv aGNpX2hjZF9hdDkxX2Rydl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogCWlmIChvaGNpX2F0 OTEtPndha2V1cCkKIAkJZGlzYWJsZV9pcnFfd2FrZShoY2QtPmlycSk7CiAKLQlhdDkxX3N0YXJ0 X2Nsb2NrKG9oY2lfYXQ5MSk7CisJYXQ5MV9zdGFydF9jbG9jayhvaGNpX2F0OTEsIGRldik7CiAK IAlvaGNpX3Jlc3VtZShoY2QsIGZhbHNlKTsKIAo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: marcin@ziemianowicz.com (Marcin) Date: Sun, 8 Apr 2018 05:43:30 -0400 Subject: [PATCH 1/2] clk: at91: Added more information logging. Message-ID: <20180408094330.GA51669@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 | 21 +++++++++++++++------ 3 files changed, 28 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..5dfc4e464cfe 100644 --- a/drivers/usb/host/ohci-at91.c +++ b/drivers/usb/host/ohci-at91.c @@ -70,11 +70,12 @@ 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 +83,12 @@ 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,12 +106,19 @@ 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. */ writel(0, ®s->control); + + /* + * Say what the clocks are set to. + */ + dev_dbg(&pdev->dev, "hclk set to: %lu hz\n", clk_get_rate(ohci_at91->hclk)); + dev_dbg(&pdev->dev, "iclk set to: %lu hz\n", clk_get_rate(ohci_at91->iclk)); + dev_dbg(&pdev->dev, "fclk set to: %lu hz\n", clk_get_rate(ohci_at91->fclk)); } static void at91_stop_hc(struct platform_device *pdev) @@ -128,7 +137,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 +632,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 +647,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.16.3