RE: [PATCH] ARM:iommu support for OMAP4

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> -----Original Message-----
> From: Kanigeri, Hari
> Sent: Friday, April 16, 2010 9:47 PM
> To: linux-omap@xxxxxxxxxxxxxxx
> Cc: Doyu Hiroshi (Nokia-D/Helsinki); Shilimkar, Santosh; tony@xxxxxxxxxxx
> Subject: [PATCH] ARM:iommu support for OMAP4
> 
> From 708914e1a82a608d423b050cb31b4deb46eb8411 Mon Sep 17 00:00:00 2001
> From: Hari Kanigeri <h-kanigeri2@xxxxxx>
> Date: Mon, 8 Mar 2010 17:55:21 -0600
> Subject: [PATCH] ARM:iommu support for OMAP4
> 
> This patch provides the iommu support for OMAP4 co-processors.
> 
> Signed-off-by: Hari Kanigeri <h-kanigeri2@xxxxxx>
> ---
>  arch/arm/mach-omap2/Makefile      |    2 +-
>  arch/arm/mach-omap2/omap4-iommu.c |  110 +++++++++++++++++++++++++++++++++++++
>  arch/arm/plat-omap/iommu.c        |   10 ++-
>  3 files changed, 117 insertions(+), 5 deletions(-)
>  create mode 100644 arch/arm/mach-omap2/omap4-iommu.c
> 
> 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

You should Add TI copyrights as well here
> + *
> + * Written by Hari Kanigeri <h-kanigeri2@xxxxxx>
> + *
> + * 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 <linux/platform_device.h>
> +
> +#include <plat/iommu.h>
> +#include <plat/irqs.h>
> +
> +#define OMAP4_MMU1_BASE	0x55082000
> +#define OMAP4_MMU2_BASE	0x4A066000

Can you move these base definitions to plat/omap44xx.h and use
them directly.

> +
> +#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 */
This is not true any more. Have you tried removing this check ??

> +	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;
> --
> 1.7.0
> 
> 
> Thank you,
> Best regards,
> Hari

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux