1441217e3SZhaoyifeng /* 2441217e3SZhaoyifeng * Copyright (C) (C) Copyright 2016-2017 Rockchip Electronics Co., Ltd 3441217e3SZhaoyifeng * 4441217e3SZhaoyifeng * SPDX-License-Identifier: GPL-2.0+ 5441217e3SZhaoyifeng */ 6441217e3SZhaoyifeng 7441217e3SZhaoyifeng #ifndef __DRIVER_RKNAND_H__ 8441217e3SZhaoyifeng #define __DRIVER_RKNAND_H__ 9441217e3SZhaoyifeng 10441217e3SZhaoyifeng #include <asm/io.h> 11441217e3SZhaoyifeng #include <clk.h> 12441217e3SZhaoyifeng #include <asm/arch/clock.h> 13441217e3SZhaoyifeng 14441217e3SZhaoyifeng /* Represents an NVM Express device. Each nvme_dev is a PCI function. */ 15441217e3SZhaoyifeng struct rknand_dev { 16441217e3SZhaoyifeng void *ioaddr; 17441217e3SZhaoyifeng struct clk nandc_clk; 18441217e3SZhaoyifeng struct clk nandc_hclk; 19441217e3SZhaoyifeng u32 density; 20441217e3SZhaoyifeng struct udevice *dev; 21441217e3SZhaoyifeng 22441217e3SZhaoyifeng /* 23441217e3SZhaoyifeng * read() - read from a block device 24441217e3SZhaoyifeng * 25441217e3SZhaoyifeng * @start: Start block number to read (0=first) 26441217e3SZhaoyifeng * @blkcnt: Number of blocks to read 27441217e3SZhaoyifeng * @buffer: Destination buffer for data read 28441217e3SZhaoyifeng * @return 0 is OK, -1 is error. 29441217e3SZhaoyifeng */ 30441217e3SZhaoyifeng u32 (*read)(u8 lun, u32 start, u32 blkcnt, void *buffer); 31441217e3SZhaoyifeng /* 32441217e3SZhaoyifeng * write() - write to a block device 33441217e3SZhaoyifeng * 34441217e3SZhaoyifeng * @dev: Device to write to 35441217e3SZhaoyifeng * @start: Start block number to write (0=first) 36441217e3SZhaoyifeng * @blkcnt: Number of blocks to write 37441217e3SZhaoyifeng * @buffer: Source buffer for data to write 38441217e3SZhaoyifeng * @return 0 is OK, -1 is error. 39441217e3SZhaoyifeng */ 40441217e3SZhaoyifeng u32 (*write)(u8 lun, u32 start, u32 blkcnt, const void *buffer); 41441217e3SZhaoyifeng /* 42441217e3SZhaoyifeng * erase() - erase a section of a block device 43441217e3SZhaoyifeng * 44441217e3SZhaoyifeng * @dev: Device to (partially) erase 45441217e3SZhaoyifeng * @start: Start block number to erase (0=first) 46441217e3SZhaoyifeng * @blkcnt: Number of blocks to erase 47441217e3SZhaoyifeng * @return 0 is OK, -1 is error. 48441217e3SZhaoyifeng */ 49441217e3SZhaoyifeng u32 (*erase)(u8 lun, u32 start, u32 blkcnt); 50441217e3SZhaoyifeng }; 51441217e3SZhaoyifeng 52441217e3SZhaoyifeng struct rknand_uclass_priv { 53441217e3SZhaoyifeng struct rknand_dev *ndev; 54441217e3SZhaoyifeng }; 55441217e3SZhaoyifeng 56441217e3SZhaoyifeng u32 ftl_write(u8 lun, u32 start, u32 blkcnt, const void *buffer); 57441217e3SZhaoyifeng u32 ftl_read(u8 lun, u32 start, u32 blkcnt, void *buffer); 58441217e3SZhaoyifeng u32 ftl_discard(u8 lun, u32 start, u32 blkcnt); 59441217e3SZhaoyifeng u32 ftl_get_density(u8 lun); 60441217e3SZhaoyifeng int rk_ftl_init(u32 *reg_base); 61*a4399586SYifeng Zhao u32 ftl_vendor_read(u32 index, u32 nsec, void *buf); 62*a4399586SYifeng Zhao u32 ftl_vendor_write(u32 index, u32 nsec, void *buf); 63441217e3SZhaoyifeng #endif /* __DRIVER_RKNAND_H__ */ 64