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