diff options
| author | Alexander Stein <alexander.stein@systec-electronic.com> | 2015-11-04 09:19:10 +0100 | 
|---|---|---|
| committer | York Sun <yorksun@freescale.com> | 2015-12-15 08:57:33 +0800 | 
| commit | beedbc2ea0e71c779b92e4d74b928a266d3e86f9 (patch) | |
| tree | e11ed9ac46db832dc7ad9980d88fe2cfef2844ab /drivers/spi/fsl_qspi.c | |
| parent | c04921414c087e15f8fa82d808a25e9338a7e8d5 (diff) | |
fsl_qspi: Pet the watchdog while reading/writing
When reading a large blob. e.g. a linux kernel (several MiBs) a watchdog
timeout might occur meanwhile. So pet the watchdog while operating on
the flash.
Signed-off-by: Alexander Stein <alexander.stein@systec-electronic.com>
Reviewed-by: York Sun <yorksun@freescale.com>
Diffstat (limited to 'drivers/spi/fsl_qspi.c')
| -rw-r--r-- | drivers/spi/fsl_qspi.c | 5 | 
1 files changed, 5 insertions, 0 deletions
| diff --git a/drivers/spi/fsl_qspi.c b/drivers/spi/fsl_qspi.c index ed391142bee..feec3e80b6a 100644 --- a/drivers/spi/fsl_qspi.c +++ b/drivers/spi/fsl_qspi.c @@ -13,6 +13,7 @@  #include <linux/sizes.h>  #include <dm.h>  #include <errno.h> +#include <watchdog.h>  #include "fsl_qspi.h"  DECLARE_GLOBAL_DATA_PTR; @@ -527,6 +528,8 @@ static void qspi_op_read(struct fsl_qspi_priv *priv, u32 *rxbuf, u32 len)  	to_or_from = priv->sf_addr + priv->cur_amba_base;  	while (len > 0) { +		WATCHDOG_RESET(); +  		qspi_write32(priv->flags, ®s->sfar, to_or_from);  		size = (len > RX_BUFFER_SIZE) ? @@ -574,6 +577,8 @@ static void qspi_op_write(struct fsl_qspi_priv *priv, u8 *txbuf, u32 len)  	status_reg = 0;  	while ((status_reg & FLASH_STATUS_WEL) != FLASH_STATUS_WEL) { +		WATCHDOG_RESET(); +  		qspi_write32(priv->flags, ®s->ipcr,  			     (SEQID_WREN << QSPI_IPCR_SEQID_SHIFT) | 0);  		while (qspi_read32(priv->flags, ®s->sr) & QSPI_SR_BUSY_MASK) | 
