xref: /rk3399_rockchip-uboot/drivers/rkflash/rkflash_blk.h (revision 83ab7b4937c098a3febc8f361a6be16f28ae16aa)
1 /*
2  * Copyright (c) 2018 Fuzhou Rockchip Electronics Co., Ltd
3  *
4  * SPDX-License-Identifier: (GPL-2.0+ OR MIT)
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 };
36 
37 struct rkflash_dev {
38 	u8 reserved[128];
39 };
40 
41 struct rkflash_info {
42 	void *ioaddr;
43 	u32 flash_con_type;
44 	u32 freq;
45 	u32 density;
46 	struct udevice *child_dev;
47 	struct rkflash_dev flash_dev_info;
48 	/*
49 	 * read() - read from a block device
50 	 *
51 	 * @start:	Start block number to read (0=first)
52 	 * @blkcnt:	Number of blocks to read
53 	 * @buffer:	Destination buffer for data read
54 	 * @return 0 is OK, -1 is error.
55 	 */
56 	int (*read)(struct udevice *udev,
57 		    u32 start,
58 		    u32 blkcnt,
59 		    void *buffer);
60 	/*
61 	 * write() - write to a block device
62 	 *
63 	 * @dev:	Device to write to
64 	 * @start:	Start block number to write (0=first)
65 	 * @blkcnt:	Number of blocks to write
66 	 * @buffer:	Source buffer for data to write
67 	 * @return 0 is OK, -1 is error.
68 	 */
69 	int (*write)(struct udevice *udev,
70 		     u32 start,
71 		     u32 blkcnt,
72 		     const void *buffer);
73 	/*
74 	 * erase() - erase a section of a block device
75 	 *
76 	 * @dev:	Device to (partially) erase
77 	 * @start:	Start block number to erase (0=first)
78 	 * @blkcnt:	Number of blocks to erase
79 	 * @return 0 is OK, -1 is error.
80 	 */
81 	int (*erase)(struct udevice *udev,
82 		     u32 start,
83 		     u32 blkcnt);
84 };
85 
86 struct rkflash_uclass_priv {
87 	struct rkflash_info *ndev;
88 };
89 
90 #endif /* __RKSFC_BLK_H__ */
91