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