1 // SPDX-License-Identifier: GPL-2.0
4 * Flexible Static Memory Controller (FSMC)
5 * Driver for NAND portions
7 * Copyright © 2010 ST Microelectronics
8 * Vipin Kumar <vipin.kumar@st.com>
11 * Based on drivers/mtd/nand/nomadik_nand.c (removed in v3.8)
12 * Copyright © 2007 STMicroelectronics Pvt. Ltd.
13 * Copyright © 2009 Alessandro Rubini
16 #include <linux/clk.h>
17 #include <linux/completion.h>
18 #include <linux/dmaengine.h>
19 #include <linux/dma-direction.h>
20 #include <linux/dma-mapping.h>
21 #include <linux/err.h>
22 #include <linux/init.h>
23 #include <linux/module.h>
24 #include <linux/resource.h>
25 #include <linux/sched.h>
26 #include <linux/types.h>
27 #include <linux/mtd/mtd.h>
28 #include <linux/mtd/rawnand.h>
29 #include <linux/mtd/nand_ecc.h>
30 #include <linux/platform_device.h>
32 #include <linux/mtd/partitions.h>
34 #include <linux/slab.h>
35 #include <linux/amba/bus.h>
36 #include <mtd/mtd-abi.h>
38 /* fsmc controller registers for NOR flash */
40 /* ctrl register definitions */
41 #define BANK_ENABLE BIT(0)
43 #define NOR_DEV (2 << 2)
44 #define WIDTH_16 BIT(4)
45 #define RSTPWRDWN BIT(6)
47 #define WRT_ENABLE BIT(12)
48 #define WAIT_ENB BIT(13)
51 /* ctrl_tim register definitions */
53 #define FSMC_NOR_BANK_SZ 0x8
54 #define FSMC_NOR_REG_SIZE 0x40
56 #define FSMC_NOR_REG(base, bank, reg) ((base) + \
57 (FSMC_NOR_BANK_SZ * (bank)) + \
60 /* fsmc controller registers for NAND flash */
62 /* pc register definitions */
63 #define FSMC_RESET BIT(0)
64 #define FSMC_WAITON BIT(1)
65 #define FSMC_ENABLE BIT(2)
66 #define FSMC_DEVTYPE_NAND BIT(3)
67 #define FSMC_DEVWID_16 BIT(4)
68 #define FSMC_ECCEN BIT(6)
69 #define FSMC_ECCPLEN_256 BIT(7)
70 #define FSMC_TCLR_SHIFT (9)
71 #define FSMC_TCLR_MASK (0xF)
72 #define FSMC_TAR_SHIFT (13)
73 #define FSMC_TAR_MASK (0xF)
75 /* sts register definitions */
76 #define FSMC_CODE_RDY BIT(15)
78 /* comm register definitions */
79 #define FSMC_TSET_SHIFT 0
80 #define FSMC_TSET_MASK 0xFF
81 #define FSMC_TWAIT_SHIFT 8
82 #define FSMC_TWAIT_MASK 0xFF
83 #define FSMC_THOLD_SHIFT 16
84 #define FSMC_THOLD_MASK 0xFF
85 #define FSMC_THIZ_SHIFT 24
86 #define FSMC_THIZ_MASK 0xFF
92 #define FSMC_NAND_BANK_SZ 0x20
94 #define FSMC_BUSY_WAIT_TIMEOUT (1 * HZ)
96 struct fsmc_nand_timings
{
111 * struct fsmc_nand_data - structure for FSMC NAND device state
113 * @base: Inherit from the nand_controller struct
114 * @pid: Part ID on the AMBA PrimeCell format
115 * @nand: Chip related info for a NAND flash.
117 * @bank: Bank number for probed device.
118 * @dev: Parent device
120 * @clk: Clock structure for FSMC.
122 * @read_dma_chan: DMA channel for read access
123 * @write_dma_chan: DMA channel for write access to NAND
124 * @dma_access_complete: Completion structure
126 * @dev_timings: NAND timings
128 * @data_pa: NAND Physical port for Data.
129 * @data_va: NAND port for Data.
130 * @cmd_va: NAND port for Command.
131 * @addr_va: NAND port for Address.
132 * @regs_va: Registers base address for a given bank.
134 struct fsmc_nand_data
{
135 struct nand_controller base
;
137 struct nand_chip nand
;
141 enum access_mode mode
;
144 /* DMA related objects */
145 struct dma_chan
*read_dma_chan
;
146 struct dma_chan
*write_dma_chan
;
147 struct completion dma_access_complete
;
149 struct fsmc_nand_timings
*dev_timings
;
152 void __iomem
*data_va
;
153 void __iomem
*cmd_va
;
154 void __iomem
*addr_va
;
155 void __iomem
*regs_va
;
158 static int fsmc_ecc1_ooblayout_ecc(struct mtd_info
*mtd
, int section
,
159 struct mtd_oob_region
*oobregion
)
161 struct nand_chip
*chip
= mtd_to_nand(mtd
);
163 if (section
>= chip
->ecc
.steps
)
166 oobregion
->offset
= (section
* 16) + 2;
167 oobregion
->length
= 3;
172 static int fsmc_ecc1_ooblayout_free(struct mtd_info
*mtd
, int section
,
173 struct mtd_oob_region
*oobregion
)
175 struct nand_chip
*chip
= mtd_to_nand(mtd
);
177 if (section
>= chip
->ecc
.steps
)
180 oobregion
->offset
= (section
* 16) + 8;
182 if (section
< chip
->ecc
.steps
- 1)
183 oobregion
->length
= 8;
185 oobregion
->length
= mtd
->oobsize
- oobregion
->offset
;
190 static const struct mtd_ooblayout_ops fsmc_ecc1_ooblayout_ops
= {
191 .ecc
= fsmc_ecc1_ooblayout_ecc
,
192 .free
= fsmc_ecc1_ooblayout_free
,
196 * ECC placement definitions in oobfree type format.
197 * There are 13 bytes of ecc for every 512 byte block and it has to be read
198 * consecutively and immediately after the 512 byte data block for hardware to
199 * generate the error bit offsets in 512 byte data.
201 static int fsmc_ecc4_ooblayout_ecc(struct mtd_info
*mtd
, int section
,
202 struct mtd_oob_region
*oobregion
)
204 struct nand_chip
*chip
= mtd_to_nand(mtd
);
206 if (section
>= chip
->ecc
.steps
)
209 oobregion
->length
= chip
->ecc
.bytes
;
211 if (!section
&& mtd
->writesize
<= 512)
212 oobregion
->offset
= 0;
214 oobregion
->offset
= (section
* 16) + 2;
219 static int fsmc_ecc4_ooblayout_free(struct mtd_info
*mtd
, int section
,
220 struct mtd_oob_region
*oobregion
)
222 struct nand_chip
*chip
= mtd_to_nand(mtd
);
224 if (section
>= chip
->ecc
.steps
)
227 oobregion
->offset
= (section
* 16) + 15;
229 if (section
< chip
->ecc
.steps
- 1)
230 oobregion
->length
= 3;
232 oobregion
->length
= mtd
->oobsize
- oobregion
->offset
;
237 static const struct mtd_ooblayout_ops fsmc_ecc4_ooblayout_ops
= {
238 .ecc
= fsmc_ecc4_ooblayout_ecc
,
239 .free
= fsmc_ecc4_ooblayout_free
,
242 static inline struct fsmc_nand_data
*nand_to_fsmc(struct nand_chip
*chip
)
244 return container_of(chip
, struct fsmc_nand_data
, nand
);
248 * fsmc_nand_setup - FSMC (Flexible Static Memory Controller) init routine
250 * This routine initializes timing parameters related to NAND memory access in
253 static void fsmc_nand_setup(struct fsmc_nand_data
*host
,
254 struct fsmc_nand_timings
*tims
)
256 u32 value
= FSMC_DEVTYPE_NAND
| FSMC_ENABLE
| FSMC_WAITON
;
257 u32 tclr
, tar
, thiz
, thold
, twait
, tset
;
259 tclr
= (tims
->tclr
& FSMC_TCLR_MASK
) << FSMC_TCLR_SHIFT
;
260 tar
= (tims
->tar
& FSMC_TAR_MASK
) << FSMC_TAR_SHIFT
;
261 thiz
= (tims
->thiz
& FSMC_THIZ_MASK
) << FSMC_THIZ_SHIFT
;
262 thold
= (tims
->thold
& FSMC_THOLD_MASK
) << FSMC_THOLD_SHIFT
;
263 twait
= (tims
->twait
& FSMC_TWAIT_MASK
) << FSMC_TWAIT_SHIFT
;
264 tset
= (tims
->tset
& FSMC_TSET_MASK
) << FSMC_TSET_SHIFT
;
266 if (host
->nand
.options
& NAND_BUSWIDTH_16
)
267 value
|= FSMC_DEVWID_16
;
269 writel_relaxed(value
| tclr
| tar
, host
->regs_va
+ FSMC_PC
);
270 writel_relaxed(thiz
| thold
| twait
| tset
, host
->regs_va
+ COMM
);
271 writel_relaxed(thiz
| thold
| twait
| tset
, host
->regs_va
+ ATTRIB
);
274 static int fsmc_calc_timings(struct fsmc_nand_data
*host
,
275 const struct nand_sdr_timings
*sdrt
,
276 struct fsmc_nand_timings
*tims
)
278 unsigned long hclk
= clk_get_rate(host
->clk
);
279 unsigned long hclkn
= NSEC_PER_SEC
/ hclk
;
280 u32 thiz
, thold
, twait
, tset
;
282 if (sdrt
->tRC_min
< 30000)
285 tims
->tar
= DIV_ROUND_UP(sdrt
->tAR_min
/ 1000, hclkn
) - 1;
286 if (tims
->tar
> FSMC_TAR_MASK
)
287 tims
->tar
= FSMC_TAR_MASK
;
288 tims
->tclr
= DIV_ROUND_UP(sdrt
->tCLR_min
/ 1000, hclkn
) - 1;
289 if (tims
->tclr
> FSMC_TCLR_MASK
)
290 tims
->tclr
= FSMC_TCLR_MASK
;
292 thiz
= sdrt
->tCS_min
- sdrt
->tWP_min
;
293 tims
->thiz
= DIV_ROUND_UP(thiz
/ 1000, hclkn
);
295 thold
= sdrt
->tDH_min
;
296 if (thold
< sdrt
->tCH_min
)
297 thold
= sdrt
->tCH_min
;
298 if (thold
< sdrt
->tCLH_min
)
299 thold
= sdrt
->tCLH_min
;
300 if (thold
< sdrt
->tWH_min
)
301 thold
= sdrt
->tWH_min
;
302 if (thold
< sdrt
->tALH_min
)
303 thold
= sdrt
->tALH_min
;
304 if (thold
< sdrt
->tREH_min
)
305 thold
= sdrt
->tREH_min
;
306 tims
->thold
= DIV_ROUND_UP(thold
/ 1000, hclkn
);
307 if (tims
->thold
== 0)
309 else if (tims
->thold
> FSMC_THOLD_MASK
)
310 tims
->thold
= FSMC_THOLD_MASK
;
312 twait
= max(sdrt
->tRP_min
, sdrt
->tWP_min
);
313 tims
->twait
= DIV_ROUND_UP(twait
/ 1000, hclkn
) - 1;
314 if (tims
->twait
== 0)
316 else if (tims
->twait
> FSMC_TWAIT_MASK
)
317 tims
->twait
= FSMC_TWAIT_MASK
;
319 tset
= max(sdrt
->tCS_min
- sdrt
->tWP_min
,
320 sdrt
->tCEA_max
- sdrt
->tREA_max
);
321 tims
->tset
= DIV_ROUND_UP(tset
/ 1000, hclkn
) - 1;
324 else if (tims
->tset
> FSMC_TSET_MASK
)
325 tims
->tset
= FSMC_TSET_MASK
;
330 static int fsmc_setup_data_interface(struct nand_chip
*nand
, int csline
,
331 const struct nand_data_interface
*conf
)
333 struct fsmc_nand_data
*host
= nand_to_fsmc(nand
);
334 struct fsmc_nand_timings tims
;
335 const struct nand_sdr_timings
*sdrt
;
338 sdrt
= nand_get_sdr_timings(conf
);
340 return PTR_ERR(sdrt
);
342 ret
= fsmc_calc_timings(host
, sdrt
, &tims
);
346 if (csline
== NAND_DATA_IFACE_CHECK_ONLY
)
349 fsmc_nand_setup(host
, &tims
);
355 * fsmc_enable_hwecc - Enables Hardware ECC through FSMC registers
357 static void fsmc_enable_hwecc(struct nand_chip
*chip
, int mode
)
359 struct fsmc_nand_data
*host
= nand_to_fsmc(chip
);
361 writel_relaxed(readl(host
->regs_va
+ FSMC_PC
) & ~FSMC_ECCPLEN_256
,
362 host
->regs_va
+ FSMC_PC
);
363 writel_relaxed(readl(host
->regs_va
+ FSMC_PC
) & ~FSMC_ECCEN
,
364 host
->regs_va
+ FSMC_PC
);
365 writel_relaxed(readl(host
->regs_va
+ FSMC_PC
) | FSMC_ECCEN
,
366 host
->regs_va
+ FSMC_PC
);
370 * fsmc_read_hwecc_ecc4 - Hardware ECC calculator for ecc4 option supported by
371 * FSMC. ECC is 13 bytes for 512 bytes of data (supports error correction up to
374 static int fsmc_read_hwecc_ecc4(struct nand_chip
*chip
, const u8
*data
,
377 struct fsmc_nand_data
*host
= nand_to_fsmc(chip
);
379 unsigned long deadline
= jiffies
+ FSMC_BUSY_WAIT_TIMEOUT
;
382 if (readl_relaxed(host
->regs_va
+ STS
) & FSMC_CODE_RDY
)
386 } while (!time_after_eq(jiffies
, deadline
));
388 if (time_after_eq(jiffies
, deadline
)) {
389 dev_err(host
->dev
, "calculate ecc timed out\n");
393 ecc_tmp
= readl_relaxed(host
->regs_va
+ ECC1
);
395 ecc
[1] = ecc_tmp
>> 8;
396 ecc
[2] = ecc_tmp
>> 16;
397 ecc
[3] = ecc_tmp
>> 24;
399 ecc_tmp
= readl_relaxed(host
->regs_va
+ ECC2
);
401 ecc
[5] = ecc_tmp
>> 8;
402 ecc
[6] = ecc_tmp
>> 16;
403 ecc
[7] = ecc_tmp
>> 24;
405 ecc_tmp
= readl_relaxed(host
->regs_va
+ ECC3
);
407 ecc
[9] = ecc_tmp
>> 8;
408 ecc
[10] = ecc_tmp
>> 16;
409 ecc
[11] = ecc_tmp
>> 24;
411 ecc_tmp
= readl_relaxed(host
->regs_va
+ STS
);
412 ecc
[12] = ecc_tmp
>> 16;
418 * fsmc_read_hwecc_ecc1 - Hardware ECC calculator for ecc1 option supported by
419 * FSMC. ECC is 3 bytes for 512 bytes of data (supports error correction up to
422 static int fsmc_read_hwecc_ecc1(struct nand_chip
*chip
, const u8
*data
,
425 struct fsmc_nand_data
*host
= nand_to_fsmc(chip
);
428 ecc_tmp
= readl_relaxed(host
->regs_va
+ ECC1
);
430 ecc
[1] = ecc_tmp
>> 8;
431 ecc
[2] = ecc_tmp
>> 16;
436 /* Count the number of 0's in buff upto a max of max_bits */
437 static int count_written_bits(u8
*buff
, int size
, int max_bits
)
439 int k
, written_bits
= 0;
441 for (k
= 0; k
< size
; k
++) {
442 written_bits
+= hweight8(~buff
[k
]);
443 if (written_bits
> max_bits
)
450 static void dma_complete(void *param
)
452 struct fsmc_nand_data
*host
= param
;
454 complete(&host
->dma_access_complete
);
457 static int dma_xfer(struct fsmc_nand_data
*host
, void *buffer
, int len
,
458 enum dma_data_direction direction
)
460 struct dma_chan
*chan
;
461 struct dma_device
*dma_dev
;
462 struct dma_async_tx_descriptor
*tx
;
463 dma_addr_t dma_dst
, dma_src
, dma_addr
;
465 unsigned long flags
= DMA_CTRL_ACK
| DMA_PREP_INTERRUPT
;
467 unsigned long time_left
;
469 if (direction
== DMA_TO_DEVICE
)
470 chan
= host
->write_dma_chan
;
471 else if (direction
== DMA_FROM_DEVICE
)
472 chan
= host
->read_dma_chan
;
476 dma_dev
= chan
->device
;
477 dma_addr
= dma_map_single(dma_dev
->dev
, buffer
, len
, direction
);
479 if (direction
== DMA_TO_DEVICE
) {
481 dma_dst
= host
->data_pa
;
483 dma_src
= host
->data_pa
;
487 tx
= dma_dev
->device_prep_dma_memcpy(chan
, dma_dst
, dma_src
,
490 dev_err(host
->dev
, "device_prep_dma_memcpy error\n");
495 tx
->callback
= dma_complete
;
496 tx
->callback_param
= host
;
497 cookie
= tx
->tx_submit(tx
);
499 ret
= dma_submit_error(cookie
);
501 dev_err(host
->dev
, "dma_submit_error %d\n", cookie
);
505 dma_async_issue_pending(chan
);
508 wait_for_completion_timeout(&host
->dma_access_complete
,
509 msecs_to_jiffies(3000));
510 if (time_left
== 0) {
511 dmaengine_terminate_all(chan
);
512 dev_err(host
->dev
, "wait_for_completion_timeout\n");
520 dma_unmap_single(dma_dev
->dev
, dma_addr
, len
, direction
);
526 * fsmc_write_buf - write buffer to chip
527 * @host: FSMC NAND controller
529 * @len: number of bytes to write
531 static void fsmc_write_buf(struct fsmc_nand_data
*host
, const u8
*buf
,
536 if (IS_ALIGNED((uintptr_t)buf
, sizeof(u32
)) &&
537 IS_ALIGNED(len
, sizeof(u32
))) {
541 for (i
= 0; i
< len
; i
++)
542 writel_relaxed(p
[i
], host
->data_va
);
544 for (i
= 0; i
< len
; i
++)
545 writeb_relaxed(buf
[i
], host
->data_va
);
550 * fsmc_read_buf - read chip data into buffer
551 * @host: FSMC NAND controller
552 * @buf: buffer to store date
553 * @len: number of bytes to read
555 static void fsmc_read_buf(struct fsmc_nand_data
*host
, u8
*buf
, int len
)
559 if (IS_ALIGNED((uintptr_t)buf
, sizeof(u32
)) &&
560 IS_ALIGNED(len
, sizeof(u32
))) {
564 for (i
= 0; i
< len
; i
++)
565 p
[i
] = readl_relaxed(host
->data_va
);
567 for (i
= 0; i
< len
; i
++)
568 buf
[i
] = readb_relaxed(host
->data_va
);
573 * fsmc_read_buf_dma - read chip data into buffer
574 * @host: FSMC NAND controller
575 * @buf: buffer to store date
576 * @len: number of bytes to read
578 static void fsmc_read_buf_dma(struct fsmc_nand_data
*host
, u8
*buf
,
581 dma_xfer(host
, buf
, len
, DMA_FROM_DEVICE
);
585 * fsmc_write_buf_dma - write buffer to chip
586 * @host: FSMC NAND controller
588 * @len: number of bytes to write
590 static void fsmc_write_buf_dma(struct fsmc_nand_data
*host
, const u8
*buf
,
593 dma_xfer(host
, (void *)buf
, len
, DMA_TO_DEVICE
);
597 * fsmc_exec_op - hook called by the core to execute NAND operations
599 * This controller is simple enough and thus does not need to use the parser
600 * provided by the core, instead, handle every situation here.
602 static int fsmc_exec_op(struct nand_chip
*chip
, const struct nand_operation
*op
,
605 struct fsmc_nand_data
*host
= nand_to_fsmc(chip
);
606 const struct nand_op_instr
*instr
= NULL
;
611 pr_debug("Executing operation [%d instructions]:\n", op
->ninstrs
);
613 for (op_id
= 0; op_id
< op
->ninstrs
; op_id
++) {
614 instr
= &op
->instrs
[op_id
];
616 nand_op_trace(" ", instr
);
618 switch (instr
->type
) {
619 case NAND_OP_CMD_INSTR
:
620 writeb_relaxed(instr
->ctx
.cmd
.opcode
, host
->cmd_va
);
623 case NAND_OP_ADDR_INSTR
:
624 for (i
= 0; i
< instr
->ctx
.addr
.naddrs
; i
++)
625 writeb_relaxed(instr
->ctx
.addr
.addrs
[i
],
629 case NAND_OP_DATA_IN_INSTR
:
630 if (host
->mode
== USE_DMA_ACCESS
)
631 fsmc_read_buf_dma(host
, instr
->ctx
.data
.buf
.in
,
632 instr
->ctx
.data
.len
);
634 fsmc_read_buf(host
, instr
->ctx
.data
.buf
.in
,
635 instr
->ctx
.data
.len
);
638 case NAND_OP_DATA_OUT_INSTR
:
639 if (host
->mode
== USE_DMA_ACCESS
)
640 fsmc_write_buf_dma(host
,
641 instr
->ctx
.data
.buf
.out
,
642 instr
->ctx
.data
.len
);
644 fsmc_write_buf(host
, instr
->ctx
.data
.buf
.out
,
645 instr
->ctx
.data
.len
);
648 case NAND_OP_WAITRDY_INSTR
:
649 ret
= nand_soft_waitrdy(chip
,
650 instr
->ctx
.waitrdy
.timeout_ms
);
659 * fsmc_read_page_hwecc
660 * @chip: nand chip info structure
661 * @buf: buffer to store read data
662 * @oob_required: caller expects OOB data read to chip->oob_poi
663 * @page: page number to read
665 * This routine is needed for fsmc version 8 as reading from NAND chip has to be
666 * performed in a strict sequence as follows:
667 * data(512 byte) -> ecc(13 byte)
668 * After this read, fsmc hardware generates and reports error data bits(up to a
671 static int fsmc_read_page_hwecc(struct nand_chip
*chip
, u8
*buf
,
672 int oob_required
, int page
)
674 struct mtd_info
*mtd
= nand_to_mtd(chip
);
675 int i
, j
, s
, stat
, eccsize
= chip
->ecc
.size
;
676 int eccbytes
= chip
->ecc
.bytes
;
677 int eccsteps
= chip
->ecc
.steps
;
679 u8
*ecc_calc
= chip
->ecc
.calc_buf
;
680 u8
*ecc_code
= chip
->ecc
.code_buf
;
681 int off
, len
, ret
, group
= 0;
683 * ecc_oob is intentionally taken as u16. In 16bit devices, we
684 * end up reading 14 bytes (7 words) from oob. The local array is
685 * to maintain word alignment
688 u8
*oob
= (u8
*)&ecc_oob
[0];
689 unsigned int max_bitflips
= 0;
691 for (i
= 0, s
= 0; s
< eccsteps
; s
++, i
+= eccbytes
, p
+= eccsize
) {
692 nand_read_page_op(chip
, page
, s
* eccsize
, NULL
, 0);
693 chip
->ecc
.hwctl(chip
, NAND_ECC_READ
);
694 ret
= nand_read_data_op(chip
, p
, eccsize
, false);
698 for (j
= 0; j
< eccbytes
;) {
699 struct mtd_oob_region oobregion
;
701 ret
= mtd_ooblayout_ecc(mtd
, group
++, &oobregion
);
705 off
= oobregion
.offset
;
706 len
= oobregion
.length
;
709 * length is intentionally kept a higher multiple of 2
710 * to read at least 13 bytes even in case of 16 bit NAND
713 if (chip
->options
& NAND_BUSWIDTH_16
)
714 len
= roundup(len
, 2);
716 nand_read_oob_op(chip
, page
, off
, oob
+ j
, len
);
720 memcpy(&ecc_code
[i
], oob
, chip
->ecc
.bytes
);
721 chip
->ecc
.calculate(chip
, p
, &ecc_calc
[i
]);
723 stat
= chip
->ecc
.correct(chip
, p
, &ecc_code
[i
], &ecc_calc
[i
]);
725 mtd
->ecc_stats
.failed
++;
727 mtd
->ecc_stats
.corrected
+= stat
;
728 max_bitflips
= max_t(unsigned int, max_bitflips
, stat
);
736 * fsmc_bch8_correct_data
737 * @mtd: mtd info structure
738 * @dat: buffer of read data
739 * @read_ecc: ecc read from device spare area
740 * @calc_ecc: ecc calculated from read data
742 * calc_ecc is a 104 bit information containing maximum of 8 error
743 * offset information of 13 bits each in 512 bytes of read data.
745 static int fsmc_bch8_correct_data(struct nand_chip
*chip
, u8
*dat
,
746 u8
*read_ecc
, u8
*calc_ecc
)
748 struct fsmc_nand_data
*host
= nand_to_fsmc(chip
);
751 u32 ecc1
, ecc2
, ecc3
, ecc4
;
753 num_err
= (readl_relaxed(host
->regs_va
+ STS
) >> 10) & 0xF;
755 /* no bit flipping */
756 if (likely(num_err
== 0))
759 /* too many errors */
760 if (unlikely(num_err
> 8)) {
762 * This is a temporary erase check. A newly erased page read
763 * would result in an ecc error because the oob data is also
764 * erased to FF and the calculated ecc for an FF data is not
766 * This is a workaround to skip performing correction in case
770 * For every page, each bit written as 0 is counted until these
771 * number of bits are greater than 8 (the maximum correction
772 * capability of FSMC for each 512 + 13 bytes)
775 int bits_ecc
= count_written_bits(read_ecc
, chip
->ecc
.bytes
, 8);
776 int bits_data
= count_written_bits(dat
, chip
->ecc
.size
, 8);
778 if ((bits_ecc
+ bits_data
) <= 8) {
780 memset(dat
, 0xff, chip
->ecc
.size
);
788 * ------------------- calc_ecc[] bit wise -----------|--13 bits--|
789 * |---idx[7]--|--.....-----|---idx[2]--||---idx[1]--||---idx[0]--|
791 * calc_ecc is a 104 bit information containing maximum of 8 error
792 * offset information of 13 bits each. calc_ecc is copied into a
793 * u64 array and error offset indexes are populated in err_idx
796 ecc1
= readl_relaxed(host
->regs_va
+ ECC1
);
797 ecc2
= readl_relaxed(host
->regs_va
+ ECC2
);
798 ecc3
= readl_relaxed(host
->regs_va
+ ECC3
);
799 ecc4
= readl_relaxed(host
->regs_va
+ STS
);
801 err_idx
[0] = (ecc1
>> 0) & 0x1FFF;
802 err_idx
[1] = (ecc1
>> 13) & 0x1FFF;
803 err_idx
[2] = (((ecc2
>> 0) & 0x7F) << 6) | ((ecc1
>> 26) & 0x3F);
804 err_idx
[3] = (ecc2
>> 7) & 0x1FFF;
805 err_idx
[4] = (((ecc3
>> 0) & 0x1) << 12) | ((ecc2
>> 20) & 0xFFF);
806 err_idx
[5] = (ecc3
>> 1) & 0x1FFF;
807 err_idx
[6] = (ecc3
>> 14) & 0x1FFF;
808 err_idx
[7] = (((ecc4
>> 16) & 0xFF) << 5) | ((ecc3
>> 27) & 0x1F);
812 change_bit(0, (unsigned long *)&err_idx
[i
]);
813 change_bit(1, (unsigned long *)&err_idx
[i
]);
815 if (err_idx
[i
] < chip
->ecc
.size
* 8) {
816 change_bit(err_idx
[i
], (unsigned long *)dat
);
823 static bool filter(struct dma_chan
*chan
, void *slave
)
825 chan
->private = slave
;
829 static int fsmc_nand_probe_config_dt(struct platform_device
*pdev
,
830 struct fsmc_nand_data
*host
,
831 struct nand_chip
*nand
)
833 struct device_node
*np
= pdev
->dev
.of_node
;
839 if (!of_property_read_u32(np
, "bank-width", &val
)) {
841 nand
->options
|= NAND_BUSWIDTH_16
;
842 } else if (val
!= 1) {
843 dev_err(&pdev
->dev
, "invalid bank-width %u\n", val
);
848 if (of_get_property(np
, "nand-skip-bbtscan", NULL
))
849 nand
->options
|= NAND_SKIP_BBTSCAN
;
851 host
->dev_timings
= devm_kzalloc(&pdev
->dev
,
852 sizeof(*host
->dev_timings
),
854 if (!host
->dev_timings
)
857 ret
= of_property_read_u8_array(np
, "timings", (u8
*)host
->dev_timings
,
858 sizeof(*host
->dev_timings
));
860 host
->dev_timings
= NULL
;
862 /* Set default NAND bank to 0 */
864 if (!of_property_read_u32(np
, "bank", &val
)) {
866 dev_err(&pdev
->dev
, "invalid bank %u\n", val
);
874 static int fsmc_nand_attach_chip(struct nand_chip
*nand
)
876 struct mtd_info
*mtd
= nand_to_mtd(nand
);
877 struct fsmc_nand_data
*host
= nand_to_fsmc(nand
);
879 if (AMBA_REV_BITS(host
->pid
) >= 8) {
880 switch (mtd
->oobsize
) {
889 "No oob scheme defined for oobsize %d\n",
894 mtd_set_ooblayout(mtd
, &fsmc_ecc4_ooblayout_ops
);
899 switch (nand
->ecc
.mode
) {
901 dev_info(host
->dev
, "Using 1-bit HW ECC scheme\n");
902 nand
->ecc
.calculate
= fsmc_read_hwecc_ecc1
;
903 nand
->ecc
.correct
= nand_correct_data
;
905 nand
->ecc
.strength
= 1;
906 nand
->ecc
.options
|= NAND_ECC_SOFT_HAMMING_SM_ORDER
;
910 if (nand
->ecc
.algo
== NAND_ECC_BCH
) {
912 "Using 4-bit SW BCH ECC scheme\n");
916 case NAND_ECC_ON_DIE
:
920 dev_err(host
->dev
, "Unsupported ECC mode!\n");
925 * Don't set layout for BCH4 SW ECC. This will be
926 * generated later in nand_bch_init() later.
928 if (nand
->ecc
.mode
== NAND_ECC_HW
) {
929 switch (mtd
->oobsize
) {
933 mtd_set_ooblayout(mtd
,
934 &fsmc_ecc1_ooblayout_ops
);
938 "No oob scheme defined for oobsize %d\n",
947 static const struct nand_controller_ops fsmc_nand_controller_ops
= {
948 .attach_chip
= fsmc_nand_attach_chip
,
949 .exec_op
= fsmc_exec_op
,
950 .setup_data_interface
= fsmc_setup_data_interface
,
954 * fsmc_nand_disable() - Disables the NAND bank
955 * @host: The instance to disable
957 static void fsmc_nand_disable(struct fsmc_nand_data
*host
)
961 val
= readl(host
->regs_va
+ FSMC_PC
);
963 writel(val
, host
->regs_va
+ FSMC_PC
);
967 * fsmc_nand_probe - Probe function
968 * @pdev: platform device structure
970 static int __init
fsmc_nand_probe(struct platform_device
*pdev
)
972 struct fsmc_nand_data
*host
;
973 struct mtd_info
*mtd
;
974 struct nand_chip
*nand
;
975 struct resource
*res
;
982 /* Allocate memory for the device structure (and zero it) */
983 host
= devm_kzalloc(&pdev
->dev
, sizeof(*host
), GFP_KERNEL
);
989 ret
= fsmc_nand_probe_config_dt(pdev
, host
, nand
);
993 res
= platform_get_resource_byname(pdev
, IORESOURCE_MEM
, "nand_data");
994 host
->data_va
= devm_ioremap_resource(&pdev
->dev
, res
);
995 if (IS_ERR(host
->data_va
))
996 return PTR_ERR(host
->data_va
);
998 host
->data_pa
= (dma_addr_t
)res
->start
;
1000 res
= platform_get_resource_byname(pdev
, IORESOURCE_MEM
, "nand_addr");
1001 host
->addr_va
= devm_ioremap_resource(&pdev
->dev
, res
);
1002 if (IS_ERR(host
->addr_va
))
1003 return PTR_ERR(host
->addr_va
);
1005 res
= platform_get_resource_byname(pdev
, IORESOURCE_MEM
, "nand_cmd");
1006 host
->cmd_va
= devm_ioremap_resource(&pdev
->dev
, res
);
1007 if (IS_ERR(host
->cmd_va
))
1008 return PTR_ERR(host
->cmd_va
);
1010 res
= platform_get_resource_byname(pdev
, IORESOURCE_MEM
, "fsmc_regs");
1011 base
= devm_ioremap_resource(&pdev
->dev
, res
);
1013 return PTR_ERR(base
);
1015 host
->regs_va
= base
+ FSMC_NOR_REG_SIZE
+
1016 (host
->bank
* FSMC_NAND_BANK_SZ
);
1018 host
->clk
= devm_clk_get(&pdev
->dev
, NULL
);
1019 if (IS_ERR(host
->clk
)) {
1020 dev_err(&pdev
->dev
, "failed to fetch block clock\n");
1021 return PTR_ERR(host
->clk
);
1024 ret
= clk_prepare_enable(host
->clk
);
1029 * This device ID is actually a common AMBA ID as used on the
1030 * AMBA PrimeCell bus. However it is not a PrimeCell.
1032 for (pid
= 0, i
= 0; i
< 4; i
++)
1033 pid
|= (readl(base
+ resource_size(res
) - 0x20 + 4 * i
) &
1038 dev_info(&pdev
->dev
,
1039 "FSMC device partno %03x, manufacturer %02x, revision %02x, config %02x\n",
1040 AMBA_PART_BITS(pid
), AMBA_MANF_BITS(pid
),
1041 AMBA_REV_BITS(pid
), AMBA_CONFIG_BITS(pid
));
1043 host
->dev
= &pdev
->dev
;
1045 if (host
->mode
== USE_DMA_ACCESS
)
1046 init_completion(&host
->dma_access_complete
);
1048 /* Link all private pointers */
1049 mtd
= nand_to_mtd(&host
->nand
);
1050 nand_set_flash_node(nand
, pdev
->dev
.of_node
);
1052 mtd
->dev
.parent
= &pdev
->dev
;
1055 * Setup default ECC mode. nand_dt_init() called from nand_scan_ident()
1056 * can overwrite this value if the DT provides a different value.
1058 nand
->ecc
.mode
= NAND_ECC_HW
;
1059 nand
->ecc
.hwctl
= fsmc_enable_hwecc
;
1060 nand
->ecc
.size
= 512;
1061 nand
->badblockbits
= 7;
1063 if (host
->mode
== USE_DMA_ACCESS
) {
1065 dma_cap_set(DMA_MEMCPY
, mask
);
1066 host
->read_dma_chan
= dma_request_channel(mask
, filter
, NULL
);
1067 if (!host
->read_dma_chan
) {
1068 dev_err(&pdev
->dev
, "Unable to get read dma channel\n");
1071 host
->write_dma_chan
= dma_request_channel(mask
, filter
, NULL
);
1072 if (!host
->write_dma_chan
) {
1073 dev_err(&pdev
->dev
, "Unable to get write dma channel\n");
1074 goto release_dma_read_chan
;
1078 if (host
->dev_timings
) {
1079 fsmc_nand_setup(host
, host
->dev_timings
);
1080 nand
->options
|= NAND_KEEP_TIMINGS
;
1083 if (AMBA_REV_BITS(host
->pid
) >= 8) {
1084 nand
->ecc
.read_page
= fsmc_read_page_hwecc
;
1085 nand
->ecc
.calculate
= fsmc_read_hwecc_ecc4
;
1086 nand
->ecc
.correct
= fsmc_bch8_correct_data
;
1087 nand
->ecc
.bytes
= 13;
1088 nand
->ecc
.strength
= 8;
1091 nand_controller_init(&host
->base
);
1092 host
->base
.ops
= &fsmc_nand_controller_ops
;
1093 nand
->controller
= &host
->base
;
1096 * Scan to find existence of the device
1098 ret
= nand_scan(nand
, 1);
1100 goto release_dma_write_chan
;
1103 ret
= mtd_device_register(mtd
, NULL
, 0);
1107 platform_set_drvdata(pdev
, host
);
1108 dev_info(&pdev
->dev
, "FSMC NAND driver registration successful\n");
1114 release_dma_write_chan
:
1115 if (host
->mode
== USE_DMA_ACCESS
)
1116 dma_release_channel(host
->write_dma_chan
);
1117 release_dma_read_chan
:
1118 if (host
->mode
== USE_DMA_ACCESS
)
1119 dma_release_channel(host
->read_dma_chan
);
1121 fsmc_nand_disable(host
);
1122 clk_disable_unprepare(host
->clk
);
1130 static int fsmc_nand_remove(struct platform_device
*pdev
)
1132 struct fsmc_nand_data
*host
= platform_get_drvdata(pdev
);
1135 nand_release(&host
->nand
);
1136 fsmc_nand_disable(host
);
1138 if (host
->mode
== USE_DMA_ACCESS
) {
1139 dma_release_channel(host
->write_dma_chan
);
1140 dma_release_channel(host
->read_dma_chan
);
1142 clk_disable_unprepare(host
->clk
);
1148 #ifdef CONFIG_PM_SLEEP
1149 static int fsmc_nand_suspend(struct device
*dev
)
1151 struct fsmc_nand_data
*host
= dev_get_drvdata(dev
);
1154 clk_disable_unprepare(host
->clk
);
1159 static int fsmc_nand_resume(struct device
*dev
)
1161 struct fsmc_nand_data
*host
= dev_get_drvdata(dev
);
1164 clk_prepare_enable(host
->clk
);
1165 if (host
->dev_timings
)
1166 fsmc_nand_setup(host
, host
->dev_timings
);
1167 nand_reset(&host
->nand
, 0);
1174 static SIMPLE_DEV_PM_OPS(fsmc_nand_pm_ops
, fsmc_nand_suspend
, fsmc_nand_resume
);
1176 static const struct of_device_id fsmc_nand_id_table
[] = {
1177 { .compatible
= "st,spear600-fsmc-nand" },
1178 { .compatible
= "stericsson,fsmc-nand" },
1181 MODULE_DEVICE_TABLE(of
, fsmc_nand_id_table
);
1183 static struct platform_driver fsmc_nand_driver
= {
1184 .remove
= fsmc_nand_remove
,
1186 .name
= "fsmc-nand",
1187 .of_match_table
= fsmc_nand_id_table
,
1188 .pm
= &fsmc_nand_pm_ops
,
1192 module_platform_driver_probe(fsmc_nand_driver
, fsmc_nand_probe
);
1194 MODULE_LICENSE("GPL v2");
1195 MODULE_AUTHOR("Vipin Kumar <vipin.kumar@st.com>, Ashish Priyadarshi");
1196 MODULE_DESCRIPTION("NAND driver for SPEAr Platforms");