powerpc/book-3e: Introduce concept of Book-3e MMU
authorKumar Gala <galak@kernel.crashing.org>
Thu, 12 Feb 2009 22:12:40 +0000 (16:12 -0600)
committerKumar Gala <galak@kernel.crashing.org>
Thu, 12 Feb 2009 22:51:33 +0000 (16:51 -0600)
The Power ISA 2.06 spec introduces a standard MMU programming model that
is based on the Freescale Book-E MMU programing model.  The Freescale
version is pretty backwards compatiable with the ISA 2.06 definition so
we are starting to refactor some of the Freescale code so it can be
easily shared.

Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
arch/powerpc/include/asm/mmu-book3e.h [new file with mode: 0644]
arch/powerpc/include/asm/mmu-fsl-booke.h [deleted file]
arch/powerpc/include/asm/mmu.h
arch/powerpc/kernel/entry_32.S
arch/powerpc/platforms/Kconfig.cputype

diff --git a/arch/powerpc/include/asm/mmu-book3e.h b/arch/powerpc/include/asm/mmu-book3e.h
new file mode 100644 (file)
index 0000000..c5363c3
--- /dev/null
@@ -0,0 +1,103 @@
+#ifndef _ASM_POWERPC_MMU_BOOK3E_H_
+#define _ASM_POWERPC_MMU_BOOK3E_H_
+/*
+ * Freescale Book-E/Book-3e (ISA 2.06+) MMU support
+ */
+
+/* Book-3e defined page sizes */
+#define BOOK3E_PAGESZ_1K       0
+#define BOOK3E_PAGESZ_2K       1
+#define BOOK3E_PAGESZ_4K       2
+#define BOOK3E_PAGESZ_8K       3
+#define BOOK3E_PAGESZ_16K      4
+#define BOOK3E_PAGESZ_32K      5
+#define BOOK3E_PAGESZ_64K      6
+#define BOOK3E_PAGESZ_128K     7
+#define BOOK3E_PAGESZ_256K     8
+#define BOOK3E_PAGESZ_512K     9
+#define BOOK3E_PAGESZ_1M       10
+#define BOOK3E_PAGESZ_2M       11
+#define BOOK3E_PAGESZ_4M       12
+#define BOOK3E_PAGESZ_8M       13
+#define BOOK3E_PAGESZ_16M      14
+#define BOOK3E_PAGESZ_32M      15
+#define BOOK3E_PAGESZ_64M      16
+#define BOOK3E_PAGESZ_128M     17
+#define BOOK3E_PAGESZ_256M     18
+#define BOOK3E_PAGESZ_512M     19
+#define BOOK3E_PAGESZ_1GB      20
+#define BOOK3E_PAGESZ_2GB      21
+#define BOOK3E_PAGESZ_4GB      22
+#define BOOK3E_PAGESZ_8GB      23
+#define BOOK3E_PAGESZ_16GB     24
+#define BOOK3E_PAGESZ_32GB     25
+#define BOOK3E_PAGESZ_64GB     26
+#define BOOK3E_PAGESZ_128GB    27
+#define BOOK3E_PAGESZ_256GB    28
+#define BOOK3E_PAGESZ_512GB    29
+#define BOOK3E_PAGESZ_1TB      30
+#define BOOK3E_PAGESZ_2TB      31
+
+#define MAS0_TLBSEL(x) ((x << 28) & 0x30000000)
+#define MAS0_ESEL(x)   ((x << 16) & 0x0FFF0000)
+#define MAS0_NV(x)     ((x) & 0x00000FFF)
+
+#define MAS1_VALID     0x80000000
+#define MAS1_IPROT     0x40000000
+#define MAS1_TID(x)    ((x << 16) & 0x3FFF0000)
+#define MAS1_IND       0x00002000
+#define MAS1_TS                0x00001000
+#define MAS1_TSIZE(x)  ((x << 7) & 0x00000F80)
+
+#define MAS2_EPN       0xFFFFF000
+#define MAS2_X0                0x00000040
+#define MAS2_X1                0x00000020
+#define MAS2_W         0x00000010
+#define MAS2_I         0x00000008
+#define MAS2_M         0x00000004
+#define MAS2_G         0x00000002
+#define MAS2_E         0x00000001
+#define MAS2_EPN_MASK(size)            (~0 << (size + 10))
+#define MAS2_VAL(addr, size, flags)    ((addr) & MAS2_EPN_MASK(size) | (flags))
+
+#define MAS3_RPN       0xFFFFF000
+#define MAS3_U0                0x00000200
+#define MAS3_U1                0x00000100
+#define MAS3_U2                0x00000080
+#define MAS3_U3                0x00000040
+#define MAS3_UX                0x00000020
+#define MAS3_SX                0x00000010
+#define MAS3_UW                0x00000008
+#define MAS3_SW                0x00000004
+#define MAS3_UR                0x00000002
+#define MAS3_SR                0x00000001
+
+#define MAS4_TLBSELD(x) MAS0_TLBSEL(x)
+#define MAS4_INDD      0x00008000
+#define MAS4_TSIZED(x) MAS1_TSIZE(x)
+#define MAS4_X0D       0x00000040
+#define MAS4_X1D       0x00000020
+#define MAS4_WD                0x00000010
+#define MAS4_ID                0x00000008
+#define MAS4_MD                0x00000004
+#define MAS4_GD                0x00000002
+#define MAS4_ED                0x00000001
+
+#define MAS6_SPID0     0x3FFF0000
+#define MAS6_SPID1     0x00007FFE
+#define MAS6_ISIZE(x)  MAS1_TSIZE(x)
+#define MAS6_SAS       0x00000001
+#define MAS6_SPID      MAS6_SPID0
+
+#define MAS7_RPN       0xFFFFFFFF
+
+#ifndef __ASSEMBLY__
+
+typedef struct {
+       unsigned int    id;
+       unsigned int    active;
+       unsigned long   vdso_base;
+} mm_context_t;
+#endif /* !__ASSEMBLY__ */
+
+#endif /* _ASM_POWERPC_MMU_BOOK3E_H_ */
diff --git a/arch/powerpc/include/asm/mmu-fsl-booke.h b/arch/powerpc/include/asm/mmu-fsl-booke.h
deleted file mode 100644 (file)
index c5363c3..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-#ifndef _ASM_POWERPC_MMU_BOOK3E_H_
-#define _ASM_POWERPC_MMU_BOOK3E_H_
-/*
- * Freescale Book-E/Book-3e (ISA 2.06+) MMU support
- */
-
-/* Book-3e defined page sizes */
-#define BOOK3E_PAGESZ_1K       0
-#define BOOK3E_PAGESZ_2K       1
-#define BOOK3E_PAGESZ_4K       2
-#define BOOK3E_PAGESZ_8K       3
-#define BOOK3E_PAGESZ_16K      4
-#define BOOK3E_PAGESZ_32K      5
-#define BOOK3E_PAGESZ_64K      6
-#define BOOK3E_PAGESZ_128K     7
-#define BOOK3E_PAGESZ_256K     8
-#define BOOK3E_PAGESZ_512K     9
-#define BOOK3E_PAGESZ_1M       10
-#define BOOK3E_PAGESZ_2M       11
-#define BOOK3E_PAGESZ_4M       12
-#define BOOK3E_PAGESZ_8M       13
-#define BOOK3E_PAGESZ_16M      14
-#define BOOK3E_PAGESZ_32M      15
-#define BOOK3E_PAGESZ_64M      16
-#define BOOK3E_PAGESZ_128M     17
-#define BOOK3E_PAGESZ_256M     18
-#define BOOK3E_PAGESZ_512M     19
-#define BOOK3E_PAGESZ_1GB      20
-#define BOOK3E_PAGESZ_2GB      21
-#define BOOK3E_PAGESZ_4GB      22
-#define BOOK3E_PAGESZ_8GB      23
-#define BOOK3E_PAGESZ_16GB     24
-#define BOOK3E_PAGESZ_32GB     25
-#define BOOK3E_PAGESZ_64GB     26
-#define BOOK3E_PAGESZ_128GB    27
-#define BOOK3E_PAGESZ_256GB    28
-#define BOOK3E_PAGESZ_512GB    29
-#define BOOK3E_PAGESZ_1TB      30
-#define BOOK3E_PAGESZ_2TB      31
-
-#define MAS0_TLBSEL(x) ((x << 28) & 0x30000000)
-#define MAS0_ESEL(x)   ((x << 16) & 0x0FFF0000)
-#define MAS0_NV(x)     ((x) & 0x00000FFF)
-
-#define MAS1_VALID     0x80000000
-#define MAS1_IPROT     0x40000000
-#define MAS1_TID(x)    ((x << 16) & 0x3FFF0000)
-#define MAS1_IND       0x00002000
-#define MAS1_TS                0x00001000
-#define MAS1_TSIZE(x)  ((x << 7) & 0x00000F80)
-
-#define MAS2_EPN       0xFFFFF000
-#define MAS2_X0                0x00000040
-#define MAS2_X1                0x00000020
-#define MAS2_W         0x00000010
-#define MAS2_I         0x00000008
-#define MAS2_M         0x00000004
-#define MAS2_G         0x00000002
-#define MAS2_E         0x00000001
-#define MAS2_EPN_MASK(size)            (~0 << (size + 10))
-#define MAS2_VAL(addr, size, flags)    ((addr) & MAS2_EPN_MASK(size) | (flags))
-
-#define MAS3_RPN       0xFFFFF000
-#define MAS3_U0                0x00000200
-#define MAS3_U1                0x00000100
-#define MAS3_U2                0x00000080
-#define MAS3_U3                0x00000040
-#define MAS3_UX                0x00000020
-#define MAS3_SX                0x00000010
-#define MAS3_UW                0x00000008
-#define MAS3_SW                0x00000004
-#define MAS3_UR                0x00000002
-#define MAS3_SR                0x00000001
-
-#define MAS4_TLBSELD(x) MAS0_TLBSEL(x)
-#define MAS4_INDD      0x00008000
-#define MAS4_TSIZED(x) MAS1_TSIZE(x)
-#define MAS4_X0D       0x00000040
-#define MAS4_X1D       0x00000020
-#define MAS4_WD                0x00000010
-#define MAS4_ID                0x00000008
-#define MAS4_MD                0x00000004
-#define MAS4_GD                0x00000002
-#define MAS4_ED                0x00000001
-
-#define MAS6_SPID0     0x3FFF0000
-#define MAS6_SPID1     0x00007FFE
-#define MAS6_ISIZE(x)  MAS1_TSIZE(x)
-#define MAS6_SAS       0x00000001
-#define MAS6_SPID      MAS6_SPID0
-
-#define MAS7_RPN       0xFFFFFFFF
-
-#ifndef __ASSEMBLY__
-
-typedef struct {
-       unsigned int    id;
-       unsigned int    active;
-       unsigned long   vdso_base;
-} mm_context_t;
-#endif /* !__ASSEMBLY__ */
-
-#endif /* _ASM_POWERPC_MMU_BOOK3E_H_ */
index 6e76399113189baaf849676a188127efb46e4e5a..5c78079cfa3cc162e7b4520cae349db9909b1ff5 100644 (file)
@@ -71,9 +71,9 @@ extern unsigned int __start___mmu_ftr_fixup, __stop___mmu_ftr_fixup;
 #elif defined(CONFIG_44x)
 /* 44x-style software loaded TLB */
 #  include <asm/mmu-44x.h>
