All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Ujfalusi <peter.ujfalusi@ti.com>
To: <vkoul@kernel.org>, <nm@ti.com>, <ssantosh@kernel.org>,
	<robh+dt@kernel.org>
Cc: <dan.j.williams@intel.com>, <t-kristo@ti.com>,
	<linux-arm-kernel@lists.infradead.org>,
	<linux-kernel@vger.kernel.org>, <devicetree@vger.kernel.org>,
	<dmaengine@vger.kernel.org>, <vigneshr@ti.com>,
	<grygorii.strashko@ti.com>
Subject: Re: [PATCH v3 16/20] soc: ti: k3-ringacc: add AM64 DMA rings support.
Date: Fri, 11 Dec 2020 15:46:38 +0200	[thread overview]
Message-ID: <a1f83b16-c1ce-630e-3410-738b80a92741@ti.com> (raw)
In-Reply-To: <20201208090440.31792-17-peter.ujfalusi@ti.com>



On 08/12/2020 11.04, Peter Ujfalusi wrote:
> From: Grygorii Strashko <grygorii.strashko@ti.com>
> 
> The DMAs in AM64 have built in rings compared to AM654/J721e/J7200 where a
> separate and generic ringacc is used.
> 
> The ring SW interface is similar to ringacc with some major architectural
> differences, like
> 
> They are part of the DMA (BCDMA or PKTDMA).
> 
> They are dual mode rings are modeled as pair of Rings objects which has
> common configuration and memory buffer, but separate real-time control
> register sets for each direction mem2dev (forward) and dev2mem (reverse).
> 
> The ringacc driver must be initialized for DMA rings use with
> k3_ringacc_dmarings_init() as it is not an independent device as ringacc
> is.
> 
> AM64 rings must be requested only using k3_ringacc_request_rings_pair(),
> and forward ring must always be initialized/configured. After this any
> other Ringacc APIs can be used without any callers changes.
> 
> Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
> ---
>  drivers/soc/ti/k3-ringacc.c       | 325 +++++++++++++++++++++++++++++-
>  include/linux/soc/ti/k3-ringacc.h |  17 ++
>  2 files changed, 335 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/soc/ti/k3-ringacc.c b/drivers/soc/ti/k3-ringacc.c
> index 119164abcb41..c88c305ba367 100644
> --- a/drivers/soc/ti/k3-ringacc.c
> +++ b/drivers/soc/ti/k3-ringacc.c

...

> +struct k3_ringacc *k3_ringacc_dmarings_init(struct platform_device *pdev,
> +					    struct k3_ringacc_init_data *data)
> +{
> +	struct device *dev = &pdev->dev;
> +	struct k3_ringacc *ringacc;
> +	void __iomem *base_rt;
> +	struct resource *res;
> +	int i;
> +
> +	ringacc = devm_kzalloc(dev, sizeof(*ringacc), GFP_KERNEL);
> +	if (!ringacc)
> +		return ERR_PTR(-ENOMEM);
> +
> +	ringacc->dev = dev;
> +	ringacc->dma_rings = true;
> +	ringacc->num_rings = data->num_rings;
> +	ringacc->tisci = data->tisci;
> +	ringacc->tisci_dev_id = data->tisci_dev_id;
> +
> +	mutex_init(&ringacc->req_lock);
> +
> +	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "ringrt");
> +	base_rt = devm_ioremap_resource(dev, res);
> +	if (IS_ERR(base_rt))
> +		return base_rt;

this must have been:
	return ERR_CAST(base_rt);

