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