aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-10-18 14:48:03 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-10-18 14:48:03 -0400
commit511c41d9e6665a07aca94eb00983cf6d77dd87ff (patch)
treef9933c61d0bc902c49832bcfc24d65cfe0b34529
parent88ed806abb981cc8ec61ee7fab93ecfe63521ebf (diff)
parent8b3d58e554453ab858bbb169d93b7321bdc628d4 (diff)
Merge tag 'for-linus-20141015' of git://git.infradead.org/linux-mtd
Pull MTD update from Brian Norris: "Sorry for delaying this a bit later than usual. There's one mild regression from 3.16 that was noticed during the 3.17 cycle, and I meant to send a fix for it along with this pull request. I'll probably try to queue it up for a later pull request once I've had a better look at it, hopefully by -rc2 at the latest. Summary for this pull: NAND - Cleanup for Denali driver - Atmel: add support for new page sizes - Atmel: fix up 'raw' mode support - Atmel: miscellaneous cleanups - New timing mode helpers for non-ONFI NAND - OMAP: allow driver to be (properly) built as a module - bcm47xx: RESET support and other cleanups SPI NOR - Miscellaneous cleanups, to prepare framework for wider use (some further work still pending) - Compile-time configuration to select 4K vs. 64K support for flash that support both (necessary for using UBIFS on some SPI NOR) A few scattered code quality fixes, detected by Coverity See the changesets for more" * tag 'for-linus-20141015' of git://git.infradead.org/linux-mtd: (59 commits) mtd: nand: omap: Correct CONFIG_MTD_NAND_OMAP_BCH help message mtd: nand: Force omap_elm to be built as a module if omap2_nand is a module mtd: move support for struct flash_platform_data into m25p80 mtd: spi-nor: add Kconfig option to disable 4K sectors mtd: nand: Move ELM driver and rename as omap_elm nand: omap2: Replace pr_err with dev_err nand: omap2: Remove horrible ifdefs to fix module probe mtd: nand: add Hynix's H27UCG8T2ATR-BC to nand_ids table mtd: nand: support ONFI timing mode retrieval for non-ONFI NANDs mtd: physmap_of: Add non-obsolete map_rom probe mtd: physmap_of: Fix ROM support via OF MAINTAINERS: add l2-mtd.git, 'next' tree for MTD mtd: denali: fix indents and other trivial things mtd: denali: remove unnecessary parentheses mtd: denali: remove another set-but-unused variable mtd: denali: fix include guard and license block of denali.h mtd: nand: don't break long print messages mtd: bcm47xxnflash: replace some magic numbers mtd: bcm47xxnflash: NAND_CMD_RESET support mtd: bcm47xxnflash: add cmd_ctrl handler ...
-rw-r--r--Documentation/devicetree/bindings/mtd/atmel-nand.txt2
-rw-r--r--Documentation/devicetree/bindings/mtd/mtd-physmap.txt4
-rw-r--r--MAINTAINERS1
-rw-r--r--arch/arm/mach-omap2/gpmc.c2
-rw-r--r--drivers/mtd/bcm47xxpart.c11
-rw-r--r--drivers/mtd/chips/cfi_cmdset_0002.c2
-rw-r--r--drivers/mtd/devices/Makefile1
-rw-r--r--drivers/mtd/devices/docg3.c26
-rw-r--r--drivers/mtd/devices/m25p80.c22
-rw-r--r--drivers/mtd/maps/Kconfig2
-rw-r--r--drivers/mtd/maps/gpio-addr-flash.c42
-rw-r--r--drivers/mtd/maps/pcmciamtd.c2
-rw-r--r--drivers/mtd/maps/physmap_of.c6
-rw-r--r--drivers/mtd/mtdchar.c3
-rw-r--r--drivers/mtd/mtdcore.c39
-rw-r--r--drivers/mtd/mtdswap.c8
-rw-r--r--drivers/mtd/nand/Kconfig7
-rw-r--r--drivers/mtd/nand/Makefile1
-rw-r--r--drivers/mtd/nand/atmel_nand.c96
-rw-r--r--drivers/mtd/nand/bcm47xxnflash/ops_bcm4706.c57
-rw-r--r--drivers/mtd/nand/denali.c565
-rw-r--r--drivers/mtd/nand/denali.h27
-rw-r--r--drivers/mtd/nand/nand_base.c38
-rw-r--r--drivers/mtd/nand/nand_bbt.c23
-rw-r--r--drivers/mtd/nand/nand_ids.c4
-rw-r--r--drivers/mtd/nand/nand_timings.c2
-rw-r--r--drivers/mtd/nand/nandsim.c2
-rw-r--r--drivers/mtd/nand/ndfc.c3
-rw-r--r--drivers/mtd/nand/omap2.c166
-rw-r--r--drivers/mtd/nand/omap_elm.c (renamed from drivers/mtd/devices/elm.c)0
-rw-r--r--drivers/mtd/nand/sm_common.h2
-rw-r--r--drivers/mtd/sm_ftl.c2
-rw-r--r--drivers/mtd/spi-nor/Kconfig14
-rw-r--r--drivers/mtd/spi-nor/spi-nor.c42
-rw-r--r--drivers/mtd/tests/mtd_test.c4
-rw-r--r--drivers/mtd/tests/nandbiterrs.c2
-rw-r--r--drivers/mtd/tests/oobtest.c8
-rw-r--r--drivers/mtd/tests/pagetest.c4
-rw-r--r--drivers/mtd/tests/readtest.c2
-rw-r--r--drivers/mtd/tests/speedtest.c14
-rw-r--r--drivers/mtd/tests/subpagetest.c10
-rw-r--r--include/linux/mtd/cfi.h22
-rw-r--r--include/linux/mtd/nand.h12
-rw-r--r--include/linux/platform_data/elm.h16
-rw-r--r--include/linux/platform_data/mtd-nand-omap2.h1
45 files changed, 757 insertions, 562 deletions
diff --git a/Documentation/devicetree/bindings/mtd/atmel-nand.txt b/Documentation/devicetree/bindings/mtd/atmel-nand.txt
index c4728839d0c1..6edc3b616e98 100644
--- a/Documentation/devicetree/bindings/mtd/atmel-nand.txt
+++ b/Documentation/devicetree/bindings/mtd/atmel-nand.txt
@@ -36,6 +36,7 @@ Optional properties:
36 - reg : should specify the address and size used for NFC command registers, 36 - reg : should specify the address and size used for NFC command registers,
37 NFC registers and NFC Sram. NFC Sram address and size can be absent 37 NFC registers and NFC Sram. NFC Sram address and size can be absent
38 if don't want to use it. 38 if don't want to use it.
39 - clocks: phandle to the peripheral clock
39 - Optional properties: 40 - Optional properties:
40 - atmel,write-by-sram: boolean to enable NFC write by sram. 41 - atmel,write-by-sram: boolean to enable NFC write by sram.
41 42
@@ -98,6 +99,7 @@ nand0: nand@40000000 {
98 compatible = "atmel,sama5d3-nfc"; 99 compatible = "atmel,sama5d3-nfc";
99 #address-cells = <1>; 100 #address-cells = <1>;
100 #size-cells = <1>; 101 #size-cells = <1>;
102 clocks = <&hsmc_clk>
101 reg = < 103 reg = <
102 0x70000000 0x10000000 /* NFC Command Registers */ 104 0x70000000 0x10000000 /* NFC Command Registers */
103 0xffffc000 0x00000070 /* NFC HSMC regs */ 105 0xffffc000 0x00000070 /* NFC HSMC regs */
diff --git a/Documentation/devicetree/bindings/mtd/mtd-physmap.txt b/Documentation/devicetree/bindings/mtd/mtd-physmap.txt
index 61c5ec850f2f..6b9f680cb579 100644
--- a/Documentation/devicetree/bindings/mtd/mtd-physmap.txt
+++ b/Documentation/devicetree/bindings/mtd/mtd-physmap.txt
@@ -4,8 +4,8 @@ Flash chips (Memory Technology Devices) are often used for solid state
4file systems on embedded devices. 4file systems on embedded devices.
5 5
6 - compatible : should contain the specific model of mtd chip(s) 6 - compatible : should contain the specific model of mtd chip(s)
7 used, if known, followed by either "cfi-flash", "jedec-flash" 7 used, if known, followed by either "cfi-flash", "jedec-flash",
8 or "mtd-ram". 8 "mtd-ram" or "mtd-rom".
9 - reg : Address range(s) of the mtd chip(s) 9 - reg : Address range(s) of the mtd chip(s)
10 It's possible to (optionally) define multiple "reg" tuples so that 10 It's possible to (optionally) define multiple "reg" tuples so that
11 non-identical chips can be described in one node. 11 non-identical chips can be described in one node.
diff --git a/MAINTAINERS b/MAINTAINERS
index 90baf1bef4ca..6c59c6697a54 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -5992,6 +5992,7 @@ L: linux-mtd@lists.infradead.org
5992W: http://www.linux-mtd.infradead.org/ 5992W: http://www.linux-mtd.infradead.org/
5993Q: http://patchwork.ozlabs.org/project/linux-mtd/list/ 5993Q: http://patchwork.ozlabs.org/project/linux-mtd/list/
5994T: git git://git.infradead.org/linux-mtd.git 5994T: git git://git.infradead.org/linux-mtd.git
5995T: git git://git.infradead.org/l2-mtd.git
5995S: Maintained 5996S: Maintained
5996F: drivers/mtd/ 5997F: drivers/mtd/
5997F: include/linux/mtd/ 5998F: include/linux/mtd/
diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c
index a4d52c42a438..5fa3755261ce 100644
--- a/arch/arm/mach-omap2/gpmc.c
+++ b/arch/arm/mach-omap2/gpmc.c
@@ -1440,6 +1440,8 @@ static int gpmc_probe_nand_child(struct platform_device *pdev,
1440 break; 1440 break;
1441 } 1441 }
1442 1442
1443 gpmc_nand_data->flash_bbt = of_get_nand_on_flash_bbt(child);
1444
1443 val = of_get_nand_bus_width(child); 1445 val = of_get_nand_bus_width(child);
1444 if (val == 16) 1446 if (val == 16)
1445 gpmc_nand_data->devsize = NAND_BUSWIDTH_16; 1447 gpmc_nand_data->devsize = NAND_BUSWIDTH_16;
diff --git a/drivers/mtd/bcm47xxpart.c b/drivers/mtd/bcm47xxpart.c
index adfa74c1bc45..8057f52a45b7 100644
--- a/drivers/mtd/bcm47xxpart.c
+++ b/drivers/mtd/bcm47xxpart.c
@@ -199,6 +199,17 @@ static int bcm47xxpart_parse(struct mtd_info *master,
199 continue; 199 continue;
200 } 200 }
201 201
202 /*
203 * New (ARM?) devices may have NVRAM in some middle block. Last
204 * block will be checked later, so skip it.
205 */
206 if (offset != master->size - blocksize &&
207 buf[0x000 / 4] == NVRAM_HEADER) {
208 bcm47xxpart_add_part(&parts[curr_part++], "nvram",
209 offset, 0);
210 continue;
211 }
212
202 /* Read middle of the block */ 213 /* Read middle of the block */
203 if (mtd_read(master, offset + 0x8000, 0x4, 214 if (mtd_read(master, offset + 0x8000, 0x4,
204 &bytes_read, (uint8_t *)buf) < 0) { 215 &bytes_read, (uint8_t *)buf) < 0) {
diff --git a/drivers/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c
index 46c4643b7a07..c50d8cf0f60d 100644
--- a/drivers/mtd/chips/cfi_cmdset_0002.c
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
@@ -2033,6 +2033,8 @@ static int cfi_amdstd_panic_wait(struct map_info *map, struct flchip *chip,
2033 2033
2034 udelay(1); 2034 udelay(1);
2035 } 2035 }
2036
2037 retries--;
2036 } 2038 }
2037 2039
2038 /* the chip never became ready */ 2040 /* the chip never became ready */
diff --git a/drivers/mtd/devices/Makefile b/drivers/mtd/devices/Makefile
index c68868f60588..f0b0e611d1d6 100644
--- a/drivers/mtd/devices/Makefile
+++ b/drivers/mtd/devices/Makefile
@@ -12,7 +12,6 @@ obj-$(CONFIG_MTD_LART) += lart.o
12obj-$(CONFIG_MTD_BLOCK2MTD) += block2mtd.o 12obj-$(CONFIG_MTD_BLOCK2MTD) += block2mtd.o
13obj-$(CONFIG_MTD_DATAFLASH) += mtd_dataflash.o 13obj-$(CONFIG_MTD_DATAFLASH) += mtd_dataflash.o
14obj-$(CONFIG_MTD_M25P80) += m25p80.o 14obj-$(CONFIG_MTD_M25P80) += m25p80.o
15obj-$(CONFIG_MTD_NAND_OMAP_BCH) += elm.o
16obj-$(CONFIG_MTD_SPEAR_SMI) += spear_smi.o 15obj-$(CONFIG_MTD_SPEAR_SMI) += spear_smi.o
17obj-$(CONFIG_MTD_SST25L) += sst25l.o 16obj-$(CONFIG_MTD_SST25L) += sst25l.o
18obj-$(CONFIG_MTD_BCM47XXSFLASH) += bcm47xxsflash.o 17obj-$(CONFIG_MTD_BCM47XXSFLASH) += bcm47xxsflash.o
diff --git a/drivers/mtd/devices/docg3.c b/drivers/mtd/devices/docg3.c
index 91a169c44b39..21cc4b66feaa 100644
--- a/drivers/mtd/devices/docg3.c
+++ b/drivers/mtd/devices/docg3.c
@@ -1697,16 +1697,16 @@ static int dbg_asicmode_show(struct seq_file *s, void *p)
1697 1697
1698 switch (mode) { 1698 switch (mode) {
1699 case DOC_ASICMODE_RESET: 1699 case DOC_ASICMODE_RESET:
1700 pos += seq_printf(s, "reset"); 1700 pos += seq_puts(s, "reset");
1701 break; 1701 break;
1702 case DOC_ASICMODE_NORMAL: 1702 case DOC_ASICMODE_NORMAL:
1703 pos += seq_printf(s, "normal"); 1703 pos += seq_puts(s, "normal");
1704 break; 1704 break;
1705 case DOC_ASICMODE_POWERDOWN: 1705 case DOC_ASICMODE_POWERDOWN:
1706 pos += seq_printf(s, "powerdown"); 1706 pos += seq_puts(s, "powerdown");
1707 break; 1707 break;
1708 } 1708 }
1709 pos += seq_printf(s, ")\n"); 1709 pos += seq_puts(s, ")\n");
1710 return pos; 1710 return pos;
1711} 1711}
1712DEBUGFS_RO_ATTR(asic_mode, dbg_asicmode_show); 1712DEBUGFS_RO_ATTR(asic_mode, dbg_asicmode_show);
@@ -1745,22 +1745,22 @@ static int dbg_protection_show(struct seq_file *s, void *p)
1745 pos += seq_printf(s, "Protection = 0x%02x (", 1745 pos += seq_printf(s, "Protection = 0x%02x (",
1746 protect); 1746 protect);
1747 if (protect & DOC_PROTECT_FOUNDRY_OTP_LOCK) 1747 if (protect & DOC_PROTECT_FOUNDRY_OTP_LOCK)
1748 pos += seq_printf(s, "FOUNDRY_OTP_LOCK,"); 1748 pos += seq_puts(s, "FOUNDRY_OTP_LOCK,");
1749 if (protect & DOC_PROTECT_CUSTOMER_OTP_LOCK) 1749 if (protect & DOC_PROTECT_CUSTOMER_OTP_LOCK)
1750 pos += seq_printf(s, "CUSTOMER_OTP_LOCK,"); 1750 pos += seq_puts(s, "CUSTOMER_OTP_LOCK,");
1751 if (protect & DOC_PROTECT_LOCK_INPUT) 1751 if (protect & DOC_PROTECT_LOCK_INPUT)
1752 pos += seq_printf(s, "LOCK_INPUT,"); 1752 pos += seq_puts(s, "LOCK_INPUT,");
1753 if (protect & DOC_PROTECT_STICKY_LOCK) 1753 if (protect & DOC_PROTECT_STICKY_LOCK)
1754 pos += seq_printf(s, "STICKY_LOCK,"); 1754 pos += seq_puts(s, "STICKY_LOCK,");
1755 if (protect & DOC_PROTECT_PROTECTION_ENABLED) 1755 if (protect & DOC_PROTECT_PROTECTION_ENABLED)
1756 pos += seq_printf(s, "PROTECTION ON,"); 1756 pos += seq_puts(s, "PROTECTION ON,");
1757 if (protect & DOC_PROTECT_IPL_DOWNLOAD_LOCK) 1757 if (protect & DOC_PROTECT_IPL_DOWNLOAD_LOCK)
1758 pos += seq_printf(s, "IPL_DOWNLOAD_LOCK,"); 1758 pos += seq_puts(s, "IPL_DOWNLOAD_LOCK,");
1759 if (protect & DOC_PROTECT_PROTECTION_ERROR) 1759 if (protect & DOC_PROTECT_PROTECTION_ERROR)
1760 pos += seq_printf(s, "PROTECT_ERR,"); 1760 pos += seq_puts(s, "PROTECT_ERR,");
1761 else 1761 else
1762 pos += seq_printf(s, "NO_PROTECT_ERR"); 1762 pos += seq_puts(s, "NO_PROTECT_ERR");
1763 pos += seq_printf(s, ")\n"); 1763 pos += seq_puts(s, ")\n");
1764 1764
1765 pos += seq_printf(s, "DPS0 = 0x%02x : " 1765 pos += seq_printf(s, "DPS0 = 0x%02x : "
1766 "Protected area [0x%x - 0x%x] : OTP=%d, READ=%d, " 1766 "Protected area [0x%x - 0x%x] : OTP=%d, READ=%d, "
diff --git a/drivers/mtd/devices/m25p80.c b/drivers/mtd/devices/m25p80.c
index ed7e0a1bed3c..dcda6287228d 100644
--- a/drivers/mtd/devices/m25p80.c
+++ b/drivers/mtd/devices/m25p80.c
@@ -193,11 +193,14 @@ static int m25p_probe(struct spi_device *spi)
193{ 193{
194 struct mtd_part_parser_data ppdata; 194 struct mtd_part_parser_data ppdata;
195 struct flash_platform_data *data; 195 struct flash_platform_data *data;
196 const struct spi_device_id *id = NULL;
196 struct m25p *flash; 197 struct m25p *flash;
197 struct spi_nor *nor; 198 struct spi_nor *nor;
198 enum read_mode mode = SPI_NOR_NORMAL; 199 enum read_mode mode = SPI_NOR_NORMAL;
199 int ret; 200 int ret;
200 201
202 data = dev_get_platdata(&spi->dev);
203
201 flash = devm_kzalloc(&spi->dev, sizeof(*flash), GFP_KERNEL); 204 flash = devm_kzalloc(&spi->dev, sizeof(*flash), GFP_KERNEL);
202 if (!flash) 205 if (!flash)
203 return -ENOMEM; 206 return -ENOMEM;
@@ -223,11 +226,26 @@ static int m25p_probe(struct spi_device *spi)
223 mode = SPI_NOR_QUAD; 226 mode = SPI_NOR_QUAD;
224 else if (spi->mode & SPI_RX_DUAL) 227 else if (spi->mode & SPI_RX_DUAL)
225 mode = SPI_NOR_DUAL; 228 mode = SPI_NOR_DUAL;
226 ret = spi_nor_scan(nor, spi_get_device_id(spi), mode); 229
230 if (data && data->name)
231 flash->mtd.name = data->name;
232
233 /* For some (historical?) reason many platforms provide two different
234 * names in flash_platform_data: "name" and "type". Quite often name is
235 * set to "m25p80" and then "type" provides a real chip name.
236 * If that's the case, respect "type" and ignore a "name".
237 */
238 if (data && data->type)
239 id = spi_nor_match_id(data->type);
240
241 /* If we didn't get name from platform, simply use "modalias". */
242 if (!id)
243 id = spi_get_device_id(spi);
244
245 ret = spi_nor_scan(nor, id, mode);
227 if (ret) 246 if (ret)
228 return ret; 247 return ret;
229 248
230 data = dev_get_platdata(&spi->dev);
231 ppdata.of_node = spi->dev.of_node; 249 ppdata.of_node = spi->dev.of_node;
232 250
233 return mtd_device_parse_register(&flash->mtd, NULL, &ppdata, 251 return mtd_device_parse_register(&flash->mtd, NULL, &ppdata,
diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig
index 21b2874a303b..ba801d2c6dcc 100644
--- a/drivers/mtd/maps/Kconfig
+++ b/drivers/mtd/maps/Kconfig
@@ -249,7 +249,7 @@ config MTD_CFI_FLAGADM
249 249
250config MTD_SOLUTIONENGINE 250config MTD_SOLUTIONENGINE
251 tristate "CFI Flash device mapped on Hitachi SolutionEngine" 251 tristate "CFI Flash device mapped on Hitachi SolutionEngine"
252 depends on SUPERH && SOLUTION_ENGINE && MTD_CFI && MTD_REDBOOT_PARTS 252 depends on SOLUTION_ENGINE && MTD_CFI && MTD_REDBOOT_PARTS
253 help 253 help
254 This enables access to the flash chips on the Hitachi SolutionEngine and 254 This enables access to the flash chips on the Hitachi SolutionEngine and
255 similar boards. Say 'Y' if you are building a kernel for such a board. 255 similar boards. Say 'Y' if you are building a kernel for such a board.
diff --git a/drivers/mtd/maps/gpio-addr-flash.c b/drivers/mtd/maps/gpio-addr-flash.c
index a4c477b9fdd6..2fb346091af2 100644
--- a/drivers/mtd/maps/gpio-addr-flash.c
+++ b/drivers/mtd/maps/gpio-addr-flash.c
@@ -99,22 +99,28 @@ static map_word gf_read(struct map_info *map, unsigned long ofs)
99 * @from: flash offset to copy from 99 * @from: flash offset to copy from
100 * @len: how much to copy 100 * @len: how much to copy
101 * 101 *
102 * We rely on the MTD layer to chunk up copies such that a single request here 102 * The "from" region may straddle more than one window, so toggle the GPIOs for
103 * will not cross a window size. This allows us to only wiggle the GPIOs once 103 * each window region before reading its data.
104 * before falling back to a normal memcpy. Reading the higher layer code shows
105 * that this is indeed the case, but add a BUG_ON() to future proof.
106 */ 104 */
107static void gf_copy_from(struct map_info *map, void *to, unsigned long from, ssize_t len) 105static void gf_copy_from(struct map_info *map, void *to, unsigned long from, ssize_t len)
108{ 106{
109 struct async_state *state = gf_map_info_to_state(map); 107 struct async_state *state = gf_map_info_to_state(map);
110 108
111 gf_set_gpios(state, from); 109 int this_len;
112 110
113 /* BUG if operation crosses the win_size */ 111 while (len) {
114 BUG_ON(!((from + len) % state->win_size <= (from + len))); 112 if ((from % state->win_size) + len > state->win_size)
113 this_len = state->win_size - (from % state->win_size);
114 else
115 this_len = len;
115 116
116 /* operation does not cross the win_size, so one shot it */ 117 gf_set_gpios(state, from);
117 memcpy_fromio(to, map->virt + (from % state->win_size), len); 118 memcpy_fromio(to, map->virt + (from % state->win_size),
119 this_len);
120 len -= this_len;
121 from += this_len;
122 to += this_len;
123 }
118} 124}
119 125
120/** 126/**
@@ -147,13 +153,21 @@ static void gf_copy_to(struct map_info *map, unsigned long to,
147{ 153{
148 struct async_state *state = gf_map_info_to_state(map); 154 struct async_state *state = gf_map_info_to_state(map);
149 155
150 gf_set_gpios(state, to); 156 int this_len;
157
158 while (len) {
159 if ((to % state->win_size) + len > state->win_size)
160 this_len = state->win_size - (to % state->win_size);
161 else
162 this_len = len;
151 163
152 /* BUG if operation crosses the win_size */ 164 gf_set_gpios(state, to);
153 BUG_ON(!((to + len) % state->win_size <= (to + len))); 165 memcpy_toio(map->virt + (to % state->win_size), from, len);
154 166
155 /* operation does not cross the win_size, so one shot it */ 167 len -= this_len;
156 memcpy_toio(map->virt + (to % state->win_size), from, len); 168 to += this_len;
169 from += this_len;
170 }
157} 171}
158 172
159static const char * const part_probe_types[] = { 173static const char * const part_probe_types[] = {
diff --git a/drivers/mtd/maps/pcmciamtd.c b/drivers/mtd/maps/pcmciamtd.c
index a3cfad392ed6..af747af5eee9 100644
--- a/drivers/mtd/maps/pcmciamtd.c
+++ b/drivers/mtd/maps/pcmciamtd.c
@@ -89,7 +89,7 @@ static caddr_t remap_window(struct map_info *map, unsigned long to)
89 89
90 if (!pcmcia_dev_present(dev->p_dev)) { 90 if (!pcmcia_dev_present(dev->p_dev)) {
91 pr_debug("device removed\n"); 91 pr_debug("device removed\n");
92 return 0; 92 return NULL;
93 } 93 }
94 94
95 offset = to & ~(dev->win_size-1); 95 offset = to & ~(dev->win_size-1);
diff --git a/drivers/mtd/maps/physmap_of.c b/drivers/mtd/maps/physmap_of.c
index 217c25d7381b..c1d21cb501ca 100644
--- a/drivers/mtd/maps/physmap_of.c
+++ b/drivers/mtd/maps/physmap_of.c
@@ -103,7 +103,7 @@ static struct mtd_info *obsolete_probe(struct platform_device *dev,
103 if (strcmp(of_probe, "ROM") != 0) 103 if (strcmp(of_probe, "ROM") != 0)
104 dev_warn(&dev->dev, "obsolete_probe: don't know probe " 104 dev_warn(&dev->dev, "obsolete_probe: don't know probe "
105 "type '%s', mapping as rom\n", of_probe); 105 "type '%s', mapping as rom\n", of_probe);
106 return do_map_probe("mtd_rom", map); 106 return do_map_probe("map_rom", map);
107 } 107 }
108} 108}
109 109
@@ -340,6 +340,10 @@ static struct of_device_id of_flash_match[] = {
340 .data = (void *)"map_ram", 340 .data = (void *)"map_ram",
341 }, 341 },
342 { 342 {
343 .compatible = "mtd-rom",
344 .data = (void *)"map_rom",
345 },
346 {
343 .type = "rom", 347 .type = "rom",
344 .compatible = "direct-mapped" 348 .compatible = "direct-mapped"
345 }, 349 },
diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c
index a0f54e80670c..53563955931b 100644
--- a/drivers/mtd/mtdchar.c
+++ b/drivers/mtd/mtdchar.c
@@ -549,6 +549,9 @@ static int mtdchar_blkpg_ioctl(struct mtd_info *mtd,
549 if (mtd_is_partition(mtd)) 549 if (mtd_is_partition(mtd))
550 return -EINVAL; 550 return -EINVAL;
551 551
552 /* Sanitize user input */
553 p.devname[BLKPG_DEVNAMELTH - 1] = '\0';
554
552 return mtd_add_partition(mtd, p.devname, p.start, p.length); 555 return mtd_add_partition(mtd, p.devname, p.start, p.length);
553 556
554 case BLKPG_DEL_PARTITION: 557 case BLKPG_DEL_PARTITION:
diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
index e4831b4159db..4c611871d7e6 100644
--- a/drivers/mtd/mtdcore.c
+++ b/drivers/mtd/mtdcore.c
@@ -105,12 +105,11 @@ static LIST_HEAD(mtd_notifiers);
105 */ 105 */
106static void mtd_release(struct device *dev) 106static void mtd_release(struct device *dev)
107{ 107{
108 struct mtd_info __maybe_unused *mtd = dev_get_drvdata(dev); 108 struct mtd_info *mtd = dev_get_drvdata(dev);
109 dev_t index = MTD_DEVT(mtd->index); 109 dev_t index = MTD_DEVT(mtd->index);
110 110
111 /* remove /dev/mtdXro node if needed */ 111 /* remove /dev/mtdXro node */
112 if (index) 112 device_destroy(&mtd_class, index + 1);
113 device_destroy(&mtd_class, index + 1);
114} 113}
115 114
116static int mtd_cls_suspend(struct device *dev, pm_message_t state) 115static int mtd_cls_suspend(struct device *dev, pm_message_t state)
@@ -442,10 +441,8 @@ int add_mtd_device(struct mtd_info *mtd)
442 if (device_register(&mtd->dev) != 0) 441 if (device_register(&mtd->dev) != 0)
443 goto fail_added; 442 goto fail_added;
444 443
445 if (MTD_DEVT(i)) 444 device_create(&mtd_class, mtd->dev.parent, MTD_DEVT(i) + 1, NULL,
446 device_create(&mtd_class, mtd->dev.parent, 445 "mtd%dro", i);
447 MTD_DEVT(i) + 1,
448 NULL, "mtd%dro", i);
449 446
450 pr_debug("mtd: Giving out device %d to %s\n", i, mtd->name); 447 pr_debug("mtd: Giving out device %d to %s\n", i, mtd->name);
451 /* No need to get a refcount on the module containing 448 /* No need to get a refcount on the module containing
@@ -778,7 +775,7 @@ EXPORT_SYMBOL_GPL(__put_mtd_device);
778 */ 775 */
779int mtd_erase(struct mtd_info *mtd, struct erase_info *instr) 776int mtd_erase(struct mtd_info *mtd, struct erase_info *instr)
780{ 777{
781 if (instr->addr > mtd->size || instr->len > mtd->size - instr->addr) 778 if (instr->addr >= mtd->size || instr->len > mtd->size - instr->addr)
782 return -EINVAL; 779 return -EINVAL;
783 if (!(mtd->flags & MTD_WRITEABLE)) 780 if (!(mtd->flags & MTD_WRITEABLE))
784 return -EROFS; 781 return -EROFS;
@@ -804,7 +801,7 @@ int mtd_point(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen,
804 *phys = 0; 801 *phys = 0;
805 if (!mtd->_point) 802 if (!mtd->_point)
806 return -EOPNOTSUPP; 803 return -EOPNOTSUPP;
807 if (from < 0 || from > mtd->size || len > mtd->size - from) 804 if (from < 0 || from >= mtd->size || len > mtd->size - from)
808 return -EINVAL; 805 return -EINVAL;
809 if (!len) 806 if (!len)
810 return 0; 807 return 0;
@@ -817,7 +814,7 @@ int mtd_unpoint(struct mtd_info *mtd, loff_t from, size_t len)
817{ 814{
818 if (!mtd->_point) 815 if (!mtd->_point)
819 return -EOPNOTSUPP; 816 return -EOPNOTSUPP;
820 if (from < 0 || from > mtd->size || len > mtd->size - from) 817 if (from < 0 || from >= mtd->size || len > mtd->size - from)
821 return -EINVAL; 818 return -EINVAL;
822 if (!len) 819 if (!len)
823 return 0; 820 return 0;
@@ -835,7 +832,7 @@ unsigned long mtd_get_unmapped_area(struct mtd_info *mtd, unsigned long len,
835{ 832{
836 if (!mtd->_get_unmapped_area) 833 if (!mtd->_get_unmapped_area)
837 return -EOPNOTSUPP; 834 return -EOPNOTSUPP;
838 if (offset > mtd->size || len > mtd->size - offset) 835 if (offset >= mtd->size || len > mtd->size - offset)
839 return -EINVAL; 836 return -EINVAL;
840 return mtd->_get_unmapped_area(mtd, len, offset, flags); 837 return mtd->_get_unmapped_area(mtd, len, offset, flags);
841} 838}
@@ -846,7 +843,7 @@ int mtd_read(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen,
846{ 843{
847 int ret_code; 844 int ret_code;
848 *retlen = 0; 845 *retlen = 0;
849 if (from < 0 || from > mtd->size || len > mtd->size - from) 846 if (from < 0 || from >= mtd->size || len > mtd->size - from)
850 return -EINVAL; 847 return -EINVAL;
851 if (!len) 848 if (!len)
852 return 0; 849 return 0;
@@ -869,7 +866,7 @@ int mtd_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen,
869 const u_char *buf) 866 const u_char *buf)
870{ 867{
871 *retlen = 0; 868 *retlen = 0;
872 if (to < 0 || to > mtd->size || len > mtd->size - to) 869 if (to < 0 || to >= mtd->size || len > mtd->size - to)
873 return -EINVAL; 870 return -EINVAL;
874 if (!mtd->_write || !(mtd->flags & MTD_WRITEABLE)) 871 if (!mtd->_write || !(mtd->flags & MTD_WRITEABLE))
875 return -EROFS; 872 return -EROFS;
@@ -892,7 +889,7 @@ int mtd_panic_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen,
892 *retlen = 0; 889 *retlen = 0;
893 if (!mtd->_panic_write) 890 if (!mtd->_panic_write)
894 return -EOPNOTSUPP; 891 return -EOPNOTSUPP;
895 if (to < 0 || to > mtd->size || len > mtd->size - to) 892 if (to < 0 || to >= mtd->size || len > mtd->size - to)
896 return -EINVAL; 893 return -EINVAL;
897 if (!(mtd->flags & MTD_WRITEABLE)) 894 if (!(mtd->flags & MTD_WRITEABLE))
898 return -EROFS; 895 return -EROFS;
@@ -1011,7 +1008,7 @@ int mtd_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
1011{ 1008{
1012 if (!mtd->_lock) 1009 if (!mtd->_lock)
1013 return -EOPNOTSUPP; 1010 return -EOPNOTSUPP;
1014 if (ofs < 0 || ofs > mtd->size || len > mtd->size - ofs) 1011 if (ofs < 0 || ofs >= mtd->size || len > mtd->size - ofs)
1015 return -EINVAL; 1012 return -EINVAL;
1016 if (!len) 1013 if (!len)
1017 return 0; 1014 return 0;
@@ -1023,7 +1020,7 @@ int mtd_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
1023{ 1020{
1024 if (!mtd->_unlock) 1021 if (!mtd->_unlock)
1025 return -EOPNOTSUPP; 1022 return -EOPNOTSUPP;
1026 if (ofs < 0 || ofs > mtd->size || len > mtd->size - ofs) 1023 if (ofs < 0 || ofs >= mtd->size || len > mtd->size - ofs)
1027 return -EINVAL; 1024 return -EINVAL;
1028 if (!len) 1025 if (!len)
1029 return 0; 1026 return 0;
@@ -1035,7 +1032,7 @@ int mtd_is_locked(struct mtd_info *mtd, loff_t ofs, uint64_t len)
1035{ 1032{
1036 if (!mtd->_is_locked) 1033 if (!mtd->_is_locked)
1037 return -EOPNOTSUPP; 1034 return -EOPNOTSUPP;
1038 if (ofs < 0 || ofs > mtd->size || len > mtd->size - ofs) 1035 if (ofs < 0 || ofs >= mtd->size || len > mtd->size - ofs)
1039 return -EINVAL; 1036 return -EINVAL;
1040 if (!len) 1037 if (!len)
1041 return 0; 1038 return 0;
@@ -1045,7 +1042,7 @@ EXPORT_SYMBOL_GPL(mtd_is_locked);
1045 1042
1046int mtd_block_isreserved(struct mtd_info *mtd, loff_t ofs) 1043int mtd_block_isreserved(struct mtd_info *mtd, loff_t ofs)
1047{ 1044{
1048 if (ofs < 0 || ofs > mtd->size) 1045 if (ofs < 0 || ofs >= mtd->size)
1049 return -EINVAL; 1046 return -EINVAL;
1050 if (!mtd->_block_isreserved) 1047 if (!mtd->_block_isreserved)
1051 return 0; 1048 return 0;
@@ -1055,7 +1052,7 @@ EXPORT_SYMBOL_GPL(mtd_block_isreserved);
1055 1052
1056int mtd_block_isbad(struct mtd_info *mtd, loff_t ofs) 1053int mtd_block_isbad(struct mtd_info *mtd, loff_t ofs)
1057{ 1054{
1058 if (ofs < 0 || ofs > mtd->size) 1055 if (ofs < 0 || ofs >= mtd->size)
1059 return -EINVAL; 1056 return -EINVAL;
1060 if (!mtd->_block_isbad) 1057 if (!mtd->_block_isbad)
1061 return 0; 1058 return 0;
@@ -1067,7 +1064,7 @@ int mtd_block_markbad(struct mtd_info *mtd, loff_t ofs)
1067{ 1064{
1068 if (!mtd->_block_markbad) 1065 if (!mtd->_block_markbad)
1069 return -EOPNOTSUPP; 1066 return -EOPNOTSUPP;
1070 if (ofs < 0 || ofs > mtd->size) 1067 if (ofs < 0 || ofs >= mtd->size)
1071 return -EINVAL; 1068 return -EINVAL;
1072 if (!(mtd->flags & MTD_WRITEABLE)) 1069 if (!(mtd->flags & MTD_WRITEABLE))
1073 return -EROFS; 1070 return -EROFS;
diff --git a/drivers/mtd/mtdswap.c b/drivers/mtd/mtdswap.c
index 8b33b26eb12b..fc8b3d16cce7 100644
--- a/drivers/mtd/mtdswap.c
+++ b/drivers/mtd/mtdswap.c
@@ -145,7 +145,7 @@ struct mtdswap_dev {
145struct mtdswap_oobdata { 145struct mtdswap_oobdata {
146 __le16 magic; 146 __le16 magic;
147 __le32 count; 147 __le32 count;
148} __attribute__((packed)); 148} __packed;
149 149
150#define MTDSWAP_MAGIC_CLEAN 0x2095 150#define MTDSWAP_MAGIC_CLEAN 0x2095
151#define MTDSWAP_MAGIC_DIRTY (MTDSWAP_MAGIC_CLEAN + 1) 151#define MTDSWAP_MAGIC_DIRTY (MTDSWAP_MAGIC_CLEAN + 1)
@@ -1287,7 +1287,7 @@ static int mtdswap_show(struct seq_file *s, void *data)
1287 1287
1288 seq_printf(s, "total erasures: %lu\n", sum); 1288 seq_printf(s, "total erasures: %lu\n", sum);
1289 1289
1290 seq_printf(s, "\n"); 1290 seq_puts(s, "\n");
1291 1291
1292 seq_printf(s, "mtdswap_readsect count: %llu\n", d->sect_read_count); 1292 seq_printf(s, "mtdswap_readsect count: %llu\n", d->sect_read_count);
1293 seq_printf(s, "mtdswap_writesect count: %llu\n", d->sect_write_count); 1293 seq_printf(s, "mtdswap_writesect count: %llu\n", d->sect_write_count);
@@ -1296,7 +1296,7 @@ static int mtdswap_show(struct seq_file *s, void *data)
1296 seq_printf(s, "mtd write count: %llu\n", d->mtd_write_count); 1296 seq_printf(s, "mtd write count: %llu\n", d->mtd_write_count);
1297 seq_printf(s, "discarded pages count: %llu\n", d->discard_page_count); 1297 seq_printf(s, "discarded pages count: %llu\n", d->discard_page_count);
1298 1298
1299 seq_printf(s, "\n"); 1299 seq_puts(s, "\n");
1300 seq_printf(s, "total pages: %u\n", pages); 1300 seq_printf(s, "total pages: %u\n", pages);
1301 seq_printf(s, "pages mapped: %u\n", mapped); 1301 seq_printf(s, "pages mapped: %u\n", mapped);
1302 1302
@@ -1474,7 +1474,7 @@ static void mtdswap_add_mtd(struct mtd_blktrans_ops *tr, struct mtd_info *mtd)
1474 } 1474 }
1475 1475
1476 eblocks = mtd_div_by_eb(use_size, mtd); 1476 eblocks = mtd_div_by_eb(use_size, mtd);
1477 use_size = eblocks * mtd->erasesize; 1477 use_size = (uint64_t)eblocks * mtd->erasesize;
1478 bad_blocks = mtdswap_badblocks(mtd, use_size); 1478 bad_blocks = mtdswap_badblocks(mtd, use_size);
1479 eavailable = eblocks - bad_blocks; 1479 eavailable = eblocks - bad_blocks;
1480 1480
diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig
index f1cf503517fd..dd10646982ae 100644
--- a/drivers/mtd/nand/Kconfig
+++ b/drivers/mtd/nand/Kconfig
@@ -96,7 +96,7 @@ config MTD_NAND_OMAP2
96 96
97config MTD_NAND_OMAP_BCH 97config MTD_NAND_OMAP_BCH
98 depends on MTD_NAND_OMAP2 98 depends on MTD_NAND_OMAP2
99 tristate "Support hardware based BCH error correction" 99 bool "Support hardware based BCH error correction"
100 default n 100 default n
101 select BCH 101 select BCH
102 help 102 help
@@ -104,7 +104,10 @@ config MTD_NAND_OMAP_BCH
104 locate and correct errors when using BCH ECC scheme. This offloads 104 locate and correct errors when using BCH ECC scheme. This offloads
105 the cpu from doing ECC error searching and correction. However some 105 the cpu from doing ECC error searching and correction. However some
106 legacy OMAP families like OMAP2xxx, OMAP3xxx do not have ELM engine 106 legacy OMAP families like OMAP2xxx, OMAP3xxx do not have ELM engine
107 so they should not enable this config symbol. 107 so this is optional for them.
108
109config MTD_NAND_OMAP_BCH_BUILD
110 def_tristate MTD_NAND_OMAP2 && MTD_NAND_OMAP_BCH
108 111
109config MTD_NAND_IDS 112config MTD_NAND_IDS
110 tristate 113 tristate
diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile
index a035e7cc6d46..9c847e469ca7 100644
--- a/drivers/mtd/nand/Makefile
+++ b/drivers/mtd/nand/Makefile
@@ -27,6 +27,7 @@ obj-$(CONFIG_MTD_NAND_NDFC) += ndfc.o
27obj-$(CONFIG_MTD_NAND_ATMEL) += atmel_nand.o 27obj-$(CONFIG_MTD_NAND_ATMEL) += atmel_nand.o
28obj-$(CONFIG_MTD_NAND_GPIO) += gpio.o 28obj-$(CONFIG_MTD_NAND_GPIO) += gpio.o
29obj-$(CONFIG_MTD_NAND_OMAP2) += omap2.o 29obj-$(CONFIG_MTD_NAND_OMAP2) += omap2.o
30obj-$(CONFIG_MTD_NAND_OMAP_BCH_BUILD) += omap_elm.o
30obj-$(CONFIG_MTD_NAND_CM_X270) += cmx270_nand.o 31obj-$(CONFIG_MTD_NAND_CM_X270) += cmx270_nand.o
31obj-$(CONFIG_MTD_NAND_PXA3xx) += pxa3xx_nand.o 32obj-$(CONFIG_MTD_NAND_PXA3xx) += pxa3xx_nand.o
32obj-$(CONFIG_MTD_NAND_TMIO) += tmio_nand.o 33obj-$(CONFIG_MTD_NAND_TMIO) += tmio_nand.o
diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c
index e321c564ff05..19d1e9d17bf9 100644
--- a/drivers/mtd/nand/atmel_nand.c
+++ b/drivers/mtd/nand/atmel_nand.c
@@ -27,6 +27,7 @@
27 * 27 *
28 */ 28 */
29 29
30#include <linux/clk.h>
30#include <linux/dma-mapping.h> 31#include <linux/dma-mapping.h>
31#include <linux/slab.h> 32#include <linux/slab.h>
32#include <linux/module.h> 33#include <linux/module.h>
@@ -96,6 +97,8 @@ struct atmel_nfc {
96 bool use_nfc_sram; 97 bool use_nfc_sram;
97 bool write_by_sram; 98 bool write_by_sram;
98 99
100 struct clk *clk;
101
99 bool is_initialized; 102 bool is_initialized;
100 struct completion comp_ready; 103 struct completion comp_ready;
101 struct completion comp_cmd_done; 104 struct completion comp_cmd_done;
@@ -128,8 +131,6 @@ struct atmel_nand_host {
128 u32 pmecc_lookup_table_offset_512; 131 u32 pmecc_lookup_table_offset_512;
129 u32 pmecc_lookup_table_offset_1024; 132 u32 pmecc_lookup_table_offset_1024;
130 133
131 int pmecc_bytes_per_sector;
132 int pmecc_sector_number;
133 int pmecc_degree; /* Degree of remainders */ 134 int pmecc_degree; /* Degree of remainders */
134 int pmecc_cw_len; /* Length of codeword */ 135 int pmecc_cw_len; /* Length of codeword */
135 136
@@ -841,7 +842,7 @@ static void pmecc_correct_data(struct mtd_info *mtd, uint8_t *buf, uint8_t *ecc,
841 pos, bit_pos, err_byte, *(buf + byte_pos)); 842 pos, bit_pos, err_byte, *(buf + byte_pos));
842 } else { 843 } else {
843 /* Bit flip in OOB area */ 844 /* Bit flip in OOB area */
844 tmp = sector_num * host->pmecc_bytes_per_sector 845 tmp = sector_num * nand_chip->ecc.bytes
845 + (byte_pos - sector_size); 846 + (byte_pos - sector_size);
846 err_byte = ecc[tmp]; 847 err_byte = ecc[tmp];
847 ecc[tmp] ^= (1 << bit_pos); 848 ecc[tmp] ^= (1 << bit_pos);
@@ -874,7 +875,7 @@ static int pmecc_correction(struct mtd_info *mtd, u32 pmecc_stat, uint8_t *buf,
874 return 0; 875 return 0;
875 876
876normal_check: 877normal_check:
877 for (i = 0; i < host->pmecc_sector_number; i++) { 878 for (i = 0; i < nand_chip->ecc.steps; i++) {
878 err_nbr = 0; 879 err_nbr = 0;
879 if (pmecc_stat & 0x1) { 880 if (pmecc_stat & 0x1) {
880 buf_pos = buf + i * host->pmecc_sector_size; 881 buf_pos = buf + i * host->pmecc_sector_size;
@@ -890,7 +891,7 @@ normal_check:
890 return -EIO; 891 return -EIO;
891 } else { 892 } else {
892 pmecc_correct_data(mtd, buf_pos, ecc, i, 893 pmecc_correct_data(mtd, buf_pos, ecc, i,
893 host->pmecc_bytes_per_sector, err_nbr); 894 nand_chip->ecc.bytes, err_nbr);
894 mtd->ecc_stats.corrected += err_nbr; 895 mtd->ecc_stats.corrected += err_nbr;
895 total_err += err_nbr; 896 total_err += err_nbr;
896 } 897 }
@@ -984,11 +985,11 @@ static int atmel_nand_pmecc_write_page(struct mtd_info *mtd,
984 cpu_relax(); 985 cpu_relax();
985 } 986 }
986 987
987 for (i = 0; i < host->pmecc_sector_number; i++) { 988 for (i = 0; i < chip->ecc.steps; i++) {
988 for (j = 0; j < host->pmecc_bytes_per_sector; j++) { 989 for (j = 0; j < chip->ecc.bytes; j++) {
989 int pos; 990 int pos;
990 991
991 pos = i * host->pmecc_bytes_per_sector + j; 992 pos = i * chip->ecc.bytes + j;
992 chip->oob_poi[eccpos[pos]] = 993 chip->oob_poi[eccpos[pos]] =
993 pmecc_readb_ecc_relaxed(host->ecc, i, j); 994 pmecc_readb_ecc_relaxed(host->ecc, i, j);
994 } 995 }
@@ -1031,7 +1032,7 @@ static void atmel_pmecc_core_init(struct mtd_info *mtd)
1031 else if (host->pmecc_sector_size == 1024) 1032 else if (host->pmecc_sector_size == 1024)
1032 val |= PMECC_CFG_SECTOR1024; 1033 val |= PMECC_CFG_SECTOR1024;
1033 1034
1034 switch (host->pmecc_sector_number) { 1035 switch (nand_chip->ecc.steps) {
1035 case 1: 1036 case 1:
1036 val |= PMECC_CFG_PAGE_1SECTOR; 1037 val |= PMECC_CFG_PAGE_1SECTOR;
1037 break; 1038 break;
@@ -1148,7 +1149,6 @@ static int atmel_pmecc_nand_init_params(struct platform_device *pdev,
1148 1149
1149 host->ecc = devm_ioremap_resource(&pdev->dev, regs); 1150 host->ecc = devm_ioremap_resource(&pdev->dev, regs);
1150 if (IS_ERR(host->ecc)) { 1151 if (IS_ERR(host->ecc)) {
1151 dev_err(host->dev, "ioremap failed\n");
1152 err_no = PTR_ERR(host->ecc); 1152 err_no = PTR_ERR(host->ecc);
1153 goto err; 1153 goto err;
1154 } 1154 }
@@ -1156,8 +1156,6 @@ static int atmel_pmecc_nand_init_params(struct platform_device *pdev,
1156 regs_pmerr = platform_get_resource(pdev, IORESOURCE_MEM, 2); 1156 regs_pmerr = platform_get_resource(pdev, IORESOURCE_MEM, 2);
1157 host->pmerrloc_base = devm_ioremap_resource(&pdev->dev, regs_pmerr); 1157 host->pmerrloc_base = devm_ioremap_resource(&pdev->dev, regs_pmerr);
1158 if (IS_ERR(host->pmerrloc_base)) { 1158 if (IS_ERR(host->pmerrloc_base)) {
1159 dev_err(host->dev,
1160 "Can not get I/O resource for PMECC ERRLOC controller!\n");
1161 err_no = PTR_ERR(host->pmerrloc_base); 1159 err_no = PTR_ERR(host->pmerrloc_base);
1162 goto err; 1160 goto err;
1163 } 1161 }
@@ -1165,7 +1163,6 @@ static int atmel_pmecc_nand_init_params(struct platform_device *pdev,
1165 regs_rom = platform_get_resource(pdev, IORESOURCE_MEM, 3); 1163 regs_rom = platform_get_resource(pdev, IORESOURCE_MEM, 3);
1166 host->pmecc_rom_base = devm_ioremap_resource(&pdev->dev, regs_rom); 1164 host->pmecc_rom_base = devm_ioremap_resource(&pdev->dev, regs_rom);
1167 if (IS_ERR(host->pmecc_rom_base)) { 1165 if (IS_ERR(host->pmecc_rom_base)) {
1168 dev_err(host->dev, "Can not get I/O resource for ROM!\n");
1169 err_no = PTR_ERR(host->pmecc_rom_base); 1166 err_no = PTR_ERR(host->pmecc_rom_base);
1170 goto err; 1167 goto err;
1171 } 1168 }
@@ -1174,22 +1171,29 @@ static int atmel_pmecc_nand_init_params(struct platform_device *pdev,
1174 1171
1175 /* set ECC page size and oob layout */ 1172 /* set ECC page size and oob layout */
1176 switch (mtd->writesize) { 1173 switch (mtd->writesize) {
1174 case 512:
1175 case 1024:
1177 case 2048: 1176 case 2048:
1177 case 4096:
1178 case 8192:
1179 if (sector_size > mtd->writesize) {
1180 dev_err(host->dev, "pmecc sector size is bigger than the page size!\n");
1181 err_no = -EINVAL;
1182 goto err;
1183 }
1184
1178 host->pmecc_degree = (sector_size == 512) ? 1185 host->pmecc_degree = (sector_size == 512) ?
1179 PMECC_GF_DIMENSION_13 : PMECC_GF_DIMENSION_14; 1186 PMECC_GF_DIMENSION_13 : PMECC_GF_DIMENSION_14;
1180 host->pmecc_cw_len = (1 << host->pmecc_degree) - 1; 1187 host->pmecc_cw_len = (1 << host->pmecc_degree) - 1;
1181 host->pmecc_sector_number = mtd->writesize / sector_size;
1182 host->pmecc_bytes_per_sector = pmecc_get_ecc_bytes(
1183 cap, sector_size);
1184 host->pmecc_alpha_to = pmecc_get_alpha_to(host); 1188 host->pmecc_alpha_to = pmecc_get_alpha_to(host);
1185 host->pmecc_index_of = host->pmecc_rom_base + 1189 host->pmecc_index_of = host->pmecc_rom_base +
1186 host->pmecc_lookup_table_offset; 1190 host->pmecc_lookup_table_offset;
1187 1191
1188 nand_chip->ecc.steps = host->pmecc_sector_number;
1189 nand_chip->ecc.strength = cap; 1192 nand_chip->ecc.strength = cap;
1190 nand_chip->ecc.bytes = host->pmecc_bytes_per_sector; 1193 nand_chip->ecc.bytes = pmecc_get_ecc_bytes(cap, sector_size);
1191 nand_chip->ecc.total = host->pmecc_bytes_per_sector * 1194 nand_chip->ecc.steps = mtd->writesize / sector_size;
1192 host->pmecc_sector_number; 1195 nand_chip->ecc.total = nand_chip->ecc.bytes *
1196 nand_chip->ecc.steps;
1193 if (nand_chip->ecc.total > mtd->oobsize - 2) { 1197 if (nand_chip->ecc.total > mtd->oobsize - 2) {
1194 dev_err(host->dev, "No room for ECC bytes\n"); 1198 dev_err(host->dev, "No room for ECC bytes\n");
1195 err_no = -EINVAL; 1199 err_no = -EINVAL;
@@ -1201,13 +1205,9 @@ static int atmel_pmecc_nand_init_params(struct platform_device *pdev,
1201 1205
1202 nand_chip->ecc.layout = &atmel_pmecc_oobinfo; 1206 nand_chip->ecc.layout = &atmel_pmecc_oobinfo;
1203 break; 1207 break;
1204 case 512: 1208 default:
1205 case 1024:
1206 case 4096:
1207 /* TODO */
1208 dev_warn(host->dev, 1209 dev_warn(host->dev,
1209 "Unsupported page size for PMECC, use Software ECC\n"); 1210 "Unsupported page size for PMECC, use Software ECC\n");
1210 default:
1211 /* page size not handled by HW ECC */ 1211 /* page size not handled by HW ECC */
1212 /* switching back to soft ECC */ 1212 /* switching back to soft ECC */
1213 nand_chip->ecc.mode = NAND_ECC_SOFT; 1213 nand_chip->ecc.mode = NAND_ECC_SOFT;
@@ -1530,10 +1530,8 @@ static int atmel_hw_nand_init_params(struct platform_device *pdev,
1530 } 1530 }
1531 1531
1532 host->ecc = devm_ioremap_resource(&pdev->dev, regs); 1532 host->ecc = devm_ioremap_resource(&pdev->dev, regs);
1533 if (IS_ERR(host->ecc)) { 1533 if (IS_ERR(host->ecc))
1534 dev_err(host->dev, "ioremap failed\n");
1535 return PTR_ERR(host->ecc); 1534 return PTR_ERR(host->ecc);
1536 }
1537 1535
1538 /* ECC is calculated for the whole page (1 step) */ 1536 /* ECC is calculated for the whole page (1 step) */
1539 nand_chip->ecc.size = mtd->writesize; 1537 nand_chip->ecc.size = mtd->writesize;
@@ -1907,15 +1905,7 @@ static int nfc_sram_write_page(struct mtd_info *mtd, struct nand_chip *chip,
1907 if (offset || (data_len < mtd->writesize)) 1905 if (offset || (data_len < mtd->writesize))
1908 return -EINVAL; 1906 return -EINVAL;
1909 1907
1910 cfg = nfc_readl(host->nfc->hsmc_regs, CFG);
1911 len = mtd->writesize; 1908 len = mtd->writesize;
1912
1913 if (unlikely(raw)) {
1914 len += mtd->oobsize;
1915 nfc_writel(host->nfc->hsmc_regs, CFG, cfg | NFC_CFG_WSPARE);
1916 } else
1917 nfc_writel(host->nfc->hsmc_regs, CFG, cfg & ~NFC_CFG_WSPARE);
1918
1919 /* Copy page data to sram that will write to nand via NFC */ 1909 /* Copy page data to sram that will write to nand via NFC */
1920 if (use_dma) { 1910 if (use_dma) {
1921 if (atmel_nand_dma_op(mtd, (void *)buf, len, 0) != 0) 1911 if (atmel_nand_dma_op(mtd, (void *)buf, len, 0) != 0)
@@ -1925,6 +1915,15 @@ static int nfc_sram_write_page(struct mtd_info *mtd, struct nand_chip *chip,
1925 memcpy32_toio(sram, buf, len); 1915 memcpy32_toio(sram, buf, len);
1926 } 1916 }
1927 1917
1918 cfg = nfc_readl(host->nfc->hsmc_regs, CFG);
1919 if (unlikely(raw) && oob_required) {
1920 memcpy32_toio(sram + len, chip->oob_poi, mtd->oobsize);
1921 len += mtd->oobsize;
1922 nfc_writel(host->nfc->hsmc_regs, CFG, cfg | NFC_CFG_WSPARE);
1923 } else {
1924 nfc_writel(host->nfc->hsmc_regs, CFG, cfg & ~NFC_CFG_WSPARE);
1925 }
1926
1928 if (chip->ecc.mode == NAND_ECC_HW && host->has_pmecc) 1927 if (chip->ecc.mode == NAND_ECC_HW && host->has_pmecc)
1929 /* 1928 /*
1930 * When use NFC sram, need set up PMECC before send 1929 * When use NFC sram, need set up PMECC before send
@@ -2040,7 +2039,6 @@ static int atmel_nand_probe(struct platform_device *pdev)
2040 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 2039 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2041 host->io_base = devm_ioremap_resource(&pdev->dev, mem); 2040 host->io_base = devm_ioremap_resource(&pdev->dev, mem);
2042 if (IS_ERR(host->io_base)) { 2041 if (IS_ERR(host->io_base)) {
2043 dev_err(&pdev->dev, "atmel_nand: ioremap resource failed\n");
2044 res = PTR_ERR(host->io_base); 2042 res = PTR_ERR(host->io_base);
2045 goto err_nand_ioremap; 2043 goto err_nand_ioremap;
2046 } 2044 }
@@ -2099,7 +2097,7 @@ static int atmel_nand_probe(struct platform_device *pdev)
2099 } 2097 }
2100 2098
2101 nand_chip->ecc.mode = host->board.ecc_mode; 2099 nand_chip->ecc.mode = host->board.ecc_mode;
2102 nand_chip->chip_delay = 20; /* 20us command delay time */ 2100 nand_chip->chip_delay = 40; /* 40us command delay time */
2103 2101
2104 if (host->board.bus_width_16) /* 16-bit bus width */ 2102 if (host->board.bus_width_16) /* 16-bit bus width */
2105 nand_chip->options |= NAND_BUSWIDTH_16; 2103 nand_chip->options |= NAND_BUSWIDTH_16;
@@ -2248,6 +2246,7 @@ static int atmel_nand_nfc_probe(struct platform_device *pdev)
2248{ 2246{
2249 struct atmel_nfc *nfc = &nand_nfc; 2247 struct atmel_nfc *nfc = &nand_nfc;
2250 struct resource *nfc_cmd_regs, *nfc_hsmc_regs, *nfc_sram; 2248 struct resource *nfc_cmd_regs, *nfc_hsmc_regs, *nfc_sram;
2249 int ret;
2251 2250
2252 nfc_cmd_regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); 2251 nfc_cmd_regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2253 nfc->base_cmd_regs = devm_ioremap_resource(&pdev->dev, nfc_cmd_regs); 2252 nfc->base_cmd_regs = devm_ioremap_resource(&pdev->dev, nfc_cmd_regs);
@@ -2279,8 +2278,28 @@ static int atmel_nand_nfc_probe(struct platform_device *pdev)
2279 nfc_writel(nfc->hsmc_regs, IDR, 0xffffffff); 2278 nfc_writel(nfc->hsmc_regs, IDR, 0xffffffff);
2280 nfc_readl(nfc->hsmc_regs, SR); /* clear the NFC_SR */ 2279 nfc_readl(nfc->hsmc_regs, SR); /* clear the NFC_SR */
2281 2280
2281 nfc->clk = devm_clk_get(&pdev->dev, NULL);
2282 if (!IS_ERR(nfc->clk)) {
2283 ret = clk_prepare_enable(nfc->clk);
2284 if (ret)
2285 return ret;
2286 } else {
2287 dev_warn(&pdev->dev, "NFC clock missing, update your Device Tree");
2288 }
2289
2282 nfc->is_initialized = true; 2290 nfc->is_initialized = true;
2283 dev_info(&pdev->dev, "NFC is probed.\n"); 2291 dev_info(&pdev->dev, "NFC is probed.\n");
2292
2293 return 0;
2294}
2295
2296static int atmel_nand_nfc_remove(struct platform_device *pdev)
2297{
2298 struct atmel_nfc *nfc = &nand_nfc;
2299
2300 if (!IS_ERR(nfc->clk))
2301 clk_disable_unprepare(nfc->clk);
2302
2284 return 0; 2303 return 0;
2285} 2304}
2286 2305
@@ -2297,6 +2316,7 @@ static struct platform_driver atmel_nand_nfc_driver = {
2297 .of_match_table = of_match_ptr(atmel_nand_nfc_match), 2316 .of_match_table = of_match_ptr(atmel_nand_nfc_match),
2298 }, 2317 },
2299 .probe = atmel_nand_nfc_probe, 2318 .probe = atmel_nand_nfc_probe,
2319 .remove = atmel_nand_nfc_remove,
2300}; 2320};
2301 2321
2302static struct platform_driver atmel_nand_driver = { 2322static struct platform_driver atmel_nand_driver = {
diff --git a/drivers/mtd/nand/bcm47xxnflash/ops_bcm4706.c b/drivers/mtd/nand/bcm47xxnflash/ops_bcm4706.c
index b2ab373c9eef..592befc7ffa1 100644
--- a/drivers/mtd/nand/bcm47xxnflash/ops_bcm4706.c
+++ b/drivers/mtd/nand/bcm47xxnflash/ops_bcm4706.c
@@ -14,6 +14,7 @@
14#include <linux/module.h> 14#include <linux/module.h>
15#include <linux/kernel.h> 15#include <linux/kernel.h>
16#include <linux/slab.h> 16#include <linux/slab.h>
17#include <linux/delay.h>
17#include <linux/bcma/bcma.h> 18#include <linux/bcma/bcma.h>
18 19
19/* Broadcom uses 1'000'000 but it seems to be too many. Tests on WNDR4500 has 20/* Broadcom uses 1'000'000 but it seems to be too many. Tests on WNDR4500 has
@@ -23,6 +24,8 @@
23#define NFLASH_SECTOR_SIZE 512 24#define NFLASH_SECTOR_SIZE 512
24 25
25#define NCTL_CMD0 0x00010000 26#define NCTL_CMD0 0x00010000
27#define NCTL_COL 0x00020000 /* Update column with value from BCMA_CC_NFLASH_COL_ADDR */
28#define NCTL_ROW 0x00040000 /* Update row (page) with value from BCMA_CC_NFLASH_ROW_ADDR */
26#define NCTL_CMD1W 0x00080000 29#define NCTL_CMD1W 0x00080000
27#define NCTL_READ 0x00100000 30#define NCTL_READ 0x00100000
28#define NCTL_WRITE 0x00200000 31#define NCTL_WRITE 0x00200000
@@ -109,7 +112,7 @@ static void bcm47xxnflash_ops_bcm4706_read(struct mtd_info *mtd, uint8_t *buf,
109 b47n->curr_page_addr); 112 b47n->curr_page_addr);
110 113
111 /* Prepare to read */ 114 /* Prepare to read */
112 ctlcode = NCTL_CSA | NCTL_CMD1W | 0x00040000 | 0x00020000 | 115 ctlcode = NCTL_CSA | NCTL_CMD1W | NCTL_ROW | NCTL_COL |
113 NCTL_CMD0; 116 NCTL_CMD0;
114 ctlcode |= NAND_CMD_READSTART << 8; 117 ctlcode |= NAND_CMD_READSTART << 8;
115 if (bcm47xxnflash_ops_bcm4706_ctl_cmd(b47n->cc, ctlcode)) 118 if (bcm47xxnflash_ops_bcm4706_ctl_cmd(b47n->cc, ctlcode))
@@ -167,6 +170,26 @@ static void bcm47xxnflash_ops_bcm4706_write(struct mtd_info *mtd,
167 * NAND chip ops 170 * NAND chip ops
168 **************************************************/ 171 **************************************************/
169 172
173static void bcm47xxnflash_ops_bcm4706_cmd_ctrl(struct mtd_info *mtd, int cmd,
174 unsigned int ctrl)
175{
176 struct nand_chip *nand_chip = (struct nand_chip *)mtd->priv;
177 struct bcm47xxnflash *b47n = (struct bcm47xxnflash *)nand_chip->priv;
178 u32 code = 0;
179
180 if (cmd == NAND_CMD_NONE)
181 return;
182
183 if (cmd & NAND_CTRL_CLE)
184 code = cmd | NCTL_CMD0;
185
186 /* nCS is not needed for reset command */
187 if (cmd != NAND_CMD_RESET)
188 code |= NCTL_CSA;
189
190 bcm47xxnflash_ops_bcm4706_ctl_cmd(b47n->cc, code);
191}
192
170/* Default nand_select_chip calls cmd_ctrl, which is not used in BCM4706 */ 193/* Default nand_select_chip calls cmd_ctrl, which is not used in BCM4706 */
171static void bcm47xxnflash_ops_bcm4706_select_chip(struct mtd_info *mtd, 194static void bcm47xxnflash_ops_bcm4706_select_chip(struct mtd_info *mtd,
172 int chip) 195 int chip)
@@ -174,6 +197,14 @@ static void bcm47xxnflash_ops_bcm4706_select_chip(struct mtd_info *mtd,
174 return; 197 return;
175} 198}
176 199
200static int bcm47xxnflash_ops_bcm4706_dev_ready(struct mtd_info *mtd)
201{
202 struct nand_chip *nand_chip = (struct nand_chip *)mtd->priv;
203 struct bcm47xxnflash *b47n = (struct bcm47xxnflash *)nand_chip->priv;
204
205 return !!(bcma_cc_read32(b47n->cc, BCMA_CC_NFLASH_CTL) & NCTL_READY);
206}
207
177/* 208/*
178 * Default nand_command and nand_command_lp don't match BCM4706 hardware layout. 209 * Default nand_command and nand_command_lp don't match BCM4706 hardware layout.
179 * For example, reading chip id is performed in a non-standard way. 210 * For example, reading chip id is performed in a non-standard way.
@@ -198,7 +229,10 @@ static void bcm47xxnflash_ops_bcm4706_cmdfunc(struct mtd_info *mtd,
198 229
199 switch (command) { 230 switch (command) {
200 case NAND_CMD_RESET: 231 case NAND_CMD_RESET:
201 pr_warn("Chip reset not implemented yet\n"); 232 nand_chip->cmd_ctrl(mtd, command, NAND_CTRL_CLE);
233
234 ndelay(100);
235 nand_wait_ready(mtd);
202 break; 236 break;
203 case NAND_CMD_READID: 237 case NAND_CMD_READID:
204 ctlcode = NCTL_CSA | 0x01000000 | NCTL_CMD1W | NCTL_CMD0; 238 ctlcode = NCTL_CSA | 0x01000000 | NCTL_CMD1W | NCTL_CMD0;
@@ -242,7 +276,7 @@ static void bcm47xxnflash_ops_bcm4706_cmdfunc(struct mtd_info *mtd,
242 case NAND_CMD_ERASE1: 276 case NAND_CMD_ERASE1:
243 bcma_cc_write32(cc, BCMA_CC_NFLASH_ROW_ADDR, 277 bcma_cc_write32(cc, BCMA_CC_NFLASH_ROW_ADDR,
244 b47n->curr_page_addr); 278 b47n->curr_page_addr);
245 ctlcode = 0x00040000 | NCTL_CMD1W | NCTL_CMD0 | 279 ctlcode = NCTL_ROW | NCTL_CMD1W | NCTL_CMD0 |
246 NAND_CMD_ERASE1 | (NAND_CMD_ERASE2 << 8); 280 NAND_CMD_ERASE1 | (NAND_CMD_ERASE2 << 8);
247 if (bcm47xxnflash_ops_bcm4706_ctl_cmd(cc, ctlcode)) 281 if (bcm47xxnflash_ops_bcm4706_ctl_cmd(cc, ctlcode))
248 pr_err("ERASE1 failed\n"); 282 pr_err("ERASE1 failed\n");
@@ -257,13 +291,13 @@ static void bcm47xxnflash_ops_bcm4706_cmdfunc(struct mtd_info *mtd,
257 b47n->curr_page_addr); 291 b47n->curr_page_addr);
258 292
259 /* Prepare to write */ 293 /* Prepare to write */
260 ctlcode = 0x40000000 | 0x00040000 | 0x00020000 | 0x00010000; 294 ctlcode = 0x40000000 | NCTL_ROW | NCTL_COL | NCTL_CMD0;
261 ctlcode |= NAND_CMD_SEQIN; 295 ctlcode |= NAND_CMD_SEQIN;
262 if (bcm47xxnflash_ops_bcm4706_ctl_cmd(cc, ctlcode)) 296 if (bcm47xxnflash_ops_bcm4706_ctl_cmd(cc, ctlcode))
263 pr_err("SEQIN failed\n"); 297 pr_err("SEQIN failed\n");
264 break; 298 break;
265 case NAND_CMD_PAGEPROG: 299 case NAND_CMD_PAGEPROG:
266 if (bcm47xxnflash_ops_bcm4706_ctl_cmd(cc, 0x00010000 | 300 if (bcm47xxnflash_ops_bcm4706_ctl_cmd(cc, NCTL_CMD0 |
267 NAND_CMD_PAGEPROG)) 301 NAND_CMD_PAGEPROG))
268 pr_err("PAGEPROG failed\n"); 302 pr_err("PAGEPROG failed\n");
269 if (bcm47xxnflash_ops_bcm4706_poll(cc)) 303 if (bcm47xxnflash_ops_bcm4706_poll(cc))
@@ -341,6 +375,7 @@ static void bcm47xxnflash_ops_bcm4706_write_buf(struct mtd_info *mtd,
341 375
342int bcm47xxnflash_ops_bcm4706_init(struct bcm47xxnflash *b47n) 376int bcm47xxnflash_ops_bcm4706_init(struct bcm47xxnflash *b47n)
343{ 377{
378 struct nand_chip *nand_chip = (struct nand_chip *)&b47n->nand_chip;
344 int err; 379 int err;
345 u32 freq; 380 u32 freq;
346 u16 clock; 381 u16 clock;
@@ -351,10 +386,14 @@ int bcm47xxnflash_ops_bcm4706_init(struct bcm47xxnflash *b47n)
351 u32 val; 386 u32 val;
352 387
353 b47n->nand_chip.select_chip = bcm47xxnflash_ops_bcm4706_select_chip; 388 b47n->nand_chip.select_chip = bcm47xxnflash_ops_bcm4706_select_chip;
389 nand_chip->cmd_ctrl = bcm47xxnflash_ops_bcm4706_cmd_ctrl;
390 nand_chip->dev_ready = bcm47xxnflash_ops_bcm4706_dev_ready;
354 b47n->nand_chip.cmdfunc = bcm47xxnflash_ops_bcm4706_cmdfunc; 391 b47n->nand_chip.cmdfunc = bcm47xxnflash_ops_bcm4706_cmdfunc;
355 b47n->nand_chip.read_byte = bcm47xxnflash_ops_bcm4706_read_byte; 392 b47n->nand_chip.read_byte = bcm47xxnflash_ops_bcm4706_read_byte;
356 b47n->nand_chip.read_buf = bcm47xxnflash_ops_bcm4706_read_buf; 393 b47n->nand_chip.read_buf = bcm47xxnflash_ops_bcm4706_read_buf;
357 b47n->nand_chip.write_buf = bcm47xxnflash_ops_bcm4706_write_buf; 394 b47n->nand_chip.write_buf = bcm47xxnflash_ops_bcm4706_write_buf;
395
396 nand_chip->chip_delay = 50;
358 b47n->nand_chip.bbt_options = NAND_BBT_USE_FLASH; 397 b47n->nand_chip.bbt_options = NAND_BBT_USE_FLASH;
359 b47n->nand_chip.ecc.mode = NAND_ECC_NONE; /* TODO: implement ECC */ 398 b47n->nand_chip.ecc.mode = NAND_ECC_NONE; /* TODO: implement ECC */
360 399
@@ -364,11 +403,13 @@ int bcm47xxnflash_ops_bcm4706_init(struct bcm47xxnflash *b47n)
364 403
365 /* Configure wait counters */ 404 /* Configure wait counters */
366 if (b47n->cc->status & BCMA_CC_CHIPST_4706_PKG_OPTION) { 405 if (b47n->cc->status & BCMA_CC_CHIPST_4706_PKG_OPTION) {
367 freq = 100000000; 406 /* 400 MHz */
407 freq = 400000000 / 4;
368 } else { 408 } else {
369 freq = bcma_chipco_pll_read(b47n->cc, 4); 409 freq = bcma_chipco_pll_read(b47n->cc, 4);
370 freq = (freq * 0xFFF) >> 3; 410 freq = (freq & 0xFFF) >> 3;
371 freq = (freq * 25000000) >> 3; 411 /* Fixed reference clock 25 MHz and m = 2 */
412 freq = (freq * 25000000 / 2) / 4;
372 } 413 }
373 clock = freq / 1000000; 414 clock = freq / 1000000;
374 w0 = bcm47xxnflash_ops_bcm4706_ns_to_cycle(15, clock); 415 w0 = bcm47xxnflash_ops_bcm4706_ns_to_cycle(15, clock);
diff --git a/drivers/mtd/nand/denali.c b/drivers/mtd/nand/denali.c
index 0b071a3136a2..b3b7ca1bafb8 100644
--- a/drivers/mtd/nand/denali.c
+++ b/drivers/mtd/nand/denali.c
@@ -29,20 +29,23 @@
29 29
30MODULE_LICENSE("GPL"); 30MODULE_LICENSE("GPL");
31 31
32/* We define a module parameter that allows the user to override 32/*
33 * We define a module parameter that allows the user to override
33 * the hardware and decide what timing mode should be used. 34 * the hardware and decide what timing mode should be used.
34 */ 35 */
35#define NAND_DEFAULT_TIMINGS -1 36#define NAND_DEFAULT_TIMINGS -1
36 37
37static int onfi_timing_mode = NAND_DEFAULT_TIMINGS; 38static int onfi_timing_mode = NAND_DEFAULT_TIMINGS;
38module_param(onfi_timing_mode, int, S_IRUGO); 39module_param(onfi_timing_mode, int, S_IRUGO);
39MODULE_PARM_DESC(onfi_timing_mode, "Overrides default ONFI setting." 40MODULE_PARM_DESC(onfi_timing_mode,
40 " -1 indicates use default timings"); 41 "Overrides default ONFI setting. -1 indicates use default timings");
41 42
42#define DENALI_NAND_NAME "denali-nand" 43#define DENALI_NAND_NAME "denali-nand"
43 44
44/* We define a macro here that combines all interrupts this driver uses into 45/*
45 * a single constant value, for convenience. */ 46 * We define a macro here that combines all interrupts this driver uses into
47 * a single constant value, for convenience.
48 */
46#define DENALI_IRQ_ALL (INTR_STATUS__DMA_CMD_COMP | \ 49#define DENALI_IRQ_ALL (INTR_STATUS__DMA_CMD_COMP | \
47 INTR_STATUS__ECC_TRANSACTION_DONE | \ 50 INTR_STATUS__ECC_TRANSACTION_DONE | \
48 INTR_STATUS__ECC_ERR | \ 51 INTR_STATUS__ECC_ERR | \
@@ -54,26 +57,34 @@ MODULE_PARM_DESC(onfi_timing_mode, "Overrides default ONFI setting."
54 INTR_STATUS__RST_COMP | \ 57 INTR_STATUS__RST_COMP | \
55 INTR_STATUS__ERASE_COMP) 58 INTR_STATUS__ERASE_COMP)
56 59
57/* indicates whether or not the internal value for the flash bank is 60/*
58 * valid or not */ 61 * indicates whether or not the internal value for the flash bank is
62 * valid or not
63 */
59#define CHIP_SELECT_INVALID -1 64#define CHIP_SELECT_INVALID -1
60 65
61#define SUPPORT_8BITECC 1 66#define SUPPORT_8BITECC 1
62 67
63/* This macro divides two integers and rounds fractional values up 68/*
64 * to the nearest integer value. */ 69 * This macro divides two integers and rounds fractional values up
70 * to the nearest integer value.
71 */
65#define CEIL_DIV(X, Y) (((X)%(Y)) ? ((X)/(Y)+1) : ((X)/(Y))) 72#define CEIL_DIV(X, Y) (((X)%(Y)) ? ((X)/(Y)+1) : ((X)/(Y)))
66 73
67/* this macro allows us to convert from an MTD structure to our own 74/*
75 * this macro allows us to convert from an MTD structure to our own
68 * device context (denali) structure. 76 * device context (denali) structure.
69 */ 77 */
70#define mtd_to_denali(m) container_of(m, struct denali_nand_info, mtd) 78#define mtd_to_denali(m) container_of(m, struct denali_nand_info, mtd)
71 79
72/* These constants are defined by the driver to enable common driver 80/*
73 * configuration options. */ 81 * These constants are defined by the driver to enable common driver
82 * configuration options.
83 */
74#define SPARE_ACCESS 0x41 84#define SPARE_ACCESS 0x41
75#define MAIN_ACCESS 0x42 85#define MAIN_ACCESS 0x42
76#define MAIN_SPARE_ACCESS 0x43 86#define MAIN_SPARE_ACCESS 0x43
87#define PIPELINE_ACCESS 0x2000
77 88
78#define DENALI_READ 0 89#define DENALI_READ 0
79#define DENALI_WRITE 0x100 90#define DENALI_WRITE 0x100
@@ -83,8 +94,10 @@ MODULE_PARM_DESC(onfi_timing_mode, "Overrides default ONFI setting."
83#define ADDR_CYCLE 1 94#define ADDR_CYCLE 1
84#define STATUS_CYCLE 2 95#define STATUS_CYCLE 2
85 96
86/* this is a helper macro that allows us to 97/*
87 * format the bank into the proper bits for the controller */ 98 * this is a helper macro that allows us to
99 * format the bank into the proper bits for the controller
100 */
88#define BANK(x) ((x) << 24) 101#define BANK(x) ((x) << 24)
89 102
90/* forward declarations */ 103/* forward declarations */
@@ -95,12 +108,12 @@ static void denali_irq_enable(struct denali_nand_info *denali,
95 uint32_t int_mask); 108 uint32_t int_mask);
96static uint32_t read_interrupt_status(struct denali_nand_info *denali); 109static uint32_t read_interrupt_status(struct denali_nand_info *denali);
97 110
98/* Certain operations for the denali NAND controller use 111/*
99 * an indexed mode to read/write data. The operation is 112 * Certain operations for the denali NAND controller use an indexed mode to
100 * performed by writing the address value of the command 113 * read/write data. The operation is performed by writing the address value
101 * to the device memory followed by the data. This function 114 * of the command to the device memory followed by the data. This function
102 * abstracts this common operation. 115 * abstracts this common operation.
103*/ 116 */
104static void index_addr(struct denali_nand_info *denali, 117static void index_addr(struct denali_nand_info *denali,
105 uint32_t address, uint32_t data) 118 uint32_t address, uint32_t data)
106{ 119{
@@ -116,8 +129,10 @@ static void index_addr_read_data(struct denali_nand_info *denali,
116 *pdata = ioread32(denali->flash_mem + 0x10); 129 *pdata = ioread32(denali->flash_mem + 0x10);
117} 130}
118 131
119/* We need to buffer some data for some of the NAND core routines. 132/*
120 * The operations manage buffering that data. */ 133 * We need to buffer some data for some of the NAND core routines.
134 * The operations manage buffering that data.
135 */
121static void reset_buf(struct denali_nand_info *denali) 136static void reset_buf(struct denali_nand_info *denali)
122{ 137{
123 denali->buf.head = denali->buf.tail = 0; 138 denali->buf.head = denali->buf.tail = 0;
@@ -131,7 +146,7 @@ static void write_byte_to_buf(struct denali_nand_info *denali, uint8_t byte)
131/* reads the status of the device */ 146/* reads the status of the device */
132static void read_status(struct denali_nand_info *denali) 147static void read_status(struct denali_nand_info *denali)
133{ 148{
134 uint32_t cmd = 0x0; 149 uint32_t cmd;
135 150
136 /* initialize the data buffer to store status */ 151 /* initialize the data buffer to store status */
137 reset_buf(denali); 152 reset_buf(denali);
@@ -146,9 +161,8 @@ static void read_status(struct denali_nand_info *denali)
146/* resets a specific device connected to the core */ 161/* resets a specific device connected to the core */
147static void reset_bank(struct denali_nand_info *denali) 162static void reset_bank(struct denali_nand_info *denali)
148{ 163{
149 uint32_t irq_status = 0; 164 uint32_t irq_status;
150 uint32_t irq_mask = INTR_STATUS__RST_COMP | 165 uint32_t irq_mask = INTR_STATUS__RST_COMP | INTR_STATUS__TIME_OUT;
151 INTR_STATUS__TIME_OUT;
152 166
153 clear_interrupts(denali); 167 clear_interrupts(denali);
154 168
@@ -163,19 +177,18 @@ static void reset_bank(struct denali_nand_info *denali)
163/* Reset the flash controller */ 177/* Reset the flash controller */
164static uint16_t denali_nand_reset(struct denali_nand_info *denali) 178static uint16_t denali_nand_reset(struct denali_nand_info *denali)
165{ 179{
166 uint32_t i; 180 int i;
167 181
168 dev_dbg(denali->dev, "%s, Line %d, Function: %s\n", 182 dev_dbg(denali->dev, "%s, Line %d, Function: %s\n",
169 __FILE__, __LINE__, __func__); 183 __FILE__, __LINE__, __func__);
170 184
171 for (i = 0 ; i < denali->max_banks; i++) 185 for (i = 0; i < denali->max_banks; i++)
172 iowrite32(INTR_STATUS__RST_COMP | INTR_STATUS__TIME_OUT, 186 iowrite32(INTR_STATUS__RST_COMP | INTR_STATUS__TIME_OUT,
173 denali->flash_reg + INTR_STATUS(i)); 187 denali->flash_reg + INTR_STATUS(i));
174 188
175 for (i = 0 ; i < denali->max_banks; i++) { 189 for (i = 0; i < denali->max_banks; i++) {
176 iowrite32(1 << i, denali->flash_reg + DEVICE_RESET); 190 iowrite32(1 << i, denali->flash_reg + DEVICE_RESET);
177 while (!(ioread32(denali->flash_reg + 191 while (!(ioread32(denali->flash_reg + INTR_STATUS(i)) &
178 INTR_STATUS(i)) &
179 (INTR_STATUS__RST_COMP | INTR_STATUS__TIME_OUT))) 192 (INTR_STATUS__RST_COMP | INTR_STATUS__TIME_OUT)))
180 cpu_relax(); 193 cpu_relax();
181 if (ioread32(denali->flash_reg + INTR_STATUS(i)) & 194 if (ioread32(denali->flash_reg + INTR_STATUS(i)) &
@@ -186,12 +199,13 @@ static uint16_t denali_nand_reset(struct denali_nand_info *denali)
186 199
187 for (i = 0; i < denali->max_banks; i++) 200 for (i = 0; i < denali->max_banks; i++)
188 iowrite32(INTR_STATUS__RST_COMP | INTR_STATUS__TIME_OUT, 201 iowrite32(INTR_STATUS__RST_COMP | INTR_STATUS__TIME_OUT,
189 denali->flash_reg + INTR_STATUS(i)); 202 denali->flash_reg + INTR_STATUS(i));
190 203
191 return PASS; 204 return PASS;
192} 205}
193 206
194/* this routine calculates the ONFI timing values for a given mode and 207/*
208 * this routine calculates the ONFI timing values for a given mode and
195 * programs the clocking register accordingly. The mode is determined by 209 * programs the clocking register accordingly. The mode is determined by
196 * the get_onfi_nand_para routine. 210 * the get_onfi_nand_para routine.
197 */ 211 */
@@ -219,7 +233,7 @@ static void nand_onfi_timing_set(struct denali_nand_info *denali,
219 uint16_t addr_2_data, re_2_we, re_2_re, we_2_re, cs_cnt; 233 uint16_t addr_2_data, re_2_we, re_2_re, we_2_re, cs_cnt;
220 234
221 dev_dbg(denali->dev, "%s, Line %d, Function: %s\n", 235 dev_dbg(denali->dev, "%s, Line %d, Function: %s\n",
222 __FILE__, __LINE__, __func__); 236 __FILE__, __LINE__, __func__);
223 237
224 en_lo = CEIL_DIV(Trp[mode], CLK_X); 238 en_lo = CEIL_DIV(Trp[mode], CLK_X);
225 en_hi = CEIL_DIV(Treh[mode], CLK_X); 239 en_hi = CEIL_DIV(Treh[mode], CLK_X);
@@ -239,9 +253,8 @@ static void nand_onfi_timing_set(struct denali_nand_info *denali,
239 253
240 data_invalid_rloh = (en_lo + en_hi) * CLK_X + Trloh[mode]; 254 data_invalid_rloh = (en_lo + en_hi) * CLK_X + Trloh[mode];
241 255
242 data_invalid = 256 data_invalid = data_invalid_rhoh < data_invalid_rloh ?
243 data_invalid_rhoh < 257 data_invalid_rhoh : data_invalid_rloh;
244 data_invalid_rloh ? data_invalid_rhoh : data_invalid_rloh;
245 258
246 dv_window = data_invalid - Trea[mode]; 259 dv_window = data_invalid - Trea[mode];
247 260
@@ -251,12 +264,12 @@ static void nand_onfi_timing_set(struct denali_nand_info *denali,
251 264
252 acc_clks = CEIL_DIV(Trea[mode], CLK_X); 265 acc_clks = CEIL_DIV(Trea[mode], CLK_X);
253 266
254 while (((acc_clks * CLK_X) - Trea[mode]) < 3) 267 while (acc_clks * CLK_X - Trea[mode] < 3)
255 acc_clks++; 268 acc_clks++;
256 269
257 if ((data_invalid - acc_clks * CLK_X) < 2) 270 if (data_invalid - acc_clks * CLK_X < 2)
258 dev_warn(denali->dev, "%s, Line %d: Warning!\n", 271 dev_warn(denali->dev, "%s, Line %d: Warning!\n",
259 __FILE__, __LINE__); 272 __FILE__, __LINE__);
260 273
261 addr_2_data = CEIL_DIV(Tadl[mode], CLK_X); 274 addr_2_data = CEIL_DIV(Tadl[mode], CLK_X);
262 re_2_we = CEIL_DIV(Trhw[mode], CLK_X); 275 re_2_we = CEIL_DIV(Trhw[mode], CLK_X);
@@ -269,7 +282,7 @@ static void nand_onfi_timing_set(struct denali_nand_info *denali,
269 cs_cnt = 1; 282 cs_cnt = 1;
270 283
271 if (Tcea[mode]) { 284 if (Tcea[mode]) {
272 while (((cs_cnt * CLK_X) + Trea[mode]) < Tcea[mode]) 285 while (cs_cnt * CLK_X + Trea[mode] < Tcea[mode])
273 cs_cnt++; 286 cs_cnt++;
274 } 287 }
275 288
@@ -279,8 +292,8 @@ static void nand_onfi_timing_set(struct denali_nand_info *denali,
279#endif 292#endif
280 293
281 /* Sighting 3462430: Temporary hack for MT29F128G08CJABAWP:B */ 294 /* Sighting 3462430: Temporary hack for MT29F128G08CJABAWP:B */
282 if ((ioread32(denali->flash_reg + MANUFACTURER_ID) == 0) && 295 if (ioread32(denali->flash_reg + MANUFACTURER_ID) == 0 &&
283 (ioread32(denali->flash_reg + DEVICE_ID) == 0x88)) 296 ioread32(denali->flash_reg + DEVICE_ID) == 0x88)
284 acc_clks = 6; 297 acc_clks = 6;
285 298
286 iowrite32(acc_clks, denali->flash_reg + ACC_CLKS); 299 iowrite32(acc_clks, denali->flash_reg + ACC_CLKS);
@@ -297,9 +310,11 @@ static void nand_onfi_timing_set(struct denali_nand_info *denali,
297static uint16_t get_onfi_nand_para(struct denali_nand_info *denali) 310static uint16_t get_onfi_nand_para(struct denali_nand_info *denali)
298{ 311{
299 int i; 312 int i;
300 /* we needn't to do a reset here because driver has already 313
314 /*
315 * we needn't to do a reset here because driver has already
301 * reset all the banks before 316 * reset all the banks before
302 * */ 317 */
303 if (!(ioread32(denali->flash_reg + ONFI_TIMING_MODE) & 318 if (!(ioread32(denali->flash_reg + ONFI_TIMING_MODE) &
304 ONFI_TIMING_MODE__VALUE)) 319 ONFI_TIMING_MODE__VALUE))
305 return FAIL; 320 return FAIL;
@@ -312,8 +327,10 @@ static uint16_t get_onfi_nand_para(struct denali_nand_info *denali)
312 327
313 nand_onfi_timing_set(denali, i); 328 nand_onfi_timing_set(denali, i);
314 329
315 /* By now, all the ONFI devices we know support the page cache */ 330 /*
316 /* rw feature. So here we enable the pipeline_rw_ahead feature */ 331 * By now, all the ONFI devices we know support the page cache
332 * rw feature. So here we enable the pipeline_rw_ahead feature
333 */
317 /* iowrite32(1, denali->flash_reg + CACHE_WRITE_ENABLE); */ 334 /* iowrite32(1, denali->flash_reg + CACHE_WRITE_ENABLE); */
318 /* iowrite32(1, denali->flash_reg + CACHE_READ_ENABLE); */ 335 /* iowrite32(1, denali->flash_reg + CACHE_READ_ENABLE); */
319 336
@@ -339,8 +356,10 @@ static void get_toshiba_nand_para(struct denali_nand_info *denali)
339{ 356{
340 uint32_t tmp; 357 uint32_t tmp;
341 358
342 /* Workaround to fix a controller bug which reports a wrong */ 359 /*
343 /* spare area size for some kind of Toshiba NAND device */ 360 * Workaround to fix a controller bug which reports a wrong
361 * spare area size for some kind of Toshiba NAND device
362 */
344 if ((ioread32(denali->flash_reg + DEVICE_MAIN_AREA_SIZE) == 4096) && 363 if ((ioread32(denali->flash_reg + DEVICE_MAIN_AREA_SIZE) == 4096) &&
345 (ioread32(denali->flash_reg + DEVICE_SPARE_AREA_SIZE) == 64)) { 364 (ioread32(denali->flash_reg + DEVICE_SPARE_AREA_SIZE) == 64)) {
346 iowrite32(216, denali->flash_reg + DEVICE_SPARE_AREA_SIZE); 365 iowrite32(216, denali->flash_reg + DEVICE_SPARE_AREA_SIZE);
@@ -384,13 +403,14 @@ static void get_hynix_nand_para(struct denali_nand_info *denali,
384 break; 403 break;
385 default: 404 default:
386 dev_warn(denali->dev, 405 dev_warn(denali->dev,
387 "Spectra: Unknown Hynix NAND (Device ID: 0x%x)." 406 "Spectra: Unknown Hynix NAND (Device ID: 0x%x).\n"
388 "Will use default parameter values instead.\n", 407 "Will use default parameter values instead.\n",
389 device_id); 408 device_id);
390 } 409 }
391} 410}
392 411
393/* determines how many NAND chips are connected to the controller. Note for 412/*
413 * determines how many NAND chips are connected to the controller. Note for
394 * Intel CE4100 devices we don't support more than one device. 414 * Intel CE4100 devices we don't support more than one device.
395 */ 415 */
396static void find_valid_banks(struct denali_nand_info *denali) 416static void find_valid_banks(struct denali_nand_info *denali)
@@ -400,10 +420,9 @@ static void find_valid_banks(struct denali_nand_info *denali)
400 420
401 denali->total_used_banks = 1; 421 denali->total_used_banks = 1;
402 for (i = 0; i < denali->max_banks; i++) { 422 for (i = 0; i < denali->max_banks; i++) {
403 index_addr(denali, (uint32_t)(MODE_11 | (i << 24) | 0), 0x90); 423 index_addr(denali, MODE_11 | (i << 24) | 0, 0x90);
404 index_addr(denali, (uint32_t)(MODE_11 | (i << 24) | 1), 0); 424 index_addr(denali, MODE_11 | (i << 24) | 1, 0);
405 index_addr_read_data(denali, 425 index_addr_read_data(denali, MODE_11 | (i << 24) | 2, &id[i]);
406 (uint32_t)(MODE_11 | (i << 24) | 2), &id[i]);
407 426
408 dev_dbg(denali->dev, 427 dev_dbg(denali->dev,
409 "Return 1st ID for bank[%d]: %x\n", i, id[i]); 428 "Return 1st ID for bank[%d]: %x\n", i, id[i]);
@@ -420,14 +439,14 @@ static void find_valid_banks(struct denali_nand_info *denali)
420 } 439 }
421 440
422 if (denali->platform == INTEL_CE4100) { 441 if (denali->platform == INTEL_CE4100) {
423 /* Platform limitations of the CE4100 device limit 442 /*
443 * Platform limitations of the CE4100 device limit
424 * users to a single chip solution for NAND. 444 * users to a single chip solution for NAND.
425 * Multichip support is not enabled. 445 * Multichip support is not enabled.
426 */ 446 */
427 if (denali->total_used_banks != 1) { 447 if (denali->total_used_banks != 1) {
428 dev_err(denali->dev, 448 dev_err(denali->dev,
429 "Sorry, Intel CE4100 only supports " 449 "Sorry, Intel CE4100 only supports a single NAND device.\n");
430 "a single NAND device.\n");
431 BUG(); 450 BUG();
432 } 451 }
433 } 452 }
@@ -448,12 +467,13 @@ static void detect_max_banks(struct denali_nand_info *denali)
448 467
449static void detect_partition_feature(struct denali_nand_info *denali) 468static void detect_partition_feature(struct denali_nand_info *denali)
450{ 469{
451 /* For MRST platform, denali->fwblks represent the 470 /*
471 * For MRST platform, denali->fwblks represent the
452 * number of blocks firmware is taken, 472 * number of blocks firmware is taken,
453 * FW is in protect partition and MTD driver has no 473 * FW is in protect partition and MTD driver has no
454 * permission to access it. So let driver know how many 474 * permission to access it. So let driver know how many
455 * blocks it can't touch. 475 * blocks it can't touch.
456 * */ 476 */
457 if (ioread32(denali->flash_reg + FEATURES) & FEATURES__PARTITION) { 477 if (ioread32(denali->flash_reg + FEATURES) & FEATURES__PARTITION) {
458 if ((ioread32(denali->flash_reg + PERM_SRC_ID(1)) & 478 if ((ioread32(denali->flash_reg + PERM_SRC_ID(1)) &
459 PERM_SRC_ID__SRCID) == SPECTRA_PARTITION_ID) { 479 PERM_SRC_ID__SRCID) == SPECTRA_PARTITION_ID) {
@@ -464,30 +484,32 @@ static void detect_partition_feature(struct denali_nand_info *denali)
464 + 484 +
465 (ioread32(denali->flash_reg + MIN_BLK_ADDR(1)) & 485 (ioread32(denali->flash_reg + MIN_BLK_ADDR(1)) &
466 MIN_BLK_ADDR__VALUE); 486 MIN_BLK_ADDR__VALUE);
467 } else 487 } else {
468 denali->fwblks = SPECTRA_START_BLOCK; 488 denali->fwblks = SPECTRA_START_BLOCK;
469 } else 489 }
490 } else {
470 denali->fwblks = SPECTRA_START_BLOCK; 491 denali->fwblks = SPECTRA_START_BLOCK;
492 }
471} 493}
472 494
473static uint16_t denali_nand_timing_set(struct denali_nand_info *denali) 495static uint16_t denali_nand_timing_set(struct denali_nand_info *denali)
474{ 496{
475 uint16_t status = PASS; 497 uint16_t status = PASS;
476 uint32_t id_bytes[8], addr; 498 uint32_t id_bytes[8], addr;
477 uint8_t i, maf_id, device_id; 499 uint8_t maf_id, device_id;
500 int i;
478 501
479 dev_dbg(denali->dev, 502 dev_dbg(denali->dev, "%s, Line %d, Function: %s\n",
480 "%s, Line %d, Function: %s\n",
481 __FILE__, __LINE__, __func__); 503 __FILE__, __LINE__, __func__);
482 504
483 /* Use read id method to get device ID and other 505 /*
484 * params. For some NAND chips, controller can't 506 * Use read id method to get device ID and other params.
485 * report the correct device ID by reading from 507 * For some NAND chips, controller can't report the correct
486 * DEVICE_ID register 508 * device ID by reading from DEVICE_ID register
487 * */ 509 */
488 addr = (uint32_t)MODE_11 | BANK(denali->flash_bank); 510 addr = MODE_11 | BANK(denali->flash_bank);
489 index_addr(denali, (uint32_t)addr | 0, 0x90); 511 index_addr(denali, addr | 0, 0x90);
490 index_addr(denali, (uint32_t)addr | 1, 0); 512 index_addr(denali, addr | 1, 0);
491 for (i = 0; i < 8; i++) 513 for (i = 0; i < 8; i++)
492 index_addr_read_data(denali, addr | 2, &id_bytes[i]); 514 index_addr_read_data(denali, addr | 2, &id_bytes[i]);
493 maf_id = id_bytes[0]; 515 maf_id = id_bytes[0];
@@ -506,7 +528,7 @@ static uint16_t denali_nand_timing_set(struct denali_nand_info *denali)
506 } 528 }
507 529
508 dev_info(denali->dev, 530 dev_info(denali->dev,
509 "Dump timing register values:" 531 "Dump timing register values:\n"
510 "acc_clks: %d, re_2_we: %d, re_2_re: %d\n" 532 "acc_clks: %d, re_2_we: %d, re_2_re: %d\n"
511 "we_2_re: %d, addr_2_data: %d, rdwr_en_lo_cnt: %d\n" 533 "we_2_re: %d, addr_2_data: %d, rdwr_en_lo_cnt: %d\n"
512 "rdwr_en_hi_cnt: %d, cs_setup_cnt: %d\n", 534 "rdwr_en_hi_cnt: %d, cs_setup_cnt: %d\n",
@@ -523,7 +545,8 @@ static uint16_t denali_nand_timing_set(struct denali_nand_info *denali)
523 545
524 detect_partition_feature(denali); 546 detect_partition_feature(denali);
525 547
526 /* If the user specified to override the default timings 548 /*
549 * If the user specified to override the default timings
527 * with a specific ONFI mode, we apply those changes here. 550 * with a specific ONFI mode, we apply those changes here.
528 */ 551 */
529 if (onfi_timing_mode != NAND_DEFAULT_TIMINGS) 552 if (onfi_timing_mode != NAND_DEFAULT_TIMINGS)
@@ -536,7 +559,7 @@ static void denali_set_intr_modes(struct denali_nand_info *denali,
536 uint16_t INT_ENABLE) 559 uint16_t INT_ENABLE)
537{ 560{
538 dev_dbg(denali->dev, "%s, Line %d, Function: %s\n", 561 dev_dbg(denali->dev, "%s, Line %d, Function: %s\n",
539 __FILE__, __LINE__, __func__); 562 __FILE__, __LINE__, __func__);
540 563
541 if (INT_ENABLE) 564 if (INT_ENABLE)
542 iowrite32(1, denali->flash_reg + GLOBAL_INT_ENABLE); 565 iowrite32(1, denali->flash_reg + GLOBAL_INT_ENABLE);
@@ -544,17 +567,18 @@ static void denali_set_intr_modes(struct denali_nand_info *denali,
544 iowrite32(0, denali->flash_reg + GLOBAL_INT_ENABLE); 567 iowrite32(0, denali->flash_reg + GLOBAL_INT_ENABLE);
545} 568}
546 569
547/* validation function to verify that the controlling software is making 570/*
571 * validation function to verify that the controlling software is making
548 * a valid request 572 * a valid request
549 */ 573 */
550static inline bool is_flash_bank_valid(int flash_bank) 574static inline bool is_flash_bank_valid(int flash_bank)
551{ 575{
552 return (flash_bank >= 0 && flash_bank < 4); 576 return flash_bank >= 0 && flash_bank < 4;
553} 577}
554 578
555static void denali_irq_init(struct denali_nand_info *denali) 579static void denali_irq_init(struct denali_nand_info *denali)
556{ 580{
557 uint32_t int_mask = 0; 581 uint32_t int_mask;
558 int i; 582 int i;
559 583
560 /* Disable global interrupts */ 584 /* Disable global interrupts */
@@ -584,7 +608,8 @@ static void denali_irq_enable(struct denali_nand_info *denali,
584 iowrite32(int_mask, denali->flash_reg + INTR_EN(i)); 608 iowrite32(int_mask, denali->flash_reg + INTR_EN(i));
585} 609}
586 610
587/* This function only returns when an interrupt that this driver cares about 611/*
612 * This function only returns when an interrupt that this driver cares about
588 * occurs. This is to reduce the overhead of servicing interrupts 613 * occurs. This is to reduce the overhead of servicing interrupts
589 */ 614 */
590static inline uint32_t denali_irq_detected(struct denali_nand_info *denali) 615static inline uint32_t denali_irq_detected(struct denali_nand_info *denali)
@@ -596,7 +621,7 @@ static inline uint32_t denali_irq_detected(struct denali_nand_info *denali)
596static inline void clear_interrupt(struct denali_nand_info *denali, 621static inline void clear_interrupt(struct denali_nand_info *denali,
597 uint32_t irq_mask) 622 uint32_t irq_mask)
598{ 623{
599 uint32_t intr_status_reg = 0; 624 uint32_t intr_status_reg;
600 625
601 intr_status_reg = INTR_STATUS(denali->flash_bank); 626 intr_status_reg = INTR_STATUS(denali->flash_bank);
602 627
@@ -605,7 +630,8 @@ static inline void clear_interrupt(struct denali_nand_info *denali,
605 630
606static void clear_interrupts(struct denali_nand_info *denali) 631static void clear_interrupts(struct denali_nand_info *denali)
607{ 632{
608 uint32_t status = 0x0; 633 uint32_t status;
634
609 spin_lock_irq(&denali->irq_lock); 635 spin_lock_irq(&denali->irq_lock);
610 636
611 status = read_interrupt_status(denali); 637 status = read_interrupt_status(denali);
@@ -617,38 +643,40 @@ static void clear_interrupts(struct denali_nand_info *denali)
617 643
618static uint32_t read_interrupt_status(struct denali_nand_info *denali) 644static uint32_t read_interrupt_status(struct denali_nand_info *denali)
619{ 645{
620 uint32_t intr_status_reg = 0; 646 uint32_t intr_status_reg;
621 647
622 intr_status_reg = INTR_STATUS(denali->flash_bank); 648 intr_status_reg = INTR_STATUS(denali->flash_bank);
623 649
624 return ioread32(denali->flash_reg + intr_status_reg); 650 return ioread32(denali->flash_reg + intr_status_reg);
625} 651}
626 652
627/* This is the interrupt service routine. It handles all interrupts 653/*
628 * sent to this device. Note that on CE4100, this is a shared 654 * This is the interrupt service routine. It handles all interrupts
629 * interrupt. 655 * sent to this device. Note that on CE4100, this is a shared interrupt.
630 */ 656 */
631static irqreturn_t denali_isr(int irq, void *dev_id) 657static irqreturn_t denali_isr(int irq, void *dev_id)
632{ 658{
633 struct denali_nand_info *denali = dev_id; 659 struct denali_nand_info *denali = dev_id;
634 uint32_t irq_status = 0x0; 660 uint32_t irq_status;
635 irqreturn_t result = IRQ_NONE; 661 irqreturn_t result = IRQ_NONE;
636 662
637 spin_lock(&denali->irq_lock); 663 spin_lock(&denali->irq_lock);
638 664
639 /* check to see if a valid NAND chip has 665 /* check to see if a valid NAND chip has been selected. */
640 * been selected.
641 */
642 if (is_flash_bank_valid(denali->flash_bank)) { 666 if (is_flash_bank_valid(denali->flash_bank)) {
643 /* check to see if controller generated 667 /*
644 * the interrupt, since this is a shared interrupt */ 668 * check to see if controller generated the interrupt,
669 * since this is a shared interrupt
670 */
645 irq_status = denali_irq_detected(denali); 671 irq_status = denali_irq_detected(denali);
646 if (irq_status != 0) { 672 if (irq_status != 0) {
647 /* handle interrupt */ 673 /* handle interrupt */
648 /* first acknowledge it */ 674 /* first acknowledge it */
649 clear_interrupt(denali, irq_status); 675 clear_interrupt(denali, irq_status);
650 /* store the status in the device context for someone 676 /*
651 to read */ 677 * store the status in the device context for someone
678 * to read
679 */
652 denali->irq_status |= irq_status; 680 denali->irq_status |= irq_status;
653 /* notify anyone who cares that it happened */ 681 /* notify anyone who cares that it happened */
654 complete(&denali->complete); 682 complete(&denali->complete);
@@ -663,9 +691,8 @@ static irqreturn_t denali_isr(int irq, void *dev_id)
663 691
664static uint32_t wait_for_irq(struct denali_nand_info *denali, uint32_t irq_mask) 692static uint32_t wait_for_irq(struct denali_nand_info *denali, uint32_t irq_mask)
665{ 693{
666 unsigned long comp_res = 0; 694 unsigned long comp_res;
667 uint32_t intr_status = 0; 695 uint32_t intr_status;
668 bool retry = false;
669 unsigned long timeout = msecs_to_jiffies(1000); 696 unsigned long timeout = msecs_to_jiffies(1000);
670 697
671 do { 698 do {
@@ -679,12 +706,13 @@ static uint32_t wait_for_irq(struct denali_nand_info *denali, uint32_t irq_mask)
679 spin_unlock_irq(&denali->irq_lock); 706 spin_unlock_irq(&denali->irq_lock);
680 /* our interrupt was detected */ 707 /* our interrupt was detected */
681 break; 708 break;
682 } else {
683 /* these are not the interrupts you are looking for -
684 * need to wait again */
685 spin_unlock_irq(&denali->irq_lock);
686 retry = true;
687 } 709 }
710
711 /*
712 * these are not the interrupts you are looking for -
713 * need to wait again
714 */
715 spin_unlock_irq(&denali->irq_lock);
688 } while (comp_res != 0); 716 } while (comp_res != 0);
689 717
690 if (comp_res == 0) { 718 if (comp_res == 0) {
@@ -697,12 +725,14 @@ static uint32_t wait_for_irq(struct denali_nand_info *denali, uint32_t irq_mask)
697 return intr_status; 725 return intr_status;
698} 726}
699 727
700/* This helper function setups the registers for ECC and whether or not 728/*
701 * the spare area will be transferred. */ 729 * This helper function setups the registers for ECC and whether or not
730 * the spare area will be transferred.
731 */
702static void setup_ecc_for_xfer(struct denali_nand_info *denali, bool ecc_en, 732static void setup_ecc_for_xfer(struct denali_nand_info *denali, bool ecc_en,
703 bool transfer_spare) 733 bool transfer_spare)
704{ 734{
705 int ecc_en_flag = 0, transfer_spare_flag = 0; 735 int ecc_en_flag, transfer_spare_flag;
706 736
707 /* set ECC, transfer spare bits if needed */ 737 /* set ECC, transfer spare bits if needed */
708 ecc_en_flag = ecc_en ? ECC_ENABLE__FLAG : 0; 738 ecc_en_flag = ecc_en ? ECC_ENABLE__FLAG : 0;
@@ -710,22 +740,20 @@ static void setup_ecc_for_xfer(struct denali_nand_info *denali, bool ecc_en,
710 740
711 /* Enable spare area/ECC per user's request. */ 741 /* Enable spare area/ECC per user's request. */
712 iowrite32(ecc_en_flag, denali->flash_reg + ECC_ENABLE); 742 iowrite32(ecc_en_flag, denali->flash_reg + ECC_ENABLE);
713 iowrite32(transfer_spare_flag, 743 iowrite32(transfer_spare_flag, denali->flash_reg + TRANSFER_SPARE_REG);
714 denali->flash_reg + TRANSFER_SPARE_REG);
715} 744}
716 745
717/* sends a pipeline command operation to the controller. See the Denali NAND 746/*
747 * sends a pipeline command operation to the controller. See the Denali NAND
718 * controller's user guide for more information (section 4.2.3.6). 748 * controller's user guide for more information (section 4.2.3.6).
719 */ 749 */
720static int denali_send_pipeline_cmd(struct denali_nand_info *denali, 750static int denali_send_pipeline_cmd(struct denali_nand_info *denali,
721 bool ecc_en, 751 bool ecc_en, bool transfer_spare,
722 bool transfer_spare, 752 int access_type, int op)
723 int access_type,
724 int op)
725{ 753{
726 int status = PASS; 754 int status = PASS;
727 uint32_t addr = 0x0, cmd = 0x0, page_count = 1, irq_status = 0, 755 uint32_t page_count = 1;
728 irq_mask = 0; 756 uint32_t addr, cmd, irq_status, irq_mask;
729 757
730 if (op == DENALI_READ) 758 if (op == DENALI_READ)
731 irq_mask = INTR_STATUS__LOAD_COMP; 759 irq_mask = INTR_STATUS__LOAD_COMP;
@@ -736,7 +764,6 @@ static int denali_send_pipeline_cmd(struct denali_nand_info *denali,
736 764
737 setup_ecc_for_xfer(denali, ecc_en, transfer_spare); 765 setup_ecc_for_xfer(denali, ecc_en, transfer_spare);
738 766
739 /* clear interrupts */
740 clear_interrupts(denali); 767 clear_interrupts(denali);
741 768
742 addr = BANK(denali->flash_bank) | denali->page; 769 addr = BANK(denali->flash_bank) | denali->page;
@@ -747,37 +774,38 @@ static int denali_send_pipeline_cmd(struct denali_nand_info *denali,
747 } else if (op == DENALI_WRITE && access_type == SPARE_ACCESS) { 774 } else if (op == DENALI_WRITE && access_type == SPARE_ACCESS) {
748 /* read spare area */ 775 /* read spare area */
749 cmd = MODE_10 | addr; 776 cmd = MODE_10 | addr;
750 index_addr(denali, (uint32_t)cmd, access_type); 777 index_addr(denali, cmd, access_type);
751 778
752 cmd = MODE_01 | addr; 779 cmd = MODE_01 | addr;
753 iowrite32(cmd, denali->flash_mem); 780 iowrite32(cmd, denali->flash_mem);
754 } else if (op == DENALI_READ) { 781 } else if (op == DENALI_READ) {
755 /* setup page read request for access type */ 782 /* setup page read request for access type */
756 cmd = MODE_10 | addr; 783 cmd = MODE_10 | addr;
757 index_addr(denali, (uint32_t)cmd, access_type); 784 index_addr(denali, cmd, access_type);
758 785
759 /* page 33 of the NAND controller spec indicates we should not 786 /*
760 use the pipeline commands in Spare area only mode. So we 787 * page 33 of the NAND controller spec indicates we should not
761 don't. 788 * use the pipeline commands in Spare area only mode.
789 * So we don't.
762 */ 790 */
763 if (access_type == SPARE_ACCESS) { 791 if (access_type == SPARE_ACCESS) {
764 cmd = MODE_01 | addr; 792 cmd = MODE_01 | addr;
765 iowrite32(cmd, denali->flash_mem); 793 iowrite32(cmd, denali->flash_mem);
766 } else { 794 } else {
767 index_addr(denali, (uint32_t)cmd, 795 index_addr(denali, cmd,
768 0x2000 | op | page_count); 796 PIPELINE_ACCESS | op | page_count);
769 797
770 /* wait for command to be accepted 798 /*
799 * wait for command to be accepted
771 * can always use status0 bit as the 800 * can always use status0 bit as the
772 * mask is identical for each 801 * mask is identical for each bank.
773 * bank. */ 802 */
774 irq_status = wait_for_irq(denali, irq_mask); 803 irq_status = wait_for_irq(denali, irq_mask);
775 804
776 if (irq_status == 0) { 805 if (irq_status == 0) {
777 dev_err(denali->dev, 806 dev_err(denali->dev,
778 "cmd, page, addr on timeout " 807 "cmd, page, addr on timeout (0x%x, 0x%x, 0x%x)\n",
779 "(0x%x, 0x%x, 0x%x)\n", 808 cmd, denali->page, addr);
780 cmd, denali->page, addr);
781 status = FAIL; 809 status = FAIL;
782 } else { 810 } else {
783 cmd = MODE_01 | addr; 811 cmd = MODE_01 | addr;
@@ -790,51 +818,51 @@ static int denali_send_pipeline_cmd(struct denali_nand_info *denali,
790 818
791/* helper function that simply writes a buffer to the flash */ 819/* helper function that simply writes a buffer to the flash */
792static int write_data_to_flash_mem(struct denali_nand_info *denali, 820static int write_data_to_flash_mem(struct denali_nand_info *denali,
793 const uint8_t *buf, 821 const uint8_t *buf, int len)
794 int len)
795{ 822{
796 uint32_t i = 0, *buf32; 823 uint32_t *buf32;
824 int i;
797 825
798 /* verify that the len is a multiple of 4. see comment in 826 /*
799 * read_data_from_flash_mem() */ 827 * verify that the len is a multiple of 4.
828 * see comment in read_data_from_flash_mem()
829 */
800 BUG_ON((len % 4) != 0); 830 BUG_ON((len % 4) != 0);
801 831
802 /* write the data to the flash memory */ 832 /* write the data to the flash memory */
803 buf32 = (uint32_t *)buf; 833 buf32 = (uint32_t *)buf;
804 for (i = 0; i < len / 4; i++) 834 for (i = 0; i < len / 4; i++)
805 iowrite32(*buf32++, denali->flash_mem + 0x10); 835 iowrite32(*buf32++, denali->flash_mem + 0x10);
806 return i*4; /* intent is to return the number of bytes read */ 836 return i * 4; /* intent is to return the number of bytes read */
807} 837}
808 838
809/* helper function that simply reads a buffer from the flash */ 839/* helper function that simply reads a buffer from the flash */
810static int read_data_from_flash_mem(struct denali_nand_info *denali, 840static int read_data_from_flash_mem(struct denali_nand_info *denali,
811 uint8_t *buf, 841 uint8_t *buf, int len)
812 int len)
813{ 842{
814 uint32_t i = 0, *buf32; 843 uint32_t *buf32;
815 844 int i;
816 /* we assume that len will be a multiple of 4, if not
817 * it would be nice to know about it ASAP rather than
818 * have random failures...
819 * This assumption is based on the fact that this
820 * function is designed to be used to read flash pages,
821 * which are typically multiples of 4...
822 */
823 845
846 /*
847 * we assume that len will be a multiple of 4, if not it would be nice
848 * to know about it ASAP rather than have random failures...
849 * This assumption is based on the fact that this function is designed
850 * to be used to read flash pages, which are typically multiples of 4.
851 */
824 BUG_ON((len % 4) != 0); 852 BUG_ON((len % 4) != 0);
825 853
826 /* transfer the data from the flash */ 854 /* transfer the data from the flash */
827 buf32 = (uint32_t *)buf; 855 buf32 = (uint32_t *)buf;
828 for (i = 0; i < len / 4; i++) 856 for (i = 0; i < len / 4; i++)
829 *buf32++ = ioread32(denali->flash_mem + 0x10); 857 *buf32++ = ioread32(denali->flash_mem + 0x10);
830 return i*4; /* intent is to return the number of bytes read */ 858 return i * 4; /* intent is to return the number of bytes read */
831} 859}
832 860
833/* writes OOB data to the device */ 861/* writes OOB data to the device */
834static int write_oob_data(struct mtd_info *mtd, uint8_t *buf, int page) 862static int write_oob_data(struct mtd_info *mtd, uint8_t *buf, int page)
835{ 863{
836 struct denali_nand_info *denali = mtd_to_denali(mtd); 864 struct denali_nand_info *denali = mtd_to_denali(mtd);
837 uint32_t irq_status = 0; 865 uint32_t irq_status;
838 uint32_t irq_mask = INTR_STATUS__PROGRAM_COMP | 866 uint32_t irq_mask = INTR_STATUS__PROGRAM_COMP |
839 INTR_STATUS__PROGRAM_FAIL; 867 INTR_STATUS__PROGRAM_FAIL;
840 int status = 0; 868 int status = 0;
@@ -863,8 +891,8 @@ static int write_oob_data(struct mtd_info *mtd, uint8_t *buf, int page)
863static void read_oob_data(struct mtd_info *mtd, uint8_t *buf, int page) 891static void read_oob_data(struct mtd_info *mtd, uint8_t *buf, int page)
864{ 892{
865 struct denali_nand_info *denali = mtd_to_denali(mtd); 893 struct denali_nand_info *denali = mtd_to_denali(mtd);
866 uint32_t irq_mask = INTR_STATUS__LOAD_COMP, 894 uint32_t irq_mask = INTR_STATUS__LOAD_COMP;
867 irq_status = 0, addr = 0x0, cmd = 0x0; 895 uint32_t irq_status, addr, cmd;
868 896
869 denali->page = page; 897 denali->page = page;
870 898
@@ -872,16 +900,19 @@ static void read_oob_data(struct mtd_info *mtd, uint8_t *buf, int page)
872 DENALI_READ) == PASS) { 900 DENALI_READ) == PASS) {
873 read_data_from_flash_mem(denali, buf, mtd->oobsize); 901 read_data_from_flash_mem(denali, buf, mtd->oobsize);
874 902
875 /* wait for command to be accepted 903 /*
876 * can always use status0 bit as the mask is identical for each 904 * wait for command to be accepted
877 * bank. */ 905 * can always use status0 bit as the
906 * mask is identical for each bank.
907 */
878 irq_status = wait_for_irq(denali, irq_mask); 908 irq_status = wait_for_irq(denali, irq_mask);
879 909
880 if (irq_status == 0) 910 if (irq_status == 0)
881 dev_err(denali->dev, "page on OOB timeout %d\n", 911 dev_err(denali->dev, "page on OOB timeout %d\n",
882 denali->page); 912 denali->page);
883 913
884 /* We set the device back to MAIN_ACCESS here as I observed 914 /*
915 * We set the device back to MAIN_ACCESS here as I observed
885 * instability with the controller if you do a block erase 916 * instability with the controller if you do a block erase
886 * and the last transaction was a SPARE_ACCESS. Block erase 917 * and the last transaction was a SPARE_ACCESS. Block erase
887 * is reliable (according to the MTD test infrastructure) 918 * is reliable (according to the MTD test infrastructure)
@@ -889,16 +920,18 @@ static void read_oob_data(struct mtd_info *mtd, uint8_t *buf, int page)
889 */ 920 */
890 addr = BANK(denali->flash_bank) | denali->page; 921 addr = BANK(denali->flash_bank) | denali->page;
891 cmd = MODE_10 | addr; 922 cmd = MODE_10 | addr;
892 index_addr(denali, (uint32_t)cmd, MAIN_ACCESS); 923 index_addr(denali, cmd, MAIN_ACCESS);
893 } 924 }
894} 925}
895 926
896/* this function examines buffers to see if they contain data that 927/*
928 * this function examines buffers to see if they contain data that
897 * indicate that the buffer is part of an erased region of flash. 929 * indicate that the buffer is part of an erased region of flash.
898 */ 930 */
899static bool is_erased(uint8_t *buf, int len) 931static bool is_erased(uint8_t *buf, int len)
900{ 932{
901 int i = 0; 933 int i;
934
902 for (i = 0; i < len; i++) 935 for (i = 0; i < len; i++)
903 if (buf[i] != 0xFF) 936 if (buf[i] != 0xFF)
904 return false; 937 return false;
@@ -921,9 +954,8 @@ static bool handle_ecc(struct denali_nand_info *denali, uint8_t *buf,
921 954
922 if (irq_status & INTR_STATUS__ECC_ERR) { 955 if (irq_status & INTR_STATUS__ECC_ERR) {
923 /* read the ECC errors. we'll ignore them for now */ 956 /* read the ECC errors. we'll ignore them for now */
924 uint32_t err_address = 0, err_correction_info = 0; 957 uint32_t err_address, err_correction_info, err_byte,
925 uint32_t err_byte = 0, err_sector = 0, err_device = 0; 958 err_sector, err_device, err_correction_value;
926 uint32_t err_correction_value = 0;
927 denali_set_intr_modes(denali, false); 959 denali_set_intr_modes(denali, false);
928 960
929 do { 961 do {
@@ -939,15 +971,17 @@ static bool handle_ecc(struct denali_nand_info *denali, uint8_t *buf,
939 err_device = ECC_ERR_DEVICE(err_correction_info); 971 err_device = ECC_ERR_DEVICE(err_correction_info);
940 972
941 if (ECC_ERROR_CORRECTABLE(err_correction_info)) { 973 if (ECC_ERROR_CORRECTABLE(err_correction_info)) {
942 /* If err_byte is larger than ECC_SECTOR_SIZE, 974 /*
975 * If err_byte is larger than ECC_SECTOR_SIZE,
943 * means error happened in OOB, so we ignore 976 * means error happened in OOB, so we ignore
944 * it. It's no need for us to correct it 977 * it. It's no need for us to correct it
945 * err_device is represented the NAND error 978 * err_device is represented the NAND error
946 * bits are happened in if there are more 979 * bits are happened in if there are more
947 * than one NAND connected. 980 * than one NAND connected.
948 * */ 981 */
949 if (err_byte < ECC_SECTOR_SIZE) { 982 if (err_byte < ECC_SECTOR_SIZE) {
950 int offset; 983 int offset;
984
951 offset = (err_sector * 985 offset = (err_sector *
952 ECC_SECTOR_SIZE + 986 ECC_SECTOR_SIZE +
953 err_byte) * 987 err_byte) *
@@ -959,17 +993,19 @@ static bool handle_ecc(struct denali_nand_info *denali, uint8_t *buf,
959 bitflips++; 993 bitflips++;
960 } 994 }
961 } else { 995 } else {
962 /* if the error is not correctable, need to 996 /*
997 * if the error is not correctable, need to
963 * look at the page to see if it is an erased 998 * look at the page to see if it is an erased
964 * page. if so, then it's not a real ECC error 999 * page. if so, then it's not a real ECC error
965 * */ 1000 */
966 check_erased_page = true; 1001 check_erased_page = true;
967 } 1002 }
968 } while (!ECC_LAST_ERR(err_correction_info)); 1003 } while (!ECC_LAST_ERR(err_correction_info));
969 /* Once handle all ecc errors, controller will triger 1004 /*
1005 * Once handle all ecc errors, controller will triger
970 * a ECC_TRANSACTION_DONE interrupt, so here just wait 1006 * a ECC_TRANSACTION_DONE interrupt, so here just wait
971 * for a while for this interrupt 1007 * for a while for this interrupt
972 * */ 1008 */
973 while (!(read_interrupt_status(denali) & 1009 while (!(read_interrupt_status(denali) &
974 INTR_STATUS__ECC_TRANSACTION_DONE)) 1010 INTR_STATUS__ECC_TRANSACTION_DONE))
975 cpu_relax(); 1011 cpu_relax();
@@ -983,21 +1019,16 @@ static bool handle_ecc(struct denali_nand_info *denali, uint8_t *buf,
983/* programs the controller to either enable/disable DMA transfers */ 1019/* programs the controller to either enable/disable DMA transfers */
984static void denali_enable_dma(struct denali_nand_info *denali, bool en) 1020static void denali_enable_dma(struct denali_nand_info *denali, bool en)
985{ 1021{
986 uint32_t reg_val = 0x0; 1022 iowrite32(en ? DMA_ENABLE__FLAG : 0, denali->flash_reg + DMA_ENABLE);
987
988 if (en)
989 reg_val = DMA_ENABLE__FLAG;
990
991 iowrite32(reg_val, denali->flash_reg + DMA_ENABLE);
992 ioread32(denali->flash_reg + DMA_ENABLE); 1023 ioread32(denali->flash_reg + DMA_ENABLE);
993} 1024}
994 1025
995/* setups the HW to perform the data DMA */ 1026/* setups the HW to perform the data DMA */
996static void denali_setup_dma(struct denali_nand_info *denali, int op) 1027static void denali_setup_dma(struct denali_nand_info *denali, int op)
997{ 1028{
998 uint32_t mode = 0x0; 1029 uint32_t mode;
999 const int page_count = 1; 1030 const int page_count = 1;
1000 dma_addr_t addr = denali->buf.dma_buf; 1031 uint32_t addr = denali->buf.dma_buf;
1001 1032
1002 mode = MODE_10 | BANK(denali->flash_bank); 1033 mode = MODE_10 | BANK(denali->flash_bank);
1003 1034
@@ -1007,31 +1038,31 @@ static void denali_setup_dma(struct denali_nand_info *denali, int op)
1007 index_addr(denali, mode | denali->page, 0x2000 | op | page_count); 1038 index_addr(denali, mode | denali->page, 0x2000 | op | page_count);
1008 1039
1009 /* 2. set memory high address bits 23:8 */ 1040 /* 2. set memory high address bits 23:8 */
1010 index_addr(denali, mode | ((uint16_t)(addr >> 16) << 8), 0x2200); 1041 index_addr(denali, mode | ((addr >> 16) << 8), 0x2200);
1011 1042
1012 /* 3. set memory low address bits 23:8 */ 1043 /* 3. set memory low address bits 23:8 */
1013 index_addr(denali, mode | ((uint16_t)addr << 8), 0x2300); 1044 index_addr(denali, mode | ((addr & 0xff) << 8), 0x2300);
1014 1045
1015 /* 4. interrupt when complete, burst len = 64 bytes*/ 1046 /* 4. interrupt when complete, burst len = 64 bytes */
1016 index_addr(denali, mode | 0x14000, 0x2400); 1047 index_addr(denali, mode | 0x14000, 0x2400);
1017} 1048}
1018 1049
1019/* writes a page. user specifies type, and this function handles the 1050/*
1020 * configuration details. */ 1051 * writes a page. user specifies type, and this function handles the
1052 * configuration details.
1053 */
1021static int write_page(struct mtd_info *mtd, struct nand_chip *chip, 1054static int write_page(struct mtd_info *mtd, struct nand_chip *chip,
1022 const uint8_t *buf, bool raw_xfer) 1055 const uint8_t *buf, bool raw_xfer)
1023{ 1056{
1024 struct denali_nand_info *denali = mtd_to_denali(mtd); 1057 struct denali_nand_info *denali = mtd_to_denali(mtd);
1025
1026 dma_addr_t addr = denali->buf.dma_buf; 1058 dma_addr_t addr = denali->buf.dma_buf;
1027 size_t size = denali->mtd.writesize + denali->mtd.oobsize; 1059 size_t size = denali->mtd.writesize + denali->mtd.oobsize;
1028 1060 uint32_t irq_status;
1029 uint32_t irq_status = 0;
1030 uint32_t irq_mask = INTR_STATUS__DMA_CMD_COMP | 1061 uint32_t irq_mask = INTR_STATUS__DMA_CMD_COMP |
1031 INTR_STATUS__PROGRAM_FAIL; 1062 INTR_STATUS__PROGRAM_FAIL;
1032 1063
1033 /* if it is a raw xfer, we want to disable ecc, and send 1064 /*
1034 * the spare area. 1065 * if it is a raw xfer, we want to disable ecc and send the spare area.
1035 * !raw_xfer - enable ecc 1066 * !raw_xfer - enable ecc
1036 * raw_xfer - transfer spare 1067 * raw_xfer - transfer spare
1037 */ 1068 */
@@ -1058,12 +1089,9 @@ static int write_page(struct mtd_info *mtd, struct nand_chip *chip,
1058 irq_status = wait_for_irq(denali, irq_mask); 1089 irq_status = wait_for_irq(denali, irq_mask);
1059 1090
1060 if (irq_status == 0) { 1091 if (irq_status == 0) {
1061 dev_err(denali->dev, 1092 dev_err(denali->dev, "timeout on write_page (type = %d)\n",
1062 "timeout on write_page (type = %d)\n", 1093 raw_xfer);
1063 raw_xfer); 1094 denali->status = NAND_STATUS_FAIL;
1064 denali->status =
1065 (irq_status & INTR_STATUS__PROGRAM_FAIL) ?
1066 NAND_STATUS_FAIL : PASS;
1067 } 1095 }
1068 1096
1069 denali_enable_dma(denali, false); 1097 denali_enable_dma(denali, false);
@@ -1074,27 +1102,33 @@ static int write_page(struct mtd_info *mtd, struct nand_chip *chip,
1074 1102
1075/* NAND core entry points */ 1103/* NAND core entry points */
1076 1104
1077/* this is the callback that the NAND core calls to write a page. Since 1105/*
1106 * this is the callback that the NAND core calls to write a page. Since
1078 * writing a page with ECC or without is similar, all the work is done 1107 * writing a page with ECC or without is similar, all the work is done
1079 * by write_page above. 1108 * by write_page above.
1080 * */ 1109 */
1081static int denali_write_page(struct mtd_info *mtd, struct nand_chip *chip, 1110static int denali_write_page(struct mtd_info *mtd, struct nand_chip *chip,
1082 const uint8_t *buf, int oob_required) 1111 const uint8_t *buf, int oob_required)
1083{ 1112{
1084 /* for regular page writes, we let HW handle all the ECC 1113 /*
1085 * data written to the device. */ 1114 * for regular page writes, we let HW handle all the ECC
1115 * data written to the device.
1116 */
1086 return write_page(mtd, chip, buf, false); 1117 return write_page(mtd, chip, buf, false);
1087} 1118}
1088 1119
1089/* This is the callback that the NAND core calls to write a page without ECC. 1120/*
1121 * This is the callback that the NAND core calls to write a page without ECC.
1090 * raw access is similar to ECC page writes, so all the work is done in the 1122 * raw access is similar to ECC page writes, so all the work is done in the
1091 * write_page() function above. 1123 * write_page() function above.
1092 */ 1124 */
1093static int denali_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip, 1125static int denali_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
1094 const uint8_t *buf, int oob_required) 1126 const uint8_t *buf, int oob_required)
1095{ 1127{
1096 /* for raw page writes, we want to disable ECC and simply write 1128 /*
1097 whatever data is in the buffer. */ 1129 * for raw page writes, we want to disable ECC and simply write
1130 * whatever data is in the buffer.
1131 */
1098 return write_page(mtd, chip, buf, true); 1132 return write_page(mtd, chip, buf, true);
1099} 1133}
1100 1134
@@ -1121,15 +1155,15 @@ static int denali_read_page(struct mtd_info *mtd, struct nand_chip *chip,
1121 dma_addr_t addr = denali->buf.dma_buf; 1155 dma_addr_t addr = denali->buf.dma_buf;
1122 size_t size = denali->mtd.writesize + denali->mtd.oobsize; 1156 size_t size = denali->mtd.writesize + denali->mtd.oobsize;
1123 1157
1124 uint32_t irq_status = 0; 1158 uint32_t irq_status;
1125 uint32_t irq_mask = INTR_STATUS__ECC_TRANSACTION_DONE | 1159 uint32_t irq_mask = INTR_STATUS__ECC_TRANSACTION_DONE |
1126 INTR_STATUS__ECC_ERR; 1160 INTR_STATUS__ECC_ERR;
1127 bool check_erased_page = false; 1161 bool check_erased_page = false;
1128 1162
1129 if (page != denali->page) { 1163 if (page != denali->page) {
1130 dev_err(denali->dev, "IN %s: page %d is not" 1164 dev_err(denali->dev,
1131 " equal to denali->page %d, investigate!!", 1165 "IN %s: page %d is not equal to denali->page %d",
1132 __func__, page, denali->page); 1166 __func__, page, denali->page);
1133 BUG(); 1167 BUG();
1134 } 1168 }
1135 1169
@@ -1169,17 +1203,14 @@ static int denali_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
1169 uint8_t *buf, int oob_required, int page) 1203 uint8_t *buf, int oob_required, int page)
1170{ 1204{
1171 struct denali_nand_info *denali = mtd_to_denali(mtd); 1205 struct denali_nand_info *denali = mtd_to_denali(mtd);
1172
1173 dma_addr_t addr = denali->buf.dma_buf; 1206 dma_addr_t addr = denali->buf.dma_buf;
1174 size_t size = denali->mtd.writesize + denali->mtd.oobsize; 1207 size_t size = denali->mtd.writesize + denali->mtd.oobsize;
1175
1176 uint32_t irq_status = 0;
1177 uint32_t irq_mask = INTR_STATUS__DMA_CMD_COMP; 1208 uint32_t irq_mask = INTR_STATUS__DMA_CMD_COMP;
1178 1209
1179 if (page != denali->page) { 1210 if (page != denali->page) {
1180 dev_err(denali->dev, "IN %s: page %d is not" 1211 dev_err(denali->dev,
1181 " equal to denali->page %d, investigate!!", 1212 "IN %s: page %d is not equal to denali->page %d",
1182 __func__, page, denali->page); 1213 __func__, page, denali->page);
1183 BUG(); 1214 BUG();
1184 } 1215 }
1185 1216
@@ -1192,7 +1223,7 @@ static int denali_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
1192 denali_setup_dma(denali, DENALI_READ); 1223 denali_setup_dma(denali, DENALI_READ);
1193 1224
1194 /* wait for operation to complete */ 1225 /* wait for operation to complete */
1195 irq_status = wait_for_irq(denali, irq_mask); 1226 wait_for_irq(denali, irq_mask);
1196 1227
1197 dma_sync_single_for_cpu(denali->dev, addr, size, DMA_FROM_DEVICE); 1228 dma_sync_single_for_cpu(denali->dev, addr, size, DMA_FROM_DEVICE);
1198 1229
@@ -1228,6 +1259,7 @@ static int denali_waitfunc(struct mtd_info *mtd, struct nand_chip *chip)
1228{ 1259{
1229 struct denali_nand_info *denali = mtd_to_denali(mtd); 1260 struct denali_nand_info *denali = mtd_to_denali(mtd);
1230 int status = denali->status; 1261 int status = denali->status;
1262
1231 denali->status = 0; 1263 denali->status = 0;
1232 1264
1233 return status; 1265 return status;
@@ -1237,20 +1269,19 @@ static int denali_erase(struct mtd_info *mtd, int page)
1237{ 1269{
1238 struct denali_nand_info *denali = mtd_to_denali(mtd); 1270 struct denali_nand_info *denali = mtd_to_denali(mtd);
1239 1271
1240 uint32_t cmd = 0x0, irq_status = 0; 1272 uint32_t cmd, irq_status;
1241 1273
1242 /* clear interrupts */
1243 clear_interrupts(denali); 1274 clear_interrupts(denali);
1244 1275
1245 /* setup page read request for access type */ 1276 /* setup page read request for access type */
1246 cmd = MODE_10 | BANK(denali->flash_bank) | page; 1277 cmd = MODE_10 | BANK(denali->flash_bank) | page;
1247 index_addr(denali, (uint32_t)cmd, 0x1); 1278 index_addr(denali, cmd, 0x1);
1248 1279
1249 /* wait for erase to complete or failure to occur */ 1280 /* wait for erase to complete or failure to occur */
1250 irq_status = wait_for_irq(denali, INTR_STATUS__ERASE_COMP | 1281 irq_status = wait_for_irq(denali, INTR_STATUS__ERASE_COMP |
1251 INTR_STATUS__ERASE_FAIL); 1282 INTR_STATUS__ERASE_FAIL);
1252 1283
1253 return (irq_status & INTR_STATUS__ERASE_FAIL) ? NAND_STATUS_FAIL : PASS; 1284 return irq_status & INTR_STATUS__ERASE_FAIL ? NAND_STATUS_FAIL : PASS;
1254} 1285}
1255 1286
1256static void denali_cmdfunc(struct mtd_info *mtd, unsigned int cmd, int col, 1287static void denali_cmdfunc(struct mtd_info *mtd, unsigned int cmd, int col,
@@ -1269,17 +1300,16 @@ static void denali_cmdfunc(struct mtd_info *mtd, unsigned int cmd, int col,
1269 case NAND_CMD_READID: 1300 case NAND_CMD_READID:
1270 case NAND_CMD_PARAM: 1301 case NAND_CMD_PARAM:
1271 reset_buf(denali); 1302 reset_buf(denali);
1272 /*sometimes ManufactureId read from register is not right 1303 /*
1304 * sometimes ManufactureId read from register is not right
1273 * e.g. some of Micron MT29F32G08QAA MLC NAND chips 1305 * e.g. some of Micron MT29F32G08QAA MLC NAND chips
1274 * So here we send READID cmd to NAND insteand 1306 * So here we send READID cmd to NAND insteand
1275 * */ 1307 */
1276 addr = (uint32_t)MODE_11 | BANK(denali->flash_bank); 1308 addr = MODE_11 | BANK(denali->flash_bank);
1277 index_addr(denali, (uint32_t)addr | 0, 0x90); 1309 index_addr(denali, addr | 0, 0x90);
1278 index_addr(denali, (uint32_t)addr | 1, 0); 1310 index_addr(denali, addr | 1, 0);
1279 for (i = 0; i < 8; i++) { 1311 for (i = 0; i < 8; i++) {
1280 index_addr_read_data(denali, 1312 index_addr_read_data(denali, addr | 2, &id);
1281 (uint32_t)addr | 2,
1282 &id);
1283 write_byte_to_buf(denali, id); 1313 write_byte_to_buf(denali, id);
1284 } 1314 }
1285 break; 1315 break;
@@ -1304,8 +1334,8 @@ static int denali_ecc_calculate(struct mtd_info *mtd, const uint8_t *data,
1304 uint8_t *ecc_code) 1334 uint8_t *ecc_code)
1305{ 1335{
1306 struct denali_nand_info *denali = mtd_to_denali(mtd); 1336 struct denali_nand_info *denali = mtd_to_denali(mtd);
1307 dev_err(denali->dev, 1337
1308 "denali_ecc_calculate called unexpectedly\n"); 1338 dev_err(denali->dev, "denali_ecc_calculate called unexpectedly\n");
1309 BUG(); 1339 BUG();
1310 return -EIO; 1340 return -EIO;
1311} 1341}
@@ -1314,8 +1344,8 @@ static int denali_ecc_correct(struct mtd_info *mtd, uint8_t *data,
1314 uint8_t *read_ecc, uint8_t *calc_ecc) 1344 uint8_t *read_ecc, uint8_t *calc_ecc)
1315{ 1345{
1316 struct denali_nand_info *denali = mtd_to_denali(mtd); 1346 struct denali_nand_info *denali = mtd_to_denali(mtd);
1317 dev_err(denali->dev, 1347
1318 "denali_ecc_correct called unexpectedly\n"); 1348 dev_err(denali->dev, "denali_ecc_correct called unexpectedly\n");
1319 BUG(); 1349 BUG();
1320 return -EIO; 1350 return -EIO;
1321} 1351}
@@ -1323,8 +1353,8 @@ static int denali_ecc_correct(struct mtd_info *mtd, uint8_t *data,
1323static void denali_ecc_hwctl(struct mtd_info *mtd, int mode) 1353static void denali_ecc_hwctl(struct mtd_info *mtd, int mode)
1324{ 1354{
1325 struct denali_nand_info *denali = mtd_to_denali(mtd); 1355 struct denali_nand_info *denali = mtd_to_denali(mtd);
1326 dev_err(denali->dev, 1356
1327 "denali_ecc_hwctl called unexpectedly\n"); 1357 dev_err(denali->dev, "denali_ecc_hwctl called unexpectedly\n");
1328 BUG(); 1358 BUG();
1329} 1359}
1330/* end NAND core entry points */ 1360/* end NAND core entry points */
@@ -1332,11 +1362,12 @@ static void denali_ecc_hwctl(struct mtd_info *mtd, int mode)
1332/* Initialization code to bring the device up to a known good state */ 1362/* Initialization code to bring the device up to a known good state */
1333static void denali_hw_init(struct denali_nand_info *denali) 1363static void denali_hw_init(struct denali_nand_info *denali)
1334{ 1364{
1335 /* tell driver how many bit controller will skip before 1365 /*
1366 * tell driver how many bit controller will skip before
1336 * writing ECC code in OOB, this register may be already 1367 * writing ECC code in OOB, this register may be already
1337 * set by firmware. So we read this value out. 1368 * set by firmware. So we read this value out.
1338 * if this value is 0, just let it be. 1369 * if this value is 0, just let it be.
1339 * */ 1370 */
1340 denali->bbtskipbytes = ioread32(denali->flash_reg + 1371 denali->bbtskipbytes = ioread32(denali->flash_reg +
1341 SPARE_AREA_SKIP_BYTES); 1372 SPARE_AREA_SKIP_BYTES);
1342 detect_max_banks(denali); 1373 detect_max_banks(denali);
@@ -1354,10 +1385,11 @@ static void denali_hw_init(struct denali_nand_info *denali)
1354 denali_irq_init(denali); 1385 denali_irq_init(denali);
1355} 1386}
1356 1387
1357/* Althogh controller spec said SLC ECC is forceb to be 4bit, 1388/*
1389 * Althogh controller spec said SLC ECC is forceb to be 4bit,
1358 * but denali controller in MRST only support 15bit and 8bit ECC 1390 * but denali controller in MRST only support 15bit and 8bit ECC
1359 * correction 1391 * correction
1360 * */ 1392 */
1361#define ECC_8BITS 14 1393#define ECC_8BITS 14
1362static struct nand_ecclayout nand_8bit_oob = { 1394static struct nand_ecclayout nand_8bit_oob = {
1363 .eccbytes = 14, 1395 .eccbytes = 14,
@@ -1397,13 +1429,16 @@ static void denali_drv_init(struct denali_nand_info *denali)
1397 denali->idx = 0; 1429 denali->idx = 0;
1398 1430
1399 /* setup interrupt handler */ 1431 /* setup interrupt handler */
1400 /* the completion object will be used to notify 1432 /*
1401 * the callee that the interrupt is done */ 1433 * the completion object will be used to notify
1434 * the callee that the interrupt is done
1435 */
1402 init_completion(&denali->complete); 1436 init_completion(&denali->complete);
1403 1437
1404 /* the spinlock will be used to synchronize the ISR 1438 /*
1405 * with any element that might be access shared 1439 * the spinlock will be used to synchronize the ISR with any
1406 * data (interrupt status) */ 1440 * element that might be access shared data (interrupt status)
1441 */
1407 spin_lock_init(&denali->irq_lock); 1442 spin_lock_init(&denali->irq_lock);
1408 1443
1409 /* indicate that MTD has not selected a valid bank yet */ 1444 /* indicate that MTD has not selected a valid bank yet */
@@ -1418,7 +1453,8 @@ int denali_init(struct denali_nand_info *denali)
1418 int ret; 1453 int ret;
1419 1454
1420 if (denali->platform == INTEL_CE4100) { 1455 if (denali->platform == INTEL_CE4100) {
1421 /* Due to a silicon limitation, we can only support 1456 /*
1457 * Due to a silicon limitation, we can only support
1422 * ONFI timing mode 1 and below. 1458 * ONFI timing mode 1 and below.
1423 */ 1459 */
1424 if (onfi_timing_mode < -1 || onfi_timing_mode > 1) { 1460 if (onfi_timing_mode < -1 || onfi_timing_mode > 1) {
@@ -1437,8 +1473,10 @@ int denali_init(struct denali_nand_info *denali)
1437 denali_hw_init(denali); 1473 denali_hw_init(denali);
1438 denali_drv_init(denali); 1474 denali_drv_init(denali);
1439 1475
1440 /* denali_isr register is done after all the hardware 1476 /*
1441 * initilization is finished*/ 1477 * denali_isr register is done after all the hardware
1478 * initilization is finished
1479 */
1442 if (request_irq(denali->irq, denali_isr, IRQF_SHARED, 1480 if (request_irq(denali->irq, denali_isr, IRQF_SHARED,
1443 DENALI_NAND_NAME, denali)) { 1481 DENALI_NAND_NAME, denali)) {
1444 pr_err("Spectra: Unable to allocate IRQ\n"); 1482 pr_err("Spectra: Unable to allocate IRQ\n");
@@ -1457,9 +1495,11 @@ int denali_init(struct denali_nand_info *denali)
1457 denali->nand.read_byte = denali_read_byte; 1495 denali->nand.read_byte = denali_read_byte;
1458 denali->nand.waitfunc = denali_waitfunc; 1496 denali->nand.waitfunc = denali_waitfunc;
1459 1497
1460 /* scan for NAND devices attached to the controller 1498 /*
1499 * scan for NAND devices attached to the controller
1461 * this is the first stage in a two step process to register 1500 * this is the first stage in a two step process to register
1462 * with the nand subsystem */ 1501 * with the nand subsystem
1502 */
1463 if (nand_scan_ident(&denali->mtd, denali->max_banks, NULL)) { 1503 if (nand_scan_ident(&denali->mtd, denali->max_banks, NULL)) {
1464 ret = -ENXIO; 1504 ret = -ENXIO;
1465 goto failed_req_irq; 1505 goto failed_req_irq;
@@ -1491,10 +1531,10 @@ int denali_init(struct denali_nand_info *denali)
1491 goto failed_req_irq; 1531 goto failed_req_irq;
1492 } 1532 }
1493 1533
1494 /* support for multi nand 1534 /*
1495 * MTD known nothing about multi nand, 1535 * support for multi nand
1496 * so we should tell it the real pagesize 1536 * MTD known nothing about multi nand, so we should tell it
1497 * and anything necessery 1537 * the real pagesize and anything necessery
1498 */ 1538 */
1499 denali->devnum = ioread32(denali->flash_reg + DEVICES_CONNECTED); 1539 denali->devnum = ioread32(denali->flash_reg + DEVICES_CONNECTED);
1500 denali->nand.chipsize <<= (denali->devnum - 1); 1540 denali->nand.chipsize <<= (denali->devnum - 1);
@@ -1510,9 +1550,11 @@ int denali_init(struct denali_nand_info *denali)
1510 denali->mtd.size = denali->nand.numchips * denali->nand.chipsize; 1550 denali->mtd.size = denali->nand.numchips * denali->nand.chipsize;
1511 denali->bbtskipbytes *= denali->devnum; 1551 denali->bbtskipbytes *= denali->devnum;
1512 1552
1513 /* second stage of the NAND scan 1553 /*
1554 * second stage of the NAND scan
1514 * this stage requires information regarding ECC and 1555 * this stage requires information regarding ECC and
1515 * bad block management. */ 1556 * bad block management.
1557 */
1516 1558
1517 /* Bad block management */ 1559 /* Bad block management */
1518 denali->nand.bbt_td = &bbt_main_descr; 1560 denali->nand.bbt_td = &bbt_main_descr;
@@ -1523,7 +1565,8 @@ int denali_init(struct denali_nand_info *denali)
1523 denali->nand.options |= NAND_SKIP_BBTSCAN; 1565 denali->nand.options |= NAND_SKIP_BBTSCAN;
1524 denali->nand.ecc.mode = NAND_ECC_HW_SYNDROME; 1566 denali->nand.ecc.mode = NAND_ECC_HW_SYNDROME;
1525 1567
1526 /* Denali Controller only support 15bit and 8bit ECC in MRST, 1568 /*
1569 * Denali Controller only support 15bit and 8bit ECC in MRST,
1527 * so just let controller do 15bit ECC for MLC and 8bit ECC for 1570 * so just let controller do 15bit ECC for MLC and 8bit ECC for
1528 * SLC if possible. 1571 * SLC if possible.
1529 * */ 1572 * */
@@ -1539,8 +1582,7 @@ int denali_init(struct denali_nand_info *denali)
1539 } else if (denali->mtd.oobsize < (denali->bbtskipbytes + 1582 } else if (denali->mtd.oobsize < (denali->bbtskipbytes +
1540 ECC_8BITS * (denali->mtd.writesize / 1583 ECC_8BITS * (denali->mtd.writesize /
1541 ECC_SECTOR_SIZE))) { 1584 ECC_SECTOR_SIZE))) {
1542 pr_err("Your NAND chip OOB is not large enough to \ 1585 pr_err("Your NAND chip OOB is not large enough to contain 8bit ECC correction codes");
1543 contain 8bit ECC correction codes");
1544 goto failed_req_irq; 1586 goto failed_req_irq;
1545 } else { 1587 } else {
1546 denali->nand.ecc.strength = 8; 1588 denali->nand.ecc.strength = 8;
@@ -1559,18 +1601,19 @@ int denali_init(struct denali_nand_info *denali)
1559 denali->mtd.oobsize - denali->nand.ecc.layout->eccbytes - 1601 denali->mtd.oobsize - denali->nand.ecc.layout->eccbytes -
1560 denali->bbtskipbytes; 1602 denali->bbtskipbytes;
1561 1603
1562 /* Let driver know the total blocks number and 1604 /*
1563 * how many blocks contained by each nand chip. 1605 * Let driver know the total blocks number and how many blocks
1564 * blksperchip will help driver to know how many 1606 * contained by each nand chip. blksperchip will help driver to
1565 * blocks is taken by FW. 1607 * know how many blocks is taken by FW.
1566 * */ 1608 */
1567 denali->totalblks = denali->mtd.size >> 1609 denali->totalblks = denali->mtd.size >> denali->nand.phys_erase_shift;
1568 denali->nand.phys_erase_shift;
1569 denali->blksperchip = denali->totalblks / denali->nand.numchips; 1610 denali->blksperchip = denali->totalblks / denali->nand.numchips;
1570 1611
1571 /* These functions are required by the NAND core framework, otherwise, 1612 /*
1613 * These functions are required by the NAND core framework, otherwise,
1572 * the NAND core will assert. However, we don't need them, so we'll stub 1614 * the NAND core will assert. However, we don't need them, so we'll stub
1573 * them out. */ 1615 * them out.
1616 */
1574 denali->nand.ecc.calculate = denali_ecc_calculate; 1617 denali->nand.ecc.calculate = denali_ecc_calculate;
1575 denali->nand.ecc.correct = denali_ecc_correct; 1618 denali->nand.ecc.correct = denali_ecc_correct;
1576 denali->nand.ecc.hwctl = denali_ecc_hwctl; 1619 denali->nand.ecc.hwctl = denali_ecc_hwctl;
@@ -1610,7 +1653,7 @@ void denali_remove(struct denali_nand_info *denali)
1610{ 1653{
1611 denali_irq_cleanup(denali->irq, denali); 1654 denali_irq_cleanup(denali->irq, denali);
1612 dma_unmap_single(denali->dev, denali->buf.dma_buf, 1655 dma_unmap_single(denali->dev, denali->buf.dma_buf,
1613 denali->mtd.writesize + denali->mtd.oobsize, 1656 denali->mtd.writesize + denali->mtd.oobsize,
1614 DMA_BIDIRECTIONAL); 1657 DMA_BIDIRECTIONAL);
1615} 1658}
1616EXPORT_SYMBOL(denali_remove); 1659EXPORT_SYMBOL(denali_remove);
diff --git a/drivers/mtd/nand/denali.h b/drivers/mtd/nand/denali.h
index 966817462421..145bf88930e8 100644
--- a/drivers/mtd/nand/denali.h
+++ b/drivers/mtd/nand/denali.h
@@ -17,6 +17,9 @@
17 * 17 *
18 */ 18 */
19 19
20#ifndef __DENALI_H__
21#define __DENALI_H__
22
20#include <linux/mtd/nand.h> 23#include <linux/mtd/nand.h>
21 24
22#define DEVICE_RESET 0x0 25#define DEVICE_RESET 0x0
@@ -400,28 +403,6 @@
400#define ONFI_BLOOM_TIME 1 403#define ONFI_BLOOM_TIME 1
401#define MODE5_WORKAROUND 0 404#define MODE5_WORKAROUND 0
402 405
403/* lld_nand.h */
404/*
405 * NAND Flash Controller Device Driver
406 * Copyright (c) 2009, Intel Corporation and its suppliers.
407 *
408 * This program is free software; you can redistribute it and/or modify it
409 * under the terms and conditions of the GNU General Public License,
410 * version 2, as published by the Free Software Foundation.
411 *
412 * This program is distributed in the hope it will be useful, but WITHOUT
413 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
414 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
415 * more details.
416 *
417 * You should have received a copy of the GNU General Public License along with
418 * this program; if not, write to the Free Software Foundation, Inc.,
419 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
420 *
421 */
422
423#ifndef _LLD_NAND_
424#define _LLD_NAND_
425 406
426#define MODE_00 0x00000000 407#define MODE_00 0x00000000
427#define MODE_01 0x04000000 408#define MODE_01 0x04000000
@@ -499,4 +480,4 @@ struct denali_nand_info {
499extern int denali_init(struct denali_nand_info *denali); 480extern int denali_init(struct denali_nand_info *denali);
500extern void denali_remove(struct denali_nand_info *denali); 481extern void denali_remove(struct denali_nand_info *denali);
501 482
502#endif /*_LLD_NAND_*/ 483#endif /* __DENALI_H__ */
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index d8cdf06343fb..5b5c62712814 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -982,6 +982,15 @@ int nand_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
982 982
983 chip->select_chip(mtd, chipnr); 983 chip->select_chip(mtd, chipnr);
984 984
985 /*
986 * Reset the chip.
987 * If we want to check the WP through READ STATUS and check the bit 7
988 * we must reset the chip
989 * some operation can also clear the bit 7 of status register
990 * eg. erase/program a locked block
991 */
992 chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
993
985 /* Check, if it is write protected */ 994 /* Check, if it is write protected */
986 if (nand_check_wp(mtd)) { 995 if (nand_check_wp(mtd)) {
987 pr_debug("%s: device is write protected!\n", 996 pr_debug("%s: device is write protected!\n",
@@ -1032,6 +1041,15 @@ int nand_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
1032 1041
1033 chip->select_chip(mtd, chipnr); 1042 chip->select_chip(mtd, chipnr);
1034 1043
1044 /*
1045 * Reset the chip.
1046 * If we want to check the WP through READ STATUS and check the bit 7
1047 * we must reset the chip
1048 * some operation can also clear the bit 7 of status register
1049 * eg. erase/program a locked block
1050 */
1051 chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
1052
1035 /* Check, if it is write protected */ 1053 /* Check, if it is write protected */
1036 if (nand_check_wp(mtd)) { 1054 if (nand_check_wp(mtd)) {
1037 pr_debug("%s: device is write protected!\n", 1055 pr_debug("%s: device is write protected!\n",
@@ -2391,8 +2409,8 @@ static int nand_do_write_ops(struct mtd_info *mtd, loff_t to,
2391 blockmask = (1 << (chip->phys_erase_shift - chip->page_shift)) - 1; 2409 blockmask = (1 << (chip->phys_erase_shift - chip->page_shift)) - 1;
2392 2410
2393 /* Invalidate the page cache, when we write to the cached page */ 2411 /* Invalidate the page cache, when we write to the cached page */
2394 if (to <= (chip->pagebuf << chip->page_shift) && 2412 if (to <= ((loff_t)chip->pagebuf << chip->page_shift) &&
2395 (chip->pagebuf << chip->page_shift) < (to + ops->len)) 2413 ((loff_t)chip->pagebuf << chip->page_shift) < (to + ops->len))
2396 chip->pagebuf = -1; 2414 chip->pagebuf = -1;
2397 2415
2398 /* Don't allow multipage oob writes with offset */ 2416 /* Don't allow multipage oob writes with offset */
@@ -3576,6 +3594,8 @@ static bool find_full_id_nand(struct mtd_info *mtd, struct nand_chip *chip,
3576 chip->options |= type->options; 3594 chip->options |= type->options;
3577 chip->ecc_strength_ds = NAND_ECC_STRENGTH(type); 3595 chip->ecc_strength_ds = NAND_ECC_STRENGTH(type);
3578 chip->ecc_step_ds = NAND_ECC_STEP(type); 3596 chip->ecc_step_ds = NAND_ECC_STEP(type);
3597 chip->onfi_timing_mode_default =
3598 type->onfi_timing_mode_default;
3579 3599
3580 *busw = type->options & NAND_BUSWIDTH_16; 3600 *busw = type->options & NAND_BUSWIDTH_16;
3581 3601
@@ -3918,8 +3938,7 @@ int nand_scan_tail(struct mtd_info *mtd)
3918 case NAND_ECC_HW_OOB_FIRST: 3938 case NAND_ECC_HW_OOB_FIRST:
3919 /* Similar to NAND_ECC_HW, but a separate read_page handle */ 3939 /* Similar to NAND_ECC_HW, but a separate read_page handle */
3920 if (!ecc->calculate || !ecc->correct || !ecc->hwctl) { 3940 if (!ecc->calculate || !ecc->correct || !ecc->hwctl) {
3921 pr_warn("No ECC functions supplied; " 3941 pr_warn("No ECC functions supplied; hardware ECC not possible\n");
3922 "hardware ECC not possible\n");
3923 BUG(); 3942 BUG();
3924 } 3943 }
3925 if (!ecc->read_page) 3944 if (!ecc->read_page)
@@ -3950,8 +3969,7 @@ int nand_scan_tail(struct mtd_info *mtd)
3950 ecc->read_page == nand_read_page_hwecc || 3969 ecc->read_page == nand_read_page_hwecc ||
3951 !ecc->write_page || 3970 !ecc->write_page ||
3952 ecc->write_page == nand_write_page_hwecc)) { 3971 ecc->write_page == nand_write_page_hwecc)) {
3953 pr_warn("No ECC functions supplied; " 3972 pr_warn("No ECC functions supplied; hardware ECC not possible\n");
3954 "hardware ECC not possible\n");
3955 BUG(); 3973 BUG();
3956 } 3974 }
3957 /* Use standard syndrome read/write page function? */ 3975 /* Use standard syndrome read/write page function? */
@@ -3975,9 +3993,8 @@ int nand_scan_tail(struct mtd_info *mtd)
3975 } 3993 }
3976 break; 3994 break;
3977 } 3995 }
3978 pr_warn("%d byte HW ECC not possible on " 3996 pr_warn("%d byte HW ECC not possible on %d byte page size, fallback to SW ECC\n",
3979 "%d byte page size, fallback to SW ECC\n", 3997 ecc->size, mtd->writesize);
3980 ecc->size, mtd->writesize);
3981 ecc->mode = NAND_ECC_SOFT; 3998 ecc->mode = NAND_ECC_SOFT;
3982 3999
3983 case NAND_ECC_SOFT: 4000 case NAND_ECC_SOFT:
@@ -4030,8 +4047,7 @@ int nand_scan_tail(struct mtd_info *mtd)
4030 break; 4047 break;
4031 4048
4032 case NAND_ECC_NONE: 4049 case NAND_ECC_NONE:
4033 pr_warn("NAND_ECC_NONE selected by board driver. " 4050 pr_warn("NAND_ECC_NONE selected by board driver. This is not recommended!\n");
4034 "This is not recommended!\n");
4035 ecc->read_page = nand_read_page_raw; 4051 ecc->read_page = nand_read_page_raw;
4036 ecc->write_page = nand_write_page_raw; 4052 ecc->write_page = nand_write_page_raw;
4037 ecc->read_oob = nand_read_oob_std; 4053 ecc->read_oob = nand_read_oob_std;
diff --git a/drivers/mtd/nand/nand_bbt.c b/drivers/mtd/nand/nand_bbt.c
index 443fa82cde6a..9bb8453d224e 100644
--- a/drivers/mtd/nand/nand_bbt.c
+++ b/drivers/mtd/nand/nand_bbt.c
@@ -201,12 +201,12 @@ static int read_bbt(struct mtd_info *mtd, uint8_t *buf, int page, int num,
201 res = mtd_read(mtd, from, len, &retlen, buf); 201 res = mtd_read(mtd, from, len, &retlen, buf);
202 if (res < 0) { 202 if (res < 0) {
203 if (mtd_is_eccerr(res)) { 203 if (mtd_is_eccerr(res)) {
204 pr_info("nand_bbt: ECC error in BBT at " 204 pr_info("nand_bbt: ECC error in BBT at 0x%012llx\n",
205 "0x%012llx\n", from & ~mtd->writesize); 205 from & ~mtd->writesize);
206 return res; 206 return res;
207 } else if (mtd_is_bitflip(res)) { 207 } else if (mtd_is_bitflip(res)) {
208 pr_info("nand_bbt: corrected error in BBT at " 208 pr_info("nand_bbt: corrected error in BBT at 0x%012llx\n",
209 "0x%012llx\n", from & ~mtd->writesize); 209 from & ~mtd->writesize);
210 ret = res; 210 ret = res;
211 } else { 211 } else {
212 pr_info("nand_bbt: error reading BBT\n"); 212 pr_info("nand_bbt: error reading BBT\n");
@@ -580,8 +580,8 @@ static int search_bbt(struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_descr
580 if (td->pages[i] == -1) 580 if (td->pages[i] == -1)
581 pr_warn("Bad block table not found for chip %d\n", i); 581 pr_warn("Bad block table not found for chip %d\n", i);
582 else 582 else
583 pr_info("Bad block table found at page %d, version " 583 pr_info("Bad block table found at page %d, version 0x%02X\n",
584 "0x%02X\n", td->pages[i], td->version[i]); 584 td->pages[i], td->version[i]);
585 } 585 }
586 return 0; 586 return 0;
587} 587}
@@ -725,12 +725,10 @@ static int write_bbt(struct mtd_info *mtd, uint8_t *buf,
725 res = mtd_read(mtd, to, len, &retlen, buf); 725 res = mtd_read(mtd, to, len, &retlen, buf);
726 if (res < 0) { 726 if (res < 0) {
727 if (retlen != len) { 727 if (retlen != len) {
728 pr_info("nand_bbt: error reading block " 728 pr_info("nand_bbt: error reading block for writing the bad block table\n");
729 "for writing the bad block table\n");
730 return res; 729 return res;
731 } 730 }
732 pr_warn("nand_bbt: ECC error while reading " 731 pr_warn("nand_bbt: ECC error while reading block for writing bad block table\n");
733 "block for writing bad block table\n");
734 } 732 }
735 /* Read oob data */ 733 /* Read oob data */
736 ops.ooblen = (len >> this->page_shift) * mtd->oobsize; 734 ops.ooblen = (len >> this->page_shift) * mtd->oobsize;
@@ -1338,9 +1336,8 @@ int nand_isbad_bbt(struct mtd_info *mtd, loff_t offs, int allowbbt)
1338 block = (int)(offs >> this->bbt_erase_shift); 1336 block = (int)(offs >> this->bbt_erase_shift);
1339 res = bbt_get_entry(this, block); 1337 res = bbt_get_entry(this, block);
1340 1338
1341 pr_debug("nand_isbad_bbt(): bbt info for offs 0x%08x: " 1339 pr_debug("nand_isbad_bbt(): bbt info for offs 0x%08x: (block %d) 0x%02x\n",
1342 "(block %d) 0x%02x\n", 1340 (unsigned int)offs, block, res);
1343 (unsigned int)offs, block, res);
1344 1341
1345 switch (res) { 1342 switch (res) {
1346 case BBT_BLOCK_GOOD: 1343 case BBT_BLOCK_GOOD:
diff --git a/drivers/mtd/nand/nand_ids.c b/drivers/mtd/nand/nand_ids.c
index 3d7c89fc1031..fbde89105245 100644
--- a/drivers/mtd/nand/nand_ids.c
+++ b/drivers/mtd/nand/nand_ids.c
@@ -46,6 +46,10 @@ struct nand_flash_dev nand_flash_ids[] = {
46 {"SDTNRGAMA 64G 3.3V 8-bit", 46 {"SDTNRGAMA 64G 3.3V 8-bit",
47 { .id = {0x45, 0xde, 0x94, 0x93, 0x76, 0x50} }, 47 { .id = {0x45, 0xde, 0x94, 0x93, 0x76, 0x50} },
48 SZ_16K, SZ_8K, SZ_4M, 0, 6, 1280, NAND_ECC_INFO(40, SZ_1K) }, 48 SZ_16K, SZ_8K, SZ_4M, 0, 6, 1280, NAND_ECC_INFO(40, SZ_1K) },
49 {"H27UCG8T2ATR-BC 64G 3.3V 8-bit",
50 { .id = {0xad, 0xde, 0x94, 0xda, 0x74, 0xc4} },
51 SZ_8K, SZ_8K, SZ_2M, 0, 6, 640, NAND_ECC_INFO(40, SZ_1K),
52 4 },
49 53
50 LEGACY_ID_NAND("NAND 4MiB 5V 8-bit", 0x6B, 4, SZ_8K, SP_OPTIONS), 54 LEGACY_ID_NAND("NAND 4MiB 5V 8-bit", 0x6B, 4, SZ_8K, SP_OPTIONS),
51 LEGACY_ID_NAND("NAND 4MiB 3,3V 8-bit", 0xE3, 4, SZ_8K, SP_OPTIONS), 55 LEGACY_ID_NAND("NAND 4MiB 3,3V 8-bit", 0xE3, 4, SZ_8K, SP_OPTIONS),
diff --git a/drivers/mtd/nand/nand_timings.c b/drivers/mtd/nand/nand_timings.c
index 8b36253420fa..e81470a8ac67 100644
--- a/drivers/mtd/nand/nand_timings.c
+++ b/drivers/mtd/nand/nand_timings.c
@@ -42,7 +42,7 @@ static const struct nand_sdr_timings onfi_sdr_timings[] = {
42 .tRHZ_max = 200000, 42 .tRHZ_max = 200000,
43 .tRLOH_min = 0, 43 .tRLOH_min = 0,
44 .tRP_min = 50000, 44 .tRP_min = 50000,
45 .tRST_max = 250000000000, 45 .tRST_max = 250000000000ULL,
46 .tWB_max = 200000, 46 .tWB_max = 200000,
47 .tRR_min = 40000, 47 .tRR_min = 40000,
48 .tWC_min = 100000, 48 .tWC_min = 100000,
diff --git a/drivers/mtd/nand/nandsim.c b/drivers/mtd/nand/nandsim.c
index 4f0d83648e5a..7dc1dd28d896 100644
--- a/drivers/mtd/nand/nandsim.c
+++ b/drivers/mtd/nand/nandsim.c
@@ -827,7 +827,7 @@ static int parse_badblocks(struct nandsim *ns, struct mtd_info *mtd)
827 NS_ERR("invalid badblocks.\n"); 827 NS_ERR("invalid badblocks.\n");
828 return -EINVAL; 828 return -EINVAL;
829 } 829 }
830 offset = erase_block_no * ns->geom.secsz; 830 offset = (loff_t)erase_block_no * ns->geom.secsz;
831 if (mtd_block_markbad(mtd, offset)) { 831 if (mtd_block_markbad(mtd, offset)) {
832 NS_ERR("invalid badblocks.\n"); 832 NS_ERR("invalid badblocks.\n");
833 return -EINVAL; 833 return -EINVAL;
diff --git a/drivers/mtd/nand/ndfc.c b/drivers/mtd/nand/ndfc.c
index 69eaba690a99..253a644da76a 100644
--- a/drivers/mtd/nand/ndfc.c
+++ b/drivers/mtd/nand/ndfc.c
@@ -203,7 +203,8 @@ static int ndfc_probe(struct platform_device *ofdev)
203 struct ndfc_controller *ndfc; 203 struct ndfc_controller *ndfc;
204 const __be32 *reg; 204 const __be32 *reg;
205 u32 ccr; 205 u32 ccr;
206 int err, len, cs; 206 u32 cs;
207 int err, len;
207 208
208 /* Read the reg property to get the chip select */ 209 /* Read the reg property to get the chip select */
209 reg = of_get_property(ofdev->dev.of_node, "reg", &len); 210 reg = of_get_property(ofdev->dev.of_node, "reg", &len);
diff --git a/drivers/mtd/nand/omap2.c b/drivers/mtd/nand/omap2.c
index 5967b385141b..3b357e920a0c 100644
--- a/drivers/mtd/nand/omap2.c
+++ b/drivers/mtd/nand/omap2.c
@@ -136,7 +136,6 @@
136 136
137#define BADBLOCK_MARKER_LENGTH 2 137#define BADBLOCK_MARKER_LENGTH 2
138 138
139#ifdef CONFIG_MTD_NAND_OMAP_BCH
140static u_char bch16_vector[] = {0xf5, 0x24, 0x1c, 0xd0, 0x61, 0xb3, 0xf1, 0x55, 139static u_char bch16_vector[] = {0xf5, 0x24, 0x1c, 0xd0, 0x61, 0xb3, 0xf1, 0x55,
141 0x2e, 0x2c, 0x86, 0xa3, 0xed, 0x36, 0x1b, 0x78, 140 0x2e, 0x2c, 0x86, 0xa3, 0xed, 0x36, 0x1b, 0x78,
142 0x48, 0x76, 0xa9, 0x3b, 0x97, 0xd1, 0x7a, 0x93, 141 0x48, 0x76, 0xa9, 0x3b, 0x97, 0xd1, 0x7a, 0x93,
@@ -144,7 +143,6 @@ static u_char bch16_vector[] = {0xf5, 0x24, 0x1c, 0xd0, 0x61, 0xb3, 0xf1, 0x55,
144static u_char bch8_vector[] = {0xf3, 0xdb, 0x14, 0x16, 0x8b, 0xd2, 0xbe, 0xcc, 143static u_char bch8_vector[] = {0xf3, 0xdb, 0x14, 0x16, 0x8b, 0xd2, 0xbe, 0xcc,
145 0xac, 0x6b, 0xff, 0x99, 0x7b}; 144 0xac, 0x6b, 0xff, 0x99, 0x7b};
146static u_char bch4_vector[] = {0x00, 0x6b, 0x31, 0xdd, 0x41, 0xbc, 0x10}; 145static u_char bch4_vector[] = {0x00, 0x6b, 0x31, 0xdd, 0x41, 0xbc, 0x10};
147#endif
148 146
149/* oob info generated runtime depending on ecc algorithm and layout selected */ 147/* oob info generated runtime depending on ecc algorithm and layout selected */
150static struct nand_ecclayout omap_oobinfo; 148static struct nand_ecclayout omap_oobinfo;
@@ -1292,7 +1290,6 @@ static int __maybe_unused omap_calculate_ecc_bch(struct mtd_info *mtd,
1292 return 0; 1290 return 0;
1293} 1291}
1294 1292
1295#ifdef CONFIG_MTD_NAND_OMAP_BCH
1296/** 1293/**
1297 * erased_sector_bitflips - count bit flips 1294 * erased_sector_bitflips - count bit flips
1298 * @data: data sector buffer 1295 * @data: data sector buffer
@@ -1378,7 +1375,7 @@ static int omap_elm_correct_data(struct mtd_info *mtd, u_char *data,
1378 erased_ecc_vec = bch16_vector; 1375 erased_ecc_vec = bch16_vector;
1379 break; 1376 break;
1380 default: 1377 default:
1381 pr_err("invalid driver configuration\n"); 1378 dev_err(&info->pdev->dev, "invalid driver configuration\n");
1382 return -EINVAL; 1379 return -EINVAL;
1383 } 1380 }
1384 1381
@@ -1449,7 +1446,8 @@ static int omap_elm_correct_data(struct mtd_info *mtd, u_char *data,
1449 err = 0; 1446 err = 0;
1450 for (i = 0; i < eccsteps; i++) { 1447 for (i = 0; i < eccsteps; i++) {
1451 if (err_vec[i].error_uncorrectable) { 1448 if (err_vec[i].error_uncorrectable) {
1452 pr_err("nand: uncorrectable bit-flips found\n"); 1449 dev_err(&info->pdev->dev,
1450 "uncorrectable bit-flips found\n");
1453 err = -EBADMSG; 1451 err = -EBADMSG;
1454 } else if (err_vec[i].error_reported) { 1452 } else if (err_vec[i].error_reported) {
1455 for (j = 0; j < err_vec[i].error_count; j++) { 1453 for (j = 0; j < err_vec[i].error_count; j++) {
@@ -1486,8 +1484,9 @@ static int omap_elm_correct_data(struct mtd_info *mtd, u_char *data,
1486 1 << bit_pos; 1484 1 << bit_pos;
1487 } 1485 }
1488 } else { 1486 } else {
1489 pr_err("invalid bit-flip @ %d:%d\n", 1487 dev_err(&info->pdev->dev,
1490 byte_pos, bit_pos); 1488 "invalid bit-flip @ %d:%d\n",
1489 byte_pos, bit_pos);
1491 err = -EBADMSG; 1490 err = -EBADMSG;
1492 } 1491 }
1493 } 1492 }
@@ -1593,33 +1592,71 @@ static int omap_read_page_bch(struct mtd_info *mtd, struct nand_chip *chip,
1593/** 1592/**
1594 * is_elm_present - checks for presence of ELM module by scanning DT nodes 1593 * is_elm_present - checks for presence of ELM module by scanning DT nodes
1595 * @omap_nand_info: NAND device structure containing platform data 1594 * @omap_nand_info: NAND device structure containing platform data
1596 * @bch_type: 0x0=BCH4, 0x1=BCH8, 0x2=BCH16
1597 */ 1595 */
1598static int is_elm_present(struct omap_nand_info *info, 1596static bool is_elm_present(struct omap_nand_info *info,
1599 struct device_node *elm_node, enum bch_ecc bch_type) 1597 struct device_node *elm_node)
1600{ 1598{
1601 struct platform_device *pdev; 1599 struct platform_device *pdev;
1602 struct nand_ecc_ctrl *ecc = &info->nand.ecc; 1600
1603 int err;
1604 /* check whether elm-id is passed via DT */ 1601 /* check whether elm-id is passed via DT */
1605 if (!elm_node) { 1602 if (!elm_node) {
1606 pr_err("nand: error: ELM DT node not found\n"); 1603 dev_err(&info->pdev->dev, "ELM devicetree node not found\n");
1607 return -ENODEV; 1604 return false;
1608 } 1605 }
1609 pdev = of_find_device_by_node(elm_node); 1606 pdev = of_find_device_by_node(elm_node);
1610 /* check whether ELM device is registered */ 1607 /* check whether ELM device is registered */
1611 if (!pdev) { 1608 if (!pdev) {
1612 pr_err("nand: error: ELM device not found\n"); 1609 dev_err(&info->pdev->dev, "ELM device not found\n");
1613 return -ENODEV; 1610 return false;
1614 } 1611 }
1615 /* ELM module available, now configure it */ 1612 /* ELM module available, now configure it */
1616 info->elm_dev = &pdev->dev; 1613 info->elm_dev = &pdev->dev;
1617 err = elm_config(info->elm_dev, bch_type, 1614 return true;
1618 (info->mtd.writesize / ecc->size), ecc->size, ecc->bytes); 1615}
1619 1616
1620 return err; 1617static bool omap2_nand_ecc_check(struct omap_nand_info *info,
1618 struct omap_nand_platform_data *pdata)
1619{
1620 bool ecc_needs_bch, ecc_needs_omap_bch, ecc_needs_elm;
1621
1622 switch (info->ecc_opt) {
1623 case OMAP_ECC_BCH4_CODE_HW_DETECTION_SW:
1624 case OMAP_ECC_BCH8_CODE_HW_DETECTION_SW:
1625 ecc_needs_omap_bch = false;
1626 ecc_needs_bch = true;
1627 ecc_needs_elm = false;
1628 break;
1629 case OMAP_ECC_BCH4_CODE_HW:
1630 case OMAP_ECC_BCH8_CODE_HW:
1631 case OMAP_ECC_BCH16_CODE_HW:
1632 ecc_needs_omap_bch = true;
1633 ecc_needs_bch = false;
1634 ecc_needs_elm = true;
1635 break;
1636 default:
1637 ecc_needs_omap_bch = false;
1638 ecc_needs_bch = false;
1639 ecc_needs_elm = false;
1640 break;
1641 }
1642
1643 if (ecc_needs_bch && !IS_ENABLED(CONFIG_MTD_NAND_ECC_BCH)) {
1644 dev_err(&info->pdev->dev,
1645 "CONFIG_MTD_NAND_ECC_BCH not enabled\n");
1646 return false;
1647 }
1648 if (ecc_needs_omap_bch && !IS_ENABLED(CONFIG_MTD_NAND_OMAP_BCH)) {
1649 dev_err(&info->pdev->dev,
1650 "CONFIG_MTD_NAND_OMAP_BCH not enabled\n");
1651 return false;
1652 }
1653 if (ecc_needs_elm && !is_elm_present(info, pdata->elm_of_node)) {
1654 dev_err(&info->pdev->dev, "ELM not available\n");
1655 return false;
1656 }
1657
1658 return true;
1621} 1659}
1622#endif /* CONFIG_MTD_NAND_ECC_BCH */
1623 1660
1624static int omap_nand_probe(struct platform_device *pdev) 1661static int omap_nand_probe(struct platform_device *pdev)
1625{ 1662{
@@ -1663,7 +1700,6 @@ static int omap_nand_probe(struct platform_device *pdev)
1663 mtd->owner = THIS_MODULE; 1700 mtd->owner = THIS_MODULE;
1664 nand_chip = &info->nand; 1701 nand_chip = &info->nand;
1665 nand_chip->ecc.priv = NULL; 1702 nand_chip->ecc.priv = NULL;
1666 nand_chip->options |= NAND_SKIP_BBTSCAN;
1667 1703
1668 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1704 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1669 nand_chip->IO_ADDR_R = devm_ioremap_resource(&pdev->dev, res); 1705 nand_chip->IO_ADDR_R = devm_ioremap_resource(&pdev->dev, res);
@@ -1692,17 +1728,22 @@ static int omap_nand_probe(struct platform_device *pdev)
1692 nand_chip->chip_delay = 50; 1728 nand_chip->chip_delay = 50;
1693 } 1729 }
1694 1730
1731 if (pdata->flash_bbt)
1732 nand_chip->bbt_options |= NAND_BBT_USE_FLASH | NAND_BBT_NO_OOB;
1733 else
1734 nand_chip->options |= NAND_SKIP_BBTSCAN;
1735
1695 /* scan NAND device connected to chip controller */ 1736 /* scan NAND device connected to chip controller */
1696 nand_chip->options |= pdata->devsize & NAND_BUSWIDTH_16; 1737 nand_chip->options |= pdata->devsize & NAND_BUSWIDTH_16;
1697 if (nand_scan_ident(mtd, 1, NULL)) { 1738 if (nand_scan_ident(mtd, 1, NULL)) {
1698 pr_err("nand device scan failed, may be bus-width mismatch\n"); 1739 dev_err(&info->pdev->dev, "scan failed, may be bus-width mismatch\n");
1699 err = -ENXIO; 1740 err = -ENXIO;
1700 goto return_error; 1741 goto return_error;
1701 } 1742 }
1702 1743
1703 /* check for small page devices */ 1744 /* check for small page devices */
1704 if ((mtd->oobsize < 64) && (pdata->ecc_opt != OMAP_ECC_HAM1_CODE_HW)) { 1745 if ((mtd->oobsize < 64) && (pdata->ecc_opt != OMAP_ECC_HAM1_CODE_HW)) {
1705 pr_err("small page devices are not supported\n"); 1746 dev_err(&info->pdev->dev, "small page devices are not supported\n");
1706 err = -EINVAL; 1747 err = -EINVAL;
1707 goto return_error; 1748 goto return_error;
1708 } 1749 }
@@ -1793,6 +1834,11 @@ static int omap_nand_probe(struct platform_device *pdev)
1793 goto return_error; 1834 goto return_error;
1794 } 1835 }
1795 1836
1837 if (!omap2_nand_ecc_check(info, pdata)) {
1838 err = -EINVAL;
1839 goto return_error;
1840 }
1841
1796 /* populate MTD interface based on ECC scheme */ 1842 /* populate MTD interface based on ECC scheme */
1797 ecclayout = &omap_oobinfo; 1843 ecclayout = &omap_oobinfo;
1798 switch (info->ecc_opt) { 1844 switch (info->ecc_opt) {
@@ -1825,7 +1871,6 @@ static int omap_nand_probe(struct platform_device *pdev)
1825 break; 1871 break;
1826 1872
1827 case OMAP_ECC_BCH4_CODE_HW_DETECTION_SW: 1873 case OMAP_ECC_BCH4_CODE_HW_DETECTION_SW:
1828#ifdef CONFIG_MTD_NAND_ECC_BCH
1829 pr_info("nand: using OMAP_ECC_BCH4_CODE_HW_DETECTION_SW\n"); 1874 pr_info("nand: using OMAP_ECC_BCH4_CODE_HW_DETECTION_SW\n");
1830 nand_chip->ecc.mode = NAND_ECC_HW; 1875 nand_chip->ecc.mode = NAND_ECC_HW;
1831 nand_chip->ecc.size = 512; 1876 nand_chip->ecc.size = 512;
@@ -1853,18 +1898,13 @@ static int omap_nand_probe(struct platform_device *pdev)
1853 nand_chip->ecc.bytes, 1898 nand_chip->ecc.bytes,
1854 &ecclayout); 1899 &ecclayout);
1855 if (!nand_chip->ecc.priv) { 1900 if (!nand_chip->ecc.priv) {
1856 pr_err("nand: error: unable to use s/w BCH library\n"); 1901 dev_err(&info->pdev->dev, "unable to use BCH library\n");
1857 err = -EINVAL; 1902 err = -EINVAL;
1903 goto return_error;
1858 } 1904 }
1859 break; 1905 break;
1860#else
1861 pr_err("nand: error: CONFIG_MTD_NAND_ECC_BCH not enabled\n");
1862 err = -EINVAL;
1863 goto return_error;
1864#endif
1865 1906
1866 case OMAP_ECC_BCH4_CODE_HW: 1907 case OMAP_ECC_BCH4_CODE_HW:
1867#ifdef CONFIG_MTD_NAND_OMAP_BCH
1868 pr_info("nand: using OMAP_ECC_BCH4_CODE_HW ECC scheme\n"); 1908 pr_info("nand: using OMAP_ECC_BCH4_CODE_HW ECC scheme\n");
1869 nand_chip->ecc.mode = NAND_ECC_HW; 1909 nand_chip->ecc.mode = NAND_ECC_HW;
1870 nand_chip->ecc.size = 512; 1910 nand_chip->ecc.size = 512;
@@ -1886,21 +1926,15 @@ static int omap_nand_probe(struct platform_device *pdev)
1886 /* reserved marker already included in ecclayout->eccbytes */ 1926 /* reserved marker already included in ecclayout->eccbytes */
1887 ecclayout->oobfree->offset = 1927 ecclayout->oobfree->offset =
1888 ecclayout->eccpos[ecclayout->eccbytes - 1] + 1; 1928 ecclayout->eccpos[ecclayout->eccbytes - 1] + 1;
1889 /* This ECC scheme requires ELM H/W block */ 1929
1890 if (is_elm_present(info, pdata->elm_of_node, BCH4_ECC) < 0) { 1930 err = elm_config(info->elm_dev, BCH4_ECC,
1891 pr_err("nand: error: could not initialize ELM\n"); 1931 info->mtd.writesize / nand_chip->ecc.size,
1892 err = -ENODEV; 1932 nand_chip->ecc.size, nand_chip->ecc.bytes);
1933 if (err < 0)
1893 goto return_error; 1934 goto return_error;
1894 }
1895 break; 1935 break;
1896#else
1897 pr_err("nand: error: CONFIG_MTD_NAND_OMAP_BCH not enabled\n");
1898 err = -EINVAL;
1899 goto return_error;
1900#endif
1901 1936
1902 case OMAP_ECC_BCH8_CODE_HW_DETECTION_SW: 1937 case OMAP_ECC_BCH8_CODE_HW_DETECTION_SW:
1903#ifdef CONFIG_MTD_NAND_ECC_BCH
1904 pr_info("nand: using OMAP_ECC_BCH8_CODE_HW_DETECTION_SW\n"); 1938 pr_info("nand: using OMAP_ECC_BCH8_CODE_HW_DETECTION_SW\n");
1905 nand_chip->ecc.mode = NAND_ECC_HW; 1939 nand_chip->ecc.mode = NAND_ECC_HW;
1906 nand_chip->ecc.size = 512; 1940 nand_chip->ecc.size = 512;
@@ -1928,19 +1962,13 @@ static int omap_nand_probe(struct platform_device *pdev)
1928 nand_chip->ecc.bytes, 1962 nand_chip->ecc.bytes,
1929 &ecclayout); 1963 &ecclayout);
1930 if (!nand_chip->ecc.priv) { 1964 if (!nand_chip->ecc.priv) {
1931 pr_err("nand: error: unable to use s/w BCH library\n"); 1965 dev_err(&info->pdev->dev, "unable to use BCH library\n");
1932 err = -EINVAL; 1966 err = -EINVAL;
1933 goto return_error; 1967 goto return_error;
1934 } 1968 }
1935 break; 1969 break;
1936#else
1937 pr_err("nand: error: CONFIG_MTD_NAND_ECC_BCH not enabled\n");
1938 err = -EINVAL;
1939 goto return_error;
1940#endif
1941 1970
1942 case OMAP_ECC_BCH8_CODE_HW: 1971 case OMAP_ECC_BCH8_CODE_HW:
1943#ifdef CONFIG_MTD_NAND_OMAP_BCH
1944 pr_info("nand: using OMAP_ECC_BCH8_CODE_HW ECC scheme\n"); 1972 pr_info("nand: using OMAP_ECC_BCH8_CODE_HW ECC scheme\n");
1945 nand_chip->ecc.mode = NAND_ECC_HW; 1973 nand_chip->ecc.mode = NAND_ECC_HW;
1946 nand_chip->ecc.size = 512; 1974 nand_chip->ecc.size = 512;
@@ -1952,12 +1980,13 @@ static int omap_nand_probe(struct platform_device *pdev)
1952 nand_chip->ecc.calculate = omap_calculate_ecc_bch; 1980 nand_chip->ecc.calculate = omap_calculate_ecc_bch;
1953 nand_chip->ecc.read_page = omap_read_page_bch; 1981 nand_chip->ecc.read_page = omap_read_page_bch;
1954 nand_chip->ecc.write_page = omap_write_page_bch; 1982 nand_chip->ecc.write_page = omap_write_page_bch;
1955 /* This ECC scheme requires ELM H/W block */ 1983
1956 err = is_elm_present(info, pdata->elm_of_node, BCH8_ECC); 1984 err = elm_config(info->elm_dev, BCH8_ECC,
1957 if (err < 0) { 1985 info->mtd.writesize / nand_chip->ecc.size,
1958 pr_err("nand: error: could not initialize ELM\n"); 1986 nand_chip->ecc.size, nand_chip->ecc.bytes);
1987 if (err < 0)
1959 goto return_error; 1988 goto return_error;
1960 } 1989
1961 /* define ECC layout */ 1990 /* define ECC layout */
1962 ecclayout->eccbytes = nand_chip->ecc.bytes * 1991 ecclayout->eccbytes = nand_chip->ecc.bytes *
1963 (mtd->writesize / 1992 (mtd->writesize /
@@ -1969,14 +1998,8 @@ static int omap_nand_probe(struct platform_device *pdev)
1969 ecclayout->oobfree->offset = 1998 ecclayout->oobfree->offset =
1970 ecclayout->eccpos[ecclayout->eccbytes - 1] + 1; 1999 ecclayout->eccpos[ecclayout->eccbytes - 1] + 1;
1971 break; 2000 break;
1972#else
1973 pr_err("nand: error: CONFIG_MTD_NAND_OMAP_BCH not enabled\n");
1974 err = -EINVAL;
1975 goto return_error;
1976#endif
1977 2001
1978 case OMAP_ECC_BCH16_CODE_HW: 2002 case OMAP_ECC_BCH16_CODE_HW:
1979#ifdef CONFIG_MTD_NAND_OMAP_BCH
1980 pr_info("using OMAP_ECC_BCH16_CODE_HW ECC scheme\n"); 2003 pr_info("using OMAP_ECC_BCH16_CODE_HW ECC scheme\n");
1981 nand_chip->ecc.mode = NAND_ECC_HW; 2004 nand_chip->ecc.mode = NAND_ECC_HW;
1982 nand_chip->ecc.size = 512; 2005 nand_chip->ecc.size = 512;
@@ -1987,12 +2010,13 @@ static int omap_nand_probe(struct platform_device *pdev)
1987 nand_chip->ecc.calculate = omap_calculate_ecc_bch; 2010 nand_chip->ecc.calculate = omap_calculate_ecc_bch;
1988 nand_chip->ecc.read_page = omap_read_page_bch; 2011 nand_chip->ecc.read_page = omap_read_page_bch;
1989 nand_chip->ecc.write_page = omap_write_page_bch; 2012 nand_chip->ecc.write_page = omap_write_page_bch;
1990 /* This ECC scheme requires ELM H/W block */ 2013
1991 err = is_elm_present(info, pdata->elm_of_node, BCH16_ECC); 2014 err = elm_config(info->elm_dev, BCH16_ECC,
1992 if (err < 0) { 2015 info->mtd.writesize / nand_chip->ecc.size,
1993 pr_err("ELM is required for this ECC scheme\n"); 2016 nand_chip->ecc.size, nand_chip->ecc.bytes);
2017 if (err < 0)
1994 goto return_error; 2018 goto return_error;
1995 } 2019
1996 /* define ECC layout */ 2020 /* define ECC layout */
1997 ecclayout->eccbytes = nand_chip->ecc.bytes * 2021 ecclayout->eccbytes = nand_chip->ecc.bytes *
1998 (mtd->writesize / 2022 (mtd->writesize /
@@ -2004,13 +2028,8 @@ static int omap_nand_probe(struct platform_device *pdev)
2004 ecclayout->oobfree->offset = 2028 ecclayout->oobfree->offset =
2005 ecclayout->eccpos[ecclayout->eccbytes - 1] + 1; 2029 ecclayout->eccpos[ecclayout->eccbytes - 1] + 1;
2006 break; 2030 break;
2007#else
2008 pr_err("nand: error: CONFIG_MTD_NAND_OMAP_BCH not enabled\n");
2009 err = -EINVAL;
2010 goto return_error;
2011#endif
2012 default: 2031 default:
2013 pr_err("nand: error: invalid or unsupported ECC scheme\n"); 2032 dev_err(&info->pdev->dev, "invalid or unsupported ECC scheme\n");
2014 err = -EINVAL; 2033 err = -EINVAL;
2015 goto return_error; 2034 goto return_error;
2016 } 2035 }
@@ -2022,8 +2041,9 @@ static int omap_nand_probe(struct platform_device *pdev)
2022 ecclayout->oobfree->length = mtd->oobsize - ecclayout->oobfree->offset; 2041 ecclayout->oobfree->length = mtd->oobsize - ecclayout->oobfree->offset;
2023 /* check if NAND device's OOB is enough to store ECC signatures */ 2042 /* check if NAND device's OOB is enough to store ECC signatures */
2024 if (mtd->oobsize < (ecclayout->eccbytes + BADBLOCK_MARKER_LENGTH)) { 2043 if (mtd->oobsize < (ecclayout->eccbytes + BADBLOCK_MARKER_LENGTH)) {
2025 pr_err("not enough OOB bytes required = %d, available=%d\n", 2044 dev_err(&info->pdev->dev,
2026 ecclayout->eccbytes, mtd->oobsize); 2045 "not enough OOB bytes required = %d, available=%d\n",
2046 ecclayout->eccbytes, mtd->oobsize);
2027 err = -EINVAL; 2047 err = -EINVAL;
2028 goto return_error; 2048 goto return_error;
2029 } 2049 }
diff --git a/drivers/mtd/devices/elm.c b/drivers/mtd/nand/omap_elm.c
index b4f61c7fc161..b4f61c7fc161 100644
--- a/drivers/mtd/devices/elm.c
+++ b/drivers/mtd/nand/omap_elm.c
diff --git a/drivers/mtd/nand/sm_common.h b/drivers/mtd/nand/sm_common.h
index 00f4a83359b2..d3e028e58b0f 100644
--- a/drivers/mtd/nand/sm_common.h
+++ b/drivers/mtd/nand/sm_common.h
@@ -18,7 +18,7 @@ struct sm_oob {
18 uint8_t ecc2[3]; 18 uint8_t ecc2[3];
19 uint8_t lba_copy2[2]; 19 uint8_t lba_copy2[2];
20 uint8_t ecc1[3]; 20 uint8_t ecc1[3];
21} __attribute__((packed)); 21} __packed;
22 22
23 23
24/* one sector is always 512 bytes, but it can consist of two nand pages */ 24/* one sector is always 512 bytes, but it can consist of two nand pages */
diff --git a/drivers/mtd/sm_ftl.c b/drivers/mtd/sm_ftl.c
index cf49c22673b9..c23184a47fc4 100644
--- a/drivers/mtd/sm_ftl.c
+++ b/drivers/mtd/sm_ftl.c
@@ -1058,7 +1058,7 @@ static int sm_write(struct mtd_blktrans_dev *dev,
1058{ 1058{
1059 struct sm_ftl *ftl = dev->priv; 1059 struct sm_ftl *ftl = dev->priv;
1060 struct ftl_zone *zone; 1060 struct ftl_zone *zone;
1061 int error, zone_num, block, boffset; 1061 int error = 0, zone_num, block, boffset;
1062 1062
1063 BUG_ON(ftl->readonly); 1063 BUG_ON(ftl->readonly);
1064 sm_break_offset(ftl, sec_no << 9, &zone_num, &block, &boffset); 1064 sm_break_offset(ftl, sec_no << 9, &zone_num, &block, &boffset);
diff --git a/drivers/mtd/spi-nor/Kconfig b/drivers/mtd/spi-nor/Kconfig
index f8acfa4310ef..64a4f0edabc7 100644
--- a/drivers/mtd/spi-nor/Kconfig
+++ b/drivers/mtd/spi-nor/Kconfig
@@ -7,6 +7,20 @@ menuconfig MTD_SPI_NOR
7 7
8if MTD_SPI_NOR 8if MTD_SPI_NOR
9 9
10config MTD_SPI_NOR_USE_4K_SECTORS
11 bool "Use small 4096 B erase sectors"
12 default y
13 help
14 Many flash memories support erasing small (4096 B) sectors. Depending
15 on the usage this feature may provide performance gain in comparison
16 to erasing whole blocks (32/64 KiB).
17 Changing a small part of the flash's contents is usually faster with
18 small sectors. On the other hand erasing should be faster when using
19 64 KiB block instead of 16 × 4 KiB sectors.
20
21 Please note that some tools/drivers/filesystems may not work with
22 4096 B erase size (e.g. UBIFS requires 15 KiB as a minimum).
23
10config SPI_FSL_QUADSPI 24config SPI_FSL_QUADSPI
11 tristate "Freescale Quad SPI controller" 25 tristate "Freescale Quad SPI controller"
12 depends on ARCH_MXC 26 depends on ARCH_MXC
diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
index b5ad6bebf5e7..ae16aa2f6885 100644
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
@@ -611,6 +611,7 @@ const struct spi_device_id spi_nor_ids[] = {
611 { "m25px32-s0", INFO(0x207316, 0, 64 * 1024, 64, SECT_4K) }, 611 { "m25px32-s0", INFO(0x207316, 0, 64 * 1024, 64, SECT_4K) },
612 { "m25px32-s1", INFO(0x206316, 0, 64 * 1024, 64, SECT_4K) }, 612 { "m25px32-s1", INFO(0x206316, 0, 64 * 1024, 64, SECT_4K) },
613 { "m25px64", INFO(0x207117, 0, 64 * 1024, 128, 0) }, 613 { "m25px64", INFO(0x207117, 0, 64 * 1024, 128, 0) },
614 { "m25px80", INFO(0x207114, 0, 64 * 1024, 16, 0) },
614 615
615 /* Winbond -- w25x "blocks" are 64K, "sectors" are 4KiB */ 616 /* Winbond -- w25x "blocks" are 64K, "sectors" are 4KiB */
616 { "w25x10", INFO(0xef3011, 0, 64 * 1024, 2, SECT_4K) }, 617 { "w25x10", INFO(0xef3011, 0, 64 * 1024, 2, SECT_4K) },
@@ -623,7 +624,6 @@ const struct spi_device_id spi_nor_ids[] = {
623 { "w25q32dw", INFO(0xef6016, 0, 64 * 1024, 64, SECT_4K) }, 624 { "w25q32dw", INFO(0xef6016, 0, 64 * 1024, 64, SECT_4K) },
624 { "w25x64", INFO(0xef3017, 0, 64 * 1024, 128, SECT_4K) }, 625 { "w25x64", INFO(0xef3017, 0, 64 * 1024, 128, SECT_4K) },
625 { "w25q64", INFO(0xef4017, 0, 64 * 1024, 128, SECT_4K) }, 626 { "w25q64", INFO(0xef4017, 0, 64 * 1024, 128, SECT_4K) },
626 { "w25q128", INFO(0xef4018, 0, 64 * 1024, 256, SECT_4K) },
627 { "w25q80", INFO(0xef5014, 0, 64 * 1024, 16, SECT_4K) }, 627 { "w25q80", INFO(0xef5014, 0, 64 * 1024, 16, SECT_4K) },
628 { "w25q80bl", INFO(0xef4014, 0, 64 * 1024, 16, SECT_4K) }, 628 { "w25q80bl", INFO(0xef4014, 0, 64 * 1024, 16, SECT_4K) },
629 { "w25q128", INFO(0xef4018, 0, 64 * 1024, 256, SECT_4K) }, 629 { "w25q128", INFO(0xef4018, 0, 64 * 1024, 256, SECT_4K) },
@@ -671,11 +671,6 @@ static const struct spi_device_id *spi_nor_read_id(struct spi_nor *nor)
671 return ERR_PTR(-ENODEV); 671 return ERR_PTR(-ENODEV);
672} 672}
673 673
674static const struct spi_device_id *jedec_probe(struct spi_nor *nor)
675{
676 return nor->read_id(nor);
677}
678
679static int spi_nor_read(struct mtd_info *mtd, loff_t from, size_t len, 674static int spi_nor_read(struct mtd_info *mtd, loff_t from, size_t len,
680 size_t *retlen, u_char *buf) 675 size_t *retlen, u_char *buf)
681{ 676{
@@ -920,7 +915,6 @@ int spi_nor_scan(struct spi_nor *nor, const struct spi_device_id *id,
920 enum read_mode mode) 915 enum read_mode mode)
921{ 916{
922 struct flash_info *info; 917 struct flash_info *info;
923 struct flash_platform_data *data;
924 struct device *dev = nor->dev; 918 struct device *dev = nor->dev;
925 struct mtd_info *mtd = nor->mtd; 919 struct mtd_info *mtd = nor->mtd;
926 struct device_node *np = dev->of_node; 920 struct device_node *np = dev->of_node;
@@ -931,34 +925,12 @@ int spi_nor_scan(struct spi_nor *nor, const struct spi_device_id *id,
931 if (ret) 925 if (ret)
932 return ret; 926 return ret;
933 927
934 /* Platform data helps sort out which chip type we have, as
935 * well as how this board partitions it. If we don't have
936 * a chip ID, try the JEDEC id commands; they'll work for most
937 * newer chips, even if we don't recognize the particular chip.
938 */
939 data = dev_get_platdata(dev);
940 if (data && data->type) {
941 const struct spi_device_id *plat_id;
942
943 for (i = 0; i < ARRAY_SIZE(spi_nor_ids) - 1; i++) {
944 plat_id = &spi_nor_ids[i];
945 if (strcmp(data->type, plat_id->name))
946 continue;
947 break;
948 }
949
950 if (i < ARRAY_SIZE(spi_nor_ids) - 1)
951 id = plat_id;
952 else
953 dev_warn(dev, "unrecognized id %s\n", data->type);
954 }
955
956 info = (void *)id->driver_data; 928 info = (void *)id->driver_data;
957 929
958 if (info->jedec_id) { 930 if (info->jedec_id) {
959 const struct spi_device_id *jid; 931 const struct spi_device_id *jid;
960 932
961 jid = jedec_probe(nor); 933 jid = nor->read_id(nor);
962 if (IS_ERR(jid)) { 934 if (IS_ERR(jid)) {
963 return PTR_ERR(jid); 935 return PTR_ERR(jid);
964 } else if (jid != id) { 936 } else if (jid != id) {
@@ -990,11 +962,8 @@ int spi_nor_scan(struct spi_nor *nor, const struct spi_device_id *id,
990 write_sr(nor, 0); 962 write_sr(nor, 0);
991 } 963 }
992 964
993 if (data && data->name) 965 if (!mtd->name)
994 mtd->name = data->name;
995 else
996 mtd->name = dev_name(dev); 966 mtd->name = dev_name(dev);
997
998 mtd->type = MTD_NORFLASH; 967 mtd->type = MTD_NORFLASH;
999 mtd->writesize = 1; 968 mtd->writesize = 1;
1000 mtd->flags = MTD_CAP_NORFLASH; 969 mtd->flags = MTD_CAP_NORFLASH;
@@ -1018,6 +987,7 @@ int spi_nor_scan(struct spi_nor *nor, const struct spi_device_id *id,
1018 nor->wait_till_ready == spi_nor_wait_till_ready) 987 nor->wait_till_ready == spi_nor_wait_till_ready)
1019 nor->wait_till_ready = spi_nor_wait_till_fsr_ready; 988 nor->wait_till_ready = spi_nor_wait_till_fsr_ready;
1020 989
990#ifdef CONFIG_MTD_SPI_NOR_USE_4K_SECTORS
1021 /* prefer "small sector" erase if possible */ 991 /* prefer "small sector" erase if possible */
1022 if (info->flags & SECT_4K) { 992 if (info->flags & SECT_4K) {
1023 nor->erase_opcode = SPINOR_OP_BE_4K; 993 nor->erase_opcode = SPINOR_OP_BE_4K;
@@ -1025,7 +995,9 @@ int spi_nor_scan(struct spi_nor *nor, const struct spi_device_id *id,
1025 } else if (info->flags & SECT_4K_PMC) { 995 } else if (info->flags & SECT_4K_PMC) {
1026 nor->erase_opcode = SPINOR_OP_BE_4K_PMC; 996 nor->erase_opcode = SPINOR_OP_BE_4K_PMC;
1027 mtd->erasesize = 4096; 997 mtd->erasesize = 4096;
1028 } else { 998 } else
999#endif
1000 {
1029 nor->erase_opcode = SPINOR_OP_SE; 1001 nor->erase_opcode = SPINOR_OP_SE;
1030 mtd->erasesize = info->sector_size; 1002 mtd->erasesize = info->sector_size;
1031 } 1003 }
diff --git a/drivers/mtd/tests/mtd_test.c b/drivers/mtd/tests/mtd_test.c
index 111ee46a7428..34736bbcc07b 100644
--- a/drivers/mtd/tests/mtd_test.c
+++ b/drivers/mtd/tests/mtd_test.c
@@ -10,7 +10,7 @@ int mtdtest_erase_eraseblock(struct mtd_info *mtd, unsigned int ebnum)
10{ 10{
11 int err; 11 int err;
12 struct erase_info ei; 12 struct erase_info ei;
13 loff_t addr = ebnum * mtd->erasesize; 13 loff_t addr = (loff_t)ebnum * mtd->erasesize;
14 14
15 memset(&ei, 0, sizeof(struct erase_info)); 15 memset(&ei, 0, sizeof(struct erase_info));
16 ei.mtd = mtd; 16 ei.mtd = mtd;
@@ -33,7 +33,7 @@ int mtdtest_erase_eraseblock(struct mtd_info *mtd, unsigned int ebnum)
33static int is_block_bad(struct mtd_info *mtd, unsigned int ebnum) 33static int is_block_bad(struct mtd_info *mtd, unsigned int ebnum)
34{ 34{
35 int ret; 35 int ret;
36 loff_t addr = ebnum * mtd->erasesize; 36 loff_t addr = (loff_t)ebnum * mtd->erasesize;
37 37
38 ret = mtd_block_isbad(mtd, addr); 38 ret = mtd_block_isbad(mtd, addr);
39 if (ret) 39 if (ret)
diff --git a/drivers/mtd/tests/nandbiterrs.c b/drivers/mtd/tests/nandbiterrs.c
index 6f976159611f..273f7e553954 100644
--- a/drivers/mtd/tests/nandbiterrs.c
+++ b/drivers/mtd/tests/nandbiterrs.c
@@ -364,7 +364,7 @@ static int __init mtd_nandbiterrs_init(void)
364 364
365 pr_info("Device uses %d subpages of %d bytes\n", subcount, subsize); 365 pr_info("Device uses %d subpages of %d bytes\n", subcount, subsize);
366 366
367 offset = page_offset * mtd->writesize; 367 offset = (loff_t)page_offset * mtd->writesize;
368 eraseblock = mtd_div_by_eb(offset, mtd); 368 eraseblock = mtd_div_by_eb(offset, mtd);
369 369
370 pr_info("Using page=%u, offset=%llu, eraseblock=%u\n", 370 pr_info("Using page=%u, offset=%llu, eraseblock=%u\n",
diff --git a/drivers/mtd/tests/oobtest.c b/drivers/mtd/tests/oobtest.c
index f19ab1acde1f..dc4f9602b97e 100644
--- a/drivers/mtd/tests/oobtest.c
+++ b/drivers/mtd/tests/oobtest.c
@@ -120,7 +120,7 @@ static int verify_eraseblock(int ebnum)
120 int i; 120 int i;
121 struct mtd_oob_ops ops; 121 struct mtd_oob_ops ops;
122 int err = 0; 122 int err = 0;
123 loff_t addr = ebnum * mtd->erasesize; 123 loff_t addr = (loff_t)ebnum * mtd->erasesize;
124 124
125 prandom_bytes_state(&rnd_state, writebuf, use_len_max * pgcnt); 125 prandom_bytes_state(&rnd_state, writebuf, use_len_max * pgcnt);
126 for (i = 0; i < pgcnt; ++i, addr += mtd->writesize) { 126 for (i = 0; i < pgcnt; ++i, addr += mtd->writesize) {
@@ -214,7 +214,7 @@ static int verify_eraseblock_in_one_go(int ebnum)
214{ 214{
215 struct mtd_oob_ops ops; 215 struct mtd_oob_ops ops;
216 int err = 0; 216 int err = 0;
217 loff_t addr = ebnum * mtd->erasesize; 217 loff_t addr = (loff_t)ebnum * mtd->erasesize;
218 size_t len = mtd->ecclayout->oobavail * pgcnt; 218 size_t len = mtd->ecclayout->oobavail * pgcnt;
219 219
220 prandom_bytes_state(&rnd_state, writebuf, len); 220 prandom_bytes_state(&rnd_state, writebuf, len);
@@ -568,7 +568,7 @@ static int __init mtd_oobtest_init(void)
568 size_t sz = mtd->ecclayout->oobavail; 568 size_t sz = mtd->ecclayout->oobavail;
569 if (bbt[i] || bbt[i + 1]) 569 if (bbt[i] || bbt[i + 1])
570 continue; 570 continue;
571 addr = (i + 1) * mtd->erasesize - mtd->writesize; 571 addr = (loff_t)(i + 1) * mtd->erasesize - mtd->writesize;
572 prandom_bytes_state(&rnd_state, writebuf, sz * cnt); 572 prandom_bytes_state(&rnd_state, writebuf, sz * cnt);
573 for (pg = 0; pg < cnt; ++pg) { 573 for (pg = 0; pg < cnt; ++pg) {
574 ops.mode = MTD_OPS_AUTO_OOB; 574 ops.mode = MTD_OPS_AUTO_OOB;
@@ -598,7 +598,7 @@ static int __init mtd_oobtest_init(void)
598 continue; 598 continue;
599 prandom_bytes_state(&rnd_state, writebuf, 599 prandom_bytes_state(&rnd_state, writebuf,
600 mtd->ecclayout->oobavail * 2); 600 mtd->ecclayout->oobavail * 2);
601 addr = (i + 1) * mtd->erasesize - mtd->writesize; 601 addr = (loff_t)(i + 1) * mtd->erasesize - mtd->writesize;
602 ops.mode = MTD_OPS_AUTO_OOB; 602 ops.mode = MTD_OPS_AUTO_OOB;
603 ops.len = 0; 603 ops.len = 0;
604 ops.retlen = 0; 604 ops.retlen = 0;
diff --git a/drivers/mtd/tests/pagetest.c b/drivers/mtd/tests/pagetest.c
index ed2d3f656fd2..88296e888e9d 100644
--- a/drivers/mtd/tests/pagetest.c
+++ b/drivers/mtd/tests/pagetest.c
@@ -52,7 +52,7 @@ static struct rnd_state rnd_state;
52 52
53static int write_eraseblock(int ebnum) 53static int write_eraseblock(int ebnum)
54{ 54{
55 loff_t addr = ebnum * mtd->erasesize; 55 loff_t addr = (loff_t)ebnum * mtd->erasesize;
56 56
57 prandom_bytes_state(&rnd_state, writebuf, mtd->erasesize); 57 prandom_bytes_state(&rnd_state, writebuf, mtd->erasesize);
58 cond_resched(); 58 cond_resched();
@@ -64,7 +64,7 @@ static int verify_eraseblock(int ebnum)
64 uint32_t j; 64 uint32_t j;
65 int err = 0, i; 65 int err = 0, i;
66 loff_t addr0, addrn; 66 loff_t addr0, addrn;
67 loff_t addr = ebnum * mtd->erasesize; 67 loff_t addr = (loff_t)ebnum * mtd->erasesize;
68 68
69 addr0 = 0; 69 addr0 = 0;
70 for (i = 0; i < ebcnt && bbt[i]; ++i) 70 for (i = 0; i < ebcnt && bbt[i]; ++i)
diff --git a/drivers/mtd/tests/readtest.c b/drivers/mtd/tests/readtest.c
index 626e66d0f7e7..a54cf1511114 100644
--- a/drivers/mtd/tests/readtest.c
+++ b/drivers/mtd/tests/readtest.c
@@ -47,7 +47,7 @@ static int pgcnt;
47static int read_eraseblock_by_page(int ebnum) 47static int read_eraseblock_by_page(int ebnum)
48{ 48{
49 int i, ret, err = 0; 49 int i, ret, err = 0;
50 loff_t addr = ebnum * mtd->erasesize; 50 loff_t addr = (loff_t)ebnum * mtd->erasesize;
51 void *buf = iobuf; 51 void *buf = iobuf;
52 void *oobbuf = iobuf1; 52 void *oobbuf = iobuf1;
53 53
diff --git a/drivers/mtd/tests/speedtest.c b/drivers/mtd/tests/speedtest.c
index 87ff6a29f84e..5ee9f7021020 100644
--- a/drivers/mtd/tests/speedtest.c
+++ b/drivers/mtd/tests/speedtest.c
@@ -55,7 +55,7 @@ static int multiblock_erase(int ebnum, int blocks)
55{ 55{
56 int err; 56 int err;
57 struct erase_info ei; 57 struct erase_info ei;
58 loff_t addr = ebnum * mtd->erasesize; 58 loff_t addr = (loff_t)ebnum * mtd->erasesize;
59 59
60 memset(&ei, 0, sizeof(struct erase_info)); 60 memset(&ei, 0, sizeof(struct erase_info));
61 ei.mtd = mtd; 61 ei.mtd = mtd;
@@ -80,7 +80,7 @@ static int multiblock_erase(int ebnum, int blocks)
80 80
81static int write_eraseblock(int ebnum) 81static int write_eraseblock(int ebnum)
82{ 82{
83 loff_t addr = ebnum * mtd->erasesize; 83 loff_t addr = (loff_t)ebnum * mtd->erasesize;
84 84
85 return mtdtest_write(mtd, addr, mtd->erasesize, iobuf); 85 return mtdtest_write(mtd, addr, mtd->erasesize, iobuf);
86} 86}
@@ -88,7 +88,7 @@ static int write_eraseblock(int ebnum)
88static int write_eraseblock_by_page(int ebnum) 88static int write_eraseblock_by_page(int ebnum)
89{ 89{
90 int i, err = 0; 90 int i, err = 0;
91 loff_t addr = ebnum * mtd->erasesize; 91 loff_t addr = (loff_t)ebnum * mtd->erasesize;
92 void *buf = iobuf; 92 void *buf = iobuf;
93 93
94 for (i = 0; i < pgcnt; i++) { 94 for (i = 0; i < pgcnt; i++) {
@@ -106,7 +106,7 @@ static int write_eraseblock_by_2pages(int ebnum)
106{ 106{
107 size_t sz = pgsize * 2; 107 size_t sz = pgsize * 2;
108 int i, n = pgcnt / 2, err = 0; 108 int i, n = pgcnt / 2, err = 0;
109 loff_t addr = ebnum * mtd->erasesize; 109 loff_t addr = (loff_t)ebnum * mtd->erasesize;
110 void *buf = iobuf; 110 void *buf = iobuf;
111 111
112 for (i = 0; i < n; i++) { 112 for (i = 0; i < n; i++) {
@@ -124,7 +124,7 @@ static int write_eraseblock_by_2pages(int ebnum)
124 124
125static int read_eraseblock(int ebnum) 125static int read_eraseblock(int ebnum)
126{ 126{
127 loff_t addr = ebnum * mtd->erasesize; 127 loff_t addr = (loff_t)ebnum * mtd->erasesize;
128 128
129 return mtdtest_read(mtd, addr, mtd->erasesize, iobuf); 129 return mtdtest_read(mtd, addr, mtd->erasesize, iobuf);
130} 130}
@@ -132,7 +132,7 @@ static int read_eraseblock(int ebnum)
132static int read_eraseblock_by_page(int ebnum) 132static int read_eraseblock_by_page(int ebnum)
133{ 133{
134 int i, err = 0; 134 int i, err = 0;
135 loff_t addr = ebnum * mtd->erasesize; 135 loff_t addr = (loff_t)ebnum * mtd->erasesize;
136 void *buf = iobuf; 136 void *buf = iobuf;
137 137
138 for (i = 0; i < pgcnt; i++) { 138 for (i = 0; i < pgcnt; i++) {
@@ -150,7 +150,7 @@ static int read_eraseblock_by_2pages(int ebnum)
150{ 150{
151 size_t sz = pgsize * 2; 151 size_t sz = pgsize * 2;
152 int i, n = pgcnt / 2, err = 0; 152 int i, n = pgcnt / 2, err = 0;
153 loff_t addr = ebnum * mtd->erasesize; 153 loff_t addr = (loff_t)ebnum * mtd->erasesize;
154 void *buf = iobuf; 154 void *buf = iobuf;
155 155
156 for (i = 0; i < n; i++) { 156 for (i = 0; i < n; i++) {
diff --git a/drivers/mtd/tests/subpagetest.c b/drivers/mtd/tests/subpagetest.c
index a876371ad410..7b59ef522d5e 100644
--- a/drivers/mtd/tests/subpagetest.c
+++ b/drivers/mtd/tests/subpagetest.c
@@ -57,7 +57,7 @@ static int write_eraseblock(int ebnum)
57{ 57{
58 size_t written; 58 size_t written;
59 int err = 0; 59 int err = 0;
60 loff_t addr = ebnum * mtd->erasesize; 60 loff_t addr = (loff_t)ebnum * mtd->erasesize;
61 61
62 prandom_bytes_state(&rnd_state, writebuf, subpgsize); 62 prandom_bytes_state(&rnd_state, writebuf, subpgsize);
63 err = mtd_write(mtd, addr, subpgsize, &written, writebuf); 63 err = mtd_write(mtd, addr, subpgsize, &written, writebuf);
@@ -92,7 +92,7 @@ static int write_eraseblock2(int ebnum)
92{ 92{
93 size_t written; 93 size_t written;
94 int err = 0, k; 94 int err = 0, k;
95 loff_t addr = ebnum * mtd->erasesize; 95 loff_t addr = (loff_t)ebnum * mtd->erasesize;
96 96
97 for (k = 1; k < 33; ++k) { 97 for (k = 1; k < 33; ++k) {
98 if (addr + (subpgsize * k) > (ebnum + 1) * mtd->erasesize) 98 if (addr + (subpgsize * k) > (ebnum + 1) * mtd->erasesize)
@@ -131,7 +131,7 @@ static int verify_eraseblock(int ebnum)
131{ 131{
132 size_t read; 132 size_t read;
133 int err = 0; 133 int err = 0;
134 loff_t addr = ebnum * mtd->erasesize; 134 loff_t addr = (loff_t)ebnum * mtd->erasesize;
135 135
136 prandom_bytes_state(&rnd_state, writebuf, subpgsize); 136 prandom_bytes_state(&rnd_state, writebuf, subpgsize);
137 clear_data(readbuf, subpgsize); 137 clear_data(readbuf, subpgsize);
@@ -192,7 +192,7 @@ static int verify_eraseblock2(int ebnum)
192{ 192{
193 size_t read; 193 size_t read;
194 int err = 0, k; 194 int err = 0, k;
195 loff_t addr = ebnum * mtd->erasesize; 195 loff_t addr = (loff_t)ebnum * mtd->erasesize;
196 196
197 for (k = 1; k < 33; ++k) { 197 for (k = 1; k < 33; ++k) {
198 if (addr + (subpgsize * k) > (ebnum + 1) * mtd->erasesize) 198 if (addr + (subpgsize * k) > (ebnum + 1) * mtd->erasesize)
@@ -227,7 +227,7 @@ static int verify_eraseblock_ff(int ebnum)
227 uint32_t j; 227 uint32_t j;
228 size_t read; 228 size_t read;
229 int err = 0; 229 int err = 0;
230 loff_t addr = ebnum * mtd->erasesize; 230 loff_t addr = (loff_t)ebnum * mtd->erasesize;
231 231
232 memset(writebuf, 0xff, subpgsize); 232 memset(writebuf, 0xff, subpgsize);
233 for (j = 0; j < mtd->erasesize / subpgsize; ++j) { 233 for (j = 0; j < mtd->erasesize / subpgsize; ++j) {
diff --git a/include/linux/mtd/cfi.h b/include/linux/mtd/cfi.h
index 37ef6b194089..299d7d31fe53 100644
--- a/include/linux/mtd/cfi.h
+++ b/include/linux/mtd/cfi.h
@@ -153,7 +153,7 @@ struct cfi_ident {
153 uint16_t MaxBufWriteSize; 153 uint16_t MaxBufWriteSize;
154 uint8_t NumEraseRegions; 154 uint8_t NumEraseRegions;
155 uint32_t EraseRegionInfo[0]; /* Not host ordered */ 155 uint32_t EraseRegionInfo[0]; /* Not host ordered */
156} __attribute__((packed)); 156} __packed;
157 157
158/* Extended Query Structure for both PRI and ALT */ 158/* Extended Query Structure for both PRI and ALT */
159 159
@@ -161,7 +161,7 @@ struct cfi_extquery {
161 uint8_t pri[3]; 161 uint8_t pri[3];
162 uint8_t MajorVersion; 162 uint8_t MajorVersion;
163 uint8_t MinorVersion; 163 uint8_t MinorVersion;
164} __attribute__((packed)); 164} __packed;
165 165
166/* Vendor-Specific PRI for Intel/Sharp Extended Command Set (0x0001) */ 166/* Vendor-Specific PRI for Intel/Sharp Extended Command Set (0x0001) */
167 167
@@ -180,7 +180,7 @@ struct cfi_pri_intelext {
180 uint8_t FactProtRegSize; 180 uint8_t FactProtRegSize;
181 uint8_t UserProtRegSize; 181 uint8_t UserProtRegSize;
182 uint8_t extra[0]; 182 uint8_t extra[0];
183} __attribute__((packed)); 183} __packed;
184 184
185struct cfi_intelext_otpinfo { 185struct cfi_intelext_otpinfo {
186 uint32_t ProtRegAddr; 186 uint32_t ProtRegAddr;
@@ -188,7 +188,7 @@ struct cfi_intelext_otpinfo {
188 uint8_t FactProtRegSize; 188 uint8_t FactProtRegSize;
189 uint16_t UserGroups; 189 uint16_t UserGroups;
190 uint8_t UserProtRegSize; 190 uint8_t UserProtRegSize;
191} __attribute__((packed)); 191} __packed;
192 192
193struct cfi_intelext_blockinfo { 193struct cfi_intelext_blockinfo {
194 uint16_t NumIdentBlocks; 194 uint16_t NumIdentBlocks;
@@ -196,7 +196,7 @@ struct cfi_intelext_blockinfo {
196 uint16_t MinBlockEraseCycles; 196 uint16_t MinBlockEraseCycles;
197 uint8_t BitsPerCell; 197 uint8_t BitsPerCell;
198 uint8_t BlockCap; 198 uint8_t BlockCap;
199} __attribute__((packed)); 199} __packed;
200 200
201struct cfi_intelext_regioninfo { 201struct cfi_intelext_regioninfo {
202 uint16_t NumIdentPartitions; 202 uint16_t NumIdentPartitions;
@@ -205,7 +205,7 @@ struct cfi_intelext_regioninfo {
205 uint8_t NumOpAllowedSimEraMode; 205 uint8_t NumOpAllowedSimEraMode;
206 uint8_t NumBlockTypes; 206 uint8_t NumBlockTypes;
207 struct cfi_intelext_blockinfo BlockTypes[1]; 207 struct cfi_intelext_blockinfo BlockTypes[1];
208} __attribute__((packed)); 208} __packed;
209 209
210struct cfi_intelext_programming_regioninfo { 210struct cfi_intelext_programming_regioninfo {
211 uint8_t ProgRegShift; 211 uint8_t ProgRegShift;
@@ -214,7 +214,7 @@ struct cfi_intelext_programming_regioninfo {
214 uint8_t Reserved2; 214 uint8_t Reserved2;
215 uint8_t ControlInvalid; 215 uint8_t ControlInvalid;
216 uint8_t Reserved3; 216 uint8_t Reserved3;
217} __attribute__((packed)); 217} __packed;
218 218
219/* Vendor-Specific PRI for AMD/Fujitsu Extended Command Set (0x0002) */ 219/* Vendor-Specific PRI for AMD/Fujitsu Extended Command Set (0x0002) */
220 220
@@ -233,7 +233,7 @@ struct cfi_pri_amdstd {
233 uint8_t VppMin; 233 uint8_t VppMin;
234 uint8_t VppMax; 234 uint8_t VppMax;
235 uint8_t TopBottom; 235 uint8_t TopBottom;
236} __attribute__((packed)); 236} __packed;
237 237
238/* Vendor-Specific PRI for Atmel chips (command set 0x0002) */ 238/* Vendor-Specific PRI for Atmel chips (command set 0x0002) */
239 239
@@ -245,18 +245,18 @@ struct cfi_pri_atmel {
245 uint8_t BottomBoot; 245 uint8_t BottomBoot;
246 uint8_t BurstMode; 246 uint8_t BurstMode;
247 uint8_t PageMode; 247 uint8_t PageMode;
248} __attribute__((packed)); 248} __packed;
249 249
250struct cfi_pri_query { 250struct cfi_pri_query {
251 uint8_t NumFields; 251 uint8_t NumFields;
252 uint32_t ProtField[1]; /* Not host ordered */ 252 uint32_t ProtField[1]; /* Not host ordered */
253} __attribute__((packed)); 253} __packed;
254 254
255struct cfi_bri_query { 255struct cfi_bri_query {
256 uint8_t PageModeReadCap; 256 uint8_t PageModeReadCap;
257 uint8_t NumFields; 257 uint8_t NumFields;
258 uint32_t ConfField[1]; /* Not host ordered */ 258 uint32_t ConfField[1]; /* Not host ordered */
259} __attribute__((packed)); 259} __packed;
260 260
261#define P_ID_NONE 0x0000 261#define P_ID_NONE 0x0000
262#define P_ID_INTEL_EXT 0x0001 262#define P_ID_INTEL_EXT 0x0001
diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
index c300db3ae285..e4d451e4600b 100644
--- a/include/linux/mtd/nand.h
+++ b/include/linux/mtd/nand.h
@@ -587,6 +587,11 @@ struct nand_buffers {
587 * @ecc_step_ds: [INTERN] ECC step required by the @ecc_strength_ds, 587 * @ecc_step_ds: [INTERN] ECC step required by the @ecc_strength_ds,
588 * also from the datasheet. It is the recommended ECC step 588 * also from the datasheet. It is the recommended ECC step
589 * size, if known; if unknown, set to zero. 589 * size, if known; if unknown, set to zero.
590 * @onfi_timing_mode_default: [INTERN] default ONFI timing mode. This field is
591 * either deduced from the datasheet if the NAND
592 * chip is not ONFI compliant or set to 0 if it is
593 * (an ONFI chip is always configured in mode 0
594 * after a NAND reset)
590 * @numchips: [INTERN] number of physical chips 595 * @numchips: [INTERN] number of physical chips
591 * @chipsize: [INTERN] the size of one chip for multichip arrays 596 * @chipsize: [INTERN] the size of one chip for multichip arrays
592 * @pagemask: [INTERN] page number mask = number of (pages / chip) - 1 597 * @pagemask: [INTERN] page number mask = number of (pages / chip) - 1
@@ -671,6 +676,7 @@ struct nand_chip {
671 uint8_t bits_per_cell; 676 uint8_t bits_per_cell;
672 uint16_t ecc_strength_ds; 677 uint16_t ecc_strength_ds;
673 uint16_t ecc_step_ds; 678 uint16_t ecc_step_ds;
679 int onfi_timing_mode_default;
674 int badblockpos; 680 int badblockpos;
675 int badblockbits; 681 int badblockbits;
676 682
@@ -766,12 +772,17 @@ struct nand_chip {
766 * @options: stores various chip bit options 772 * @options: stores various chip bit options
767 * @id_len: The valid length of the @id. 773 * @id_len: The valid length of the @id.
768 * @oobsize: OOB size 774 * @oobsize: OOB size
775 * @ecc: ECC correctability and step information from the datasheet.
769 * @ecc.strength_ds: The ECC correctability from the datasheet, same as the 776 * @ecc.strength_ds: The ECC correctability from the datasheet, same as the
770 * @ecc_strength_ds in nand_chip{}. 777 * @ecc_strength_ds in nand_chip{}.
771 * @ecc.step_ds: The ECC step required by the @ecc.strength_ds, same as the 778 * @ecc.step_ds: The ECC step required by the @ecc.strength_ds, same as the
772 * @ecc_step_ds in nand_chip{}, also from the datasheet. 779 * @ecc_step_ds in nand_chip{}, also from the datasheet.
773 * For example, the "4bit ECC for each 512Byte" can be set with 780 * For example, the "4bit ECC for each 512Byte" can be set with
774 * NAND_ECC_INFO(4, 512). 781 * NAND_ECC_INFO(4, 512).
782 * @onfi_timing_mode_default: the default ONFI timing mode entered after a NAND
783 * reset. Should be deduced from timings described
784 * in the datasheet.
785 *
775 */ 786 */
776struct nand_flash_dev { 787struct nand_flash_dev {
777 char *name; 788 char *name;
@@ -792,6 +803,7 @@ struct nand_flash_dev {
792 uint16_t strength_ds; 803 uint16_t strength_ds;
793 uint16_t step_ds; 804 uint16_t step_ds;
794 } ecc; 805 } ecc;
806 int onfi_timing_mode_default;
795}; 807};
796 808
797/** 809/**
diff --git a/include/linux/platform_data/elm.h b/include/linux/platform_data/elm.h
index 780d1e97f620..b8686c00f15f 100644
--- a/include/linux/platform_data/elm.h
+++ b/include/linux/platform_data/elm.h
@@ -42,8 +42,24 @@ struct elm_errorvec {
42 int error_loc[16]; 42 int error_loc[16];
43}; 43};
44 44
45#if IS_ENABLED(CONFIG_MTD_NAND_OMAP_BCH)
45void elm_decode_bch_error_page(struct device *dev, u8 *ecc_calc, 46void elm_decode_bch_error_page(struct device *dev, u8 *ecc_calc,
46 struct elm_errorvec *err_vec); 47 struct elm_errorvec *err_vec);
47int elm_config(struct device *dev, enum bch_ecc bch_type, 48int elm_config(struct device *dev, enum bch_ecc bch_type,
48 int ecc_steps, int ecc_step_size, int ecc_syndrome_size); 49 int ecc_steps, int ecc_step_size, int ecc_syndrome_size);
50#else
51static inline void
52elm_decode_bch_error_page(struct device *dev, u8 *ecc_calc,
53 struct elm_errorvec *err_vec)
54{
55}
56
57static inline int elm_config(struct device *dev, enum bch_ecc bch_type,
58 int ecc_steps, int ecc_step_size,
59 int ecc_syndrome_size)
60{
61 return -ENOSYS;
62}
63#endif /* CONFIG_MTD_NAND_ECC_BCH */
64
49#endif /* __ELM_H */ 65#endif /* __ELM_H */
diff --git a/include/linux/platform_data/mtd-nand-omap2.h b/include/linux/platform_data/mtd-nand-omap2.h
index 16ec262dfcc8..090bbab0130a 100644
--- a/include/linux/platform_data/mtd-nand-omap2.h
+++ b/include/linux/platform_data/mtd-nand-omap2.h
@@ -71,6 +71,7 @@ struct omap_nand_platform_data {
71 struct mtd_partition *parts; 71 struct mtd_partition *parts;
72 int nr_parts; 72 int nr_parts;
73 bool dev_ready; 73 bool dev_ready;
74 bool flash_bbt;
74 enum nand_io xfer_type; 75 enum nand_io xfer_type;
75 int devsize; 76 int devsize;
76 enum omap_ecc ecc_opt; 77 enum omap_ecc ecc_opt;