Thread (47 messages) 47 messages, 6 authors, 2022-10-25

Re: [PATCH RESEND v5 24/24] PCI: dwc: Add DW eDMA engine support

From: Serge Semin <hidden>
Date: 2022-08-25 05:16:25
Also in: linux-pci, lkml

On Wed, Aug 24, 2022 at 01:17:54PM -0500, Bjorn Helgaas wrote:
On Wed, Aug 24, 2022 at 09:13:19PM +0300, Serge Semin wrote:
quoted
On Wed, Aug 24, 2022 at 11:51:18AM -0500, Bjorn Helgaas wrote:
quoted
On Mon, Aug 22, 2022 at 09:53:32PM +0300, Serge Semin wrote:
quoted
quoted
quoted
+	val = dw_pcie_readl_dbi(pci, PCIE_DMA_VIEWPORT_BASE + PCIE_DMA_CTRL);
+	if (val == 0xFFFFFFFF && pci->edma.reg_base) {
+		pci->edma.mf = EDMA_MF_EDMA_UNROLL;
+
+		val = dw_pcie_readl_dma(pci, PCIE_DMA_CTRL);
+	} else if (val != 0xFFFFFFFF) {
quoted
Consider PCI_POSSIBLE_ERROR() as an annotation about the meaning of
0xFFFFFFFF and something to grep for.
In this case FFs don't mean an error but a special value, which
indicates that the eDMA is mapped via the unrolled CSRs space. The
similar approach has been implemented for the iATU legacy/unroll setup
auto-detection. So I don't see much reasons to have it grepped, so as
to have a macro-based parametrization since the special value will
unluckily change while having the explicit literal utilized gives a
better understanding of the way the algorithm works.
If 0xFFFFFFFF is the result of a successful PCIe Memory Read,
Right. It is.
and not
something synthesized by the host bridge when it handles an
Unsupported Request completion,
No it isn't. To be clear 0xFFs don't indicate some PCIe bus/controller
malfunction, but they are a result of reading the
DMA_CTRL_VIEWPORT_OFF register which doesn't exist. The manual
explicitly says: "Note - When register does not exist, value is fixed
to 32'hFFFF_FFFF". The register doesn't exist if either eDMA is
unavailable or the eDMA CSRs are mapped via the unrolled state. That
logic is used to auto-detect the eDMA availability and the way of it's
CSRs mapping.
I'm fine with keeping it as is.
Ok. Thanks.

-Sergey
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help