From f888824d352df894ab721a5ca067b0313500efe7 Mon Sep 17 00:00:00 2001
From: Jonas Gorski <jonas.gorski@gmail.com>
Date: Thu, 3 May 2012 12:17:54 +0200
Subject: [PATCH 38/59] MIPS: BCM63XX: store the flash type in global variable

---
 arch/mips/bcm63xx/dev-flash.c                      |   36 +++++++++++++------
 .../include/asm/mach-bcm63xx/bcm63xx_dev_flash.h   |    2 +
 2 files changed, 26 insertions(+), 12 deletions(-)

--- a/arch/mips/bcm63xx/dev-flash.c
+++ b/arch/mips/bcm63xx/dev-flash.c
@@ -25,6 +25,8 @@
 #include <bcm63xx_regs.h>
 #include <bcm63xx_io.h>
 
+int bcm63xx_attached_flash = -1;
+
 static struct mtd_partition mtd_partitions[] = {
 	{
 		.name		= "cfe",
@@ -86,20 +88,23 @@ static int __init bcm63xx_detect_flash_t
 			bcm63xx_spi_flash_info[0].max_speed_hz = 16666667;
 
 		if (val & STRAPBUS_6328_BOOT_SEL_SERIAL)
-			return BCM63XX_FLASH_TYPE_SERIAL;
+			bcm63xx_attached_flash = BCM63XX_FLASH_TYPE_SERIAL;
 		else
-			return BCM63XX_FLASH_TYPE_NAND;
+			bcm63xx_attached_flash = BCM63XX_FLASH_TYPE_NAND;
+		break;
 	case BCM6338_CPU_ID:
 	case BCM6345_CPU_ID:
 	case BCM6348_CPU_ID:
 		/* no way to auto detect so assume parallel */
-		return BCM63XX_FLASH_TYPE_PARALLEL;
+		bcm63xx_attached_flash = BCM63XX_FLASH_TYPE_PARALLEL;
+		break;
 	case BCM6358_CPU_ID:
 		val = bcm_gpio_readl(GPIO_STRAPBUS_REG);
 		if (val & STRAPBUS_6358_BOOT_SEL_PARALLEL)
-			return BCM63XX_FLASH_TYPE_PARALLEL;
+			bcm63xx_attached_flash = BCM63XX_FLASH_TYPE_PARALLEL;
 		else
-			return BCM63XX_FLASH_TYPE_SERIAL;
+			bcm63xx_attached_flash = BCM63XX_FLASH_TYPE_SERIAL;
+		break;
 	case BCM6362_CPU_ID:
 		val = bcm_misc_readl(MISC_STRAPBUS_6362_REG);
 		if (val & STRAPBUS_6362_HSSPI_CLK_FAST)
@@ -108,9 +113,10 @@ static int __init bcm63xx_detect_flash_t
 			bcm63xx_spi_flash_info[0].max_speed_hz = 20000000;
 
 		if (val & STRAPBUS_6362_BOOT_SEL_SERIAL)
-			return BCM63XX_FLASH_TYPE_SERIAL;
+			bcm63xx_attached_flash = BCM63XX_FLASH_TYPE_SERIAL;
 		else
-			return BCM63XX_FLASH_TYPE_NAND;
+			bcm63xx_attached_flash = BCM63XX_FLASH_TYPE_NAND;
+		break;
 	case BCM6368_CPU_ID:
 		val = bcm_gpio_readl(GPIO_STRAPBUS_REG);
 		if (val & STRAPBUS_6368_SPI_CLK_FAST)
@@ -118,25 +124,32 @@ static int __init bcm63xx_detect_flash_t
 
 		switch (val & STRAPBUS_6368_BOOT_SEL_MASK) {
 		case STRAPBUS_6368_BOOT_SEL_NAND:
-			return BCM63XX_FLASH_TYPE_NAND;
+			bcm63xx_attached_flash = BCM63XX_FLASH_TYPE_NAND;
+			break;
 		case STRAPBUS_6368_BOOT_SEL_SERIAL:
-			return BCM63XX_FLASH_TYPE_SERIAL;
+			bcm63xx_attached_flash = BCM63XX_FLASH_TYPE_SERIAL;
+			break;
 		case STRAPBUS_6368_BOOT_SEL_PARALLEL:
-			return BCM63XX_FLASH_TYPE_PARALLEL;
+			bcm63xx_attached_flash = BCM63XX_FLASH_TYPE_PARALLEL;
+			break;
+		default:
+			return -EINVAL;
 		}
 	default:
 		return -EINVAL;
 	}
+
+	return 0;
 }
 
 int __init bcm63xx_flash_register(void)
 {
-	int flash_type;
 	u32 val;
 
-	flash_type = bcm63xx_detect_flash_type();
 
-	switch (flash_type) {
+	bcm63xx_detect_flash_type();
+
+	switch (bcm63xx_attached_flash) {
 	case BCM63XX_FLASH_TYPE_PARALLEL:
 		/* read base address of boot chip select (0) */
 		val = bcm_mpi_readl(MPI_CSBASE_REG(0));
@@ -157,7 +170,7 @@ int __init bcm63xx_flash_register(void)
 		return -ENODEV;
 	default:
 		pr_err("flash detection failed for BCM%x: %d\n",
-		       bcm63xx_get_cpu_id(), flash_type);
+		       bcm63xx_get_cpu_id(), bcm63xx_attached_flash);
 		return -ENODEV;
 	}
 }
--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_flash.h
+++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_flash.h
@@ -7,6 +7,8 @@ enum {
 	BCM63XX_FLASH_TYPE_NAND,
 };
 
+extern int bcm63xx_attached_flash;
+
 int __init bcm63xx_flash_register(void);
 
 #endif /* __BCM63XX_FLASH_H */
