diff --git a/drivers/mtd/nand/fsl_upm.c b/drivers/mtd/nand/fsl_upm.c
index 73abbbad1f0370ba879ddf0b1db743f5c3afb915..e7e746b550d6a57c7dd9c34b76d0c643603d874f 100644
--- a/drivers/mtd/nand/fsl_upm.c
+++ b/drivers/mtd/nand/fsl_upm.c
@@ -90,8 +90,11 @@ static void fun_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl)
 	mar = cmd << (32 - fun->width);
 	io_addr = fun->upm.io_addr;
 #if CONFIG_SYS_NAND_MAX_CHIPS > 1
-	if (fun->chip_nr > 0)
+	if (fun->chip_nr > 0) {
 		io_addr += fun->chip_offset * fun->chip_nr;
+		if (fun->upm_mar_chip_offset)
+			mar |= fun->upm_mar_chip_offset * fun->chip_nr;
+	}
 #endif
 	fsl_upm_run_pattern(&fun->upm, fun->width, io_addr, mar);
 
diff --git a/include/linux/mtd/fsl_upm.h b/include/linux/mtd/fsl_upm.h
index ada11c1a09a66ea4259a6f10133c955c7eb75cdf..10f5ddd87f55a94dfd5557a17ba5f4ff243158b8 100644
--- a/include/linux/mtd/fsl_upm.h
+++ b/include/linux/mtd/fsl_upm.h
@@ -28,6 +28,7 @@ struct fsl_upm_nand {
 	int width;
 	int upm_cmd_offset;
 	int upm_addr_offset;
+	int upm_mar_chip_offset;
 	int wait_pattern;
 	int (*dev_ready)(int chip_nr);
 	int chip_delay;