diff --git a/src/flash/nor/nrf5.c b/src/flash/nor/nrf5.c
index dac08bd4a..c1fd257ef 100644
--- a/src/flash/nor/nrf5.c
+++ b/src/flash/nor/nrf5.c
@@ -283,6 +283,8 @@ static const struct nrf5_device_package nrf5_packages_table[] = {
 	{ 0x2005, "CK" },
 };
 
+const struct flash_driver nrf5_flash, nrf51_flash;
+
 static int nrf5_bank_is_probed(struct flash_bank *bank)
 {
 	struct nrf5_bank *nbank = bank->driver_priv;
@@ -794,6 +796,8 @@ static int nrf5_probe(struct flash_bank *bank)
 		}
 	}
 
+	free(bank->sectors);
+
 	if (bank->base == NRF5_FLASH_BASE) {
 		/* Sanity check */
 		if (chip->spec && chip->flash_size_kb != chip->spec->flash_size_kb)
@@ -1063,9 +1067,31 @@ static void nrf5_free_driver_priv(struct flash_bank *bank)
 	}
 }
 
+static struct nrf5_info *nrf5_get_chip(struct target *target)
+{
+	struct flash_bank *bank_iter;
+
+	/* iterate over nrf5 banks of same target */
+	for (bank_iter = flash_bank_list(); bank_iter; bank_iter = bank_iter->next) {
+		if (bank_iter->driver != &nrf5_flash && bank_iter->driver != &nrf51_flash)
+			continue;
+
+		if (bank_iter->target != target)
+			continue;
+
+		struct nrf5_bank *nbank = bank_iter->driver_priv;
+		if (!nbank)
+			continue;
+
+		if (nbank->chip)
+			return nbank->chip;
+	}
+	return NULL;
+}
+
 FLASH_BANK_COMMAND_HANDLER(nrf5_flash_bank_command)
 {
-	static struct nrf5_info *chip;
+	struct nrf5_info *chip;
 	struct nrf5_bank *nbank = NULL;
 
 	switch (bank->base) {
@@ -1077,6 +1103,7 @@ FLASH_BANK_COMMAND_HANDLER(nrf5_flash_bank_command)
 		return ERROR_FAIL;
 	}
 
+	chip = nrf5_get_chip(bank->target);
 	if (!chip) {
 		/* Create a new chip */
 		chip = calloc(1, sizeof(*chip));