brintos

brintos / linux-shallow public Read only

0
0
Text · 2.2 KiB · 7851c05 Raw
71 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/*3 * © Copyright 2016 ATMEL4 * © Copyright 2016 Free Electrons5 *6 * Author: Boris Brezillon <boris.brezillon@free-electrons.com>7 *8 * Derived from the atmel_nand.c driver which contained the following9 * copyrights:10 *11 *    Copyright © 2003 Rick Bronson12 *13 *    Derived from drivers/mtd/nand/autcpu12.c (removed in v3.8)14 *        Copyright © 2001 Thomas Gleixner (gleixner@autronix.de)15 *16 *    Derived from drivers/mtd/spia.c (removed in v3.8)17 *        Copyright © 2000 Steven J. Hill (sjhill@cotw.com)18 *19 *20 *    Add Hardware ECC support for AT91SAM9260 / AT91SAM926321 *        Richard Genoud (richard.genoud@gmail.com), Adeneo Copyright © 200722 *23 *        Derived from Das U-Boot source code24 *              (u-boot-1.1.5/board/atmel/at91sam9263ek/nand.c)25 *        © Copyright 2006 ATMEL Rousset, Lacressonniere Nicolas26 *27 *    Add Programmable Multibit ECC support for various AT91 SoC28 *        © Copyright 2012 ATMEL, Hong Xu29 *30 *    Add Nand Flash Controller support for SAMA5 SoC31 *        © Copyright 2013 ATMEL, Josh Wu (josh.wu@atmel.com)32 */33 34#ifndef ATMEL_PMECC_H35#define ATMEL_PMECC_H36 37#define ATMEL_PMECC_MAXIMIZE_ECC_STRENGTH	038#define ATMEL_PMECC_SECTOR_SIZE_AUTO		039#define ATMEL_PMECC_OOBOFFSET_AUTO		-140 41struct atmel_pmecc_user_req {42	int pagesize;43	int oobsize;44	struct {45		int strength;46		int bytes;47		int sectorsize;48		int nsectors;49		int ooboffset;50	} ecc;51};52 53struct atmel_pmecc *devm_atmel_pmecc_get(struct device *dev);54 55struct atmel_pmecc_user *56atmel_pmecc_create_user(struct atmel_pmecc *pmecc,57			struct atmel_pmecc_user_req *req);58void atmel_pmecc_destroy_user(struct atmel_pmecc_user *user);59 60void atmel_pmecc_reset(struct atmel_pmecc *pmecc);61int atmel_pmecc_enable(struct atmel_pmecc_user *user, int op);62void atmel_pmecc_disable(struct atmel_pmecc_user *user);63int atmel_pmecc_wait_rdy(struct atmel_pmecc_user *user);64int atmel_pmecc_correct_sector(struct atmel_pmecc_user *user, int sector,65			       void *data, void *ecc);66bool atmel_pmecc_correct_erased_chunks(struct atmel_pmecc_user *user);67void atmel_pmecc_get_generated_eccbytes(struct atmel_pmecc_user *user,68					int sector, void *ecc);69 70#endif /* ATMEL_PMECC_H */71