* [PATCH 1/3] omap iommu: cleanup iommu page address mask and definitions @ 2010-01-11 7:46 Hiroshi DOYU 2010-01-11 7:46 ` [PATCH 2/3] omap iommu: fix incorrect address for large page 1st entry Hiroshi DOYU 2010-01-11 21:53 ` [PATCH 1/3] omap iommu: cleanup iommu page address mask and definitions Aguirre, Sergio 0 siblings, 2 replies; 10+ messages in thread From: Hiroshi DOYU @ 2010-01-11 7:46 UTC (permalink / raw) To: linux-omap; +Cc: hnagalla, Hiroshi DOYU From: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> Signed-off-by: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> --- arch/arm/plat-omap/iopgtable.h | 50 +++++++++++++++++++++++++++++++-------- 1 files changed, 39 insertions(+), 11 deletions(-) diff --git a/arch/arm/plat-omap/iopgtable.h b/arch/arm/plat-omap/iopgtable.h index 37dac43..ab23b6a 100644 --- a/arch/arm/plat-omap/iopgtable.h +++ b/arch/arm/plat-omap/iopgtable.h @@ -1,7 +1,7 @@ /* * omap iommu: pagetable definitions * - * Copyright (C) 2008-2009 Nokia Corporation + * Copyright (C) 2008-2010 Nokia Corporation * * Written by Hiroshi DOYU <Hiroshi.DOYU@nokia.com> * @@ -13,26 +13,52 @@ #ifndef __PLAT_OMAP_IOMMU_H #define __PLAT_OMAP_IOMMU_H +/* + * "L2 table" address mask and size definitions. + */ #define IOPGD_SHIFT 20 -#define IOPGD_SIZE (1 << IOPGD_SHIFT) +#define IOPGD_SIZE (1UL << IOPGD_SHIFT) #define IOPGD_MASK (~(IOPGD_SIZE - 1)) -#define IOSECTION_MASK IOPGD_MASK -#define PTRS_PER_IOPGD (1 << (32 - IOPGD_SHIFT)) -#define IOPGD_TABLE_SIZE (PTRS_PER_IOPGD * sizeof(u32)) -#define IOSUPER_SIZE (IOPGD_SIZE << 4) +/* + * "section" address mask and size definitions. + */ +#define IOSECTION_SHIFT 20 +#define IOSECTION_SIZE (1UL << IOSECTION_SHIFT) +#define IOSECTION_MASK (~(IOSECTION_SIZE - 1)) + +/* + * "supersection" address mask and size definitions. + */ +#define IOSUPER_SHIFT 24 +#define IOSUPER_SIZE (1UL << IOSUPER_SHIFT) #define IOSUPER_MASK (~(IOSUPER_SIZE - 1)) +#define PTRS_PER_IOPGD (1UL << (32 - IOPGD_SHIFT)) +#define IOPGD_TABLE_SIZE (PTRS_PER_IOPGD * sizeof(u32)) + +/* + * "small page" address mask and size definitions. + */ #define IOPTE_SHIFT 12 -#define IOPTE_SIZE (1 << IOPTE_SHIFT) +#define IOPTE_SIZE (1UL << IOPTE_SHIFT) #define IOPTE_MASK (~(IOPTE_SIZE - 1)) -#define IOPAGE_MASK IOPTE_MASK -#define PTRS_PER_IOPTE (1 << (IOPGD_SHIFT - IOPTE_SHIFT)) -#define IOPTE_TABLE_SIZE (PTRS_PER_IOPTE * sizeof(u32)) -#define IOLARGE_SIZE (IOPTE_SIZE << 4) +/* + * "large page" address mask and size definitions. + */ +#define IOLARGE_SHIFT 16 +#define IOLARGE_SIZE (1UL << IOLARGE_SHIFT) #define IOLARGE_MASK (~(IOLARGE_SIZE - 1)) +#define PTRS_PER_IOPTE (1UL << (IOPGD_SHIFT - IOPTE_SHIFT)) +#define IOPTE_TABLE_SIZE (PTRS_PER_IOPTE * sizeof(u32)) + +#define IOPAGE_MASK IOPTE_MASK + +/* + * some descriptor attributes. + */ #define IOPGD_TABLE (1 << 0) #define IOPGD_SECTION (2 << 0) #define IOPGD_SUPER (1 << 18 | 2 << 0) @@ -40,12 +66,14 @@ #define IOPTE_SMALL (2 << 0) #define IOPTE_LARGE (1 << 0) +/* to find an entry in a page-table-directory */ #define iopgd_index(da) (((da) >> IOPGD_SHIFT) & (PTRS_PER_IOPGD - 1)) #define iopgd_offset(obj, da) ((obj)->iopgd + iopgd_index(da)) #define iopte_paddr(iopgd) (*iopgd & ~((1 << 10) - 1)) #define iopte_vaddr(iopgd) ((u32 *)phys_to_virt(iopte_paddr(iopgd))) +/* to find an entry in the second-level page table. */ #define iopte_index(da) (((da) >> IOPTE_SHIFT) & (PTRS_PER_IOPTE - 1)) #define iopte_offset(iopgd, da) (iopte_vaddr(iopgd) + iopte_index(da)) -- 1.6.0.4 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 2/3] omap iommu: fix incorrect address for large page 1st entry 2010-01-11 7:46 [PATCH 1/3] omap iommu: cleanup iommu page address mask and definitions Hiroshi DOYU @ 2010-01-11 7:46 ` Hiroshi DOYU 2010-01-11 7:46 ` [PATCH 3/3] omap iommu: fix incorrect address for supersection " Hiroshi DOYU 2010-01-11 21:57 ` [PATCH 2/3] omap iommu: fix incorrect address for large page " Aguirre, Sergio 2010-01-11 21:53 ` [PATCH 1/3] omap iommu: cleanup iommu page address mask and definitions Aguirre, Sergio 1 sibling, 2 replies; 10+ messages in thread From: Hiroshi DOYU @ 2010-01-11 7:46 UTC (permalink / raw) To: linux-omap; +Cc: hnagalla, Hiroshi DOYU From: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> Reported-by: Hari Nagalla <hnagalla@ti.com> Signed-off-by: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> Signed-off-by: Hari Nagalla <hnagalla@ti.com> --- arch/arm/plat-omap/iommu.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm/plat-omap/iommu.c b/arch/arm/plat-omap/iommu.c index c0ff1e3..ccf25b3 100644 --- a/arch/arm/plat-omap/iommu.c +++ b/arch/arm/plat-omap/iommu.c @@ -1,7 +1,7 @@ /* * omap iommu: tlb and pagetable primitives * - * Copyright (C) 2008-2009 Nokia Corporation + * Copyright (C) 2008-2010 Nokia Corporation * * Written by Hiroshi DOYU <Hiroshi.DOYU@nokia.com>, * Paul Mundt and Toshihiro Kobayashi @@ -646,7 +646,7 @@ static size_t iopgtable_clear_entry_core(struct iommu *obj, u32 da) if (*iopte & IOPTE_LARGE) { nent *= 16; /* rewind to the 1st entry */ - iopte = (u32 *)((u32)iopte & IOLARGE_MASK); + iopte = iopte_offset(iopgd, (da & IOLARGE_MASK)); } bytes *= nent; memset(iopte, 0, nent * sizeof(*iopte)); -- 1.6.0.4 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 3/3] omap iommu: fix incorrect address for supersection 1st entry 2010-01-11 7:46 ` [PATCH 2/3] omap iommu: fix incorrect address for large page 1st entry Hiroshi DOYU @ 2010-01-11 7:46 ` Hiroshi DOYU 2010-01-11 22:00 ` Aguirre, Sergio 2010-01-11 21:57 ` [PATCH 2/3] omap iommu: fix incorrect address for large page " Aguirre, Sergio 1 sibling, 1 reply; 10+ messages in thread From: Hiroshi DOYU @ 2010-01-11 7:46 UTC (permalink / raw) To: linux-omap; +Cc: hnagalla, Hiroshi DOYU From: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> Signed-off-by: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> Signed-off-by: Hari Nagalla <hnagalla@ti.com> --- arch/arm/plat-omap/iommu.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/arch/arm/plat-omap/iommu.c b/arch/arm/plat-omap/iommu.c index ccf25b3..ce0072a 100644 --- a/arch/arm/plat-omap/iommu.c +++ b/arch/arm/plat-omap/iommu.c @@ -667,7 +667,7 @@ static size_t iopgtable_clear_entry_core(struct iommu *obj, u32 da) if ((*iopgd & IOPGD_SUPER) == IOPGD_SUPER) { nent *= 16; /* rewind to the 1st entry */ - iopgd = (u32 *)((u32)iopgd & IOSUPER_MASK); + iopgd = iopgd_offset(obj, (da & IOSUPER_MASK)); } bytes *= nent; } -- 1.6.0.4 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* RE: [PATCH 3/3] omap iommu: fix incorrect address for supersection 1st entry 2010-01-11 7:46 ` [PATCH 3/3] omap iommu: fix incorrect address for supersection " Hiroshi DOYU @ 2010-01-11 22:00 ` Aguirre, Sergio 0 siblings, 0 replies; 10+ messages in thread From: Aguirre, Sergio @ 2010-01-11 22:00 UTC (permalink / raw) To: Hiroshi DOYU, linux-omap@vger.kernel.org; +Cc: Nagalla, Hari Hi Hiroshi, > -----Original Message----- > From: linux-omap-owner@vger.kernel.org [mailto:linux-omap- > owner@vger.kernel.org] On Behalf Of Hiroshi DOYU > Sent: Monday, January 11, 2010 1:47 AM > To: linux-omap@vger.kernel.org > Cc: Nagalla, Hari; Hiroshi DOYU > Subject: [PATCH 3/3] omap iommu: fix incorrect address for supersection > 1st entry > > From: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> ... and description missing here too. Regards, Sergio > > Signed-off-by: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> > Signed-off-by: Hari Nagalla <hnagalla@ti.com> > --- > arch/arm/plat-omap/iommu.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/arch/arm/plat-omap/iommu.c b/arch/arm/plat-omap/iommu.c > index ccf25b3..ce0072a 100644 > --- a/arch/arm/plat-omap/iommu.c > +++ b/arch/arm/plat-omap/iommu.c > @@ -667,7 +667,7 @@ static size_t iopgtable_clear_entry_core(struct iommu > *obj, u32 da) > if ((*iopgd & IOPGD_SUPER) == IOPGD_SUPER) { > nent *= 16; > /* rewind to the 1st entry */ > - iopgd = (u32 *)((u32)iopgd & IOSUPER_MASK); > + iopgd = iopgd_offset(obj, (da & IOSUPER_MASK)); > } > bytes *= nent; > } > -- > 1.6.0.4 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-omap" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 10+ messages in thread
* RE: [PATCH 2/3] omap iommu: fix incorrect address for large page 1st entry 2010-01-11 7:46 ` [PATCH 2/3] omap iommu: fix incorrect address for large page 1st entry Hiroshi DOYU 2010-01-11 7:46 ` [PATCH 3/3] omap iommu: fix incorrect address for supersection " Hiroshi DOYU @ 2010-01-11 21:57 ` Aguirre, Sergio 1 sibling, 0 replies; 10+ messages in thread From: Aguirre, Sergio @ 2010-01-11 21:57 UTC (permalink / raw) To: Hiroshi DOYU, linux-omap@vger.kernel.org; +Cc: Nagalla, Hari Hi Hiroshi, > -----Original Message----- > From: linux-omap-owner@vger.kernel.org [mailto:linux-omap- > owner@vger.kernel.org] On Behalf Of Hiroshi DOYU > Sent: Monday, January 11, 2010 1:47 AM > To: linux-omap@vger.kernel.org > Cc: Nagalla, Hari; Hiroshi DOYU > Subject: [PATCH 2/3] omap iommu: fix incorrect address for large page 1st > entry > > From: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> Description missing here aswell. Regards, Sergio > > Reported-by: Hari Nagalla <hnagalla@ti.com> > Signed-off-by: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> > Signed-off-by: Hari Nagalla <hnagalla@ti.com> > --- > arch/arm/plat-omap/iommu.c | 4 ++-- > 1 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/arch/arm/plat-omap/iommu.c b/arch/arm/plat-omap/iommu.c > index c0ff1e3..ccf25b3 100644 > --- a/arch/arm/plat-omap/iommu.c > +++ b/arch/arm/plat-omap/iommu.c > @@ -1,7 +1,7 @@ > /* > * omap iommu: tlb and pagetable primitives > * > - * Copyright (C) 2008-2009 Nokia Corporation > + * Copyright (C) 2008-2010 Nokia Corporation > * > * Written by Hiroshi DOYU <Hiroshi.DOYU@nokia.com>, > * Paul Mundt and Toshihiro Kobayashi > @@ -646,7 +646,7 @@ static size_t iopgtable_clear_entry_core(struct iommu > *obj, u32 da) > if (*iopte & IOPTE_LARGE) { > nent *= 16; > /* rewind to the 1st entry */ > - iopte = (u32 *)((u32)iopte & IOLARGE_MASK); > + iopte = iopte_offset(iopgd, (da & IOLARGE_MASK)); > } > bytes *= nent; > memset(iopte, 0, nent * sizeof(*iopte)); > -- > 1.6.0.4 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-omap" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 10+ messages in thread
* RE: [PATCH 1/3] omap iommu: cleanup iommu page address mask and definitions 2010-01-11 7:46 [PATCH 1/3] omap iommu: cleanup iommu page address mask and definitions Hiroshi DOYU 2010-01-11 7:46 ` [PATCH 2/3] omap iommu: fix incorrect address for large page 1st entry Hiroshi DOYU @ 2010-01-11 21:53 ` Aguirre, Sergio 2010-01-13 6:52 ` Hiroshi DOYU 1 sibling, 1 reply; 10+ messages in thread From: Aguirre, Sergio @ 2010-01-11 21:53 UTC (permalink / raw) To: Hiroshi DOYU, linux-omap@vger.kernel.org; +Cc: Nagalla, Hari Hi Hiroshi, > -----Original Message----- > From: linux-omap-owner@vger.kernel.org [mailto:linux-omap- > owner@vger.kernel.org] On Behalf Of Hiroshi DOYU > Sent: Monday, January 11, 2010 1:47 AM > To: linux-omap@vger.kernel.org > Cc: Nagalla, Hari; Hiroshi DOYU > Subject: [PATCH 1/3] omap iommu: cleanup iommu page address mask and > definitions > > From: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> Maybe a small description would help here... Are you just reshuffling defines, or are you also adding new ones? Is this just a cleanup or is it fixing a hidden bug? Regards, Sergio > > Signed-off-by: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> > --- > arch/arm/plat-omap/iopgtable.h | 50 +++++++++++++++++++++++++++++++---- > ---- > 1 files changed, 39 insertions(+), 11 deletions(-) > > diff --git a/arch/arm/plat-omap/iopgtable.h b/arch/arm/plat- > omap/iopgtable.h > index 37dac43..ab23b6a 100644 > --- a/arch/arm/plat-omap/iopgtable.h > +++ b/arch/arm/plat-omap/iopgtable.h > @@ -1,7 +1,7 @@ > /* > * omap iommu: pagetable definitions > * > - * Copyright (C) 2008-2009 Nokia Corporation > + * Copyright (C) 2008-2010 Nokia Corporation > * > * Written by Hiroshi DOYU <Hiroshi.DOYU@nokia.com> > * > @@ -13,26 +13,52 @@ > #ifndef __PLAT_OMAP_IOMMU_H > #define __PLAT_OMAP_IOMMU_H > > +/* > + * "L2 table" address mask and size definitions. > + */ > #define IOPGD_SHIFT 20 > -#define IOPGD_SIZE (1 << IOPGD_SHIFT) > +#define IOPGD_SIZE (1UL << IOPGD_SHIFT) > #define IOPGD_MASK (~(IOPGD_SIZE - 1)) > -#define IOSECTION_MASK IOPGD_MASK > -#define PTRS_PER_IOPGD (1 << (32 - IOPGD_SHIFT)) > -#define IOPGD_TABLE_SIZE (PTRS_PER_IOPGD * sizeof(u32)) > > -#define IOSUPER_SIZE (IOPGD_SIZE << 4) > +/* > + * "section" address mask and size definitions. > + */ > +#define IOSECTION_SHIFT 20 > +#define IOSECTION_SIZE (1UL << IOSECTION_SHIFT) > +#define IOSECTION_MASK (~(IOSECTION_SIZE - 1)) > + > +/* > + * "supersection" address mask and size definitions. > + */ > +#define IOSUPER_SHIFT 24 > +#define IOSUPER_SIZE (1UL << IOSUPER_SHIFT) > #define IOSUPER_MASK (~(IOSUPER_SIZE - 1)) > > +#define PTRS_PER_IOPGD (1UL << (32 - IOPGD_SHIFT)) > +#define IOPGD_TABLE_SIZE (PTRS_PER_IOPGD * sizeof(u32)) > + > +/* > + * "small page" address mask and size definitions. > + */ > #define IOPTE_SHIFT 12 > -#define IOPTE_SIZE (1 << IOPTE_SHIFT) > +#define IOPTE_SIZE (1UL << IOPTE_SHIFT) > #define IOPTE_MASK (~(IOPTE_SIZE - 1)) > -#define IOPAGE_MASK IOPTE_MASK > -#define PTRS_PER_IOPTE (1 << (IOPGD_SHIFT - IOPTE_SHIFT)) > -#define IOPTE_TABLE_SIZE (PTRS_PER_IOPTE * sizeof(u32)) > > -#define IOLARGE_SIZE (IOPTE_SIZE << 4) > +/* > + * "large page" address mask and size definitions. > + */ > +#define IOLARGE_SHIFT 16 > +#define IOLARGE_SIZE (1UL << IOLARGE_SHIFT) > #define IOLARGE_MASK (~(IOLARGE_SIZE - 1)) > > +#define PTRS_PER_IOPTE (1UL << (IOPGD_SHIFT - IOPTE_SHIFT)) > +#define IOPTE_TABLE_SIZE (PTRS_PER_IOPTE * sizeof(u32)) > + > +#define IOPAGE_MASK IOPTE_MASK > + > +/* > + * some descriptor attributes. > + */ > #define IOPGD_TABLE (1 << 0) > #define IOPGD_SECTION (2 << 0) > #define IOPGD_SUPER (1 << 18 | 2 << 0) > @@ -40,12 +66,14 @@ > #define IOPTE_SMALL (2 << 0) > #define IOPTE_LARGE (1 << 0) > > +/* to find an entry in a page-table-directory */ > #define iopgd_index(da) (((da) >> IOPGD_SHIFT) & > (PTRS_PER_IOPGD - 1)) > #define iopgd_offset(obj, da) ((obj)->iopgd + iopgd_index(da)) > > #define iopte_paddr(iopgd) (*iopgd & ~((1 << 10) - 1)) > #define iopte_vaddr(iopgd) ((u32 *)phys_to_virt(iopte_paddr(iopgd))) > > +/* to find an entry in the second-level page table. */ > #define iopte_index(da) (((da) >> IOPTE_SHIFT) & > (PTRS_PER_IOPTE - 1)) > #define iopte_offset(iopgd, da) (iopte_vaddr(iopgd) + iopte_index(da)) > > -- > 1.6.0.4 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-omap" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/3] omap iommu: cleanup iommu page address mask and definitions 2010-01-11 21:53 ` [PATCH 1/3] omap iommu: cleanup iommu page address mask and definitions Aguirre, Sergio @ 2010-01-13 6:52 ` Hiroshi DOYU 2010-01-13 12:18 ` Hiroshi DOYU 0 siblings, 1 reply; 10+ messages in thread From: Hiroshi DOYU @ 2010-01-13 6:52 UTC (permalink / raw) To: saaguirre; +Cc: linux-omap, hnagalla Hi Sergio, From: "ext Aguirre, Sergio" <saaguirre@ti.com> Subject: RE: [PATCH 1/3] omap iommu: cleanup iommu page address mask and definitions Date: Mon, 11 Jan 2010 22:53:16 +0100 > Hi Hiroshi, > > > -----Original Message----- > > From: linux-omap-owner@vger.kernel.org [mailto:linux-omap- > > owner@vger.kernel.org] On Behalf Of Hiroshi DOYU > > Sent: Monday, January 11, 2010 1:47 AM > > To: linux-omap@vger.kernel.org > > Cc: Nagalla, Hari; Hiroshi DOYU > > Subject: [PATCH 1/3] omap iommu: cleanup iommu page address mask and > > definitions > > > > From: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> > > Maybe a small description would help here... > > Are you just reshuffling defines, or are you also adding new ones? > > Is this just a cleanup or is it fixing a hidden bug? It's just a cleanup, but added a few macros here, This patch is necessary for the proceeding patches which are the ones to fix a bug. I'll add some description on them. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/3] omap iommu: cleanup iommu page address mask and definitions 2010-01-13 6:52 ` Hiroshi DOYU @ 2010-01-13 12:18 ` Hiroshi DOYU 2010-01-13 14:54 ` Aguirre, Sergio 2010-02-03 18:07 ` [APPLIED] [PATCH 3/3] omap iommu: fix incorrect address for supersection 1st entry Tony Lindgren 0 siblings, 2 replies; 10+ messages in thread From: Hiroshi DOYU @ 2010-01-13 12:18 UTC (permalink / raw) To: linux-omap; +Cc: hnagalla, saaguirre [-- Attachment #1: Type: Text/Plain, Size: 1189 bytes --] From: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> Subject: Re: [PATCH 1/3] omap iommu: cleanup iommu page address mask and definitions Date: Wed, 13 Jan 2010 08:52:52 +0200 (EET) > Hi Sergio, > > From: "ext Aguirre, Sergio" <saaguirre@ti.com> > Subject: RE: [PATCH 1/3] omap iommu: cleanup iommu page address mask and definitions > Date: Mon, 11 Jan 2010 22:53:16 +0100 > >> Hi Hiroshi, >> >> > -----Original Message----- >> > From: linux-omap-owner@vger.kernel.org [mailto:linux-omap- >> > owner@vger.kernel.org] On Behalf Of Hiroshi DOYU >> > Sent: Monday, January 11, 2010 1:47 AM >> > To: linux-omap@vger.kernel.org >> > Cc: Nagalla, Hari; Hiroshi DOYU >> > Subject: [PATCH 1/3] omap iommu: cleanup iommu page address mask and >> > definitions >> > >> > From: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> >> >> Maybe a small description would help here... >> >> Are you just reshuffling defines, or are you also adding new ones? >> >> Is this just a cleanup or is it fixing a hidden bug? > > It's just a cleanup, but added a few macros here, This patch is > necessary for the proceeding patches which are the ones to fix a bug. > > I'll add some description on them. Here's the updates. [-- Attachment #2: 0001-omap-iommu-cleanup-iommu-page-address-mask-and-defi.patch --] [-- Type: Text/X-Patch, Size: 3422 bytes --] >From 73251730aff0c9d53f0100a2166501eee370578f Mon Sep 17 00:00:00 2001 From: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> Date: Fri, 8 Jan 2010 18:49:00 +0200 Subject: [PATCH 1/3] omap iommu: cleanup iommu page address mask and definitions From: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> This is just a cleanup, but adds a few macros here, which can be used in the proceeding patches. Signed-off-by: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> --- arch/arm/plat-omap/iopgtable.h | 50 +++++++++++++++++++++++++++++++-------- 1 files changed, 39 insertions(+), 11 deletions(-) diff --git a/arch/arm/plat-omap/iopgtable.h b/arch/arm/plat-omap/iopgtable.h index 37dac43..ab23b6a 100644 --- a/arch/arm/plat-omap/iopgtable.h +++ b/arch/arm/plat-omap/iopgtable.h @@ -1,7 +1,7 @@ /* * omap iommu: pagetable definitions * - * Copyright (C) 2008-2009 Nokia Corporation + * Copyright (C) 2008-2010 Nokia Corporation * * Written by Hiroshi DOYU <Hiroshi.DOYU@nokia.com> * @@ -13,26 +13,52 @@ #ifndef __PLAT_OMAP_IOMMU_H #define __PLAT_OMAP_IOMMU_H +/* + * "L2 table" address mask and size definitions. + */ #define IOPGD_SHIFT 20 -#define IOPGD_SIZE (1 << IOPGD_SHIFT) +#define IOPGD_SIZE (1UL << IOPGD_SHIFT) #define IOPGD_MASK (~(IOPGD_SIZE - 1)) -#define IOSECTION_MASK IOPGD_MASK -#define PTRS_PER_IOPGD (1 << (32 - IOPGD_SHIFT)) -#define IOPGD_TABLE_SIZE (PTRS_PER_IOPGD * sizeof(u32)) -#define IOSUPER_SIZE (IOPGD_SIZE << 4) +/* + * "section" address mask and size definitions. + */ +#define IOSECTION_SHIFT 20 +#define IOSECTION_SIZE (1UL << IOSECTION_SHIFT) +#define IOSECTION_MASK (~(IOSECTION_SIZE - 1)) + +/* + * "supersection" address mask and size definitions. + */ +#define IOSUPER_SHIFT 24 +#define IOSUPER_SIZE (1UL << IOSUPER_SHIFT) #define IOSUPER_MASK (~(IOSUPER_SIZE - 1)) +#define PTRS_PER_IOPGD (1UL << (32 - IOPGD_SHIFT)) +#define IOPGD_TABLE_SIZE (PTRS_PER_IOPGD * sizeof(u32)) + +/* + * "small page" address mask and size definitions. + */ #define IOPTE_SHIFT 12 -#define IOPTE_SIZE (1 << IOPTE_SHIFT) +#define IOPTE_SIZE (1UL << IOPTE_SHIFT) #define IOPTE_MASK (~(IOPTE_SIZE - 1)) -#define IOPAGE_MASK IOPTE_MASK -#define PTRS_PER_IOPTE (1 << (IOPGD_SHIFT - IOPTE_SHIFT)) -#define IOPTE_TABLE_SIZE (PTRS_PER_IOPTE * sizeof(u32)) -#define IOLARGE_SIZE (IOPTE_SIZE << 4) +/* + * "large page" address mask and size definitions. + */ +#define IOLARGE_SHIFT 16 +#define IOLARGE_SIZE (1UL << IOLARGE_SHIFT) #define IOLARGE_MASK (~(IOLARGE_SIZE - 1)) +#define PTRS_PER_IOPTE (1UL << (IOPGD_SHIFT - IOPTE_SHIFT)) +#define IOPTE_TABLE_SIZE (PTRS_PER_IOPTE * sizeof(u32)) + +#define IOPAGE_MASK IOPTE_MASK + +/* + * some descriptor attributes. + */ #define IOPGD_TABLE (1 << 0) #define IOPGD_SECTION (2 << 0) #define IOPGD_SUPER (1 << 18 | 2 << 0) @@ -40,12 +66,14 @@ #define IOPTE_SMALL (2 << 0) #define IOPTE_LARGE (1 << 0) +/* to find an entry in a page-table-directory */ #define iopgd_index(da) (((da) >> IOPGD_SHIFT) & (PTRS_PER_IOPGD - 1)) #define iopgd_offset(obj, da) ((obj)->iopgd + iopgd_index(da)) #define iopte_paddr(iopgd) (*iopgd & ~((1 << 10) - 1)) #define iopte_vaddr(iopgd) ((u32 *)phys_to_virt(iopte_paddr(iopgd))) +/* to find an entry in the second-level page table. */ #define iopte_index(da) (((da) >> IOPTE_SHIFT) & (PTRS_PER_IOPTE - 1)) #define iopte_offset(iopgd, da) (iopte_vaddr(iopgd) + iopte_index(da)) -- 1.6.0.4 [-- Attachment #3: 0002-omap-iommu-fix-incorrect-address-for-large-page-1st.patch --] [-- Type: Text/X-Patch, Size: 1463 bytes --] >From a3db27c46ec02b48d4fb3bac8b37be652a1d392c Mon Sep 17 00:00:00 2001 From: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> Date: Fri, 8 Jan 2010 18:52:05 +0200 Subject: [PATCH 2/3] omap iommu: fix incorrect address for largepage 1st entry From: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> There was a potential risk that the following "memset" could override its range if a given address was not the 1st entry of a largepage. This is not the case for "iovmm". Reported-by: Hari Nagalla <hnagalla@ti.com> Signed-off-by: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> Signed-off-by: Hari Nagalla <hnagalla@ti.com> --- arch/arm/plat-omap/iommu.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm/plat-omap/iommu.c b/arch/arm/plat-omap/iommu.c index c0ff1e3..ccf25b3 100644 --- a/arch/arm/plat-omap/iommu.c +++ b/arch/arm/plat-omap/iommu.c @@ -1,7 +1,7 @@ /* * omap iommu: tlb and pagetable primitives * - * Copyright (C) 2008-2009 Nokia Corporation + * Copyright (C) 2008-2010 Nokia Corporation * * Written by Hiroshi DOYU <Hiroshi.DOYU@nokia.com>, * Paul Mundt and Toshihiro Kobayashi @@ -646,7 +646,7 @@ static size_t iopgtable_clear_entry_core(struct iommu *obj, u32 da) if (*iopte & IOPTE_LARGE) { nent *= 16; /* rewind to the 1st entry */ - iopte = (u32 *)((u32)iopte & IOLARGE_MASK); + iopte = iopte_offset(iopgd, (da & IOLARGE_MASK)); } bytes *= nent; memset(iopte, 0, nent * sizeof(*iopte)); -- 1.6.0.4 [-- Attachment #4: 0003-omap-iommu-fix-incorrect-address-for-supersection-1.patch --] [-- Type: Text/X-Patch, Size: 1139 bytes --] >From 0f299c722404f367733da07125b6e4b6c722432b Mon Sep 17 00:00:00 2001 From: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> Date: Fri, 8 Jan 2010 18:54:25 +0200 Subject: [PATCH 3/3] omap iommu: fix incorrect address for supersection 1st entry From: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> There was a potential risk that the following "memset" could override its range if a given address was not the 1st entry of a supersection. This is not the case for "iovmm". Signed-off-by: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> Signed-off-by: Hari Nagalla <hnagalla@ti.com> --- arch/arm/plat-omap/iommu.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/arch/arm/plat-omap/iommu.c b/arch/arm/plat-omap/iommu.c index ccf25b3..ce0072a 100644 --- a/arch/arm/plat-omap/iommu.c +++ b/arch/arm/plat-omap/iommu.c @@ -667,7 +667,7 @@ static size_t iopgtable_clear_entry_core(struct iommu *obj, u32 da) if ((*iopgd & IOPGD_SUPER) == IOPGD_SUPER) { nent *= 16; /* rewind to the 1st entry */ - iopgd = (u32 *)((u32)iopgd & IOSUPER_MASK); + iopgd = iopgd_offset(obj, (da & IOSUPER_MASK)); } bytes *= nent; } -- 1.6.0.4 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* RE: [PATCH 1/3] omap iommu: cleanup iommu page address mask and definitions 2010-01-13 12:18 ` Hiroshi DOYU @ 2010-01-13 14:54 ` Aguirre, Sergio 2010-02-03 18:07 ` [APPLIED] [PATCH 3/3] omap iommu: fix incorrect address for supersection 1st entry Tony Lindgren 1 sibling, 0 replies; 10+ messages in thread From: Aguirre, Sergio @ 2010-01-13 14:54 UTC (permalink / raw) To: Hiroshi DOYU, linux-omap@vger.kernel.org; +Cc: Nagalla, Hari Hi Hiroshi, > -----Original Message----- > From: Hiroshi DOYU [mailto:Hiroshi.DOYU@nokia.com] > Sent: Wednesday, January 13, 2010 6:18 AM > To: linux-omap@vger.kernel.org > Cc: Nagalla, Hari; Aguirre, Sergio > Subject: Re: [PATCH 1/3] omap iommu: cleanup iommu page address mask and > definitions > > From: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> > Subject: Re: [PATCH 1/3] omap iommu: cleanup iommu page address mask and > definitions > Date: Wed, 13 Jan 2010 08:52:52 +0200 (EET) > > > Hi Sergio, > > > > From: "ext Aguirre, Sergio" <saaguirre@ti.com> > > Subject: RE: [PATCH 1/3] omap iommu: cleanup iommu page address mask and > definitions > > Date: Mon, 11 Jan 2010 22:53:16 +0100 > > > >> Hi Hiroshi, > >> > >> > -----Original Message----- > >> > From: linux-omap-owner@vger.kernel.org [mailto:linux-omap- > >> > owner@vger.kernel.org] On Behalf Of Hiroshi DOYU > >> > Sent: Monday, January 11, 2010 1:47 AM > >> > To: linux-omap@vger.kernel.org > >> > Cc: Nagalla, Hari; Hiroshi DOYU > >> > Subject: [PATCH 1/3] omap iommu: cleanup iommu page address mask and > >> > definitions > >> > > >> > From: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> > >> > >> Maybe a small description would help here... > >> > >> Are you just reshuffling defines, or are you also adding new ones? > >> > >> Is this just a cleanup or is it fixing a hidden bug? > > > > It's just a cleanup, but added a few macros here, This patch is > > necessary for the proceeding patches which are the ones to fix a bug. > > > > I'll add some description on them. > > Here's the updates. Great! Now looks better ;) Thanks for that. Regards, Sergio ^ permalink raw reply [flat|nested] 10+ messages in thread
* [APPLIED] [PATCH 3/3] omap iommu: fix incorrect address for supersection 1st entry 2010-01-13 12:18 ` Hiroshi DOYU 2010-01-13 14:54 ` Aguirre, Sergio @ 2010-02-03 18:07 ` Tony Lindgren 1 sibling, 0 replies; 10+ messages in thread From: Tony Lindgren @ 2010-02-03 18:07 UTC (permalink / raw) To: linux-omap This patch has been applied to the linux-omap by youw fwiendly patch wobot. Branch in linux-omap: for-next Initial commit ID (Likely to change): b816b551d730ef50548cf35031832c4882823808 PatchWorks http://patchwork.kernel.org/patch/72616/ Git (Likely to change, and takes a while to get mirrored) http://git.kernel.org/?p=linux/kernel/git/tmlind/linux-omap-2.6.git;a=commit;h=b816b551d730ef50548cf35031832c4882823808 ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2010-02-03 18:07 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-01-11 7:46 [PATCH 1/3] omap iommu: cleanup iommu page address mask and definitions Hiroshi DOYU 2010-01-11 7:46 ` [PATCH 2/3] omap iommu: fix incorrect address for large page 1st entry Hiroshi DOYU 2010-01-11 7:46 ` [PATCH 3/3] omap iommu: fix incorrect address for supersection " Hiroshi DOYU 2010-01-11 22:00 ` Aguirre, Sergio 2010-01-11 21:57 ` [PATCH 2/3] omap iommu: fix incorrect address for large page " Aguirre, Sergio 2010-01-11 21:53 ` [PATCH 1/3] omap iommu: cleanup iommu page address mask and definitions Aguirre, Sergio 2010-01-13 6:52 ` Hiroshi DOYU 2010-01-13 12:18 ` Hiroshi DOYU 2010-01-13 14:54 ` Aguirre, Sergio 2010-02-03 18:07 ` [APPLIED] [PATCH 3/3] omap iommu: fix incorrect address for supersection 1st entry Tony Lindgren
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox