if (platform != PLATFORM_POWERMAC)
return 0;
+ /*
+ * On U3, the DART (iommu) must be allocated now since it
+ * has an impact on htab_initialize (due to the large page it
+ * occupies having to be broken up so the DART itself is not
+ * part of the cacheable linar mapping
+ */
+ alloc_u3_dart_table();
+
return 1;
}
static int __initdata dt_root_addr_cells;
static int __initdata dt_root_size_cells;
static int __initdata iommu_is_off;
+int __initdata iommu_force_on;
typedef u32 cell_t;
#if 0
return 0;
systemcfg->platform = *prop;
- /* check if iommu is forced off */
+ /* check if iommu is forced on or off */
if (get_flat_dt_prop(node, "linux,iommu-off", NULL) != NULL)
iommu_is_off = 1;
+ if (get_flat_dt_prop(node, "linux,iommu-force-on", NULL) != NULL)
+ iommu_force_on = 1;
#ifdef CONFIG_PPC_PSERIES
/* To help early debugging via the front panel, we retreive a minimal
DBG("Found, Initializing memory management...\n");
-#ifdef CONFIG_U3_DART
- /*
- * On U3, the DART (iommu) must be allocated now since it
- * has an impact on htab_initialize (due to the large page it
- * occupies having to be broken up so the DART itself is not
- * part of the cacheable linar mapping
- */
- alloc_u3_dart_table();
-#endif /* CONFIG_U3_DART */
-
/*
* Initialize stab / SLB management
*/
#include "pci.h"
+extern int iommu_force_on;
/* physical base of DART registers */
#define DART_BASE 0xf8033000UL
/* Only reserve DART space if machine has more than 2GB of RAM
* or if requested with iommu=on on cmdline.
*/
- if (lmb_end_of_DRAM() <= 0x80000000ull &&
- get_property(of_chosen, "linux,iommu-force-on", NULL) == NULL)
+ if (lmb_end_of_DRAM() <= 0x80000000ull && !iommu_force_on)
return;
/* 512 pages (2MB) is max DART tablesize. */