diff --git a/arch/s390/mm/mem_detect.c b/arch/s390/mm/mem_detect.c
index 0389d8d243589d929ff8be2eb273240abd7a8bc1..185e70d3e15397d6bec38e5c5f4d76e5179b18bd 100644
--- a/arch/s390/mm/mem_detect.c
+++ b/arch/s390/mm/mem_detect.c
@@ -41,7 +41,8 @@ void __init detect_memory_memblock(void)
 	memblock_set_bottom_up(true);
 	do {
 		size = 0;
-		type = tprot(addr);
+		/* assume lowcore is writable */
+		type = addr ? tprot(addr) : CHUNK_READ_WRITE;
 		do {
 			size += rzm;
 			if (max_physmem_end && addr + size >= max_physmem_end)