From c4512808835f5c3879d19b82930cf46c87fe00d6 Mon Sep 17 00:00:00 2001 From: Nagarjuna Kristam Date: Wed, 5 Mar 2025 14:58:57 +0530 Subject: [PATCH] PCI: tegra264: dma: Fix mis-matches with ICD Fix tegra_pcie_dma_stop() return type to bool instead of tegra_pcie_dma_status_t. Add NULL checks and atleast one DMA channel enable status in tegra_pcie_dma_initialize(). Bug 5132823 Signed-off-by: Nagarjuna Kristam Change-Id: Ie4363a9a63942256f136d018d17af488948e37a1 Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3314130 Tested-by: mobile promotions Reviewed-by: Bitan Biswas GVS: buildbot_gerritrpt Reviewed-by: mobile promotions --- .../pci/controller/private-soc/tegra-pcie-dma.c | 16 ++++++++++++---- .../controller/private-soc/tegra264-pcie-xdma.c | 5 +++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/drivers/pci/controller/private-soc/tegra-pcie-dma.c b/drivers/pci/controller/private-soc/tegra-pcie-dma.c index e990d001..e28d9647 100644 --- a/drivers/pci/controller/private-soc/tegra-pcie-dma.c +++ b/drivers/pci/controller/private-soc/tegra-pcie-dma.c @@ -54,6 +54,11 @@ tegra_pcie_dma_status_t tegra_pcie_dma_initialize(struct tegra_pcie_dma_init_inf { struct tegra_pcie_dma_priv *prv; + if (!info || !cookie) { + pr_err("%s: NULL info or cookie param\n", __func__); + return TEGRA_PCIE_DMA_FAIL_INVAL_INPUTS; + } + prv = kzalloc(sizeof(*prv), GFP_KERNEL); if (!prv) { pr_err("Failed to allocate memory for dma_prv\n"); @@ -129,20 +134,23 @@ EXPORT_SYMBOL_GPL(tegra_pcie_dma_submit_xfer); bool tegra_pcie_dma_stop(void *cookie) { struct tegra_pcie_dma_priv *prv = (struct tegra_pcie_dma_priv *)cookie; + bool st = false; if (!cookie) { pr_err("%s: cookie is null\n", __func__); - return TEGRA_PCIE_DMA_FAIL_INVAL_INPUTS; + goto end; } if (prv->soc == NVPCIE_DMA_SOC_T234) { - return tegra234_pcie_edma_stop(prv->soc_cookie); + st = tegra234_pcie_edma_stop(prv->soc_cookie); } else if (prv->soc == NVPCIE_DMA_SOC_T264) { - return tegra264_pcie_xdma_stop(prv->soc_cookie); + st = tegra264_pcie_xdma_stop(prv->soc_cookie); } else { pr_err("%s: invalid soc id: %d\n", __func__, prv->soc); - return TEGRA_PCIE_DMA_FAIL_INVAL_INPUTS; } + +end: + return st; } EXPORT_SYMBOL_GPL(tegra_pcie_dma_stop); diff --git a/drivers/pci/controller/private-soc/tegra264-pcie-xdma.c b/drivers/pci/controller/private-soc/tegra264-pcie-xdma.c index 0fb0c55a..ed7b3e52 100644 --- a/drivers/pci/controller/private-soc/tegra264-pcie-xdma.c +++ b/drivers/pci/controller/private-soc/tegra264-pcie-xdma.c @@ -458,6 +458,11 @@ void *tegra264_pcie_xdma_initialize(struct tegra_pcie_dma_init_info *info, void } } + if (prv->ch_init == 0U) { + dev_err(prv->dev, "No channel enabled to initialize\n"); + goto free_ring; + } + prv->irq_name = kasprintf(GFP_KERNEL, "%s_xdma_lib", dev_name(prv->dev)); if (!prv->irq_name) goto free_ring;