* [PATCH v6 0/7] Add PCIe Root Port support for Agilex family of chips
@ 2025-02-11 15:17 Matthew Gerlach
2025-02-11 15:17 ` [PATCH v6 1/7] dt-bindings: PCI: altera: Add binding for Agilex Matthew Gerlach
` (6 more replies)
0 siblings, 7 replies; 14+ messages in thread
From: Matthew Gerlach @ 2025-02-11 15:17 UTC (permalink / raw)
To: lpieralisi, kw, manivannan.sadhasivam, robh, bhelgaas, krzk+dt,
conor+dt, dinguyen, joyce.ooi, linux-pci, devicetree,
linux-kernel
Cc: matthew.gerlach, peter.colberg, Matthew Gerlach
This patch set adds PCIe Root Port support for the Agilex family of FPGA chips.
Version 6 refactors duplicate dts snippets into dtsi's for correctness and
maintainability.
Patch 1:
Add new compatible strings for the three variants of the Agilex PCIe controller IP.
Patch 2:
Fix fixed-clock schema warnings in socfpga_agilex.dtsi before adding to it.
Patch 3:
Move bus@80000000 dt node to socfpga_agilex.dtsi.
Patch 4:
Refactor duplicate dts into dtsi.
Patch 5:
Add base dtsi for PCIe Root Port support of the Agilex family of chips.
Patch 6:
Add dts enabling PCIe Root Port support on an Agilex F-series Development Kit.
Patch 7:
Update Altera PCIe controller driver to support the Agilex family of chips.
D M, Sharath Kumar (1):
PCI: altera: Add Agilex support
Matthew Gerlach (6):
dt-bindings: PCI: altera: Add binding for Agilex
arm64: dts: agilex: Fix fixed-clock schema warnings
arm64: dts: agilex: move bus@80000000 to socfpga_agilex.dtsi
arm64: dts: agilex: refactor shared dts into dtsi
arm64: dts: agilex: add dtsi for PCIe Root Port
arm64: dts: agilex: add dts enabling PCIe Root Port
.../bindings/pci/altr,pcie-root-port.yaml | 10 +
arch/arm64/boot/dts/intel/Makefile | 1 +
arch/arm64/boot/dts/intel/socfpga_agilex.dtsi | 14 +
.../socfpga_agilex7f_socdk_pcie_root_port.dts | 87 ++++++
.../boot/dts/intel/socfpga_agilex_n6000.dts | 28 +-
.../intel/socfpga_agilex_pcie_root_port.dtsi | 48 ++++
.../boot/dts/intel/socfpga_agilex_socdk.dts | 62 +----
.../boot/dts/intel/socfpga_agilex_socdk.dtsi | 65 +++++
.../dts/intel/socfpga_agilex_socdk_nand.dts | 62 +----
drivers/pci/controller/pcie-altera.c | 253 +++++++++++++++++-
10 files changed, 481 insertions(+), 149 deletions(-)
create mode 100644 arch/arm64/boot/dts/intel/socfpga_agilex7f_socdk_pcie_root_port.dts
create mode 100644 arch/arm64/boot/dts/intel/socfpga_agilex_pcie_root_port.dtsi
create mode 100644 arch/arm64/boot/dts/intel/socfpga_agilex_socdk.dtsi
--
2.34.1
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v6 1/7] dt-bindings: PCI: altera: Add binding for Agilex
2025-02-11 15:17 [PATCH v6 0/7] Add PCIe Root Port support for Agilex family of chips Matthew Gerlach
@ 2025-02-11 15:17 ` Matthew Gerlach
2025-02-11 15:17 ` [PATCH v6 2/7] arm64: dts: agilex: Fix fixed-clock schema warnings Matthew Gerlach
` (5 subsequent siblings)
6 siblings, 0 replies; 14+ messages in thread
From: Matthew Gerlach @ 2025-02-11 15:17 UTC (permalink / raw)
To: lpieralisi, kw, manivannan.sadhasivam, robh, bhelgaas, krzk+dt,
conor+dt, dinguyen, joyce.ooi, linux-pci, devicetree,
linux-kernel
Cc: matthew.gerlach, peter.colberg, Matthew Gerlach
Add the compatible bindings for the three variants of Agilex
PCIe Hard IP.
Signed-off-by: Matthew Gerlach <matthew.gerlach@linux.intel.com>
Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
---
v6:
- Enhance compatible description.
v3:
- Remove accepted patches from patch set.
---
.../devicetree/bindings/pci/altr,pcie-root-port.yaml | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/Documentation/devicetree/bindings/pci/altr,pcie-root-port.yaml b/Documentation/devicetree/bindings/pci/altr,pcie-root-port.yaml
index 52533fccc134..1f93120d8eef 100644
--- a/Documentation/devicetree/bindings/pci/altr,pcie-root-port.yaml
+++ b/Documentation/devicetree/bindings/pci/altr,pcie-root-port.yaml
@@ -12,9 +12,19 @@ maintainers:
properties:
compatible:
+ description: Each family of socfpga has its own implementation
+ of the pci controller. altr,pcie-root-port-1.0 is used for the Cyclone5
+ family of chips. The Stratix10 family of chips is supported
+ by altr,pcie-root-port-2.0. The Agilex family of chips has
+ three, non-register compatible, variants of PCIe Hard IP referred to as
+ the f-tile, p-tile, and r-tile, depending on the specific chip instance.
+
enum:
- altr,pcie-root-port-1.0
- altr,pcie-root-port-2.0
+ - altr,pcie-root-port-3.0-f-tile
+ - altr,pcie-root-port-3.0-p-tile
+ - altr,pcie-root-port-3.0-r-tile
reg:
items:
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v6 2/7] arm64: dts: agilex: Fix fixed-clock schema warnings
2025-02-11 15:17 [PATCH v6 0/7] Add PCIe Root Port support for Agilex family of chips Matthew Gerlach
2025-02-11 15:17 ` [PATCH v6 1/7] dt-bindings: PCI: altera: Add binding for Agilex Matthew Gerlach
@ 2025-02-11 15:17 ` Matthew Gerlach
2025-02-12 5:56 ` Krzysztof Kozlowski
2025-02-11 15:17 ` [PATCH v6 3/7] arm64: dts: agilex: move bus@80000000 to socfpga_agilex.dtsi Matthew Gerlach
` (4 subsequent siblings)
6 siblings, 1 reply; 14+ messages in thread
From: Matthew Gerlach @ 2025-02-11 15:17 UTC (permalink / raw)
To: lpieralisi, kw, manivannan.sadhasivam, robh, bhelgaas, krzk+dt,
conor+dt, dinguyen, joyce.ooi, linux-pci, devicetree,
linux-kernel
Cc: matthew.gerlach, peter.colberg, Matthew Gerlach
Add required clock-frequency property to fixed-clock nodes
to fix schema check warnings.
Signed-off-by: Matthew Gerlach <matthew.gerlach@linux.intel.com>
---
v6:
- New patch to series.
---
arch/arm64/boot/dts/intel/socfpga_agilex.dtsi | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/arch/arm64/boot/dts/intel/socfpga_agilex.dtsi b/arch/arm64/boot/dts/intel/socfpga_agilex.dtsi
index 1235ba5a9865..42cb24cfa6da 100644
--- a/arch/arm64/boot/dts/intel/socfpga_agilex.dtsi
+++ b/arch/arm64/boot/dts/intel/socfpga_agilex.dtsi
@@ -114,21 +114,25 @@ clocks {
cb_intosc_hs_div2_clk: cb-intosc-hs-div2-clk {
#clock-cells = <0>;
compatible = "fixed-clock";
+ clock-frequency = <0>;
};
cb_intosc_ls_clk: cb-intosc-ls-clk {
#clock-cells = <0>;
compatible = "fixed-clock";
+ clock-frequency = <0>;
};
f2s_free_clk: f2s-free-clk {
#clock-cells = <0>;
compatible = "fixed-clock";
+ clock-frequency = <0>;
};
osc1: osc1 {
#clock-cells = <0>;
compatible = "fixed-clock";
+ clock-frequency = <0>;
};
qspi_clk: qspi-clk {
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v6 3/7] arm64: dts: agilex: move bus@80000000 to socfpga_agilex.dtsi
2025-02-11 15:17 [PATCH v6 0/7] Add PCIe Root Port support for Agilex family of chips Matthew Gerlach
2025-02-11 15:17 ` [PATCH v6 1/7] dt-bindings: PCI: altera: Add binding for Agilex Matthew Gerlach
2025-02-11 15:17 ` [PATCH v6 2/7] arm64: dts: agilex: Fix fixed-clock schema warnings Matthew Gerlach
@ 2025-02-11 15:17 ` Matthew Gerlach
2025-02-12 5:57 ` Krzysztof Kozlowski
2025-02-11 15:17 ` [PATCH v6 4/7] arm64: dts: agilex: refactor shared dts into dtsi Matthew Gerlach
` (3 subsequent siblings)
6 siblings, 1 reply; 14+ messages in thread
From: Matthew Gerlach @ 2025-02-11 15:17 UTC (permalink / raw)
To: lpieralisi, kw, manivannan.sadhasivam, robh, bhelgaas, krzk+dt,
conor+dt, dinguyen, joyce.ooi, linux-pci, devicetree,
linux-kernel
Cc: matthew.gerlach, peter.colberg, Matthew Gerlach
The bus from HPS to the FPGA is part of the SoC. Move its
device tree node to socfpga_agilex.dtsi to allow it to be
referenced by any board.
Signed-off-by: Matthew Gerlach <matthew.gerlach@linux.intel.com>
---
v6:
- New patch to series.
---
arch/arm64/boot/dts/intel/socfpga_agilex.dtsi | 10 +++++++
.../boot/dts/intel/socfpga_agilex_n6000.dts | 28 +++++++------------
2 files changed, 20 insertions(+), 18 deletions(-)
diff --git a/arch/arm64/boot/dts/intel/socfpga_agilex.dtsi b/arch/arm64/boot/dts/intel/socfpga_agilex.dtsi
index 42cb24cfa6da..26ccdf042281 100644
--- a/arch/arm64/boot/dts/intel/socfpga_agilex.dtsi
+++ b/arch/arm64/boot/dts/intel/socfpga_agilex.dtsi
@@ -678,5 +678,15 @@ qspi: spi@ff8d2000 {
status = "disabled";
};
+
+ bus80000000: bus@80000000 {
+ compatible = "simple-bus";
+ reg = <0x80000000 0x60000000>,
+ <0xf9000000 0x00100000>;
+ reg-names = "axi_h2f", "axi_h2f_lw";
+ #address-cells = <2>;
+ #size-cells = <1>;
+ ranges = <0x00000000 0x00000000 0x00000000 0x00000000>;
+ };
};
};
diff --git a/arch/arm64/boot/dts/intel/socfpga_agilex_n6000.dts b/arch/arm64/boot/dts/intel/socfpga_agilex_n6000.dts
index d22de06e9839..350c040ce9fe 100644
--- a/arch/arm64/boot/dts/intel/socfpga_agilex_n6000.dts
+++ b/arch/arm64/boot/dts/intel/socfpga_agilex_n6000.dts
@@ -25,24 +25,6 @@ memory@80000000 {
/* We expect the bootloader to fill in the reg */
reg = <0 0x80000000 0 0>;
};
-
- soc@0 {
- bus@80000000 {
- compatible = "simple-bus";
- reg = <0x80000000 0x60000000>,
- <0xf9000000 0x00100000>;
- reg-names = "axi_h2f", "axi_h2f_lw";
- #address-cells = <2>;
- #size-cells = <1>;
- ranges = <0x00000000 0x00000000 0xf9000000 0x00001000>;
-
- dma-controller@0 {
- compatible = "intel,hps-copy-engine";
- reg = <0x00000000 0x00000000 0x00001000>;
- #dma-cells = <1>;
- };
- };
- };
};
&osc1 {
@@ -64,3 +46,13 @@ &watchdog0 {
&fpga_mgr {
status = "disabled";
};
+
+&bus80000000 {
+ ranges = <0x00000000 0x00000000 0xf9000000 0x00001000>;
+
+ dma-controller@0 {
+ compatible = "intel,hps-copy-engine";
+ reg = <0x00000000 0x00000000 0x00001000>;
+ #dma-cells = <1>;
+ };
+};
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v6 4/7] arm64: dts: agilex: refactor shared dts into dtsi
2025-02-11 15:17 [PATCH v6 0/7] Add PCIe Root Port support for Agilex family of chips Matthew Gerlach
` (2 preceding siblings ...)
2025-02-11 15:17 ` [PATCH v6 3/7] arm64: dts: agilex: move bus@80000000 to socfpga_agilex.dtsi Matthew Gerlach
@ 2025-02-11 15:17 ` Matthew Gerlach
2025-02-12 5:59 ` Krzysztof Kozlowski
2025-02-11 15:17 ` [PATCH v6 5/7] arm64: dts: agilex: add dtsi for PCIe Root Port Matthew Gerlach
` (2 subsequent siblings)
6 siblings, 1 reply; 14+ messages in thread
From: Matthew Gerlach @ 2025-02-11 15:17 UTC (permalink / raw)
To: lpieralisi, kw, manivannan.sadhasivam, robh, bhelgaas, krzk+dt,
conor+dt, dinguyen, joyce.ooi, linux-pci, devicetree,
linux-kernel
Cc: matthew.gerlach, peter.colberg, Matthew Gerlach
Move common device tree from socfpga_agilex_socdk*.dts to
socfpga_agilex_socdk.dtsi.
Signed-off-by: Matthew Gerlach <matthew.gerlach@linux.intel.com>
---
v6:
- New patch to series.
---
.../boot/dts/intel/socfpga_agilex_socdk.dts | 62 +-----------------
.../boot/dts/intel/socfpga_agilex_socdk.dtsi | 65 +++++++++++++++++++
.../dts/intel/socfpga_agilex_socdk_nand.dts | 62 +-----------------
3 files changed, 67 insertions(+), 122 deletions(-)
create mode 100644 arch/arm64/boot/dts/intel/socfpga_agilex_socdk.dtsi
diff --git a/arch/arm64/boot/dts/intel/socfpga_agilex_socdk.dts b/arch/arm64/boot/dts/intel/socfpga_agilex_socdk.dts
index b31cfa6b802d..a970f612333a 100644
--- a/arch/arm64/boot/dts/intel/socfpga_agilex_socdk.dts
+++ b/arch/arm64/boot/dts/intel/socfpga_agilex_socdk.dts
@@ -3,50 +3,7 @@
* Copyright (C) 2019, Intel Corporation
*/
#include "socfpga_agilex.dtsi"
-
-/ {
- model = "SoCFPGA Agilex SoCDK";
- compatible = "intel,socfpga-agilex-socdk", "intel,socfpga-agilex";
-
- aliases {
- serial0 = &uart0;
- ethernet0 = &gmac0;
- ethernet1 = &gmac1;
- ethernet2 = &gmac2;
- };
-
- chosen {
- stdout-path = "serial0:115200n8";
- };
-
- leds {
- compatible = "gpio-leds";
- led0 {
- label = "hps_led0";
- gpios = <&portb 20 GPIO_ACTIVE_HIGH>;
- };
-
- led1 {
- label = "hps_led1";
- gpios = <&portb 19 GPIO_ACTIVE_HIGH>;
- };
-
- led2 {
- label = "hps_led2";
- gpios = <&portb 21 GPIO_ACTIVE_HIGH>;
- };
- };
-
- memory@80000000 {
- device_type = "memory";
- /* We expect the bootloader to fill in the reg */
- reg = <0 0x80000000 0 0>;
- };
-};
-
-&gpio1 {
- status = "okay";
-};
+#include "socfpga_agilex_socdk.dtsi"
&gmac0 {
status = "okay";
@@ -86,23 +43,6 @@ &mmc {
clk-phase-sd-hs = <0>, <135>;
};
-&osc1 {
- clock-frequency = <25000000>;
-};
-
-&uart0 {
- status = "okay";
-};
-
-&usb0 {
- status = "okay";
- disable-over-current;
-};
-
-&watchdog0 {
- status = "okay";
-};
-
&qspi {
status = "okay";
flash@0 {
diff --git a/arch/arm64/boot/dts/intel/socfpga_agilex_socdk.dtsi b/arch/arm64/boot/dts/intel/socfpga_agilex_socdk.dtsi
new file mode 100644
index 000000000000..e0f3ff60aa33
--- /dev/null
+++ b/arch/arm64/boot/dts/intel/socfpga_agilex_socdk.dtsi
@@ -0,0 +1,65 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2019, Intel Corporation
+ */
+
+/ {
+ model = "SoCFPGA Agilex SoCDK";
+ compatible = "intel,socfpga-agilex-socdk", "intel,socfpga-agilex";
+
+ aliases {
+ serial0 = &uart0;
+ ethernet0 = &gmac0;
+ ethernet1 = &gmac1;
+ ethernet2 = &gmac2;
+ };
+
+ chosen {
+ stdout-path = "serial0:115200n8";
+ };
+
+ leds {
+ compatible = "gpio-leds";
+ led0 {
+ label = "hps_led0";
+ gpios = <&portb 20 GPIO_ACTIVE_HIGH>;
+ };
+
+ led1 {
+ label = "hps_led1";
+ gpios = <&portb 19 GPIO_ACTIVE_HIGH>;
+ };
+
+ led2 {
+ label = "hps_led2";
+ gpios = <&portb 21 GPIO_ACTIVE_HIGH>;
+ };
+ };
+
+ memory@80000000 {
+ device_type = "memory";
+ /* We expect the bootloader to fill in the reg */
+ reg = <0 0x80000000 0 0>;
+ };
+};
+
+&gpio1 {
+ status = "okay";
+};
+
+&osc1 {
+ clock-frequency = <25000000>;
+};
+
+&uart0 {
+ status = "okay";
+};
+
+&usb0 {
+ status = "okay";
+ disable-over-current;
+};
+
+&watchdog0 {
+ status = "okay";
+};
diff --git a/arch/arm64/boot/dts/intel/socfpga_agilex_socdk_nand.dts b/arch/arm64/boot/dts/intel/socfpga_agilex_socdk_nand.dts
index 0f9020bd0c52..53a533cd2789 100644
--- a/arch/arm64/boot/dts/intel/socfpga_agilex_socdk_nand.dts
+++ b/arch/arm64/boot/dts/intel/socfpga_agilex_socdk_nand.dts
@@ -3,50 +3,7 @@
* Copyright (C) 2019, Intel Corporation
*/
#include "socfpga_agilex.dtsi"
-
-/ {
- model = "SoCFPGA Agilex SoCDK";
- compatible = "intel,socfpga-agilex-socdk", "intel,socfpga-agilex";
-
- aliases {
- serial0 = &uart0;
- ethernet0 = &gmac0;
- ethernet1 = &gmac1;
- ethernet2 = &gmac2;
- };
-
- chosen {
- stdout-path = "serial0:115200n8";
- };
-
- leds {
- compatible = "gpio-leds";
- led0 {
- label = "hps_led0";
- gpios = <&portb 20 GPIO_ACTIVE_HIGH>;
- };
-
- led1 {
- label = "hps_led1";
- gpios = <&portb 19 GPIO_ACTIVE_HIGH>;
- };
-
- led2 {
- label = "hps_led2";
- gpios = <&portb 21 GPIO_ACTIVE_HIGH>;
- };
- };
-
- memory@80000000 {
- device_type = "memory";
- /* We expect the bootloader to fill in the reg */
- reg = <0 0x80000000 0 0>;
- };
-};
-
-&gpio1 {
- status = "okay";
-};
+#include "socfpga_agilex_socdk.dtsi"
&gmac2 {
status = "okay";
@@ -97,20 +54,3 @@ partition@200000 {
};
};
};
-
-&osc1 {
- clock-frequency = <25000000>;
-};
-
-&uart0 {
- status = "okay";
-};
-
-&usb0 {
- status = "okay";
- disable-over-current;
-};
-
-&watchdog0 {
- status = "okay";
-};
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v6 5/7] arm64: dts: agilex: add dtsi for PCIe Root Port
2025-02-11 15:17 [PATCH v6 0/7] Add PCIe Root Port support for Agilex family of chips Matthew Gerlach
` (3 preceding siblings ...)
2025-02-11 15:17 ` [PATCH v6 4/7] arm64: dts: agilex: refactor shared dts into dtsi Matthew Gerlach
@ 2025-02-11 15:17 ` Matthew Gerlach
2025-02-11 15:17 ` [PATCH v6 6/7] arm64: dts: agilex: add dts enabling " Matthew Gerlach
2025-02-11 15:17 ` [PATCH v6 7/7] PCI: altera: Add Agilex support Matthew Gerlach
6 siblings, 0 replies; 14+ messages in thread
From: Matthew Gerlach @ 2025-02-11 15:17 UTC (permalink / raw)
To: lpieralisi, kw, manivannan.sadhasivam, robh, bhelgaas, krzk+dt,
conor+dt, dinguyen, joyce.ooi, linux-pci, devicetree,
linux-kernel
Cc: matthew.gerlach, peter.colberg, Matthew Gerlach
Add the base device tree for support of the PCIe Root Port
for the Agilex family of chips.
Signed-off-by: Matthew Gerlach <matthew.gerlach@linux.intel.com>
---
v6:
- Reference bus80000000 in socfpga_agilex.dtsi
- Change values of #address-cells, #size-cell, and num-vectors to decimal
- Fix SPDX header.
- Fix checkpatch.pl line length warning.
- Fix "address format error" from dtschema check.
v3:
- Remove accepted patches from patch set.
v2:
- Rename node to fix schema check error.
---
.../intel/socfpga_agilex_pcie_root_port.dtsi | 48 +++++++++++++++++++
1 file changed, 48 insertions(+)
create mode 100644 arch/arm64/boot/dts/intel/socfpga_agilex_pcie_root_port.dtsi
diff --git a/arch/arm64/boot/dts/intel/socfpga_agilex_pcie_root_port.dtsi b/arch/arm64/boot/dts/intel/socfpga_agilex_pcie_root_port.dtsi
new file mode 100644
index 000000000000..754ca7bdcc65
--- /dev/null
+++ b/arch/arm64/boot/dts/intel/socfpga_agilex_pcie_root_port.dtsi
@@ -0,0 +1,48 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2024, Intel Corporation
+ */
+&bus80000000 {
+ ranges = <0x00000000 0x00000000 0x80000000 0x00040000>,
+ <0x00000000 0x10000000 0x90100000 0x0ff00000>,
+ <0x00000000 0x20000000 0xa0000000 0x00200000>,
+ <0x00000001 0x00010000 0xf9010000 0x00008000>,
+ <0x00000001 0x00018000 0xf9018000 0x00000080>,
+ <0x00000001 0x00018080 0xf9018080 0x00000010>;
+
+ pcie_0_pcie_aglx: pcie@10000000 {
+ reg = <0x00000000 0x10000000 0x10000000>,
+ <0x00000001 0x00010000 0x00008000>,
+ <0x00000000 0x20000000 0x00200000>;
+ reg-names = "Txs", "Cra", "Hip";
+ interrupt-parent = <&intc>;
+ interrupts = <GIC_SPI 0x14 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-controller;
+ #interrupt-cells = <0x1>;
+ device_type = "pci";
+ bus-range = <0x0000000 0x000000ff>;
+ ranges = <0x82000000 0x00000000 0x00100000 0x00000000
+ 0x10000000 0x00000000 0x0ff00000>;
+ msi-parent = <&pcie_0_msi_irq>;
+ #address-cells = <3>;
+ #size-cells = <2>;
+ interrupt-map-mask = <0x0 0x0 0x0 0x7>;
+ interrupt-map = <0x0 0x0 0x0 0x1 &pcie_0_pcie_aglx 0 0 0 0x1>,
+ <0x0 0x0 0x0 0x2 &pcie_0_pcie_aglx 0 0 0 0x2>,
+ <0x0 0x0 0x0 0x3 &pcie_0_pcie_aglx 0 0 0 0x3>,
+ <0x0 0x0 0x0 0x4 &pcie_0_pcie_aglx 0 0 0 0x4>;
+ status = "disabled";
+ };
+
+ pcie_0_msi_irq: msi@100018080 {
+ compatible = "altr,msi-1.0";
+ reg = <0x00000001 0x00018080 0x00000010>,
+ <0x00000001 0x00018000 0x00000080>;
+ reg-names = "csr", "vector_slave";
+ interrupt-parent = <&intc>;
+ interrupts = <GIC_SPI 0x13 IRQ_TYPE_LEVEL_HIGH>;
+ msi-controller;
+ num-vectors = <32>;
+ status = "disabled";
+ };
+};
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v6 6/7] arm64: dts: agilex: add dts enabling PCIe Root Port
2025-02-11 15:17 [PATCH v6 0/7] Add PCIe Root Port support for Agilex family of chips Matthew Gerlach
` (4 preceding siblings ...)
2025-02-11 15:17 ` [PATCH v6 5/7] arm64: dts: agilex: add dtsi for PCIe Root Port Matthew Gerlach
@ 2025-02-11 15:17 ` Matthew Gerlach
2025-02-12 6:00 ` Krzysztof Kozlowski
2025-02-11 15:17 ` [PATCH v6 7/7] PCI: altera: Add Agilex support Matthew Gerlach
6 siblings, 1 reply; 14+ messages in thread
From: Matthew Gerlach @ 2025-02-11 15:17 UTC (permalink / raw)
To: lpieralisi, kw, manivannan.sadhasivam, robh, bhelgaas, krzk+dt,
conor+dt, dinguyen, joyce.ooi, linux-pci, devicetree,
linux-kernel
Cc: matthew.gerlach, peter.colberg, Matthew Gerlach
Add a device tree enabling PCIe Root Port support on an Agilex F-series
Development Kit which has the P-tile variant of the PCIe IP.
Signed-off-by: Matthew Gerlach <matthew.gerlach@linux.intel.com>
---
v6:
- Fix SPDX header.
- Make compatible property first.
- Fix comment line wrapping.
- Don't include .dts.
v3:
- Remove accepted patches from patch set.
---
arch/arm64/boot/dts/intel/Makefile | 1 +
.../socfpga_agilex7f_socdk_pcie_root_port.dts | 87 +++++++++++++++++++
2 files changed, 88 insertions(+)
create mode 100644 arch/arm64/boot/dts/intel/socfpga_agilex7f_socdk_pcie_root_port.dts
diff --git a/arch/arm64/boot/dts/intel/Makefile b/arch/arm64/boot/dts/intel/Makefile
index d39cfb723f5b..737e81c3c3f7 100644
--- a/arch/arm64/boot/dts/intel/Makefile
+++ b/arch/arm64/boot/dts/intel/Makefile
@@ -2,6 +2,7 @@
dtb-$(CONFIG_ARCH_INTEL_SOCFPGA) += socfpga_agilex_n6000.dtb \
socfpga_agilex_socdk.dtb \
socfpga_agilex_socdk_nand.dtb \
+ socfpga_agilex7f_socdk_pcie_root_port.dtb \
socfpga_agilex5_socdk.dtb \
socfpga_n5x_socdk.dtb
dtb-$(CONFIG_ARCH_KEEMBAY) += keembay-evm.dtb
diff --git a/arch/arm64/boot/dts/intel/socfpga_agilex7f_socdk_pcie_root_port.dts b/arch/arm64/boot/dts/intel/socfpga_agilex7f_socdk_pcie_root_port.dts
new file mode 100644
index 000000000000..3588c845cf9c
--- /dev/null
+++ b/arch/arm64/boot/dts/intel/socfpga_agilex7f_socdk_pcie_root_port.dts
@@ -0,0 +1,87 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2024, Intel Corporation
+ */
+
+#include "socfpga_agilex.dtsi"
+#include "socfpga_agilex_socdk.dtsi"
+#include "socfpga_agilex_pcie_root_port.dtsi"
+
+&gmac0 {
+ status = "okay";
+ phy-mode = "rgmii";
+ phy-handle = <&phy0>;
+
+ max-frame-size = <9000>;
+
+ mdio0 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "snps,dwmac-mdio";
+ phy0: ethernet-phy@0 {
+ reg = <4>;
+
+ txd0-skew-ps = <0>; /* -420ps */
+ txd1-skew-ps = <0>; /* -420ps */
+ txd2-skew-ps = <0>; /* -420ps */
+ txd3-skew-ps = <0>; /* -420ps */
+ rxd0-skew-ps = <420>; /* 0ps */
+ rxd1-skew-ps = <420>; /* 0ps */
+ rxd2-skew-ps = <420>; /* 0ps */
+ rxd3-skew-ps = <420>; /* 0ps */
+ txen-skew-ps = <0>; /* -420ps */
+ txc-skew-ps = <900>; /* 0ps */
+ rxdv-skew-ps = <420>; /* 0ps */
+ rxc-skew-ps = <1680>; /* 780ps */
+ };
+ };
+};
+
+&mmc {
+ status = "okay";
+ cap-sd-highspeed;
+ broken-cd;
+ bus-width = <4>;
+ clk-phase-sd-hs = <0>, <135>;
+};
+
+&qspi {
+ status = "okay";
+ flash@0 {
+ compatible = "micron,mt25qu02g", "jedec,spi-nor";
+ reg = <0>;
+ spi-max-frequency = <100000000>;
+
+ m25p,fast-read;
+ cdns,read-delay = <2>;
+ cdns,tshsl-ns = <50>;
+ cdns,tsd2d-ns = <50>;
+ cdns,tchsh-ns = <4>;
+ cdns,tslch-ns = <4>;
+
+ partitions {
+ compatible = "fixed-partitions";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ qspi_boot: partition@0 {
+ label = "Boot and fpga data";
+ reg = <0x0 0x04200000>;
+ };
+
+ root: partition@4200000 {
+ label = "Root Filesystem - UBIFS";
+ reg = <0x04200000 0x0BE00000>;
+ };
+ };
+ };
+};
+
+&pcie_0_pcie_aglx {
+ compatible = "altr,pcie-root-port-3.0-p-tile";
+ status = "okay";
+};
+
+&pcie_0_msi_irq {
+ status = "okay";
+};
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v6 7/7] PCI: altera: Add Agilex support
2025-02-11 15:17 [PATCH v6 0/7] Add PCIe Root Port support for Agilex family of chips Matthew Gerlach
` (5 preceding siblings ...)
2025-02-11 15:17 ` [PATCH v6 6/7] arm64: dts: agilex: add dts enabling " Matthew Gerlach
@ 2025-02-11 15:17 ` Matthew Gerlach
6 siblings, 0 replies; 14+ messages in thread
From: Matthew Gerlach @ 2025-02-11 15:17 UTC (permalink / raw)
To: lpieralisi, kw, manivannan.sadhasivam, robh, bhelgaas, krzk+dt,
conor+dt, dinguyen, joyce.ooi, linux-pci, devicetree,
linux-kernel
Cc: matthew.gerlach, peter.colberg, D M, Sharath Kumar, D, M,
Matthew Gerlach
From: "D M, Sharath Kumar" <sharath.kumar.d.m@intel.com>
Add PCIe root port controller support for the Agilex family of chips.
The Agilex PCIe IP has three variants that are mostly sw compatible,
except for a couple register offsets. The P-Tile variant supports
Gen3/Gen4 1x16. The F-Tile variant supports Gen3/Gen4 4x4, 4x8, and 4x16.
The R-Tile variant improves on the F-Tile variant by adding Gen5 support.
To simplify the implementation of pci_ops read/write functions,
ep_{read/write}_cfg() callbacks were added to struct altera_pci_ops
to easily distinguish between hardware variants.
Signed-off-by: D M, Sharath Kumar <sharath.kumar.d.m@intel.com>
Signed-off-by: Matthew Gerlach <matthew.gerlach@linux.intel.com>
Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
---
v6:
- Removed duplicate Signed-off-by:
- Add Reviewed-by: Manivannan Sadhasivam.
v5:
- remove unnecessary !!
- Improve macro usage to make comment unnecessary.
v4:
- Add info to commit message.
- Use {read/write}?_relaxed where appropriate.
- Use BIT(12) instead of (1 << 12).
- Clear IRQ before handling it.
- add interrupt number to unexpected IRQ messge.
v3:
- Remove accepted patches from patch set.
v2:
- Match historical style of subject.
- Remove unrelated changes.
- Fix indentation.
---
drivers/pci/controller/pcie-altera.c | 253 ++++++++++++++++++++++++++-
1 file changed, 244 insertions(+), 9 deletions(-)
diff --git a/drivers/pci/controller/pcie-altera.c b/drivers/pci/controller/pcie-altera.c
index eb55a7f8573a..42ea9960b9da 100644
--- a/drivers/pci/controller/pcie-altera.c
+++ b/drivers/pci/controller/pcie-altera.c
@@ -6,6 +6,7 @@
* Description: Altera PCIe host controller driver
*/
+#include <linux/bitfield.h>
#include <linux/delay.h>
#include <linux/interrupt.h>
#include <linux/irqchip/chained_irq.h>
@@ -77,9 +78,25 @@
#define S10_TLP_FMTTYPE_CFGWR0 0x45
#define S10_TLP_FMTTYPE_CFGWR1 0x44
+#define AGLX_RP_CFG_ADDR(pcie, reg) (((pcie)->hip_base) + (reg))
+#define AGLX_RP_SECONDARY(pcie) \
+ readb(AGLX_RP_CFG_ADDR(pcie, PCI_SECONDARY_BUS))
+
+#define AGLX_BDF_REG 0x00002004
+#define AGLX_ROOT_PORT_IRQ_STATUS 0x14c
+#define AGLX_ROOT_PORT_IRQ_ENABLE 0x150
+#define CFG_AER BIT(4)
+
+#define AGLX_CFG_TARGET GENMASK(13, 12)
+#define AGLX_CFG_TARGET_TYPE0 0
+#define AGLX_CFG_TARGET_TYPE1 1
+#define AGLX_CFG_TARGET_LOCAL_2000 2
+#define AGLX_CFG_TARGET_LOCAL_3000 3
+
enum altera_pcie_version {
ALTERA_PCIE_V1 = 0,
ALTERA_PCIE_V2,
+ ALTERA_PCIE_V3,
};
struct altera_pcie {
@@ -102,6 +119,11 @@ struct altera_pcie_ops {
int size, u32 *value);
int (*rp_write_cfg)(struct altera_pcie *pcie, u8 busno,
int where, int size, u32 value);
+ int (*ep_read_cfg)(struct altera_pcie *pcie, u8 busno,
+ unsigned int devfn, int where, int size, u32 *value);
+ int (*ep_write_cfg)(struct altera_pcie *pcie, u8 busno,
+ unsigned int devfn, int where, int size, u32 value);
+ void (*rp_isr)(struct irq_desc *desc);
};
struct altera_pcie_data {
@@ -112,6 +134,9 @@ struct altera_pcie_data {
u32 cfgrd1;
u32 cfgwr0;
u32 cfgwr1;
+ u32 port_conf_offset;
+ u32 port_irq_status_offset;
+ u32 port_irq_enable_offset;
};
struct tlp_rp_regpair_t {
@@ -131,6 +156,28 @@ static inline u32 cra_readl(struct altera_pcie *pcie, const u32 reg)
return readl_relaxed(pcie->cra_base + reg);
}
+static inline void cra_writew(struct altera_pcie *pcie, const u32 value,
+ const u32 reg)
+{
+ writew_relaxed(value, pcie->cra_base + reg);
+}
+
+static inline u32 cra_readw(struct altera_pcie *pcie, const u32 reg)
+{
+ return readw_relaxed(pcie->cra_base + reg);
+}
+
+static inline void cra_writeb(struct altera_pcie *pcie, const u32 value,
+ const u32 reg)
+{
+ writeb_relaxed(value, pcie->cra_base + reg);
+}
+
+static inline u32 cra_readb(struct altera_pcie *pcie, const u32 reg)
+{
+ return readb_relaxed(pcie->cra_base + reg);
+}
+
static bool altera_pcie_link_up(struct altera_pcie *pcie)
{
return !!((cra_readl(pcie, RP_LTSSM) & RP_LTSSM_MASK) == LTSSM_L0);
@@ -145,6 +192,15 @@ static bool s10_altera_pcie_link_up(struct altera_pcie *pcie)
return !!(readw(addr) & PCI_EXP_LNKSTA_DLLLA);
}
+static bool aglx_altera_pcie_link_up(struct altera_pcie *pcie)
+{
+ void __iomem *addr = AGLX_RP_CFG_ADDR(pcie,
+ pcie->pcie_data->cap_offset +
+ PCI_EXP_LNKSTA);
+
+ return (readw_relaxed(addr) & PCI_EXP_LNKSTA_DLLLA);
+}
+
/*
* Altera PCIe port uses BAR0 of RC's configuration space as the translation
* from PCI bus to native BUS. Entire DDR region is mapped into PCIe space
@@ -425,6 +481,103 @@ static int s10_rp_write_cfg(struct altera_pcie *pcie, u8 busno,
return PCIBIOS_SUCCESSFUL;
}
+static int aglx_rp_read_cfg(struct altera_pcie *pcie, int where,
+ int size, u32 *value)
+{
+ void __iomem *addr = AGLX_RP_CFG_ADDR(pcie, where);
+
+ switch (size) {
+ case 1:
+ *value = readb_relaxed(addr);
+ break;
+ case 2:
+ *value = readw_relaxed(addr);
+ break;
+ default:
+ *value = readl_relaxed(addr);
+ break;
+ }
+
+ /* interrupt pin not programmed in hardware, set to INTA */
+ if (where == PCI_INTERRUPT_PIN && size == 1 && !(*value))
+ *value = 0x01;
+ else if (where == PCI_INTERRUPT_LINE && !(*value & 0xff00))
+ *value |= 0x0100;
+
+ return PCIBIOS_SUCCESSFUL;
+}
+
+static int aglx_rp_write_cfg(struct altera_pcie *pcie, u8 busno,
+ int where, int size, u32 value)
+{
+ void __iomem *addr = AGLX_RP_CFG_ADDR(pcie, where);
+
+ switch (size) {
+ case 1:
+ writeb_relaxed(value, addr);
+ break;
+ case 2:
+ writew_relaxed(value, addr);
+ break;
+ default:
+ writel_relaxed(value, addr);
+ break;
+ }
+
+ /*
+ * Monitor changes to PCI_PRIMARY_BUS register on root port
+ * and update local copy of root bus number accordingly.
+ */
+ if (busno == pcie->root_bus_nr && where == PCI_PRIMARY_BUS)
+ pcie->root_bus_nr = value & 0xff;
+
+ return PCIBIOS_SUCCESSFUL;
+}
+
+static int aglx_ep_write_cfg(struct altera_pcie *pcie, u8 busno,
+ unsigned int devfn, int where, int size, u32 value)
+{
+ cra_writel(pcie, ((busno << 8) | devfn), AGLX_BDF_REG);
+ if (busno > AGLX_RP_SECONDARY(pcie))
+ where |= FIELD_PREP(AGLX_CFG_TARGET, AGLX_CFG_TARGET_TYPE1);
+
+ switch (size) {
+ case 1:
+ cra_writeb(pcie, value, where);
+ break;
+ case 2:
+ cra_writew(pcie, value, where);
+ break;
+ default:
+ cra_writel(pcie, value, where);
+ break;
+ }
+
+ return PCIBIOS_SUCCESSFUL;
+}
+
+static int aglx_ep_read_cfg(struct altera_pcie *pcie, u8 busno,
+ unsigned int devfn, int where, int size, u32 *value)
+{
+ cra_writel(pcie, ((busno << 8) | devfn), AGLX_BDF_REG);
+ if (busno > AGLX_RP_SECONDARY(pcie))
+ where |= FIELD_PREP(AGLX_CFG_TARGET, AGLX_CFG_TARGET_TYPE1);
+
+ switch (size) {
+ case 1:
+ *value = cra_readb(pcie, where);
+ break;
+ case 2:
+ *value = cra_readw(pcie, where);
+ break;
+ default:
+ *value = cra_readl(pcie, where);
+ break;
+ }
+
+ return PCIBIOS_SUCCESSFUL;
+}
+
static int _altera_pcie_cfg_read(struct altera_pcie *pcie, u8 busno,
unsigned int devfn, int where, int size,
u32 *value)
@@ -437,6 +590,10 @@ static int _altera_pcie_cfg_read(struct altera_pcie *pcie, u8 busno,
return pcie->pcie_data->ops->rp_read_cfg(pcie, where,
size, value);
+ if (pcie->pcie_data->ops->ep_read_cfg)
+ return pcie->pcie_data->ops->ep_read_cfg(pcie, busno, devfn,
+ where, size, value);
+
switch (size) {
case 1:
byte_en = 1 << (where & 3);
@@ -481,6 +638,10 @@ static int _altera_pcie_cfg_write(struct altera_pcie *pcie, u8 busno,
return pcie->pcie_data->ops->rp_write_cfg(pcie, busno,
where, size, value);
+ if (pcie->pcie_data->ops->ep_write_cfg)
+ return pcie->pcie_data->ops->ep_write_cfg(pcie, busno, devfn,
+ where, size, value);
+
switch (size) {
case 1:
data32 = (value & 0xff) << shift;
@@ -659,7 +820,30 @@ static void altera_pcie_isr(struct irq_desc *desc)
dev_err_ratelimited(dev, "unexpected IRQ, INT%d\n", bit);
}
}
+ chained_irq_exit(chip, desc);
+}
+
+static void aglx_isr(struct irq_desc *desc)
+{
+ struct irq_chip *chip = irq_desc_get_chip(desc);
+ struct altera_pcie *pcie;
+ struct device *dev;
+ u32 status;
+ int ret;
+
+ chained_irq_enter(chip, desc);
+ pcie = irq_desc_get_handler_data(desc);
+ dev = &pcie->pdev->dev;
+ status = readl(pcie->hip_base + pcie->pcie_data->port_conf_offset +
+ pcie->pcie_data->port_irq_status_offset);
+ if (status & CFG_AER) {
+ writel(CFG_AER, (pcie->hip_base + pcie->pcie_data->port_conf_offset +
+ pcie->pcie_data->port_irq_status_offset));
+ ret = generic_handle_domain_irq(pcie->irq_domain, 0);
+ if (ret)
+ dev_err_ratelimited(dev, "unexpected IRQ %d\n", pcie->irq);
+ }
chained_irq_exit(chip, desc);
}
@@ -694,9 +878,9 @@ static int altera_pcie_parse_dt(struct altera_pcie *pcie)
if (IS_ERR(pcie->cra_base))
return PTR_ERR(pcie->cra_base);
- if (pcie->pcie_data->version == ALTERA_PCIE_V2) {
- pcie->hip_base =
- devm_platform_ioremap_resource_byname(pdev, "Hip");
+ if (pcie->pcie_data->version == ALTERA_PCIE_V2 ||
+ pcie->pcie_data->version == ALTERA_PCIE_V3) {
+ pcie->hip_base = devm_platform_ioremap_resource_byname(pdev, "Hip");
if (IS_ERR(pcie->hip_base))
return PTR_ERR(pcie->hip_base);
}
@@ -706,7 +890,7 @@ static int altera_pcie_parse_dt(struct altera_pcie *pcie)
if (pcie->irq < 0)
return pcie->irq;
- irq_set_chained_handler_and_data(pcie->irq, altera_pcie_isr, pcie);
+ irq_set_chained_handler_and_data(pcie->irq, pcie->pcie_data->ops->rp_isr, pcie);
return 0;
}
@@ -719,6 +903,7 @@ static const struct altera_pcie_ops altera_pcie_ops_1_0 = {
.tlp_read_pkt = tlp_read_packet,
.tlp_write_pkt = tlp_write_packet,
.get_link_status = altera_pcie_link_up,
+ .rp_isr = altera_pcie_isr,
};
static const struct altera_pcie_ops altera_pcie_ops_2_0 = {
@@ -727,6 +912,16 @@ static const struct altera_pcie_ops altera_pcie_ops_2_0 = {
.get_link_status = s10_altera_pcie_link_up,
.rp_read_cfg = s10_rp_read_cfg,
.rp_write_cfg = s10_rp_write_cfg,
+ .rp_isr = altera_pcie_isr,
+};
+
+static const struct altera_pcie_ops altera_pcie_ops_3_0 = {
+ .rp_read_cfg = aglx_rp_read_cfg,
+ .rp_write_cfg = aglx_rp_write_cfg,
+ .get_link_status = aglx_altera_pcie_link_up,
+ .ep_read_cfg = aglx_ep_read_cfg,
+ .ep_write_cfg = aglx_ep_write_cfg,
+ .rp_isr = aglx_isr,
};
static const struct altera_pcie_data altera_pcie_1_0_data = {
@@ -749,11 +944,44 @@ static const struct altera_pcie_data altera_pcie_2_0_data = {
.cfgwr1 = S10_TLP_FMTTYPE_CFGWR1,
};
+static const struct altera_pcie_data altera_pcie_3_0_f_tile_data = {
+ .ops = &altera_pcie_ops_3_0,
+ .version = ALTERA_PCIE_V3,
+ .cap_offset = 0x70,
+ .port_conf_offset = 0x14000,
+ .port_irq_status_offset = AGLX_ROOT_PORT_IRQ_STATUS,
+ .port_irq_enable_offset = AGLX_ROOT_PORT_IRQ_ENABLE,
+};
+
+static const struct altera_pcie_data altera_pcie_3_0_p_tile_data = {
+ .ops = &altera_pcie_ops_3_0,
+ .version = ALTERA_PCIE_V3,
+ .cap_offset = 0x70,
+ .port_conf_offset = 0x104000,
+ .port_irq_status_offset = AGLX_ROOT_PORT_IRQ_STATUS,
+ .port_irq_enable_offset = AGLX_ROOT_PORT_IRQ_ENABLE,
+};
+
+static const struct altera_pcie_data altera_pcie_3_0_r_tile_data = {
+ .ops = &altera_pcie_ops_3_0,
+ .version = ALTERA_PCIE_V3,
+ .cap_offset = 0x70,
+ .port_conf_offset = 0x1300,
+ .port_irq_status_offset = 0x0,
+ .port_irq_enable_offset = 0x4,
+};
+
static const struct of_device_id altera_pcie_of_match[] = {
{.compatible = "altr,pcie-root-port-1.0",
.data = &altera_pcie_1_0_data },
{.compatible = "altr,pcie-root-port-2.0",
.data = &altera_pcie_2_0_data },
+ {.compatible = "altr,pcie-root-port-3.0-f-tile",
+ .data = &altera_pcie_3_0_f_tile_data },
+ {.compatible = "altr,pcie-root-port-3.0-p-tile",
+ .data = &altera_pcie_3_0_p_tile_data },
+ {.compatible = "altr,pcie-root-port-3.0-r-tile",
+ .data = &altera_pcie_3_0_r_tile_data },
{},
};
@@ -791,11 +1019,18 @@ static int altera_pcie_probe(struct platform_device *pdev)
return ret;
}
- /* clear all interrupts */
- cra_writel(pcie, P2A_INT_STS_ALL, P2A_INT_STATUS);
- /* enable all interrupts */
- cra_writel(pcie, P2A_INT_ENA_ALL, P2A_INT_ENABLE);
- altera_pcie_host_init(pcie);
+ if (pcie->pcie_data->version == ALTERA_PCIE_V1 ||
+ pcie->pcie_data->version == ALTERA_PCIE_V2) {
+ /* clear all interrupts */
+ cra_writel(pcie, P2A_INT_STS_ALL, P2A_INT_STATUS);
+ /* enable all interrupts */
+ cra_writel(pcie, P2A_INT_ENA_ALL, P2A_INT_ENABLE);
+ altera_pcie_host_init(pcie);
+ } else if (pcie->pcie_data->version == ALTERA_PCIE_V3) {
+ writel(CFG_AER,
+ pcie->hip_base + pcie->pcie_data->port_conf_offset +
+ pcie->pcie_data->port_irq_enable_offset);
+ }
bridge->sysdata = pcie;
bridge->busnr = pcie->root_bus_nr;
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH v6 2/7] arm64: dts: agilex: Fix fixed-clock schema warnings
2025-02-11 15:17 ` [PATCH v6 2/7] arm64: dts: agilex: Fix fixed-clock schema warnings Matthew Gerlach
@ 2025-02-12 5:56 ` Krzysztof Kozlowski
2025-02-13 17:37 ` matthew.gerlach
0 siblings, 1 reply; 14+ messages in thread
From: Krzysztof Kozlowski @ 2025-02-12 5:56 UTC (permalink / raw)
To: Matthew Gerlach, lpieralisi, kw, manivannan.sadhasivam, robh,
bhelgaas, krzk+dt, conor+dt, dinguyen, joyce.ooi, linux-pci,
devicetree, linux-kernel
Cc: matthew.gerlach, peter.colberg
On 11/02/2025 16:17, Matthew Gerlach wrote:
> Add required clock-frequency property to fixed-clock nodes
> to fix schema check warnings.
>
> Signed-off-by: Matthew Gerlach <matthew.gerlach@linux.intel.com>
> ---
> v6:
> - New patch to series.
> ---
> arch/arm64/boot/dts/intel/socfpga_agilex.dtsi | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/intel/socfpga_agilex.dtsi b/arch/arm64/boot/dts/intel/socfpga_agilex.dtsi
> index 1235ba5a9865..42cb24cfa6da 100644
> --- a/arch/arm64/boot/dts/intel/socfpga_agilex.dtsi
> +++ b/arch/arm64/boot/dts/intel/socfpga_agilex.dtsi
> @@ -114,21 +114,25 @@ clocks {
> cb_intosc_hs_div2_clk: cb-intosc-hs-div2-clk {
> #clock-cells = <0>;
> compatible = "fixed-clock";
> + clock-frequency = <0>;
That's not a correct frequency. You silence some error by introducing
incorrect properties. That's wrong.
Don't fix the warnings just to silence them, while keeping actual errors
still in the code.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v6 3/7] arm64: dts: agilex: move bus@80000000 to socfpga_agilex.dtsi
2025-02-11 15:17 ` [PATCH v6 3/7] arm64: dts: agilex: move bus@80000000 to socfpga_agilex.dtsi Matthew Gerlach
@ 2025-02-12 5:57 ` Krzysztof Kozlowski
0 siblings, 0 replies; 14+ messages in thread
From: Krzysztof Kozlowski @ 2025-02-12 5:57 UTC (permalink / raw)
To: Matthew Gerlach, lpieralisi, kw, manivannan.sadhasivam, robh,
bhelgaas, krzk+dt, conor+dt, dinguyen, joyce.ooi, linux-pci,
devicetree, linux-kernel
Cc: matthew.gerlach, peter.colberg
On 11/02/2025 16:17, Matthew Gerlach wrote:
> The bus from HPS to the FPGA is part of the SoC. Move its
> device tree node to socfpga_agilex.dtsi to allow it to be
> referenced by any board.
>
> Signed-off-by: Matthew Gerlach <matthew.gerlach@linux.intel.com>
> ---
> v6:
> - New patch to series.
> ---
> arch/arm64/boot/dts/intel/socfpga_agilex.dtsi | 10 +++++++
> .../boot/dts/intel/socfpga_agilex_n6000.dts | 28 +++++++------------
> 2 files changed, 20 insertions(+), 18 deletions(-)
>
> diff --git a/arch/arm64/boot/dts/intel/socfpga_agilex.dtsi b/arch/arm64/boot/dts/intel/socfpga_agilex.dtsi
> index 42cb24cfa6da..26ccdf042281 100644
> --- a/arch/arm64/boot/dts/intel/socfpga_agilex.dtsi
> +++ b/arch/arm64/boot/dts/intel/socfpga_agilex.dtsi
> @@ -678,5 +678,15 @@ qspi: spi@ff8d2000 {
>
> status = "disabled";
> };
> +
> + bus80000000: bus@80000000 {
> + compatible = "simple-bus";
> + reg = <0x80000000 0x60000000>,
> + <0xf9000000 0x00100000>;
> + reg-names = "axi_h2f", "axi_h2f_lw";
> + #address-cells = <2>;
> + #size-cells = <1>;
> + ranges = <0x00000000 0x00000000 0x00000000 0x00000000>;
> + };
> };
> };
> diff --git a/arch/arm64/boot/dts/intel/socfpga_agilex_n6000.dts b/arch/arm64/boot/dts/intel/socfpga_agilex_n6000.dts
> index d22de06e9839..350c040ce9fe 100644
> --- a/arch/arm64/boot/dts/intel/socfpga_agilex_n6000.dts
> +++ b/arch/arm64/boot/dts/intel/socfpga_agilex_n6000.dts
> @@ -25,24 +25,6 @@ memory@80000000 {
> /* We expect the bootloader to fill in the reg */
> reg = <0 0x80000000 0 0>;
> };
> -
> - soc@0 {
> - bus@80000000 {
> - compatible = "simple-bus";
> - reg = <0x80000000 0x60000000>,
> - <0xf9000000 0x00100000>;
> - reg-names = "axi_h2f", "axi_h2f_lw";
> - #address-cells = <2>;
> - #size-cells = <1>;
> - ranges = <0x00000000 0x00000000 0xf9000000 0x00001000>;
> -
> - dma-controller@0 {
> - compatible = "intel,hps-copy-engine";
> - reg = <0x00000000 0x00000000 0x00001000>;
> - #dma-cells = <1>;
> - };
> - };
> - };
> };
>
> &osc1 {
> @@ -64,3 +46,13 @@ &watchdog0 {
> &fpga_mgr {
> status = "disabled";
> };
> +
> +&bus80000000 {
Keep some sort of sorting.
> + ranges = <0x00000000 0x00000000 0xf9000000 0x00001000>;
ranges is property of the SoC in such case.
> +
> + dma-controller@0 {
> + compatible = "intel,hps-copy-engine";
> + reg = <0x00000000 0x00000000 0x00001000>;
> + #dma-cells = <1>;
> + };
> +};
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v6 4/7] arm64: dts: agilex: refactor shared dts into dtsi
2025-02-11 15:17 ` [PATCH v6 4/7] arm64: dts: agilex: refactor shared dts into dtsi Matthew Gerlach
@ 2025-02-12 5:59 ` Krzysztof Kozlowski
0 siblings, 0 replies; 14+ messages in thread
From: Krzysztof Kozlowski @ 2025-02-12 5:59 UTC (permalink / raw)
To: Matthew Gerlach, lpieralisi, kw, manivannan.sadhasivam, robh,
bhelgaas, krzk+dt, conor+dt, dinguyen, joyce.ooi, linux-pci,
devicetree, linux-kernel
Cc: matthew.gerlach, peter.colberg
On 11/02/2025 16:17, Matthew Gerlach wrote:
> Move common device tree from socfpga_agilex_socdk*.dts to
> socfpga_agilex_socdk.dtsi.
>
> Signed-off-by: Matthew Gerlach <matthew.gerlach@linux.intel.com>
> ---
> diff --git a/arch/arm64/boot/dts/intel/socfpga_agilex_socdk.dtsi b/arch/arm64/boot/dts/intel/socfpga_agilex_socdk.dtsi
> new file mode 100644
> index 000000000000..e0f3ff60aa33
> --- /dev/null
> +++ b/arch/arm64/boot/dts/intel/socfpga_agilex_socdk.dtsi
> @@ -0,0 +1,65 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Copyright (C) 2019, Intel Corporation
> + */
> +
> +/ {
> + model = "SoCFPGA Agilex SoCDK";
> + compatible = "intel,socfpga-agilex-socdk", "intel,socfpga-agilex";
That's not correct. Compatible is not being shared between different
boards. Different boards have different compatible.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v6 6/7] arm64: dts: agilex: add dts enabling PCIe Root Port
2025-02-11 15:17 ` [PATCH v6 6/7] arm64: dts: agilex: add dts enabling " Matthew Gerlach
@ 2025-02-12 6:00 ` Krzysztof Kozlowski
0 siblings, 0 replies; 14+ messages in thread
From: Krzysztof Kozlowski @ 2025-02-12 6:00 UTC (permalink / raw)
To: Matthew Gerlach, lpieralisi, kw, manivannan.sadhasivam, robh,
bhelgaas, krzk+dt, conor+dt, dinguyen, joyce.ooi, linux-pci,
devicetree, linux-kernel
Cc: matthew.gerlach, peter.colberg
On 11/02/2025 16:17, Matthew Gerlach wrote:
> Add a device tree enabling PCIe Root Port support on an Agilex F-series
> Development Kit which has the P-tile variant of the PCIe IP.
>
> Signed-off-by: Matthew Gerlach <matthew.gerlach@linux.intel.com>
> ---
> v6:
> - Fix SPDX header.
...
> diff --git a/arch/arm64/boot/dts/intel/socfpga_agilex7f_socdk_pcie_root_port.dts b/arch/arm64/boot/dts/intel/socfpga_agilex7f_socdk_pcie_root_port.dts
> new file mode 100644
> index 000000000000..3588c845cf9c
> --- /dev/null
> +++ b/arch/arm64/boot/dts/intel/socfpga_agilex7f_socdk_pcie_root_port.dts
> @@ -0,0 +1,87 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Copyright (C) 2024, Intel Corporation
> + */
> +
> +#include "socfpga_agilex.dtsi"
> +#include "socfpga_agilex_socdk.dtsi"
> +#include "socfpga_agilex_pcie_root_port.dtsi"
> +
Missing compatible, missing model, missing bindings.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v6 2/7] arm64: dts: agilex: Fix fixed-clock schema warnings
2025-02-12 5:56 ` Krzysztof Kozlowski
@ 2025-02-13 17:37 ` matthew.gerlach
2025-02-13 18:03 ` Krzysztof Kozlowski
0 siblings, 1 reply; 14+ messages in thread
From: matthew.gerlach @ 2025-02-13 17:37 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: lpieralisi, kw, manivannan.sadhasivam, robh, bhelgaas, krzk+dt,
conor+dt, dinguyen, joyce.ooi, linux-pci, devicetree,
linux-kernel, matthew.gerlach, peter.colberg
On Wed, 12 Feb 2025, Krzysztof Kozlowski wrote:
> On 11/02/2025 16:17, Matthew Gerlach wrote:
>> Add required clock-frequency property to fixed-clock nodes
>> to fix schema check warnings.
>>
>> Signed-off-by: Matthew Gerlach <matthew.gerlach@linux.intel.com>
>> ---
>> v6:
>> - New patch to series.
>> ---
>> arch/arm64/boot/dts/intel/socfpga_agilex.dtsi | 4 ++++
>> 1 file changed, 4 insertions(+)
>>
>> diff --git a/arch/arm64/boot/dts/intel/socfpga_agilex.dtsi b/arch/arm64/boot/dts/intel/socfpga_agilex.dtsi
>> index 1235ba5a9865..42cb24cfa6da 100644
>> --- a/arch/arm64/boot/dts/intel/socfpga_agilex.dtsi
>> +++ b/arch/arm64/boot/dts/intel/socfpga_agilex.dtsi
>> @@ -114,21 +114,25 @@ clocks {
>> cb_intosc_hs_div2_clk: cb-intosc-hs-div2-clk {
>> #clock-cells = <0>;
>> compatible = "fixed-clock";
>> + clock-frequency = <0>;
>
> That's not a correct frequency. You silence some error by introducing
> incorrect properties. That's wrong.
A clock-frequency of 0 seems valid for a clock that is disabled or not
used on a particular board. I chose this approach because it already has
widespread usage in the kernel:
grep 'clock-frequency = <0>' arch/arm64/boot/dts/*/*.dtsi | wc -l
198
>
> Don't fix the warnings just to silence them, while keeping actual errors
> still in the code.
I actually want to fix the existing warnings, but it seems appropriate to
only address the existing warnings that are related to this patch set of
adding PCIe Root Port support to the Agilex family of chips. This patch
set requires touching the file, socfpga_agilex.dtsi; so I fixed the
warnings I thought were in this file. I believe the other warnings need to
be fixed by converting text binding descriptions to yaml or by touching
files unrelated to this patch set.
Setting the value of the status property to "disabled" also silences the
particular fixed-clock, but I didn't see any other usage by a fixed-clock.
What do suggest is the best way to handle this warning?
>
> Best regards,
> Krzysztof
>
Thanks for the feedback,
Matthew Gerlach
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v6 2/7] arm64: dts: agilex: Fix fixed-clock schema warnings
2025-02-13 17:37 ` matthew.gerlach
@ 2025-02-13 18:03 ` Krzysztof Kozlowski
0 siblings, 0 replies; 14+ messages in thread
From: Krzysztof Kozlowski @ 2025-02-13 18:03 UTC (permalink / raw)
To: matthew.gerlach
Cc: lpieralisi, kw, manivannan.sadhasivam, robh, bhelgaas, krzk+dt,
conor+dt, dinguyen, joyce.ooi, linux-pci, devicetree,
linux-kernel, matthew.gerlach, peter.colberg
On 13/02/2025 18:37, matthew.gerlach@linux.intel.com wrote:
>
>
> On Wed, 12 Feb 2025, Krzysztof Kozlowski wrote:
>
>> On 11/02/2025 16:17, Matthew Gerlach wrote:
>>> Add required clock-frequency property to fixed-clock nodes
>>> to fix schema check warnings.
>>>
>>> Signed-off-by: Matthew Gerlach <matthew.gerlach@linux.intel.com>
>>> ---
>>> v6:
>>> - New patch to series.
>>> ---
>>> arch/arm64/boot/dts/intel/socfpga_agilex.dtsi | 4 ++++
>>> 1 file changed, 4 insertions(+)
>>>
>>> diff --git a/arch/arm64/boot/dts/intel/socfpga_agilex.dtsi b/arch/arm64/boot/dts/intel/socfpga_agilex.dtsi
>>> index 1235ba5a9865..42cb24cfa6da 100644
>>> --- a/arch/arm64/boot/dts/intel/socfpga_agilex.dtsi
>>> +++ b/arch/arm64/boot/dts/intel/socfpga_agilex.dtsi
>>> @@ -114,21 +114,25 @@ clocks {
>>> cb_intosc_hs_div2_clk: cb-intosc-hs-div2-clk {
>>> #clock-cells = <0>;
>>> compatible = "fixed-clock";
>>> + clock-frequency = <0>;
>>
>> That's not a correct frequency. You silence some error by introducing
>> incorrect properties. That's wrong.
>
> A clock-frequency of 0 seems valid for a clock that is disabled or not
> used on a particular board. I chose this approach because it already has
> widespread usage in the kernel:
>
> grep 'clock-frequency = <0>' arch/arm64/boot/dts/*/*.dtsi | wc -l
> 198
If the clock is not there, it should be removed or disabled. Otherwise
what is the point of setting here clock frequency=0? To silence some
warning. Why is there warning in the first place?
>
>>
>> Don't fix the warnings just to silence them, while keeping actual errors
>> still in the code.
>
> I actually want to fix the existing warnings, but it seems appropriate to
> only address the existing warnings that are related to this patch set of
> adding PCIe Root Port support to the Agilex family of chips. This patch
> set requires touching the file, socfpga_agilex.dtsi; so I fixed the
> warnings I thought were in this file. I believe the other warnings need to
> be fixed by converting text binding descriptions to yaml or by touching
> files unrelated to this patch set.
>
> Setting the value of the status property to "disabled" also silences the
> particular fixed-clock, but I didn't see any other usage by a fixed-clock.
> What do suggest is the best way to handle this warning?
DTSI and DTS represent actual hardware, so common DTSI should not have
clocks which do not exist. Such clocks should be in DTS or some other
common DTSI file, depending on how the hardware is organized.
Instead of fixing the warning, look at the cause - what is wrong in DTSI
in this hardware description.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2025-02-13 18:03 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-11 15:17 [PATCH v6 0/7] Add PCIe Root Port support for Agilex family of chips Matthew Gerlach
2025-02-11 15:17 ` [PATCH v6 1/7] dt-bindings: PCI: altera: Add binding for Agilex Matthew Gerlach
2025-02-11 15:17 ` [PATCH v6 2/7] arm64: dts: agilex: Fix fixed-clock schema warnings Matthew Gerlach
2025-02-12 5:56 ` Krzysztof Kozlowski
2025-02-13 17:37 ` matthew.gerlach
2025-02-13 18:03 ` Krzysztof Kozlowski
2025-02-11 15:17 ` [PATCH v6 3/7] arm64: dts: agilex: move bus@80000000 to socfpga_agilex.dtsi Matthew Gerlach
2025-02-12 5:57 ` Krzysztof Kozlowski
2025-02-11 15:17 ` [PATCH v6 4/7] arm64: dts: agilex: refactor shared dts into dtsi Matthew Gerlach
2025-02-12 5:59 ` Krzysztof Kozlowski
2025-02-11 15:17 ` [PATCH v6 5/7] arm64: dts: agilex: add dtsi for PCIe Root Port Matthew Gerlach
2025-02-11 15:17 ` [PATCH v6 6/7] arm64: dts: agilex: add dts enabling " Matthew Gerlach
2025-02-12 6:00 ` Krzysztof Kozlowski
2025-02-11 15:17 ` [PATCH v6 7/7] PCI: altera: Add Agilex support Matthew Gerlach
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).