-#elif defined(CONFIG_FSL_BOOKE)
-/* Freescale Book-E software loaded TLB */
-#  include <asm/mmu-fsl-booke.h>
+#elif defined(CONFIG_PPC_BOOK3E_MMU)
+/* Freescale Book-E software loaded TLB or Book-3e (ISA 2.06+) MMU */
+#  include <asm/mmu-book3e.h>
 #elif defined (CONFIG_PPC_8xx)
 /* Motorola/Freescale 8xx software loaded TLB */
 #  include <asm/mmu-8xx.h>
index 6f7eb7e00c79eb3df9c6eba5ad61087e36427015..301c646d1a7d75840fb11ba732a27bb8fdcc3f2c 100644 (file)
@@ -63,7 +63,7 @@ debug_transfer_to_handler:
 
        .globl  crit_transfer_to_handler
 crit_transfer_to_handler:
-#ifdef CONFIG_FSL_BOOKE
+#ifdef CONFIG_PPC_BOOK3E_MMU
        mfspr   r0,SPRN_MAS0
        stw     r0,MAS0(r11)
        mfspr   r0,SPRN_MAS1
@@ -78,7 +78,7 @@ crit_transfer_to_handler:
        mfspr   r0,SPRN_MAS7
        stw     r0,MAS7(r11)
 #endif /* CONFIG_PHYS_64BIT */
