summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/sparc/mm/leon_mm.c79
-rw-r--r--arch/sparc/mm/srmmu.c83
-rw-r--r--arch/sparc/mm/srmmu.h4
3 files changed, 85 insertions, 81 deletions
diff --git a/arch/sparc/mm/leon_mm.c b/arch/sparc/mm/leon_mm.c
index 13c2169822a8..7e2bed737ef2 100644
--- a/arch/sparc/mm/leon_mm.c
+++ b/arch/sparc/mm/leon_mm.c
@@ -15,6 +15,8 @@
#include <asm/leon.h>
#include <asm/tlbflush.h>
+#include "srmmu.h"
+
int leon_flush_during_switch = 1;
int srmmu_swprobe_trace;
@@ -258,3 +260,80 @@ void leon_switch_mm(void)
if (leon_flush_during_switch)
leon_flush_cache_all();
}
+
+static void leon_flush_cache_mm(struct mm_struct *mm)
+{
+ leon_flush_cache_all();
+}
+
+static void leon_flush_cache_page(struct vm_area_struct *vma, unsigned long page)
+{
+ leon_flush_pcache_all(vma, page);
+}
+
+static void leon_flush_cache_range(struct vm_area_struct *vma,
+ unsigned long start,
+ unsigned long end)
+{
+ leon_flush_cache_all();
+}
+
+static void leon_flush_tlb_mm(struct mm_struct *mm)
+{
+ leon_flush_tlb_all();
+}
+
+static void leon_flush_tlb_page(struct vm_area_struct *vma,
+ unsigned long page)
+{
+ leon_flush_tlb_all();
+}
+
+static void leon_flush_tlb_range(struct vm_area_struct *vma,
+ unsigned long start,
+ unsigned long end)
+{
+ leon_flush_tlb_all();
+}
+
+static void leon_flush_page_to_ram(unsigned long page)
+{
+ leon_flush_cache_all();
+}
+
+static void leon_flush_sig_insns(struct mm_struct *mm, unsigned long page)
+{
+ leon_flush_cache_all();
+}
+
+static void leon_flush_page_for_dma(unsigned long page)
+{
+ leon_flush_dcache_all();
+}
+
+void __init poke_leonsparc(void)
+{
+}
+
+static const struct sparc32_cachetlb_ops leon_ops = {
+ .cache_all = leon_flush_cache_all,
+ .cache_mm = leon_flush_cache_mm,
+ .cache_page = leon_flush_cache_page,
+ .cache_range = leon_flush_cache_range,
+ .tlb_all = leon_flush_tlb_all,
+ .tlb_mm = leon_flush_tlb_mm,
+ .tlb_page = leon_flush_tlb_page,
+ .tlb_range = leon_flush_tlb_range,
+ .page_to_ram = leon_flush_page_to_ram,
+ .sig_insns = leon_flush_sig_insns,
+ .page_for_dma = leon_flush_page_for_dma,
+};
+
+void __init init_leon(void)
+{
+ srmmu_name = "LEON";
+ sparc32_cachetlb_ops = &leon_ops;
+ poke_srmmu = poke_leonsparc;
+
+ leon_flush_during_switch = leon_flush_needed();
+}
diff --git a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c
index 4875fcd8fd7a..a02c56a4bdfb 100644
--- a/arch/sparc/mm/srmmu.c
+++ b/arch/sparc/mm/srmmu.c
@@ -48,6 +48,8 @@
#include <asm/turbosparc.h>
#include <asm/leon.h>
+#include "srmmu.h"
+
enum mbus_module srmmu_modtype;
static unsigned int hwbug_bitmask;
int vac_cache_size;
@@ -1479,87 +1481,6 @@ static void __init init_viking(void)
poke_srmmu = poke_viking;
}
-#ifdef CONFIG_SPARC_LEON
-static void leon_flush_cache_mm(struct mm_struct *mm)
-{
- leon_flush_cache_all();
-}
-
-static void leon_flush_cache_page(struct vm_area_struct *vma, unsigned long page)
-{
- leon_flush_pcache_all(vma, page);
-}
-
-static void leon_flush_cache_range(struct vm_area_struct *vma,
- unsigned long start,
- unsigned long end)
-{
- leon_flush_cache_all();
-}
-
-static void leon_flush_tlb_mm(struct mm_struct *mm)
-{
- leon_flush_tlb_all();
-}
-
-static void leon_flush_tlb_page(struct vm_area_struct *vma,
- unsigned long page)
-{
- leon_flush_tlb_all();
-}
-
-static void leon_flush_tlb_range(struct vm_area_struct *vma,
- unsigned long start,
- unsigned long end)
-{
- leon_flush_tlb_all();
-}
-
-static void leon_flush_page_to_ram(unsigned long page)
-{
- leon_flush_cache_all();
-}
-
-static void leon_flush_sig_insns(struct mm_struct *mm, unsigned long page)
-{
- leon_flush_cache_all();
-}
-
-static void leon_flush_page_for_dma(unsigned long page)
-{
- leon_flush_dcache_all();
-}
-
-void __init poke_leonsparc(void)
-{
-}
-
-static const struct sparc32_cachetlb_ops leon_ops = {
- .cache_all = leon_flush_cache_all,
- .cache_mm = leon_flush_cache_mm,
- .cache_page = leon_flush_cache_page,
- .cache_range = leon_flush_cache_range,
- .tlb_all = leon_flush_tlb_all,
- .tlb_mm = leon_flush_tlb_mm,
- .tlb_page = leon_flush_tlb_page,
- .tlb_range = leon_flush_tlb_range,
- .page_to_ram = leon_flush_page_to_ram,
- .sig_insns = leon_flush_sig_insns,
- .page_for_dma = leon_flush_page_for_dma,
-};
-
-void __init init_leon(void)
-{
- srmmu_name = "LEON";
- sparc32_cachetlb_ops = &leon_ops;
- poke_srmmu = poke_leonsparc;
-
- srmmu_cache_pagetables = 0;
-
- leon_flush_during_switch = leon_flush_needed();
-}
-#endif
-
/* Probe for the srmmu chip version. */
static void __init get_srmmu_type(void)
{
diff --git a/arch/sparc/mm/srmmu.h b/arch/sparc/mm/srmmu.h
new file mode 100644
index 000000000000..5703274ccf89
--- /dev/null
+++ b/arch/sparc/mm/srmmu.h
@@ -0,0 +1,4 @@
+/* srmmu.c */
+extern char *srmmu_name;
+
+extern void (*poke_srmmu)(void);