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
next prev 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: linkBe 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.