On Tue, Sep 01, 2026 at 04:47:54PM +0800, Xilin Wu wrote:
> The TC9563 PCI power-control driver powers off external downstream ports
> whose device tree nodes have status = "disabled".
> 
> On the Radxa Dragon Q8B, reading the Vendor ID from one of these
> powered-off port functions during PCI enumeration raises an Arm SError
> instead of returning an all-ones PCI error response. This prevents the
> board from completing boot.
> 

Add some more info on why the SError is happening. When the CPU issues Config
read requests to an unavailable port, the request will result in Completion
Timeout as there would be no one to respond to the request. So the PCIe RC will
synthesize the Completion Timeout as AXI bus error and that will trigger SError
on the CPU.

> Commit 1a8c251cff20 ("PCI: move OF status = "disabled" detection to
> dev->match_driver") made disabled PCI functions remain discoverable so
> PCI fixups can still be applied, while suppressing driver binding later.
> Preserve that behavior for endpoint functions.
> 
> For an unavailable node describing a PCI-to-PCI bridge, however, the
> node also represents a subordinate bus that must not be enumerated.
> Check the device tree node before reading the Vendor ID and return a PCI
> error response without accessing config space when such a bridge is
> disabled.
> 
> Functions not described by device tree and disabled endpoint functions
> remain discoverable.
> 
> Signed-off-by: Xilin Wu <[email protected]>

One comment below. With that fixed,

Acked-by: Manivannan Sadhasivam <[email protected]>

Please send the patch separately to PCI list.

> ---
>  drivers/pci/of.c    | 27 +++++++++++++++++++++++++--
>  drivers/pci/pci.h   |  5 +++++
>  drivers/pci/probe.c |  5 +++++
>  3 files changed, 35 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/pci/of.c b/drivers/pci/of.c
> index a51dff91b196..37e9062065d7 100644
> --- a/drivers/pci/of.c
> +++ b/drivers/pci/of.c
> @@ -24,8 +24,8 @@
>   * pci_set_of_node - Find and set device's DT device_node
>   * @dev: the PCI device structure to fill
>   *
> - * Returns 0 on success with of_node set or when no device is described in 
> the
> - * DT. Returns -ENODEV if the device is present, but disabled in the DT.
> + * Return: 0 on success with of_node set or when no device is described in 
> the
> + * DT.

This change doesn't belong to this patch.

- Mani

-- 
மணிவண்ணன் சதாசிவம்

Reply via email to