|
@@ -5,11 +5,6 @@
|
|
|
* the ppc64 hashed page table.
|
|
|
*/
|
|
|
|
|
|
-#ifndef __ASSEMBLY__
|
|
|
-#include <linux/stddef.h>
|
|
|
-#include <asm/tlbflush.h>
|
|
|
-#endif /* __ASSEMBLY__ */
|
|
|
-
|
|
|
#ifdef CONFIG_PPC_64K_PAGES
|
|
|
#include <asm/pgtable-ppc64-64k.h>
|
|
|
#else
|
|
@@ -38,26 +33,46 @@
|
|
|
#endif
|
|
|
|
|
|
/*
|
|
|
- * Define the address range of the vmalloc VM area.
|
|
|
+ * Define the address range of the kernel non-linear virtual area
|
|
|
+ */
|
|
|
+
|
|
|
+#ifdef CONFIG_PPC_BOOK3E
|
|
|
+#define KERN_VIRT_START ASM_CONST(0x8000000000000000)
|
|
|
+#else
|
|
|
+#define KERN_VIRT_START ASM_CONST(0xD000000000000000)
|
|
|
+#endif
|
|
|
+#define KERN_VIRT_SIZE PGTABLE_RANGE
|
|
|
+
|
|
|
+/*
|
|
|
+ * The vmalloc space starts at the beginning of that region, and
|
|
|
+ * occupies half of it on hash CPUs and a quarter of it on Book3E
|
|
|
*/
|
|
|
-#define VMALLOC_START ASM_CONST(0xD000000000000000)
|
|
|
-#define VMALLOC_SIZE (PGTABLE_RANGE >> 1)
|
|
|
-#define VMALLOC_END (VMALLOC_START + VMALLOC_SIZE)
|
|
|
+#define VMALLOC_START KERN_VIRT_START
|
|
|
+#ifdef CONFIG_PPC_BOOK3E
|
|
|
+#define VMALLOC_SIZE (KERN_VIRT_SIZE >> 2)
|
|
|
+#else
|
|
|
+#define VMALLOC_SIZE (KERN_VIRT_SIZE >> 1)
|
|
|
+#endif
|
|
|
+#define VMALLOC_END (VMALLOC_START + VMALLOC_SIZE)
|
|
|
|
|
|
/*
|
|
|
- * Define the address ranges for MMIO and IO space :
|
|
|
+ * The second half of the kernel virtual space is used for IO mappings,
|
|
|
+ * it's itself carved into the PIO region (ISA and PHB IO space) and
|
|
|
+ * the ioremap space
|
|
|
*
|
|
|
- * ISA_IO_BASE = VMALLOC_END, 64K reserved area
|
|
|
+ * ISA_IO_BASE = KERN_IO_START, 64K reserved area
|
|
|
* PHB_IO_BASE = ISA_IO_BASE + 64K to ISA_IO_BASE + 2G, PHB IO spaces
|
|
|
* IOREMAP_BASE = ISA_IO_BASE + 2G to VMALLOC_START + PGTABLE_RANGE
|
|
|
*/
|
|
|
+#define KERN_IO_START (KERN_VIRT_START + (KERN_VIRT_SIZE >> 1))
|
|
|
#define FULL_IO_SIZE 0x80000000ul
|
|
|
-#define ISA_IO_BASE (VMALLOC_END)
|
|
|
-#define ISA_IO_END (VMALLOC_END + 0x10000ul)
|
|
|
+#define ISA_IO_BASE (KERN_IO_START)
|
|
|
+#define ISA_IO_END (KERN_IO_START + 0x10000ul)
|
|
|
#define PHB_IO_BASE (ISA_IO_END)
|
|
|
-#define PHB_IO_END (VMALLOC_END + FULL_IO_SIZE)
|
|
|
+#define PHB_IO_END (KERN_IO_START + FULL_IO_SIZE)
|
|
|
#define IOREMAP_BASE (PHB_IO_END)
|
|
|
-#define IOREMAP_END (VMALLOC_START + PGTABLE_RANGE)
|
|
|
+#define IOREMAP_END (KERN_VIRT_START + KERN_VIRT_SIZE)
|
|
|
+
|
|
|
|
|
|
/*
|
|
|
* Region IDs
|
|
@@ -72,19 +87,28 @@
|
|
|
#define USER_REGION_ID (0UL)
|
|
|
|
|
|
/*
|
|
|
- * Defines the address of the vmemap area, in its own region
|
|
|
+ * Defines the address of the vmemap area, in its own region on
|
|
|
+ * hash table CPUs and after the vmalloc space on Book3E
|
|
|
*/
|
|
|
+#ifdef CONFIG_PPC_BOOK3E
|
|
|
+#define VMEMMAP_BASE VMALLOC_END
|
|
|
+#define VMEMMAP_END KERN_IO_START
|
|
|
+#else
|
|
|
#define VMEMMAP_BASE (VMEMMAP_REGION_ID << REGION_SHIFT)
|
|
|
+#endif
|
|
|
#define vmemmap ((struct page *)VMEMMAP_BASE)
|
|
|
|
|
|
|
|
|
/*
|
|
|
* Include the PTE bits definitions
|
|
|
*/
|
|
|
+#ifdef CONFIG_PPC_BOOK3S
|
|
|
#include <asm/pte-hash64.h>
|
|
|
+#else
|
|
|
+#include <asm/pte-book3e.h>
|
|
|
+#endif
|
|
|
#include <asm/pte-common.h>
|
|
|
|
|
|
-
|
|
|
#ifdef CONFIG_PPC_MM_SLICES
|
|
|
#define HAVE_ARCH_UNMAPPED_AREA
|
|
|
#define HAVE_ARCH_UNMAPPED_AREA_TOPDOWN
|
|
@@ -92,6 +116,9 @@
|
|
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
|
|
+#include <linux/stddef.h>
|
|
|
+#include <asm/tlbflush.h>
|
|
|
+
|
|
|
/*
|
|
|
* This is the default implementation of various PTE accessors, it's
|
|
|
* used in all cases except Book3S with 64K pages where we have a
|