xref: /linux/drivers/mtd/nand/raw/atmel/pmecc.h (revision 00f5764dbb040188e5dce2cd9e648360886b045c)
1*b849f8b5STudor Ambarus /* SPDX-License-Identifier: GPL-2.0 */
2f88fc122SBoris Brezillon /*
3f88fc122SBoris Brezillon  * © Copyright 2016 ATMEL
4f88fc122SBoris Brezillon  * © Copyright 2016 Free Electrons
5f88fc122SBoris Brezillon  *
6f88fc122SBoris Brezillon  * Author: Boris Brezillon <boris.brezillon@free-electrons.com>
7f88fc122SBoris Brezillon  *
8f88fc122SBoris Brezillon  * Derived from the atmel_nand.c driver which contained the following
9f88fc122SBoris Brezillon  * copyrights:
10f88fc122SBoris Brezillon  *
11f88fc122SBoris Brezillon  *    Copyright © 2003 Rick Bronson
12f88fc122SBoris Brezillon  *
13187c5448SBoris Brezillon  *    Derived from drivers/mtd/nand/autcpu12.c (removed in v3.8)
14f88fc122SBoris Brezillon  *        Copyright © 2001 Thomas Gleixner (gleixner@autronix.de)
15f88fc122SBoris Brezillon  *
16187c5448SBoris Brezillon  *    Derived from drivers/mtd/spia.c (removed in v3.8)
17f88fc122SBoris Brezillon  *        Copyright © 2000 Steven J. Hill (sjhill@cotw.com)
18f88fc122SBoris Brezillon  *
19f88fc122SBoris Brezillon  *
20f88fc122SBoris Brezillon  *    Add Hardware ECC support for AT91SAM9260 / AT91SAM9263
21f88fc122SBoris Brezillon  *        Richard Genoud (richard.genoud@gmail.com), Adeneo Copyright © 2007
22f88fc122SBoris Brezillon  *
23f88fc122SBoris Brezillon  *        Derived from Das U-Boot source code
24f88fc122SBoris Brezillon  *              (u-boot-1.1.5/board/atmel/at91sam9263ek/nand.c)
25f88fc122SBoris Brezillon  *        © Copyright 2006 ATMEL Rousset, Lacressonniere Nicolas
26f88fc122SBoris Brezillon  *
27f88fc122SBoris Brezillon  *    Add Programmable Multibit ECC support for various AT91 SoC
28f88fc122SBoris Brezillon  *        © Copyright 2012 ATMEL, Hong Xu
29f88fc122SBoris Brezillon  *
30f88fc122SBoris Brezillon  *    Add Nand Flash Controller support for SAMA5 SoC
31f88fc122SBoris Brezillon  *        © Copyright 2013 ATMEL, Josh Wu (josh.wu@atmel.com)
32f88fc122SBoris Brezillon  */
33f88fc122SBoris Brezillon 
34f88fc122SBoris Brezillon #ifndef ATMEL_PMECC_H
35f88fc122SBoris Brezillon #define ATMEL_PMECC_H
36f88fc122SBoris Brezillon 
37f88fc122SBoris Brezillon #define ATMEL_PMECC_MAXIMIZE_ECC_STRENGTH	0
38f88fc122SBoris Brezillon #define ATMEL_PMECC_SECTOR_SIZE_AUTO		0
39f88fc122SBoris Brezillon #define ATMEL_PMECC_OOBOFFSET_AUTO		-1
40f88fc122SBoris Brezillon 
41f88fc122SBoris Brezillon struct atmel_pmecc_user_req {
42f88fc122SBoris Brezillon 	int pagesize;
43f88fc122SBoris Brezillon 	int oobsize;
44f88fc122SBoris Brezillon 	struct {
45f88fc122SBoris Brezillon 		int strength;
46f88fc122SBoris Brezillon 		int bytes;
47f88fc122SBoris Brezillon 		int sectorsize;
48f88fc122SBoris Brezillon 		int nsectors;
49f88fc122SBoris Brezillon 		int ooboffset;
50f88fc122SBoris Brezillon 	} ecc;
51f88fc122SBoris Brezillon };
52f88fc122SBoris Brezillon 
53f88fc122SBoris Brezillon struct atmel_pmecc *devm_atmel_pmecc_get(struct device *dev);
54f88fc122SBoris Brezillon 
55f88fc122SBoris Brezillon struct atmel_pmecc_user *
56f88fc122SBoris Brezillon atmel_pmecc_create_user(struct atmel_pmecc *pmecc,
57f88fc122SBoris Brezillon 			struct atmel_pmecc_user_req *req);
58f88fc122SBoris Brezillon void atmel_pmecc_destroy_user(struct atmel_pmecc_user *user);
59f88fc122SBoris Brezillon 
60143b0ab9SRomain Izard void atmel_pmecc_reset(struct atmel_pmecc *pmecc);
61f88fc122SBoris Brezillon int atmel_pmecc_enable(struct atmel_pmecc_user *user, int op);
62f88fc122SBoris Brezillon void atmel_pmecc_disable(struct atmel_pmecc_user *user);
63f88fc122SBoris Brezillon int atmel_pmecc_wait_rdy(struct atmel_pmecc_user *user);
64f88fc122SBoris Brezillon int atmel_pmecc_correct_sector(struct atmel_pmecc_user *user, int sector,
65f88fc122SBoris Brezillon 			       void *data, void *ecc);
66f88fc122SBoris Brezillon bool atmel_pmecc_correct_erased_chunks(struct atmel_pmecc_user *user);
67f88fc122SBoris Brezillon void atmel_pmecc_get_generated_eccbytes(struct atmel_pmecc_user *user,
68f88fc122SBoris Brezillon 					int sector, void *ecc);
69f88fc122SBoris Brezillon 
70f88fc122SBoris Brezillon #endif /* ATMEL_PMECC_H */
71