All of lore.kernel.org
 help / color / mirror / Atom feed
From: Philipp Zabel <p.zabel@pengutronix.de>
To: linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	Grant Likely <grant.likely@secretlab.ca>,
	Rob Herring <rob.herring@calxeda.com>,
	Paul Gortmaker <paul.gortmaker@windriver.com>,
	Shawn Guo <shawn.guo@linaro.org>,
	Richard Zhao <richard.zhao@freescale.com>,
	Huang Shijie <shijie8@gmail.com>,
	Dong Aisheng <dong.aisheng@linaro.org>,
	kernel@pengutronix.de, devicetree-discuss@lists.ozlabs.org
Cc: Philipp Zabel <p.zabel@pengutronix.de>
Subject: [PATCH v2 4/9] iram_alloc: store the virt and phys mem address in gen_pool chunks
Date: Fri, 31 Aug 2012 11:26:59 +0200	[thread overview]
Message-ID: <1346405224-20399-5-git-send-email-p.zabel@pengutronix.de> (raw)
In-Reply-To: <1346405224-20399-1-git-send-email-p.zabel@pengutronix.de>

This improves the symmetry of iram_alloc and iram_free in that
iram_free has to be called with the virtual address now.
Also, gen_pool_virt_to_phys is now functional.

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
---
 arch/arm/plat-mxc/iram_alloc.c |   39 ++++++++++++++++++++++-----------------
 1 file changed, 22 insertions(+), 17 deletions(-)

diff --git a/arch/arm/plat-mxc/iram_alloc.c b/arch/arm/plat-mxc/iram_alloc.c
index 673deb4..343e96d 100644
--- a/arch/arm/plat-mxc/iram_alloc.c
+++ b/arch/arm/plat-mxc/iram_alloc.c
@@ -26,25 +26,22 @@
 #include <linux/platform_device.h>
 #include <mach/iram.h>
 
-static unsigned long iram_phys_base;
-static void __iomem *iram_virt_base;
 static struct gen_pool *iram_pool;
 
-static inline void __iomem *iram_phys_to_virt(unsigned long p)
-{
-	return iram_virt_base + (p - iram_phys_base);
-}
-
 void __iomem *iram_alloc(unsigned int size, unsigned long *dma_addr)
 {
+	unsigned long virt;
+
 	if (!iram_pool)
 		return NULL;
 
-	*dma_addr = gen_pool_alloc(iram_pool, size);
+	virt = gen_pool_alloc(iram_pool, size);
 	pr_debug("iram alloc - %dB@0x%lX\n", size, *dma_addr);
-	if (!*dma_addr)
+	if (!virt)
 		return NULL;
-	return iram_phys_to_virt(*dma_addr);
+
+	*dma_addr = gen_pool_virt_to_phys(iram_pool, virt);
+	return (void __iomem *)virt;
 }
 EXPORT_SYMBOL(iram_alloc);
 
@@ -59,29 +56,37 @@ EXPORT_SYMBOL(iram_free);
 
 static int __devinit iram_probe(struct platform_device *pdev)
 {
+	void __iomem *virt_base;
 	struct resource *res;
 	unsigned long size;
+	int ret;
 
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	if (!res)
 		return -EINVAL;
 
-	if (iram_phys_base)
+	if (iram_pool)
 		return -EBUSY;
 
-	iram_phys_base = res->start;
 	size = resource_size(res);
 
+	virt_base = devm_ioremap(&pdev->dev, res->start, size);
+	if (!virt_base)
+		return -ENOMEM;
+
 	iram_pool = gen_pool_create(PAGE_SHIFT, -1);
 	if (!iram_pool)
 		return -ENOMEM;
 
-	gen_pool_add(iram_pool, res->start, size, -1);
-	iram_virt_base = ioremap(iram_phys_base, size);
-	if (!iram_virt_base)
-		return -EIO;
+	ret = gen_pool_add_virt(iram_pool, (unsigned long)virt_base,
+				res->start, size, -1);
+	if (ret < 0) {
+		gen_pool_destroy(iram_pool);
+		iram_pool = NULL;
+		return ret;
+	}
 
-	pr_debug("i.MX IRAM pool: %ld KB@0x%p\n", size / 1024, iram_virt_base);
+	pr_debug("i.MX IRAM pool: %ld KB@0x%p\n", size / 1024, virt_base);
 	return 0;
 }
 
-- 
1.7.10.4


WARNING: multiple messages have this Message-ID (diff)
From: p.zabel@pengutronix.de (Philipp Zabel)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 4/9] iram_alloc: store the virt and phys mem address in gen_pool chunks
Date: Fri, 31 Aug 2012 11:26:59 +0200	[thread overview]
Message-ID: <1346405224-20399-5-git-send-email-p.zabel@pengutronix.de> (raw)
In-Reply-To: <1346405224-20399-1-git-send-email-p.zabel@pengutronix.de>

This improves the symmetry of iram_alloc and iram_free in that
iram_free has to be called with the virtual address now.
Also, gen_pool_virt_to_phys is now functional.

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
---
 arch/arm/plat-mxc/iram_alloc.c |   39 ++++++++++++++++++++++-----------------
 1 file changed, 22 insertions(+), 17 deletions(-)

diff --git a/arch/arm/plat-mxc/iram_alloc.c b/arch/arm/plat-mxc/iram_alloc.c
index 673deb4..343e96d 100644
--- a/arch/arm/plat-mxc/iram_alloc.c
+++ b/arch/arm/plat-mxc/iram_alloc.c
@@ -26,25 +26,22 @@
 #include <linux/platform_device.h>
 #include <mach/iram.h>
 
-static unsigned long iram_phys_base;
-static void __iomem *iram_virt_base;
 static struct gen_pool *iram_pool;
 
