From: <frederic.chen-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
To: hans.verkuil-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org,
laurent.pinchart+renesas-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org,
tfiga-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org,
matthias.bgg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
mchehab-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
Cc: shik-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Sean.Cheng-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org,
Rynn.Wu-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org,
Allan.Yang-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org,
srv_heupstream-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org,
holmes.chiou-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org,
suleiman-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org,
Jerry-ch.Chen-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org,
jungo.lin-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org,
sj.huang-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org,
yuzhao-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org,
linux-mediatek-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
zwisler-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org,
christie.yu-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org,
frederic.chen-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
linux-media-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: [RFC PATCH V2 5/6] remoteproc/mediatek: add SCP's shared dma pool support for mt8183
Date: Mon, 8 Jul 2019 19:04:59 +0800 [thread overview]
Message-ID: <20190708110500.7242-6-frederic.chen@mediatek.com> (raw)
In-Reply-To: <20190708110500.7242-1-frederic.chen-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
From: Frederic Chen <frederic.chen-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
This patch uses of_reserved_mem_device_init_by_idx() to hook the
scp device to DMA mapping API to provide a shared dma pool of
SCP DMA buffers for SCP's client such as DIP and ISP Pass 1
drivers.
Signed-off-by: Frederic Chen <frederic.chen-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
---
drivers/remoteproc/mtk_scp.c | 54 ++++++++++++++++++++++--------------
1 file changed, 33 insertions(+), 21 deletions(-)
diff --git a/drivers/remoteproc/mtk_scp.c b/drivers/remoteproc/mtk_scp.c
index 4c093dec52b9..0cffe4b63dba 100644
--- a/drivers/remoteproc/mtk_scp.c
+++ b/drivers/remoteproc/mtk_scp.c
@@ -4,12 +4,14 @@
#include <asm/barrier.h>
#include <linux/clk.h>
+#include <linux/dma-mapping.h>
#include <linux/err.h>
#include <linux/interrupt.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/of_address.h>
#include <linux/of_platform.h>
+#include <linux/of_reserved_mem.h>
#include <linux/platform_data/mtk_scp.h>
#include <linux/platform_device.h>
#include <linux/remoteproc.h>
@@ -487,29 +489,29 @@ EXPORT_SYMBOL_GPL(scp_get_reserve_mem_size);
static int scp_map_memory_region(struct mtk_scp *scp)
{
- struct device_node *node;
- struct resource r;
- int ret;
+ int ret, id;
- node = of_parse_phandle(scp->dev->of_node, "memory-region", 0);
- if (!node) {
- dev_err(scp->dev, "no memory-region specified\n");
- return -EINVAL;
+ ret = of_reserved_mem_device_init_by_idx(scp->dev, scp->dev->of_node,
+ 0);
+ if (ret) {
+ dev_err(scp->dev,
+ "%s:of_reserved_mem_device_init_by_idx(0) failed:(%d)",
+ __func__, ret);
+ return -ENOMEM;
}
- ret = of_address_to_resource(node, 0, &r);
- if (ret)
- return ret;
+ /* Pre-allocate the working buffers */
+ scp->dram_size = MAX_CODE_SIZE;
+ for (id = 0; id < SCP_NUMS_MEM_ID; id++)
+ scp->dram_size += scp_reserve_mblock[id].size;
- scp->phys_addr = r.start;
- scp->dram_size = resource_size(&r);
- scp->cpu_addr =
- devm_ioremap_wc(scp->dev, scp->phys_addr, scp->dram_size);
+ scp->cpu_addr = dma_alloc_coherent(scp->dev, scp->dram_size,
+ &scp->phys_addr, GFP_KERNEL);
if (!scp->cpu_addr) {
- dev_err(scp->dev, "unable to map memory region: %pa+%zx\n",
- &r.start, scp->dram_size);
- return -EBUSY;
+ dev_err(scp->dev, "unable to pre-allocate memory for SCP: %zx\n",
+ scp->dram_size);
+ return -ENOMEM;
}
#if SCP_RESERVED_MEM
@@ -519,6 +521,13 @@ static int scp_map_memory_region(struct mtk_scp *scp)
return 0;
}
+static void scp_unmap_memory_region(struct mtk_scp *scp)
+{
+ dma_free_coherent(scp->dev, scp->dram_size, scp->cpu_addr,
+ scp->phys_addr);
+ of_reserved_mem_device_release(scp->dev);
+}
+
static struct mtk_rpmsg_info mtk_scp_rpmsg_info = {
.send_ipi = scp_ipi_send,
.register_ipi = scp_ipi_register,
@@ -594,20 +603,20 @@ static int scp_probe(struct platform_device *pdev)
if (IS_ERR(scp->clk)) {
dev_err(dev, "Failed to get clock\n");
ret = PTR_ERR(scp->clk);
- goto free_rproc;
+ goto release_dev_mem;
}
ret = clk_prepare_enable(scp->clk);
if (ret) {
dev_err(dev, "failed to enable clocks\n");
- goto free_rproc;
+ goto release_dev_mem;
}
ret = scp_ipi_init(scp);
clk_disable_unprepare(scp->clk);
if (ret) {
dev_err(dev, "Failed to init ipi\n");
- goto free_rproc;
+ goto release_dev_mem;
}
/* register SCP initialization IPI */
@@ -617,7 +626,7 @@ static int scp_probe(struct platform_device *pdev)
scp);
if (ret) {
dev_err(dev, "Failed to register IPI_SCP_INIT\n");
- goto free_rproc;
+ goto release_dev_mem;
}
mutex_init(&scp->lock);
@@ -645,6 +654,8 @@ static int scp_probe(struct platform_device *pdev)
remove_subdev:
scp_remove_rpmsg_subdev(scp);
mutex_destroy(&scp->lock);
+release_dev_mem:
+ scp_unmap_memory_region(scp);
free_rproc:
rproc_free(rproc);
@@ -658,6 +669,7 @@ static int scp_remove(struct platform_device *pdev)
scp_remove_rpmsg_subdev(scp);
rproc_del(scp->rproc);
rproc_free(scp->rproc);
+ scp_unmap_memory_region(scp);
return 0;
}
--
2.18.0
next prev parent reply other threads:[~2019-07-08 11:04 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-08 11:04 [RFC PATCH V2 0/6] media: platform: Add support for Digital Image Processing (DIP) on mt8183 SoC frederic.chen-NuS5LvNUpcJWk0Htik3J/w
[not found] ` <20190708110500.7242-1-frederic.chen-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
2019-07-08 11:04 ` [RFC PATCH V2 1/6] dt-bindings: mt8183: Added DIP dt-bindings frederic.chen-NuS5LvNUpcJWk0Htik3J/w
2019-07-24 16:49 ` Rob Herring
2019-07-08 11:04 ` [RFC PATCH V2 2/6] dts: arm64: mt8183: Add DIP nodes frederic.chen-NuS5LvNUpcJWk0Htik3J/w
2019-07-08 11:04 ` [RFC PATCH V2 3/6] media: platform: Add Mediatek DIP driver KConfig frederic.chen-NuS5LvNUpcJWk0Htik3J/w
2019-07-08 11:04 ` [RFC PATCH V2 4/6] platform: mtk-isp: Add Mediatek DIP driver frederic.chen-NuS5LvNUpcJWk0Htik3J/w
[not found] ` <20190708110500.7242-5-frederic.chen-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
2019-07-31 7:10 ` Tomasz Figa
[not found] ` <20190731071014.GA43159-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2019-08-27 3:16 ` Frederic Chen
2019-08-30 7:14 ` Tomasz Figa
2019-07-08 11:04 ` frederic.chen-NuS5LvNUpcJWk0Htik3J/w [this message]
2019-07-08 11:05 ` [RFC PATCH V2 6/6] media: platform: mtk-mdp3: Add struct tuning_addr to identify user tuning data frederic.chen-NuS5LvNUpcJWk0Htik3J/w
2019-07-28 5:00 ` [RFC PATCH V2 0/6] media: platform: Add support for Digital Image Processing (DIP) on mt8183 SoC Tomasz Figa
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=20190708110500.7242-6-frederic.chen@mediatek.com \
--to=frederic.chen-nus5lvnupcjwk0htik3j/w@public.gmane.org \
--cc=Allan.Yang-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org \
--cc=Jerry-ch.Chen-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org \
--cc=Rynn.Wu-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org \
--cc=Sean.Cheng-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org \
--cc=christie.yu-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=hans.verkuil-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org \
--cc=holmes.chiou-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org \
--cc=jungo.lin-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org \
--cc=laurent.pinchart+renesas-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-media-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-mediatek-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=matthias.bgg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=mchehab-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=shik-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org \
--cc=sj.huang-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org \
--cc=srv_heupstream-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org \
--cc=suleiman-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org \
--cc=tfiga-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org \
--cc=yuzhao-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org \
--cc=zwisler-F7+t8E8rja9g9hUCZPvPmw@public.gmane.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).