From 9363a9319ece4b848ea2597de694e5e4f1c526ce Mon Sep 17 00:00:00 2001 From: Francois Ramu Date: Wed, 22 Feb 2023 11:51:46 +0100 Subject: [PATCH] drivers: flash: stm32 qspi Enter 4-Byte Address Mode No need to read back the CR (NOR flash config or control register) to check if entering the 4-Byte Address Mode is effective. The action of this command is immediate and the result (bit field of the CR) is NOR flash vendor-specific. Signed-off-by: Francois Ramu --- drivers/flash/flash_stm32_qspi.c | 25 ++++++------------------- drivers/flash/spi_nor.h | 3 --- 2 files changed, 6 insertions(+), 22 deletions(-) diff --git a/drivers/flash/flash_stm32_qspi.c b/drivers/flash/flash_stm32_qspi.c index 7cda68c8bf6..a0b6639a3d7 100644 --- a/drivers/flash/flash_stm32_qspi.c +++ b/drivers/flash/flash_stm32_qspi.c @@ -719,34 +719,21 @@ static int setup_pages_layout(const struct device *dev) static int qspi_program_addr_4b(const struct device *dev) { - uint8_t reg; - int ret; - /* Program the flash memory to use 4 bytes addressing */ QSPI_CommandTypeDef cmd = { .Instruction = SPI_NOR_CMD_4BA, .InstructionMode = QSPI_INSTRUCTION_1_LINE, }; - ret = qspi_send_cmd(dev, &cmd); - if (ret) { - return ret; - } - /* - * Read control register to verify if 4byte addressing mode - * is enabled. + * No need to Read control register afterwards to verify if 4byte addressing mode + * is enabled as the effect of the command is immediate + * and the SPI_NOR_CMD_RDCR is vendor-specific : + * SPI_NOR_4BYTE_BIT is BIT 5 for Macronix and 0 for Micron or Windbond + * Moreover bit value meaning is also vendor-specific */ - cmd.Instruction = SPI_NOR_CMD_RDCR; - cmd.InstructionMode = QSPI_INSTRUCTION_1_LINE; - cmd.DataMode = QSPI_DATA_1_LINE; - ret = qspi_read_access(dev, &cmd, ®, sizeof(reg)); - if (!ret && !(reg & SPI_NOR_4BYTE_BIT)) { - return -EINVAL; - } - - return ret; + return qspi_send_cmd(dev, &cmd); } static int qspi_read_status_register(const struct device *dev, uint8_t reg_num, uint8_t *reg) diff --git a/drivers/flash/spi_nor.h b/drivers/flash/spi_nor.h index fb9389bb85d..07c55f02b5a 100644 --- a/drivers/flash/spi_nor.h +++ b/drivers/flash/spi_nor.h @@ -15,9 +15,6 @@ #define SPI_NOR_WIP_BIT BIT(0) /* Write in progress */ #define SPI_NOR_WEL_BIT BIT(1) /* Write enable latch */ -/* Control register bits */ -#define SPI_NOR_4BYTE_BIT BIT(5) /* 4B addressing */ - /* Flash opcodes */ #define SPI_NOR_CMD_WRSR 0x01 /* Write status register */ #define SPI_NOR_CMD_RDSR 0x05 /* Read status register */