]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
PCI: dwc: Pass the eDMA mapping format flag directly from glue drivers
authorManivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Mon, 18 Mar 2024 06:04:27 +0000 (11:34 +0530)
committerBjorn Helgaas <bhelgaas@google.com>
Tue, 28 May 2024 14:51:17 +0000 (09:51 -0500)
Instead of maintaining a separate capability for glue drivers that cannot
support auto detection of the eDMA mapping format, pass the mapping format
directly from them.

This will simplify the code and also allow adding HDMA support that also
doesn't support auto detection of mapping format.

Suggested-by: Serge Semin <fancer.lancer@gmail.com>
Link: https://lore.kernel.org/linux-pci/20240318-dw-hdma-v5-3-f04c5cdde760@linaro.org
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Signed-off-by: Krzysztof WilczyƄski <kwilczynski@kernel.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Serge Semin <fancer.lancer@gmail.com>
Reviewed-by: Siddharth Vadapalli <s-vadapalli@ti.com>
Reviewed-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Tested-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
drivers/pci/controller/dwc/pcie-designware.c
drivers/pci/controller/dwc/pcie-designware.h
drivers/pci/controller/dwc/pcie-rcar-gen4.c

index d17549f67e72e8623aa51333846fc450cdf4c30b..bf57a2f713da1f152e5e38fb939c417a1ff87758 100644 (file)
@@ -894,18 +894,20 @@ static int dw_pcie_edma_find_mf(struct dw_pcie *pci)
 {
        u32 val;
 
+       /*
+        * Bail out finding the mapping format if it is already set by the glue
+        * driver. Also ensure that the edma.reg_base is pointing to a valid
+        * memory region.
+        */
+       if (pci->edma.mf != EDMA_MF_EDMA_LEGACY)
+               return pci->edma.reg_base ? 0 : -ENODEV;
+
        /*
         * Indirect eDMA CSRs access has been completely removed since v5.40a
         * thus no space is now reserved for the eDMA channels viewport and
         * former DMA CTRL register is no longer fixed to FFs.
-        *
-        * Note that Renesas R-Car S4-8's PCIe controllers for unknown reason
-        * have zeros in the eDMA CTRL register even though the HW-manual
-        * explicitly states there must FFs if the unrolled mapping is enabled.
-        * For such cases the low-level drivers are supposed to manually
-        * activate the unrolled mapping to bypass the auto-detection procedure.
         */
-       if (dw_pcie_ver_is_ge(pci, 540A) || dw_pcie_cap_is(pci, EDMA_UNROLL))
+       if (dw_pcie_ver_is_ge(pci, 540A))
                val = 0xFFFFFFFF;
        else
                val = dw_pcie_readl_dbi(pci, PCIE_DMA_VIEWPORT_BASE + PCIE_DMA_CTRL);
index f8e5431a207bd5aa01c9c6c98666f4d0fbf16b6c..313cd9808403bb0ca4f2d34183c6854778a931cb 100644 (file)
@@ -51,9 +51,8 @@
 
 /* DWC PCIe controller capabilities */
 #define DW_PCIE_CAP_REQ_RES            0
-#define DW_PCIE_CAP_EDMA_UNROLL                1
-#define DW_PCIE_CAP_IATU_UNROLL                2
-#define DW_PCIE_CAP_CDM_CHECK          3
+#define DW_PCIE_CAP_IATU_UNROLL                1
+#define DW_PCIE_CAP_CDM_CHECK          2
 
 #define dw_pcie_cap_is(_pci, _cap) \
        test_bit(DW_PCIE_CAP_ ## _cap, &(_pci)->caps)
index cfeccc2f9ee1d15bf664a9585cfafdd8a894d41f..d99e12f3e4fff5c098d024353c76d2f81dcd0d39 100644 (file)
@@ -255,7 +255,7 @@ static struct rcar_gen4_pcie *rcar_gen4_pcie_alloc(struct platform_device *pdev)
        rcar->dw.ops = &dw_pcie_ops;
        rcar->dw.dev = dev;
        rcar->pdev = pdev;
-       dw_pcie_cap_set(&rcar->dw, EDMA_UNROLL);
+       rcar->dw.edma.mf = EDMA_MF_EDMA_UNROLL;
        dw_pcie_cap_set(&rcar->dw, REQ_RES);
        platform_set_drvdata(pdev, rcar);