Skip to content

Commit 1896d17

Browse files
shimodaykwilczynski
authored andcommitted
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: Serge Semin <fancer.lancer@gmail.com> Link: https://lore.kernel.org/linux-pci/20231018085631.1121289-7-yoshihiro.shimoda.uh@renesas.com Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org> Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> Reviewed-by: Serge Semin <fancer.lancer@gmail.com>
1 parent 7873b49 commit 1896d17

2 files changed

Lines changed: 10 additions & 3 deletions

File tree

drivers/pci/controller/dwc/pcie-designware.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -887,8 +887,14 @@ static int dw_pcie_edma_find_chip(struct dw_pcie *pci)
887887
* Indirect eDMA CSRs access has been completely removed since v5.40a
888888
* thus no space is now reserved for the eDMA channels viewport and
889889
* former DMA CTRL register is no longer fixed to FFs.
890+
*
891+
* Note that Renesas R-Car S4-8's PCIe controllers for unknown reason
892+
* have zeros in the eDMA CTRL register even though the HW-manual
893+
* explicitly states there must FFs if the unrolled mapping is enabled.
894+
* For such cases the low-level drivers are supposed to manually
895+
* activate the unrolled mapping to bypass the auto-detection procedure.
890896
*/
891-
if (dw_pcie_ver_is_ge(pci, 540A))
897+
if (dw_pcie_ver_is_ge(pci, 540A) || dw_pcie_cap_is(pci, EDMA_UNROLL))
892898
val = 0xFFFFFFFF;
893899
else
894900
val = dw_pcie_readl_dbi(pci, PCIE_DMA_VIEWPORT_BASE + PCIE_DMA_CTRL);

drivers/pci/controller/dwc/pcie-designware.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,9 @@
5151

5252
/* DWC PCIe controller capabilities */
5353
#define DW_PCIE_CAP_REQ_RES 0
54-
#define DW_PCIE_CAP_IATU_UNROLL 1
55-
#define DW_PCIE_CAP_CDM_CHECK 2
54+
#define DW_PCIE_CAP_EDMA_UNROLL 1
55+
#define DW_PCIE_CAP_IATU_UNROLL 2
56+
#define DW_PCIE_CAP_CDM_CHECK 3
5657

5758
#define dw_pcie_cap_is(_pci, _cap) \
5859
test_bit(DW_PCIE_CAP_ ## _cap, &(_pci)->caps)

0 commit comments

Comments
 (0)