diff --git a/memory_bus.c b/memory_bus.c
index 61058b9..2a94630 100644
--- a/memory_bus.c
+++ b/memory_bus.c
@@ -22,28 +22,45 @@
 
 #include "chipdrivers/memory_bus.h"
 
-static void *programmer_map_flash_region(const struct flashctx *flash, const char *descr,
-					 uintptr_t phys_addr, size_t len)
+static void *programmer_map_flash_region(const struct par_master *par, const char *descr,
+					 uintptr_t phys_addr, chipsize_t len)
 {
 	void *ret;
-	if (flash->mst.par->map_flash)
-		ret = flash->mst.par->map_flash(descr, phys_addr, len);
+	if (par->map_flash)
+		ret = par->map_flash(descr, phys_addr, len);
 	else
 		ret = fallback_map(descr, phys_addr, len);
-	msg_gspew("%s: mapping %s from 0x%0*" PRIxPTR " to 0x%0*" PRIxPTR "\n",
-		  __func__, descr, PRIxPTR_WIDTH, phys_addr, PRIxPTR_WIDTH, (uintptr_t) ret);
+	msg_gspew("%s: mapping%s%s from 0x%0*" PRIxPTR " to 0x%0*" PRIxPTR "\n",
+		  __func__, *descr ? " " : "", descr,
+		  PRIxPTR_WIDTH, phys_addr, PRIxPTR_WIDTH, (uintptr_t)ret);
 	return ret;
 }
 
-static void programmer_unmap_flash_region(const struct flashctx *flash, void *virt_addr, size_t len)
+void programmer_unmap_flash_region(const struct par_master *par, void *virt_addr, chipsize_t len)
 {
-	if (flash->mst.par->unmap_flash)
-		flash->mst.par->unmap_flash(virt_addr, len);
+	if (par->unmap_flash)
+		par->unmap_flash(virt_addr, len);
 	else
 		fallback_unmap(virt_addr, len);
 	msg_gspew("%s: unmapped 0x%0*" PRIxPTR "\n", __func__, PRIxPTR_WIDTH, (uintptr_t)virt_addr);
 }
 
+static uintptr_t calculate_flash_data_base(const struct par_master *par, chipsize_t size)
+{
+	return par->rom_base ? par->rom_base : (0xffffffff - size + 1);
+}
+
+void *programmer_map_flash_data(const struct par_master *par, chipsize_t size, const char *descr)
+{
+	uintptr_t base = calculate_flash_data_base(par, size);
+	void *const addr = programmer_map_flash_region(par, descr, base, size);
+	if (addr == ERROR_PTR) {
+		msg_perr("Could not map flash chip%s%s at 0x%0*" PRIxPTR ".\n",
+			 *descr ? " " : "", descr, PRIxPTR_WIDTH, base);
+	}
+	return addr;
+}
+
 int prepare_memory_access(struct flashctx *flash, enum preparation_steps prep)
 {
 	const struct par_master *const par = flash->mst.par;
@@ -56,14 +73,11 @@
 	flash->virtual_registers = (chipaddr)ERROR_PTR;
 
 	const chipsize_t size = flash->chip->total_size * 1024;
-	const uintptr_t base = par->rom_base ? par->rom_base : (0xffffffff - size + 1);
-	void *const addr = programmer_map_flash_region(flash, flash->chip->name, base, size);
-	if (addr == ERROR_PTR) {
-		msg_perr("Could not map flash chip %s at 0x%0*" PRIxPTR ".\n",
-			 flash->chip->name, PRIxPTR_WIDTH, base);
+	void *const addr = programmer_map_flash_data(par, size, flash->chip->name);
+	if (addr == ERROR_PTR)
 		return 1;
-	}
-	flash->physical_memory = base;
+
+	flash->physical_memory = calculate_flash_data_base(par, size);
 	flash->virtual_memory = (chipaddr)addr;
 
 	return 0;
@@ -71,6 +85,8 @@
 
 int prepare_memory_register_access(struct flashctx *flash, enum preparation_steps prep)
 {
+	const struct par_master *const par = flash->mst.par;
+
 	if (prep == PREPARE_POST_PROBE)
 		return 0;
 
@@ -84,7 +100,7 @@
 	 */
 	const chipsize_t size = flash->chip->total_size * 1024;
 	const uintptr_t base = 0xffffffff - size - 0x400000 + 1;
-	void *const addr = programmer_map_flash_region(flash, "flash chip registers", base, size);
+	void *const addr = programmer_map_flash_region(par, "flash chip registers", base, size);
 	if (addr == ERROR_PTR) {
 		msg_pdbg2("Could not map flash chip registers %s at 0x%0*" PRIxPTR ".\n",
 			 flash->chip->name, PRIxPTR_WIDTH, base);
@@ -101,13 +117,13 @@
 	const size_t size = flashprog_flash_getsize(flash);
 
 	if (flash->virtual_registers != (chipaddr)ERROR_PTR) {
-		programmer_unmap_flash_region(flash, (void *)flash->virtual_registers, size);
+		programmer_unmap_flash_region(flash->mst.par, (void *)flash->virtual_registers, size);
 		flash->physical_registers = 0;
 		flash->virtual_registers = (chipaddr)ERROR_PTR;
 	}
 
 	if (flash->virtual_memory != (chipaddr)ERROR_PTR) {
-		programmer_unmap_flash_region(flash, (void *)flash->virtual_memory, size);
+		programmer_unmap_flash_region(flash->mst.par, (void *)flash->virtual_memory, size);
 		flash->physical_memory = 0;
 		flash->virtual_memory = (chipaddr)ERROR_PTR;
 	}
