Unverified Commit 1896d17f authored by Yoshihiro Shimoda's avatar Yoshihiro Shimoda Committed by Krzysztof Wilczyński
Browse files

PCI: dwc: Add EDMA_UNROLL capability flag



Renesas R-Car Gen4 PCIe controllers have an unexpected register value in
the eDMA CTRL register.

So, add a new capability flag "EDMA_UNROLL" which would force the unrolled
eDMA mapping for the problematic device.

Suggested-by: default avatarSerge Semin <fancer.lancer@gmail.com>
Link: https://lore.kernel.org/linux-pci/20231018085631.1121289-7-yoshihiro.shimoda.uh@renesas.com


Signed-off-by: default avatarYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: default avatarKrzysztof Wilczyński <kwilczynski@kernel.org>
Reviewed-by: default avatarManivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Reviewed-by: default avatarSerge Semin <fancer.lancer@gmail.com>
parent 7873b49b
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -887,8 +887,14 @@ static int dw_pcie_edma_find_chip(struct dw_pcie *pci)
	 * 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))
	if (dw_pcie_ver_is_ge(pci, 540A) || dw_pcie_cap_is(pci, EDMA_UNROLL))
		val = 0xFFFFFFFF;
	else
		val = dw_pcie_readl_dbi(pci, PCIE_DMA_VIEWPORT_BASE + PCIE_DMA_CTRL);
+3 −2
Original line number Diff line number Diff line
@@ -51,8 +51,9 @@

/* DWC PCIe controller capabilities */
#define DW_PCIE_CAP_REQ_RES		0
#define DW_PCIE_CAP_IATU_UNROLL		1
#define DW_PCIE_CAP_CDM_CHECK		2
#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_is(_pci, _cap) \
	test_bit(DW_PCIE_CAP_ ## _cap, &(_pci)->caps)