Re: Query regarding the use of pcie-designware-plat.c file

From: Vidya Sagar
Date: Sun Jun 20 2021 - 09:36:06 EST

Given Rob's latest reply, I think Jon's patch addressed the issue in the correct way. And IIUC, I think this is how it should be for all Synopsys DesignWare implementations unless the implementation really claims that it can even work with the generic pcie-designware-plat.c file, otherwise it shouldn't contain 'snps,dw-pcie' compatibility string.
IMHO, the addition of 'snps,dw-pcie' along with the respective platform specific compatibility string should be strictly restricted.
I think this thread is considered to be concluded at this point.

Vidya Sagar

On 6/16/2021 1:24 PM, Jon Hunter wrote:
External email: Use caution opening links or attachments

On 15/06/2021 20:42, Bjorn Helgaas wrote:
On Wed, Jun 09, 2021 at 05:54:38PM +0100, Jon Hunter wrote:

On 09/06/2021 17:30, Bjorn Helgaas wrote:
On Wed, Jun 09, 2021 at 12:52:37AM +0530, Vidya Sagar wrote:
I would like to know what is the use of pcie-designware-plat.c file. This
looks like a skeleton file and can't really work with any specific hardware
as such.
Some context for this mail thread is, if the config CONFIG_PCIE_DW_PLAT is
enabled in a system where a Synopsys DesignWare IP based PCIe controller is
present and its configuration is enabled (Ex:- Tegra194 system with
CONFIG_PCIE_TEGRA194_HOST enabled), then, it can so happen that the probe of
pcie-designware-plat.c called first (because all DWC based PCIe controller
nodes have "snps,dw-pcie" compatibility string) and can crash the system.

What's the crash? If a device claims to be compatible with
"snps,dw-pcie" and pcie-designware-plat.c claims to know how to
operate "snps,dw-pcie" devices, it seems like something is wrong.

"snps,dw-pcie" is a generic device type, so pcie-designware-plat.c
might not know how to operate device-specific details of some of those
devices, but basic functionality should work and it certainly
shouldn't crash.

It is not really a crash but a hang when trying to access the hardware
before it has been properly initialised.

This doesn't really answer my question.

If the hardware claims to be compatible with "snps,dw-pcie" and a
driver knows how to operate "snps,dw-pcie" devices, it should work.

If the hardware requires initialization that is not part of the
"snps,dw-pcie" programming model, it should not claim to be compatible
with "snps,dw-pcie". Or, if pcie-designware-plat.c is missing some
init that *is* part of the programming model, maybe it needs to be

Right and this is exactly why I removed the compatible string
"snps,dw-pcie" for Tegra194 because it is clear that this does not work
and hence not compatible.

Sagar is purely trying to understand if this is case of other devices as
well or just Tegra194.