Commit 3f58e106 authored by Vignesh Raghavendra's avatar Vignesh Raghavendra Committed by Vinod Koul
Browse files

dmaengine: ti: k3-udma: Add support for BCDMA CSI RX



BCDMA CSI RX present on AM62Ax SoC is a dedicated DMA for servicing
Camera Serial Interface (CSI) IP. Add support for the same.

Signed-off-by: default avatarVignesh Raghavendra <vigneshr@ti.com>
Acked-by: default avatarPeter Ujfalusi <peter.ujfalusi@gmail.com>
Link: https://lore.kernel.org/r/20221213164304.1126945-6-vigneshr@ti.com


Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
parent c1475ad3
Loading
Loading
Loading
Loading
+32 −5
Original line number Diff line number Diff line
@@ -135,6 +135,7 @@ struct udma_match_data {
	u32 flags;
	u32 statictr_z_mask;
	u8 burst_size[3];
	struct udma_soc_data *soc_data;
};

struct udma_soc_data {
@@ -4295,6 +4296,25 @@ static struct udma_match_data j721e_mcu_data = {
	},
};

static struct udma_soc_data am62a_dmss_csi_soc_data = {
	.oes = {
		.bcdma_rchan_data = 0xe00,
		.bcdma_rchan_ring = 0x1000,
	},
};

static struct udma_match_data am62a_bcdma_csirx_data = {
	.type = DMA_TYPE_BCDMA,
	.psil_base = 0x3100,
	.enable_memcpy_support = false,
	.burst_size = {
		TI_SCI_RM_UDMAP_CHAN_BURST_SIZE_64_BYTES, /* Normal Channels */
		0, /* No H Channels */
		0, /* No UH Channels */
	},
	.soc_data = &am62a_dmss_csi_soc_data,
};

static struct udma_match_data am64_bcdma_data = {
	.type = DMA_TYPE_BCDMA,
	.psil_base = 0x2000, /* for tchan and rchan, not applicable to bchan */
@@ -4344,6 +4364,10 @@ static const struct of_device_id udma_of_match[] = {
		.compatible = "ti,am64-dmss-pktdma",
		.data = &am64_pktdma_data,
	},
	{
		.compatible = "ti,am62a-dmss-bcdma-csirx",
		.data = &am62a_bcdma_csirx_data,
	},
	{ /* Sentinel */ },
};

@@ -5274,12 +5298,15 @@ static int udma_probe(struct platform_device *pdev)
	}
	ud->match_data = match->data;

	ud->soc_data = ud->match_data->soc_data;
	if (!ud->soc_data) {
		soc = soc_device_match(k3_soc_devices);
		if (!soc) {
			dev_err(dev, "No compatible SoC found\n");
			return -ENODEV;
		}
		ud->soc_data = soc->data;
	}

	ret = udma_get_mmrs(pdev, ud);
	if (ret)