Merge remote-tracking branch 'pci/pci/gavin-window-alignment' into next
[firefly-linux-kernel-4.4.55.git] / arch / powerpc / platforms / ps3 / setup.c
index e8ec1b2bfffd2a7b2f5eff77d57dc5ee872b27df..3f509f86432c1b28df128b984793df50789a06f3 100644 (file)
@@ -184,19 +184,25 @@ early_param("ps3flash", early_parse_ps3flash);
 #define prealloc_ps3flash_bounce_buffer()      do { } while (0)
 #endif
 
-static int ps3_set_dabr(unsigned long dabr)
+static int ps3_set_dabr(unsigned long dabr, unsigned long dabrx)
 {
-       enum {DABR_USER = 1, DABR_KERNEL = 2,};
+       /* Have to set at least one bit in the DABRX */
+       if (dabrx == 0 && dabr == 0)
+               dabrx = DABRX_USER;
+       /* hypervisor only allows us to set BTI, Kernel and user */
+       dabrx &= DABRX_BTI | DABRX_KERNEL | DABRX_USER;
 
-       return lv1_set_dabr(dabr, DABR_KERNEL | DABR_USER) ? -1 : 0;
+       return lv1_set_dabr(dabr, dabrx) ? -1 : 0;
 }
 
 static void __init ps3_setup_arch(void)
 {
+       u64 tmp;
 
        DBG(" -> %s:%d\n", __func__, __LINE__);
 
-       lv1_get_version_info(&ps3_firmware_version.raw);
+       lv1_get_version_info(&ps3_firmware_version.raw, &tmp);
+
        printk(KERN_INFO "PS3 firmware version %u.%u.%u\n",
               ps3_firmware_version.major, ps3_firmware_version.minor,
               ps3_firmware_version.rev);