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: [v5,5/7] dmaengine: xilinx_dma: autodetect whether the HW supports scatter-gather From: Andrea Merello Message-Id: <20180907062502.8241-5-andrea.merello@gmail.com> Date: Fri, 7 Sep 2018 08:25:00 +0200 To: vkoul@kernel.org, dan.j.williams@intel.com, michal.simek@xilinx.com, appana.durga.rao@xilinx.com, dmaengine@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, robh+dt@kernel.org, mark.rutland@arm.com, devicetree@vger.kernel.org, radhey.shyam.pandey@xilinx.com, Andrea Merello List-ID: VGhlIEFYSURNQSBhbmQgQ0RNQSBIVyBjYW4gYmUgZWl0aGVyIGRpcmVjdC1hY2Nlc3Mgb3Igc2Nh dHRlci1nYXRoZXIKdmVyc2lvbi4gVGhlc2UgYXJlIFNXIGluY29tcGF0aWJsZS4KClRoZSBkcml2 ZXIgY2FuIGhhbmRsZSBib3RoIHZlcnNpb25zOiBhIERUIHByb3BlcnR5IHdhcyB1c2VkIHRvCnRl bGwgdGhlIGRyaXZlciB3aGV0aGVyIHRvIGFzc3VtZSB0aGUgSFcgaXMgaW4gc2NhdHRlci1nYXRo ZXIgbW9kZS4KClRoaXMgcGF0Y2ggbWFrZXMgdGhlIGRyaXZlciB0byBhdXRvZGV0ZWN0IHRoaXMg aW5mb3JtYXRpb24uIFRoZSBEVApwcm9wZXJ0eSBpcyBub3QgcmVxdWlyZWQgYW55bW9yZS4KCk5v IGNoYW5nZXMgZm9yIFZETUEuCgpDYzogUm9iIEhlcnJpbmcgPHJvYmgrZHRAa2VybmVsLm9yZz4K Q2M6IE1hcmsgUnV0bGFuZCA8bWFyay5ydXRsYW5kQGFybS5jb20+CkNjOiBkZXZpY2V0cmVlQHZn ZXIua2VybmVsLm9yZwpDYzogUmFkaGV5IFNoeWFtIFBhbmRleSA8cmFkaGV5LnNoeWFtLnBhbmRl eUB4aWxpbnguY29tPgpTaWduZWQtb2ZmLWJ5OiBBbmRyZWEgTWVyZWxsbyA8YW5kcmVhLm1lcmVs bG9AZ21haWwuY29tPgpSZXZpZXdlZC1ieTogUmFkaGV5IFNoeWFtIFBhbmRleSA8cmFkaGV5LnNo eWFtLnBhbmRleUB4aWxpbnguY29tPgotLS0KQ2hhbmdlcyBpbiB2MjoKCS0gYXV0b2RldGVjdCBv bmx5IGluICFWRE1BIGNhc2UKQ2hhbmdlcyBpbiB2MzoKCS0gY2MgRFQgbWFpbnRhaW5lcnMvTUwK Q2hhbmdlcyBpbiB2NDoKCS0gZml4IHR5cG9zIGluIGNvbW1pdCBtZXNzYWdlCkNoYW5nZXMgaW4g djU6CglOb25lCi0tLQogZHJpdmVycy9kbWEveGlsaW54L3hpbGlueF9kbWEuYyB8IDE0ICsrKysr KysrKystLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS94aWxpbngveGlsaW54X2RtYS5jIGIvZHJpdmVy cy9kbWEveGlsaW54L3hpbGlueF9kbWEuYwppbmRleCBiMTdmMjRlNGVjMzUuLjc4ZDBmMmY4MjI1 ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEveGlsaW54L3hpbGlueF9kbWEuYworKysgYi9kcml2 ZXJzL2RtYS94aWxpbngveGlsaW54X2RtYS5jCkBAIC04Niw2ICs4Niw3IEBACiAjZGVmaW5lIFhJ TElOWF9ETUFfRE1BU1JfRE1BX0RFQ19FUlIJCUJJVCg2KQogI2RlZmluZSBYSUxJTlhfRE1BX0RN QVNSX0RNQV9TTEFWRV9FUlIJCUJJVCg1KQogI2RlZmluZSBYSUxJTlhfRE1BX0RNQVNSX0RNQV9J TlRfRVJSCQlCSVQoNCkKKyNkZWZpbmUgWElMSU5YX0RNQV9ETUFTUl9TR19NQVNLCQlCSVQoMykK ICNkZWZpbmUgWElMSU5YX0RNQV9ETUFTUl9JRExFCQkJQklUKDEpCiAjZGVmaW5lIFhJTElOWF9E TUFfRE1BU1JfSEFMVEVECQlCSVQoMCkKICNkZWZpbmUgWElMSU5YX0RNQV9ETUFTUl9ERUxBWV9N QVNLCQlHRU5NQVNLKDMxLCAyNCkKQEAgLTQwNyw3ICs0MDgsNiBAQCBzdHJ1Y3QgeGlsaW54X2Rt YV9jb25maWcgewogICogQGRldjogRGV2aWNlIFN0cnVjdHVyZQogICogQGNvbW1vbjogRE1BIGRl dmljZSBzdHJ1Y3R1cmUKICAqIEBjaGFuOiBEcml2ZXIgc3BlY2lmaWMgRE1BIGNoYW5uZWwKLSAq IEBoYXNfc2c6IFNwZWNpZmllcyB3aGV0aGVyIFNjYXR0ZXItR2F0aGVyIGlzIHByZXNlbnQgb3Ig bm90CiAgKiBAbWNkbWE6IFNwZWNpZmllcyB3aGV0aGVyIE11bHRpLUNoYW5uZWwgaXMgcHJlc2Vu dCBvciBub3QKICAqIEBmbHVzaF9vbl9mc3luYzogRmx1c2ggb24gZnJhbWUgc3luYwogICogQGV4 dF9hZGRyOiBJbmRpY2F0ZXMgNjQgYml0IGFkZHJlc3NpbmcgaXMgc3VwcG9ydGVkIGJ5IGRtYSBk ZXZpY2UKQEAgLTQyNyw3ICs0MjcsNiBAQCBzdHJ1Y3QgeGlsaW54X2RtYV9kZXZpY2UgewogCXN0 cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3QgZG1hX2RldmljZSBjb21tb247CiAJc3RydWN0IHhp bGlueF9kbWFfY2hhbiAqY2hhbltYSUxJTlhfRE1BX01BWF9DSEFOU19QRVJfREVWSUNFXTsKLQli b29sIGhhc19zZzsKIAlib29sIG1jZG1hOwogCXUzMiBmbHVzaF9vbl9mc3luYzsKIAlib29sIGV4 dF9hZGRyOwpAQCAtMjQwMCw3ICsyMzk5LDYgQEAgc3RhdGljIGludCB4aWxpbnhfZG1hX2NoYW5f cHJvYmUoc3RydWN0IHhpbGlueF9kbWFfZGV2aWNlICp4ZGV2LAogCiAJY2hhbi0+ZGV2ID0geGRl di0+ZGV2OwogCWNoYW4tPnhkZXYgPSB4ZGV2OwotCWNoYW4tPmhhc19zZyA9IHhkZXYtPmhhc19z ZzsKIAljaGFuLT5kZXNjX3BlbmRpbmdjb3VudCA9IDB4MDsKIAljaGFuLT5leHRfYWRkciA9IHhk ZXYtPmV4dF9hZGRyOwogCS8qIFRoaXMgdmFyaWFibGUgZW5zdXJlcyB0aGF0IGRlc2NyaXB0b3Jz IGFyZSBub3QKQEAgLTI0OTMsNiArMjQ5MSwxNSBAQCBzdGF0aWMgaW50IHhpbGlueF9kbWFfY2hh bl9wcm9iZShzdHJ1Y3QgeGlsaW54X2RtYV9kZXZpY2UgKnhkZXYsCiAJCWNoYW4tPnN0b3BfdHJh bnNmZXIgPSB4aWxpbnhfZG1hX3N0b3BfdHJhbnNmZXI7CiAJfQogCisJLyogY2hlY2sgaWYgU0cg aXMgZW5hYmxlZCAob25seSBmb3IgQVhJRE1BIGFuZCBDRE1BKSAqLworCWlmICh4ZGV2LT5kbWFf Y29uZmlnLT5kbWF0eXBlICE9IFhETUFfVFlQRV9WRE1BKSB7CisJCWlmIChkbWFfY3RybF9yZWFk KGNoYW4sIFhJTElOWF9ETUFfUkVHX0RNQVNSKSAmCisJCSAgICBYSUxJTlhfRE1BX0RNQVNSX1NH X01BU0spCisJCQljaGFuLT5oYXNfc2cgPSB0cnVlOworCQlkZXZfZGJnKGNoYW4tPmRldiwgImNo ICVkOiBTRyAlc1xuIiwgY2hhbi0+aWQsCisJCQljaGFuLT5oYXNfc2cgPyAiZW5hYmxlZCIgOiAi ZGlzYWJsZWQiKTsKKwl9CisKIAkvKiBJbml0aWFsaXplIHRoZSB0YXNrbGV0ICovCiAJdGFza2xl dF9pbml0KCZjaGFuLT50YXNrbGV0LCB4aWxpbnhfZG1hX2RvX3Rhc2tsZXQsCiAJCQkodW5zaWdu ZWQgbG9uZyljaGFuKTsKQEAgLTI2MzEsNyArMjYzOCw2IEBAIHN0YXRpYyBpbnQgeGlsaW54X2Rt YV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCQlyZXR1cm4gUFRSX0VSUih4 ZGV2LT5yZWdzKTsKIAogCS8qIFJldHJpZXZlIHRoZSBETUEgZW5naW5lIHByb3BlcnRpZXMgZnJv bSB0aGUgZGV2aWNlIHRyZWUgKi8KLQl4ZGV2LT5oYXNfc2cgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jv b2wobm9kZSwgInhsbngsaW5jbHVkZS1zZyIpOwogCXhkZXYtPm1heF9idWZmZXJfbGVuID0gR0VO TUFTSyhYSUxJTlhfRE1BX01BWF9UUkFOU19MRU5fTUFYIC0gMSwgMCk7CiAKIAlpZiAoeGRldi0+ ZG1hX2NvbmZpZy0+ZG1hdHlwZSA9PSBYRE1BX1RZUEVfQVhJRE1BKSB7Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: andrea.merello@gmail.com (Andrea Merello) Date: Fri, 7 Sep 2018 08:25:00 +0200 Subject: [PATCH v5 5/7] dmaengine: xilinx_dma: autodetect whether the HW supports scatter-gather In-Reply-To: <20180907062502.8241-1-andrea.merello@gmail.com> References: <20180907062502.8241-1-andrea.merello@gmail.com> Message-ID: <20180907062502.8241-5-andrea.merello@gmail.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org The AXIDMA and CDMA HW can be either direct-access or scatter-gather version. These are SW incompatible. The driver can handle both versions: a DT property was used to tell the driver whether to assume the HW is in scatter-gather mode. This patch makes the driver to autodetect this information. The DT property is not required anymore. No changes for VDMA. Cc: Rob Herring Cc: Mark Rutland Cc: devicetree at vger.kernel.org Cc: Radhey Shyam Pandey Signed-off-by: Andrea Merello Reviewed-by: Radhey Shyam Pandey --- Changes in v2: - autodetect only in !VDMA case Changes in v3: - cc DT maintainers/ML Changes in v4: - fix typos in commit message Changes in v5: None --- drivers/dma/xilinx/xilinx_dma.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/dma/xilinx/xilinx_dma.c b/drivers/dma/xilinx/xilinx_dma.c index b17f24e4ec35..78d0f2f8225e 100644 --- a/drivers/dma/xilinx/xilinx_dma.c +++ b/drivers/dma/xilinx/xilinx_dma.c @@ -86,6 +86,7 @@ #define XILINX_DMA_DMASR_DMA_DEC_ERR BIT(6) #define XILINX_DMA_DMASR_DMA_SLAVE_ERR BIT(5) #define XILINX_DMA_DMASR_DMA_INT_ERR BIT(4) +#define XILINX_DMA_DMASR_SG_MASK BIT(3) #define XILINX_DMA_DMASR_IDLE BIT(1) #define XILINX_DMA_DMASR_HALTED BIT(0) #define XILINX_DMA_DMASR_DELAY_MASK GENMASK(31, 24) @@ -407,7 +408,6 @@ struct xilinx_dma_config { * @dev: Device Structure * @common: DMA device structure * @chan: Driver specific DMA channel - * @has_sg: Specifies whether Scatter-Gather is present or not * @mcdma: Specifies whether Multi-Channel is present or not * @flush_on_fsync: Flush on frame sync * @ext_addr: Indicates 64 bit addressing is supported by dma device @@ -427,7 +427,6 @@ struct xilinx_dma_device { struct device *dev; struct dma_device common; struct xilinx_dma_chan *chan[XILINX_DMA_MAX_CHANS_PER_DEVICE]; - bool has_sg; bool mcdma; u32 flush_on_fsync; bool ext_addr; @@ -2400,7 +2399,6 @@ static int xilinx_dma_chan_probe(struct xilinx_dma_device *xdev, chan->dev = xdev->dev; chan->xdev = xdev; - chan->has_sg = xdev->has_sg; chan->desc_pendingcount = 0x0; chan->ext_addr = xdev->ext_addr; /* This variable ensures that descriptors are not @@ -2493,6 +2491,15 @@ static int xilinx_dma_chan_probe(struct xilinx_dma_device *xdev, chan->stop_transfer = xilinx_dma_stop_transfer; } + /* check if SG is enabled (only for AXIDMA and CDMA) */ + if (xdev->dma_config->dmatype != XDMA_TYPE_VDMA) { + if (dma_ctrl_read(chan, XILINX_DMA_REG_DMASR) & + XILINX_DMA_DMASR_SG_MASK) + chan->has_sg = true; + dev_dbg(chan->dev, "ch %d: SG %s\n", chan->id, + chan->has_sg ? "enabled" : "disabled"); + } + /* Initialize the tasklet */ tasklet_init(&chan->tasklet, xilinx_dma_do_tasklet, (unsigned long)chan); @@ -2631,7 +2638,6 @@ static int xilinx_dma_probe(struct platform_device *pdev) return PTR_ERR(xdev->regs); /* Retrieve the DMA engine properties from the device tree */ - xdev->has_sg = of_property_read_bool(node, "xlnx,include-sg"); xdev->max_buffer_len = GENMASK(XILINX_DMA_MAX_TRANS_LEN_MAX - 1, 0); if (xdev->dma_config->dmatype == XDMA_TYPE_AXIDMA) { -- 2.17.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrea Merello Subject: [PATCH v5 5/7] dmaengine: xilinx_dma: autodetect whether the HW supports scatter-gather Date: Fri, 7 Sep 2018 08:25:00 +0200 Message-ID: <20180907062502.8241-5-andrea.merello@gmail.com> References: <20180907062502.8241-1-andrea.merello@gmail.com> Return-path: In-Reply-To: <20180907062502.8241-1-andrea.merello@gmail.com> Sender: linux-kernel-owner@vger.kernel.org To: vkoul@kernel.org, dan.j.williams@intel.com, michal.simek@xilinx.com, appana.durga.rao@xilinx.com, dmaengine@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, robh+dt@kernel.org, mark.rutland@arm.com, devicetree@vger.kernel.org, radhey.shyam.pandey@xilinx.com, Andrea Merello List-Id: devicetree@vger.kernel.org The AXIDMA and CDMA HW can be either direct-access or scatter-gather version. These are SW incompatible. The driver can handle both versions: a DT property was used to tell the driver whether to assume the HW is in scatter-gather mode. This patch makes the driver to autodetect this information. The DT property is not required anymore. No changes for VDMA. Cc: Rob Herring Cc: Mark Rutland Cc: devicetree@vger.kernel.org Cc: Radhey Shyam Pandey Signed-off-by: Andrea Merello Reviewed-by: Radhey Shyam Pandey --- Changes in v2: - autodetect only in !VDMA case Changes in v3: - cc DT maintainers/ML Changes in v4: - fix typos in commit message Changes in v5: None --- drivers/dma/xilinx/xilinx_dma.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/dma/xilinx/xilinx_dma.c b/drivers/dma/xilinx/xilinx_dma.c index b17f24e4ec35..78d0f2f8225e 100644 --- a/drivers/dma/xilinx/xilinx_dma.c +++ b/drivers/dma/xilinx/xilinx_dma.c @@ -86,6 +86,7 @@ #define XILINX_DMA_DMASR_DMA_DEC_ERR BIT(6) #define XILINX_DMA_DMASR_DMA_SLAVE_ERR BIT(5) #define XILINX_DMA_DMASR_DMA_INT_ERR BIT(4) +#define XILINX_DMA_DMASR_SG_MASK BIT(3) #define XILINX_DMA_DMASR_IDLE BIT(1) #define XILINX_DMA_DMASR_HALTED BIT(0) #define XILINX_DMA_DMASR_DELAY_MASK GENMASK(31, 24) @@ -407,7 +408,6 @@ struct xilinx_dma_config { * @dev: Device Structure * @common: DMA device structure * @chan: Driver specific DMA channel - * @has_sg: Specifies whether Scatter-Gather is present or not * @mcdma: Specifies whether Multi-Channel is present or not * @flush_on_fsync: Flush on frame sync * @ext_addr: Indicates 64 bit addressing is supported by dma device @@ -427,7 +427,6 @@ struct xilinx_dma_device { struct device *dev; struct dma_device common; struct xilinx_dma_chan *chan[XILINX_DMA_MAX_CHANS_PER_DEVICE]; - bool has_sg; bool mcdma; u32 flush_on_fsync; bool ext_addr; @@ -2400,7 +2399,6 @@ static int xilinx_dma_chan_probe(struct xilinx_dma_device *xdev, chan->dev = xdev->dev; chan->xdev = xdev; - chan->has_sg = xdev->has_sg; chan->desc_pendingcount = 0x0; chan->ext_addr = xdev->ext_addr; /* This variable ensures that descriptors are not @@ -2493,6 +2491,15 @@ static int xilinx_dma_chan_probe(struct xilinx_dma_device *xdev, chan->stop_transfer = xilinx_dma_stop_transfer; } + /* check if SG is enabled (only for AXIDMA and CDMA) */ + if (xdev->dma_config->dmatype != XDMA_TYPE_VDMA) { + if (dma_ctrl_read(chan, XILINX_DMA_REG_DMASR) & + XILINX_DMA_DMASR_SG_MASK) + chan->has_sg = true; + dev_dbg(chan->dev, "ch %d: SG %s\n", chan->id, + chan->has_sg ? "enabled" : "disabled"); + } + /* Initialize the tasklet */ tasklet_init(&chan->tasklet, xilinx_dma_do_tasklet, (unsigned long)chan); @@ -2631,7 +2638,6 @@ static int xilinx_dma_probe(struct platform_device *pdev) return PTR_ERR(xdev->regs); /* Retrieve the DMA engine properties from the device tree */ - xdev->has_sg = of_property_read_bool(node, "xlnx,include-sg"); xdev->max_buffer_len = GENMASK(XILINX_DMA_MAX_TRANS_LEN_MAX - 1, 0); if (xdev->dma_config->dmatype == XDMA_TYPE_AXIDMA) { -- 2.17.1