[PATCH 2/2] Force 4K IOPages when eHEA is present in the machine.

Tony Breeds tony at bakeyournoodle.com
Thu Mar 20 15:33:45 EST 2008


eHEA doesn't work with 64k iopages, If an eHEA /can/ be present in the system
limit iopages to 4k.

Signed-off-by: Tony Breeds <tony at bakeyournoodle.com>
---
 arch/powerpc/mm/hash_utils_64.c |   30 +++++++++++++++++++++++++++---
 1 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c
index 590f1f6..4fd5e8a 100644
--- a/arch/powerpc/mm/hash_utils_64.c
+++ b/arch/powerpc/mm/hash_utils_64.c
@@ -302,14 +302,37 @@ static int __init htab_dt_scan_page_sizes(unsigned long node,
 	return 0;
 }
 
+#if defined(CONFIG_PPC_PSERIES) && defined(CONFIG_PPC_64K_PAGES)
+static int __init scan_dt_for_ehea(unsigned long node, const char *uname,
+                                  int depth, void *data)
+{
+	if (depth != 0)
+		return 0;
+
+	if (of_flat_dt_search(node, "HEA ", "ibm,drc-names"))
+		return 1;
+
+	return 0;
+}
+#endif
+
+
 static void __init htab_init_page_sizes(void)
 {
 	int rc;
+#ifdef CONFIG_PPC_64K_PAGES
+	int has_ehea = 0;
+#endif
 
 	/* Default to 4K pages only */
 	memcpy(mmu_psize_defs, mmu_psize_defaults_old,
 	       sizeof(mmu_psize_defaults_old));
 
+#if defined(CONFIG_PPC_PSERIES) && defined(CONFIG_PPC_64K_PAGES)
+	/* Scan to see if this system can have an EHEA, if so we'll
+	 * demote io_psize to 4K */
+	has_ehea = of_scan_flat_dt(scan_dt_for_ehea, NULL);
+#endif
 	/*
 	 * Try to find the available page sizes in the device-tree
 	 */
@@ -351,9 +374,10 @@ static void __init htab_init_page_sizes(void)
 		mmu_vmalloc_psize = MMU_PAGE_64K;
 		if (mmu_linear_psize == MMU_PAGE_4K)
 			mmu_linear_psize = MMU_PAGE_64K;
-		if (cpu_has_feature(CPU_FTR_CI_LARGE_PAGE))
-			mmu_io_psize = MMU_PAGE_64K;
-		else
+		if (cpu_has_feature(CPU_FTR_CI_LARGE_PAGE)) {
+			if (!has_ehea)
+				mmu_io_psize = MMU_PAGE_64K;
+		} else
 			mmu_ci_restrictions = 1;
 	}
 #endif /* CONFIG_PPC_64K_PAGES */
-- 
1.5.4.3




More information about the Linuxppc-dev mailing list