blob: a508ea5b80d6eac2a2c02714bdce5fedf4b9dece [file] [log] [blame]
developerfd40db22021-04-29 10:08:25 +08001/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2/*
3 * Copyright (C) 2020 MediaTek Inc. All Rights Reserved.
4 *
5 * Author: Weijie Gao <weijie.gao@mediatek.com>
6 */
7
8#ifndef _MTK_SNAND_H_
9#define _MTK_SNAND_H_
10
11#ifndef PRIVATE_MTK_SNAND_HEADER
12#include <stddef.h>
13#include <stdint.h>
14#include <stdbool.h>
15#endif
16
17enum mtk_snand_soc {
18 SNAND_SOC_MT7622,
19 SNAND_SOC_MT7629,
developer80309642022-08-17 10:19:17 +080020 SNAND_SOC_MT7981,
developerfd40db22021-04-29 10:08:25 +080021 SNAND_SOC_MT7986,
developerdfd23622022-11-25 19:02:20 +080022 SNAND_SOC_MT7988,
developerfd40db22021-04-29 10:08:25 +080023
24 __SNAND_SOC_MAX
25};
26
27struct mtk_snand_platdata {
28 void *nfi_base;
29 void *ecc_base;
30 enum mtk_snand_soc soc;
31 bool quad_spi;
32};
33
34struct mtk_snand_chip_info {
35 const char *model;
36 uint64_t chipsize;
37 uint32_t blocksize;
38 uint32_t pagesize;
39 uint32_t sparesize;
40 uint32_t spare_per_sector;
41 uint32_t fdm_size;
42 uint32_t fdm_ecc_size;
43 uint32_t num_sectors;
44 uint32_t sector_size;
45 uint32_t ecc_strength;
46 uint32_t ecc_bytes;
47};
48
49struct mtk_snand;
50struct snand_flash_info;
51
52int mtk_snand_init(void *dev, const struct mtk_snand_platdata *pdata,
53 struct mtk_snand **psnf);
54int mtk_snand_cleanup(struct mtk_snand *snf);
55
56int mtk_snand_chip_reset(struct mtk_snand *snf);
57int mtk_snand_read_page(struct mtk_snand *snf, uint64_t addr, void *buf,
58 void *oob, bool raw);
59int mtk_snand_write_page(struct mtk_snand *snf, uint64_t addr, const void *buf,
60 const void *oob, bool raw);
61int mtk_snand_erase_block(struct mtk_snand *snf, uint64_t addr);
62int mtk_snand_block_isbad(struct mtk_snand *snf, uint64_t addr);
63int mtk_snand_block_markbad(struct mtk_snand *snf, uint64_t addr);
64int mtk_snand_fill_oob(struct mtk_snand *snf, uint8_t *oobraw,
65 const uint8_t *oobbuf, size_t ooblen);
66int mtk_snand_transfer_oob(struct mtk_snand *snf, uint8_t *oobbuf,
67 size_t ooblen, const uint8_t *oobraw);
68int mtk_snand_read_page_auto_oob(struct mtk_snand *snf, uint64_t addr,
69 void *buf, void *oob, size_t ooblen,
70 size_t *actualooblen, bool raw);
71int mtk_snand_write_page_auto_oob(struct mtk_snand *snf, uint64_t addr,
72 const void *buf, const void *oob,
73 size_t ooblen, size_t *actualooblen,
74 bool raw);
75int mtk_snand_get_chip_info(struct mtk_snand *snf,
76 struct mtk_snand_chip_info *info);
77int mtk_snand_irq_process(struct mtk_snand *snf);
78
79#endif /* _MTK_SNAND_H_ */