Merge with Paulus
[firefly-linux-kernel-4.4.55.git] / arch / powerpc / platforms / pseries / setup.c
index f73d69143d35548b40f80b2cdcf8400d5330a5b6..65bee939eeccce1d5e626f985eee080af08c9c63 100644 (file)
@@ -58,7 +58,6 @@
 #include <asm/irq.h>
 #include <asm/time.h>
 #include <asm/nvram.h>
-#include <asm/plpar_wrappers.h>
 #include "xics.h"
 #include <asm/firmware.h>
 #include <asm/pmc.h>
@@ -67,6 +66,8 @@
 #include <asm/i8259.h>
 #include <asm/udbg.h>
 
+#include "plpar_wrappers.h"
+
 #ifdef DEBUG
 #define DBG(fmt...) udbg_printf(fmt)
 #else
@@ -350,6 +351,16 @@ static void pSeries_mach_cpu_die(void)
        for(;;);
 }
 
+static int pseries_set_dabr(unsigned long dabr)
+{
+       if (firmware_has_feature(FW_FEATURE_XDABR)) {
+               /* We want to catch accesses from kernel and userspace */
+               return plpar_set_xdabr(dabr, H_DABRX_KERNEL | H_DABRX_USER);
+       }
+
+       return plpar_set_dabr(dabr);
+}
+
 
 /*
  * Early initialization.  Relocation is on but do not reference unbolted pages
@@ -385,6 +396,8 @@ static void __init pSeries_init_early(void)
                DBG("Hello World !\n");
        }
 
+       if (firmware_has_feature(FW_FEATURE_XDABR | FW_FEATURE_DABR))
+               ppc_md.set_dabr = pseries_set_dabr;
 
        iommu_init_early_pSeries();