Skip to content

Commit

Permalink
spi: spi-ti-qspi: Fix a bug when accessing non default CS
Browse files Browse the repository at this point in the history
When switching ChipSelect from default CS0 to any other CS, driver fails
to update the bits in system control module register that control which
CS is mapped for MMIO access. This causes reads to fail when driver
tries to access QSPI flash on CS1/2/3.

Fix this by updating appropriate bits whenever active CS changes.

Reported-by: Andreas Dannenberg <dannenberg@ti.com>
Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
Link: https://lore.kernel.org/r/20191211155216.30212-1-vigneshr@ti.com
Signed-off-by: Mark Brown <broonie@kernel.org>
  • Loading branch information
Vignesh Raghavendra authored and Mark Brown committed Dec 11, 2019
1 parent 3194d25 commit c52c91b
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion drivers/spi/spi-ti-qspi.c
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ struct ti_qspi {
u32 dc;

bool mmap_enabled;
int current_cs;
};

#define QSPI_PID (0x0)
Expand Down Expand Up @@ -487,6 +488,7 @@ static void ti_qspi_enable_memory_map(struct spi_device *spi)
MEM_CS_EN(spi->chip_select));
}
qspi->mmap_enabled = true;
qspi->current_cs = spi->chip_select;
}

static void ti_qspi_disable_memory_map(struct spi_device *spi)
Expand All @@ -498,6 +500,7 @@ static void ti_qspi_disable_memory_map(struct spi_device *spi)
regmap_update_bits(qspi->ctrl_base, qspi->ctrl_reg,
MEM_CS_MASK, 0);
qspi->mmap_enabled = false;
qspi->current_cs = -1;
}

static void ti_qspi_setup_mmap_read(struct spi_device *spi, u8 opcode,
Expand Down Expand Up @@ -543,7 +546,7 @@ static int ti_qspi_exec_mem_op(struct spi_mem *mem,

mutex_lock(&qspi->list_lock);

if (!qspi->mmap_enabled)
if (!qspi->mmap_enabled || qspi->current_cs != mem->spi->chip_select)
ti_qspi_enable_memory_map(mem->spi);
ti_qspi_setup_mmap_read(mem->spi, op->cmd.opcode, op->data.buswidth,
op->addr.nbytes, op->dummy.nbytes);
Expand Down Expand Up @@ -799,6 +802,7 @@ static int ti_qspi_probe(struct platform_device *pdev)
}
}
qspi->mmap_enabled = false;
qspi->current_cs = -1;

ret = devm_spi_register_master(&pdev->dev, master);
if (!ret)
Expand Down

0 comments on commit c52c91b

Please sign in to comment.