> +
> +	ringacc->rings = devm_kzalloc(dev,
> +				      sizeof(*ringacc->rings) *
> +				      ringacc->num_rings * 2,
> +				      GFP_KERNEL);
> +	ringacc->rings_inuse = devm_kcalloc(dev,
> +					    BITS_TO_LONGS(ringacc->num_rings),
> +					    sizeof(unsigned long), GFP_KERNEL);
> +
> +	if (!ringacc->rings || !ringacc->rings_inuse)
> +		return ERR_PTR(-ENOMEM);
> +
> +	for (i = 0; i < ringacc->num_rings; i++) {
> +		struct k3_ring *ring = &ringacc->rings[i];
> +
> +		ring->rt = base_rt + K3_DMARING_RT_REGS_STEP * i;
> +		ring->parent = ringacc;
> +		ring->ring_id = i;
> +		ring->proxy_id = K3_RINGACC_PROXY_NOT_USED;
> +
> +		ring = &ringacc->rings[ringacc->num_rings + i];
> +		ring->rt = base_rt + K3_DMARING_RT_REGS_STEP * i +
> +			   K3_DMARING_RT_REGS_REVERSE_OFS;
> +		ring->parent = ringacc;
> +		ring->ring_id = i;
> +		ring->proxy_id = K3_RINGACC_PROXY_NOT_USED;
> +		ring->flags = K3_RING_FLAG_REVERSE;
> +	}
> +
> +	ringacc->tisci_ring_ops = &ringacc->tisci->ops.rm_ring_ops;
> +
> +	dev_info(dev, "Number of rings: %u\n", ringacc->num_rings);
> +
> +	return ringacc;
> +}

- Péter

Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

WARNING: multiple messages have this Message-ID (diff)
From: Peter Ujfalusi <peter.ujfalusi@ti.com>
To: <vkoul@kernel.org>, <nm@ti.com>, <ssantosh@kernel.org>,
	<robh+dt@kernel.org>
Cc: devicetree@vger.kernel.org, grygorii.strashko@ti.com,
	vigneshr@ti.com, linux-kernel@vger.kernel.org, t-kristo@ti.com,
	dmaengine@vger.kernel.org, dan.j.williams@intel.com,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v3 16/20] soc: ti: k3-ringacc: add AM64 DMA rings support.
Date: Fri, 11 Dec 2020 15:46:38 +0200	[thread overview]
Message-ID: <a1f83b16-c1ce-630e-3410-738b80a92741@ti.com> (raw)
In-Reply-To: <20201208090440.31792-17-peter.ujfalusi@ti.com>



On 08/12/2020 11.04, Peter Ujfalusi wrote:
> From: Grygorii Strashko <grygorii.strashko@ti.com>
> 
> The DMAs in AM64 have built in rings compared to AM654/J721e/J7200 where a
> separate and generic ringacc is used.
> 
> The ring SW interface is similar to ringacc with some major architectural
> differences, like
> 
> They are part of the DMA (BCDMA or PKTDMA).
> 
> They are dual mode rings are modeled as pair of Rings objects which has
> common configuration and memory buffer, but separate real-time control
> register sets for each direction mem2dev (forward) and dev2mem (reverse).
> 
> The ringacc driver must be initialized for DMA rings use with
> k3_ringacc_dmarings_init() as it is not an independent device as ringacc
> is.
> 
> AM64 rings must be requested only using k3_ringacc_request_rings_pair(),
> and forward ring must always be initialized/configured. After this any
> other Ringacc APIs can be used without any callers changes.
> 
> Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
> ---
>  drivers/soc/ti/k3-ringacc.c       | 325 +++++++++++++++++++++++++++++-
>  include/linux/soc/ti/k3-ringacc.h |  17 ++
>  2 files changed, 335 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/soc/ti/k3-ringacc.c b/drivers/soc/ti/k3-ringacc.c
> index 119164abcb41..c88c305ba367 100644
> --- a/drivers/soc/ti/k3-ringacc.c
> +++ b/drivers/soc/ti/k3-ringacc.c

...

> +struct k3_ringacc *k3_ringacc_dmarings_init(struct platform_device *pdev,
> +					    struct k3_ringacc_init_data *data)
> +{
> +	struct device *dev = &pdev->dev;
> +	struct k3_ringacc *ringacc;
> +	void __iomem *base_rt;
> +	struct resource *res;
> +	int i;
> +
> +	ringacc = devm_kzalloc(dev, sizeof(*ringacc), GFP_KERNEL);
> +	if (!ringacc)
> +		return ERR_PTR(-ENOMEM);
> +
> +	ringacc->dev = dev;
> +	ringacc->dma_rings = true;
> +	ringacc->num_rings = data->num_rings;
> +	ringacc->tisci = data->tisci;
> +	ringacc->tisci_dev_id = data->tisci_dev_id;
> +
> +	mutex_init(&ringacc->req_lock);
> +
> +	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "ringrt");
> +	base_rt = devm_ioremap_resource(dev, res);
> +	if (IS_ERR(base_rt))
> +		return base_rt;

