xref: /OK3568_Linux_fs/u-boot/drivers/rkflash/rkflash_blk.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  * Copyright (c) 2018 Fuzhou Rockchip Electronics Co., Ltd
3  *
4  * SPDX-License-Identifier:	GPL-2.0
5  */
6 
7 #ifndef __RKFLASH_BLK_H__
8 #define __RKFLASH_BLK_H__
9 
10 enum flash_con_type {
11 	FLASH_CON_TYPE_NANDC = 0,
12 	FLASH_CON_TYPE_SFC,
13 	FLASH_CON_TYPE_MAX,
14 };
15 
16 enum flash_type {
17 	FLASH_TYPE_NANDC_NAND = 0,
18 	FLASH_TYPE_SFC_NOR,
19 	FLASH_TYPE_SFC_NAND,
20 	FLASH_TYPE_MAX,
21 };
22 
23 struct flash_operation {
24 	int id;
25 	int (*flash_init)(struct udevice *udev);
26 	u32 (*flash_get_capacity)(struct udevice *udev);
27 	int (*flash_read)(struct udevice *udev,
28 			  u32 start,
29 			  u32 blkcnt,
30 			  void *buffer);
31 	int (*flash_write)(struct udevice *udev,
32 			   u32 start,
33 			   u32 blkcnt,
34 			   const void *buffer);
35 	int (*flash_erase)(struct udevice *udev,
36 			   u32 start,
37 			   u32 blkcnt);
38 	int (*vendor_read)(struct blk_desc *dev_desc,
39 			   u32 start,
40 			   u32 blkcnt,
41 			   void *buffer);
42 	int (*vendor_write)(struct blk_desc *dev_desc,
43 			    u32 start,
44 			    u32 blkcnt,
45 			    void *buffer);
46 };
47 
48 struct rkflash_dev {
49 	u8 reserved[128];
50 };
51 
52 struct rkflash_info {
53 	void *ioaddr;
54 	u32 flash_con_type;
55 	u32 freq;
56 	u32 density;
57 	struct udevice *child_dev;
58 	struct rkflash_dev flash_dev_info;
59 	/*
60 	 * read() - read from a block device
61 	 *
62 	 * @start:	Start block number to read (0=first)
63 	 * @blkcnt:	Number of blocks to read
64 	 * @buffer:	Destination buffer for data read
65 	 * @return 0 is OK, -1 is error.
66 	 */
67 	int (*read)(struct udevice *udev,
68 		    u32 start,
69 		    u32 blkcnt,
70 		    void *buffer);
71 	/*
72 	 * write() - write to a block device
73 	 *
74 	 * @dev:	Device to write to
75 	 * @start:	Start block number to write (0=first)
76 	 * @blkcnt:	Number of blocks to write
77 	 * @buffer:	Source buffer for data to write
78 	 * @return 0 is OK, -1 is error.
79 	 */
80 	int (*write)(struct udevice *udev,
81 		     u32 start,
82 		     u32 blkcnt,
83 		     const void *buffer);
84 	/*
85 	 * erase() - erase a section of a block device
86 	 *
87 	 * @dev:	Device to (partially) erase
88 	 * @start:	Start block number to erase (0=first)
89 	 * @blkcnt:	Number of blocks to erase
90 	 * @return 0 is OK, -1 is error.
91 	 */
92 	int (*erase)(struct udevice *udev,
93 		     u32 start,
94 		     u32 blkcnt);
95 };
96 
97 struct rkflash_uclass_priv {
98 	struct rkflash_info *ndev;
99 };
100 
101 #endif /* __RKSFC_BLK_H__ */
102