162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * © Copyright 2016 ATMEL 462306a36Sopenharmony_ci * © Copyright 2016 Free Electrons 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Author: Boris Brezillon <boris.brezillon@free-electrons.com> 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * Derived from the atmel_nand.c driver which contained the following 962306a36Sopenharmony_ci * copyrights: 1062306a36Sopenharmony_ci * 1162306a36Sopenharmony_ci * Copyright © 2003 Rick Bronson 1262306a36Sopenharmony_ci * 1362306a36Sopenharmony_ci * Derived from drivers/mtd/nand/autcpu12.c (removed in v3.8) 1462306a36Sopenharmony_ci * Copyright © 2001 Thomas Gleixner (gleixner@autronix.de) 1562306a36Sopenharmony_ci * 1662306a36Sopenharmony_ci * Derived from drivers/mtd/spia.c (removed in v3.8) 1762306a36Sopenharmony_ci * Copyright © 2000 Steven J. Hill (sjhill@cotw.com) 1862306a36Sopenharmony_ci * 1962306a36Sopenharmony_ci * 2062306a36Sopenharmony_ci * Add Hardware ECC support for AT91SAM9260 / AT91SAM9263 2162306a36Sopenharmony_ci * Richard Genoud (richard.genoud@gmail.com), Adeneo Copyright © 2007 2262306a36Sopenharmony_ci * 2362306a36Sopenharmony_ci * Derived from Das U-Boot source code 2462306a36Sopenharmony_ci * (u-boot-1.1.5/board/atmel/at91sam9263ek/nand.c) 2562306a36Sopenharmony_ci * © Copyright 2006 ATMEL Rousset, Lacressonniere Nicolas 2662306a36Sopenharmony_ci * 2762306a36Sopenharmony_ci * Add Programmable Multibit ECC support for various AT91 SoC 2862306a36Sopenharmony_ci * © Copyright 2012 ATMEL, Hong Xu 2962306a36Sopenharmony_ci * 3062306a36Sopenharmony_ci * Add Nand Flash Controller support for SAMA5 SoC 3162306a36Sopenharmony_ci * © Copyright 2013 ATMEL, Josh Wu (josh.wu@atmel.com) 3262306a36Sopenharmony_ci */ 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci#ifndef ATMEL_PMECC_H 3562306a36Sopenharmony_ci#define ATMEL_PMECC_H 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci#define ATMEL_PMECC_MAXIMIZE_ECC_STRENGTH 0 3862306a36Sopenharmony_ci#define ATMEL_PMECC_SECTOR_SIZE_AUTO 0 3962306a36Sopenharmony_ci#define ATMEL_PMECC_OOBOFFSET_AUTO -1 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_cistruct atmel_pmecc_user_req { 4262306a36Sopenharmony_ci int pagesize; 4362306a36Sopenharmony_ci int oobsize; 4462306a36Sopenharmony_ci struct { 4562306a36Sopenharmony_ci int strength; 4662306a36Sopenharmony_ci int bytes; 4762306a36Sopenharmony_ci int sectorsize; 4862306a36Sopenharmony_ci int nsectors; 4962306a36Sopenharmony_ci int ooboffset; 5062306a36Sopenharmony_ci } ecc; 5162306a36Sopenharmony_ci}; 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_cistruct atmel_pmecc *devm_atmel_pmecc_get(struct device *dev); 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_cistruct atmel_pmecc_user * 5662306a36Sopenharmony_ciatmel_pmecc_create_user(struct atmel_pmecc *pmecc, 5762306a36Sopenharmony_ci struct atmel_pmecc_user_req *req); 5862306a36Sopenharmony_civoid atmel_pmecc_destroy_user(struct atmel_pmecc_user *user); 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_civoid atmel_pmecc_reset(struct atmel_pmecc *pmecc); 6162306a36Sopenharmony_ciint atmel_pmecc_enable(struct atmel_pmecc_user *user, int op); 6262306a36Sopenharmony_civoid atmel_pmecc_disable(struct atmel_pmecc_user *user); 6362306a36Sopenharmony_ciint atmel_pmecc_wait_rdy(struct atmel_pmecc_user *user); 6462306a36Sopenharmony_ciint atmel_pmecc_correct_sector(struct atmel_pmecc_user *user, int sector, 6562306a36Sopenharmony_ci void *data, void *ecc); 6662306a36Sopenharmony_cibool atmel_pmecc_correct_erased_chunks(struct atmel_pmecc_user *user); 6762306a36Sopenharmony_civoid atmel_pmecc_get_generated_eccbytes(struct atmel_pmecc_user *user, 6862306a36Sopenharmony_ci int sector, void *ecc); 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci#endif /* ATMEL_PMECC_H */ 71