Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
326fc70
Revert "PCI: brcmstb: don't use ASPM state defines for register bits"
popcornmix Mar 12, 2025
4286827
Revert "PCI: brcmstb: set link speed before deasserting fundamental r…
popcornmix Mar 12, 2025
ff83139
Revert "PCI: brcmstb: Add BCM2712 support"
popcornmix Mar 12, 2025
a515fa6
Revert "Revert "PCI: brcmstb: Configure HW CLKREQ# mode appropriate f…
popcornmix Mar 12, 2025
023ee64
PCI: brcmstb: Reuse config structure
Jan 20, 2025
bb55b8c
PCI: brcmstb: Expand inbound window size up to 64GB
Feb 24, 2025
1333792
PCI: brcmstb: Add bcm2712 support
Oct 25, 2024
c7b0b29
PCI: brcmstb: Adjust PHY PLL setup to use a 54MHz input refclk
Jan 20, 2025
dbc19f7
PCI: brcmstb: Adding a softdep to MIP MSI-X driver
Feb 24, 2025
8a3ee20
PCI: brcmstb: Fix for missing of_node_put
Jan 20, 2025
2226a3a
PCI: brcmstb: Set gen limitation before link, not after
jamesequinlan Feb 14, 2025
3150167
PCI: brcmstb: Write to internal register to change link cap
jamesequinlan Feb 14, 2025
76d5ea6
PCI: brcmstb: Do not assume that reg field starts at LSB
jamesequinlan Feb 14, 2025
b5a0bbb
PCI: brcmstb: Fix error path upon call of regulator_bulk_get()
jamesequinlan Feb 14, 2025
9d33e07
PCI: brcmstb: Fix potential premature regulator disabling
jamesequinlan Feb 14, 2025
551f47d
PCI: brcmstb: Use same constant table for config space access
jamesequinlan Feb 14, 2025
90316ce
PCI: brcmstb: Make two changes in MDIO register fields
jamesequinlan Feb 14, 2025
170ebed
PCI: brcmstb: Clarify conversion of irq_domain_set_info() param
jamesequinlan Feb 14, 2025
ee41402
PCI: brcmstb: set BCM7712/2712-specific AXI bridge handling behaviours
P33M Feb 10, 2025
583f142
PCI: brcmstb: don't use ASPM state defines for register bits
P33M Jan 7, 2025
501214e
PCI: brcmstb: Enable CRS software visibility after linkup
P33M Feb 12, 2025
a0a2950
PCI: brcmstb: add NO_SSC quirk for BCM2712
P33M Mar 3, 2025
89e7201
PCI: brcmstb: add support for BCM2712 priority forwarding
P33M Feb 11, 2025
4a5ee62
PCI: pcie-brcmstb: optionally extend Tperst_clk time
P33M Feb 13, 2025
b20d82a
dt-bindings: PCI: brcmstb: Update bindings for PCIe on BCM2712
Feb 24, 2025
1e7c90a
dt-bindings: pci: pcie-brcmstb: add BCM2712-specific properties
P33M Feb 11, 2025
9f8aa92
dt-bindings: pci: pcie-brcmstb: add optional brcm,tperst-clk-ms property
P33M Feb 13, 2025
f2630da
DT: bcm2712: swap PCIe QoS properties to the new array type
P33M Mar 5, 2025
b487ba9
arm64: dts: broadcom: bcm2712-rpi-5-b: Enable PCIe DT nodes
Jan 20, 2025
f0b3baf
arm64: dts: Clean up the downstream patches
pelwell Feb 5, 2025
72b74f8
arm64: dts: Drop downstream PCIe nodes that are about to be superceded
6by9 Feb 6, 2025
bc2c802
arm64: dts: broadcom: bcm2712: Add PCIe DT nodes
Jan 20, 2025
5897469
irqchip: Add Broadcom bcm2712 MSI-X interrupt controller
Jan 20, 2025
fc75df4
dt-bindings: interrupt-controller: Add bcm2712 MSI-X DT bindings
Oct 14, 2024
018daa6
DT: bcm2711/bcm2712: use upstream property for controlling pcie clkreq
P33M Mar 17, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/interrupt-controller/brcm,bcm2712-msix.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Broadcom bcm2712 MSI-X Interrupt Peripheral support

maintainers:
- Stanimir Varbanov <[email protected]>

description:
This interrupt controller is used to provide interrupt vectors to the
generic interrupt controller (GIC) on bcm2712. It will be used as
external MSI-X controller for PCIe root complex.

allOf:
- $ref: /schemas/interrupt-controller/msi-controller.yaml#

properties:
compatible:
const: brcm,bcm2712-mip

reg:
items:
- description: Base register address
- description: PCIe message address

"#msi-cells":
const: 0

brcm,msi-offset:
$ref: /schemas/types.yaml#/definitions/uint32
description: Shift the allocated MSI's.

unevaluatedProperties: false

required:
- compatible
- reg
- msi-controller
- msi-ranges

examples:
- |
#include <dt-bindings/interrupt-controller/arm-gic.h>

axi {
#address-cells = <2>;
#size-cells = <2>;

msi-controller@1000130000 {
compatible = "brcm,bcm2712-mip";
reg = <0x10 0x00130000 0x00 0xc0>,
<0xff 0xfffff000 0x00 0x1000>;
msi-controller;
#msi-cells = <0>;
msi-ranges = <&gicv2 GIC_SPI 128 IRQ_TYPE_EDGE_RISING 64>;
};
};
40 changes: 39 additions & 1 deletion Documentation/devicetree/bindings/pci/brcm,stb-pcie.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ properties:
items:
- enum:
- brcm,bcm2711-pcie # The Raspberry Pi 4
- brcm,bcm2712-pcie # Raspberry Pi 5
- brcm,bcm4908-pcie
- brcm,bcm7211-pcie # Broadcom STB version of RPi4
- brcm,bcm7216-pcie # Broadcom 7216 Arm
Expand Down Expand Up @@ -83,6 +84,14 @@ properties:
$ref: /schemas/types.yaml#/definitions/string
enum: [ safe, no-l1ss, default ]

brcm,fifo-qos-map:
description: Array of u8 elements which assigns every per-TC FIFOs
an AXI priority based on fullness quartile (backpressure signalling).
Mutually exclusive with vdm-qos-map.
$ref: /schemas/types.yaml#/definitions/uint8-array
minItems: 4
maxItems: 4

brcm,scb-sizes:
description: u64 giving the 64bit PCIe memory
viewport size of a memory controller. There may be up to
Expand All @@ -96,13 +105,31 @@ properties:
minItems: 1
maxItems: 3

brcm,tperst-clk-ms:
description: u32 giving the number of milliseconds to extend
the time between internal release of fundamental reset and
the deassertion of the external PERST# pin. This has the
effect of increasing the Tperst_clk phase of link init.

brcm,vdm-qos-map:
description: Array of u8 elements which assigns each per-TC FIFO
a base AXI priority with automatic elevation depending on
Vendor Messages from the EP - specifically, RP1.
Mutually exclusive with fifo-qos-map.
$ref: /schemas/types.yaml#/definitions/uint8-array
minItems: 8
maxItems: 8

resets:
minItems: 1
maxItems: 3

reset-names:
minItems: 1
maxItems: 3
items:
- enum: [perst, rescal]
- const: bridge
- const: swinit

brcm,tperst-clk-ms:
category: optional
Expand Down Expand Up @@ -183,6 +210,17 @@ allOf:
- resets
- reset-names

- if:
not:
properties:
compatible:
contains:
const: brcm,bcm2712-pcie
then:
properties:
brcm,fifo-qos-map: false
brcm,vdm-qos-map: false

unevaluatedProperties: false

examples:
Expand Down
4 changes: 0 additions & 4 deletions arch/arm/boot/dts/broadcom/bcm2711-rpi-cm4.dts
Original file line number Diff line number Diff line change
Expand Up @@ -422,10 +422,6 @@
// =============================================
// Board specific stuff here

&pcie0 {
brcm,enable-l1ss;
};

&sdhost {
status = "disabled";
};
Expand Down
4 changes: 3 additions & 1 deletion arch/arm/boot/dts/overlays/README
Original file line number Diff line number Diff line change
Expand Up @@ -3703,7 +3703,9 @@ Params: <None>
Name: pciex1-compat-pi5
Info: Compatibility features for pciex1 on Pi 5.
Load: dtoverlay=pciex1-compat-pi5,<param>=<val>
Params: l1ss Enable ASPM L1 sub-state support
Params: l1ss Enable RC ASPM L1 sub-state support. Requires
that the CLKREQ# pin is connected to the
endpoint.
no-l0s Disable ASPM L0s
no-mip Revert to the MSI target in the RC, instead of
the MSI-MIP peripheral. Use if a) more than 8
Expand Down
2 changes: 1 addition & 1 deletion arch/arm/boot/dts/overlays/pciex1-compat-pi5-overlay.dts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
fragment@0 {
target = <&pciex1>;
__dormant__ {
brcm,enable-l1ss;
brcm,clkreq-mode = "default";
};
};

Expand Down
199 changes: 9 additions & 190 deletions arch/arm64/boot/dts/broadcom/bcm2712-ds.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -350,190 +350,6 @@
brcm,dma-channel-mask = <0x0fc0>;
};

// Single-lane Gen3 PCIe
// Outbound window at 0x14_000000-0x17_ffffff
pcie0: pcie@100000 {
compatible = "brcm,bcm2712-pcie";
reg = <0x10 0x00100000 0x0 0x9310>;
device_type = "pci";
max-link-speed = <2>;
#address-cells = <3>;
#interrupt-cells = <1>;
#size-cells = <2>;
/*
* Unused interrupts:
* 208: AER
* 215: NMI
* 216: PME
*/
interrupt-parent = <&gicv2>;
interrupts = <GIC_SPI 213 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 214 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "pcie", "msi";
interrupt-map-mask = <0x0 0x0 0x0 0x7>;
interrupt-map = <0 0 0 1 &gicv2 GIC_SPI 209
IRQ_TYPE_LEVEL_HIGH>,
<0 0 0 2 &gicv2 GIC_SPI 210
IRQ_TYPE_LEVEL_HIGH>,
<0 0 0 3 &gicv2 GIC_SPI 211
IRQ_TYPE_LEVEL_HIGH>,
<0 0 0 4 &gicv2 GIC_SPI 212
IRQ_TYPE_LEVEL_HIGH>;
resets = <&bcm_reset 5>, <&bcm_reset 42>, <&pcie_rescal>;
reset-names = "swinit", "bridge", "rescal";
msi-controller;
msi-parent = <&pcie0>;

ranges = <0x02000000 0x00 0x00000000
0x17 0x00000000
0x0 0xfffffffc>,
<0x43000000 0x04 0x00000000
0x14 0x00000000
0x3 0x00000000>;

dma-ranges = <0x43000000 0x10 0x00000000
0x00 0x00000000
0x10 0x00000000>;

status = "disabled";
};

// Single-lane Gen3 PCIe
// Outbound window at 0x18_000000-0x1b_ffffff
pcie1: pcie@110000 {
compatible = "brcm,bcm2712-pcie";
reg = <0x10 0x00110000 0x0 0x9310>;
device_type = "pci";
max-link-speed = <2>;
#address-cells = <3>;
#interrupt-cells = <1>;
#size-cells = <2>;
/*
* Unused interrupts:
* 218: AER
* 225: NMI
* 226: PME
*/
interrupt-parent = <&gicv2>;
interrupts = <GIC_SPI 223 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 224 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "pcie", "msi";
interrupt-map-mask = <0x0 0x0 0x0 0x7>;
interrupt-map = <0 0 0 1 &gicv2 GIC_SPI 219
IRQ_TYPE_LEVEL_HIGH>,
<0 0 0 2 &gicv2 GIC_SPI 220
IRQ_TYPE_LEVEL_HIGH>,
<0 0 0 3 &gicv2 GIC_SPI 221
IRQ_TYPE_LEVEL_HIGH>,
<0 0 0 4 &gicv2 GIC_SPI 222
IRQ_TYPE_LEVEL_HIGH>;
resets = <&bcm_reset 7>, <&bcm_reset 43>, <&pcie_rescal>;
reset-names = "swinit", "bridge", "rescal";
msi-controller;
msi-parent = <&mip1>;

// 2GB, 32-bit, non-prefetchable at PCIe 00_80000000
ranges = <0x02000000 0x00 0x80000000
0x1b 0x80000000
0x00 0x80000000>,
// 14GB, 64-bit, prefetchable at PCIe 04_00000000
<0x43000000 0x04 0x00000000
0x18 0x00000000
0x03 0x80000000>;

dma-ranges = <0x03000000 0x10 0x00000000
0x00 0x00000000
0x10 0x00000000>;

status = "disabled";
};

pcie_rescal: reset-controller@119500 {
compatible = "brcm,bcm7216-pcie-sata-rescal";
reg = <0x10 0x00119500 0x0 0x10>;
#reset-cells = <0>;
};

// Quad-lane Gen3 PCIe
// Outbound window at 0x1c_000000-0x1f_ffffff
pcie2: pcie@120000 {
compatible = "brcm,bcm2712-pcie";
reg = <0x10 0x00120000 0x0 0x9310>;
device_type = "pci";
max-link-speed = <2>;
#address-cells = <3>;
#interrupt-cells = <1>;
#size-cells = <2>;
/*
* Unused interrupts:
* 228: AER
* 235: NMI
* 236: PME
*/
interrupt-parent = <&gicv2>;
interrupts = <GIC_SPI 233 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 234 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "pcie", "msi";
interrupt-map-mask = <0x0 0x0 0x0 0x7>;
interrupt-map = <0 0 0 1 &gicv2 GIC_SPI 229
IRQ_TYPE_LEVEL_HIGH>,
<0 0 0 2 &gicv2 GIC_SPI 230
IRQ_TYPE_LEVEL_HIGH>,
<0 0 0 3 &gicv2 GIC_SPI 231
IRQ_TYPE_LEVEL_HIGH>,
<0 0 0 4 &gicv2 GIC_SPI 232
IRQ_TYPE_LEVEL_HIGH>;
resets = <&bcm_reset 32>, <&bcm_reset 44>, <&pcie_rescal>;
reset-names = "swinit", "bridge", "rescal";
msi-controller;
msi-parent = <&mip0>;

// ~4GB, 32-bit, not-prefetchable at PCIe 00_00000000
ranges = <0x02000000 0x00 0x00000000
0x1f 0x00000000
0x0 0xfffffffc>,
// 12GB, 64-bit, prefetchable at PCIe 04_00000000
<0x43000000 0x04 0x00000000
0x1c 0x00000000
0x03 0x00000000>;

// 64GB system RAM space at PCIe 10_00000000
dma-ranges = <0x02000000 0x00 0x00000000
0x1f 0x00000000
0x00 0x00400000>,
<0x43000000 0x10 0x00000000
0x00 0x00000000
0x10 0x00000000>;

status = "disabled";
};

mip0: msi-controller@130000 {
compatible = "brcm,bcm2712-mip-intc";
reg = <0x10 0x00130000 0x0 0xc0>;
msi-controller;
interrupt-controller;
#interrupt-cells = <2>;
brcm,msi-base-spi = <128>;
brcm,msi-num-spis = <64>;
brcm,msi-offset = <0>;
brcm,msi-pci-addr = <0xff 0xfffff000>;
};

mip1: msi-controller@131000 {
compatible = "brcm,bcm2712-mip-intc";
reg = <0x10 0x00131000 0x0 0xc0>;
msi-controller;
interrupt-controller;
#interrupt-cells = <2>;
brcm,msi-base-spi = <247>;
/* Actually 20 total, but the others are
* both sparse and non-consecutive */
brcm,msi-num-spis = <8>;
brcm,msi-offset = <8>;
brcm,msi-pci-addr = <0xff 0xffffe000>;
};

syscon_piarbctl: syscon@400018 {
compatible = "brcm,syscon-piarbctl", "syscon", "simple-mfd";
reg = <0x10 0x00400018 0x0 0x18>;
Expand Down Expand Up @@ -590,12 +406,6 @@
status = "disabled";
};

bcm_reset: reset-controller@1504318 {
compatible = "brcm,brcmstb-reset";
reg = <0x10 0x01504318 0x0 0x30>;
#reset-cells = <1>;
};

v3d: v3d@2000000 {
compatible = "brcm,2712-v3d";
reg = <0x10 0x02000000 0x0 0x4000>,
Expand Down Expand Up @@ -674,3 +484,12 @@
&vc4 {
status = "disabled";
};

&pcie1 {
brcm,fifo-qos-map = /bits/ 8 <3 3 3 3>;
status = "disabled";
};

&pcie2 {
brcm,vdm-qos-map = /bits/ 8 <8 8 8 9 10 10 11 11>;
};
Loading
Loading