Skip to content

Commit

Permalink
spi: spi-zynqmp-gqspi: Fix call trace during QSPI suspend
Browse files Browse the repository at this point in the history
During GQSPI diver probe a spi_controller instance is passed to
platform_set_drvdata( ) API. But in zynqmp_qspi_suspend( ) API the return
value of dev_get_drvdata(dev) is assigned to zynqmp_qspi instance instead
of spi_controller instance. This results in invalid pointer dereferencing
and causes kernel crash during QSPI suspend.
Fixed the issue by assigning the return value of dev_get_drvdata(dev) to
spi_controller instance in zynqmp_qspi_suspend API & then retrieving
zynqmp_qspi instance from spi_controller instance.

Signed-off-by: Amit Kumar Mahapatra <amit.kumar-mahapatra@xilinx.com>
  • Loading branch information
Amit Kumar Mahapatra authored and michalsimek committed Sep 15, 2022
1 parent 6975220 commit dd625f0
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions drivers/spi/spi-zynqmp-gqspi.c
Expand Up @@ -1021,8 +1021,8 @@ static int zynqmp_qspi_read_op(struct zynqmp_qspi *xqspi, u8 rx_nbits,
*/
static int __maybe_unused zynqmp_qspi_suspend(struct device *dev)
{
struct zynqmp_qspi *xqspi = dev_get_drvdata(dev);
struct spi_controller *ctlr = xqspi->ctlr;
struct spi_controller *ctlr = dev_get_drvdata(dev);
struct zynqmp_qspi *xqspi = spi_controller_get_devdata(ctlr);
int ret;

ret = spi_controller_suspend(ctlr);
Expand Down

0 comments on commit dd625f0

Please sign in to comment.