-#endif /* CONFIG_FSL_BOOKE */
+#endif /* CONFIG_PPC_BOOK3E_MMU */
 #ifdef CONFIG_44x
        mfspr   r0,SPRN_MMUCR
        stw     r0,MMUCR(r11)
@@ -914,7 +914,7 @@ exc_exit_restart_end:
        mtspr   SPRN_##exc_lvl_srr0,r9;                                 \
        mtspr   SPRN_##exc_lvl_srr1,r10;
 
-#if defined(CONFIG_FSL_BOOKE)
+#if defined(CONFIG_PPC_BOOK3E_MMU)
 #ifdef CONFIG_PHYS_64BIT
 #define        RESTORE_MAS7                                                    \
        lwz     r11,MAS7(r1);                                           \
index e868b5c50723d348cbf2357e8adb3c9ec28998b5..9428c0e11b20d2f5304e342128f67aa993016a82 100644 (file)
@@ -210,6 +210,10 @@ config PPC_MMU_NOHASH
        def_bool y
        depends on !PPC_STD_MMU
 
+config PPC_BOOK3E_MMU
+       def_bool y
+       depends on FSL_BOOKE
+
 config PPC_MM_SLICES
        bool
        default y if HUGETLB_PAGE || (PPC_STD_MMU_64 && PPC_64K_PAGES)