diff --git a/cbtable.c b/cbtable.c
index e262a84..e5bcb45 100644
--- a/cbtable.c
+++ b/cbtable.c
@@ -261,7 +261,7 @@
 #else
 	start = 0x0;
 #endif
-	table_area = physmap_try_ro("low megabyte", start, BYTES_TO_MAP - start);
+	table_area = physmap_ro("low megabyte", start, BYTES_TO_MAP - start);
 	if (ERROR_PTR == table_area) {
 		msg_perr("Failed getting access to coreboot low tables.\n");
 		return -1;
@@ -277,7 +277,7 @@
 			start = forward->forward;
 			start &= ~(getpagesize() - 1);
 			physunmap(table_area, BYTES_TO_MAP);
-			table_area = physmap_try_ro("high tables", start, BYTES_TO_MAP);
+			table_area = physmap_ro("high tables", start, BYTES_TO_MAP);
 			if (ERROR_PTR == table_area) {
 				msg_perr("Failed getting access to coreboot high tables.\n");
 				return -1;
diff --git a/chipset_enable.c b/chipset_enable.c
index 5002427..3db7a8d 100644
--- a/chipset_enable.c
+++ b/chipset_enable.c
@@ -482,7 +482,7 @@
 	/* Map RCBA to virtual memory */
 	rcrb = rphysmap("ICH RCRB", tmp, 0x4000);
 	if (rcrb == ERROR_PTR)
-		return 1;
+		return ERROR_FATAL;
 
 	/* Test Boot BIOS Strap Status */
 	bnt = mmio_readl(rcrb + 0x3410);
@@ -566,7 +566,7 @@
 	/* Map RCBA to virtual memory */
 	rcrb = rphysmap("ICH RCRB", tmp, 0x4000);
 	if (rcrb == ERROR_PTR)
-		return 1;
+		return ERROR_FATAL;
 
 	gcs = mmio_readl(rcrb + 0x3410);
 	msg_pdbg("GCS = 0x%x: ", gcs);
@@ -1289,6 +1289,8 @@
 
 	/* 1. Map MMCR */
 	mmcr = physmap("Elan SC520 MMCR", 0xfffef000, getpagesize());
+	if (mmcr == ERROR_PTR)
+		return ERROR_FATAL;
 
 	/* 2. Scan PAR0 (0x88) - PAR15 (0xc4) for
 	 *    BOOTCS region (PARx[31:29] = 100b)e
diff --git a/dmi.c b/dmi.c
index d6acb4b..14f3871 100644
--- a/dmi.c
+++ b/dmi.c
@@ -250,8 +250,8 @@
 	 * - EFI's configuration table contains a pointer to the SMBIOS table. On linux it can be obtained from
 	 *   sysfs. EFI's SMBIOS GUID is: {0xeb9d2d31,0x2d88,0x11d3,0x9a,0x16,0x0,0x90,0x27,0x3f,0xc1,0x4d}
 	 * - Scanning physical memory address range 0x000F0000h to 0x000FFFFF for the anchor-string(s). */
-	dmi_mem = physmap_try_ro("DMI", 0xF0000, 0x10000);
-	if (dmi_mem == NULL)
+	dmi_mem = physmap_ro("DMI", 0xF0000, 0x10000);
+	if (dmi_mem == ERROR_PTR)
 		return ret;
 
 	for (fp = 0; fp <= 0xFFF0; fp += 16) {
diff --git a/nicintel_spi.c b/nicintel_spi.c
index 11b26c7..faceedd 100644
--- a/nicintel_spi.c
+++ b/nicintel_spi.c
@@ -177,6 +177,9 @@
 		return 1;
 
 	nicintel_spibar = rphysmap("Intel Gigabit NIC w/ SPI flash", io_base_addr, MEMMAP_SIZE);
+	if (nicintel_spibar == ERROR_PTR)
+		return 1;
+
 	/* Automatic restore of EECD on shutdown is not possible because EECD
 	 * does not only contain FLASH_WRITES_DISABLED|FLASH_WRITES_ENABLED,
 	 * but other bits with side effects as well. Those other bits must be
diff --git a/physmap.c b/physmap.c
index caad1ca..9638c78 100644
--- a/physmap.c
+++ b/physmap.c
@@ -203,8 +203,6 @@
 }
 #endif
 
-#define PHYSM_NOFAIL	0
-#define PHYSM_MAYFAIL	1
 #define PHYSM_RW	0
 #define PHYSM_RO	1
 #define PHYSM_NOCLEANUP	0
@@ -249,8 +247,8 @@
 	return 0;
 }
 
-static void *physmap_common(const char *descr, uintptr_t phys_addr, size_t len, bool mayfail,
-			    bool readonly, bool autocleanup, bool round)
+static void *physmap_common(const char *descr, uintptr_t phys_addr, size_t len, bool readonly, bool autocleanup,
+			    bool round)
 {
 	void *virt_addr;
 	uintptr_t offset = 0;
@@ -287,53 +285,47 @@
 			 "and reboot, or reboot into\n"
 			 "single user mode.\n");
 #endif
-		if (mayfail)
-			return ERROR_PTR;
-		else
-			exit(3);
+		return ERROR_PTR;
 	}
 
 	if (autocleanup) {
 		struct undo_physmap_data *d = malloc(sizeof(struct undo_physmap_data));
 		if (d == NULL) {
 			msg_perr("%s: Out of memory!\n", __func__);
-			goto unmap_out;
+			physunmap(virt_addr, len);
+			return ERROR_PTR;
 		}
 
 		d->virt_addr = virt_addr;
 		d->len = len;
 		if (register_shutdown(undo_physmap, d) != 0) {
 			msg_perr("%s: Could not register shutdown function!\n", __func__);
-			goto unmap_out;
+			physunmap(virt_addr, len);
+			return ERROR_PTR;
 		}
 	}
 
 	return virt_addr + offset;
-unmap_out:
-	physunmap(virt_addr, len);
-	if (!mayfail)
-		exit(3);
-	return ERROR_PTR;
 }
 
 void *physmap(const char *descr, uintptr_t phys_addr, size_t len)
 {
-	return physmap_common(descr, phys_addr, len, PHYSM_NOFAIL, PHYSM_RW, PHYSM_NOCLEANUP, PHYSM_EXACT);
+	return physmap_common(descr, phys_addr, len, PHYSM_RW, PHYSM_NOCLEANUP, PHYSM_EXACT);
 }
 
 void *rphysmap(const char *descr, uintptr_t phys_addr, size_t len)
 {
-	return physmap_common(descr, phys_addr, len, PHYSM_NOFAIL, PHYSM_RW, PHYSM_CLEANUP, PHYSM_ROUND);
+	return physmap_common(descr, phys_addr, len, PHYSM_RW, PHYSM_CLEANUP, PHYSM_ROUND);
 }
 
 void *physmap_round(const char *descr, uintptr_t phys_addr, size_t len)
 {
-	return physmap_common(descr, phys_addr, len, PHYSM_NOFAIL, PHYSM_RW, PHYSM_NOCLEANUP, PHYSM_ROUND);
+	return physmap_common(descr, phys_addr, len, PHYSM_RW, PHYSM_NOCLEANUP, PHYSM_ROUND);
 }
 
-void *physmap_try_ro(const char *descr, uintptr_t phys_addr, size_t len)
+void *physmap_ro(const char *descr, uintptr_t phys_addr, size_t len)
 {
-	return physmap_common(descr, phys_addr, len, PHYSM_MAYFAIL, PHYSM_RO, PHYSM_NOCLEANUP, PHYSM_EXACT);
+	return physmap_common(descr, phys_addr, len, PHYSM_RO, PHYSM_NOCLEANUP, PHYSM_EXACT);
 }
 
 /* MSR abstraction implementations for Linux, OpenBSD, FreeBSD/Dragonfly, OSX, libpayload
diff --git a/programmer.h b/programmer.h
index ac757b9..aca357c 100644
--- a/programmer.h
+++ b/programmer.h
@@ -278,7 +278,7 @@
 void *physmap(const char *descr, uintptr_t phys_addr, size_t len);
 void *rphysmap(const char *descr, uintptr_t phys_addr, size_t len);
 void *physmap_round(const char *descr, uintptr_t phys_addr, size_t len);
-void *physmap_try_ro(const char *descr, uintptr_t phys_addr, size_t len);
+void *physmap_ro(const char *descr, uintptr_t phys_addr, size_t len);
 void physunmap(void *virt_addr, size_t len);
 #if CONFIG_INTERNAL == 1
 int setup_cpu_msr(int cpu);
diff --git a/sb600spi.c b/sb600spi.c
index febeabb..8f93d65 100644
--- a/sb600spi.c
+++ b/sb600spi.c
@@ -353,7 +353,7 @@
 	/* Physical memory has to be mapped at page (4k) boundaries. */
 	sb600_spibar = rphysmap("SB600 SPI registers", tmp & 0xfffff000, 0x1000);
 	if (sb600_spibar == ERROR_PTR)
-		return 1;
+		return ERROR_FATAL;
 
 	/* The low bits of the SPI base address are used as offset into
 	 * the mapped page.
