From 7f04d675170d255580edf77d4ff7c0adebb57609 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Date: Tue, 23 Mar 2021 20:12:22 +0100 Subject: bmips: add experimental PCI/PCIe support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These PCI drivers are a bit hacky and definitely not suitable for upstreaming, but hopefully we can use them as a base for developing proper upstream PCI drivers. Signed-off-by: Álvaro Fernández Rojas --- .../linux/bmips/dts/bcm6318-comtrend-ar-5315u.dts | 4 +++ target/linux/bmips/dts/bcm6318.dtsi | 35 +++++++++++++++++++ target/linux/bmips/dts/bcm63268.dtsi | 39 ++++++++++++++++++++++ .../linux/bmips/dts/bcm6328-comtrend-ar-5387un.dts | 4 +++ target/linux/bmips/dts/bcm6328.dtsi | 39 ++++++++++++++++++++++ target/linux/bmips/dts/bcm6358-huawei-hg556a-b.dts | 4 +++ target/linux/bmips/dts/bcm6358.dtsi | 25 ++++++++++++++ .../bmips/dts/bcm6362-netgear-dgnd3700-v2.dts | 4 +++ target/linux/bmips/dts/bcm6362.dtsi | 37 ++++++++++++++++++++ .../linux/bmips/dts/bcm6368-comtrend-vr-3025u.dts | 4 +++ target/linux/bmips/dts/bcm6368.dtsi | 28 ++++++++++++++++ 11 files changed, 223 insertions(+) (limited to 'target/linux/bmips/dts') diff --git a/target/linux/bmips/dts/bcm6318-comtrend-ar-5315u.dts b/target/linux/bmips/dts/bcm6318-comtrend-ar-5315u.dts index a5ae435a3a..5b44b05e70 100644 --- a/target/linux/bmips/dts/bcm6318-comtrend-ar-5315u.dts +++ b/target/linux/bmips/dts/bcm6318-comtrend-ar-5315u.dts @@ -164,6 +164,10 @@ status = "okay"; }; +&pcie { + status = "okay"; +}; + &pinctrl { pinctrl_leds: leds { function = "led"; diff --git a/target/linux/bmips/dts/bcm6318.dtsi b/target/linux/bmips/dts/bcm6318.dtsi index e7dc38e937..9067db952e 100644 --- a/target/linux/bmips/dts/bcm6318.dtsi +++ b/target/linux/bmips/dts/bcm6318.dtsi @@ -347,6 +347,41 @@ status = "disabled"; }; + pcie: pcie@10010000 { + compatible = "brcm,bcm6318-pcie"; + reg = <0x10010000 0x10000>; + #address-cells = <3>; + #size-cells = <2>; + + device_type = "pci"; + bus-range = <0x00 0x01>; + ranges = <0x2000000 0 0x10200000 0x10200000 0 0x100000>; + linux,pci-probe-only = <1>; + + interrupt-parent = <&periph_intc>; + interrupts = ; + + clocks = <&periph_clk BCM6318_CLK_PCIE>, + <&periph_clk BCM6318_CLK_PCIE25>, + <&ubus_clk BCM6318_UCLK_PCIE>; + clock-names = "pcie", + "pcie25", + "pcie-ubus"; + + resets = <&periph_rst BCM6318_RST_PCIE>, + <&periph_rst BCM6318_RST_PCIE_EXT>, + <&periph_rst BCM6318_RST_PCIE_CORE>, + <&periph_rst BCM6318_RST_PCIE_HARD>; + reset-names = "pcie", + "pcie-ext", + "pcie-core", + "pcie-hard"; + + power-domains = <&periph_pwr BCM6318_POWER_DOMAIN_PCIE>; + + status = "disabled"; + }; + switch0: switch@10080000 { #address-cells = <1>; #size-cells = <0>; diff --git a/target/linux/bmips/dts/bcm63268.dtsi b/target/linux/bmips/dts/bcm63268.dtsi index 284d2c8ef0..32cbbd7200 100644 --- a/target/linux/bmips/dts/bcm63268.dtsi +++ b/target/linux/bmips/dts/bcm63268.dtsi @@ -371,6 +371,12 @@ status = "disabled"; }; + serdes_cntl: syscon@10001804 { + compatible = "syscon"; + reg = <0x10001804 0x4>; + native-endian; + }; + periph_pwr: power-controller@1000184c { compatible = "brcm,bcm63268-power-controller"; reg = <0x1000184c 0x4>; @@ -468,6 +474,39 @@ status = "disabled"; }; + pcie: pcie@106e0000 { + compatible = "brcm,bcm6328-pcie"; + reg = <0x106e0000 0x10000>; + #address-cells = <3>; + #size-cells = <2>; + + device_type = "pci"; + bus-range = <0x00 0x01>; + ranges = <0x2000000 0 0x11000000 0x11000000 0 0xf00000>; + linux,pci-probe-only = <1>; + + interrupt-parent = <&periph_intc>; + interrupts = ; + + clocks = <&periph_clk BCM63268_CLK_PCIE>; + clock-names = "pcie"; + + resets = <&periph_rst BCM63268_RST_PCIE>, + <&periph_rst BCM63268_RST_PCIE_EXT>, + <&periph_rst BCM63268_RST_PCIE_CORE>, + <&periph_rst BCM63268_RST_PCIE_HARD>; + reset-names = "pcie", + "pcie-ext", + "pcie-core", + "pcie-hard"; + + power-domains = <&periph_pwr BCM63268_POWER_DOMAIN_PCIE>; + + brcm,serdes = <&serdes_cntl>; + + status = "disabled"; + }; + switch0: switch@10700000 { #address-cells = <1>; #size-cells = <0>; diff --git a/target/linux/bmips/dts/bcm6328-comtrend-ar-5387un.dts b/target/linux/bmips/dts/bcm6328-comtrend-ar-5387un.dts index 9ebd6c5c4d..261162454f 100644 --- a/target/linux/bmips/dts/bcm6328-comtrend-ar-5387un.dts +++ b/target/linux/bmips/dts/bcm6328-comtrend-ar-5387un.dts @@ -111,6 +111,10 @@ status = "okay"; }; +&pcie { + status = "okay"; +}; + &pinctrl { pinctrl_leds: leds { function = "led"; diff --git a/target/linux/bmips/dts/bcm6328.dtsi b/target/linux/bmips/dts/bcm6328.dtsi index 64fd04142c..76d7a257d4 100644 --- a/target/linux/bmips/dts/bcm6328.dtsi +++ b/target/linux/bmips/dts/bcm6328.dtsi @@ -317,6 +317,12 @@ status = "disabled"; }; + serdes_cntl: syscon@10001800 { + compatible = "syscon"; + reg = <0x10001800 0x4>; + native-endian; + }; + periph_pwr: power-controller@10001848 { compatible = "brcm,bcm6328-power-controller"; reg = <0x10001848 0x4>; @@ -462,5 +468,38 @@ reg = <1>; }; }; + + pcie: pcie@10e40000 { + compatible = "brcm,bcm6328-pcie"; + reg = <0x10e40000 0x10000>; + #address-cells = <3>; + #size-cells = <2>; + + device_type = "pci"; + bus-range = <0x00 0x01>; + ranges = <0x2000000 0 0x10f00000 0x10f00000 0 0x100000>; + linux,pci-probe-only = <1>; + + interrupt-parent = <&periph_intc>; + interrupts = ; + + clocks = <&periph_clk BCM6328_CLK_PCIE>; + clock-names = "pcie"; + + resets = <&periph_rst BCM6328_RST_PCIE>, + <&periph_rst BCM6328_RST_PCIE_EXT>, + <&periph_rst BCM6328_RST_PCIE_CORE>, + <&periph_rst BCM6328_RST_PCIE_HARD>; + reset-names = "pcie", + "pcie-ext", + "pcie-core", + "pcie-hard"; + + power-domains = <&periph_pwr BCM6328_POWER_DOMAIN_PCIE>; + + brcm,serdes = <&serdes_cntl>; + + status = "disabled"; + }; }; }; diff --git a/target/linux/bmips/dts/bcm6358-huawei-hg556a-b.dts b/target/linux/bmips/dts/bcm6358-huawei-hg556a-b.dts index ba776caf78..0f21ca4a6b 100644 --- a/target/linux/bmips/dts/bcm6358-huawei-hg556a-b.dts +++ b/target/linux/bmips/dts/bcm6358-huawei-hg556a-b.dts @@ -129,6 +129,10 @@ status = "okay"; }; +&pci { + status = "okay"; +}; + &pflash { status = "okay"; diff --git a/target/linux/bmips/dts/bcm6358.dtsi b/target/linux/bmips/dts/bcm6358.dtsi index c06001c62d..fee9850059 100644 --- a/target/linux/bmips/dts/bcm6358.dtsi +++ b/target/linux/bmips/dts/bcm6358.dtsi @@ -280,6 +280,31 @@ status = "disabled"; }; + pci: pci@fffe1000 { + compatible = "brcm,bcm6348-pci"; + reg = <0xfffe1000 0x200>, + <0x08000000 0x10000>; + reg-names = "pci", + "pci-io"; + #address-cells = <3>; + #size-cells = <2>; + + device_type = "pci"; + bus-range = <0x00 0x01>; + ranges = <0x2000000 0 0x30000000 0x30000000 0 0x8000000>; + linux,pci-probe-only = <1>; + + interrupt-parent = <&periph_intc>; + interrupts = ; + + resets = <&periph_rst BCM6358_RST_MPI>; + reset-names = "pci"; + + brcm,remap; + + status = "disabled"; + }; + ehci: usb@fffe1300 { compatible = "brcm,bcm6358-ehci", "generic-ehci"; reg = <0xfffe1300 0x100>; diff --git a/target/linux/bmips/dts/bcm6362-netgear-dgnd3700-v2.dts b/target/linux/bmips/dts/bcm6362-netgear-dgnd3700-v2.dts index 0d88169184..3ad37fed71 100644 --- a/target/linux/bmips/dts/bcm6362-netgear-dgnd3700-v2.dts +++ b/target/linux/bmips/dts/bcm6362-netgear-dgnd3700-v2.dts @@ -209,6 +209,10 @@ status = "okay"; }; +&pcie { + status = "okay"; +}; + &pinctrl { pinctrl_leds: leds { function = "led"; diff --git a/target/linux/bmips/dts/bcm6362.dtsi b/target/linux/bmips/dts/bcm6362.dtsi index 9a3d9c1f66..1ae1522287 100644 --- a/target/linux/bmips/dts/bcm6362.dtsi +++ b/target/linux/bmips/dts/bcm6362.dtsi @@ -406,6 +406,12 @@ status = "disabled"; }; + serdes_cntl: syscon@10001804 { + compatible = "syscon"; + reg = <0x10001804 0x4>; + native-endian; + }; + periph_pwr: power-controller@10001848 { compatible = "brcm,bcm6362-power-controller"; reg = <0x10001848 0x4>; @@ -559,5 +565,36 @@ reg = <1>; }; }; + + pcie: pcie@10e40000 { + compatible = "brcm,bcm6328-pcie"; + reg = <0x10e40000 0x10000>; + #address-cells = <3>; + #size-cells = <2>; + + device_type = "pci"; + bus-range = <0x00 0x01>; + ranges = <0x2000000 0 0x10f00000 0x10f00000 0 0x100000>; + linux,pci-probe-only = <1>; + + interrupt-parent = <&periph_intc>; + interrupts = ; + + clocks = <&periph_clk BCM6362_CLK_PCIE>; + clock-names = "pcie"; + + resets = <&periph_rst BCM6362_RST_PCIE>, + <&periph_rst BCM6362_RST_PCIE_EXT>, + <&periph_rst BCM6362_RST_PCIE_CORE>; + reset-names = "pcie", + "pcie-ext", + "pcie-core"; + + power-domains = <&periph_pwr BCM6362_POWER_DOMAIN_PCIE>; + + brcm,serdes = <&serdes_cntl>; + + status = "disabled"; + }; }; }; diff --git a/target/linux/bmips/dts/bcm6368-comtrend-vr-3025u.dts b/target/linux/bmips/dts/bcm6368-comtrend-vr-3025u.dts index b597a05f3a..c036b1cbec 100644 --- a/target/linux/bmips/dts/bcm6368-comtrend-vr-3025u.dts +++ b/target/linux/bmips/dts/bcm6368-comtrend-vr-3025u.dts @@ -69,6 +69,10 @@ status = "okay"; }; +&pci { + status = "okay"; +}; + &pflash { status = "okay"; diff --git a/target/linux/bmips/dts/bcm6368.dtsi b/target/linux/bmips/dts/bcm6368.dtsi index 5b5064b29e..9f59182517 100644 --- a/target/linux/bmips/dts/bcm6368.dtsi +++ b/target/linux/bmips/dts/bcm6368.dtsi @@ -414,6 +414,34 @@ status = "disabled"; }; + pci: pci@10001000 { + compatible = "brcm,bcm6348-pci"; + reg = <0x10001000 0x200>, + <0x08000000 0x10000>; + reg-names = "pci", + "pci-io"; + #address-cells = <3>; + #size-cells = <2>; + + device_type = "pci"; + bus-range = <0x00 0x01>; + ranges = <0x2000000 0 0x30000000 0x30000000 0 0x8000000>; + linux,pci-probe-only = <1>; + + interrupt-parent = <&periph_intc>; + interrupts = ; + + resets = <&periph_rst BCM6368_RST_MPI>; + reset-names = "pci"; + + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_pci>; + + brcm,remap; + + status = "disabled"; + }; + ehci: usb@10001500 { compatible = "brcm,bcm6368-ehci", "generic-ehci"; reg = <0x10001500 0x100>; -- cgit v1.2.3