From patchwork Fri Apr 16 16:17:09 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Kanigeri, Hari" X-Patchwork-Id: 93168 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter.kernel.org (8.14.3/8.14.3) with ESMTP id o3GGHFcV008886 for ; Fri, 16 Apr 2010 16:17:15 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758338Ab0DPQRP (ORCPT ); Fri, 16 Apr 2010 12:17:15 -0400 Received: from arroyo.ext.ti.com ([192.94.94.40]:55842 "EHLO arroyo.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758256Ab0DPQRO (ORCPT ); Fri, 16 Apr 2010 12:17:14 -0400 Received: from dlep33.itg.ti.com ([157.170.170.112]) by arroyo.ext.ti.com (8.13.7/8.13.7) with ESMTP id o3GGHBkS031578 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 16 Apr 2010 11:17:11 -0500 Received: from dlep26.itg.ti.com (localhost [127.0.0.1]) by dlep33.itg.ti.com (8.13.7/8.13.7) with ESMTP id o3GGHB5D006949; Fri, 16 Apr 2010 11:17:11 -0500 (CDT) Received: from dsbe71.ent.ti.com (localhost [127.0.0.1]) by dlep26.itg.ti.com (8.13.8/8.13.8) with ESMTP id o3GGHAvO028005; Fri, 16 Apr 2010 11:17:11 -0500 (CDT) Received: from dlee03.ent.ti.com ([157.170.170.18]) by dsbe71.ent.ti.com ([156.117.232.23]) with mapi; Fri, 16 Apr 2010 11:17:10 -0500 From: "Kanigeri, Hari" To: "linux-omap@vger.kernel.org" CC: "Doyu Hiroshi (Nokia-D/Helsinki)" , "Shilimkar, Santosh" , "tony@atomide.com" Date: Fri, 16 Apr 2010 11:17:09 -0500 Subject: [PATCH] ARM:iommu support for OMAP4 Thread-Topic: [PATCH] ARM:iommu support for OMAP4 Thread-Index: AcrdgEPPAIDfiIBIR8aysAo+/YzhfA== Message-ID: <8F7AF80515AF0D4D93307E594F3CB40E4B216AE2@dlee03.ent.ti.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: acceptlanguage: en-US MIME-Version: 1.0 Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter.kernel.org [140.211.167.41]); Fri, 16 Apr 2010 16:17:16 +0000 (UTC) diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index d3e54da..1395125 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile @@ -77,7 +77,7 @@ mailbox_mach-objs := mailbox.o iommu-y += iommu2.o iommu-$(CONFIG_ARCH_OMAP3) += omap3-iommu.o - +iommu-$(CONFIG_ARCH_OMAP4) += omap4-iommu.o obj-$(CONFIG_OMAP_IOMMU) += $(iommu-y) i2c-omap-$(CONFIG_I2C_OMAP) := i2c.o diff --git a/arch/arm/mach-omap2/omap4-iommu.c b/arch/arm/mach-omap2/omap4-iommu.c new file mode 100644 index 0000000..6225616 --- /dev/null +++ b/arch/arm/mach-omap2/omap4-iommu.c @@ -0,0 +1,110 @@ +/* + * omap iommu: omap4 device registration + * + * Copyright (C) 2009-2010 Nokia Corporation + * + * Written by Hari Kanigeri + * + * Added support for OMAP4. This is based on original file + * omap3-iommu.c + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include + +#include +#include + +#define OMAP4_MMU1_BASE 0x55082000 +#define OMAP4_MMU2_BASE 0x4A066000 + +#define OMAP4_MMU1_IRQ INT_44XX_DUCATI_MMU_IRQ +#define OMAP4_MMU2_IRQ INT_44XX_DSP_MMU + + + +static unsigned long iommu_base[] __initdata = { + OMAP4_MMU1_BASE, + OMAP4_MMU2_BASE, +}; + +static int iommu_irq[] __initdata = { + OMAP4_MMU1_IRQ, + OMAP4_MMU2_IRQ, +}; + +static const struct iommu_platform_data omap4_iommu_pdata[] __initconst = { + { + .name = "ducati", + .nr_tlb_entries = 32, + }, +#if defined(CONFIG_MPU_TESLA_IOMMU) + { + .name = "tesla", + .nr_tlb_entries = 32, + }, +#endif +}; +#define NR_IOMMU_DEVICES ARRAY_SIZE(omap4_iommu_pdata) + +static struct platform_device *omap4_iommu_pdev[NR_IOMMU_DEVICES]; + +static int __init omap4_iommu_init(void) +{ + int i, err; + + for (i = 0; i < NR_IOMMU_DEVICES; i++) { + struct platform_device *pdev; + struct resource res[2]; + + pdev = platform_device_alloc("omap-iommu", i); + if (!pdev) { + err = -ENOMEM; + goto err_out; + } + + memset(res, 0, sizeof(res)); + res[0].start = iommu_base[i]; + res[0].end = iommu_base[i] + MMU_REG_SIZE - 1; + res[0].flags = IORESOURCE_MEM; + res[1].start = res[1].end = iommu_irq[i]; + res[1].flags = IORESOURCE_IRQ; + + err = platform_device_add_resources(pdev, res, + ARRAY_SIZE(res)); + if (err) + goto err_out; + err = platform_device_add_data(pdev, &omap4_iommu_pdata[i], + sizeof(omap4_iommu_pdata[0])); + if (err) + goto err_out; + err = platform_device_add(pdev); + if (err) + goto err_out; + omap4_iommu_pdev[i] = pdev; + } + return 0; + +err_out: + while (i--) + platform_device_put(omap4_iommu_pdev[i]); + return err; +} +module_init(omap4_iommu_init); + +static void __exit omap4_iommu_exit(void) +{ + int i; + + for (i = 0; i < NR_IOMMU_DEVICES; i++) + platform_device_unregister(omap4_iommu_pdev[i]); +} +module_exit(omap4_iommu_exit); + +MODULE_AUTHOR("Hiroshi DOYU, Hari Kanigeri"); +MODULE_DESCRIPTION("omap iommu: omap4 device registration"); +MODULE_LICENSE("GPL v2"); + diff --git a/arch/arm/plat-omap/iommu.c b/arch/arm/plat-omap/iommu.c index 905ed83..5186728 100644 --- a/arch/arm/plat-omap/iommu.c +++ b/arch/arm/plat-omap/iommu.c @@ -862,10 +862,12 @@ static int __devinit omap_iommu_probe(struct platform_device *pdev) if (!obj) return -ENOMEM; - obj->clk = clk_get(&pdev->dev, pdata->clk_name); - if (IS_ERR(obj->clk)) - goto err_clk; - + /* FIX ME: OMAP4 PM framework not ready */ + if (!cpu_is_omap44xx()) { + obj->clk = clk_get(&pdev->dev, pdata->clk_name); + if (IS_ERR(obj->clk)) + goto err_clk; + } obj->nr_tlb_entries = pdata->nr_tlb_entries; obj->name = pdata->name; obj->dev = &pdev->dev;