Re: [PATCH v5 20/20] PCI: dwc: Add Baikal-T1 PCIe controller support

From: Robin Murphy
Date: Wed Aug 31 2022 - 04:56:01 EST


On 2022-08-31 09:36, Robin Murphy wrote:
On 2022-08-29 16:28, Lorenzo Pieralisi wrote:
[...]
+static int bt1_pcie_add_port(struct bt1_pcie *btpci)
+{
+    struct device *dev = &btpci->pdev->dev;
+    int ret;
+
+    /*
+     * DW PCIe Root Port controller is equipped with eDMA capable of
+     * working with the 64-bit memory addresses.
+     */
+    ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(64));
+    if (ret)
+        return ret;

Is this the right place to set the DMA mask for the host controller
embedded DMA controller (actually, the dev pointer is the _host_
controller device) ?

How this is going to play when combined with:

https://lore.kernel.org/linux-pci/1e63a581-14ae-b4b5-a5bf-ca8f09c33af6@xxxxxxx

It is getting a bit confusing. I believe the code in the link
above sets the mask so that through the DMA API we are capable
of getting an MSI doorbell virtual address whose physical address
can be addressed by the endpoint; this through the DMA API.

This patch is setting the DMA mask for a different reason, namely
setting the host controller embedded DMA controller addressing
capabilities.

AFAICS - both approaches set the mask for the same device - now
the question is about which one is legitimate and how to handle
the other.

Assuming the dw-edma-pcie driver is the relevant one, that already sets its own masks on its own device, so I also don't see why this is here.

Ah, I just found the patch at [1], which further implies that this is indeed completely bogus.

Robin.

[1] https://lore.kernel.org/dmaengine/20220822185332.26149-23-Sergey.Semin@xxxxxxxxxxxxxxxxxxxx/