-static inline void __iomem *iram_phys_to_virt(unsigned long p)
-{
-	return iram_virt_base + (p - iram_phys_base);
-}
-
 void __iomem *iram_alloc(unsigned int size, unsigned long *dma_addr)
 {
+	unsigned long virt;
+
 	if (!iram_pool)
 		return NULL;
 
-	*dma_addr = gen_pool_alloc(iram_pool, size);
+	virt = gen_pool_alloc(iram_pool, size);
 	pr_debug("iram alloc - %dB at 0x%lX\n", size, *dma_addr);
-	if (!*dma_addr)
+	if (!virt)
 		return NULL;
-	return iram_phys_to_virt(*dma_addr);
+
+	*dma_addr = gen_pool_virt_to_phys(iram_pool, virt);
+	return (void __iomem *)virt;
 }
 EXPORT_SYMBOL(iram_alloc);
 
@@ -59,29 +56,37 @@ EXPORT_SYMBOL(iram_free);
 
 static int __devinit iram_probe(struct platform_device *pdev)
 {
+	void __iomem *virt_base;
 	struct resource *res;
 	unsigned long size;
+	int ret;
 
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	if (!res)
 		return -EINVAL;
 
-	if (iram_phys_base)
+	if (iram_pool)
 		return -EBUSY;
 
-	iram_phys_base = res->start;
 	size = resource_size(res);
 
+	virt_base = devm_ioremap(&pdev->dev, res->start, size);
+	if (!virt_base)
+		return -ENOMEM;
+
 	iram_pool = gen_pool_create(PAGE_SHIFT, -1);
 	if (!iram_pool)
 		return -ENOMEM;
 
-	gen_pool_add(iram_pool, res->start, size, -1);
-	iram_virt_base = ioremap(iram_phys_base, size);
-	if (!iram_virt_base)
-		return -EIO;
+	ret = gen_pool_add_virt(iram_pool, (unsigned long)virt_base,
+				res->start, size, -1);
+	if (ret < 0) {
+		gen_pool_destroy(iram_pool);
+		iram_pool = NULL;
+		return ret;
+	}
 
-	pr_debug("i.MX IRAM pool: %ld KB at 0x%p\n", size / 1024, iram_virt_base);
+	pr_debug("i.MX IRAM pool: %ld KB@0x%p\n", size / 1024, virt_base);
 	return 0;
 }
 
-- 
1.7.10.4

  parent reply	other threads:[~2012-08-31  9:29 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-31  9:26 [PATCH v2 0/9] Add device tree support for on-chip SRAM Philipp Zabel
2012-08-31  9:26 ` Philipp Zabel
2012-08-31  9:26 ` [PATCH v2 1/9] ARM i.MX: Switch IRAM allocator to device tree initialization Philipp Zabel
2012-08-31  9:26   ` Philipp Zabel
2012-08-31  9:26 ` [PATCH v2 2/9] ARM i.MX53: Add OCRAM to device tree Philipp Zabel
2012-08-31  9:26   ` Philipp Zabel
2012-08-31  9:26 ` [PATCH v2 3/9] ARM i.MX6: " Philipp Zabel
2012-08-31  9:26   ` Philipp Zabel
2012-08-31  9:26 ` Philipp Zabel [this message]
2012-08-31  9:26   ` [PATCH v2 4/9] iram_alloc: store the virt and phys mem address in gen_pool chunks Philipp Zabel
2012-08-31  9:27 ` [PATCH v2 5/9] genalloc: add a global pool list, allow to find pools by phys address Philipp Zabel
2012-08-31  9:27   ` Philipp Zabel
2012-09-03  2:09   ` Shawn Guo
2012-09-03  2:09     ` Shawn Guo
2012-09-03  2:09     ` Shawn Guo
2012-08-31  9:27 ` [PATCH v2 6/9] misc: Generic on-chip SRAM allocation driver Philipp Zabel
2012-08-31  9:27   ` Philipp Zabel
2012-08-31  9:37   ` Jan Lübbe
2012-08-31  9:37     ` Jan Lübbe
2012-08-31  9:40     ` Shilimkar, Santosh
2012-08-31  9:40       ` Shilimkar, Santosh
2012-09-03  2:19   ` Shawn Guo
2012-09-03  2:19     ` Shawn Guo
2012-08-31  9:27 ` [PATCH v2 7/9] ARM: i.MX53: use generic on-chip SRAM allocator driver for OCRAM Philipp Zabel
2012-08-31  9:27   ` Philipp Zabel
2012-08-31  9:27 ` [PATCH v2 8/9] ARM: i.MX6: " Philipp Zabel
2012-08-31  9:27   ` Philipp Zabel
2012-08-31  9:27 ` [PATCH v2 9/9] ARM i.MX: remove IRAM_ALLOC facility Philipp Zabel
2012-08-31  9:27   ` Philipp Zabel
2012-09-03  1:53 ` [PATCH v2 0/9] Add device tree support for on-chip SRAM Shawn Guo
2012-09-03  1:53   ` Shawn Guo
2012-09-03 15:42   ` Philipp Zabel
2012-09-03 15:42     ` Philipp Zabel

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=1346405224-20399-5-git-send-email-p.zabel@pengutronix.de \
    --to=p.zabel@pengutronix.de \
    --cc=devicetree-discuss@lists.ozlabs.org \
    --cc=dong.aisheng@linaro.org \
    --cc=grant.likely@secretlab.ca \
    --cc=kernel@pengutronix.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=paul.gortmaker@windriver.com \
    --cc=richard.zhao@freescale.com \
    --cc=rob.herring@calxeda.com \
    --cc=shawn.guo@linaro.org \
    --cc=shijie8@gmail.com \
    /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.