spi: tegra210-quad: Fix iterator outside loop
authorKrishna Yarlagadda <kyarlagadda@nvidia.com>
Mon, 27 Feb 2023 20:04:28 +0000 (01:34 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 11 Mar 2023 12:55:29 +0000 (13:55 +0100)
[ Upstream commit 2449d436681d40bc63ec2c766fd51b632270d8a7 ]

Fix warn: iterator used outside loop: 'xfer'. 'xfer' variable contain
invalid value in few conditions. Complete transfer within DATA phase
in successful case and at the end for failed transfer.

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Link:https://lore.kernel.org/all/202210191211.46FkzKmv-lkp@intel.com/
Fixes: 8777dd9dff40 ("spi: tegra210-quad: Fix combined sequence")

Signed-off-by: Krishna Yarlagadda <kyarlagadda@nvidia.com>
Link: https://lore.kernel.org/r/20230227200428.45832-1-kyarlagadda@nvidia.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/spi/spi-tegra210-quad.c

index 6498948..06c54d4 100644 (file)
@@ -1156,6 +1156,10 @@ static int tegra_qspi_combined_seq_xfer(struct tegra_qspi *tqspi,
                                ret = -EIO;
                                goto exit;
                        }
+                       if (!xfer->cs_change) {
+                               tegra_qspi_transfer_end(spi);
+                               spi_transfer_delay_exec(xfer);
+                       }
                        break;
                default:
                        ret = -EINVAL;
@@ -1164,14 +1168,14 @@ static int tegra_qspi_combined_seq_xfer(struct tegra_qspi *tqspi,
                msg->actual_length += xfer->len;
                transfer_phase++;
        }
-       if (!xfer->cs_change) {
-               tegra_qspi_transfer_end(spi);
-               spi_transfer_delay_exec(xfer);
-       }
        ret = 0;
 
 exit:
        msg->status = ret;
+       if (ret < 0) {
+               tegra_qspi_transfer_end(spi);
+               spi_transfer_delay_exec(xfer);
+       }
 
        return ret;
 }