From 396886e8644d5b601126b97e0b36c40c5fb5cecf Mon Sep 17 00:00:00 2001 From: Ziyang Huang Date: Sun, 8 Sep 2024 16:40:11 +0800 Subject: [PATCH 1/2] spi: spi-qpic-snand: support BCH8 Add BCH8 error-correcting code support for QPIC SPI Nand controller. Signed-off-by: Ziyang Huang Signed-off-by: George Moussalem --- drivers/spi/spi-qpic-snand.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) --- a/drivers/spi/spi-qpic-snand.c +++ b/drivers/spi/spi-qpic-snand.c @@ -252,6 +252,7 @@ static int qcom_spi_ecc_init_ctx_pipelin struct nand_ecc_props *conf = &nand->ecc.ctx.conf; struct mtd_info *mtd = nanddev_to_mtd(nand); int cwperpage, bad_block_byte; + int ecc_mode; struct qpic_ecc *ecc_cfg; cwperpage = mtd->writesize / NANDC_STEP_SIZE; @@ -270,14 +271,17 @@ static int qcom_spi_ecc_init_ctx_pipelin nand->ecc.ctx.priv = ecc_cfg; snandc->qspi->mtd = mtd; - ecc_cfg->ecc_bytes_hw = 7; - ecc_cfg->spare_bytes = 4; + /* BCH8 or BCH4 */ + ecc_mode = mtd->oobsize > 64 ? 1 : 0; + + ecc_cfg->ecc_bytes_hw = ecc_mode ? 13 : 7; + ecc_cfg->spare_bytes = ecc_mode ? 2 : 4; ecc_cfg->bbm_size = 1; ecc_cfg->bch_enabled = true; ecc_cfg->bytes = ecc_cfg->ecc_bytes_hw + ecc_cfg->spare_bytes + ecc_cfg->bbm_size; ecc_cfg->steps = 4; - ecc_cfg->strength = 4; + ecc_cfg->strength = ecc_mode ? 8 : 4; ecc_cfg->step_size = 512; ecc_cfg->cw_data = 516; ecc_cfg->cw_size = ecc_cfg->cw_data + ecc_cfg->bytes; @@ -319,7 +323,7 @@ static int qcom_spi_ecc_init_ctx_pipelin FIELD_PREP(ECC_SW_RESET, 0) | FIELD_PREP(ECC_NUM_DATA_BYTES_MASK, ecc_cfg->cw_data) | FIELD_PREP(ECC_FORCE_CLK_OPEN, 1) | - FIELD_PREP(ECC_MODE_MASK, 0) | + FIELD_PREP(ECC_MODE_MASK, ecc_mode) | FIELD_PREP(ECC_PARITY_SIZE_BYTES_BCH_MASK, ecc_cfg->ecc_bytes_hw); ecc_cfg->ecc_buf_cfg = 0x203 << NUM_STEPS;