mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-23 13:36:05 +00:00
fix(st-spi): always check SR_TCF flags in stm32_qspi_wait_cmd()
Currently, SR_TCF flag is checked in case there is data, this criteria is not correct. SR_TCF flags is set when programmed number of bytes have been transferred to the memory device ("bytes" comprised command and data send to the SPI device). So even if there is no data, we must check SR_TCF flag. Change-Id: I99c4145e639c1b842feb3690dd78329179c18132 Signed-off-by: Christophe Kerello <christophe.kerello@foss.st.com>
This commit is contained in:
parent
aeef2c22da
commit
55de58323e
1 changed files with 8 additions and 8 deletions
|
@ -1,13 +1,10 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2019-2021, STMicroelectronics - All Rights Reserved
|
* Copyright (c) 2019-2022, STMicroelectronics - All Rights Reserved
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
|
* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <libfdt.h>
|
|
||||||
|
|
||||||
#include <platform_def.h>
|
|
||||||
|
|
||||||
#include <common/debug.h>
|
#include <common/debug.h>
|
||||||
#include <common/fdt_wrappers.h>
|
#include <common/fdt_wrappers.h>
|
||||||
|
@ -19,6 +16,9 @@
|
||||||
#include <drivers/st/stm32mp_reset.h>
|
#include <drivers/st/stm32mp_reset.h>
|
||||||
#include <lib/mmio.h>
|
#include <lib/mmio.h>
|
||||||
#include <lib/utils_def.h>
|
#include <lib/utils_def.h>
|
||||||
|
#include <libfdt.h>
|
||||||
|
|
||||||
|
#include <platform_def.h>
|
||||||
|
|
||||||
/* Timeout for device interface reset */
|
/* Timeout for device interface reset */
|
||||||
#define TIMEOUT_US_1_MS 1000U
|
#define TIMEOUT_US_1_MS 1000U
|
||||||
|
@ -139,10 +139,6 @@ static int stm32_qspi_wait_cmd(const struct spi_mem_op *op)
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
uint64_t timeout;
|
uint64_t timeout;
|
||||||
|
|
||||||
if (op->data.nbytes == 0U) {
|
|
||||||
return stm32_qspi_wait_for_not_busy();
|
|
||||||
}
|
|
||||||
|
|
||||||
timeout = timeout_init_us(QSPI_CMD_TIMEOUT_US);
|
timeout = timeout_init_us(QSPI_CMD_TIMEOUT_US);
|
||||||
while ((mmio_read_32(qspi_base() + QSPI_SR) & QSPI_SR_TCF) == 0U) {
|
while ((mmio_read_32(qspi_base() + QSPI_SR) & QSPI_SR_TCF) == 0U) {
|
||||||
if (timeout_elapsed(timeout)) {
|
if (timeout_elapsed(timeout)) {
|
||||||
|
@ -163,6 +159,10 @@ static int stm32_qspi_wait_cmd(const struct spi_mem_op *op)
|
||||||
/* Clear flags */
|
/* Clear flags */
|
||||||
mmio_write_32(qspi_base() + QSPI_FCR, QSPI_FCR_CTCF | QSPI_FCR_CTEF);
|
mmio_write_32(qspi_base() + QSPI_FCR, QSPI_FCR_CTCF | QSPI_FCR_CTEF);
|
||||||
|
|
||||||
|
if (ret == 0) {
|
||||||
|
ret = stm32_qspi_wait_for_not_busy();
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue