S32K3XX QSPI No need to check TX FIFO buffer when MPU is correctly configured
This commit is contained in:
parent
ec5030ebe6
commit
90472785d3
@ -374,6 +374,7 @@ config S32K3XX_ENET
|
|||||||
config S32K3XX_QSPI
|
config S32K3XX_QSPI
|
||||||
bool "QSPI Flash"
|
bool "QSPI Flash"
|
||||||
default n
|
default n
|
||||||
|
select ARCH_USE_MPU
|
||||||
depends on S32K3XX_HAVE_QSPI
|
depends on S32K3XX_HAVE_QSPI
|
||||||
|
|
||||||
menu "FlexCAN"
|
menu "FlexCAN"
|
||||||
|
@ -888,6 +888,7 @@ static int qspi_transmit_blocking(struct s32k3xx_qspidev_s *priv,
|
|||||||
uint32_t count = UINT32_MAX;
|
uint32_t count = UINT32_MAX;
|
||||||
uint32_t *data = (uint32_t *)meminfo->buffer;
|
uint32_t *data = (uint32_t *)meminfo->buffer;
|
||||||
uint32_t write_cycle = min(32, ((uint32_t)remaining) >> 2U);
|
uint32_t write_cycle = min(32, ((uint32_t)remaining) >> 2U);
|
||||||
|
uint32_t timeout = 1000;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
/* Copy sequence in LUT registers */
|
/* Copy sequence in LUT registers */
|
||||||
@ -916,31 +917,33 @@ static int qspi_transmit_blocking(struct s32k3xx_qspidev_s *priv,
|
|||||||
|
|
||||||
putreg32(QSPI_AMBA_BASE + meminfo->addr, S32K3XX_QSPI_SFAR);
|
putreg32(QSPI_AMBA_BASE + meminfo->addr, S32K3XX_QSPI_SFAR);
|
||||||
|
|
||||||
/* Re-attempt filling TX fifo if size doesn't match */
|
|
||||||
|
|
||||||
while ((getreg32(S32K3XX_QSPI_TBSR) & QSPI_TBSR_TRBLF_MASK) != count)
|
|
||||||
{
|
|
||||||
/* Clear TX fifo */
|
/* Clear TX fifo */
|
||||||
|
|
||||||
regval = getreg32(S32K3XX_QSPI_MCR);
|
regval = getreg32(S32K3XX_QSPI_MCR);
|
||||||
regval |= QSPI_MCR_CLR_TXF;
|
regval |= QSPI_MCR_CLR_TXF;
|
||||||
putreg32(regval, S32K3XX_QSPI_MCR);
|
putreg32(regval, S32K3XX_QSPI_MCR);
|
||||||
|
|
||||||
|
do /* Wait for fifo clear otherwise timeout */
|
||||||
|
{
|
||||||
|
timeout--;
|
||||||
|
}
|
||||||
|
while ((getreg32(S32K3XX_QSPI_TBSR) & QSPI_TBSR_TRBLF_MASK) != 0
|
||||||
|
&& timeout > 0);
|
||||||
|
|
||||||
|
if (timeout == 0)
|
||||||
|
{
|
||||||
|
return -ETIMEDOUT;
|
||||||
|
}
|
||||||
|
|
||||||
spiinfo("Transmit: %" PRIu32 " size: %" PRIu32 "\n",
|
spiinfo("Transmit: %" PRIu32 " size: %" PRIu32 "\n",
|
||||||
meminfo->addr, meminfo->buflen);
|
meminfo->addr, meminfo->buflen);
|
||||||
|
|
||||||
for (count = 0U; count < write_cycle; count++)
|
for (count = 0U; count < write_cycle; count++)
|
||||||
{
|
{
|
||||||
while ((getreg32(S32K3XX_QSPI_TBSR)
|
|
||||||
& QSPI_TBSR_TRBLF_MASK) != count)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
putreg32(*data, S32K3XX_QSPI_TBDR);
|
putreg32(*data, S32K3XX_QSPI_TBDR);
|
||||||
data++;
|
data++;
|
||||||
remaining -= 4U;
|
remaining -= 4U;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* Trigger IP command with specified sequence and size */
|
/* Trigger IP command with specified sequence and size */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user