From fa919e9611b40ff8cdd3c9fba028034de6b75422 Mon Sep 17 00:00:00 2001 From: Jon Lin Date: Wed, 24 Aug 2022 11:53:20 +0800 Subject: [PATCH] pcie: rockchip: dw: Support dmatest Change-Id: I14bd31839bfb3fe70d8b12b7e3e6efca535028a1 Signed-off-by: Jon Lin --- drivers/pci/controller/dwc/pcie-dw-rockchip.c | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/drivers/pci/controller/dwc/pcie-dw-rockchip.c b/drivers/pci/controller/dwc/pcie-dw-rockchip.c index 5a87275499fa..ff517ce76623 100644 --- a/drivers/pci/controller/dwc/pcie-dw-rockchip.c +++ b/drivers/pci/controller/dwc/pcie-dw-rockchip.c @@ -46,6 +46,7 @@ #include "pcie-designware.h" #include "../../pci.h" #include "../rockchip-pcie-dma.h" +#include "pcie-dw-dmatest.h" enum rk_pcie_device_mode { RK_PCIE_EP_TYPE, @@ -837,7 +838,7 @@ static bool rk_pcie_udma_enabled(struct rk_pcie *rk_pcie) PCIE_DMA_CTRL_OFF); } -static int rk_pcie_host_init_dma_trx(struct rk_pcie *rk_pcie) +static int rk_pcie_init_dma_trx(struct rk_pcie *rk_pcie) { if (!rk_pcie_udma_enabled(rk_pcie)) return 0; @@ -848,6 +849,12 @@ static int rk_pcie_host_init_dma_trx(struct rk_pcie *rk_pcie) return -EINVAL; } + rk_pcie->dma_obj = pcie_dw_dmatest_register(rk_pcie->pci, true); + if (IS_ERR(rk_pcie->dma_obj)) { + dev_err(rk_pcie->pci->dev, "failed to prepare dmatest\n"); + return -EINVAL; + } + /* Enable client write and read interrupt */ rk_pcie_writel_apb(rk_pcie, PCIE_CLIENT_INTR_MASK, 0xc000000); @@ -1132,11 +1139,6 @@ static int rk_add_pcie_port(struct rk_pcie *rk_pcie, struct platform_device *pde return ret; } - ret = rk_pcie_host_init_dma_trx(rk_pcie); - if (ret) { - dev_err(dev, "failed to init host dma trx\n"); - return ret; - } return 0; } @@ -2080,6 +2082,12 @@ retry_regulator: if (ret) goto remove_irq_domain; + ret = rk_pcie_init_dma_trx(rk_pcie); + if (ret) { + dev_err(dev, "failed to add dma extension\n"); + return ret; + } + if (rk_pcie->dma_obj) { rk_pcie->dma_obj->start_dma_func = rk_pcie_start_dma_dwc; rk_pcie->dma_obj->config_dma_func = rk_pcie_config_dma_dwc;