this must have been:
	return ERR_CAST(base_rt);

> +
> +	ringacc->rings = devm_kzalloc(dev,
> +				      sizeof(*ringacc->rings) *
> +				      ringacc->num_rings * 2,
> +				      GFP_KERNEL);
> +	ringacc->rings_inuse = devm_kcalloc(dev,
> +					    BITS_TO_LONGS(ringacc->num_rings),
> +					    sizeof(unsigned long), GFP_KERNEL);
> +
> +	if (!ringacc->rings || !ringacc->rings_inuse)
> +		return ERR_PTR(-ENOMEM);
> +
> +	for (i = 0; i < ringacc->num_rings; i++) {
> +		struct k3_ring *ring = &ringacc->rings[i];
> +
> +		ring->rt = base_rt + K3_DMARING_RT_REGS_STEP * i;
> +		ring->parent = ringacc;
> +		ring->ring_id = i;
> +		ring->proxy_id = K3_RINGACC_PROXY_NOT_USED;
> +
> +		ring = &ringacc->rings[ringacc->num_rings + i];
> +		ring->rt = base_rt + K3_DMARING_RT_REGS_STEP * i +
> +			   K3_DMARING_RT_REGS_REVERSE_OFS;
> +		ring->parent = ringacc;
> +		ring->ring_id = i;
> +		ring->proxy_id = K3_RINGACC_PROXY_NOT_USED;
> +		ring->flags = K3_RING_FLAG_REVERSE;
> +	}
> +
> +	ringacc->tisci_ring_ops = &ringacc->tisci->ops.rm_ring_ops;
> +
> +	dev_info(dev, "Number of rings: %u\n", ringacc->num_rings);
> +
> +	return ringacc;
> +}

