flash: spi: perform both flash_read() and flash_write() in chunks of 32 bytes
This commit is contained in:
parent
7ab3a84fc4
commit
fa49f634e4
1 changed files with 34 additions and 11 deletions
|
@ -94,34 +94,57 @@ static size_t spi_flash_get_size(struct flash_dev *dev)
|
|||
static size_t spi_flash_read(struct flash_dev *dev, uint32_t addr, void *data,
|
||||
size_t len)
|
||||
{
|
||||
char cmd[4] = { SPI_FLASH_READ };
|
||||
char cmd[4];
|
||||
struct spi_dev *spi_dev = dev->priv;
|
||||
size_t nbytes, ret = 0;
|
||||
|
||||
spi_flash_addr(cmd, addr);
|
||||
while (len) {
|
||||
cmd[0] = SPI_FLASH_READ;
|
||||
spi_flash_addr(cmd, addr);
|
||||
|
||||
spi_tx_rx(spi_dev, data, len, cmd, sizeof cmd);
|
||||
nbytes = min(len, 32);
|
||||
|
||||
return len;
|
||||
spi_tx_rx(spi_dev, data, len, cmd, sizeof cmd);
|
||||
|
||||
addr += nbytes;
|
||||
data += nbytes;
|
||||
len -= nbytes;
|
||||
ret += nbytes;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static size_t spi_flash_write(struct flash_dev *dev, uint32_t addr,
|
||||
const void *data, size_t len)
|
||||
{
|
||||
char cmd[4 + len];
|
||||
char cmd[4 + 32];
|
||||
struct spi_dev *spi_dev = dev->priv;
|
||||
size_t nbytes, ret = 0;
|
||||
|
||||
spi_flash_write_enable(dev);
|
||||
|
||||
cmd[0] = SPI_FLASH_PAGE_PROGRAM;
|
||||
spi_flash_addr(cmd, addr);
|
||||
memcpy(cmd + 4, data, len);
|
||||
while (len) {
|
||||
spi_flash_wait(dev);
|
||||
|
||||
cmd[0] = SPI_FLASH_PAGE_PROGRAM;
|
||||
spi_flash_addr(cmd, addr);
|
||||
|
||||
nbytes = min(len, 32);
|
||||
|
||||
memmove(cmd + 4, data, nbytes);
|
||||
spi_tx_rx(spi_dev, NULL, 0, cmd, sizeof cmd);
|
||||
|
||||
addr += nbytes;
|
||||
data += nbytes;
|
||||
len -= nbytes;
|
||||
ret += nbytes;
|
||||
}
|
||||
|
||||
spi_tx_rx(spi_dev, NULL, 0, cmd, sizeof cmd);
|
||||
spi_flash_wait(dev);
|
||||
|
||||
spi_flash_write_disable(dev);
|
||||
|
||||
return len;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int spi_flash_erase(struct flash_dev *dev, uint32_t addr)
|
||||
|
|
Loading…
Add table
Reference in a new issue