sf: Preserve QE bit when clearing BP# bits for Macronix flash
On some flash (like Macronix), QE (quad enable) bit is in the same status register as BP# bits, and we need preserve its original value during a reboot cycle as this is required by some platforms (like Intel ICH SPI controller working under descriptor mode). Signed-off-by: Bin Meng <bmeng.cn@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: Jagan Teki <jagan@openedev.com> [Refined code for readability] Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
This commit is contained in:
parent
8fc2faefdd
commit
294f2050c4
@ -947,11 +947,25 @@ int spi_flash_scan(struct spi_flash *flash)
|
||||
if (IS_ERR_OR_NULL(info))
|
||||
return -ENOENT;
|
||||
|
||||
/* Flash powers up read-only, so clear BP# bits */
|
||||
/*
|
||||
* Flash powers up read-only, so clear BP# bits.
|
||||
*
|
||||
* Note on some flash (like Macronix), QE (quad enable) bit is in the
|
||||
* same status register as BP# bits, and we need preserve its original
|
||||
* value during a reboot cycle as this is required by some platforms
|
||||
* (like Intel ICH SPI controller working under descriptor mode).
|
||||
*/
|
||||
if (JEDEC_MFR(info) == SPI_FLASH_CFI_MFR_ATMEL ||
|
||||
JEDEC_MFR(info) == SPI_FLASH_CFI_MFR_MACRONIX ||
|
||||
JEDEC_MFR(info) == SPI_FLASH_CFI_MFR_SST)
|
||||
write_sr(flash, 0);
|
||||
(JEDEC_MFR(info) == SPI_FLASH_CFI_MFR_SST) ||
|
||||
(JEDEC_MFR(info) == SPI_FLASH_CFI_MFR_MACRONIX)) {
|
||||
u8 sr = 0;
|
||||
|
||||
if (JEDEC_MFR(info) == SPI_FLASH_CFI_MFR_MACRONIX) {
|
||||
read_sr(flash, &sr);
|
||||
sr &= STATUS_QEB_MXIC;
|
||||
}
|
||||
write_sr(flash, sr);
|
||||
}
|
||||
|
||||
flash->name = info->name;
|
||||
flash->memory_map = spi->memory_map;
|
||||
|
Loading…
Reference in New Issue
Block a user