linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH AUTOSEL 5.4 01/35] spi: spi-omap2-mcspi: Handle DMA size restriction on AM65x
@ 2020-03-16  2:33 Sasha Levin
  2020-03-16  2:33 ` [PATCH AUTOSEL 5.4 02/35] spi: spi-omap2-mcspi: Support probe deferral for DMA channels Sasha Levin
                   ` (33 more replies)
  0 siblings, 34 replies; 38+ messages in thread
From: Sasha Levin @ 2020-03-16  2:33 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Vignesh Raghavendra, Mark Brown, Sasha Levin, linux-spi

From: Vignesh Raghavendra <vigneshr@ti.com>

[ Upstream commit e4e8276a4f652be2c7bb783a0155d4adb85f5d7d ]

On AM654, McSPI can only support 4K - 1 bytes per transfer when DMA is
enabled. Therefore populate master->max_transfer_size callback to
inform client drivers of this restriction when DMA channels are
available.

Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
Link: https://lore.kernel.org/r/20200204124816.16735-2-vigneshr@ti.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/spi/spi-omap2-mcspi.c                 | 26 +++++++++++++++++++
 include/linux/platform_data/spi-omap2-mcspi.h |  1 +
 2 files changed, 27 insertions(+)

diff --git a/drivers/spi/spi-omap2-mcspi.c b/drivers/spi/spi-omap2-mcspi.c
index 848e03e5f42d5..8e435da730996 100644
--- a/drivers/spi/spi-omap2-mcspi.c
+++ b/drivers/spi/spi-omap2-mcspi.c
@@ -130,6 +130,7 @@ struct omap2_mcspi {
 	int			fifo_depth;
 	bool			slave_aborted;
 	unsigned int		pin_dir:1;
+	size_t			max_xfer_len;
 };
 
 struct omap2_mcspi_cs {
@@ -1316,6 +1317,18 @@ static bool omap2_mcspi_can_dma(struct spi_master *master,
 	return (xfer->len >= DMA_MIN_BYTES);
 }
 
+static size_t omap2_mcspi_max_xfer_size(struct spi_device *spi)
+{
+	struct omap2_mcspi *mcspi = spi_master_get_devdata(spi->master);
+	struct omap2_mcspi_dma *mcspi_dma =
+		&mcspi->dma_channels[spi->chip_select];
+
+	if (mcspi->max_xfer_len && mcspi_dma->dma_rx)
+		return mcspi->max_xfer_len;
+
+	return SIZE_MAX;
+}
+
 static int omap2_mcspi_controller_setup(struct omap2_mcspi *mcspi)
 {
 	struct spi_master	*master = mcspi->master;
@@ -1384,6 +1397,11 @@ static struct omap2_mcspi_platform_config omap4_pdata = {
 	.regs_offset = OMAP4_MCSPI_REG_OFFSET,
 };
 
+static struct omap2_mcspi_platform_config am654_pdata = {
+	.regs_offset = OMAP4_MCSPI_REG_OFFSET,
+	.max_xfer_len = SZ_4K - 1,
+};
+
 static const struct of_device_id omap_mcspi_of_match[] = {
 	{
 		.compatible = "ti,omap2-mcspi",
@@ -1393,6 +1411,10 @@ static const struct of_device_id omap_mcspi_of_match[] = {
 		.compatible = "ti,omap4-mcspi",
 		.data = &omap4_pdata,
 	},
+	{
+		.compatible = "ti,am654-mcspi",
+		.data = &am654_pdata,
+	},
 	{ },
 };
 MODULE_DEVICE_TABLE(of, omap_mcspi_of_match);
@@ -1450,6 +1472,10 @@ static int omap2_mcspi_probe(struct platform_device *pdev)
 		mcspi->pin_dir = pdata->pin_dir;
 	}
 	regs_offset = pdata->regs_offset;
+	if (pdata->max_xfer_len) {
+		mcspi->max_xfer_len = pdata->max_xfer_len;
+		master->max_transfer_size = omap2_mcspi_max_xfer_size;
+	}
 
 	r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	mcspi->base = devm_ioremap_resource(&pdev->dev, r);
diff --git a/include/linux/platform_data/spi-omap2-mcspi.h b/include/linux/platform_data/spi-omap2-mcspi.h
index 0bf9fddb83064..3b400b1919a9b 100644
--- a/include/linux/platform_data/spi-omap2-mcspi.h
+++ b/include/linux/platform_data/spi-omap2-mcspi.h
@@ -11,6 +11,7 @@ struct omap2_mcspi_platform_config {
 	unsigned short	num_cs;
 	unsigned int regs_offset;
 	unsigned int pin_dir:1;
+	size_t max_xfer_len;
 };
 
 struct omap2_mcspi_device_config {
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 38+ messages in thread

end of thread, other threads:[~2020-03-22 19:39 UTC | newest]

Thread overview: 38+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-16  2:33 [PATCH AUTOSEL 5.4 01/35] spi: spi-omap2-mcspi: Handle DMA size restriction on AM65x Sasha Levin
2020-03-16  2:33 ` [PATCH AUTOSEL 5.4 02/35] spi: spi-omap2-mcspi: Support probe deferral for DMA channels Sasha Levin
2020-03-16  2:33 ` [PATCH AUTOSEL 5.4 03/35] drm/mediatek: Find the cursor plane instead of hard coding it Sasha Levin
2020-03-16  2:33 ` [PATCH AUTOSEL 5.4 04/35] ARM: dts: imx6dl-colibri-eval-v3: fix sram compatible properties Sasha Levin
2020-03-16  2:33 ` [PATCH AUTOSEL 5.4 05/35] phy: ti: gmii-sel: fix set of copy-paste errors Sasha Levin
2020-03-16  2:33 ` [PATCH AUTOSEL 5.4 06/35] phy: ti: gmii-sel: do not fail in case of gmii Sasha Levin
2020-03-16  2:33 ` [PATCH AUTOSEL 5.4 07/35] ARM: dts: dra7-l4: mark timer13-16 as pwm capable Sasha Levin
2020-03-16  2:33 ` [PATCH AUTOSEL 5.4 08/35] ASoC: meson: g12a: add tohdmitx reset Sasha Levin
2020-03-16  8:28   ` Jerome Brunet
2020-03-22 18:31     ` Jerome Brunet
2020-03-22 19:39       ` Sasha Levin
2020-03-16  2:33 ` [PATCH AUTOSEL 5.4 09/35] spi: qup: call spi_qup_pm_resume_runtime before suspending Sasha Levin
2020-03-16  2:33 ` [PATCH AUTOSEL 5.4 10/35] powerpc: Include .BTF section Sasha Levin
2020-03-16  2:33 ` [PATCH AUTOSEL 5.4 11/35] cifs: fix potential mismatch of UNC paths Sasha Levin
2020-03-16  2:33 ` [PATCH AUTOSEL 5.4 12/35] cifs: add missing mount option to /proc/mounts Sasha Levin
2020-03-16  2:33 ` [PATCH AUTOSEL 5.4 13/35] ARM: dts: dra7: Add "dma-ranges" property to PCIe RC DT nodes Sasha Levin
2020-03-16  2:33 ` [PATCH AUTOSEL 5.4 14/35] spi: pxa2xx: Add CS control clock quirk Sasha Levin
2020-03-16  2:33 ` [PATCH AUTOSEL 5.4 15/35] spi/zynqmp: remove entry that causes a cs glitch Sasha Levin
2020-03-16  2:33 ` [PATCH AUTOSEL 5.4 16/35] drm/exynos: dsi: propagate error value and silence meaningless warning Sasha Levin
2020-03-16  2:33 ` [PATCH AUTOSEL 5.4 17/35] drm/exynos: dsi: fix workaround for the legacy clock name Sasha Levin
2020-03-16  2:33 ` [PATCH AUTOSEL 5.4 18/35] drm/exynos: hdmi: don't leak enable HDMI_EN regulator if probe fails Sasha Levin
2020-03-16  2:33 ` [PATCH AUTOSEL 5.4 19/35] drivers/perf: fsl_imx8_ddr: Correct the CLEAR bit definition Sasha Levin
2020-03-16  2:33 ` [PATCH AUTOSEL 5.4 20/35] drivers/perf: arm_pmu_acpi: Fix incorrect checking of gicc pointer Sasha Levin
2020-03-16  2:33 ` [PATCH AUTOSEL 5.4 21/35] altera-stapl: altera_get_note: prevent write beyond end of 'key' Sasha Levin
2020-03-16  2:33 ` [PATCH AUTOSEL 5.4 22/35] dm bio record: save/restore bi_end_io and bi_integrity Sasha Levin
2020-03-16  2:33 ` [PATCH AUTOSEL 5.4 23/35] dm integrity: use dm_bio_record and dm_bio_restore Sasha Levin
2020-03-16  2:34 ` [PATCH AUTOSEL 5.4 24/35] riscv: avoid the PIC offset of static percpu data in module beyond 2G limits Sasha Levin
2020-03-16  2:34 ` [PATCH AUTOSEL 5.4 25/35] ASoC: stm32: sai: manage rebind issue Sasha Levin
2020-03-16  2:34 ` [PATCH AUTOSEL 5.4 26/35] spi: spi_register_controller(): free bus id on error paths Sasha Levin
2020-03-16  2:34 ` [PATCH AUTOSEL 5.4 27/35] riscv: Force flat memory model with no-mmu Sasha Levin
2020-03-16  2:34 ` [PATCH AUTOSEL 5.4 28/35] riscv: Fix range looking for kernel image memblock Sasha Levin
2020-03-16  2:34 ` [PATCH AUTOSEL 5.4 29/35] drm/amdgpu: clean wptr on wb when gpu recovery Sasha Levin
2020-03-16  2:34 ` [PATCH AUTOSEL 5.4 30/35] drm/amd/display: Clear link settings on MST disable connector Sasha Levin
2020-03-16  2:34 ` [PATCH AUTOSEL 5.4 31/35] drm/amd/display: fix dcc swath size calculations on dcn1 Sasha Levin
2020-03-16  2:34 ` [PATCH AUTOSEL 5.4 32/35] xenbus: req->body should be updated before req->state Sasha Levin
2020-03-16  2:34 ` [PATCH AUTOSEL 5.4 33/35] xenbus: req->err " Sasha Levin
2020-03-16  2:34 ` [PATCH AUTOSEL 5.4 34/35] block, bfq: fix overwrite of bfq_group pointer in bfq_find_set_group() Sasha Levin
2020-03-16  2:34 ` [PATCH AUTOSEL 5.4 35/35] parse-maintainers: Mark as executable Sasha Levin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).