spi: spi-msm-geni: Add support to disable dma mode for SPI transfers

QUPv3 controller supports different modes of data transfers for SPI.
Add support to choose only fifo mode for data transfers. Currently
SSC DMA path is broken as agnoc is not enabled. This clk is owned by
SLPI, once SLPI change is mainlined we can use DMA mode for SSC QUP
also.

Change-Id: Ie4c67be29adba9d6c5a5bb1b9eb2161a2b384100
Signed-off-by: Ashish Kori <akori@codeaurora.org>
This commit is contained in:
Ashish Kori 2020-06-18 18:44:37 +05:30
commit 937ea26ef6

View file

@ -168,6 +168,7 @@ struct spi_geni_master {
bool set_miso_sampling;
u32 miso_sampling_ctrl_val;
bool gpi_reset; /* GPI channel reset*/
bool disable_dma;
};
static struct spi_master *get_spi_master(struct device *dev)
@ -1330,17 +1331,16 @@ static int setup_fifo_xfer(struct spi_transfer *xfer,
fifo_size =
(mas->tx_fifo_depth * mas->tx_fifo_width / mas->cur_word_len);
if (trans_len > fifo_size) {
if (mas->cur_xfer_mode != SE_DMA) {
mas->cur_xfer_mode = SE_DMA;
geni_se_select_mode(mas->base, mas->cur_xfer_mode);
}
} else {
if (mas->cur_xfer_mode != FIFO_MODE) {
mas->cur_xfer_mode = FIFO_MODE;
geni_se_select_mode(mas->base, mas->cur_xfer_mode);
}
}
/*
* Controller has support to transfer data either in FIFO mode
* or in SE_DMA mode. Either force the controller to choose FIFO
* mode for transfers or select the mode dynamically based on
* size of data.
*/
mas->cur_xfer_mode = SE_DMA;
if (mas->disable_dma || trans_len <= fifo_size)
mas->cur_xfer_mode = FIFO_MODE;
geni_se_select_mode(mas->base, mas->cur_xfer_mode);
geni_write_reg(spi_tx_cfg, mas->base, SE_SPI_TRANS_CFG);
geni_setup_m_cmd(mas->base, m_cmd, m_param);
@ -1923,6 +1923,10 @@ static int spi_geni_probe(struct platform_device *pdev)
goto spi_geni_probe_err;
}
geni_mas->disable_dma = of_property_read_bool(pdev->dev.of_node,
"qcom,disable-dma");
spi->mode_bits = (SPI_CPOL | SPI_CPHA | SPI_LOOP | SPI_CS_HIGH);
spi->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 32);
spi->num_chipselect = SPI_NUM_CHIPSELECT;