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: [v3] dmaengine: mv_xor_v2: Fix clock resource by adding a register clock From: Gregory CLEMENT Message-Id: <20180307154010.10430-1-gregory.clement@bootlin.com> Date: Wed, 7 Mar 2018 16:40:10 +0100 To: Vinod Koul , dmaengine@vger.kernel.org Cc: Jason Cooper , Andrew Lunn , Sebastian Hesselbarth , Gregory CLEMENT , Thomas Petazzoni , linux-arm-kernel@lists.infradead.org, Rob Herring , devicetree@vger.kernel.org, Antoine Tenart , =?UTF-8?q?Miqu=C3=A8l=20Raynal?= , Nadav Haklai , Shadi Ammouri , Omri Itach , Hanna Hawa , Igal Liberman , Marcin Wojtas List-ID: T24gdGhlIENQMTEwIGNvbXBvbmVudHMgd2hpY2ggYXJlIHByZXNlbnQgb24gdGhlIEFybWFkYSA3 Sy84SyBTb0Mgd2UgbmVlZAp0byBleHBsaWNpdGx5IGVuYWJsZSB0aGUgY2xvY2sgZm9yIHRoZSBy ZWdpc3RlcnMuIEhvd2V2ZXIgaXQgaXMgbm90Cm5lZWRlZCBmb3IgdGhlIEFQOHh4IGNvbXBvbmVu dCwgdGhhdCdzIHdoeSB0aGlzIGNsb2NrIGlzIG9wdGlvbmFsLgoKV2l0aCB0aGlzIHBhdGNoIGJv dGggY2xvY2sgaGF2ZSBub3cgYSBuYW1lLCBidXQgaW4gb3JkZXIgdG8gYmUgYmFja3dhcmQKY29t cGF0aWJsZSwgdGhlIG5hbWUgb2YgdGhlIGZpcnN0IGNsb2NrIGlzIG5vdCB1c2VkLiBJdCBhbGxv d3MgdG8gc3RpbGwKdXNlIHRoaXMgY2xvY2sgd2l0aCBhIGRldmljZSB0cmVlIHVzaW5nIHRoZSBv bGQgYmluZGluZy4KClNpZ25lZC1vZmYtYnk6IEdyZWdvcnkgQ0xFTUVOVCA8Z3JlZ29yeS5jbGVt ZW50QGJvb3RsaW4uY29tPgotLS0KQ2hhbmdlbG9nOgoKdjEgLT4gdjIKCiAtIEZpeCB0eXBvcyBp biB0aGUgY29tbWl0IGxvZwogLSBBZGQgbW9yZSBleHBsYW5hdGlvbiBpbiB0ZSBjb21taXQgbG9n CiAtIE9ubHkgc2tpcCB0aGUgcmVnIGNsb2NrIHVzYWdlIGlmIHRoZSBjbG9jayBpcyBub3QgcHJl c2V0biBpbiB0aGUKICAgZGV2aWNlIHRyZWUgKC1FTk9FTlQpCiAtIEFkZCBkdCBsaXN0IGluIEND Cgp2MiAtPiB2MwoKIC0gRml4IHRoZSBFTk9FTlQgdGVzdAoKIC4uLi9kZXZpY2V0cmVlL2JpbmRp bmdzL2RtYS9tdi14b3ItdjIudHh0ICAgICAgICAgIHwgIDYgKysrKystCiBkcml2ZXJzL2RtYS9t dl94b3JfdjIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDI1ICsrKysrKysrKysrKysr KysrLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgMjUgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZG1hL212 LXhvci12Mi50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZG1hL212LXhv ci12Mi50eHQKaW5kZXggMjE3YTkwZWFhYmU3Li45YzM4YmJlN2U2ZDcgMTAwNjQ0Ci0tLSBhL0Rv Y3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kbWEvbXYteG9yLXYyLnR4dAorKysgYi9E b2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZG1hL212LXhvci12Mi50eHQKQEAgLTEx LDcgKzExLDExIEBAIFJlcXVpcmVkIHByb3BlcnRpZXM6CiAgIGludGVycnVwdHMuCiAKIE9wdGlv bmFsIHByb3BlcnRpZXM6Ci0tIGNsb2NrczogT3B0aW9uYWwgcmVmZXJlbmNlIHRvIHRoZSBjbG9j ayB1c2VkIGJ5IHRoZSBYT1IgZW5naW5lLgorLSBjbG9ja3M6IE9wdGlvbmFsIHJlZmVyZW5jZSB0 byB0aGUgY2xvY2tzIHVzZWQgYnkgdGhlIFhPUiBlbmdpbmUuCistIGNsb2NrLW5hbWVzOiBtYW5k YXRvcnkgaWYgdGhlcmUgaXMgYSBzZWNvbmQgY2xvY2ssIGluIHRoaXMgY2FzZSB0aGUKKyAgIG5h bWUgbXVzdCBiZSAiY29yZSIgZm9yIHRoZSBmaXJzdCBjbG9jayBhbmQgInJlZyIgZm9yIHRoZSBz ZWNvbmQKKyAgIG9uZQorCiAKIEV4YW1wbGU6CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL212 X3hvcl92Mi5jIGIvZHJpdmVycy9kbWEvbXZfeG9yX3YyLmMKaW5kZXggZjY1MmEwZTBmNWEyLi4z NTQ4Y2FhOWU5MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL212X3hvcl92Mi5jCisrKyBiL2Ry aXZlcnMvZG1hL212X3hvcl92Mi5jCkBAIC0xNjMsNiArMTYzLDcgQEAgc3RydWN0IG12X3hvcl92 Ml9kZXZpY2UgewogCXZvaWQgX19pb21lbSAqZG1hX2Jhc2U7CiAJdm9pZCBfX2lvbWVtICpnbG9i X2Jhc2U7CiAJc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGsgKnJlZ19jbGs7CiAJc3RydWN0 IHRhc2tsZXRfc3RydWN0IGlycV90YXNrbGV0OwogCXN0cnVjdCBsaXN0X2hlYWQgZnJlZV9zd19k ZXNjOwogCXN0cnVjdCBkbWFfZGV2aWNlIGRtYWRldjsKQEAgLTc0OSwxMyArNzUwLDI2IEBAIHN0 YXRpYyBpbnQgbXZfeG9yX3YyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJ aWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCXhvcl9kZXYtPnJlZ19jbGsgPSBkZXZtX2Nsa19n ZXQoJnBkZXYtPmRldiwgInJlZyIpOworCWlmIChQVFJfRVJSKHhvcl9kZXYtPnJlZ19jbGspICE9 IC1FTk9FTlQpIHsKKwkJaWYgKCFJU19FUlIoeG9yX2Rldi0+cmVnX2NsaykpIHsKKwkJCXJldCA9 IGNsa19wcmVwYXJlX2VuYWJsZSh4b3JfZGV2LT5yZWdfY2xrKTsKKwkJCWlmIChyZXQpCisJCQkJ cmV0dXJuIHJldDsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiBQVFJfRVJSKHhvcl9kZXYtPnJlZ19j bGspOworCQl9CisJfQorCiAJeG9yX2Rldi0+Y2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYs IE5VTEwpOwotCWlmIChJU19FUlIoeG9yX2Rldi0+Y2xrKSAmJiBQVFJfRVJSKHhvcl9kZXYtPmNs aykgPT0gLUVQUk9CRV9ERUZFUikKLQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJaWYgKElTX0VS Uih4b3JfZGV2LT5jbGspICYmIFBUUl9FUlIoeG9yX2Rldi0+Y2xrKSA9PSAtRVBST0JFX0RFRkVS KSB7CisJCXJldCA9IEVQUk9CRV9ERUZFUjsKKwkJZ290byBkaXNhYmxlX3JlZ19jbGs7CisJfQog CWlmICghSVNfRVJSKHhvcl9kZXYtPmNsaykpIHsKIAkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxl KHhvcl9kZXYtPmNsayk7CiAJCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OworCQkJZ290byBkaXNh YmxlX3JlZ19jbGs7CiAJfQogCiAJcmV0ID0gcGxhdGZvcm1fbXNpX2RvbWFpbl9hbGxvY19pcnFz KCZwZGV2LT5kZXYsIDEsCkBAIC04NjYsOCArODgwLDkgQEAgc3RhdGljIGludCBtdl94b3JfdjJf cHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIGZyZWVfbXNpX2lycXM6CiAJcGxh dGZvcm1fbXNpX2RvbWFpbl9mcmVlX2lycXMoJnBkZXYtPmRldik7CiBkaXNhYmxlX2NsazoKLQlp ZiAoIUlTX0VSUih4b3JfZGV2LT5jbGspKQotCQljbGtfZGlzYWJsZV91bnByZXBhcmUoeG9yX2Rl di0+Y2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoeG9yX2Rldi0+Y2xrKTsKK2Rpc2FibGVf cmVnX2NsazoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoeG9yX2Rldi0+cmVnX2Nsayk7CiAJcmV0 dXJuIHJldDsKIH0KIAo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: gregory.clement@bootlin.com (Gregory CLEMENT) Date: Wed, 7 Mar 2018 16:40:10 +0100 Subject: [PATCH v3] dmaengine: mv_xor_v2: Fix clock resource by adding a register clock Message-ID: <20180307154010.10430-1-gregory.clement@bootlin.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On the CP110 components which are present on the Armada 7K/8K SoC we need to explicitly enable the clock for the registers. However it is not needed for the AP8xx component, that's why this clock is optional. With this patch both clock have now a name, but in order to be backward compatible, the name of the first clock is not used. It allows to still use this clock with a device tree using the old binding. Signed-off-by: Gregory CLEMENT --- Changelog: v1 -> v2 - Fix typos in the commit log - Add more explanation in te commit log - Only skip the reg clock usage if the clock is not presetn in the device tree (-ENOENT) - Add dt list in CC v2 -> v3 - Fix the ENOENT test .../devicetree/bindings/dma/mv-xor-v2.txt | 6 +++++- drivers/dma/mv_xor_v2.c | 25 +++++++++++++++++----- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/Documentation/devicetree/bindings/dma/mv-xor-v2.txt b/Documentation/devicetree/bindings/dma/mv-xor-v2.txt index 217a90eaabe7..9c38bbe7e6d7 100644 --- a/Documentation/devicetree/bindings/dma/mv-xor-v2.txt +++ b/Documentation/devicetree/bindings/dma/mv-xor-v2.txt @@ -11,7 +11,11 @@ Required properties: interrupts. Optional properties: -- clocks: Optional reference to the clock used by the XOR engine. +- clocks: Optional reference to the clocks used by the XOR engine. +- 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 + Example: diff --git a/drivers/dma/mv_xor_v2.c b/drivers/dma/mv_xor_v2.c index f652a0e0f5a2..3548caa9e933 100644 --- a/drivers/dma/mv_xor_v2.c +++ b/drivers/dma/mv_xor_v2.c @@ -163,6 +163,7 @@ struct mv_xor_v2_device { void __iomem *dma_base; void __iomem *glob_base; struct clk *clk; + struct clk *reg_clk; struct tasklet_struct irq_tasklet; struct list_head free_sw_desc; struct dma_device dmadev; @@ -749,13 +750,26 @@ static int mv_xor_v2_probe(struct platform_device *pdev) if (ret) return ret; + xor_dev->reg_clk = devm_clk_get(&pdev->dev, "reg"); + if (PTR_ERR(xor_dev->reg_clk) != -ENOENT) { + if (!IS_ERR(xor_dev->reg_clk)) { + ret = clk_prepare_enable(xor_dev->reg_clk); + if (ret) + return ret; + } else { + return PTR_ERR(xor_dev->reg_clk); + } + } + xor_dev->clk = devm_clk_get(&pdev->dev, NULL); - if (IS_ERR(xor_dev->clk) && PTR_ERR(xor_dev->clk) == -EPROBE_DEFER) - return -EPROBE_DEFER; + if (IS_ERR(xor_dev->clk) && PTR_ERR(xor_dev->clk) == -EPROBE_DEFER) { + ret = EPROBE_DEFER; + goto disable_reg_clk; + } if (!IS_ERR(xor_dev->clk)) { ret = clk_prepare_enable(xor_dev->clk); if (ret) - return ret; + goto disable_reg_clk; } ret = platform_msi_domain_alloc_irqs(&pdev->dev, 1, @@ -866,8 +880,9 @@ static int mv_xor_v2_probe(struct platform_device *pdev) free_msi_irqs: platform_msi_domain_free_irqs(&pdev->dev); disable_clk: - if (!IS_ERR(xor_dev->clk)) - clk_disable_unprepare(xor_dev->clk); + clk_disable_unprepare(xor_dev->clk); +disable_reg_clk: + clk_disable_unprepare(xor_dev->reg_clk); return ret; } -- 2.16.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gregory CLEMENT Subject: [PATCH v3] dmaengine: mv_xor_v2: Fix clock resource by adding a register clock Date: Wed, 7 Mar 2018 16:40:10 +0100 Message-ID: <20180307154010.10430-1-gregory.clement@bootlin.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Vinod Koul , dmaengine@vger.kernel.org Cc: Andrew Lunn , Jason Cooper , devicetree@vger.kernel.org, Antoine Tenart , Gregory CLEMENT , Omri Itach , Nadav Haklai , Rob Herring , Shadi Ammouri , Igal Liberman , Thomas Petazzoni , =?UTF-8?q?Miqu=C3=A8l=20Raynal?= , Marcin Wojtas , Hanna Hawa , linux-arm-kernel@lists.infradead.org, Sebastian Hesselbarth List-Id: devicetree@vger.kernel.org On the CP110 components which are present on the Armada 7K/8K SoC we need to explicitly enable the clock for the registers. However it is not needed for the AP8xx component, that's why this clock is optional. With this patch both clock have now a name, but in order to be backward compatible, the name of the first clock is not used. It allows to still use this clock with a device tree using the old binding. Signed-off-by: Gregory CLEMENT --- Changelog: v1 -> v2 - Fix typos in the commit log - Add more explanation in te commit log - Only skip the reg clock usage if the clock is not presetn in the device tree (-ENOENT) - Add dt list in CC v2 -> v3 - Fix the ENOENT test .../devicetree/bindings/dma/mv-xor-v2.txt | 6 +++++- drivers/dma/mv_xor_v2.c | 25 +++++++++++++++++----- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/Documentation/devicetree/bindings/dma/mv-xor-v2.txt b/Documentation/devicetree/bindings/dma/mv-xor-v2.txt index 217a90eaabe7..9c38bbe7e6d7 100644 --- a/Documentation/devicetree/bindings/dma/mv-xor-v2.txt +++ b/Documentation/devicetree/bindings/dma/mv-xor-v2.txt @@ -11,7 +11,11 @@ Required properties: interrupts. Optional properties: -- clocks: Optional reference to the clock used by the XOR engine. +- clocks: Optional reference to the clocks used by the XOR engine. +- 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 + Example: diff --git a/drivers/dma/mv_xor_v2.c b/drivers/dma/mv_xor_v2.c index f652a0e0f5a2..3548caa9e933 100644 --- a/drivers/dma/mv_xor_v2.c +++ b/drivers/dma/mv_xor_v2.c @@ -163,6 +163,7 @@ struct mv_xor_v2_device { void __iomem *dma_base; void __iomem *glob_base; struct clk *clk; + struct clk *reg_clk; struct tasklet_struct irq_tasklet; struct list_head free_sw_desc; struct dma_device dmadev; @@ -749,13 +750,26 @@ static int mv_xor_v2_probe(struct platform_device *pdev) if (ret) return ret; + xor_dev->reg_clk = devm_clk_get(&pdev->dev, "reg"); + if (PTR_ERR(xor_dev->reg_clk) != -ENOENT) { + if (!IS_ERR(xor_dev->reg_clk)) { + ret = clk_prepare_enable(xor_dev->reg_clk); + if (ret) + return ret; + } else { + return PTR_ERR(xor_dev->reg_clk); + } + } + xor_dev->clk = devm_clk_get(&pdev->dev, NULL); - if (IS_ERR(xor_dev->clk) && PTR_ERR(xor_dev->clk) == -EPROBE_DEFER) - return -EPROBE_DEFER; + if (IS_ERR(xor_dev->clk) && PTR_ERR(xor_dev->clk) == -EPROBE_DEFER) { + ret = EPROBE_DEFER; + goto disable_reg_clk; + } if (!IS_ERR(xor_dev->clk)) { ret = clk_prepare_enable(xor_dev->clk); if (ret) - return ret; + goto disable_reg_clk; } ret = platform_msi_domain_alloc_irqs(&pdev->dev, 1, @@ -866,8 +880,9 @@ static int mv_xor_v2_probe(struct platform_device *pdev) free_msi_irqs: platform_msi_domain_free_irqs(&pdev->dev); disable_clk: - if (!IS_ERR(xor_dev->clk)) - clk_disable_unprepare(xor_dev->clk); + clk_disable_unprepare(xor_dev->clk); +disable_reg_clk: + clk_disable_unprepare(xor_dev->reg_clk); return ret; } -- 2.16.1