mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-21 12:25:27 +00:00
mtd: spi-nor: Remove recently added nor->addr_width == 3 test
Remove undocumented nor->addr_width == 3 test. This was added in commit5d40b3d384
("mtd: spi-nor: Add parallel and stacked memories support") without any explanation in the commit message. Remove it. This also has a bad side-effect which breaks READ operation of every SPI NOR which does not use addr_width == 3, e.g. s25fs512s does not work at all. This is because if addr_width != 3, rem_bank_len is always 0, and if rem_bank_len is 0, then read_len is 0 and if read_len is 0, then the spi_nor_read() returns -EIO. Basic reproducer is as follows: " => sf probe ; sf read 0x50000000 0 0x10000 SF: Detected s25fs512s with page size 256 Bytes, erase size 256 KiB, total 64 MiB device 0 offset 0x0, size 0x10000 SF: 65536 bytes @ 0x0 Read: ERROR -5 " Fixes:5d40b3d384
("mtd: spi-nor: Add parallel and stacked memories support") Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
This commit is contained in:
parent
8963d433eb
commit
19e189b1de
1 changed files with 14 additions and 19 deletions
|
@ -1595,16 +1595,14 @@ static int spi_nor_read(struct mtd_info *mtd, loff_t from, size_t len,
|
||||||
}
|
}
|
||||||
|
|
||||||
while (len) {
|
while (len) {
|
||||||
if (nor->addr_width == 3) {
|
|
||||||
if (nor->flags & SNOR_F_HAS_PARALLEL) {
|
if (nor->flags & SNOR_F_HAS_PARALLEL) {
|
||||||
bank = (u32)from / (SZ_16M << 0x01);
|
bank = (u32)from / (SZ_16M << 0x01);
|
||||||
rem_bank_len = ((SZ_16M << 0x01) *
|
rem_bank_len = ((SZ_16M << 0x01) * (bank + 1)) - from;
|
||||||
(bank + 1)) - from;
|
|
||||||
} else {
|
} else {
|
||||||
bank = (u32)from / SZ_16M;
|
bank = (u32)from / SZ_16M;
|
||||||
rem_bank_len = (SZ_16M * (bank + 1)) - from;
|
rem_bank_len = (SZ_16M * (bank + 1)) - from;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
offset = from;
|
offset = from;
|
||||||
|
|
||||||
if (nor->flags & SNOR_F_HAS_STACKED) {
|
if (nor->flags & SNOR_F_HAS_STACKED) {
|
||||||
|
@ -1619,13 +1617,11 @@ static int spi_nor_read(struct mtd_info *mtd, loff_t from, size_t len,
|
||||||
if (nor->flags & SNOR_F_HAS_PARALLEL)
|
if (nor->flags & SNOR_F_HAS_PARALLEL)
|
||||||
offset /= 2;
|
offset /= 2;
|
||||||
|
|
||||||
if (nor->addr_width == 3) {
|
|
||||||
#ifdef CONFIG_SPI_FLASH_BAR
|
#ifdef CONFIG_SPI_FLASH_BAR
|
||||||
ret = write_bar(nor, offset);
|
ret = write_bar(nor, offset);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return log_ret(ret);
|
return log_ret(ret);
|
||||||
#endif
|
#endif
|
||||||
}
|
|
||||||
|
|
||||||
if (len < rem_bank_len)
|
if (len < rem_bank_len)
|
||||||
read_len = len;
|
read_len = len;
|
||||||
|
@ -2012,13 +2008,12 @@ static int spi_nor_write(struct mtd_info *mtd, loff_t to, size_t len,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nor->addr_width == 3) {
|
|
||||||
#ifdef CONFIG_SPI_FLASH_BAR
|
#ifdef CONFIG_SPI_FLASH_BAR
|
||||||
ret = write_bar(nor, offset);
|
ret = write_bar(nor, offset);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
#endif
|
#endif
|
||||||
}
|
|
||||||
/* the size of data remaining on the first page */
|
/* the size of data remaining on the first page */
|
||||||
page_remain = min_t(size_t,
|
page_remain = min_t(size_t,
|
||||||
nor->page_size - page_offset, len - i);
|
nor->page_size - page_offset, len - i);
|
||||||
|
|
Loading…
Add table
Reference in a new issue