This patch adds the definition for PPC440 virtual address translation.
On ppc44x, the virtual-address is split as below :
Bits |0 10|11 19|20 31|
-------------------------------------
| PGD | PMD | PAGE_OFFSET |
-----------------------------------
Also the physical address is 64bit.
Signed-off-by: Suzuki K. Poulose <suzuki(a)in.ibm.com>
---
defs.h | 5 +++++
ppc.c | 14 ++++++++++++++
2 files changed, 19 insertions(+), 0 deletions(-)
diff --git a/defs.h b/defs.h
index aba13ea..7410412 100755
--- a/defs.h
+++ b/defs.h
@@ -2609,6 +2609,11 @@ struct load_module {
#define DEFAULT_PTRS_PER_PGD (1024)
#define DEFAULT_PTE_SIZE sizeof(ulong)
+/* PPC440 translation bits */
+#define PPC440_PGDIR_SHIFT (21)
+#define PPC440_PTRS_PER_PTE (512)
+#define PPC440_PTRS_PER_PGD (2048)
+#define PPC440_PTE_SIZE sizeof(unsigned long long)
#define PGDIR_SHIFT (base_platform->pgdir_shift)
#define PTRS_PER_PTE (base_platform->ptrs_per_pte)
diff --git a/ppc.c b/ppc.c
index 600df34..ea7247b 100755
--- a/ppc.c
+++ b/ppc.c
@@ -83,6 +83,20 @@ struct platform {
.pte_size = DEFAULT_PTE_SIZE,
},
{
+ .name = "ppc440",
+ .pgdir_shift = PPC440_PGDIR_SHIFT,
+ .ptrs_per_pgd = PPC440_PTRS_PER_PGD,
+ .ptrs_per_pte = PPC440_PTRS_PER_PTE,
+ .pte_size = PPC440_PTE_SIZE,
+ },
+ {
+ .name = "ppc440gp",
+ .pgdir_shift = PPC440_PGDIR_SHIFT,
+ .ptrs_per_pgd = PPC440_PTRS_PER_PGD,
+ .ptrs_per_pte = PPC440_PTRS_PER_PTE,
+ .pte_size = PPC440_PTE_SIZE,
+ },
+ {
/* Keep this at the end */
.name = NULL,
}