mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-08 19:11:53 +00:00
mtd: nand: add generic helpers to check, match, maximize ECC settings
Driver are responsible for setting up ECC parameters correctly. Those include: - Check if ECC parameters specified (usually by DT) are valid - Meet the chip's ECC requirement - Maximize ECC strength if NAND_ECC_MAXIMIZE flag is set The logic can be generalized by factoring out common code. This commit adds 3 helpers to the NAND framework: nand_check_ecc_caps - Check if preset step_size and strength are valid nand_match_ecc_req - Match the chip's requirement nand_maximize_ecc - Maximize the ECC strength To use the helpers above, a driver needs to provide: - Data array of supported ECC step size and strength - A hook that calculates ECC bytes from the combination of step_size and strength. By using those helpers, code duplication among drivers will be reduced. Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com> [Linux commit: 2c8f8afa7f92acb07641bf95b940d384ed1d0294]
This commit is contained in:
parent
52cde35b96
commit
470c29d1c2
2 changed files with 253 additions and 0 deletions
|
@ -487,6 +487,30 @@ struct nand_hw_control {
|
|||
struct nand_chip *active;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nand_ecc_step_info - ECC step information of ECC engine
|
||||
* @stepsize: data bytes per ECC step
|
||||
* @strengths: array of supported strengths
|
||||
* @nstrengths: number of supported strengths
|
||||
*/
|
||||
struct nand_ecc_step_info {
|
||||
int stepsize;
|
||||
const int *strengths;
|
||||
int nstrengths;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nand_ecc_caps - capability of ECC engine
|
||||
* @stepinfos: array of ECC step information
|
||||
* @nstepinfos: number of ECC step information
|
||||
* @calc_ecc_bytes: driver's hook to calculate ECC bytes per step
|
||||
*/
|
||||
struct nand_ecc_caps {
|
||||
const struct nand_ecc_step_info *stepinfos;
|
||||
int nstepinfos;
|
||||
int (*calc_ecc_bytes)(int step_size, int strength);
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nand_ecc_ctrl - Control structure for ECC
|
||||
* @mode: ECC mode
|
||||
|
@ -1218,6 +1242,15 @@ int nand_check_erased_ecc_chunk(void *data, int datalen,
|
|||
void *extraoob, int extraooblen,
|
||||
int threshold);
|
||||
|
||||
int nand_check_ecc_caps(struct nand_chip *chip,
|
||||
const struct nand_ecc_caps *caps, int oobavail);
|
||||
|
||||
int nand_match_ecc_req(struct nand_chip *chip,
|
||||
const struct nand_ecc_caps *caps, int oobavail);
|
||||
|
||||
int nand_maximize_ecc(struct nand_chip *chip,
|
||||
const struct nand_ecc_caps *caps, int oobavail);
|
||||
|
||||
/* Reset and initialize a NAND device */
|
||||
int nand_reset(struct nand_chip *chip, int chipnr);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue