Merge branch 'pci/controller/aspeed'

- Add ASPEED Root Complex DT binding and driver (Jacky Chou)

* pci/controller/aspeed:
  MAINTAINERS: Add ASPEED PCIe RC driver
  PCI: aspeed: Add ASPEED PCIe RC driver
  PCI: Add FMT, TYPE and CPL status definition for TLP header
  dt-bindings: PCI: Add ASPEED PCIe RC support
This commit is contained in:
Bjorn Helgaas 2026-02-06 17:09:33 -06:00
commit a8a811cb3c
6 changed files with 1333 additions and 0 deletions

View file

@ -0,0 +1,182 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/pci/aspeed,ast2600-pcie.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: ASPEED PCIe Root Complex Controller
maintainers:
- Jacky Chou <jacky_chou@aspeedtech.com>
description:
The ASPEED PCIe Root Complex controller provides PCI Express Root Complex
functionality for ASPEED SoCs, such as the AST2600 and AST2700.
This controller enables connectivity to PCIe endpoint devices, supporting
memory and I/O windows, MSI and INTx interrupts, and integration with
the SoC's clock, reset, and pinctrl subsystems. On AST2600, the PCIe Root
Port device number is always 8.
properties:
compatible:
enum:
- aspeed,ast2600-pcie
- aspeed,ast2700-pcie
reg:
maxItems: 1
ranges:
minItems: 2
maxItems: 2
interrupts:
maxItems: 1
description: INTx and MSI interrupt
resets:
items:
- description: PCIe controller reset
reset-names:
items:
- const: h2x
aspeed,ahbc:
$ref: /schemas/types.yaml#/definitions/phandle
description:
Phandle to the ASPEED AHB Controller (AHBC) syscon node.
This reference is used by the PCIe controller to access
system-level configuration registers related to the AHB bus.
To enable AHB access for the PCIe controller.
aspeed,pciecfg:
$ref: /schemas/types.yaml#/definitions/phandle
description:
Phandle to the ASPEED PCIe configuration syscon node.
This reference allows the PCIe controller to access
SoC-specific PCIe configuration registers. There are the others
functions such PCIe RC and PCIe EP will use this common register
to configure the SoC interfaces.
interrupt-controller: true
patternProperties:
"^pcie@[0-9a-f]+,0$":
type: object
$ref: /schemas/pci/pci-pci-bridge.yaml#
properties:
reg:
maxItems: 1
resets:
items:
- description: PERST# signal
reset-names:
items:
- const: perst
clocks:
maxItems: 1
phys:
maxItems: 1
required:
- resets
- reset-names
- clocks
- phys
- ranges
unevaluatedProperties: false
allOf:
- $ref: /schemas/pci/pci-host-bridge.yaml#
- $ref: /schemas/interrupt-controller/msi-controller.yaml#
- if:
properties:
compatible:
contains:
const: aspeed,ast2600-pcie
then:
required:
- aspeed,ahbc
else:
properties:
aspeed,ahbc: false
- if:
properties:
compatible:
contains:
const: aspeed,ast2700-pcie
then:
required:
- aspeed,pciecfg
else:
properties:
aspeed,pciecfg: false
required:
- reg
- interrupts
- bus-range
- ranges
- resets
- reset-names
- msi-controller
- interrupt-controller
- interrupt-map-mask
- interrupt-map
unevaluatedProperties: false
examples:
- |
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/clock/ast2600-clock.h>
pcie0: pcie@1e770000 {
compatible = "aspeed,ast2600-pcie";
device_type = "pci";
reg = <0x1e770000 0x100>;
#address-cells = <3>;
#size-cells = <2>;
interrupts = <GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>;
bus-range = <0x00 0xff>;
ranges = <0x01000000 0x0 0x00018000 0x00018000 0x0 0x00008000
0x02000000 0x0 0x60000000 0x60000000 0x0 0x20000000>;
resets = <&syscon ASPEED_RESET_H2X>;
reset-names = "h2x";
#interrupt-cells = <1>;
msi-controller;
aspeed,ahbc = <&ahbc>;
interrupt-controller;
interrupt-map-mask = <0 0 0 7>;
interrupt-map = <0 0 0 1 &pcie0 0>,
<0 0 0 2 &pcie0 1>,
<0 0 0 3 &pcie0 2>,
<0 0 0 4 &pcie0 3>;
pcie@8,0 {
compatible = "pciclass,0604";
reg = <0x00004000 0 0 0 0>;
#address-cells = <3>;
#size-cells = <2>;
device_type = "pci";
resets = <&syscon ASPEED_RESET_PCIE_RC_O>;
reset-names = "perst";
clocks = <&syscon ASPEED_CLK_GATE_BCLK>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pcierc1_default>;
phys = <&pcie_phy1>;
ranges;
};
};

View file

@ -3902,6 +3902,14 @@ S: Maintained
F: Documentation/devicetree/bindings/media/aspeed,video-engine.yaml
F: drivers/media/platform/aspeed/
ASPEED PCIE CONTROLLER DRIVER
M: Jacky Chou <jacky_chou@aspeedtech.com>
L: linux-aspeed@lists.ozlabs.org (moderated for non-subscribers)
L: linux-pci@vger.kernel.org
S: Maintained
F: Documentation/devicetree/bindings/pci/aspeed,ast2600-pcie.yaml
F: drivers/pci/controller/pcie-aspeed.c
ASUS EC HARDWARE MONITOR DRIVER
M: Eugene Shalygin <eugene.shalygin@gmail.com>
L: linux-hwmon@vger.kernel.org

View file

@ -58,6 +58,22 @@ config PCI_VERSATILE
bool "ARM Versatile PB PCI controller"
depends on ARCH_VERSATILE || COMPILE_TEST
config PCIE_ASPEED
bool "ASPEED PCIe controller"
depends on ARCH_ASPEED || COMPILE_TEST
depends on OF
depends on PCI_MSI
select IRQ_MSI_LIB
help
Enable this option to support the PCIe controller found on ASPEED
SoCs.
This driver provides initialization and management for PCIe
Root Complex functionality, including INTx and MSI support.
Select Y if your platform uses an ASPEED SoC and requires PCIe
connectivity.
config PCIE_BRCMSTB
tristate "Broadcom Brcmstb PCIe controller"
depends on ARCH_BRCMSTB || ARCH_BCM2835 || ARCH_BCMBCA || \

View file

@ -40,6 +40,7 @@ obj-$(CONFIG_PCI_LOONGSON) += pci-loongson.o
obj-$(CONFIG_PCIE_HISI_ERR) += pcie-hisi-error.o
obj-$(CONFIG_PCIE_APPLE) += pcie-apple.o
obj-$(CONFIG_PCIE_MT7621) += pcie-mt7621.o
obj-$(CONFIG_PCIE_ASPEED) += pcie-aspeed.o
# pcie-hisi.o quirks are needed even without CONFIG_PCIE_DW
obj-y += dwc/

File diff suppressed because it is too large Load diff

View file

@ -64,6 +64,18 @@ struct pcie_tlp_log;
#define PCIE_LINK_WAIT_MAX_RETRIES 10
#define PCIE_LINK_WAIT_SLEEP_MS 90
/* Format of TLP; PCIe r7.0, sec 2.2.1 */
#define PCIE_TLP_FMT_3DW_NO_DATA 0x00 /* 3DW header, no data */
#define PCIE_TLP_FMT_4DW_NO_DATA 0x01 /* 4DW header, no data */
#define PCIE_TLP_FMT_3DW_DATA 0x02 /* 3DW header, with data */
#define PCIE_TLP_FMT_4DW_DATA 0x03 /* 4DW header, with data */
/* Type of TLP; PCIe r7.0, sec 2.2.1 */
#define PCIE_TLP_TYPE_CFG0_RD 0x04 /* Config Type 0 Read Request */
#define PCIE_TLP_TYPE_CFG0_WR 0x04 /* Config Type 0 Write Request */
#define PCIE_TLP_TYPE_CFG1_RD 0x05 /* Config Type 1 Read Request */
#define PCIE_TLP_TYPE_CFG1_WR 0x05 /* Config Type 1 Write Request */
/* Message Routing (r[2:0]); PCIe r6.0, sec 2.2.8 */
#define PCIE_MSG_TYPE_R_RC 0
#define PCIE_MSG_TYPE_R_ADDR 1
@ -85,6 +97,9 @@ struct pcie_tlp_log;
#define PCIE_MSG_CODE_DEASSERT_INTC 0x26
#define PCIE_MSG_CODE_DEASSERT_INTD 0x27
/* Cpl. status of Complete; PCIe r7.0, sec 2.2.9.1 */
#define PCIE_CPL_STS_SUCCESS 0x00 /* Successful Completion */
#define PCI_BUS_BRIDGE_IO_WINDOW 0
#define PCI_BUS_BRIDGE_MEM_WINDOW 1
#define PCI_BUS_BRIDGE_PREF_MEM_WINDOW 2