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