--- /dev/null
+From 86a86804e4f18fc3880541b3d5a07f4df0fe29cb Mon Sep 17 00:00:00 2001
+From: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Date: Mon, 18 Feb 2019 18:10:08 +0100
+Subject: s390/setup: fix boot crash for machine without EDAT-1
+
+From: Martin Schwidefsky <schwidefsky@de.ibm.com>
+
+commit 86a86804e4f18fc3880541b3d5a07f4df0fe29cb upstream.
+
+The fix to make WARN work in the early boot code created a problem
+on older machines without EDAT-1. The setup_lowcore_dat_on function
+uses the pointer from lowcore_ptr[0] to set the DAT bit in the new
+PSWs. That does not work if the kernel page table is set up with
+4K pages as the prefix address maps to absolute zero.
+
+To make this work the PSWs need to be changed with via address 0 in
+form of the S390_lowcore definition.
+
+Reported-by: Guenter Roeck <linux@roeck-us.net>
+Tested-by: Cornelia Huck <cohuck@redhat.com>
+Fixes: 94f85ed3e2f8 ("s390/setup: fix early warning messages")
+Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/s390/kernel/setup.c | 13 ++++++-------
+ 1 file changed, 6 insertions(+), 7 deletions(-)
+
+--- a/arch/s390/kernel/setup.c
++++ b/arch/s390/kernel/setup.c
+@@ -390,13 +390,12 @@ static void __init setup_lowcore_dat_off
+
+ static void __init setup_lowcore_dat_on(void)
+ {
+- struct lowcore *lc;
+-
+- lc = lowcore_ptr[0];
+- lc->external_new_psw.mask |= PSW_MASK_DAT;
+- lc->svc_new_psw.mask |= PSW_MASK_DAT;
+- lc->program_new_psw.mask |= PSW_MASK_DAT;
+- lc->io_new_psw.mask |= PSW_MASK_DAT;
++ __ctl_clear_bit(0, 28);
++ S390_lowcore.external_new_psw.mask |= PSW_MASK_DAT;
++ S390_lowcore.svc_new_psw.mask |= PSW_MASK_DAT;
++ S390_lowcore.program_new_psw.mask |= PSW_MASK_DAT;
++ S390_lowcore.io_new_psw.mask |= PSW_MASK_DAT;
++ __ctl_set_bit(0, 28);
+ }
+
+ static struct resource code_resource = {