root/drivers/mtd/nand/raw/atmel/pmecc.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 /*
   3  * © Copyright 2016 ATMEL
   4  * © Copyright 2016 Free Electrons
   5  *
   6  * Author: Boris Brezillon <boris.brezillon@free-electrons.com>
   7  *
   8  * Derived from the atmel_nand.c driver which contained the following
   9  * copyrights:
  10  *
  11  *    Copyright © 2003 Rick Bronson
  12  *
  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 / AT91SAM9263
  21  *        Richard Genoud (richard.genoud@gmail.com), Adeneo Copyright © 2007
  22  *
  23  *        Derived from Das U-Boot source code
  24  *              (u-boot-1.1.5/board/atmel/at91sam9263ek/nand.c)
  25  *        © Copyright 2006 ATMEL Rousset, Lacressonniere Nicolas
  26  *
  27  *    Add Programmable Multibit ECC support for various AT91 SoC
  28  *        © Copyright 2012 ATMEL, Hong Xu
  29  *
  30  *    Add Nand Flash Controller support for SAMA5 SoC
  31  *        © Copyright 2013 ATMEL, Josh Wu (josh.wu@atmel.com)
  32  */
  33 
  34 #ifndef ATMEL_PMECC_H
  35 #define ATMEL_PMECC_H
  36 
  37 #define ATMEL_PMECC_MAXIMIZE_ECC_STRENGTH       0
  38 #define ATMEL_PMECC_SECTOR_SIZE_AUTO            0
  39 #define ATMEL_PMECC_OOBOFFSET_AUTO              -1
  40 
  41 struct 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 
  53 struct atmel_pmecc *devm_atmel_pmecc_get(struct device *dev);
  54 
  55 struct atmel_pmecc_user *
  56 atmel_pmecc_create_user(struct atmel_pmecc *pmecc,
  57                         struct atmel_pmecc_user_req *req);
  58 void atmel_pmecc_destroy_user(struct atmel_pmecc_user *user);
  59 
  60 void atmel_pmecc_reset(struct atmel_pmecc *pmecc);
  61 int atmel_pmecc_enable(struct atmel_pmecc_user *user, int op);
  62 void atmel_pmecc_disable(struct atmel_pmecc_user *user);
  63 int atmel_pmecc_wait_rdy(struct atmel_pmecc_user *user);
  64 int atmel_pmecc_correct_sector(struct atmel_pmecc_user *user, int sector,
  65                                void *data, void *ecc);
  66 bool atmel_pmecc_correct_erased_chunks(struct atmel_pmecc_user *user);
  67 void atmel_pmecc_get_generated_eccbytes(struct atmel_pmecc_user *user,
  68                                         int sector, void *ecc);
  69 
  70 #endif /* ATMEL_PMECC_H */

/* [<][>][^][v][top][bottom][index][help] */