@@ -71,6 +71,7 @@ struct spi_imx_devtype_data {
71
71
void (* reset )(struct spi_imx_data * );
72
72
void (* setup_wml )(struct spi_imx_data * );
73
73
void (* disable )(struct spi_imx_data * );
74
+ void (* disable_dma )(struct spi_imx_data * );
74
75
bool has_dmamode ;
75
76
bool has_slavemode ;
76
77
unsigned int fifo_size ;
@@ -485,6 +486,11 @@ static void mx51_ecspi_trigger(struct spi_imx_data *spi_imx)
485
486
writel (reg , spi_imx -> base + MX51_ECSPI_CTRL );
486
487
}
487
488
489
+ static void mx51_disable_dma (struct spi_imx_data * spi_imx )
490
+ {
491
+ writel (0 , spi_imx -> base + MX51_ECSPI_DMA );
492
+ }
493
+
488
494
static void mx51_ecspi_disable (struct spi_imx_data * spi_imx )
489
495
{
490
496
u32 ctrl ;
@@ -987,6 +993,7 @@ static struct spi_imx_devtype_data imx51_ecspi_devtype_data = {
987
993
.rx_available = mx51_ecspi_rx_available ,
988
994
.reset = mx51_ecspi_reset ,
989
995
.setup_wml = mx51_setup_wml ,
996
+ .disable_dma = mx51_disable_dma ,
990
997
.fifo_size = 64 ,
991
998
.has_dmamode = true,
992
999
.dynamic_burst = true,
@@ -1001,6 +1008,7 @@ static struct spi_imx_devtype_data imx53_ecspi_devtype_data = {
1001
1008
.prepare_transfer = mx51_ecspi_prepare_transfer ,
1002
1009
.trigger = mx51_ecspi_trigger ,
1003
1010
.rx_available = mx51_ecspi_rx_available ,
1011
+ .disable_dma = mx51_disable_dma ,
1004
1012
.reset = mx51_ecspi_reset ,
1005
1013
.fifo_size = 64 ,
1006
1014
.has_dmamode = true,
@@ -1385,6 +1393,7 @@ static int spi_imx_dma_transfer(struct spi_imx_data *spi_imx,
1385
1393
DMA_PREP_INTERRUPT | DMA_CTRL_ACK );
1386
1394
if (!desc_tx ) {
1387
1395
dmaengine_terminate_all (master -> dma_tx );
1396
+ dmaengine_terminate_all (master -> dma_rx );
1388
1397
return - EINVAL ;
1389
1398
}
1390
1399
@@ -1498,6 +1507,7 @@ static int spi_imx_transfer(struct spi_device *spi,
1498
1507
struct spi_transfer * transfer )
1499
1508
{
1500
1509
struct spi_imx_data * spi_imx = spi_master_get_devdata (spi -> master );
1510
+ int ret ;
1501
1511
1502
1512
/* flush rxfifo before transfer */
1503
1513
while (spi_imx -> devtype_data -> rx_available (spi_imx ))
@@ -1506,10 +1516,23 @@ static int spi_imx_transfer(struct spi_device *spi,
1506
1516
if (spi_imx -> slave_mode )
1507
1517
return spi_imx_pio_transfer_slave (spi , transfer );
1508
1518
1509
- if (spi_imx -> usedma )
1510
- return spi_imx_dma_transfer (spi_imx , transfer );
1511
- else
1512
- return spi_imx_pio_transfer (spi , transfer );
1519
+ /*
1520
+ * fallback PIO mode if dma setup error happen, for example sdma
1521
+ * firmware may not be updated as ERR009165 required.
1522
+ */
1523
+ if (spi_imx -> usedma ) {
1524
+ ret = spi_imx_dma_transfer (spi_imx , transfer );
1525
+ if (ret != - EINVAL )
1526
+ return ret ;
1527
+
1528
+ spi_imx -> devtype_data -> disable_dma (spi_imx );
1529
+
1530
+ spi_imx -> usedma = false;
1531
+ spi_imx -> dynamic_burst = spi_imx -> devtype_data -> dynamic_burst ;
1532
+ dev_dbg (& spi -> dev , "Fallback to PIO mode\n" );
1533
+ }
1534
+
1535
+ return spi_imx_pio_transfer (spi , transfer );
1513
1536
}
1514
1537
1515
1538
static int spi_imx_setup (struct spi_device * spi )
0 commit comments