- Péter

Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2020-12-11 13:48 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-08  9:04 [PATCH v3 00/20] dmaengine/soc: k3-udma: Add support for BCDMA and PKTDMA Peter Ujfalusi
2020-12-08  9:04 ` Peter Ujfalusi
2020-12-08  9:04 ` [PATCH v3 01/20] dmaengine: ti: k3-udma: Correct normal channel offset when uchan_cnt is not 0 Peter Ujfalusi
2020-12-08  9:04   ` Peter Ujfalusi
2020-12-08  9:04 ` [PATCH v3 02/20] dmaengine: ti: k3-udma: Wait for peer teardown completion if supported Peter Ujfalusi
2020-12-08  9:04   ` Peter Ujfalusi
2020-12-08  9:04 ` [PATCH v3 03/20] dmaengine: ti: k3-udma: Add support for second resource range from sysfw Peter Ujfalusi
2020-12-08  9:04   ` Peter Ujfalusi
2020-12-08  9:04 ` [PATCH v3 04/20] dmaengine: ti: k3-udma-glue: Add function to get device pointer for DMA API Peter Ujfalusi
2020-12-08  9:04   ` Peter Ujfalusi
2020-12-08 11:52   ` Grygorii Strashko
2020-12-08 11:52     ` Grygorii Strashko
2020-12-08  9:04 ` [PATCH v3 05/20] dmaengine: ti: k3-udma-glue: Get the ringacc from udma_dev Peter Ujfalusi
2020-12-08  9:04   ` Peter Ujfalusi
2020-12-08 11:52   ` Grygorii Strashko
2020-12-08 11:52     ` Grygorii Strashko
2020-12-08  9:04 ` [PATCH v3 06/20] dmaengine: ti: k3-udma-glue: Configure the dma_dev for rings Peter Ujfalusi
2020-12-08  9:04   ` Peter Ujfalusi
2020-12-08 11:53   ` Grygorii Strashko
2020-12-08 11:53     ` Grygorii Strashko
2020-12-08  9:04 ` [PATCH v3 07/20] dmaengine: of-dma: Add support for optional router configuration callback Peter Ujfalusi
2020-12-08  9:04   ` Peter Ujfalusi
2020-12-08  9:04 ` [PATCH v3 08/20] dmaengine: Add support for per channel coherency handling Peter Ujfalusi
2020-12-08  9:04   ` Peter Ujfalusi
2020-12-08  9:04 ` [PATCH v3 09/20] dmaengine: doc: client: Update for dmaengine_get_dma_device() usage Peter Ujfalusi
2020-12-08  9:04   ` Peter Ujfalusi
2020-12-08  9:04 ` [PATCH v3 10/20] dmaengine: dmatest: Use dmaengine_get_dma_device Peter Ujfalusi
2020-12-08  9:04   ` Peter Ujfalusi
2020-12-08  9:04 ` [PATCH v3 11/20] dt-bindings: dma: ti: Add document for K3 BCDMA Peter Ujfalusi
2020-12-08  9:04   ` Peter Ujfalusi
2020-12-10 13:59   ` Rob Herring
2020-12-10 13:59     ` Rob Herring
2020-12-08  9:04 ` [PATCH v3 12/20] dt-bindings: dma: ti: Add document for K3 PKTDMA Peter Ujfalusi
2020-12-08  9:04   ` Peter Ujfalusi
2020-12-10 14:00   ` Rob Herring
2020-12-10 14:00     ` Rob Herring
2020-12-08  9:04 ` [PATCH v3 13/20] dmaengine: ti: k3-psil: Extend psil_endpoint_config " Peter Ujfalusi
2020-12-08  9:04   ` Peter Ujfalusi
2020-12-08 11:55   ` Grygorii Strashko
2020-12-08 11:55     ` Grygorii Strashko
2020-12-08  9:04 ` [PATCH v3 14/20] dmaengine: ti: k3-psil: Add initial map for AM64 Peter Ujfalusi
2020-12-08  9:04   ` Peter Ujfalusi
2020-12-08  9:04 ` [PATCH v3 15/20] dmaengine: ti: Add support for k3 event routers Peter Ujfalusi
2020-12-08  9:04   ` Peter Ujfalusi
2020-12-08  9:04 ` [PATCH v3 16/20] soc: ti: k3-ringacc: add AM64 DMA rings support Peter Ujfalusi
2020-12-08  9:04   ` Peter Ujfalusi
2020-12-11 13:46   ` Peter Ujfalusi [this message]
2020-12-11 13:46     ` Peter Ujfalusi
2020-12-08  9:04 ` [PATCH v3 17/20] dmaengine: ti: k3-udma: Initial support for K3 BCDMA Peter Ujfalusi
2020-12-08  9:04   ` Peter Ujfalusi
2020-12-08  9:04 ` [PATCH v3 18/20] dmaengine: ti: k3-udma: Add support for BCDMA channel TPL handling Peter Ujfalusi
2020-12-08  9:04   ` Peter Ujfalusi
2020-12-08  9:04 ` [PATCH v3 19/20] dmaengine: ti: k3-udma: Initial support for K3 PKTDMA Peter Ujfalusi
2020-12-08  9:04   ` Peter Ujfalusi
2020-12-08  9:04 ` [PATCH v3 20/20] dmaengine: ti: k3-udma-glue: Add " Peter Ujfalusi
2020-12-08  9:04   ` Peter Ujfalusi
2020-12-11 16:24 ` [PATCH v3 00/20] dmaengine/soc: k3-udma: Add support for BCDMA and PKTDMA Vinod Koul
2020-12-11 16:24   ` Vinod Koul
2020-12-11 19:16   ` Peter Ujfalusi
2020-12-11 19:16     ` Peter Ujfalusi
2020-12-12  5:21     ` Vinod Koul
2020-12-12  5:21       ` Vinod Koul

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=a1f83b16-c1ce-630e-3410-738b80a92741@ti.com \
    --to=peter.ujfalusi@ti.com \
    --cc=dan.j.williams@intel.com \
    --cc=devicetree@vger.kernel.org \
    --cc=dmaengine@vger.kernel.org \
    --cc=grygorii.strashko@ti.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nm@ti.com \
    --cc=robh+dt@kernel.org \
    --cc=ssantosh@kernel.org \
    --cc=t-kristo@ti.com \
    --cc=vigneshr@ti.com \
    --cc=vkoul@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.