aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/mediatek/files-5.10/drivers/mtd/mtk-snand/mtk-snand.h
blob: 73c5cc60c941e96606564d5d6f8f894d97bd3825 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
/*
 * Copyright (C) 2020 MediaTek Inc. All Rights Reserved.
 *
 * Author: Weijie Gao <weijie.gao@mediatek.com>
 */

#ifndef _MTK_SNAND_H_
#define _MTK_SNAND_H_

#ifndef PRIVATE_MTK_SNAND_HEADER
#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>
#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_ */