On Wed, Oct 20, 2010 at 5:48 AM, Fernando Guzman Lugo <x0095840@xxxxxx> wrote: > Some IOMMUs cannot use the whole 0x0 - 0xFFFFFFFF range. > With this new API the valid range can be set. > > Signed-off-by: Fernando Guzman Lugo <x0095840@xxxxxx> I don't see the point in having an API. It could be done through platform data, and the usage of 0xFFFFF000 instead of ULONG_MAX is independent of this. diff --git a/arch/arm/mach-omap2/omap-iommu.c b/arch/arm/mach-omap2/omap-iommu.c index f5a1aad..db919254 100644 --- a/arch/arm/mach-omap2/omap-iommu.c +++ b/arch/arm/mach-omap2/omap-iommu.c @@ -43,6 +43,7 @@ static struct iommu_device omap3_devices[] = { .name = "iva2", .nr_tlb_entries = 32, .clk_name = "iva2_ck", + .start_addr = 0x11000000, }, }, #endif diff --git a/arch/arm/plat-omap/include/plat/iommu.h b/arch/arm/plat-omap/include/plat/iommu.h index 33c7d41..94f3a9a 100644 --- a/arch/arm/plat-omap/include/plat/iommu.h +++ b/arch/arm/plat-omap/include/plat/iommu.h @@ -50,6 +50,8 @@ struct iommu { int (*isr)(struct iommu *obj); void *ctx; /* iommu context: registres saved area */ + + u32 start_addr; }; struct cr_regs { @@ -103,6 +105,7 @@ struct iommu_platform_data { const char *name; const char *clk_name; const int nr_tlb_entries; + u32 start_addr; }; #if defined(CONFIG_ARCH_OMAP1) diff --git a/arch/arm/plat-omap/iommu.c b/arch/arm/plat-omap/iommu.c index 6336ae2..3023d0b 100644 --- a/arch/arm/plat-omap/iommu.c +++ b/arch/arm/plat-omap/iommu.c @@ -926,6 +926,10 @@ static int __devinit omap_iommu_probe(struct platform_device *pdev) obj->name = pdata->name; obj->dev = &pdev->dev; obj->ctx = (void *)obj + sizeof(*obj); + obj->start_addr = pdata->start_addr; + + if (!obj->start_addr) + obj->start_addr = PAGE_SIZE; mutex_init(&obj->iommu_lock); mutex_init(&obj->mmap_lock); diff --git a/arch/arm/plat-omap/iovmm.c b/arch/arm/plat-omap/iovmm.c index f318476..fd0c93f 100644 --- a/arch/arm/plat-omap/iovmm.c +++ b/arch/arm/plat-omap/iovmm.c @@ -284,7 +284,7 @@ static struct iovm_struct *alloc_iovm_area(struct iommu *obj, u32 da, /* * Reserve the first page for NULL */ - start = PAGE_SIZE; + start = obj->start_addr; if (flags & IOVMF_LINEAR) alignement = iopgsz_max(bytes); start = roundup(start, alignement); -- Felipe Contreras -- 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