diff options
| author | Rob Herring <robh@kernel.org> | 2014-05-13 19:34:35 -0400 |
|---|---|---|
| committer | Rob Herring <robh@kernel.org> | 2014-05-13 19:34:35 -0400 |
| commit | eafd370dfe487facfdef499057f4eac9aa0b4bf5 (patch) | |
| tree | 0925a67cd658cdf4811f49b4cd2073f663166bd0 /arch/xtensa/include | |
| parent | c3fc952d2fbe3ec78defd70cf73d5d76d27092ec (diff) | |
| parent | fb2caa50fbacd21719a90dd66b617ce3cb4fd6d7 (diff) | |
Merge branch 'dt-bus-name' into for-next
Diffstat (limited to 'arch/xtensa/include')
| -rw-r--r-- | arch/xtensa/include/asm/bootparam.h | 13 | ||||
| -rw-r--r-- | arch/xtensa/include/asm/fixmap.h | 58 | ||||
| -rw-r--r-- | arch/xtensa/include/asm/highmem.h | 45 | ||||
| -rw-r--r-- | arch/xtensa/include/asm/pgtable.h | 4 | ||||
| -rw-r--r-- | arch/xtensa/include/asm/sysmem.h | 38 | ||||
| -rw-r--r-- | arch/xtensa/include/asm/tlbflush.h | 11 |
6 files changed, 150 insertions, 19 deletions
diff --git a/arch/xtensa/include/asm/bootparam.h b/arch/xtensa/include/asm/bootparam.h index 23392c5630ce..892aab399ac8 100644 --- a/arch/xtensa/include/asm/bootparam.h +++ b/arch/xtensa/include/asm/bootparam.h | |||
| @@ -37,23 +37,14 @@ typedef struct bp_tag { | |||
| 37 | unsigned long data[0]; /* data */ | 37 | unsigned long data[0]; /* data */ |
| 38 | } bp_tag_t; | 38 | } bp_tag_t; |
| 39 | 39 | ||
| 40 | typedef struct meminfo { | 40 | struct bp_meminfo { |
| 41 | unsigned long type; | 41 | unsigned long type; |
| 42 | unsigned long start; | 42 | unsigned long start; |
| 43 | unsigned long end; | 43 | unsigned long end; |
| 44 | } meminfo_t; | 44 | }; |
| 45 | |||
| 46 | #define SYSMEM_BANKS_MAX 5 | ||
| 47 | 45 | ||
| 48 | #define MEMORY_TYPE_CONVENTIONAL 0x1000 | 46 | #define MEMORY_TYPE_CONVENTIONAL 0x1000 |
| 49 | #define MEMORY_TYPE_NONE 0x2000 | 47 | #define MEMORY_TYPE_NONE 0x2000 |
| 50 | 48 | ||
| 51 | typedef struct sysmem_info { | ||
| 52 | int nr_banks; | ||
| 53 | meminfo_t bank[SYSMEM_BANKS_MAX]; | ||
| 54 | } sysmem_info_t; | ||
| 55 | |||
| 56 | extern sysmem_info_t sysmem; | ||
| 57 | |||
| 58 | #endif | 49 | #endif |
| 59 | #endif | 50 | #endif |
diff --git a/arch/xtensa/include/asm/fixmap.h b/arch/xtensa/include/asm/fixmap.h new file mode 100644 index 000000000000..9f6c33d0428a --- /dev/null +++ b/arch/xtensa/include/asm/fixmap.h | |||
| @@ -0,0 +1,58 @@ | |||
| 1 | /* | ||
| 2 | * fixmap.h: compile-time virtual memory allocation | ||
| 3 | * | ||
| 4 | * This file is subject to the terms and conditions of the GNU General Public | ||
| 5 | * License. See the file "COPYING" in the main directory of this archive | ||
| 6 | * for more details. | ||
| 7 | * | ||
| 8 | * Copyright (C) 1998 Ingo Molnar | ||
| 9 | * | ||
| 10 | * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999 | ||
| 11 | */ | ||
| 12 | |||
| 13 | #ifndef _ASM_FIXMAP_H | ||
| 14 | #define _ASM_FIXMAP_H | ||
| 15 | |||
| 16 | #include <asm/pgtable.h> | ||
| 17 | #ifdef CONFIG_HIGHMEM | ||
| 18 | #include <linux/threads.h> | ||
| 19 | #include <asm/kmap_types.h> | ||
| 20 | #endif | ||
| 21 | |||
| 22 | /* | ||
| 23 | * Here we define all the compile-time 'special' virtual | ||
| 24 | * addresses. The point is to have a constant address at | ||
| 25 | * compile time, but to set the physical address only | ||
| 26 | * in the boot process. We allocate these special addresses | ||
| 27 | * from the end of the consistent memory region backwards. | ||
| 28 | * Also this lets us do fail-safe vmalloc(), we | ||
| 29 | * can guarantee that these special addresses and | ||
| 30 | * vmalloc()-ed addresses never overlap. | ||
| 31 | * | ||
| 32 | * these 'compile-time allocated' memory buffers are | ||
| 33 | * fixed-size 4k pages. (or larger if used with an increment | ||
| 34 | * higher than 1) use fixmap_set(idx,phys) to associate | ||
| 35 | * physical memory with fixmap indices. | ||
| 36 | */ | ||
| 37 | enum fixed_addresses { | ||
| 38 | #ifdef CONFIG_HIGHMEM | ||
| 39 | /* reserved pte's for temporary kernel mappings */ | ||
| 40 | FIX_KMAP_BEGIN, | ||
| 41 | FIX_KMAP_END = FIX_KMAP_BEGIN + (KM_TYPE_NR * NR_CPUS) - 1, | ||
| 42 | #endif | ||
| 43 | __end_of_fixed_addresses | ||
| 44 | }; | ||
| 45 | |||
| 46 | #define FIXADDR_TOP (VMALLOC_START - PAGE_SIZE) | ||
| 47 | #define FIXADDR_SIZE (__end_of_fixed_addresses << PAGE_SHIFT) | ||
| 48 | #define FIXADDR_START ((FIXADDR_TOP - FIXADDR_SIZE) & PMD_MASK) | ||
| 49 | |||
| 50 | #include <asm-generic/fixmap.h> | ||
| 51 | |||
| 52 | #define kmap_get_fixmap_pte(vaddr) \ | ||
| 53 | pte_offset_kernel( \ | ||
| 54 | pmd_offset(pud_offset(pgd_offset_k(vaddr), (vaddr)), (vaddr)), \ | ||
| 55 | (vaddr) \ | ||
| 56 | ) | ||
| 57 | |||
| 58 | #endif | ||
diff --git a/arch/xtensa/include/asm/highmem.h b/arch/xtensa/include/asm/highmem.h index 80be15124697..2653ef5d55f1 100644 --- a/arch/xtensa/include/asm/highmem.h +++ b/arch/xtensa/include/asm/highmem.h | |||
| @@ -6,11 +6,54 @@ | |||
| 6 | * this archive for more details. | 6 | * this archive for more details. |
| 7 | * | 7 | * |
| 8 | * Copyright (C) 2003 - 2005 Tensilica Inc. | 8 | * Copyright (C) 2003 - 2005 Tensilica Inc. |
| 9 | * Copyright (C) 2014 Cadence Design Systems Inc. | ||
| 9 | */ | 10 | */ |
| 10 | 11 | ||
| 11 | #ifndef _XTENSA_HIGHMEM_H | 12 | #ifndef _XTENSA_HIGHMEM_H |
| 12 | #define _XTENSA_HIGHMEM_H | 13 | #define _XTENSA_HIGHMEM_H |
| 13 | 14 | ||
| 14 | extern void flush_cache_kmaps(void); | 15 | #include <asm/cacheflush.h> |
| 16 | #include <asm/fixmap.h> | ||
| 17 | #include <asm/kmap_types.h> | ||
| 18 | #include <asm/pgtable.h> | ||
| 19 | |||
| 20 | #define PKMAP_BASE (FIXADDR_START - PMD_SIZE) | ||
| 21 | #define LAST_PKMAP PTRS_PER_PTE | ||
| 22 | #define LAST_PKMAP_MASK (LAST_PKMAP - 1) | ||
| 23 | #define PKMAP_NR(virt) (((virt) - PKMAP_BASE) >> PAGE_SHIFT) | ||
| 24 | #define PKMAP_ADDR(nr) (PKMAP_BASE + ((nr) << PAGE_SHIFT)) | ||
| 25 | |||
| 26 | #define kmap_prot PAGE_KERNEL | ||
| 27 | |||
| 28 | extern pte_t *pkmap_page_table; | ||
| 29 | |||
| 30 | void *kmap_high(struct page *page); | ||
| 31 | void kunmap_high(struct page *page); | ||
| 32 | |||
| 33 | static inline void *kmap(struct page *page) | ||
| 34 | { | ||
| 35 | BUG_ON(in_interrupt()); | ||
| 36 | if (!PageHighMem(page)) | ||
| 37 | return page_address(page); | ||
| 38 | return kmap_high(page); | ||
| 39 | } | ||
| 40 | |||
| 41 | static inline void kunmap(struct page *page) | ||
| 42 | { | ||
| 43 | BUG_ON(in_interrupt()); | ||
| 44 | if (!PageHighMem(page)) | ||
| 45 | return; | ||
| 46 | kunmap_high(page); | ||
| 47 | } | ||
| 48 | |||
| 49 | static inline void flush_cache_kmaps(void) | ||
| 50 | { | ||
| 51 | flush_cache_all(); | ||
| 52 | } | ||
| 53 | |||
| 54 | void *kmap_atomic(struct page *page); | ||
| 55 | void __kunmap_atomic(void *kvaddr); | ||
| 56 | |||
| 57 | void kmap_init(void); | ||
| 15 | 58 | ||
| 16 | #endif | 59 | #endif |
diff --git a/arch/xtensa/include/asm/pgtable.h b/arch/xtensa/include/asm/pgtable.h index 216446295ada..4b0ca35a93b1 100644 --- a/arch/xtensa/include/asm/pgtable.h +++ b/arch/xtensa/include/asm/pgtable.h | |||
| @@ -310,6 +310,10 @@ set_pte_at(struct mm_struct *mm, unsigned long addr, pte_t *ptep, pte_t pteval) | |||
| 310 | update_pte(ptep, pteval); | 310 | update_pte(ptep, pteval); |
| 311 | } | 311 | } |
| 312 | 312 | ||
| 313 | static inline void set_pte(pte_t *ptep, pte_t pteval) | ||
| 314 | { | ||
| 315 | update_pte(ptep, pteval); | ||
| 316 | } | ||
| 313 | 317 | ||
| 314 | static inline void | 318 | static inline void |
| 315 | set_pmd(pmd_t *pmdp, pmd_t pmdval) | 319 | set_pmd(pmd_t *pmdp, pmd_t pmdval) |
diff --git a/arch/xtensa/include/asm/sysmem.h b/arch/xtensa/include/asm/sysmem.h new file mode 100644 index 000000000000..c015c5c8e3f7 --- /dev/null +++ b/arch/xtensa/include/asm/sysmem.h | |||
| @@ -0,0 +1,38 @@ | |||
| 1 | /* | ||
| 2 | * sysmem-related prototypes. | ||
| 3 | * | ||
| 4 | * This file is subject to the terms and conditions of the GNU General Public | ||
| 5 | * License. See the file "COPYING" in the main directory of this archive | ||
| 6 | * for more details. | ||
| 7 | * | ||
| 8 | * Copyright (C) 2014 Cadence Design Systems Inc. | ||
| 9 | */ | ||
| 10 | |||
| 11 | #ifndef _XTENSA_SYSMEM_H | ||
| 12 | #define _XTENSA_SYSMEM_H | ||
| 13 | |||
| 14 | #define SYSMEM_BANKS_MAX 31 | ||
| 15 | |||
| 16 | struct meminfo { | ||
| 17 | unsigned long start; | ||
| 18 | unsigned long end; | ||
| 19 | }; | ||
| 20 | |||
| 21 | /* | ||
| 22 | * Bank array is sorted by .start. | ||
| 23 | * Banks don't overlap and there's at least one page gap | ||
| 24 | * between adjacent bank entries. | ||
| 25 | */ | ||
| 26 | struct sysmem_info { | ||
| 27 | int nr_banks; | ||
| 28 | struct meminfo bank[SYSMEM_BANKS_MAX]; | ||
| 29 | }; | ||
| 30 | |||
| 31 | extern struct sysmem_info sysmem; | ||
| 32 | |||
| 33 | int add_sysmem_bank(unsigned long start, unsigned long end); | ||
| 34 | int mem_reserve(unsigned long, unsigned long, int); | ||
| 35 | void bootmem_init(void); | ||
| 36 | void zones_init(void); | ||
| 37 | |||
| 38 | #endif /* _XTENSA_SYSMEM_H */ | ||
diff --git a/arch/xtensa/include/asm/tlbflush.h b/arch/xtensa/include/asm/tlbflush.h index fc34274ce41b..06875feb27c2 100644 --- a/arch/xtensa/include/asm/tlbflush.h +++ b/arch/xtensa/include/asm/tlbflush.h | |||
| @@ -36,6 +36,7 @@ void local_flush_tlb_page(struct vm_area_struct *vma, | |||
| 36 | unsigned long page); | 36 | unsigned long page); |
| 37 | void local_flush_tlb_range(struct vm_area_struct *vma, | 37 | void local_flush_tlb_range(struct vm_area_struct *vma, |
| 38 | unsigned long start, unsigned long end); | 38 | unsigned long start, unsigned long end); |
| 39 | void local_flush_tlb_kernel_range(unsigned long start, unsigned long end); | ||
| 39 | 40 | ||
| 40 | #ifdef CONFIG_SMP | 41 | #ifdef CONFIG_SMP |
| 41 | 42 | ||
| @@ -44,12 +45,7 @@ void flush_tlb_mm(struct mm_struct *); | |||
| 44 | void flush_tlb_page(struct vm_area_struct *, unsigned long); | 45 | void flush_tlb_page(struct vm_area_struct *, unsigned long); |
| 45 | void flush_tlb_range(struct vm_area_struct *, unsigned long, | 46 | void flush_tlb_range(struct vm_area_struct *, unsigned long, |
| 46 | unsigned long); | 47 | unsigned long); |
| 47 | 48 | void flush_tlb_kernel_range(unsigned long start, unsigned long end); | |
| 48 | static inline void flush_tlb_kernel_range(unsigned long start, | ||
| 49 | unsigned long end) | ||
| 50 | { | ||
| 51 | flush_tlb_all(); | ||
| 52 | } | ||
| 53 | 49 | ||
| 54 | #else /* !CONFIG_SMP */ | 50 | #else /* !CONFIG_SMP */ |
| 55 | 51 | ||
| @@ -58,7 +54,8 @@ static inline void flush_tlb_kernel_range(unsigned long start, | |||
| 58 | #define flush_tlb_page(vma, page) local_flush_tlb_page(vma, page) | 54 | #define flush_tlb_page(vma, page) local_flush_tlb_page(vma, page) |
| 59 | #define flush_tlb_range(vma, vmaddr, end) local_flush_tlb_range(vma, vmaddr, \ | 55 | #define flush_tlb_range(vma, vmaddr, end) local_flush_tlb_range(vma, vmaddr, \ |
| 60 | end) | 56 | end) |
| 61 | #define flush_tlb_kernel_range(start, end) local_flush_tlb_all() | 57 | #define flush_tlb_kernel_range(start, end) local_flush_tlb_kernel_range(start, \ |
| 58 | end) | ||
| 62 | 59 | ||
| 63 | #endif /* CONFIG_SMP */ | 60 | #endif /* CONFIG_SMP */ |
| 64 | 61 | ||
