/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ /* * Copyright (C) 2020 MediaTek Inc. All Rights Reserved. * * Author: Weijie Gao */ #ifndef _MTK_SNAND_H_ #define _MTK_SNAND_H_ #ifndef PRIVATE_MTK_SNAND_HEADER #include #include #include #endif enum mtk_snand_soc { SNAND_SOC_MT7622, SNAND_SOC_MT7629, __SNAND_SOC_MAX }; struct mtk_snand_platdata { void *nfi_base; void *ecc_base; enum mtk_snand_soc soc; bool quad_spi; }; struct mtk_snand_chip_info { const char *model; uint64_t chipsize; uint32_t blocksize; uint32_t pagesize; uint32_t sparesize; uint32_t spare_per_sector; uint32_t fdm_size; uint32_t fdm_ecc_size; uint32_t num_sectors; uint32_t sector_size; uint32_t ecc_strength; uint32_t ecc_bytes; }; struct mtk_snand; struct snand_flash_info; int mtk_snand_init(void *dev, const struct mtk_snand_platdata *pdata, struct mtk_snand **psnf); int mtk_snand_cleanup(struct mtk_snand *snf); int mtk_snand_chip_reset(struct mtk_snand *snf); int mtk_snand_read_page(struct mtk_snand *snf, uint64_t addr, void *buf, void *oob, bool raw); int mtk_snand_write_page(struct mtk_snand *snf, uint64_t addr, const void *buf, const void *oob, bool raw); int mtk_snand_erase_block(struct mtk_snand *snf, uint64_t addr); int mtk_snand_block_isbad(struct mtk_snand *snf, uint64_t addr); int mtk_snand_block_markbad(struct mtk_snand *snf, uint64_t addr); int mtk_snand_fill_oob(struct mtk_snand *snf, uint8_t *oobraw, const uint8_t *oobbuf, size_t ooblen); int mtk_snand_transfer_oob(struct mtk_snand *snf, uint8_t *oobbuf, size_t ooblen, const uint8_t *oobraw); int mtk_snand_read_page_auto_oob(struct mtk_snand *snf, uint64_t addr, void *buf, void *oob, size_t ooblen, size_t *actualooblen, bool raw); int mtk_snand_write_page_auto_oob(struct mtk_snand *snf, uint64_t addr, const void *buf, const void *oob, size_t ooblen, size_t *actualooblen, bool raw); int mtk_snand_get_chip_info(struct mtk_snand *snf, struct mtk_snand_chip_info *info); int mtk_snand_irq_process(struct mtk_snand *snf); #endif /* _MTK_SNAND_H_ */