e329b762a3
The PCI host controller on PolarFire SoC has multiple Root Port instances,
each with their own bridge and ctrl address spaces. The original binding
has an "apb" register region, and it is expected to be set to the base
address of the Root Complex register space. Some defines in the Linux
driver were used to compute the addresses of the bridge and ctrl address
ranges corresponding to Root Port instance 1. Some customers want to use
Root Port instance 2 however, which requires changing the defines in the
driver, which is clearly not a portable solution.
Remove this "apb" register region from the binding and add "bridge" &
"ctrl" regions instead, that will directly communicate the address of these
regions for a specific Root Port.
Fixes: 6ee6c89aac ("dt-bindings: PCI: microchip: Add Microchip PolarFire host binding")
Link: https://lore.kernel.org/r/20241107-barcode-whinny-b1a4e8834b4f@spud
Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
[bhelgaas: Capitalize PCIe spec terms]
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Acked-by: Daire McNamara <daire.mcnamara@microchip.com>
96 lines
3.1 KiB
YAML
96 lines
3.1 KiB
YAML
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
|
%YAML 1.2
|
|
---
|
|
$id: http://devicetree.org/schemas/pci/microchip,pcie-host.yaml#
|
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
|
|
|
title: Microchip PCIe Root Port Bridge Controller
|
|
|
|
maintainers:
|
|
- Daire McNamara <daire.mcnamara@microchip.com>
|
|
|
|
allOf:
|
|
- $ref: plda,xpressrich3-axi-common.yaml#
|
|
- $ref: /schemas/interrupt-controller/msi-controller.yaml#
|
|
|
|
properties:
|
|
compatible:
|
|
const: microchip,pcie-host-1.0 # PolarFire
|
|
|
|
reg:
|
|
minItems: 3
|
|
|
|
reg-names:
|
|
minItems: 3
|
|
|
|
clocks:
|
|
description:
|
|
Fabric Interface Controllers, FICs, are the interface between the FPGA
|
|
fabric and the core complex on PolarFire SoC. The FICs require two clocks,
|
|
one from each side of the interface. The "FIC clocks" described by this
|
|
property are on the core complex side & communication through a FIC is not
|
|
possible unless it's corresponding clock is enabled. A clock must be
|
|
enabled for each of the interfaces the root port is connected through.
|
|
This could in theory be all 4 interfaces, one interface or any combination
|
|
in between.
|
|
minItems: 1
|
|
items:
|
|
- description: FIC0's clock
|
|
- description: FIC1's clock
|
|
- description: FIC2's clock
|
|
- description: FIC3's clock
|
|
|
|
clock-names:
|
|
description:
|
|
As any FIC connection combination is possible, the names should match the
|
|
order in the clocks property and take the form "ficN" where N is a number
|
|
0-3
|
|
minItems: 1
|
|
maxItems: 4
|
|
items:
|
|
pattern: '^fic[0-3]$'
|
|
|
|
ranges:
|
|
minItems: 1
|
|
maxItems: 3
|
|
|
|
dma-ranges:
|
|
minItems: 1
|
|
maxItems: 6
|
|
|
|
unevaluatedProperties: false
|
|
|
|
examples:
|
|
- |
|
|
soc {
|
|
#address-cells = <2>;
|
|
#size-cells = <2>;
|
|
pcie0: pcie@2030000000 {
|
|
compatible = "microchip,pcie-host-1.0";
|
|
reg = <0x0 0x70000000 0x0 0x08000000>,
|
|
<0x0 0x43008000 0x0 0x00002000>,
|
|
<0x0 0x4300a000 0x0 0x00002000>;
|
|
reg-names = "cfg", "bridge", "ctrl";
|
|
device_type = "pci";
|
|
#address-cells = <3>;
|
|
#size-cells = <2>;
|
|
#interrupt-cells = <1>;
|
|
interrupts = <119>;
|
|
interrupt-map-mask = <0x0 0x0 0x0 0x7>;
|
|
interrupt-map = <0 0 0 1 &pcie_intc0 0>,
|
|
<0 0 0 2 &pcie_intc0 1>,
|
|
<0 0 0 3 &pcie_intc0 2>,
|
|
<0 0 0 4 &pcie_intc0 3>;
|
|
interrupt-parent = <&plic0>;
|
|
msi-parent = <&pcie0>;
|
|
msi-controller;
|
|
bus-range = <0x00 0x7f>;
|
|
ranges = <0x03000000 0x0 0x78000000 0x0 0x78000000 0x0 0x04000000>;
|
|
pcie_intc0: interrupt-controller {
|
|
#address-cells = <0>;
|
|
#interrupt-cells = <1>;
|
|
interrupt-controller;
|
|
};
|
|
};
|
|
};
|