74 lines
2.3 KiB
C
74 lines
2.3 KiB
C
|
|
/*
|
|||
|
|
* Copyright (c) 2022-2024 Macronix International Co. LTD. All rights reserved.
|
|||
|
|
* SPDX-License-Identifier: Apache-2.0
|
|||
|
|
*
|
|||
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|||
|
|
* you may not use this file except in compliance with the License.
|
|||
|
|
* You may obtain a copy of the License at
|
|||
|
|
*
|
|||
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|||
|
|
*
|
|||
|
|
* Unless required by applicable law or agreed to in writing, software
|
|||
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|||
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|||
|
|
* See the License for the specific language governing permissions and
|
|||
|
|
* limitations under the License.
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
#ifndef NAND_BCH_H__
|
|||
|
|
#define NAND_BCH_H__
|
|||
|
|
|
|||
|
|
#include "lib/spi_nand/spi_nand.h"
|
|||
|
|
#include "lib/spi_nand/bitops.h"
|
|||
|
|
|
|||
|
|
struct nand_bch_control;
|
|||
|
|
|
|||
|
|
#define CONFIG_NAND_ECC_BCH
|
|||
|
|
|
|||
|
|
static inline int mtd_nand_has_bch(void) { return 1; }
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* Calculate BCH ecc code
|
|||
|
|
*/
|
|||
|
|
int nand_bch_calculate_ecc(struct nand_dev *nand, const unsigned char *dat,
|
|||
|
|
unsigned char *ecc_code);
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* Detect and correct bit errors
|
|||
|
|
*/
|
|||
|
|
int nand_bch_correct_data(struct nand_dev *nand, unsigned char *dat, unsigned char *read_ecc,
|
|||
|
|
unsigned char *calc_ecc);
|
|||
|
|
/*
|
|||
|
|
* Initialize BCH encoder/decoder
|
|||
|
|
*/
|
|||
|
|
struct nand_bch_control *
|
|||
|
|
nand_bch_init(struct nand_dev *nand, unsigned int eccsize,
|
|||
|
|
unsigned int eccbytes, struct NandEccLayout **ecclayout);
|
|||
|
|
/*
|
|||
|
|
* Release BCH encoder/decoder resources
|
|||
|
|
*/
|
|||
|
|
void nand_bch_free(struct nand_bch_control *nbc);
|
|||
|
|
|
|||
|
|
|
|||
|
|
int nand_read_ecc(struct nand_dev *nand, uint32_t page, uint8_t *buf, uint32_t len);
|
|||
|
|
|
|||
|
|
int nand_read_ondie(struct nand_dev *nand, uint32_t page, uint8_t *buf, uint32_t len);
|
|||
|
|
|
|||
|
|
int nand_write_ecc(struct nand_dev *nand, uint32_t page, uint8_t *buf, uint32_t len);
|
|||
|
|
|
|||
|
|
int nand_write_ondie(struct nand_dev *nand, uint32_t page, uint8_t *buf, uint32_t len);
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* Function: Nand_Ecc_Init
|
|||
|
|
* Arguments: chip, pointer to an mxchip structure of SPI NAND device.
|
|||
|
|
* EccMode, ECC mode.
|
|||
|
|
* Return Value: RET_OK.
|
|||
|
|
* RET_ERR.
|
|||
|
|
* Description: This function initializes the software variables related
|
|||
|
|
* to ECC generation, ECC checking and writing ECC Bytes in spare Bytes.
|
|||
|
|
*/
|
|||
|
|
int Nand_Ecc_Init(struct nand_dev *nd, uint32_t EccMode);
|
|||
|
|
|
|||
|
|
|
|||
|
|
#endif /* __MTD_NAND_BCH_H__ */
|