sh: __addr_ok() and other misc nommu fixups.
authorYoshinori Sato <ysato@users.sourceforge.jp>
Wed, 27 Sep 2006 08:25:07 +0000 (17:25 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Wed, 27 Sep 2006 08:25:07 +0000 (17:25 +0900)
A few more outstanding nommu fixups..

Signed-off-by: Yoshinori Sato <ysato@users.sourceforge.jp>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
arch/sh/boot/compressed/Makefile
arch/sh/kernel/process.c
arch/sh/kernel/sh_ksyms.c
arch/sh/kernel/sys_sh.c
arch/sh/mm/Kconfig
arch/sh/mm/Makefile
include/asm-sh/addrspace.h
include/asm-sh/io.h
include/asm-sh/uaccess.h

index 903470429cb455b73bc965e983d8af980880dcc8..e5f4437900794a66874de91e62a557572f5b0e81 100644 (file)
@@ -22,9 +22,9 @@ CONFIG_PAGE_OFFSET    ?= 0x80000000
 CONFIG_MEMORY_START     ?= 0x0c000000
 CONFIG_BOOT_LINK_OFFSET ?= 0x00800000
 
-IMAGE_OFFSET   := $(shell printf "0x%8x" $$[$(CONFIG_PAGE_OFFSET)  + \
-                                            $(CONFIG_MEMORY_START) + \
-                                            $(CONFIG_BOOT_LINK_OFFSET)])
+IMAGE_OFFSET   := $(shell printf "0x%08x" $$[$(CONFIG_PAGE_OFFSET)  + \
+                                             $(CONFIG_MEMORY_START) + \
+                                             $(CONFIG_BOOT_LINK_OFFSET)])
 
 LIBGCC := $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
 
index 4a32550fd7c68290f63f7a8986e913e731bc8252..c4aa687ba26ad888f5a5f027b0408e78bd6935e3 100644 (file)
@@ -302,9 +302,11 @@ ubc_set_tracing(int asid, unsigned long pc)
 {
        ctrl_outl(pc, UBC_BARA);
 
+#ifdef CONFIG_MMU
        /* We don't have any ASID settings for the SH-2! */
        if (cpu_data->type != CPU_SH7604)
                ctrl_outb(asid, UBC_BASRA);
+#endif
 
        ctrl_outl(0, UBC_BAMRA);
 
@@ -347,6 +349,7 @@ struct task_struct *__switch_to(struct task_struct *prev, struct task_struct *ne
        }
 #endif
 
+#ifdef CONFIG_MMU
        /*
         * Restore the kernel mode register
         *      k7 (r7_bank1)
@@ -354,19 +357,21 @@ struct task_struct *__switch_to(struct task_struct *prev, struct task_struct *ne
        asm volatile("ldc       %0, r7_bank"
                     : /* no output */
                     : "r" (task_thread_info(next)));
+#endif
 
-#ifdef CONFIG_MMU
        /* If no tasks are using the UBC, we're done */
        if (ubc_usercnt == 0)
                /* If no tasks are using the UBC, we're done */;
        else if (next->thread.ubc_pc && next->mm) {
-               ubc_set_tracing(next->mm->context & MMU_CONTEXT_ASID_MASK,
-                               next->thread.ubc_pc);
+               int asid = 0;
+#ifdef CONFIG_MMU
+               asid |= next->mm->context & MMU_CONTEXT_ASID_MASK;
+#endif
+               ubc_set_tracing(asid, next->thread.ubc_pc);
        } else {
                ctrl_outw(0, UBC_BBRA);
                ctrl_outw(0, UBC_BBRB);
        }
-#endif
 
        return prev;
 }
index 7f3a42244cab10cb4d4487a118dfdc4f872a915c..bf59d73415d74b762dbd5cdfc829c4cd59da7acd 100644 (file)
@@ -79,20 +79,18 @@ EXPORT_SYMBOL(strcpy);
 DECLARE_EXPORT(__movstr_i4_even);
 DECLARE_EXPORT(__movstr_i4_odd);
 DECLARE_EXPORT(__movstrSI12_i4);
+#endif
 
+#if defined(CONFIG_CPU_SH4) || defined(CONFIG_SH7705_CACHE_32KB)
 /* needed by some modules */
 EXPORT_SYMBOL(flush_cache_all);
 EXPORT_SYMBOL(flush_cache_range);
 EXPORT_SYMBOL(flush_dcache_page);
 EXPORT_SYMBOL(__flush_purge_region);
-EXPORT_SYMBOL(clear_user_page);
 #endif
 
-#if defined(CONFIG_SH7705_CACHE_32KB)
-EXPORT_SYMBOL(flush_cache_all);
-EXPORT_SYMBOL(flush_cache_range);
-EXPORT_SYMBOL(flush_dcache_page);
-EXPORT_SYMBOL(__flush_purge_region);
+#ifdef CONFIG_MMU
+EXPORT_SYMBOL(clear_user_page);
 #endif
 
 EXPORT_SYMBOL(flush_tlb_page);
