sh: early cached_to_uncached initialization.
authorStuart Menefy <stuart.menefy@st.com>
Fri, 5 Sep 2008 07:06:42 +0000 (16:06 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Mon, 8 Sep 2008 01:35:04 +0000 (10:35 +0900)
statically initialise the cached_to_uncached offset, so that we can use
it immediatly.

Signed-off-by: Stuart Menefy <stuart.menefy@st.com>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
arch/sh/include/asm/system_32.h
arch/sh/mm/init.c

index 16509ed2bb605979923594ae496dc152e1b6fae1..f7f105627fd9427cb0dc484d5bb488c784823049 100644 (file)
@@ -58,7 +58,8 @@ do {                                                                  \
        last = __last;                                                  \
 } while (0)
 
-#define __uses_jump_to_uncached __attribute__ ((__section__ (".uncached.text")))
+#define __uses_jump_to_uncached \
+       noinline __attribute__ ((__section__ (".uncached.text")))
 
 /*
  * Jump to uncached area.
index d4681a55c8523bc7faac34be7342b4bddba04894..f1a494283c4ee9341a35d92879f3f3ab24f44188 100644 (file)
 
 DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
 pgd_t swapper_pg_dir[PTRS_PER_PGD];
-unsigned long cached_to_uncached = 0;
+
+#ifdef CONFIG_SUPERH32
+/*
+ * Handle trivial transitions between cached and uncached
+ * segments, making use of the 1:1 mapping relationship in
+ * 512MB lowmem.
+ *
+ * This is the offset of the uncached section from its cached alias.
+ * Default value only valid in 29 bit mode, in 32bit mode will be
+ * overridden in pmb_init.
+ */
+unsigned long cached_to_uncached = P2SEG - P1SEG;
+#endif
 
 #ifdef CONFIG_MMU
 static void set_pte_phys(unsigned long addr, unsigned long phys, pgprot_t prot)
@@ -58,9 +70,7 @@ static void set_pte_phys(unsigned long addr, unsigned long phys, pgprot_t prot)
        }
 
        set_pte(pte, pfn_pte(phys >> PAGE_SHIFT, prot));
-
-       if (cached_to_uncached)
-               flush_tlb_one(get_asid(), addr);
+       flush_tlb_one(get_asid(), addr);
 }
 
 /*
@@ -165,15 +175,6 @@ void __init paging_init(void)
 #ifdef CONFIG_SUPERH32
        /* Set up the uncached fixmap */
        set_fixmap_nocache(FIX_UNCACHED, __pa(&__uncached_start));
-
-#ifdef CONFIG_29BIT
-       /*
-        * Handle trivial transitions between cached and uncached
-        * segments, making use of the 1:1 mapping relationship in
-        * 512MB lowmem.
-        */
-       cached_to_uncached = P2SEG - P1SEG;
-#endif
 #endif
 }