diff options
author | Chris Metcalf <cmetcalf@tilera.com> | 2012-06-13 14:46:40 -0400 |
---|---|---|
committer | Chris Metcalf <cmetcalf@tilera.com> | 2012-07-18 16:40:05 -0400 |
commit | bbaa22c3a0d0be4406d26e5a73d1e8e504787986 (patch) | |
tree | 4d00f1bda85d9735c60d7db1cdbdd215d5317ae4 /arch/tile/include/asm/page.h | |
parent | 3e219b91533058e242b78ac08aaa91024dd6f369 (diff) |
tilegx pci: support I/O to arbitrarily-cached pages
The tilegx PCI root complex support (currently only in linux-next)
is limited to pages that are homed on cached in the default manner,
i.e. "hash-for-home". This change supports delivery of I/O data to
pages that are cached in other ways (locally on a particular core,
uncached, user-managed incoherent, etc.).
A large part of the change is supporting flushing pages from cache
on particular homes so that we can transition the data that we are
delivering to or from the device appropriately. The new homecache_finv*
routines handle this.
Some changes to page_table_range_init() were also required to make
the fixmap code work correctly on tilegx; it hadn't been used there
before.
We also remove some stub mark_caches_evicted_*() routines that
were just no-ops anyway.
Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
Diffstat (limited to 'arch/tile/include/asm/page.h')
-rw-r--r-- | arch/tile/include/asm/page.h | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/arch/tile/include/asm/page.h b/arch/tile/include/asm/page.h index 9d9131e5c552..dd033a4fd627 100644 --- a/arch/tile/include/asm/page.h +++ b/arch/tile/include/asm/page.h | |||
@@ -174,7 +174,9 @@ static inline __attribute_const__ int get_order(unsigned long size) | |||
174 | #define MEM_LOW_END (HALF_VA_SPACE - 1) /* low half */ | 174 | #define MEM_LOW_END (HALF_VA_SPACE - 1) /* low half */ |
175 | #define MEM_HIGH_START (-HALF_VA_SPACE) /* high half */ | 175 | #define MEM_HIGH_START (-HALF_VA_SPACE) /* high half */ |
176 | #define PAGE_OFFSET MEM_HIGH_START | 176 | #define PAGE_OFFSET MEM_HIGH_START |
177 | #define _VMALLOC_START _AC(0xfffffff500000000, UL) /* 4 GB */ | 177 | #define FIXADDR_BASE _AC(0xfffffff400000000, UL) /* 4 GB */ |
178 | #define FIXADDR_TOP _AC(0xfffffff500000000, UL) /* 4 GB */ | ||
179 | #define _VMALLOC_START FIXADDR_TOP | ||
178 | #define HUGE_VMAP_BASE _AC(0xfffffff600000000, UL) /* 4 GB */ | 180 | #define HUGE_VMAP_BASE _AC(0xfffffff600000000, UL) /* 4 GB */ |
179 | #define MEM_SV_START _AC(0xfffffff700000000, UL) /* 256 MB */ | 181 | #define MEM_SV_START _AC(0xfffffff700000000, UL) /* 256 MB */ |
180 | #define MEM_SV_INTRPT MEM_SV_START | 182 | #define MEM_SV_INTRPT MEM_SV_START |
@@ -185,9 +187,6 @@ static inline __attribute_const__ int get_order(unsigned long size) | |||
185 | /* Highest DTLB address we will use */ | 187 | /* Highest DTLB address we will use */ |
186 | #define KERNEL_HIGH_VADDR MEM_SV_START | 188 | #define KERNEL_HIGH_VADDR MEM_SV_START |
187 | 189 | ||
188 | /* Since we don't currently provide any fixmaps, we use an impossible VA. */ | ||
189 | #define FIXADDR_TOP MEM_HV_START | ||
190 | |||
191 | #else /* !__tilegx__ */ | 190 | #else /* !__tilegx__ */ |
192 | 191 | ||
193 | /* | 192 | /* |