index d8bcd8a223279cdcf49d1f5ccbdbbeb87d95aefb..0ee7bf4cb2384e2f11c0ae06a01b85102d1168be 100644 (file)
@@ -44,7 +44,7 @@ asmlinkage int sys_pipe(unsigned long r4, unsigned long r5,
        return error;
 }
 
-#if defined(HAVE_ARCH_UNMAPPED_AREA)
+#if defined(HAVE_ARCH_UNMAPPED_AREA) && defined(CONFIG_MMU)
 /*
  * To avoid cache alias, we map the shard page with same color.
  */
index f25903aa607b1f85b307fe85d8d5699df4548263..bed697c0dc19d78c1ed9c745c6b7edab001cd2d9 100644 (file)
@@ -194,7 +194,7 @@ config MEMORY_SIZE
 
 config 32BIT
        bool "Support 32-bit physical addressing through PMB"
-       depends on CPU_SH4A
+       depends on CPU_SH4A && MMU
        default y
        help
          If you say Y here, physical addressing will be extended to
index 87a7c07265c09dd8d700792b55b6b9dc718aaf7b..da37d86e65ebf3910398c0b2c8c6488a9a5a2325 100644 (file)
@@ -6,7 +6,7 @@ obj-y                   := init.o extable.o consistent.o
 
 obj-$(CONFIG_CPU_SH2)  += cache-sh2.o
 obj-$(CONFIG_CPU_SH3)  += cache-sh3.o
-obj-$(CONFIG_CPU_SH4)  += cache-sh4.o pg-sh4.o
+obj-$(CONFIG_CPU_SH4)  += cache-sh4.o
 
 obj-$(CONFIG_DMA_PAGE_OPS)     += pg-dma.o
 obj-$(CONFIG_HUGETLB_PAGE)     += hugetlbpage.o
@@ -19,7 +19,7 @@ obj-y                 += $(mmu-y)
 
 ifdef CONFIG_MMU
 obj-$(CONFIG_CPU_SH3)          += tlb-sh3.o
-obj-$(CONFIG_CPU_SH4)          += tlb-sh4.o
+obj-$(CONFIG_CPU_SH4)          += tlb-sh4.o pg-sh4.o
 obj-$(CONFIG_SH7705_CACHE_32KB) += pg-sh7705.o
 endif
 
index 4207368267b187dcbe05dd5dfea39c7ee700121e..b860218e402e88622a311a6036424f1ba3e6aa19 100644 (file)
@@ -14,7 +14,7 @@
 #include <asm/cpu/addrspace.h>
 
 /* Memory segments (32bit Privileged mode addresses)  */
-#ifdef CONFIG_MMU
+#ifndef CONFIG_CPU_SH2A
 #define P0SEG          0x00000000
 #define P1SEG          0x80000000
 #define P2SEG          0xa0000000
@@ -24,7 +24,7 @@
 #define P0SEG          0x00000000
 #define P1SEG          0x00000000
 #define P2SEG          0x20000000
-#define P3SEG          0x40000000
+#define P3SEG          0x00000000
 #define P4SEG          0x80000000
 #endif
 
index 27dba653cbe7b0f85fd721c9cf391616f9990d20..377160b862950c3ea9641b6bc8b668aa1eec8f26 100644 (file)
@@ -216,6 +216,7 @@ static inline void ctrl_delay(void)
 
 #define IO_SPACE_LIMIT 0xffffffff
 
+#ifdef CONFIG_MMU
 /*
  * Change virtual addresses to physical addresses and vv.
  * These are trivial on the 1:1 Linux/SuperH mapping
@@ -229,6 +230,10 @@ static inline void *phys_to_virt(unsigned long address)
 {
        return (void *)P1SEGADDR(address);
 }
+#else
+#define phys_to_virt(address)  ((void *)(address))
+#define virt_to_phys(address)  ((unsigned long)(address))
+#endif
 
 #define virt_to_bus virt_to_phys
 #define bus_to_virt phys_to_virt
index 5c3b00c2f10727a45cf29ef4103e8030b0325a8b..5c49ed6715f2a620a6d75d02583d76c16e1a6ee7 100644 (file)
 
 #define segment_eq(a,b)        ((a).seg == (b).seg)
 
-#define __addr_ok(addr) \
-       ((unsigned long)(addr) < (current_thread_info()->addr_limit.seg))
-
 #define get_ds()       (KERNEL_DS)
 
 #if !defined(CONFIG_MMU)
+/* NOMMU is always true */
+#define __addr_ok(addr) (1)
+
 static inline mm_segment_t get_fs(void)
 {
        return USER_DS;
@@ -66,6 +66,9 @@ static inline int __access_ok(unsigned long addr, unsigned long size)
        return ((addr >= memory_start) && ((addr + size) < memory_end));
 }
 #else /* CONFIG_MMU */
+#define __addr_ok(addr) \
+       ((unsigned long)(addr) < (current_thread_info()->addr_limit.seg))
+
 #define get_fs()       (current_thread_info()->addr_limit)
 #define set_fs(x)      (current_thread_info()->addr_limit = (x))