mtd: mtd_blk: implement mtd_dread_prepare()

Prepare to read data, then data is transmitted in background.

Signed-off-by: Jason Zhu <jason.zhu@rock-chips.com>
Change-Id: Iab560f7f903549a0b6c27f7e8e2ac984ae2ac75c
Signed-off-by: Jon Lin <jon.lin@rock-chips.com>
This commit is contained in:
Jason Zhu 2020-07-01 16:34:02 +08:00 committed by Jianhong Chen
parent a505e63b04
commit 3fb7bf029a
1 changed files with 9 additions and 0 deletions

View File

@ -12,7 +12,9 @@
#include <malloc.h>
#include <nand.h>
#include <part.h>
#include <spi.h>
#include <dm/device-internal.h>
#include <linux/mtd/spi-nor.h>
#define MTD_PART_NAND_HEAD "mtdparts="
#define MTD_ROOT_PART_NUM "ubi.mtd="
@ -398,9 +400,16 @@ ulong mtd_dread(struct udevice *udev, lbaint_t start,
return 0;
} else if (desc->devnum == BLK_MTD_SPI_NOR) {
#if defined(CONFIG_SPI_FLASH_MTD) || defined(CONFIG_SPL_BUILD)
struct spi_nor *nor = (struct spi_nor *)mtd->priv;
struct spi_slave *spi = nor->spi;
size_t retlen_nor;
if (desc->op_flag == BLK_PRE_RW)
spi->mode |= SPI_DMA_PREPARE;
mtd_read(mtd, off, rwsize, &retlen_nor, dst);
if (desc->op_flag == BLK_PRE_RW)
spi->mode |= SPI_DMA_PREPARE;
if (retlen_nor == rwsize)
return blkcnt;
else