18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * © Copyright 2016 ATMEL 48c2ecf20Sopenharmony_ci * © Copyright 2016 Free Electrons 58c2ecf20Sopenharmony_ci * 68c2ecf20Sopenharmony_ci * Author: Boris Brezillon <boris.brezillon@free-electrons.com> 78c2ecf20Sopenharmony_ci * 88c2ecf20Sopenharmony_ci * Derived from the atmel_nand.c driver which contained the following 98c2ecf20Sopenharmony_ci * copyrights: 108c2ecf20Sopenharmony_ci * 118c2ecf20Sopenharmony_ci * Copyright © 2003 Rick Bronson 128c2ecf20Sopenharmony_ci * 138c2ecf20Sopenharmony_ci * Derived from drivers/mtd/nand/autcpu12.c (removed in v3.8) 148c2ecf20Sopenharmony_ci * Copyright © 2001 Thomas Gleixner (gleixner@autronix.de) 158c2ecf20Sopenharmony_ci * 168c2ecf20Sopenharmony_ci * Derived from drivers/mtd/spia.c (removed in v3.8) 178c2ecf20Sopenharmony_ci * Copyright © 2000 Steven J. Hill (sjhill@cotw.com) 188c2ecf20Sopenharmony_ci * 198c2ecf20Sopenharmony_ci * 208c2ecf20Sopenharmony_ci * Add Hardware ECC support for AT91SAM9260 / AT91SAM9263 218c2ecf20Sopenharmony_ci * Richard Genoud (richard.genoud@gmail.com), Adeneo Copyright © 2007 228c2ecf20Sopenharmony_ci * 238c2ecf20Sopenharmony_ci * Derived from Das U-Boot source code 248c2ecf20Sopenharmony_ci * (u-boot-1.1.5/board/atmel/at91sam9263ek/nand.c) 258c2ecf20Sopenharmony_ci * © Copyright 2006 ATMEL Rousset, Lacressonniere Nicolas 268c2ecf20Sopenharmony_ci * 278c2ecf20Sopenharmony_ci * Add Programmable Multibit ECC support for various AT91 SoC 288c2ecf20Sopenharmony_ci * © Copyright 2012 ATMEL, Hong Xu 298c2ecf20Sopenharmony_ci * 308c2ecf20Sopenharmony_ci * Add Nand Flash Controller support for SAMA5 SoC 318c2ecf20Sopenharmony_ci * © Copyright 2013 ATMEL, Josh Wu (josh.wu@atmel.com) 328c2ecf20Sopenharmony_ci */ 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_ci#ifndef ATMEL_PMECC_H 358c2ecf20Sopenharmony_ci#define ATMEL_PMECC_H 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ci#define ATMEL_PMECC_MAXIMIZE_ECC_STRENGTH 0 388c2ecf20Sopenharmony_ci#define ATMEL_PMECC_SECTOR_SIZE_AUTO 0 398c2ecf20Sopenharmony_ci#define ATMEL_PMECC_OOBOFFSET_AUTO -1 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_cistruct atmel_pmecc_user_req { 428c2ecf20Sopenharmony_ci int pagesize; 438c2ecf20Sopenharmony_ci int oobsize; 448c2ecf20Sopenharmony_ci struct { 458c2ecf20Sopenharmony_ci int strength; 468c2ecf20Sopenharmony_ci int bytes; 478c2ecf20Sopenharmony_ci int sectorsize; 488c2ecf20Sopenharmony_ci int nsectors; 498c2ecf20Sopenharmony_ci int ooboffset; 508c2ecf20Sopenharmony_ci } ecc; 518c2ecf20Sopenharmony_ci}; 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_cistruct atmel_pmecc *devm_atmel_pmecc_get(struct device *dev); 548c2ecf20Sopenharmony_ci 558c2ecf20Sopenharmony_cistruct atmel_pmecc_user * 568c2ecf20Sopenharmony_ciatmel_pmecc_create_user(struct atmel_pmecc *pmecc, 578c2ecf20Sopenharmony_ci struct atmel_pmecc_user_req *req); 588c2ecf20Sopenharmony_civoid atmel_pmecc_destroy_user(struct atmel_pmecc_user *user); 598c2ecf20Sopenharmony_ci 608c2ecf20Sopenharmony_civoid atmel_pmecc_reset(struct atmel_pmecc *pmecc); 618c2ecf20Sopenharmony_ciint atmel_pmecc_enable(struct atmel_pmecc_user *user, int op); 628c2ecf20Sopenharmony_civoid atmel_pmecc_disable(struct atmel_pmecc_user *user); 638c2ecf20Sopenharmony_ciint atmel_pmecc_wait_rdy(struct atmel_pmecc_user *user); 648c2ecf20Sopenharmony_ciint atmel_pmecc_correct_sector(struct atmel_pmecc_user *user, int sector, 658c2ecf20Sopenharmony_ci void *data, void *ecc); 668c2ecf20Sopenharmony_cibool atmel_pmecc_correct_erased_chunks(struct atmel_pmecc_user *user); 678c2ecf20Sopenharmony_civoid atmel_pmecc_get_generated_eccbytes(struct atmel_pmecc_user *user, 688c2ecf20Sopenharmony_ci int sector, void *ecc); 698c2ecf20Sopenharmony_ci 708c2ecf20Sopenharmony_ci#endif /* ATMEL_PMECC_H */ 71