Loading arch/sh/boot/compressed/misc.c +1 −1 Original line number Diff line number Diff line Loading @@ -117,7 +117,7 @@ void decompress_kernel(void) output_addr = (CONFIG_MEMORY_START + 0x2000); #else output_addr = __pa((unsigned long)&_text+PAGE_SIZE); #if defined(CONFIG_29BIT) || defined(CONFIG_PMB_LEGACY) #if defined(CONFIG_29BIT) output_addr |= P2SEG; #endif #endif Loading arch/sh/include/asm/io.h +22 −0 Original line number Diff line number Diff line Loading @@ -133,6 +133,28 @@ static inline void ctrl_delay(void) __raw_readw(generic_io_base); } #define __BUILD_UNCACHED_IO(bwlq, type) \ static inline type read##bwlq##_uncached(unsigned long addr) \ { \ type ret; \ jump_to_uncached(); \ ret = __raw_read##bwlq(addr); \ back_to_cached(); \ return ret; \ } \ \ static inline void write##bwlq##_uncached(type v, unsigned long addr) \ { \ jump_to_uncached(); \ __raw_write##bwlq(v, addr); \ back_to_cached(); \ } __BUILD_UNCACHED_IO(b, u8) __BUILD_UNCACHED_IO(w, u16) __BUILD_UNCACHED_IO(l, u32) __BUILD_UNCACHED_IO(q, u64) #define __BUILD_MEMORY_STRING(bwlq, type) \ \ static inline void __raw_writes##bwlq(volatile void __iomem *mem, \ Loading arch/sh/include/asm/mmu.h +10 −30 Original line number Diff line number Diff line Loading @@ -11,7 +11,9 @@ #define PMB_ADDR 0xf6100000 #define PMB_DATA 0xf7100000 #define PMB_ENTRY_MAX 16 #define NR_PMB_ENTRIES 16 #define PMB_E_MASK 0x0000000f #define PMB_E_SHIFT 8 Loading @@ -25,6 +27,7 @@ #define PMB_C 0x00000008 #define PMB_WT 0x00000001 #define PMB_UB 0x00000200 #define PMB_CACHE_MASK (PMB_C | PMB_WT | PMB_UB) #define PMB_V 0x00000100 #define PMB_NO_ENTRY (-1) Loading @@ -32,6 +35,7 @@ #ifndef __ASSEMBLY__ #include <linux/errno.h> #include <linux/threads.h> #include <asm/page.h> /* Default "unsigned long" context */ typedef unsigned long mm_context_id_t[NR_CPUS]; Loading @@ -49,46 +53,22 @@ typedef struct { #endif } mm_context_t; struct pmb_entry; struct pmb_entry { unsigned long vpn; unsigned long ppn; unsigned long flags; /* * 0 .. NR_PMB_ENTRIES for specific entry selection, or * PMB_NO_ENTRY to search for a free one */ int entry; struct pmb_entry *next; /* Adjacent entry link for contiguous multi-entry mappings */ struct pmb_entry *link; }; #ifdef CONFIG_PMB /* arch/sh/mm/pmb.c */ long pmb_remap(unsigned long virt, unsigned long phys, unsigned long size, unsigned long flags); unsigned long size, pgprot_t prot); void pmb_unmap(unsigned long addr); int pmb_init(void); void pmb_init(void); bool __in_29bit_mode(void); #else static inline long pmb_remap(unsigned long virt, unsigned long phys, unsigned long size, unsigned long flags) unsigned long size, pgprot_t prot) { return -EINVAL; } static inline void pmb_unmap(unsigned long addr) { } static inline int pmb_init(void) { return -ENODEV; } #define pmb_unmap(addr) do { } while (0) #define pmb_init(addr) do { } while (0) #ifdef CONFIG_29BIT #define __in_29bit_mode() (1) Loading arch/sh/include/asm/page.h +10 −7 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ #endif #ifndef __ASSEMBLY__ #include <asm/uncached.h> extern unsigned long shm_align_mask; extern unsigned long max_low_pfn, min_low_pfn; Loading @@ -56,7 +57,6 @@ pages_do_alias(unsigned long addr1, unsigned long addr2) return (addr1 ^ addr2) & shm_align_mask; } #define clear_page(page) memset((void *)(page), 0, PAGE_SIZE) extern void copy_page(void *to, void *from); Loading Loading @@ -127,12 +127,7 @@ typedef struct page *pgtable_t; * is not visible (it is part of the PMB mapping) and so needs to be * added or subtracted as required. */ #if defined(CONFIG_PMB_LEGACY) /* phys = virt - PAGE_OFFSET - (__MEMORY_START & 0xe0000000) */ #define PMB_OFFSET (PAGE_OFFSET - PXSEG(__MEMORY_START)) #define __pa(x) ((unsigned long)(x) - PMB_OFFSET) #define __va(x) ((void *)((unsigned long)(x) + PMB_OFFSET)) #elif defined(CONFIG_32BIT) #ifdef CONFIG_PMB #define __pa(x) ((unsigned long)(x)-PAGE_OFFSET+__MEMORY_START) #define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET-__MEMORY_START)) #else Loading @@ -140,6 +135,14 @@ typedef struct page *pgtable_t; #define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET)) #endif #ifdef CONFIG_UNCACHED_MAPPING #define UNCAC_ADDR(addr) ((addr) - PAGE_OFFSET + uncached_start) #define CAC_ADDR(addr) ((addr) - uncached_start + PAGE_OFFSET) #else #define UNCAC_ADDR(addr) ((addr)) #define CAC_ADDR(addr) ((addr)) #endif #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) #define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) Loading arch/sh/include/asm/ptrace.h +2 −9 Original line number Diff line number Diff line Loading @@ -139,15 +139,8 @@ static inline unsigned long profile_pc(struct pt_regs *regs) { unsigned long pc = instruction_pointer(regs); #ifdef CONFIG_UNCACHED_MAPPING /* * If PC points in to the uncached mapping, fix it up and hand * back the cached equivalent. */ if ((pc >= (memory_start + cached_to_uncached)) && (pc < (memory_start + cached_to_uncached + uncached_size))) pc -= cached_to_uncached; #endif if (virt_addr_uncached(pc)) return CAC_ADDR(pc); return pc; } Loading Loading
arch/sh/boot/compressed/misc.c +1 −1 Original line number Diff line number Diff line Loading @@ -117,7 +117,7 @@ void decompress_kernel(void) output_addr = (CONFIG_MEMORY_START + 0x2000); #else output_addr = __pa((unsigned long)&_text+PAGE_SIZE); #if defined(CONFIG_29BIT) || defined(CONFIG_PMB_LEGACY) #if defined(CONFIG_29BIT) output_addr |= P2SEG; #endif #endif Loading
arch/sh/include/asm/io.h +22 −0 Original line number Diff line number Diff line Loading @@ -133,6 +133,28 @@ static inline void ctrl_delay(void) __raw_readw(generic_io_base); } #define __BUILD_UNCACHED_IO(bwlq, type) \ static inline type read##bwlq##_uncached(unsigned long addr) \ { \ type ret; \ jump_to_uncached(); \ ret = __raw_read##bwlq(addr); \ back_to_cached(); \ return ret; \ } \ \ static inline void write##bwlq##_uncached(type v, unsigned long addr) \ { \ jump_to_uncached(); \ __raw_write##bwlq(v, addr); \ back_to_cached(); \ } __BUILD_UNCACHED_IO(b, u8) __BUILD_UNCACHED_IO(w, u16) __BUILD_UNCACHED_IO(l, u32) __BUILD_UNCACHED_IO(q, u64) #define __BUILD_MEMORY_STRING(bwlq, type) \ \ static inline void __raw_writes##bwlq(volatile void __iomem *mem, \ Loading
arch/sh/include/asm/mmu.h +10 −30 Original line number Diff line number Diff line Loading @@ -11,7 +11,9 @@ #define PMB_ADDR 0xf6100000 #define PMB_DATA 0xf7100000 #define PMB_ENTRY_MAX 16 #define NR_PMB_ENTRIES 16 #define PMB_E_MASK 0x0000000f #define PMB_E_SHIFT 8 Loading @@ -25,6 +27,7 @@ #define PMB_C 0x00000008 #define PMB_WT 0x00000001 #define PMB_UB 0x00000200 #define PMB_CACHE_MASK (PMB_C | PMB_WT | PMB_UB) #define PMB_V 0x00000100 #define PMB_NO_ENTRY (-1) Loading @@ -32,6 +35,7 @@ #ifndef __ASSEMBLY__ #include <linux/errno.h> #include <linux/threads.h> #include <asm/page.h> /* Default "unsigned long" context */ typedef unsigned long mm_context_id_t[NR_CPUS]; Loading @@ -49,46 +53,22 @@ typedef struct { #endif } mm_context_t; struct pmb_entry; struct pmb_entry { unsigned long vpn; unsigned long ppn; unsigned long flags; /* * 0 .. NR_PMB_ENTRIES for specific entry selection, or * PMB_NO_ENTRY to search for a free one */ int entry; struct pmb_entry *next; /* Adjacent entry link for contiguous multi-entry mappings */ struct pmb_entry *link; }; #ifdef CONFIG_PMB /* arch/sh/mm/pmb.c */ long pmb_remap(unsigned long virt, unsigned long phys, unsigned long size, unsigned long flags); unsigned long size, pgprot_t prot); void pmb_unmap(unsigned long addr); int pmb_init(void); void pmb_init(void); bool __in_29bit_mode(void); #else static inline long pmb_remap(unsigned long virt, unsigned long phys, unsigned long size, unsigned long flags) unsigned long size, pgprot_t prot) { return -EINVAL; } static inline void pmb_unmap(unsigned long addr) { } static inline int pmb_init(void) { return -ENODEV; } #define pmb_unmap(addr) do { } while (0) #define pmb_init(addr) do { } while (0) #ifdef CONFIG_29BIT #define __in_29bit_mode() (1) Loading
arch/sh/include/asm/page.h +10 −7 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ #endif #ifndef __ASSEMBLY__ #include <asm/uncached.h> extern unsigned long shm_align_mask; extern unsigned long max_low_pfn, min_low_pfn; Loading @@ -56,7 +57,6 @@ pages_do_alias(unsigned long addr1, unsigned long addr2) return (addr1 ^ addr2) & shm_align_mask; } #define clear_page(page) memset((void *)(page), 0, PAGE_SIZE) extern void copy_page(void *to, void *from); Loading Loading @@ -127,12 +127,7 @@ typedef struct page *pgtable_t; * is not visible (it is part of the PMB mapping) and so needs to be * added or subtracted as required. */ #if defined(CONFIG_PMB_LEGACY) /* phys = virt - PAGE_OFFSET - (__MEMORY_START & 0xe0000000) */ #define PMB_OFFSET (PAGE_OFFSET - PXSEG(__MEMORY_START)) #define __pa(x) ((unsigned long)(x) - PMB_OFFSET) #define __va(x) ((void *)((unsigned long)(x) + PMB_OFFSET)) #elif defined(CONFIG_32BIT) #ifdef CONFIG_PMB #define __pa(x) ((unsigned long)(x)-PAGE_OFFSET+__MEMORY_START) #define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET-__MEMORY_START)) #else Loading @@ -140,6 +135,14 @@ typedef struct page *pgtable_t; #define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET)) #endif #ifdef CONFIG_UNCACHED_MAPPING #define UNCAC_ADDR(addr) ((addr) - PAGE_OFFSET + uncached_start) #define CAC_ADDR(addr) ((addr) - uncached_start + PAGE_OFFSET) #else #define UNCAC_ADDR(addr) ((addr)) #define CAC_ADDR(addr) ((addr)) #endif #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) #define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) Loading
arch/sh/include/asm/ptrace.h +2 −9 Original line number Diff line number Diff line Loading @@ -139,15 +139,8 @@ static inline unsigned long profile_pc(struct pt_regs *regs) { unsigned long pc = instruction_pointer(regs); #ifdef CONFIG_UNCACHED_MAPPING /* * If PC points in to the uncached mapping, fix it up and hand * back the cached equivalent. */ if ((pc >= (memory_start + cached_to_uncached)) && (pc < (memory_start + cached_to_uncached + uncached_size))) pc -= cached_to_uncached; #endif if (virt_addr_uncached(pc)) return CAC_ADDR(pc); return pc; } Loading