Message ID | 5fffb7eca6f4b70853d92be2403595d6d06bede7.1464130597.git.hramrach@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, May 26, 2016 at 07:25:24PM -0000, Michal Suchanek wrote: > The sun4i spi hardware can trasfer at most 63 bytes of data without DMA > support so report the limitation. Same on sun6i. Is it? Is there timeouts on the A31 and later SoCs? Maxime
Hello, On 30 May 2016 at 10:37, Maxime Ripard <maxime.ripard@free-electrons.com> wrote: > On Thu, May 26, 2016 at 07:25:24PM -0000, Michal Suchanek wrote: >> The sun4i spi hardware can trasfer at most 63 bytes of data without DMA >> support so report the limitation. Same on sun6i. > > Is it? Is there timeouts on the A31 and later SoCs? > I have no sun6i hardware to test with. This is an advisory limit you can query and it better be smaller rather than unreliable. The hard limit in the driver is still SUN6I_FIFO_DEPTH (which is 128 bytes on sun6i). You can test his without any actual SPI device. Unused pins you can multiplex as SPI suffice. Thanks Michal
On Mon, May 30, 2016 at 10:57:10AM +0200, Michal Suchanek wrote: > Hello, > > On 30 May 2016 at 10:37, Maxime Ripard <maxime.ripard@free-electrons.com> wrote: > > On Thu, May 26, 2016 at 07:25:24PM -0000, Michal Suchanek wrote: > >> The sun4i spi hardware can trasfer at most 63 bytes of data without DMA > >> support so report the limitation. Same on sun6i. > > > > Is it? Is there timeouts on the A31 and later SoCs? > > > > I have no sun6i hardware to test with. > > This is an advisory limit you can query and it better be smaller > rather than unreliable. The hard limit in the driver is still > SUN6I_FIFO_DEPTH (which is 128 bytes on sun6i). > > You can test his without any actual SPI device. Unused pins you can > multiplex as SPI suffice. Ok, for the time being: Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> Thanks! Maxime
diff --git a/drivers/spi/spi-sun4i.c b/drivers/spi/spi-sun4i.c index 04f1b77..bf52b09 100644 --- a/drivers/spi/spi-sun4i.c +++ b/drivers/spi/spi-sun4i.c @@ -167,6 +167,11 @@ static void sun4i_spi_set_cs(struct spi_device *spi, bool enable) sun4i_spi_write(sspi, SUN4I_CTL_REG, reg); } +static size_t sun4i_spi_max_transfer_size(struct spi_device *spi) +{ + return SUN4I_FIFO_DEPTH - 1; +} + static int sun4i_spi_transfer_one(struct spi_master *master, struct spi_device *spi, struct spi_transfer *tfr) @@ -407,6 +412,7 @@ static int sun4i_spi_probe(struct platform_device *pdev) master->bits_per_word_mask = SPI_BPW_MASK(8); master->dev.of_node = pdev->dev.of_node; master->auto_runtime_pm = true; + master->max_transfer_size = sun4i_spi_max_transfer_size; sspi->hclk = devm_clk_get(&pdev->dev, "ahb"); if (IS_ERR(sspi->hclk)) { diff --git a/drivers/spi/spi-sun6i.c b/drivers/spi/spi-sun6i.c index 8954a62..f491a41 100644 --- a/drivers/spi/spi-sun6i.c +++ b/drivers/spi/spi-sun6i.c @@ -154,6 +154,11 @@ static void sun6i_spi_set_cs(struct spi_device *spi, bool enable) } +static size_t sun6i_spi_max_transfer_size(struct spi_device *spi) +{ + return SUN6I_FIFO_DEPTH - 1; +} + static int sun6i_spi_transfer_one(struct spi_master *master, struct spi_device *spi, struct spi_transfer *tfr) @@ -418,6 +423,7 @@ static int sun6i_spi_probe(struct platform_device *pdev) master->bits_per_word_mask = SPI_BPW_MASK(8); master->dev.of_node = pdev->dev.of_node; master->auto_runtime_pm = true; + master->max_transfer_size = sun6i_spi_max_transfer_size; sspi->hclk = devm_clk_get(&pdev->dev, "ahb"); if (IS_ERR(sspi->hclk)) {
The sun4i spi hardware can trasfer at most 63 bytes of data without DMA support so report the limitation. Same on sun6i. Signed-off-by: Michal Suchanek <hramrach@gmail.com> --- drivers/spi/spi-sun4i.c | 6 ++++++ drivers/spi/spi-sun6i.c | 6 ++++++ 2 files changed, 12 insertions(+)