[brcm63xx] nb4: fix support, add support for SVC and CLIP BTN
[openwrt/svn-archive/archive.git] / target / linux / brcm63xx / patches-3.3 / 434-MIPS-BCM63XX-store-the-flash-type-in-global-variable.patch
1 From f888824d352df894ab721a5ca067b0313500efe7 Mon Sep 17 00:00:00 2001
2 From: Jonas Gorski <jonas.gorski@gmail.com>
3 Date: Thu, 3 May 2012 12:17:54 +0200
4 Subject: [PATCH 38/59] MIPS: BCM63XX: store the flash type in global variable
5
6 ---
7 arch/mips/bcm63xx/dev-flash.c | 36 +++++++++++++------
8 .../include/asm/mach-bcm63xx/bcm63xx_dev_flash.h | 2 +
9 2 files changed, 26 insertions(+), 12 deletions(-)
10
11 --- a/arch/mips/bcm63xx/dev-flash.c
12 +++ b/arch/mips/bcm63xx/dev-flash.c
13 @@ -25,6 +25,8 @@
14 #include <bcm63xx_regs.h>
15 #include <bcm63xx_io.h>
16
17 +int bcm63xx_attached_flash = -1;
18 +
19 static struct mtd_partition mtd_partitions[] = {
20 {
21 .name = "cfe",
22 @@ -86,20 +88,23 @@ static int __init bcm63xx_detect_flash_t
23 bcm63xx_spi_flash_info[0].max_speed_hz = 16666667;
24
25 if (val & STRAPBUS_6328_BOOT_SEL_SERIAL)
26 - return BCM63XX_FLASH_TYPE_SERIAL;
27 + bcm63xx_attached_flash = BCM63XX_FLASH_TYPE_SERIAL;
28 else
29 - return BCM63XX_FLASH_TYPE_NAND;
30 + bcm63xx_attached_flash = BCM63XX_FLASH_TYPE_NAND;
31 + break;
32 case BCM6338_CPU_ID:
33 case BCM6345_CPU_ID:
34 case BCM6348_CPU_ID:
35 /* no way to auto detect so assume parallel */
36 - return BCM63XX_FLASH_TYPE_PARALLEL;
37 + bcm63xx_attached_flash = BCM63XX_FLASH_TYPE_PARALLEL;
38 + break;
39 case BCM6358_CPU_ID:
40 val = bcm_gpio_readl(GPIO_STRAPBUS_REG);
41 if (val & STRAPBUS_6358_BOOT_SEL_PARALLEL)
42 - return BCM63XX_FLASH_TYPE_PARALLEL;
43 + bcm63xx_attached_flash = BCM63XX_FLASH_TYPE_PARALLEL;
44 else
45 - return BCM63XX_FLASH_TYPE_SERIAL;
46 + bcm63xx_attached_flash = BCM63XX_FLASH_TYPE_SERIAL;
47 + break;
48 case BCM6362_CPU_ID:
49 val = bcm_misc_readl(MISC_STRAPBUS_6362_REG);
50 if (val & STRAPBUS_6362_HSSPI_CLK_FAST)
51 @@ -108,9 +113,10 @@ static int __init bcm63xx_detect_flash_t
52 bcm63xx_spi_flash_info[0].max_speed_hz = 20000000;
53
54 if (val & STRAPBUS_6362_BOOT_SEL_SERIAL)
55 - return BCM63XX_FLASH_TYPE_SERIAL;
56 + bcm63xx_attached_flash = BCM63XX_FLASH_TYPE_SERIAL;
57 else
58 - return BCM63XX_FLASH_TYPE_NAND;
59 + bcm63xx_attached_flash = BCM63XX_FLASH_TYPE_NAND;
60 + break;
61 case BCM6368_CPU_ID:
62 val = bcm_gpio_readl(GPIO_STRAPBUS_REG);
63 if (val & STRAPBUS_6368_SPI_CLK_FAST)
64 @@ -118,25 +124,32 @@ static int __init bcm63xx_detect_flash_t
65
66 switch (val & STRAPBUS_6368_BOOT_SEL_MASK) {
67 case STRAPBUS_6368_BOOT_SEL_NAND:
68 - return BCM63XX_FLASH_TYPE_NAND;
69 + bcm63xx_attached_flash = BCM63XX_FLASH_TYPE_NAND;
70 + break;
71 case STRAPBUS_6368_BOOT_SEL_SERIAL:
72 - return BCM63XX_FLASH_TYPE_SERIAL;
73 + bcm63xx_attached_flash = BCM63XX_FLASH_TYPE_SERIAL;
74 + break;
75 case STRAPBUS_6368_BOOT_SEL_PARALLEL:
76 - return BCM63XX_FLASH_TYPE_PARALLEL;
77 + bcm63xx_attached_flash = BCM63XX_FLASH_TYPE_PARALLEL;
78 + break;
79 + default:
80 + return -EINVAL;
81 }
82 default:
83 return -EINVAL;
84 }
85 +
86 + return 0;
87 }
88
89 int __init bcm63xx_flash_register(void)
90 {
91 - int flash_type;
92 u32 val;
93
94 - flash_type = bcm63xx_detect_flash_type();
95
96 - switch (flash_type) {
97 + bcm63xx_detect_flash_type();
98 +
99 + switch (bcm63xx_attached_flash) {
100 case BCM63XX_FLASH_TYPE_PARALLEL:
101 /* read base address of boot chip select (0) */
102 val = bcm_mpi_readl(MPI_CSBASE_REG(0));
103 @@ -157,7 +170,7 @@ int __init bcm63xx_flash_register(void)
104 return -ENODEV;
105 default:
106 pr_err("flash detection failed for BCM%x: %d\n",
107 - bcm63xx_get_cpu_id(), flash_type);
108 + bcm63xx_get_cpu_id(), bcm63xx_attached_flash);
109 return -ENODEV;
110 }
111 }
112 --- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_flash.h
113 +++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_flash.h
114 @@ -7,6 +7,8 @@ enum {
115 BCM63XX_FLASH_TYPE_NAND,
116 };
117
118 +extern int bcm63xx_attached_flash;
119 +
120 int __init bcm63xx_flash_register(void);
121
122 #endif /* __BCM63XX_FLASH_H */