From 06e9f7df054d26d7f49c56bf9a6844b193ad6313 Mon Sep 17 00:00:00 2001
From: Wolfgang Grandegger <wg@grandegger.com>
Date: Wed, 11 Feb 2009 18:38:22 +0100
Subject: [PATCH] Add support for TQM-specific chip select logic to FSL-UPM

For the NAND chips on the TQM8548 modules, a special chip-select logic is
used. It uses dedicated address lines to be set via UPM machine address
register (mar). This patch adds such support to the FSL-UPM driver.

Signed-off-by: Wolfgang Grandegger <wg@grandegger.com>
Signed-off-by: Scott Wood <scottwood@freescale.com>
---
 drivers/mtd/nand/fsl_upm.c  | 5 ++++-
 include/linux/mtd/fsl_upm.h | 1 +
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/mtd/nand/fsl_upm.c b/drivers/mtd/nand/fsl_upm.c
index 73abbbad1f0..e7e746b550d 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 ada11c1a09a..10f5ddd87f5 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;
-- 
GitLab