From patchwork Fri Aug 31 09:26:56 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philipp Zabel X-Patchwork-Id: 1392221 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) by patchwork1.kernel.org (Postfix) with ESMTP id 255C43FDF6 for ; Fri, 31 Aug 2012 09:36:18 +0000 (UTC) Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.76 #1 (Red Hat Linux)) id 1T7NaB-0001Yp-Na; Fri, 31 Aug 2012 09:32:08 +0000 Received: from metis.ext.pengutronix.de ([2001:6f8:1178:4:290:27ff:fe1d:cc33]) by merlin.infradead.org with esmtps (Exim 4.76 #1 (Red Hat Linux)) id 1T7NVY-0007Fb-GO for linux-arm-kernel@lists.infradead.org; Fri, 31 Aug 2012 09:27:21 +0000 Received: from dude.hi.pengutronix.de ([10.1.0.7] helo=dude.pengutronix.de) by metis.ext.pengutronix.de with esmtp (Exim 4.72) (envelope-from ) id 1T7NVM-0000Gh-Rw; Fri, 31 Aug 2012 11:27:08 +0200 From: Philipp Zabel To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Grant Likely , Rob Herring , Paul Gortmaker , Shawn Guo , Richard Zhao , Huang Shijie , Dong Aisheng , kernel@pengutronix.de, devicetree-discuss@lists.ozlabs.org Subject: [PATCH v2 1/9] ARM i.MX: Switch IRAM allocator to device tree initialization Date: Fri, 31 Aug 2012 11:26:56 +0200 Message-Id: <1346405224-20399-2-git-send-email-p.zabel@pengutronix.de> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1346405224-20399-1-git-send-email-p.zabel@pengutronix.de> References: <1346405224-20399-1-git-send-email-p.zabel@pengutronix.de> X-SA-Exim-Connect-IP: 10.1.0.7 X-SA-Exim-Mail-From: p.zabel@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-arm-kernel@lists.infradead.org X-Spam-Note: CRM114 invocation failed X-Spam-Score: -2.1 (--) X-Spam-Report: SpamAssassin version 3.3.2 on merlin.infradead.org summary: Content analysis details: (-2.1 points) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 KHOP_BIG_TO_CC Sent to 10+ recipients instaed of Bcc or a list -0.2 RP_MATCHES_RCVD Envelope sender domain matches handover relay domain -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] Cc: Philipp Zabel X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: linux-arm-kernel-bounces@lists.infradead.org Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org Signed-off-by: Philipp Zabel --- arch/arm/plat-mxc/include/mach/iram.h | 6 ----- arch/arm/plat-mxc/iram_alloc.c | 44 ++++++++++++++++++++++++++++++--- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/arch/arm/plat-mxc/include/mach/iram.h b/arch/arm/plat-mxc/include/mach/iram.h index 022690c..d5c863f 100644 --- a/arch/arm/plat-mxc/include/mach/iram.h +++ b/arch/arm/plat-mxc/include/mach/iram.h @@ -20,17 +20,11 @@ #ifdef CONFIG_IRAM_ALLOC -int __init iram_init(unsigned long base, unsigned long size); void __iomem *iram_alloc(unsigned int size, unsigned long *dma_addr); void iram_free(unsigned long dma_addr, unsigned int size); #else -static inline int __init iram_init(unsigned long base, unsigned long size) -{ - return -ENOMEM; -} - static inline void __iomem *iram_alloc(unsigned int size, unsigned long *dma_addr) { return NULL; diff --git a/arch/arm/plat-mxc/iram_alloc.c b/arch/arm/plat-mxc/iram_alloc.c index 074c386..673deb4 100644 --- a/arch/arm/plat-mxc/iram_alloc.c +++ b/arch/arm/plat-mxc/iram_alloc.c @@ -22,6 +22,8 @@ #include #include #include +#include +#include #include static unsigned long iram_phys_base; @@ -55,15 +57,26 @@ void iram_free(unsigned long addr, unsigned int size) } EXPORT_SYMBOL(iram_free); -int __init iram_init(unsigned long base, unsigned long size) +static int __devinit iram_probe(struct platform_device *pdev) { - iram_phys_base = base; + struct resource *res; + unsigned long size; + + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + if (!res) + return -EINVAL; + + if (iram_phys_base) + return -EBUSY; + + iram_phys_base = res->start; + size = resource_size(res); iram_pool = gen_pool_create(PAGE_SHIFT, -1); if (!iram_pool) return -ENOMEM; - gen_pool_add(iram_pool, base, size, -1); + gen_pool_add(iram_pool, res->start, size, -1); iram_virt_base = ioremap(iram_phys_base, size); if (!iram_virt_base) return -EIO; @@ -71,3 +84,28 @@ int __init iram_init(unsigned long base, unsigned long size) pr_debug("i.MX IRAM pool: %ld KB@0x%p\n", size / 1024, iram_virt_base); return 0; } + +static int __devexit iram_remove(struct platform_device *pdev) +{ + gen_pool_destroy(iram_pool); + iram_pool = NULL; + return 0; +} + +#ifdef CONFIG_OF +static struct of_device_id iram_dt_ids[] = { + { .compatible = "fsl,imx-iram" }, + { /* sentinel */ } +}; +#endif + +static struct platform_driver iram_driver = { + .driver = { + .name = "imx-iram", + .of_match_table = of_match_ptr(iram_dt_ids), + }, + .probe = iram_probe, + .remove = __devexit_p(iram_remove), +}; + +module_platform_driver(iram_driver);