diff --git a/arch/s390/kernel/als.c b/arch/s390/kernel/als.c
index f96a577972c4..0eff858c2434 100644
--- a/arch/s390/kernel/als.c
+++ b/arch/s390/kernel/als.c
@@ -19,6 +19,38 @@
 
 static unsigned long als[] __initdata = { FACILITIES_ALS };
 
+static void __init u16_to_hex(char *str, u16 val)
+{
+	int i, num;
+
+	for (i = 1; i <= 4; i++) {
+		num = (val >> (16 - 4 * i)) & 0xf;
+		if (num >= 10)
+			num += 7;
+		*str++ = '0' + num;
+	}
+	*str = '\0';
+}
+
+static void __init print_machine_type(void)
+{
+	static char mach_str[80] __initdata = "Detected machine-type number: ";
+	char type_str[5];
+	struct cpuid id;
+
+	get_cpu_id(&id);
+	u16_to_hex(type_str, id.machine);
+	strcat(mach_str, type_str);
+	_sclp_print_early(mach_str);
+}
+
+static void __init facility_mismatch(void)
+{
+	_sclp_print_early("The Linux kernel requires more recent processor hardware");
+	print_machine_type();
+	disabled_wait(0x8badcccc);
+}
+
 void __init verify_facilities(void)
 {
 	int i;
@@ -38,9 +70,7 @@ void __init verify_facilities(void)
 			     : "memory", "cc");
 	}
 	for (i = 0; i < ARRAY_SIZE(als); i++) {
-		if ((S390_lowcore.stfle_fac_list[i] & als[i]) == als[i])
-			continue;
-		_sclp_print_early("The Linux kernel requires more recent processor hardware");
-		disabled_wait(0x8badcccc);
+		if ((S390_lowcore.stfle_fac_list[i] & als[i]) != als[i])
+			facility_mismatch();
 	}
 }