Resguardo inicial

This commit is contained in:
lastdragon
2026-09-06 12:53:21 -06:00
parent 662efe3c2a
commit ad2088d178
94853 changed files with 43200404 additions and 0 deletions
@@ -0,0 +1,38 @@
# SPDX-License-Identifier: GPL-2.0
# Mvebu SoC Family
dtb-$(CONFIG_ARCH_MVEBU) += armada-3720-atlas-v5.dtb
dtb-$(CONFIG_ARCH_MVEBU) += armada-3720-db.dtb
dtb-$(CONFIG_ARCH_MVEBU) += armada-3720-eDPU.dtb
dtb-$(CONFIG_ARCH_MVEBU) += armada-3720-espressobin.dtb
dtb-$(CONFIG_ARCH_MVEBU) += armada-3720-espressobin-emmc.dtb
dtb-$(CONFIG_ARCH_MVEBU) += armada-3720-espressobin-ultra.dtb
dtb-$(CONFIG_ARCH_MVEBU) += armada-3720-espressobin-v7.dtb
dtb-$(CONFIG_ARCH_MVEBU) += armada-3720-espressobin-v7-emmc.dtb
dtb-$(CONFIG_ARCH_MVEBU) += armada-3720-gl-mv1000.dtb
dtb-$(CONFIG_ARCH_MVEBU) += armada-3720-turris-mox.dtb
dtb-$(CONFIG_ARCH_MVEBU) += armada-3720-uDPU.dtb
dtb-$(CONFIG_ARCH_MVEBU) += db-falcon-carrier-a7k.dtb
dtb-$(CONFIG_ARCH_MVEBU) += armada-7040-db.dtb
dtb-$(CONFIG_ARCH_MVEBU) += armada-7040-mochabin.dtb
dtb-$(CONFIG_ARCH_MVEBU) += armada-8040-clearfog-gt-8k.dtb
dtb-$(CONFIG_ARCH_MVEBU) += armada-8040-db.dtb
dtb-$(CONFIG_ARCH_MVEBU) += armada-8040-mcbin.dtb
dtb-$(CONFIG_ARCH_MVEBU) += armada-8040-mcbin-singleshot.dtb
dtb-$(CONFIG_ARCH_MVEBU) += armada-8040-puzzle-m801.dtb
dtb-$(CONFIG_ARCH_MVEBU) += armada-8080-db.dtb
dtb-$(CONFIG_ARCH_MVEBU) += cn9130-db.dtb
dtb-$(CONFIG_ARCH_MVEBU) += cn9130-db-B.dtb
dtb-$(CONFIG_ARCH_MVEBU) += cn9131-db.dtb
dtb-$(CONFIG_ARCH_MVEBU) += cn9131-db-B.dtb
dtb-$(CONFIG_ARCH_MVEBU) += cn9132-db.dtb
dtb-$(CONFIG_ARCH_MVEBU) += cn9132-db-B.dtb
dtb-$(CONFIG_ARCH_MVEBU) += cn9130-crb-A.dtb
dtb-$(CONFIG_ARCH_MVEBU) += cn9130-crb-B.dtb
dtb-$(CONFIG_ARCH_MVEBU) += ac5x-rd-carrier-cn9131.dtb
dtb-$(CONFIG_ARCH_MVEBU) += ac5-98dx35xx-rd.dtb
dtb-$(CONFIG_ARCH_MVEBU) += cn9130-cf-base.dtb
dtb-$(CONFIG_ARCH_MVEBU) += cn9130-cf-pro.dtb
dtb-$(CONFIG_ARCH_MVEBU) += cn9131-cf-solidwan.dtb
dtb-$(CONFIG_ARCH_MVEBU) += cn9132-clearfog.dtb
subdir-y += mmp
@@ -0,0 +1,368 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Device Tree For AC5.
*
* Copyright (C) 2021 Marvell
* Copyright (C) 2022 Allied Telesis Labs
*/
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
/ {
model = "Marvell AC5 SoC";
compatible = "marvell,ac5";
interrupt-parent = <&gic>;
#address-cells = <2>;
#size-cells = <2>;
cpus {
#address-cells = <2>;
#size-cells = <0>;
cpu-map {
cluster0 {
core0 {
cpu = <&cpu0>;
};
core1 {
cpu = <&cpu1>;
};
};
};
cpu0: cpu@0 {
device_type = "cpu";
compatible = "arm,cortex-a55";
reg = <0x0 0x0>;
enable-method = "psci";
next-level-cache = <&l2>;
};
cpu1: cpu@1 {
device_type = "cpu";
compatible = "arm,cortex-a55";
reg = <0x0 0x100>;
enable-method = "psci";
next-level-cache = <&l2>;
};
l2: l2-cache {
compatible = "cache";
cache-level = <2>;
cache-unified;
};
};
psci {
compatible = "arm,psci-0.2";
method = "smc";
};
timer {
compatible = "arm,armv8-timer";
interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>,
<GIC_PPI 8 IRQ_TYPE_LEVEL_HIGH>,
<GIC_PPI 10 IRQ_TYPE_LEVEL_HIGH>,
<GIC_PPI 7 IRQ_TYPE_LEVEL_HIGH>;
};
pmu {
compatible = "arm,cortex-a55-pmu";
interrupts = <GIC_PPI 12 IRQ_TYPE_LEVEL_HIGH>;
};
soc {
compatible = "simple-bus";
#address-cells = <2>;
#size-cells = <2>;
ranges;
bus@7f000000 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "simple-bus";
/* 16M internal register @ 0x7f00_0000 */
ranges = <0x0 0x0 0x7f000000 0x1000000>;
dma-coherent;
uart0: serial@12000 {
compatible = "snps,dw-apb-uart";
reg = <0x12000 0x100>;
reg-shift = <2>;
interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
reg-io-width = <1>;
clocks = <&cnm_clock>;
status = "okay";
};
uart1: serial@12100 {
compatible = "snps,dw-apb-uart";
reg = <0x12100 0x100>;
reg-shift = <2>;
interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
reg-io-width = <1>;
clocks = <&cnm_clock>;
status = "disabled";
};
uart2: serial@12200 {
compatible = "snps,dw-apb-uart";
reg = <0x12200 0x100>;
reg-shift = <2>;
interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>;
reg-io-width = <1>;
clocks = <&cnm_clock>;
status = "disabled";
};
uart3: serial@12300 {
compatible = "snps,dw-apb-uart";
reg = <0x12300 0x100>;
reg-shift = <2>;
interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
reg-io-width = <1>;
clocks = <&cnm_clock>;
status = "disabled";
};
mdio: mdio@22004 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "marvell,orion-mdio";
reg = <0x22004 0x4>;
clocks = <&cnm_clock>;
};
i2c0: i2c@11000 {
compatible = "marvell,mv78230-i2c";
reg = <0x11000 0x20>;
#address-cells = <1>;
#size-cells = <0>;
clocks = <&cnm_clock>;
clock-names = "core";
interrupts = <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>;
clock-frequency = <100000>;
pinctrl-names = "default", "gpio";
pinctrl-0 = <&i2c0_pins>;
pinctrl-1 = <&i2c0_gpio>;
scl-gpios = <&gpio0 26 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
sda-gpios = <&gpio0 27 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
status = "disabled";
};
i2c1: i2c@11100 {
compatible = "marvell,mv78230-i2c";
reg = <0x11100 0x20>;
#address-cells = <1>;
#size-cells = <0>;
clocks = <&cnm_clock>;
clock-names = "core";
interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>;
clock-frequency = <100000>;
pinctrl-names = "default", "gpio";
pinctrl-0 = <&i2c1_pins>;
pinctrl-1 = <&i2c1_gpio>;
scl-gpios = <&gpio0 20 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
sda-gpios = <&gpio0 21 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
status = "disabled";
};
gpio0: gpio@18100 {
compatible = "marvell,orion-gpio";
reg = <0x18100 0x40>;
ngpios = <32>;
gpio-controller;
#gpio-cells = <2>;
gpio-ranges = <&pinctrl0 0 0 32>;
marvell,pwm-offset = <0x1f0>;
interrupt-controller;
#interrupt-cells = <2>;
interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>;
};
gpio1: gpio@18140 {
reg = <0x18140 0x40>;
compatible = "marvell,orion-gpio";
ngpios = <14>;
gpio-controller;
#gpio-cells = <2>;
gpio-ranges = <&pinctrl0 0 32 14>;
marvell,pwm-offset = <0x1f0>;
interrupt-controller;
#interrupt-cells = <2>;
interrupts = <GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>;
};
};
mmc_dma: bus@80500000 {
compatible = "simple-bus";
ranges;
#address-cells = <0x2>;
#size-cells = <0x2>;
reg = <0x0 0x80500000 0x0 0x100000>;
dma-ranges = <0x0 0x0 0x2 0x0 0x0 0x80000000>;
dma-coherent;
sdhci: mmc@805c0000 {
compatible = "marvell,ac5-sdhci",
"marvell,armada-ap806-sdhci";
reg = <0x0 0x805c0000 0x0 0x1000>;
interrupts = <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&emmc_clock>, <&cnm_clock>;
clock-names = "core", "axi";
bus-width = <8>;
non-removable;
mmc-ddr-1_8v;
mmc-hs200-1_8v;
mmc-hs400-1_8v;
};
};
/*
* Dedicated section for devices behind 32bit controllers so we
* can configure specific DMA mapping for them
*/
behind-32bit-controller@7f000000 {
compatible = "simple-bus";
#address-cells = <0x2>;
#size-cells = <0x2>;
ranges = <0x0 0x0 0x0 0x7f000000 0x0 0x1000000>;
/* Host phy ram starts at 0x200M */
dma-ranges = <0x0 0x0 0x2 0x0 0x1 0x0>;
dma-coherent;
eth0: ethernet@20000 {
compatible = "marvell,armada-ac5-neta";
reg = <0x0 0x20000 0x0 0x4000>;
interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&cnm_clock>;
phy-mode = "sgmii";
status = "disabled";
};
eth1: ethernet@24000 {
compatible = "marvell,armada-ac5-neta";
reg = <0x0 0x24000 0x0 0x4000>;
interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&cnm_clock>;
phy-mode = "sgmii";
status = "disabled";
};
usb0: usb@80000 {
compatible = "marvell,orion-ehci";
reg = <0x0 0x80000 0x0 0x500>;
interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
};
usb1: usb@a0000 {
compatible = "marvell,orion-ehci";
reg = <0x0 0xa0000 0x0 0x500>;
interrupts = <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
};
};
pinctrl0: pinctrl@80020100 {
compatible = "marvell,ac5-pinctrl";
reg = <0 0x80020100 0 0x20>;
i2c0_pins: i2c0-pins {
marvell,pins = "mpp26", "mpp27";
marvell,function = "i2c0";
};
i2c0_gpio: i2c0-gpio-pins {
marvell,pins = "mpp26", "mpp27";
marvell,function = "gpio";
};
i2c1_pins: i2c1-pins {
marvell,pins = "mpp20", "mpp21";
marvell,function = "i2c1";
};
i2c1_gpio: i2c1-gpio-pins {
marvell,pins = "mpp20", "mpp21";
marvell,function = "i2c1";
};
};
spi0: spi@805a0000 {
compatible = "marvell,armada-3700-spi";
reg = <0x0 0x805a0000 0x0 0x50>;
#address-cells = <0x1>;
#size-cells = <0x0>;
clocks = <&spi_clock>;
interrupts = <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>;
num-cs = <1>;
status = "disabled";
};
spi1: spi@805a8000 {
compatible = "marvell,armada-3700-spi";
reg = <0x0 0x805a8000 0x0 0x50>;
#address-cells = <0x1>;
#size-cells = <0x0>;
clocks = <&spi_clock>;
interrupts = <GIC_SPI 91 IRQ_TYPE_LEVEL_HIGH>;
num-cs = <1>;
status = "disabled";
};
nand: nand-controller@805b0000 {
compatible = "marvell,ac5-nand-controller";
reg = <0x0 0x805b0000 0x0 0x00000054>;
#address-cells = <0x1>;
#size-cells = <0x0>;
interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&nand_clock>;
status = "disabled";
};
gic: interrupt-controller@80600000 {
compatible = "arm,gic-v3";
#interrupt-cells = <3>;
interrupt-controller;
reg = <0x0 0x80600000 0x0 0x10000>, /* GICD */
<0x0 0x80660000 0x0 0x40000>; /* GICR */
interrupts = <GIC_PPI 6 IRQ_TYPE_LEVEL_HIGH>;
};
};
clocks {
cnm_clock: cnm-clock {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <328000000>;
};
spi_clock: spi-clock {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <200000000>;
};
nand_clock: nand-clock {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <400000000>;
};
emmc_clock: emmc-clock {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <400000000>;
};
};
};
@@ -0,0 +1,105 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Device Tree For RD-AC5X.
*
* Copyright (C) 2021 Marvell
* Copyright (C) 2022 Allied Telesis Labs
*/
/*
* Device Tree file for Marvell Alleycat 5X development board
* This board file supports the B configuration of the board
*/
/dts-v1/;
#include "ac5-98dx35xx.dtsi"
/ {
model = "Marvell RD-AC5X Board";
compatible = "marvell,rd-ac5x", "marvell,ac5x", "marvell,ac5";
aliases {
serial0 = &uart0;
spiflash0 = &spiflash0;
gpio0 = &gpio0;
gpio1 = &gpio1;
ethernet0 = &eth0;
ethernet1 = &eth1;
};
memory@0 {
device_type = "memory";
reg = <0x2 0x00000000 0x0 0x40000000>;
};
usb1phy: usb-phy {
compatible = "usb-nop-xceiv";
#phy-cells = <0>;
};
};
&mdio {
phy0: ethernet-phy@0 {
reg = <0>;
};
};
&i2c0 {
status = "okay";
};
&i2c1 {
status = "okay";
};
&eth0 {
status = "okay";
phy-handle = <&phy0>;
};
/* USB0 is a host USB */
&usb0 {
status = "okay";
};
/* USB1 is a peripheral USB */
&usb1 {
status = "okay";
phys = <&usb1phy>;
phy-names = "usb-phy";
dr_mode = "peripheral";
};
&spi0 {
status = "okay";
spiflash0: flash@0 {
compatible = "jedec,spi-nor";
spi-max-frequency = <50000000>;
spi-tx-bus-width = <1>; /* 1-single, 2-dual, 4-quad */
spi-rx-bus-width = <1>; /* 1-single, 2-dual, 4-quad */
reg = <0>;
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "spi_flash_part0";
reg = <0x0 0x800000>;
};
parition@1 {
label = "spi_flash_part1";
reg = <0x800000 0x700000>;
};
parition@2 {
label = "spi_flash_part2";
reg = <0xF00000 0x100000>;
};
};
};
&sdhci {
status = "okay";
};
@@ -0,0 +1,17 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Device Tree For AC5X.
*
* Copyright (C) 2022 Allied Telesis Labs
*/
#include "ac5-98dx25xx.dtsi"
/ {
model = "Marvell AC5X SoC";
compatible = "marvell,ac5x", "marvell,ac5";
};
&cnm_clock {
clock-frequency = <325000000>;
};
@@ -0,0 +1,44 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2023 Marvell International Ltd.
*
* Device tree for the AC5X RD Type 7 Com Express carrier board,
* Utilizing the CN913x COM Express CPU module board.
* This specific carrier board in this mode of operation (external)
* only maintains a PCIe link with the CPU module,
* which does not require any special DTS definitions.
*
* AC5X RD works here in external mode (switch selectable at the back of the
* board), and connect via an external cable a kit
* which would allow it to use an external CN9131 CPU COM Express module,
* mounted on top of an interposer kit.
*
* So in this case, once the switch is set to external mode as explained above,
* the AC5X RD becomes part of the carrier solution.
*
* When the board boots in the external CPU mode, the internal CPU is disabled,
* and only the switch portion of the SOC acts as a PCIe end-point, Hence there
* is no need to describe this internal (disabled CPU) in the device tree.
*
* There is no CPU booting in this mode on the carrier, only on the
* CN9131 COM Express CPU module.
* What runs the Linux is the CN9131 on the COM Express CPU module,
* And it accesses the switch end-point on the AC5X RD portion of the carrier
* via PCIe.
*/
#include "cn9131-db-comexpress.dtsi"
#include "ac5x-rd-carrier.dtsi"
/ {
model = "Marvell Armada AC5X RD COM EXPRESS type 7 carrier board with CN9131 CPU module";
compatible = "marvell,cn9131-ac5x-carrier", "marvell,rd-ac5x-carrier",
"marvell,cn9131-cpu-module", "marvell,cn9131",
"marvell,armada-ap807-quad", "marvell,armada-ap807";
memory@0 {
device_type = "memory";
reg = <0x0 0x0 0x2 0x00000000>;
};
};
@@ -0,0 +1,34 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2023 Marvell International Ltd.
*
* Device tree for the AC5X RD Type 7 Com Express carrier board,
* This specific board in external mode (see below) only maintains
* a PCIe link with the COM Express CPU module, which does not
* require any special DTS definitions.
*
* AC5X RD can either work as you would expect, as a complete standalone
* box using the internal CPU, or you can move the switch on the back of
* the box to "external" mode, and connect via an external cable a kit
* which would allow it to use an external CPU COM Express module,
* mounted on top of an interposer kit.
*
* So in this case, once the switch is set to external mode as explained above,
* the AC5X RD becomes part of the carrier solution.
* This is a development/reference solution, not a full commercial solution,
* hence it was designed with the flexibility to be configured in different
* modes of operation.
*
* When the board boots in the external CPU mode, the internal CPU is disabled,
* and only the switch portion of the SOC acts as a PCIe end-point, Hence there
* is no need to describe this internal (disabled CPU) in the device tree.
*
* There is no CPU booting in this mode on the carrier,
* only on the COM Express CPU module.
*/
/ {
model = "Marvell Armada AC5X RD COM EXPRESS type 7 carrier board";
compatible = "marvell,rd-ac5x-carrier";
};
@@ -0,0 +1,109 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Device Tree file for RIPE Atlas Probe v5
* 2025 by Marek Behún <kabel@kernel.org>
*/
/dts-v1/;
#include <dt-bindings/bus/moxtet.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/leds/common.h>
#include "armada-372x.dtsi"
/ {
model = "RIPE Atlas Probe v5";
compatible = "ripe,atlas-v5", "marvell,armada3720",
"marvell,armada3710";
aliases {
ethernet0 = &eth0;
mmc0 = &sdhci0;
};
chosen {
stdout-path = "serial0:115200n8";
};
memory@0 {
device_type = "memory";
reg = <0x00000000 0x00000000 0x00000000 0x20000000>;
};
leds {
compatible = "gpio-leds";
led {
gpios = <&gpiosb 21 GPIO_ACTIVE_LOW>;
function = LED_FUNCTION_ACTIVITY;
color = <LED_COLOR_ID_RED>;
linux,default-trigger = "default-on";
};
};
vsdc_reg: vsdc-reg {
compatible = "regulator-gpio";
regulator-name = "vsdc";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
regulator-boot-on;
gpios = <&gpiosb 23 GPIO_ACTIVE_HIGH>;
gpios-states = <0>;
states = <1800000 0x1
3300000 0x0>;
enable-active-high;
};
firmware {
armada-3700-rwtm {
compatible = "marvell,armada-3700-rwtm-firmware", "cznic,turris-mox-rwtm";
};
};
};
&uart0 {
pinctrl-names = "default";
pinctrl-0 = <&uart1_pins>;
status = "okay";
};
&eth0 {
pinctrl-names = "default";
pinctrl-0 = <&rgmii_pins>;
phy-mode = "rgmii-id";
phy-handle = <&phy1>;
status = "okay";
};
&sdhci0 {
non-removable;
bus-width = <4>;
mmc-ddr-1_8v;
mmc-hs400-1_8v;
sd-uhs-sdr104;
marvell,xenon-tun-count = <9>;
marvell,pad-type = "fixed-1-8v";
vqmmc-supply = <&vsdc_reg>;
pinctrl-names = "default";
pinctrl-0 = <&mmc_pins>;
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
mmccard: mmccard@0 {
compatible = "mmc-card";
reg = <0>;
};
};
&mdio {
pinctrl-names = "default";
pinctrl-0 = <&smi_pins>;
status = "okay";
phy1: ethernet-phy@1 {
reg = <1>;
};
};
@@ -0,0 +1,221 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Device Tree file for Marvell Armada 3720 development board
* (DB-88F3720-DDR3)
* Copyright (C) 2016 Marvell
*
* Gregory CLEMENT <gregory.clement@free-electrons.com>
*
* This file is compatible with the version 1.4 and the version 2.0 of
* the board, however the CON numbers are different between the 2
* version
*/
/dts-v1/;
#include <dt-bindings/gpio/gpio.h>
#include "armada-372x.dtsi"
/ {
model = "Marvell Armada 3720 Development Board DB-88F3720-DDR3";
compatible = "marvell,armada-3720-db", "marvell,armada3720", "marvell,armada3710";
chosen {
stdout-path = "serial0:115200n8";
};
memory@0 {
device_type = "memory";
reg = <0x00000000 0x00000000 0x00000000 0x20000000>;
};
exp_usb3_vbus: usb3-vbus {
compatible = "regulator-fixed";
regulator-name = "usb3-vbus";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
enable-active-high;
regulator-always-on;
gpio = <&gpio_exp 1 GPIO_ACTIVE_HIGH>;
};
usb3_phy: usb3-phy {
compatible = "usb-nop-xceiv";
#phy-cells = <0>;
vcc-supply = <&exp_usb3_vbus>;
};
vcc_sd_reg1: regulator {
compatible = "regulator-gpio";
regulator-name = "vcc_sd1";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
regulator-boot-on;
gpios = <&gpiosb 23 GPIO_ACTIVE_HIGH>;
gpios-states = <0>;
states = <1800000 0x1
3300000 0x0>;
enable-active-high;
};
vcc_sd_reg2: regulator-vmcc {
compatible = "regulator-fixed";
regulator-name = "vcc_sd2";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-boot-on;
enable-active-high;
gpio = <&gpio_exp 4 GPIO_ACTIVE_HIGH>;
};
};
/* Gigabit module on CON19(V2.0)/CON21(V1.4) */
&eth0 {
pinctrl-names = "default";
pinctrl-0 = <&rgmii_pins>;
phy-mode = "rgmii-id";
phy = <&phy0>;
status = "okay";
};
/* Gigabit module on CON18(V2.0)/CON20(V1.4) */
&eth1 {
phy-mode = "sgmii";
phy = <&phy1>;
status = "okay";
};
&i2c0 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
status = "okay";
gpio_exp: pca9555@22 {
compatible = "nxp,pca9555";
gpio-controller;
#gpio-cells = <2>;
reg = <0x22>;
/*
* IO0_0: PWR_EN_USB2 IO1_0: PWR_EN_VTT
* IO0_1: PWR_EN_USB23 IO1_1: MPCIE_WDISABLE
* IO0_2: PWR_EN_SATA IO1_2: RGMII_DEV_RSTN
* IO0_3: PWR_EN_PCIE IO1_3: SGMII_DEV_RSTN
* IO0_4: PWR_EN_SD
* IO0_5: PWR_EN_EMMC
* IO0_6: PWR_EN_RGMII IO1_6: SATA_USB3.0_SEL
* IO0_7: PWR_EN_SGMII IO1_7: PWR_MCI_PS
*/
};
rtc@68 {
/* PT7C4337A from pericom fully compatible with the ds1337 */
compatible = "dallas,ds1337";
reg = <0x68>;
};
};
&mdio {
status = "okay";
phy0: ethernet-phy@0 {
reg = <0>;
};
phy1: ethernet-phy@1 {
reg = <1>;
};
};
/* CON15(V2.0)/CON17(V1.4) : PCIe / CON15(V2.0)/CON12(V1.4) :mini-PCIe */
&pcie0 {
pinctrl-names = "default";
pinctrl-0 = <&pcie_reset_pins &pcie_clkreq_pins>;
reset-gpios = <&gpiosb 3 GPIO_ACTIVE_LOW>;
status = "okay";
};
/* CON3 */
&sata {
status = "okay";
};
&sdhci0 {
non-removable;
bus-width = <8>;
mmc-ddr-1_8v;
mmc-hs400-1_8v;
marvell,pad-type = "fixed-1-8v";
status = "okay";
};
/* SD slot module on CON14(V2.0)/CON15(V1.4) */
&sdhci1 {
wp-inverted;
cd-gpios = <&gpiosb 2 GPIO_ACTIVE_LOW>;
bus-width = <4>;
marvell,pad-type = "sd";
vqmmc-supply = <&vcc_sd_reg1>;
vmmc-supply = <&vcc_sd_reg2>;
status = "okay";
};
&spi0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&spi_quad_pins>;
flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <108000000>;
spi-rx-bus-width = <4>;
spi-tx-bus-width = <4>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "bootloader";
reg = <0x0 0x200000>;
};
partition@200000 {
label = "U-boot Env";
reg = <0x200000 0x10000>;
};
partition@210000 {
label = "Linux";
reg = <0x210000 0xDF0000>;
};
};
};
};
/*
* Exported on the micro USB connector CON30(V2.0)/CON32(V1.4) through
* an FTDI (also on CON24(V2.0)/CON26(V1.4)).
*/
&uart0 {
pinctrl-names = "default";
pinctrl-0 = <&uart1_pins>;
status = "okay";
};
/* CON26(V2.0)/CON28(V1.4) */
&uart1 {
pinctrl-names = "default";
pinctrl-0 = <&uart2_pins>;
status = "okay";
};
/* CON27(V2.0)/CON29(V1.4) */
&usb2 {
status = "okay";
};
/* CON29(V2.0)/CON31(V1.4) */
&usb3 {
status = "okay";
usb-phy = <&usb3_phy>;
};
@@ -0,0 +1,59 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/dts-v1/;
#include "armada-3720-uDPU.dtsi"
/ {
model = "Methode eDPU Board";
compatible = "methode,edpu", "marvell,armada3720", "marvell,armada3710";
};
&eth0 {
phy-mode = "2500base-x";
};
/*
* External MV88E6361 switch is only available on v2 of the board.
* U-Boot will enable the MDIO bus and switch nodes.
*/
&mdio {
status = "disabled";
pinctrl-names = "default";
pinctrl-0 = <&smi_pins>;
/* Actual device is MV88E6361 */
switch: switch@0 {
compatible = "marvell,mv88e6190";
reg = <0>;
status = "disabled";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
label = "cpu";
phy-mode = "2500base-x";
managed = "in-band-status";
ethernet = <&eth0>;
};
port@9 {
reg = <9>;
label = "downlink";
phy-mode = "2500base-x";
managed = "in-band-status";
};
port@a {
reg = <10>;
label = "uplink";
phy-mode = "2500base-x";
managed = "in-band-status";
sfp = <&sfp_eth1>;
};
};
};
};
@@ -0,0 +1,26 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Device Tree file for Globalscale Marvell ESPRESSOBin Board with eMMC
* Copyright (C) 2018 Marvell
*
* Romain Perier <romain.perier@free-electrons.com>
* Konstantin Porotchkin <kostap@marvell.com>
*
*/
/*
* Schematic available at http://espressobin.net/wp-content/uploads/2017/08/ESPRESSObin_V5_Schematics.pdf
*/
/dts-v1/;
#include "armada-3720-espressobin.dtsi"
/ {
model = "Globalscale Marvell ESPRESSOBin Board (eMMC)";
compatible = "globalscale,espressobin-emmc", "globalscale,espressobin",
"marvell,armada3720", "marvell,armada3710";
};
&sdhci0 {
status = "okay";
};
@@ -0,0 +1,197 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Device Tree file for ESPRESSObin-Ultra board.
* Copyright (C) 2019 Globalscale technologies, Inc.
*
* Jason Hung <jhung@globalscaletechnologies.com>
*/
/dts-v1/;
#include "armada-3720-espressobin.dtsi"
/ {
model = "Globalscale Marvell ESPRESSOBin Ultra Board";
compatible = "globalscale,espressobin-ultra", "globalscale,espressobin",
"marvell,armada3720", "marvell,armada3710";
aliases {
/* ethernet1 is WAN port */
ethernet1 = &switch0port5;
ethernet2 = &switch0port1;
ethernet3 = &switch0port2;
ethernet4 = &switch0port3;
ethernet5 = &switch0port4;
};
/delete-node/ regulator;
reg_usb3_vbus: usb3-vbus {
compatible = "regulator-fixed";
regulator-name = "usb3-vbus";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
enable-active-high;
gpio = <&gpionb 19 GPIO_ACTIVE_HIGH>;
};
usb3_phy: usb3-phy {
compatible = "usb-nop-xceiv";
#phy-cells = <0>;
vcc-supply = <&reg_usb3_vbus>;
};
gpio-leds {
compatible = "gpio-leds";
/* No assigned functions to the LEDs by default */
led1 {
label = "ebin-ultra:blue:led1";
gpios = <&gpionb 11 GPIO_ACTIVE_LOW>;
};
led2 {
label = "ebin-ultra:green:led2";
gpios = <&gpionb 12 GPIO_ACTIVE_LOW>;
};
led3 {
label = "ebin-ultra:red:led3";
gpios = <&gpionb 13 GPIO_ACTIVE_LOW>;
};
led4 {
label = "ebin-ultra:yellow:led4";
gpios = <&gpionb 14 GPIO_ACTIVE_LOW>;
};
};
};
&sdhci0 {
status = "okay";
};
&sdhci1 {
/delete-property/ vqmmc-supply;
status = "disabled";
};
&spi0 {
flash@0 {
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "firmware";
reg = <0x0 0x3e0000>;
};
partition@3e0000 {
label = "hw-info";
reg = <0x3e0000 0x10000>;
read-only;
};
partition@3f0000 {
label = "u-boot-env";
reg = <0x3f0000 0x10000>;
};
};
};
};
&i2c0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
rtc@51 {
compatible = "nxp,pcf8563";
reg = <0x51>;
};
};
&usb3 {
usb-phy = <&usb3_phy>;
};
&mdio {
/* Switch is @3, not @1 */
/delete-node/ ethernet-switch@1;
extphy: ethernet-phy@1 {
reg = <1>;
reset-gpios = <&gpionb 2 GPIO_ACTIVE_LOW>;
};
switch0: ethernet-switch@3 {
compatible = "marvell,mv88e6085";
reg = <3>;
reset-gpios = <&gpiosb 23 GPIO_ACTIVE_LOW>;
dsa,member = <0 0>;
ethernet-ports {
#address-cells = <1>;
#size-cells = <0>;
switch0port0: ethernet-port@0 {
reg = <0>;
label = "cpu";
ethernet = <&eth0>;
phy-mode = "rgmii-id";
fixed-link {
speed = <1000>;
full-duplex;
};
};
switch0port1: ethernet-port@1 {
reg = <1>;
label = "lan0";
phy-handle = <&switch0phy0>;
};
switch0port2: ethernet-port@2 {
reg = <2>;
label = "lan1";
phy-handle = <&switch0phy1>;
};
switch0port3: ethernet-port@3 {
reg = <3>;
label = "lan2";
phy-handle = <&switch0phy2>;
};
switch0port4: ethernet-port@4 {
reg = <4>;
label = "lan3";
phy-handle = <&switch0phy3>;
};
switch0port5: ethernet-port@5 {
reg = <5>;
label = "wan";
phy-handle = <&extphy>;
phy-mode = "sgmii";
};
};
mdio {
#address-cells = <1>;
#size-cells = <0>;
switch0phy0: ethernet-phy@11 {
reg = <0x11>;
};
switch0phy1: ethernet-phy@12 {
reg = <0x12>;
};
switch0phy2: ethernet-phy@13 {
reg = <0x13>;
};
switch0phy3: ethernet-phy@14 {
reg = <0x14>;
};
};
};
};
@@ -0,0 +1,45 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Device Tree file for Globalscale Marvell ESPRESSOBin Board V7 with eMMC
* Copyright (C) 2018 Marvell
*
* Romain Perier <romain.perier@free-electrons.com>
* Konstantin Porotchkin <kostap@marvell.com>
*
*/
/*
* Schematic available at http://espressobin.net/wp-content/uploads/2020/05/ESPRESSObin_V7-0_Schematic.pdf
*/
/dts-v1/;
#include "armada-3720-espressobin.dtsi"
/ {
model = "Globalscale Marvell ESPRESSOBin Board V7 (eMMC)";
compatible = "globalscale,espressobin-v7-emmc", "globalscale,espressobin-v7",
"globalscale,espressobin", "marvell,armada3720",
"marvell,armada3710";
aliases {
/* ethernet1 is wan port */
ethernet1 = &switch0port3;
ethernet3 = &switch0port1;
};
};
&switch0port1 {
label = "lan1";
};
&switch0port3 {
label = "wan";
};
&sdhci0 {
status = "okay";
};
&led2 {
status = "okay";
};
@@ -0,0 +1,40 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Device Tree file for Globalscale Marvell ESPRESSOBin Board V7
* Copyright (C) 2018 Marvell
*
* Romain Perier <romain.perier@free-electrons.com>
* Konstantin Porotchkin <kostap@marvell.com>
*
*/
/*
* Schematic available at http://espressobin.net/wp-content/uploads/2020/05/ESPRESSObin_V7-0_Schematic.pdf
*/
/dts-v1/;
#include "armada-3720-espressobin.dtsi"
/ {
model = "Globalscale Marvell ESPRESSOBin Board V7";
compatible = "globalscale,espressobin-v7", "globalscale,espressobin",
"marvell,armada3720", "marvell,armada3710";
aliases {
/* ethernet1 is wan port */
ethernet1 = &switch0port3;
ethernet3 = &switch0port1;
};
};
&switch0port1 {
label = "lan1";
};
&switch0port3 {
label = "wan";
};
&led2 {
status = "okay";
};
@@ -0,0 +1,20 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Device Tree file for Globalscale Marvell ESPRESSOBin Board
* Copyright (C) 2016 Marvell
*
* Romain Perier <romain.perier@free-electrons.com>
*
*/
/*
* Schematic available at http://espressobin.net/wp-content/uploads/2017/08/ESPRESSObin_V5_Schematics.pdf
*/
/dts-v1/;
#include "armada-3720-espressobin.dtsi"
/ {
model = "Globalscale Marvell ESPRESSOBin Board";
compatible = "globalscale,espressobin", "marvell,armada3720", "marvell,armada3710";
};
@@ -0,0 +1,215 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Device Tree file for Globalscale Marvell ESPRESSOBin Board
* Copyright (C) 2016 Marvell
*
* Romain Perier <romain.perier@free-electrons.com>
*
*/
#include <dt-bindings/gpio/gpio.h>
#include "armada-372x.dtsi"
/ {
aliases {
ethernet0 = &eth0;
/* for DSA user port device */
ethernet1 = &switch0port1;
ethernet2 = &switch0port2;
ethernet3 = &switch0port3;
};
chosen {
stdout-path = "serial0:115200n8";
};
memory@0 {
device_type = "memory";
reg = <0x00000000 0x00000000 0x00000000 0x20000000>;
};
vcc_sd_reg1: regulator {
compatible = "regulator-gpio";
regulator-name = "vcc_sd1";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
regulator-boot-on;
gpios = <&gpionb 4 GPIO_ACTIVE_HIGH>;
gpios-states = <0>;
states = <1800000 0x1
3300000 0x0>;
enable-active-high;
};
led2: gpio-led2 {
/* led2 is working only on v7 board */
status = "disabled";
compatible = "gpio-leds";
led2 {
label = "led2";
gpios = <&gpionb 2 GPIO_ACTIVE_LOW>;
default-state = "off";
};
};
};
/* J9 */
&pcie0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&pcie_reset_pins &pcie_clkreq_pins>;
reset-gpios = <&gpiosb 3 GPIO_ACTIVE_LOW>;
};
/* J6 */
&sata {
status = "okay";
};
/* U11 */
&sdhci0 {
/* Main DTS file for Espressobin is without eMMC */
status = "disabled";
non-removable;
bus-width = <8>;
mmc-ddr-1_8v;
mmc-hs400-1_8v;
marvell,xenon-tun-count = <9>;
marvell,pad-type = "fixed-1-8v";
pinctrl-names = "default";
pinctrl-0 = <&mmc_pins>;
#address-cells = <1>;
#size-cells = <0>;
mmccard: mmccard@0 {
compatible = "mmc-card";
reg = <0>;
};
};
/* J1 */
&sdhci1 {
wp-inverted;
bus-width = <4>;
cd-gpios = <&gpionb 3 GPIO_ACTIVE_LOW>;
marvell,pad-type = "sd";
vqmmc-supply = <&vcc_sd_reg1>;
pinctrl-names = "default";
pinctrl-0 = <&sdio_pins>;
status = "okay";
};
&spi0 {
status = "okay";
flash@0 {
reg = <0>;
compatible = "jedec,spi-nor";
spi-max-frequency = <104000000>;
m25p,fast-read;
};
};
/* Exported on the micro USB connector J5 through an FTDI */
&uart0 {
pinctrl-names = "default";
pinctrl-0 = <&uart1_pins>;
status = "okay";
};
/*
* Connector J17 and J18 expose a number of different features. Some pins are
* multiplexed. This is the case for instance for the following features:
* - UART1 (pin 24 = RX, pin 26 = TX). See armada-3720-db.dts for an example of
* how to enable it. Beware that the signals are 1.8V TTL.
* - I2C
* - SPI
* - MMC
*/
/* J7 */
&usb3 {
status = "okay";
};
/* J8 */
&usb2 {
status = "okay";
};
&mdio {
switch0: ethernet-switch@1 {
compatible = "marvell,mv88e6085";
reg = <1>;
dsa,member = <0 0>;
ethernet-ports {
#address-cells = <1>;
#size-cells = <0>;
switch0port0: ethernet-port@0 {
reg = <0>;
label = "cpu";
ethernet = <&eth0>;
phy-mode = "rgmii-id";
fixed-link {
speed = <1000>;
full-duplex;
};
};
switch0port1: ethernet-port@1 {
reg = <1>;
label = "wan";
phy-handle = <&switch0phy0>;
};
switch0port2: ethernet-port@2 {
reg = <2>;
label = "lan0";
phy-handle = <&switch0phy1>;
};
switch0port3: ethernet-port@3 {
reg = <3>;
label = "lan1";
phy-handle = <&switch0phy2>;
};
};
mdio {
#address-cells = <1>;
#size-cells = <0>;
switch0phy0: ethernet-phy@11 {
reg = <0x11>;
};
switch0phy1: ethernet-phy@12 {
reg = <0x12>;
};
switch0phy2: ethernet-phy@13 {
reg = <0x13>;
};
};
};
};
&eth0 {
pinctrl-names = "default";
pinctrl-0 = <&rgmii_pins>, <&smi_pins>;
phy-mode = "rgmii-id";
status = "okay";
fixed-link {
speed = <1000>;
full-duplex;
};
};
@@ -0,0 +1,232 @@
// SPDX-License-Identifier: (GPL-2.0-or-later OR MIT)
/dts-v1/;
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include "armada-372x.dtsi"
/ {
model = "GL.iNet GL-MV1000";
compatible = "glinet,gl-mv1000", "marvell,armada3720", "marvell,armada3710";
aliases {
led-boot = &led_power;
led-failsafe = &led_power;
led-running = &led_power;
led-upgrade = &led_power;
};
chosen {
stdout-path = "serial0:115200n8";
};
memory@0 {
device_type = "memory";
reg = <0x00000000 0x00000000 0x00000000 0x20000000>;
};
vcc_sd_reg1: regulator {
compatible = "regulator-fixed";
regulator-name = "vcc_sd1";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-boot-on;
};
keys {
compatible = "gpio-keys";
button-reset {
label = "reset";
linux,code = <KEY_RESTART>;
gpios = <&gpionb 14 GPIO_ACTIVE_LOW>;
};
switch {
label = "switch";
linux,code = <BTN_0>;
gpios = <&gpiosb 22 GPIO_ACTIVE_LOW>;
};
};
leds {
compatible = "gpio-leds";
led-vpn {
label = "green:vpn";
gpios = <&gpionb 11 GPIO_ACTIVE_LOW>;
};
led-wan {
label = "green:wan";
gpios = <&gpionb 12 GPIO_ACTIVE_LOW>;
};
led_power: led-power {
label = "green:power";
gpios = <&gpionb 13 GPIO_ACTIVE_LOW>;
default-state = "on";
};
};
};
&spi0 {
status = "okay";
flash@0 {
reg = <0>;
compatible = "jedec,spi-nor";
spi-max-frequency = <104000000>;
m25p,fast-read;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "firmware";
reg = <0 0xf0000>;
};
partition@f0000 {
label = "u-boot-env";
reg = <0xf0000 0x8000>;
};
factory: partition@f8000 {
label = "factory";
reg = <0xf8000 0x8000>;
read-only;
};
partition@100000 {
label = "dtb";
reg = <0x100000 0x10000>;
read-only;
};
partition@110000 {
label = "rescue";
reg = <0x110000 0x1000000>;
};
};
};
};
&sdhci1 {
wp-inverted;
bus-width = <4>;
cd-gpios = <&gpionb 17 GPIO_ACTIVE_LOW>;
marvell,pad-type = "sd";
no-1-8-v;
vqmmc-supply = <&vcc_sd_reg1>;
status = "okay";
};
&sdhci0 {
bus-width = <8>;
mmc-ddr-1_8v;
mmc-hs400-1_8v;
non-removable;
no-sd;
no-sdio;
marvell,pad-type = "fixed-1-8v";
status = "okay";
};
&usb3 {
status = "okay";
};
&usb2 {
status = "okay";
};
&uart0 {
status = "okay";
};
&mdio {
switch0: ethernet-switch@1 {
compatible = "marvell,mv88e6085";
reg = <1>;
dsa,member = <0 0>;
ports: ethernet-ports {
#address-cells = <1>;
#size-cells = <0>;
ethernet-port@0 {
reg = <0>;
label = "cpu";
ethernet = <&eth0>;
};
ethernet-port@1 {
reg = <1>;
label = "wan";
phy-handle = <&switch0phy0>;
};
ethernet-port@2 {
reg = <2>;
label = "lan0";
phy-handle = <&switch0phy1>;
nvmem-cells = <&macaddr_factory_6>;
nvmem-cell-names = "mac-address";
};
ethernet-port@3 {
reg = <3>;
label = "lan1";
phy-handle = <&switch0phy2>;
nvmem-cells = <&macaddr_factory_6>;
nvmem-cell-names = "mac-address";
};
};
mdio {
#address-cells = <1>;
#size-cells = <0>;
switch0phy0: ethernet-phy@11 {
reg = <0x11>;
};
switch0phy1: ethernet-phy@12 {
reg = <0x12>;
};
switch0phy2: ethernet-phy@13 {
reg = <0x13>;
};
};
};
};
&eth0 {
nvmem-cells = <&macaddr_factory_0>;
nvmem-cell-names = "mac-address";
phy-mode = "rgmii-id";
status = "okay";
fixed-link {
speed = <1000>;
full-duplex;
};
};
&factory {
compatible = "nvmem-cells";
#address-cells = <1>;
#size-cells = <1>;
macaddr_factory_0: macaddr@0 {
reg = <0x0 0x6>;
};
macaddr_factory_6: macaddr@6 {
reg = <0x6 0x6>;
};
};
@@ -0,0 +1,883 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Device Tree file for CZ.NIC Turris Mox Board
* 2019 by Marek Behún <kabel@kernel.org>
*/
/dts-v1/;
#include <dt-bindings/bus/moxtet.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include "armada-372x.dtsi"
/ {
model = "CZ.NIC Turris Mox Board";
compatible = "cznic,turris-mox", "marvell,armada3720",
"marvell,armada3710";
aliases {
spi0 = &spi0;
ethernet0 = &eth0;
ethernet1 = &eth1;
mmc0 = &sdhci0;
mmc1 = &sdhci1;
};
chosen {
stdout-path = "serial0:115200n8";
};
memory@0 {
device_type = "memory";
reg = <0x00000000 0x00000000 0x00000000 0x20000000>;
};
leds {
compatible = "gpio-leds";
led {
label = "mox:red:activity";
gpios = <&gpiosb 21 GPIO_ACTIVE_LOW>;
linux,default-trigger = "default-on";
};
};
gpio-keys {
compatible = "gpio-keys";
key-reset {
label = "reset";
linux,code = <KEY_RESTART>;
gpios = <&gpiosb 20 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
};
exp_usb3_vbus: usb3-vbus {
compatible = "regulator-fixed";
regulator-name = "usb3-vbus";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
enable-active-high;
regulator-always-on;
gpio = <&gpiosb 0 GPIO_ACTIVE_HIGH>;
};
vsdc_reg: vsdc-reg {
compatible = "regulator-gpio";
regulator-name = "vsdc";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
regulator-boot-on;
gpios = <&gpiosb 23 GPIO_ACTIVE_HIGH>;
gpios-states = <0>;
states = <1800000 0x1
3300000 0x0>;
enable-active-high;
};
vsdio_reg: vsdio-reg {
compatible = "regulator-gpio";
regulator-name = "vsdio";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
regulator-boot-on;
gpios = <&gpiosb 22 GPIO_ACTIVE_HIGH>;
gpios-states = <0>;
states = <1800000 0x1
3300000 0x0>;
enable-active-high;
};
sdhci1_pwrseq: sdhci1-pwrseq {
compatible = "mmc-pwrseq-simple";
reset-gpios = <&gpionb 19 GPIO_ACTIVE_HIGH>;
status = "okay";
};
sfp: sfp {
compatible = "sff,sfp";
i2c-bus = <&i2c0>;
los-gpios = <&moxtet_sfp 0 GPIO_ACTIVE_HIGH>;
tx-fault-gpios = <&moxtet_sfp 1 GPIO_ACTIVE_HIGH>;
mod-def0-gpios = <&moxtet_sfp 2 GPIO_ACTIVE_LOW>;
tx-disable-gpios = <&moxtet_sfp 4 GPIO_ACTIVE_HIGH>;
rate-select0-gpios = <&moxtet_sfp 5 GPIO_ACTIVE_HIGH>;
maximum-power-milliwatt = <3000>;
/* enabled by U-Boot if SFP module is present */
status = "disabled";
};
firmware {
armada-3700-rwtm {
compatible = "marvell,armada-3700-rwtm-firmware", "cznic,turris-mox-rwtm";
};
};
};
&i2c0 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
/delete-property/ mrvl,i2c-fast-mode;
status = "okay";
/* MCP7940MT-I/MNY RTC */
rtc@6f {
compatible = "microchip,mcp7940x";
reg = <0x6f>;
interrupt-parent = <&gpiosb>;
interrupts = <5 IRQ_TYPE_EDGE_FALLING>; /* GPIO2_5 */
};
};
&pcie0 {
pinctrl-names = "default";
pinctrl-0 = <&pcie_reset_pins &pcie_clkreq_pins>;
status = "okay";
reset-gpios = <&gpiosb 3 GPIO_ACTIVE_LOW>;
slot-power-limit-milliwatt = <10000>;
/*
* U-Boot port for Turris Mox has a bug which always expects that "ranges" DT property
* contains exactly 2 ranges with 3 (child) address cells, 2 (parent) address cells and
* 2 size cells and also expects that the second range starts at 16 MB offset. Also it
* expects that first range uses same address for PCI (child) and CPU (parent) cells (so
* no remapping) and that this address is the lowest from all specified ranges. If these
* conditions are not met then U-Boot crashes during loading kernel DTB file. PCIe address
* space is 128 MB long, so the best split between MEM and IO is to use fixed 16 MB window
* for IO and the rest 112 MB (64+32+16) for MEM, despite that maximal IO size is just 64 kB.
* This bug is not present in U-Boot ports for other Armada 3700 devices and is fixed in
* U-Boot version 2021.07. See relevant U-Boot commits (the last one contains fix):
* https://source.denx.de/u-boot/u-boot/-/commit/cb2ddb291ee6fcbddd6d8f4ff49089dfe580f5d7
* https://source.denx.de/u-boot/u-boot/-/commit/c64ac3b3185aeb3846297ad7391fc6df8ecd73bf
* https://source.denx.de/u-boot/u-boot/-/commit/4a82fca8e330157081fc132a591ebd99ba02ee33
* Bug related to requirement of same child and parent addresses for first range is fixed
* in U-Boot version 2022.04 by following commit:
* https://source.denx.de/u-boot/u-boot/-/commit/1fd54253bca7d43d046bba4853fe5fafd034bc17
*/
#address-cells = <3>;
#size-cells = <2>;
ranges = <0x81000000 0 0xe8000000 0 0xe8000000 0 0x01000000 /* Port 0 IO */
0x82000000 0 0xe9000000 0 0xe9000000 0 0x07000000>; /* Port 0 MEM */
/* enabled by U-Boot if PCIe module is present */
status = "disabled";
};
&uart0 {
status = "okay";
};
&eth0 {
pinctrl-names = "default";
pinctrl-0 = <&rgmii_pins>;
phy-mode = "rgmii-id";
phy-handle = <&phy1>;
status = "okay";
};
&eth1 {
phy-mode = "2500base-x";
managed = "in-band-status";
phys = <&comphy0 1>;
};
&sdhci0 {
wp-inverted;
bus-width = <4>;
cd-gpios = <&gpionb 10 GPIO_ACTIVE_HIGH>;
vqmmc-supply = <&vsdc_reg>;
marvell,pad-type = "sd";
status = "okay";
};
&sdhci1 {
pinctrl-names = "default";
pinctrl-0 = <&sdio_pins>;
non-removable;
bus-width = <4>;
marvell,pad-type = "sd";
vqmmc-supply = <&vsdio_reg>;
mmc-pwrseq = <&sdhci1_pwrseq>;
/* forbid SDR104 for FCC purposes */
sdhci-caps-mask = <0x2 0x0>;
status = "okay";
};
&spi0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&spi_quad_pins &spi_cs1_pins>;
assigned-clocks = <&nb_periph_clk 7>;
assigned-clock-parents = <&tbg 1>;
assigned-clock-rates = <20000000>;
flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <20000000>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "secure-firmware";
reg = <0x0 0x20000>;
};
partition@20000 {
label = "a53-firmware";
reg = <0x20000 0x160000>;
};
partition@180000 {
label = "u-boot-env";
reg = <0x180000 0x10000>;
};
partition@190000 {
label = "Rescue system";
reg = <0x190000 0x660000>;
};
partition@7f0000 {
label = "dtb";
reg = <0x7f0000 0x10000>;
};
};
};
moxtet: moxtet@1 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "cznic,moxtet";
reg = <1>;
reset-gpios = <&gpiosb 2 GPIO_ACTIVE_LOW>;
spi-max-frequency = <10000000>;
spi-cpol;
spi-cpha;
interrupt-controller;
#interrupt-cells = <1>;
interrupt-parent = <&gpiosb>;
interrupts = <5 IRQ_TYPE_EDGE_FALLING>;
status = "okay";
moxtet_sfp: gpio@0 {
compatible = "cznic,moxtet-gpio";
gpio-controller;
#gpio-cells = <2>;
reg = <0>;
status = "disabled";
};
};
};
&usb2 {
status = "okay";
};
&comphy2 {
connector {
compatible = "usb-a-connector";
phy-supply = <&exp_usb3_vbus>;
};
};
&usb3 {
status = "okay";
phys = <&comphy2 0>;
};
&mdio {
pinctrl-names = "default";
pinctrl-0 = <&smi_pins>;
status = "okay";
phy1: ethernet-phy@1 {
reg = <1>;
};
/*
* NOTE: switch nodes are enabled by U-Boot if modules are present
* DO NOT change this node name (switch0@10) even if it is not following
* conventions! Deployed U-Boot binaries are explicitly looking for
* this node in order to augment the device tree!
* Also do not touch the "ports" or "port@n" nodes. These are also ABI.
*/
switch0@10 {
compatible = "marvell,turris-mox-mv88e6190", "marvell,mv88e6190";
reg = <0x10>;
dsa,member = <0 0>;
interrupt-parent = <&moxtet>;
interrupts = <MOXTET_IRQ_PERIDOT(0)>;
status = "disabled";
mdio {
#address-cells = <1>;
#size-cells = <0>;
switch0phy1: ethernet-phy@1 {
reg = <0x1>;
};
switch0phy2: ethernet-phy@2 {
reg = <0x2>;
};
switch0phy3: ethernet-phy@3 {
reg = <0x3>;
};
switch0phy4: ethernet-phy@4 {
reg = <0x4>;
};
switch0phy5: ethernet-phy@5 {
reg = <0x5>;
};
switch0phy6: ethernet-phy@6 {
reg = <0x6>;
};
switch0phy7: ethernet-phy@7 {
reg = <0x7>;
};
switch0phy8: ethernet-phy@8 {
reg = <0x8>;
};
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@1 {
reg = <0x1>;
label = "lan1";
phy-handle = <&switch0phy1>;
};
port@2 {
reg = <0x2>;
label = "lan2";
phy-handle = <&switch0phy2>;
};
port@3 {
reg = <0x3>;
label = "lan3";
phy-handle = <&switch0phy3>;
};
port@4 {
reg = <0x4>;
label = "lan4";
phy-handle = <&switch0phy4>;
};
port@5 {
reg = <0x5>;
label = "lan5";
phy-handle = <&switch0phy5>;
};
port@6 {
reg = <0x6>;
label = "lan6";
phy-handle = <&switch0phy6>;
};
port@7 {
reg = <0x7>;
label = "lan7";
phy-handle = <&switch0phy7>;
};
port@8 {
reg = <0x8>;
label = "lan8";
phy-handle = <&switch0phy8>;
};
port@9 {
reg = <0x9>;
label = "cpu";
ethernet = <&eth1>;
phy-mode = "2500base-x";
managed = "in-band-status";
};
switch0port10: port@a {
reg = <0xa>;
label = "dsa";
phy-mode = "2500base-x";
managed = "in-band-status";
link = <&switch1port9 &switch2port9>;
status = "disabled";
};
port-sfp@a {
reg = <0xa>;
label = "sfp";
sfp = <&sfp>;
phy-mode = "sgmii";
managed = "in-band-status";
status = "disabled";
};
};
};
/* NOTE: this node name is ABI, don't change it! */
switch0@2 {
compatible = "marvell,turris-mox-mv88e6085", "marvell,mv88e6085";
reg = <0x2>;
dsa,member = <0 0>;
interrupt-parent = <&moxtet>;
interrupts = <MOXTET_IRQ_TOPAZ>;
status = "disabled";
mdio {
#address-cells = <1>;
#size-cells = <0>;
switch0phy1_topaz: ethernet-phy@11 {
reg = <0x11>;
};
switch0phy2_topaz: ethernet-phy@12 {
reg = <0x12>;
};
switch0phy3_topaz: ethernet-phy@13 {
reg = <0x13>;
};
switch0phy4_topaz: ethernet-phy@14 {
reg = <0x14>;
};
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@1 {
reg = <0x1>;
label = "lan1";
phy-handle = <&switch0phy1_topaz>;
};
port@2 {
reg = <0x2>;
label = "lan2";
phy-handle = <&switch0phy2_topaz>;
};
port@3 {
reg = <0x3>;
label = "lan3";
phy-handle = <&switch0phy3_topaz>;
};
port@4 {
reg = <0x4>;
label = "lan4";
phy-handle = <&switch0phy4_topaz>;
};
port@5 {
reg = <0x5>;
label = "cpu";
phy-mode = "2500base-x";
managed = "in-band-status";
ethernet = <&eth1>;
};
};
};
/* NOTE: this node name is ABI, don't change it! */
switch1@11 {
compatible = "marvell,turris-mox-mv88e6190", "marvell,mv88e6190";
reg = <0x11>;
dsa,member = <0 1>;
interrupt-parent = <&moxtet>;
interrupts = <MOXTET_IRQ_PERIDOT(1)>;
status = "disabled";
mdio {
#address-cells = <1>;
#size-cells = <0>;
switch1phy1: ethernet-phy@1 {
reg = <0x1>;
};
switch1phy2: ethernet-phy@2 {
reg = <0x2>;
};
switch1phy3: ethernet-phy@3 {
reg = <0x3>;
};
switch1phy4: ethernet-phy@4 {
reg = <0x4>;
};
switch1phy5: ethernet-phy@5 {
reg = <0x5>;
};
switch1phy6: ethernet-phy@6 {
reg = <0x6>;
};
switch1phy7: ethernet-phy@7 {
reg = <0x7>;
};
switch1phy8: ethernet-phy@8 {
reg = <0x8>;
};
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@1 {
reg = <0x1>;
label = "lan9";
phy-handle = <&switch1phy1>;
};
port@2 {
reg = <0x2>;
label = "lan10";
phy-handle = <&switch1phy2>;
};
port@3 {
reg = <0x3>;
label = "lan11";
phy-handle = <&switch1phy3>;
};
port@4 {
reg = <0x4>;
label = "lan12";
phy-handle = <&switch1phy4>;
};
port@5 {
reg = <0x5>;
label = "lan13";
phy-handle = <&switch1phy5>;
};
port@6 {
reg = <0x6>;
label = "lan14";
phy-handle = <&switch1phy6>;
};
port@7 {
reg = <0x7>;
label = "lan15";
phy-handle = <&switch1phy7>;
};
port@8 {
reg = <0x8>;
label = "lan16";
phy-handle = <&switch1phy8>;
};
switch1port9: port@9 {
reg = <0x9>;
label = "dsa";
phy-mode = "2500base-x";
managed = "in-band-status";
link = <&switch0port10>;
};
switch1port10: port@a {
reg = <0xa>;
label = "dsa";
phy-mode = "2500base-x";
managed = "in-band-status";
link = <&switch2port9>;
status = "disabled";
};
port-sfp@a {
reg = <0xa>;
label = "sfp";
sfp = <&sfp>;
phy-mode = "sgmii";
managed = "in-band-status";
status = "disabled";
};
};
};
/* NOTE: this node name is ABI, don't change it! */
switch1@2 {
compatible = "marvell,turris-mox-mv88e6085", "marvell,mv88e6085";
reg = <0x2>;
dsa,member = <0 1>;
interrupt-parent = <&moxtet>;
interrupts = <MOXTET_IRQ_TOPAZ>;
status = "disabled";
mdio {
#address-cells = <1>;
#size-cells = <0>;
switch1phy1_topaz: ethernet-phy@11 {
reg = <0x11>;
};
switch1phy2_topaz: ethernet-phy@12 {
reg = <0x12>;
};
switch1phy3_topaz: ethernet-phy@13 {
reg = <0x13>;
};
switch1phy4_topaz: ethernet-phy@14 {
reg = <0x14>;
};
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@1 {
reg = <0x1>;
label = "lan9";
phy-handle = <&switch1phy1_topaz>;
};
port@2 {
reg = <0x2>;
label = "lan10";
phy-handle = <&switch1phy2_topaz>;
};
port@3 {
reg = <0x3>;
label = "lan11";
phy-handle = <&switch1phy3_topaz>;
};
port@4 {
reg = <0x4>;
label = "lan12";
phy-handle = <&switch1phy4_topaz>;
};
port@5 {
reg = <0x5>;
label = "dsa";
phy-mode = "2500base-x";
managed = "in-band-status";
link = <&switch0port10>;
};
};
};
/* NOTE: this node name is ABI, don't change it! */
switch2@12 {
compatible = "marvell,turris-mox-mv88e6190", "marvell,mv88e6190";
reg = <0x12>;
dsa,member = <0 2>;
interrupt-parent = <&moxtet>;
interrupts = <MOXTET_IRQ_PERIDOT(2)>;
status = "disabled";
mdio {
#address-cells = <1>;
#size-cells = <0>;
switch2phy1: ethernet-phy@1 {
reg = <0x1>;
};
switch2phy2: ethernet-phy@2 {
reg = <0x2>;
};
switch2phy3: ethernet-phy@3 {
reg = <0x3>;
};
switch2phy4: ethernet-phy@4 {
reg = <0x4>;
};
switch2phy5: ethernet-phy@5 {
reg = <0x5>;
};
switch2phy6: ethernet-phy@6 {
reg = <0x6>;
};
switch2phy7: ethernet-phy@7 {
reg = <0x7>;
};
switch2phy8: ethernet-phy@8 {
reg = <0x8>;
};
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@1 {
reg = <0x1>;
label = "lan17";
phy-handle = <&switch2phy1>;
};
port@2 {
reg = <0x2>;
label = "lan18";
phy-handle = <&switch2phy2>;
};
port@3 {
reg = <0x3>;
label = "lan19";
phy-handle = <&switch2phy3>;
};
port@4 {
reg = <0x4>;
label = "lan20";
phy-handle = <&switch2phy4>;
};
port@5 {
reg = <0x5>;
label = "lan21";
phy-handle = <&switch2phy5>;
};
port@6 {
reg = <0x6>;
label = "lan22";
phy-handle = <&switch2phy6>;
};
port@7 {
reg = <0x7>;
label = "lan23";
phy-handle = <&switch2phy7>;
};
port@8 {
reg = <0x8>;
label = "lan24";
phy-handle = <&switch2phy8>;
};
switch2port9: port@9 {
reg = <0x9>;
label = "dsa";
phy-mode = "2500base-x";
managed = "in-band-status";
link = <&switch1port10 &switch0port10>;
};
port-sfp@a {
reg = <0xa>;
label = "sfp";
sfp = <&sfp>;
phy-mode = "sgmii";
managed = "in-band-status";
status = "disabled";
};
};
};
/* NOTE: this node name is ABI, don't change it! */
switch2@2 {
compatible = "marvell,turris-mox-mv88e6085", "marvell,mv88e6085";
reg = <0x2>;
dsa,member = <0 2>;
interrupt-parent = <&moxtet>;
interrupts = <MOXTET_IRQ_TOPAZ>;
status = "disabled";
mdio {
#address-cells = <1>;
#size-cells = <0>;
switch2phy1_topaz: ethernet-phy@11 {
reg = <0x11>;
};
switch2phy2_topaz: ethernet-phy@12 {
reg = <0x12>;
};
switch2phy3_topaz: ethernet-phy@13 {
reg = <0x13>;
};
switch2phy4_topaz: ethernet-phy@14 {
reg = <0x14>;
};
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@1 {
reg = <0x1>;
label = "lan17";
phy-handle = <&switch2phy1_topaz>;
};
port@2 {
reg = <0x2>;
label = "lan18";
phy-handle = <&switch2phy2_topaz>;
};
port@3 {
reg = <0x3>;
label = "lan19";
phy-handle = <&switch2phy3_topaz>;
};
port@4 {
reg = <0x4>;
label = "lan20";
phy-handle = <&switch2phy4_topaz>;
};
port@5 {
reg = <0x5>;
label = "dsa";
phy-mode = "2500base-x";
managed = "in-band-status";
link = <&switch1port10 &switch0port10>;
};
};
};
};
@@ -0,0 +1,42 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/dts-v1/;
#include "armada-3720-uDPU.dtsi"
/ {
model = "Methode uDPU Board";
compatible = "methode,udpu", "marvell,armada3720", "marvell,armada3710";
sfp_eth0: sfp-eth0 {
compatible = "sff,sfp";
i2c-bus = <&i2c0>;
los-gpios = <&gpiosb 2 GPIO_ACTIVE_HIGH>;
mod-def0-gpios = <&gpiosb 3 GPIO_ACTIVE_LOW>;
tx-disable-gpios = <&gpiosb 4 GPIO_ACTIVE_HIGH>;
tx-fault-gpios = <&gpiosb 5 GPIO_ACTIVE_HIGH>;
maximum-power-milliwatt = <3000>;
};
};
&pinctrl_nb {
i2c1_recovery_pins: i2c1-recovery-pins {
groups = "i2c1";
function = "gpio";
};
};
&i2c0 {
status = "okay";
pinctrl-names = "default", "recovery";
pinctrl-0 = <&i2c1_pins>;
pinctrl-1 = <&i2c1_recovery_pins>;
/delete-property/mrvl,i2c-fast-mode;
scl-gpios = <&gpionb 0 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
sda-gpios = <&gpionb 1 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
};
&eth0 {
phy-mode = "sgmii";
sfp = <&sfp_eth0>;
};
@@ -0,0 +1,169 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Device tree for the uDPU board.
* Based on Marvell Armada 3720 development board (DB-88F3720-DDR3)
* Copyright (C) 2016 Marvell
* Copyright (C) 2019 Methode Electronics
* Copyright (C) 2019 Telus
*
* Vladimir Vid <vladimir.vid@sartura.hr>
*/
/dts-v1/;
#include <dt-bindings/gpio/gpio.h>
#include "armada-372x.dtsi"
/ {
aliases {
ethernet0 = &eth0;
ethernet1 = &eth1;
};
chosen {
stdout-path = "serial0:115200n8";
};
memory@0 {
device_type = "memory";
reg = <0x00000000 0x00000000 0x00000000 0x20000000>;
};
leds {
compatible = "gpio-leds";
pinctrl-names = "default";
pinctrl-0 = <&spi_quad_pins>;
led-power1 {
label = "udpu:green:power";
gpios = <&gpionb 11 GPIO_ACTIVE_LOW>;
};
led-power2 {
label = "udpu:red:power";
gpios = <&gpionb 12 GPIO_ACTIVE_LOW>;
};
led-network1 {
label = "udpu:green:network";
gpios = <&gpionb 13 GPIO_ACTIVE_LOW>;
};
led-network2 {
label = "udpu:red:network";
gpios = <&gpionb 14 GPIO_ACTIVE_LOW>;
};
led-alarm1 {
label = "udpu:green:alarm";
gpios = <&gpionb 15 GPIO_ACTIVE_LOW>;
};
led-alarm2 {
label = "udpu:red:alarm";
gpios = <&gpionb 16 GPIO_ACTIVE_LOW>;
};
};
sfp_eth1: sfp-eth1 {
compatible = "sff,sfp";
i2c-bus = <&i2c1>;
los-gpios = <&gpiosb 7 GPIO_ACTIVE_HIGH>;
mod-def0-gpios = <&gpiosb 8 GPIO_ACTIVE_LOW>;
tx-disable-gpios = <&gpiosb 9 GPIO_ACTIVE_HIGH>;
tx-fault-gpios = <&gpiosb 10 GPIO_ACTIVE_HIGH>;
maximum-power-milliwatt = <3000>;
};
};
&sdhci0 {
status = "okay";
bus-width = <8>;
mmc-ddr-1_8v;
mmc-hs400-1_8v;
marvell,pad-type = "fixed-1-8v";
non-removable;
no-sd;
no-sdio;
};
&spi0 {
status = "okay";
flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <54000000>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "firmware";
reg = <0x0 0x180000>;
};
partition@180000 {
label = "u-boot-env";
reg = <0x180000 0x10000>;
};
};
};
};
&spi_quad_pins {
function = "gpio";
};
&pinctrl_nb {
i2c2_recovery_pins: i2c2-recovery-pins {
groups = "i2c2";
function = "gpio";
};
};
&i2c1 {
status = "okay";
pinctrl-names = "default", "recovery";
pinctrl-0 = <&i2c2_pins>;
pinctrl-1 = <&i2c2_recovery_pins>;
/delete-property/mrvl,i2c-fast-mode;
scl-gpios = <&gpionb 2 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
sda-gpios = <&gpionb 3 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
temp-sensor@48 {
compatible = "ti,tmp75c";
reg = <0x48>;
};
temp-sensor@49 {
compatible = "ti,tmp75c";
reg = <0x49>;
};
};
&eth0 {
status = "okay";
managed = "in-band-status";
phys = <&comphy1 0>;
};
&eth1 {
phy-mode = "sgmii";
status = "okay";
managed = "in-band-status";
phys = <&comphy0 1>;
sfp = <&sfp_eth1>;
};
&usb3 {
status = "okay";
phys = <&usb2_utmi_otg_phy>;
phy-names = "usb2-phy";
};
&uart0 {
status = "okay";
};
@@ -0,0 +1,24 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Device Tree Include file for Marvell Armada 372x family of SoCs
* (also named 88F3720)
*
* Copyright (C) 2016 Marvell
*
* Gregory CLEMENT <gregory.clement@free-electrons.com>
*
*/
#include "armada-37xx.dtsi"
/ {
cpus {
cpu1: cpu@1 {
device_type = "cpu";
compatible = "arm,cortex-a53";
reg = <0x1>;
clocks = <&nb_periph_clk 16>;
enable-method = "psci";
};
};
};
@@ -0,0 +1,537 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Device Tree Include file for Marvell Armada 37xx family of SoCs.
*
* Copyright (C) 2016 Marvell
*
* Gregory CLEMENT <gregory.clement@free-electrons.com>
*
*/
#include <dt-bindings/interrupt-controller/arm-gic.h>
/ {
interrupt-parent = <&gic>;
#address-cells = <2>;
#size-cells = <2>;
aliases {
serial0 = &uart0;
serial1 = &uart1;
};
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
/*
* The PSCI firmware region depicted below is the default one
* and should be updated by the bootloader.
*/
psci-area@4000000 {
reg = <0 0x4000000 0 0x200000>;
no-map;
};
tee@4400000 {
reg = <0 0x4400000 0 0x1000000>;
no-map;
};
};
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu0: cpu@0 {
device_type = "cpu";
compatible = "arm,cortex-a53";
reg = <0>;
clocks = <&nb_periph_clk 16>;
enable-method = "psci";
};
};
psci {
compatible = "arm,psci-0.2";
method = "smc";
};
timer {
compatible = "arm,armv8-timer";
interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_HIGH>,
<GIC_PPI 14 IRQ_TYPE_LEVEL_HIGH>,
<GIC_PPI 11 IRQ_TYPE_LEVEL_HIGH>,
<GIC_PPI 10 IRQ_TYPE_LEVEL_HIGH>;
};
pmu {
compatible = "arm,cortex-a53-pmu";
interrupts = <GIC_PPI 7 IRQ_TYPE_LEVEL_HIGH>;
};
soc {
compatible = "simple-bus";
#address-cells = <2>;
#size-cells = <2>;
ranges;
bus@d0000000 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "simple-bus";
/* 32M internal register @ 0xd000_0000 */
ranges = <0x0 0x0 0xd0000000 0x2000000>;
wdt: watchdog@8300 {
compatible = "marvell,armada-3700-wdt";
reg = <0x8300 0x40>;
marvell,system-controller = <&cpu_misc>;
clocks = <&xtalclk>;
};
cpu_misc: system-controller@d000 {
compatible = "marvell,armada-3700-cpu-misc",
"syscon";
reg = <0xd000 0x1000>;
};
spi0: spi@10600 {
compatible = "marvell,armada-3700-spi";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x10600 0xA00>;
clocks = <&nb_periph_clk 7>;
interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
num-cs = <4>;
status = "disabled";
};
i2c0: i2c@11000 {
compatible = "marvell,armada-3700-i2c";
reg = <0x11000 0x24>;
#address-cells = <1>;
#size-cells = <0>;
clocks = <&nb_periph_clk 10>;
interrupts = <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
mrvl,i2c-fast-mode;
status = "disabled";
};
i2c1: i2c@11080 {
compatible = "marvell,armada-3700-i2c";
reg = <0x11080 0x24>;
#address-cells = <1>;
#size-cells = <0>;
clocks = <&nb_periph_clk 9>;
interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
mrvl,i2c-fast-mode;
status = "disabled";
};
avs: avs@11500 {
compatible = "marvell,armada-3700-avs",
"syscon";
reg = <0x11500 0x40>;
};
uartclk: clock-controller@12010 {
compatible = "marvell,armada-3700-uart-clock";
reg = <0x12010 0x4>, <0x12210 0x4>;
clocks = <&tbg 0>, <&tbg 1>, <&tbg 2>,
<&tbg 3>, <&xtalclk>;
clock-names = "TBG-A-P", "TBG-B-P", "TBG-A-S",
"TBG-B-S", "xtal";
#clock-cells = <1>;
};
uart0: serial@12000 {
compatible = "marvell,armada-3700-uart";
reg = <0x12000 0x18>;
clocks = <&uartclk 0>;
interrupts =
<GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "uart-sum", "uart-tx", "uart-rx";
status = "disabled";
};
uart1: serial@12200 {
compatible = "marvell,armada-3700-uart-ext";
reg = <0x12200 0x30>;
clocks = <&uartclk 1>;
interrupts =
<GIC_SPI 30 IRQ_TYPE_EDGE_RISING>,
<GIC_SPI 31 IRQ_TYPE_EDGE_RISING>;
interrupt-names = "uart-tx", "uart-rx";
status = "disabled";
};
nb_periph_clk: nb-periph-clk@13000 {
compatible = "marvell,armada-3700-periph-clock-nb",
"syscon";
reg = <0x13000 0x100>;
clocks = <&tbg 0>, <&tbg 1>, <&tbg 2>,
<&tbg 3>, <&xtalclk>;
#clock-cells = <1>;
};
sb_periph_clk: sb-periph-clk@18000 {
compatible = "marvell,armada-3700-periph-clock-sb";
reg = <0x18000 0x100>;
clocks = <&tbg 0>, <&tbg 1>, <&tbg 2>,
<&tbg 3>, <&xtalclk>;
#clock-cells = <1>;
};
tbg: tbg@13200 {
compatible = "marvell,armada-3700-tbg-clock";
reg = <0x13200 0x100>;
clocks = <&xtalclk>;
#clock-cells = <1>;
};
pinctrl_nb: pinctrl@13800 {
compatible = "marvell,armada3710-nb-pinctrl",
"syscon", "simple-mfd";
reg = <0x13800 0x100>, <0x13C00 0x20>;
/* MPP1[19:0] */
gpionb: gpio {
#gpio-cells = <2>;
gpio-ranges = <&pinctrl_nb 0 0 36>;
gpio-controller;
interrupt-controller;
#interrupt-cells = <2>;
interrupts =
<GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 152 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 153 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 155 IRQ_TYPE_LEVEL_HIGH>;
};
xtalclk: xtal-clk {
compatible = "marvell,armada-3700-xtal-clock";
clock-output-names = "xtal";
#clock-cells = <0>;
};
spi_quad_pins: spi-quad-pins {
groups = "spi_quad";
function = "spi";
};
spi_cs1_pins: spi-cs1-pins {
groups = "spi_cs1";
function = "spi";
};
i2c1_pins: i2c1-pins {
groups = "i2c1";
function = "i2c";
};
i2c2_pins: i2c2-pins {
groups = "i2c2";
function = "i2c";
};
uart1_pins: uart1-pins {
groups = "uart1";
function = "uart";
};
uart2_pins: uart2-pins {
groups = "uart2";
function = "uart";
};
mmc_pins: mmc-pins {
groups = "emmc_nb";
function = "emmc";
};
};
nb_pm: syscon@14000 {
compatible = "marvell,armada-3700-nb-pm",
"syscon";
reg = <0x14000 0x60>;
};
comphy: phy@18300 {
compatible = "marvell,comphy-a3700";
reg = <0x18300 0x300>,
<0x1F000 0x400>,
<0x5C000 0x400>,
<0xe0178 0x8>;
reg-names = "comphy",
"lane1_pcie_gbe",
"lane0_usb3_gbe",
"lane2_sata_usb3";
#address-cells = <1>;
#size-cells = <0>;
clocks = <&xtalclk>;
clock-names = "xtal";
comphy0: phy@0 {
reg = <0>;
#phy-cells = <1>;
};
comphy1: phy@1 {
reg = <1>;
#phy-cells = <1>;
};
comphy2: phy@2 {
reg = <2>;
#phy-cells = <1>;
};
};
pinctrl_sb: pinctrl@18800 {
compatible = "marvell,armada3710-sb-pinctrl",
"syscon", "simple-mfd";
reg = <0x18800 0x100>, <0x18C00 0x20>;
/* MPP2[23:0] */
gpiosb: gpio {
#gpio-cells = <2>;
gpio-ranges = <&pinctrl_sb 0 0 30>;
gpio-controller;
interrupt-controller;
#interrupt-cells = <2>;
interrupts =
<GIC_SPI 160 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 159 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 158 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 157 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 156 IRQ_TYPE_LEVEL_HIGH>;
};
rgmii_pins: mii-pins {
groups = "rgmii";
function = "mii";
};
smi_pins: smi-pins {
groups = "smi";
function = "smi";
};
sdio_pins: sdio-pins {
groups = "sdio_sb";
function = "sdio";
};
pcie_reset_pins: pcie-reset-pins {
groups = "pcie1"; /* this actually controls "pcie1_reset" */
function = "gpio";
};
pcie_clkreq_pins: pcie-clkreq-pins {
groups = "pcie1_clkreq";
function = "pcie";
};
};
eth0: ethernet@30000 {
compatible = "marvell,armada-3700-neta";
reg = <0x30000 0x4000>;
interrupts = <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&sb_periph_clk 8>;
status = "disabled";
};
mdio: mdio@32004 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "marvell,orion-mdio";
reg = <0x32004 0x4>;
};
eth1: ethernet@40000 {
compatible = "marvell,armada-3700-neta";
reg = <0x40000 0x4000>;
interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&sb_periph_clk 7>;
status = "disabled";
};
usb3: usb@58000 {
compatible = "marvell,armada3700-xhci",
"generic-xhci";
reg = <0x58000 0x4000>;
interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&sb_periph_clk 12>;
phys = <&usb2_utmi_otg_phy>, <&comphy0 0>;
phy-names = "usb2-phy", "usb3-phy";
status = "disabled";
};
usb2_utmi_otg_phy: phy@5d000 {
compatible = "marvell,a3700-utmi-otg-phy";
reg = <0x5d000 0x800>;
marvell,usb-misc-reg = <&usb32_syscon>;
#phy-cells = <0>;
};
usb32_syscon: system-controller@5d800 {
compatible = "marvell,armada-3700-usb2-host-device-misc",
"syscon";
reg = <0x5d800 0x800>;
};
usb2: usb@5e000 {
compatible = "marvell,armada-3700-ehci";
reg = <0x5e000 0x1000>;
interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
phys = <&usb2_utmi_host_phy>;
phy-names = "usb";
status = "disabled";
};
usb2_utmi_host_phy: phy@5f000 {
compatible = "marvell,a3700-utmi-host-phy";
reg = <0x5f000 0x800>;
marvell,usb-misc-reg = <&usb2_syscon>;
#phy-cells = <0>;
};
usb2_syscon: system-controller@5f800 {
compatible = "marvell,armada-3700-usb2-host-misc",
"syscon";
reg = <0x5f800 0x800>;
};
xor@60900 {
compatible = "marvell,armada-3700-xor";
reg = <0x60900 0x100>,
<0x60b00 0x100>;
xor10 {
interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>;
};
xor11 {
interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>;
};
};
crypto: crypto@90000 {
compatible = "marvell,armada-3700-crypto",
"inside-secure,safexcel-eip97ies";
reg = <0x90000 0x20000>;
interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "ring0", "ring1", "ring2",
"ring3", "eip", "mem";
clocks = <&nb_periph_clk 15>;
};
rwtm: mailbox@b0000 {
compatible = "marvell,armada-3700-rwtm-mailbox";
reg = <0xb0000 0x100>;
interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>;
#mbox-cells = <1>;
};
sdhci1: mmc@d0000 {
compatible = "marvell,armada-3700-sdhci",
"marvell,sdhci-xenon";
reg = <0xd0000 0x300>,
<0x1e808 0x4>;
interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&nb_periph_clk 0>;
clock-names = "core";
status = "disabled";
};
sdhci0: mmc@d8000 {
compatible = "marvell,armada-3700-sdhci",
"marvell,sdhci-xenon";
reg = <0xd8000 0x300>,
<0x17808 0x4>;
interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&nb_periph_clk 0>;
clock-names = "core";
status = "disabled";
};
sata: sata@e0000 {
compatible = "marvell,armada-3700-ahci";
reg = <0xe0000 0x178>;
interrupts = <GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&nb_periph_clk 1>;
phys = <&comphy2 0>;
phy-names = "sata-phy";
status = "disabled";
};
gic: interrupt-controller@1d00000 {
compatible = "arm,gic-v3";
#interrupt-cells = <3>;
interrupt-controller;
reg = <0x1d00000 0x10000>, /* GICD */
<0x1d40000 0x40000>, /* GICR */
<0x1d80000 0x2000>, /* GICC */
<0x1d90000 0x2000>, /* GICH */
<0x1da0000 0x20000>; /* GICV */
interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
};
};
pcie0: pcie@d0070000 {
compatible = "marvell,armada-3700-pcie";
device_type = "pci";
status = "disabled";
reg = <0 0xd0070000 0 0x20000>;
#address-cells = <3>;
#size-cells = <2>;
bus-range = <0x00 0xff>;
interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>;
#interrupt-cells = <1>;
clocks = <&sb_periph_clk 13>;
msi-parent = <&pcie0>;
msi-controller;
/*
* The 128 MiB address range [0xe8000000-0xf0000000] is
* dedicated for PCIe and can be assigned to 8 windows
* with size a power of two. Use one 64 KiB window for
* IO at the end and the remaining seven windows
* (totaling 127 MiB) for MEM.
*/
ranges = <0x82000000 0 0xe8000000 0 0xe8000000 0 0x07f00000 /* Port 0 MEM */
0x81000000 0 0x00000000 0 0xefff0000 0 0x00010000>; /* Port 0 IO */
interrupt-map-mask = <0 0 0 7>;
interrupt-map = <0 0 0 1 &pcie_intc 0>,
<0 0 0 2 &pcie_intc 1>,
<0 0 0 3 &pcie_intc 2>,
<0 0 0 4 &pcie_intc 3>;
max-link-speed = <2>;
phys = <&comphy1 0>;
pcie_intc: interrupt-controller {
interrupt-controller;
#interrupt-cells = <1>;
#address-cells = <0>;
};
};
};
firmware {
armada-3700-rwtm {
compatible = "marvell,armada-3700-rwtm-firmware";
mboxes = <&rwtm 0>;
};
};
};
@@ -0,0 +1,161 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2023 Marvell Technology Group Ltd.
*
* Device Tree file for Marvell Armada 7020 Com Express CPU module board.
*/
#include "armada-7020.dtsi"
/ {
model = "Marvell Armada-7020 COMEXPRESS board setup";
compatible = "marvell,armada7020-cpu-module", "marvell,armada7020",
"marvell,armada-ap806-dual", "marvell,armada-ap806";
memory@0 {
device_type = "memory";
reg = <0x0 0x0 0x2 0x00000000>;
};
chosen {
stdout-path = "serial0:115200n8";
};
aliases {
ethernet0 = &cp0_eth0;
ethernet1 = &cp0_eth1;
};
};
&ap_clk {
status = "okay";
};
&gic {
status = "okay";
};
&i2c0 {
status = "okay";
clock-frequency = <100000>;
};
&spi0 {
status = "okay";
};
&uart0 {
status = "okay";
};
&cp0_mdio {
status = "okay";
phy0: ethernet-phy@10 {
reg = <0x10>;
};
};
&cp0_ethernet {
status = "okay";
};
&cp0_eth0 {
status = "okay";
phy-mode = "10gbase-r";
managed = "in-band-status";
/* Generic PHY, providing serdes lanes */
phys = <&cp0_comphy4 0>;
};
&cp0_eth1 {
status = "okay";
phy-handle = <&phy0>;
phy-mode = "rgmii-id";
};
&cp0_usb3_0 {
status = "okay";
};
&cp0_usb3_1 {
status = "okay";
};
&cp0_clk {
status = "okay";
};
&cp0_i2c0 {
status = "okay";
clock-frequency = <100000>;
};
&cp0_nand_controller {
status = "okay";
nand@0 {
reg = <0>;
label = "main-storage";
nand-rb = <0>;
nand-ecc-mode = "hw";
nand-on-flash-bbt;
nand-ecc-strength = <8>;
nand-ecc-step-size = <512>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "U-Boot";
reg = <0 0x400000>;
};
partition@200000 {
label = "Linux";
reg = <0x400000 0x100000>;
};
partition@1000000 {
label = "Filesystem";
reg = <0x500000 0x1e00000>;
};
};
};
};
&cp0_pcie0 {
status = "okay";
num-lanes = <4>;
num-viewport = <8>;
ranges = <0x81000000 0x0 0xfa000000 0x0 0xfa000000 0x0 0x00010000
0x82000000 0x0 0x00000000 0x0 0xc0000000 0x0 0x30000000>;
/* Generic PHY, providing serdes lanes */
phys = <&cp0_comphy0 0
&cp0_comphy1 0
&cp0_comphy2 0
&cp0_comphy3 0>;
};
&cp0_sata0 {
/* CPM Lane 0 - U29 */
status = "okay";
sata-port@1 {
status = "okay";
/* Generic PHY, providing serdes lanes */
phys = <&cp0_comphy5 1>;
};
};
&cp0_sdhci0 {
pinctrl-names = "default";
pinctrl-0 = <&sdhci_pins>;
status = "okay";
bus-width = <4>;
no-1-8-v;
broken-cd;
};
@@ -0,0 +1,10 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2016 Marvell Technology Group Ltd.
*
* Device Tree file for the Armada 7020 SoC, made of an AP806 Dual and
* one CP110.
*/
#include "armada-ap806-dual.dtsi"
#include "armada-70x0.dtsi"
@@ -0,0 +1,307 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2016 Marvell Technology Group Ltd.
*
* Device Tree file for Marvell Armada 7040 Development board platform
*/
#include <dt-bindings/gpio/gpio.h>
#include "armada-7040.dtsi"
/ {
model = "Marvell Armada 7040 DB board";
compatible = "marvell,armada7040-db", "marvell,armada7040",
"marvell,armada-ap806-quad", "marvell,armada-ap806";
chosen {
stdout-path = "serial0:115200n8";
};
memory@0 {
device_type = "memory";
reg = <0x0 0x0 0x0 0x80000000>;
};
aliases {
ethernet0 = &cp0_eth0;
ethernet1 = &cp0_eth1;
ethernet2 = &cp0_eth2;
};
cp0_exp_usb3_0_current_regulator: gpio-regulator {
compatible = "regulator-gpio";
regulator-name = "cp0-usb3-0-current-regulator";
regulator-type = "current";
regulator-min-microamp = <500000>;
regulator-max-microamp = <900000>;
gpios = <&expander0 4 GPIO_ACTIVE_HIGH>;
states = <500000 0x0
900000 0x1>;
enable-active-high;
gpios-states = <0>;
};
cp0_exp_usb3_1_current_regulator: gpio-regulator {
compatible = "regulator-gpio";
regulator-name = "cp0-usb3-1-current-regulator";
regulator-type = "current";
regulator-min-microamp = <500000>;
regulator-max-microamp = <900000>;
gpios = <&expander0 5 GPIO_ACTIVE_HIGH>;
states = <500000 0x0
900000 0x1>;
enable-active-high;
gpios-states = <0>;
};
cp0_reg_usb3_0_vbus: cp0-usb3-0-vbus {
compatible = "regulator-fixed";
regulator-name = "usb3h0-vbus";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
enable-active-high;
gpio = <&expander0 0 GPIO_ACTIVE_HIGH>;
vin-supply = <&cp0_exp_usb3_0_current_regulator>;
};
cp0_reg_usb3_1_vbus: cp0-usb3-1-vbus {
compatible = "regulator-fixed";
regulator-name = "usb3h1-vbus";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
enable-active-high;
gpio = <&expander0 1 GPIO_ACTIVE_HIGH>;
vin-supply = <&cp0_exp_usb3_1_current_regulator>;
};
};
&i2c0 {
status = "okay";
clock-frequency = <100000>;
};
&spi0 {
status = "okay";
flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <10000000>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "U-Boot";
reg = <0 0x200000>;
};
partition@400000 {
label = "Filesystem";
reg = <0x200000 0xce0000>;
};
};
};
};
&uart0 {
status = "okay";
pinctrl-0 = <&uart0_pins>;
pinctrl-names = "default";
};
&cp0_pcie2 {
status = "okay";
phys = <&cp0_comphy5 2>;
phy-names = "cp0-pcie2-x1-phy";
};
&cp0_i2c0 {
status = "okay";
clock-frequency = <100000>;
expander0: pca9555@21 {
compatible = "nxp,pca9555";
gpio-controller;
#gpio-cells = <2>;
reg = <0x21>;
/*
* IO0_0: USB3_PWR_EN0 IO1_0: USB_3_1_Dev_Detect
* IO0_1: USB3_PWR_EN1 IO1_1: USB2_1_current_limit
* IO0_2: DDR3_4_Detect IO1_2: Hcon_IO_RstN
* IO0_3: USB2_DEVICE_DETECT
* IO0_4: GPIO_0 IO1_4: SD_Status
* IO0_5: GPIO_1 IO1_5: LDO_5V_Enable
* IO0_6: IHB_5V_Enable IO1_6: PWR_EN_eMMC
* IO0_7: IO1_7: SDIO_Vcntrl
*/
};
};
&cp0_nand_controller {
/*
* SPI on CPM and NAND have common pins on this board. We can
* use only one at a time. To enable the NAND (which will
* disable the SPI), the "status = "okay";" line have to be
* added here.
*/
pinctrl-0 = <&nand_pins>, <&nand_rb>;
pinctrl-names = "default";
nand@0 {
reg = <0>;
label = "pxa3xx_nand-0";
nand-rb = <0>;
nand-on-flash-bbt;
nand-ecc-strength = <4>;
nand-ecc-step-size = <512>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "U-Boot";
reg = <0 0x200000>;
};
partition@200000 {
label = "Linux";
reg = <0x200000 0xe00000>;
};
partition@1000000 {
label = "Filesystem";
reg = <0x1000000 0x3f000000>;
};
};
};
};
&cp0_spi1 {
status = "okay";
flash@0 {
compatible = "jedec,spi-nor";
reg = <0x0>;
spi-max-frequency = <20000000>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "U-Boot";
reg = <0x0 0x200000>;
};
partition@400000 {
label = "Filesystem";
reg = <0x200000 0xe00000>;
};
};
};
};
&cp0_sata0 {
status = "okay";
sata-port@1 {
phys = <&cp0_comphy3 1>;
status = "okay";
};
};
&cp0_utmi {
status = "okay";
};
&cp0_comphy1 {
cp0_usbh0_con: connector {
compatible = "usb-a-connector";
phy-supply = <&cp0_reg_usb3_0_vbus>;
};
};
&cp0_usb3_0 {
phys = <&cp0_comphy1 0>, <&cp0_utmi0>;
phy-names = "cp0-usb3h0-comphy", "utmi";
dr_mode = "host";
status = "okay";
};
&cp0_comphy4 {
cp0_usbh1_con: connector {
compatible = "usb-a-connector";
phy-supply = <&cp0_reg_usb3_1_vbus>;
};
};
&cp0_usb3_1 {
phys = <&cp0_comphy4 1>, <&cp0_utmi1>;
phy-names = "cp0-usb3h1-comphy", "utmi";
dr_mode = "host";
status = "okay";
};
&ap_sdhci0 {
status = "okay";
bus-width = <4>;
no-1-8-v;
non-removable;
};
&cp0_sdhci0 {
status = "okay";
bus-width = <4>;
no-1-8-v;
cd-gpios = <&expander0 12 GPIO_ACTIVE_LOW>;
};
&cp0_mdio {
status = "okay";
phy0: ethernet-phy@0 {
reg = <0>;
};
phy1: ethernet-phy@1 {
reg = <1>;
};
};
&cp0_ethernet {
status = "okay";
};
&cp0_eth0 {
status = "okay";
/* Network PHY */
phy-mode = "10gbase-r";
/* Generic PHY, providing serdes lanes */
phys = <&cp0_comphy2 0>;
fixed-link {
speed = <10000>;
full-duplex;
};
};
&cp0_eth1 {
status = "okay";
/* Network PHY */
phy = <&phy0>;
phy-mode = "sgmii";
/* Generic PHY, providing serdes lanes */
phys = <&cp0_comphy0 1>;
};
&cp0_eth2 {
status = "okay";
phy = <&phy1>;
phy-mode = "rgmii-id";
};
@@ -0,0 +1,457 @@
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
/*
* Device Tree file for Globalscale MOCHAbin
* Copyright (C) 2019 Globalscale technologies, Inc.
* Copyright (C) 2021 Sartura Ltd.
*
*/
/dts-v1/;
#include <dt-bindings/gpio/gpio.h>
#include "armada-7040.dtsi"
/ {
model = "Globalscale MOCHAbin";
compatible = "globalscale,mochabin", "marvell,armada7040",
"marvell,armada-ap806-quad", "marvell,armada-ap806";
chosen {
stdout-path = "serial0:115200n8";
};
aliases {
ethernet0 = &cp0_eth0;
ethernet1 = &cp0_eth1;
ethernet2 = &cp0_eth2;
ethernet3 = &swport1;
ethernet4 = &swport2;
ethernet5 = &swport3;
ethernet6 = &swport4;
};
/* SFP+ 10G */
sfp_eth0: sfp-eth0 {
compatible = "sff,sfp";
i2c-bus = <&cp0_i2c1>;
los-gpios = <&sfp_gpio 3 GPIO_ACTIVE_HIGH>;
mod-def0-gpios = <&sfp_gpio 2 GPIO_ACTIVE_LOW>;
tx-disable-gpios = <&sfp_gpio 1 GPIO_ACTIVE_HIGH>;
tx-fault-gpios = <&sfp_gpio 0 GPIO_ACTIVE_HIGH>;
};
/* SFP 1G */
sfp_eth2: sfp-eth2 {
compatible = "sff,sfp";
i2c-bus = <&cp0_i2c0>;
los-gpios = <&sfp_gpio 7 GPIO_ACTIVE_HIGH>;
mod-def0-gpios = <&sfp_gpio 6 GPIO_ACTIVE_LOW>;
tx-disable-gpios = <&sfp_gpio 5 GPIO_ACTIVE_HIGH>;
tx-fault-gpios = <&sfp_gpio 4 GPIO_ACTIVE_HIGH>;
};
};
/* microUSB UART console */
&uart0 {
status = "okay";
pinctrl-0 = <&uart0_pins>;
pinctrl-names = "default";
};
/* eMMC */
&ap_sdhci0 {
status = "okay";
bus-width = <4>;
non-removable;
/delete-property/ marvell,xenon-phy-slow-mode;
no-1-8-v;
};
&cp0_pinctrl {
cp0_uart0_pins: cp0-uart0-pins {
marvell,pins = "mpp6", "mpp7";
marvell,function = "uart0";
};
cp0_spi0_pins: cp0-spi0-pins {
marvell,pins = "mpp56", "mpp57", "mpp58", "mpp59";
marvell,function = "spi0";
};
cp0_spi1_pins: cp0-spi1-pins {
marvell,pins = "mpp13", "mpp14", "mpp15", "mpp16";
marvell,function = "spi1";
};
cp0_i2c0_pins: cp0-i2c0-pins {
marvell,pins = "mpp37", "mpp38";
marvell,function = "i2c0";
};
cp0_i2c1_pins: cp0-i2c1-pins {
marvell,pins = "mpp2", "mpp3";
marvell,function = "i2c1";
};
pca9554_int_pins: pca9554-int-pins {
marvell,pins = "mpp27";
marvell,function = "gpio";
};
cp0_rgmii1_pins: cp0-rgmii1-pins {
marvell,pins = "mpp44", "mpp45", "mpp46", "mpp47", "mpp48", "mpp49",
"mpp50", "mpp51", "mpp52", "mpp53", "mpp54", "mpp55";
marvell,function = "ge1";
};
is31_sdb_pins: is31-sdb-pins {
marvell,pins = "mpp30";
marvell,function = "gpio";
};
cp0_pcie_reset_pins: cp0-pcie-reset-pins {
marvell,pins = "mpp9";
marvell,function = "gpio";
};
cp0_pcie_clkreq_pins: cp0-pcie-clkreq-pins {
marvell,pins = "mpp5";
marvell,function = "pcie1";
};
cp0_switch_pins: cp0-switch-pins {
marvell,pins = "mpp0", "mpp1";
marvell,function = "gpio";
};
cp0_phy_pins: cp0-phy-pins {
marvell,pins = "mpp12";
marvell,function = "gpio";
};
};
/* mikroBUS UART */
&cp0_uart0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&cp0_uart0_pins>;
};
/* mikroBUS SPI */
&cp0_spi0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&cp0_spi0_pins>;
};
/* SPI-NOR */
&cp0_spi1 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&cp0_spi1_pins>;
flash@0 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <20000000>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "firmware";
reg = <0x0 0x3e0000>;
read-only;
};
partition@3e0000 {
label = "hw-info";
reg = <0x3e0000 0x10000>;
read-only;
};
partition@3f0000 {
label = "u-boot-env";
reg = <0x3f0000 0x10000>;
};
};
};
};
/* mikroBUS, 1G SFP and GPIO expander */
&cp0_i2c0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&cp0_i2c0_pins>;
clock-frequency = <100000>;
sfp_gpio: pca9554@39 {
compatible = "nxp,pca9554";
pinctrl-names = "default";
pinctrl-0 = <&pca9554_int_pins>;
reg = <0x39>;
interrupt-parent = <&cp0_gpio1>;
interrupts = <27 IRQ_TYPE_LEVEL_LOW>;
interrupt-controller;
#interrupt-cells = <2>;
gpio-controller;
#gpio-cells = <2>;
/*
* IO0_0: SFP+_TX_FAULT
* IO0_1: SFP+_TX_DISABLE
* IO0_2: SFP+_PRSNT
* IO0_3: SFP+_LOSS
* IO0_4: SFP_TX_FAULT
* IO0_5: SFP_TX_DISABLE
* IO0_6: SFP_PRSNT
* IO0_7: SFP_LOSS
*/
};
};
/* IS31FL3199, mini-PCIe and 10G SFP+ */
&cp0_i2c1 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&cp0_i2c1_pins>;
clock-frequency = <100000>;
leds@64 {
compatible = "issi,is31fl3199";
#address-cells = <1>;
#size-cells = <0>;
pinctrl-names = "default";
pinctrl-0 = <&is31_sdb_pins>;
shutdown-gpios = <&cp0_gpio1 30 GPIO_ACTIVE_HIGH>;
reg = <0x64>;
led1_red: led@1 {
label = "red:led1";
reg = <1>;
led-max-microamp = <20000>;
};
led1_green: led@2 {
label = "green:led1";
reg = <2>;
};
led1_blue: led@3 {
label = "blue:led1";
reg = <3>;
};
led2_red: led@4 {
label = "red:led2";
reg = <4>;
};
led2_green: led@5 {
label = "green:led2";
reg = <5>;
};
led2_blue: led@6 {
label = "blue:led2";
reg = <6>;
};
led3_red: led@7 {
label = "red:led3";
reg = <7>;
};
led3_green: led@8 {
label = "green:led3";
reg = <8>;
};
led3_blue: led@9 {
label = "blue:led3";
reg = <9>;
};
};
};
&cp0_mdio {
status = "okay";
/* 88E1512 PHY */
eth2phy: ethernet-phy@1 {
reg = <1>;
sfp = <&sfp_eth2>;
pinctrl-names = "default";
pinctrl-0 = <&cp0_phy_pins>;
reset-gpios = <&cp0_gpio1 12 GPIO_ACTIVE_LOW>;
};
/* 88E6141 Topaz switch */
switch: ethernet-switch@3 {
compatible = "marvell,mv88e6085";
reg = <3>;
pinctrl-names = "default";
pinctrl-0 = <&cp0_switch_pins>;
reset-gpios = <&cp0_gpio1 0 GPIO_ACTIVE_LOW>;
interrupt-parent = <&cp0_gpio1>;
interrupts = <1 IRQ_TYPE_LEVEL_LOW>;
ethernet-ports {
#address-cells = <1>;
#size-cells = <0>;
swport1: ethernet-port@1 {
reg = <1>;
label = "lan0";
phy-handle = <&swphy1>;
};
swport2: ethernet-port@2 {
reg = <2>;
label = "lan1";
phy-handle = <&swphy2>;
};
swport3: ethernet-port@3 {
reg = <3>;
label = "lan2";
phy-handle = <&swphy3>;
};
swport4: ethernet-port@4 {
reg = <4>;
label = "lan3";
phy-handle = <&swphy4>;
};
ethernet-port@5 {
reg = <5>;
label = "cpu";
ethernet = <&cp0_eth1>;
phy-mode = "2500base-x";
managed = "in-band-status";
};
};
mdio {
#address-cells = <1>;
#size-cells = <0>;
swphy1: ethernet-phy@17 {
reg = <17>;
};
swphy2: ethernet-phy@18 {
reg = <18>;
};
swphy3: ethernet-phy@19 {
reg = <19>;
};
swphy4: ethernet-phy@20 {
reg = <20>;
};
};
};
};
&cp0_ethernet {
status = "okay";
};
/* 10G SFP+ */
&cp0_eth0 {
status = "okay";
phy-mode = "10gbase-r";
phys = <&cp0_comphy4 0>;
managed = "in-band-status";
sfp = <&sfp_eth0>;
};
/* Topaz switch uplink */
&cp0_eth1 {
status = "okay";
phy-mode = "2500base-x";
phys = <&cp0_comphy0 1>;
fixed-link {
speed = <2500>;
full-duplex;
};
};
/* 1G SFP or 1G RJ45 */
&cp0_eth2 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&cp0_rgmii1_pins>;
phy = <&eth2phy>;
phy-mode = "rgmii-id";
};
&cp0_utmi {
status = "okay";
};
/* SMSC USB5434B hub */
&cp0_usb3_0 {
status = "okay";
phys = <&cp0_comphy1 0>, <&cp0_utmi0>;
phy-names = "cp0-usb3h0-comphy", "utmi";
};
/* miniPCI-E USB */
&cp0_usb3_1 {
status = "okay";
};
&cp0_sata0 {
status = "okay";
/* 7 + 12 SATA connector (J24) */
sata-port@0 {
phys = <&cp0_comphy2 0>;
status = "okay";
};
/* M.2-2250 B-key (J39) */
sata-port@1 {
phys = <&cp0_comphy3 1>;
status = "okay";
};
};
/* miniPCI-E (J5) */
&cp0_pcie2 {
status = "okay";
pinctrl-names = "default", "clkreq";
pinctrl-0 = <&cp0_pcie_reset_pins>;
pinctrl-1 = <&cp0_pcie_clkreq_pins>;
phys = <&cp0_comphy5 2>;
phy-names = "cp0-pcie2-x1-phy";
reset-gpios = <&cp0_gpio1 9 GPIO_ACTIVE_LOW>;
ranges = <0x82000000 0x0 0xc0000000 0x0 0xc0000000 0x0 0x8000000>;
};
@@ -0,0 +1,34 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2016 Marvell Technology Group Ltd.
*
* Device Tree file for the Armada 7040 SoC, made of an AP806 Quad and
* one CP110.
*/
#include "armada-ap806-quad.dtsi"
#include "armada-70x0.dtsi"
&cp0_pcie0 {
iommu-map =
<0x0 &smmu 0x480 0x20>,
<0x100 &smmu 0x4a0 0x20>,
<0x200 &smmu 0x4c0 0x20>;
iommu-map-mask = <0x031f>;
};
&cp0_sata0 {
iommus = <&smmu 0x444>;
};
&cp0_sdhci0 {
iommus = <&smmu 0x445>;
};
&cp0_usb3_0 {
iommus = <&smmu 0x440>;
};
&cp0_usb3_1 {
iommus = <&smmu 0x441>;
};
@@ -0,0 +1,71 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2017 Marvell Technology Group Ltd.
*
* Device Tree file for the Armada 70x0 SoC
*/
/ {
aliases {
gpio1 = &cp0_gpio1;
gpio2 = &cp0_gpio2;
spi1 = &cp0_spi0;
spi2 = &cp0_spi1;
};
};
/*
* Instantiate the CP110
*/
#define CP11X_NAME cp0
#define CP11X_BASE f2000000
#define CP11X_PCIEx_MEM_BASE(iface) (0xf6000000 + (iface * 0x1000000))
#define CP11X_PCIEx_MEM_SIZE(iface) 0xf00000
#define CP11X_PCIE0_BASE f2600000
#define CP11X_PCIE1_BASE f2620000
#define CP11X_PCIE2_BASE f2640000
#include "armada-cp110.dtsi"
#undef CP11X_NAME
#undef CP11X_BASE
#undef CP11X_PCIEx_MEM_BASE
#undef CP11X_PCIEx_MEM_SIZE
#undef CP11X_PCIE0_BASE
#undef CP11X_PCIE1_BASE
#undef CP11X_PCIE2_BASE
&cp0_gpio1 {
status = "okay";
};
&cp0_gpio2 {
status = "okay";
};
&cp0_syscon0 {
cp0_pinctrl: pinctrl {
compatible = "marvell,armada-7k-pinctrl";
sdhci_pins: sdhci-pins {
marvell,pins = "mpp56", "mpp57", "mpp58",
"mpp59", "mpp60", "mpp61", "mpp62";
marvell,function = "sdio";
};
nand_pins: nand-pins {
marvell,pins =
"mpp15", "mpp16", "mpp17", "mpp18",
"mpp19", "mpp20", "mpp21", "mpp22",
"mpp23", "mpp24", "mpp25", "mpp26",
"mpp27";
marvell,function = "dev";
};
nand_rb: nand-rb-pins {
marvell,pins = "mpp13";
marvell,function = "nf";
};
};
};
@@ -0,0 +1,610 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2018 SolidRun ltd.
* Based on Marvell MACCHIATOBin board
*
* Device Tree file for SolidRun's ClearFog GT 8K
*/
#include "armada-8040.dtsi"
#include <dt-bindings/input/input.h>
#include <dt-bindings/gpio/gpio.h>
/ {
model = "SolidRun ClearFog GT 8K";
compatible = "solidrun,clearfog-gt-8k", "marvell,armada8040",
"marvell,armada-ap806-quad", "marvell,armada-ap806";
chosen {
stdout-path = "serial0:115200n8";
};
memory@0 {
device_type = "memory";
reg = <0x0 0x0 0x0 0x80000000>;
};
aliases {
ethernet0 = &cp1_eth1;
ethernet1 = &cp0_eth0;
ethernet2 = &cp1_eth2;
};
fan: pwm {
compatible = "pwm-fan";
/* 20% steps */
cooling-levels = <0 51 102 153 204 255>;
#cooling-cells = <2>;
pinctrl-names = "default";
pinctrl-0 = <&cp0_fan_pwm_pins>;
pwms = <&cp0_gpio2 16 40000>;
};
v_3_3: regulator-3-3v {
compatible = "regulator-fixed";
regulator-name = "v_3_3";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
status = "okay";
};
v_5v0_usb3_hst_vbus: regulator-usb3-vbus0 {
compatible = "regulator-fixed";
gpio = <&cp0_gpio2 15 GPIO_ACTIVE_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&cp0_xhci_vbus_pins>;
regulator-name = "v_5v0_usb3_hst_vbus";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
status = "okay";
};
sfp_cp0_eth0: sfp-cp0-eth0 {
compatible = "sff,sfp";
i2c-bus = <&cp0_i2c1>;
mod-def0-gpios = <&cp0_gpio2 17 GPIO_ACTIVE_LOW>;
tx-disable-gpios = <&cp1_gpio1 29 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&cp0_sfp_present_pins &cp1_sfp_tx_disable_pins>;
maximum-power-milliwatt = <2000>;
};
leds {
compatible = "gpio-leds";
pinctrl-0 = <&cp0_led0_pins
&cp0_led1_pins>;
pinctrl-names = "default";
/* No designated function for these LEDs at the moment */
led0 {
label = "clearfog-gt-8k:green:led0";
gpios = <&cp0_gpio2 8 GPIO_ACTIVE_LOW>;
default-state = "on";
};
led1 {
label = "clearfog-gt-8k:green:led1";
gpios = <&cp0_gpio2 9 GPIO_ACTIVE_LOW>;
default-state = "on";
};
};
keys {
compatible = "gpio-keys";
pinctrl-0 = <&cp0_gpio_reset_pins &cp1_wps_button_pins>;
pinctrl-names = "default";
button-0 {
/* The rear button */
label = "Rear Button";
gpios = <&cp0_gpio2 7 GPIO_ACTIVE_LOW>;
linux,can-disable;
linux,code = <BTN_0>;
};
button-1 {
/* The wps button */
label = "WPS Button";
gpios = <&cp1_gpio1 30 GPIO_ACTIVE_LOW>;
linux,can-disable;
linux,code = <KEY_WPS_BUTTON>;
};
};
};
&ap_thermal_ic {
polling-delay = <1000>; /* milliseconds */
trips {
ap_active: trip-active {
temperature = <40000>; /* millicelsius */
hysteresis = <4000>; /* millicelsius */
type = "active";
};
};
cooling-maps {
map0 {
trip = <&ap_active>;
cooling-device = <&fan THERMAL_NO_LIMIT 4>;
};
map1 {
trip = <&ap_crit>;
cooling-device = <&fan 4 5>;
};
};
};
&cp0_thermal_ic {
polling-delay = <1000>; /* milliseconds */
trips {
cp0_active0: trip-active0 {
temperature = <40000>; /* millicelsius */
hysteresis = <2500>; /* millicelsius */
type = "active";
};
cp0_active1: trip-active1 {
temperature = <45000>; /* millicelsius */
hysteresis = <2500>; /* millicelsius */
type = "active";
};
cp0_active2: trip-active2 {
temperature = <50000>; /* millicelsius */
hysteresis = <2500>; /* millicelsius */
type = "active";
};
cp0_active3: trip-active3 {
temperature = <60000>; /* millicelsius */
hysteresis = <2500>; /* millicelsius */
type = "active";
};
};
cooling-maps {
map0 {
trip = <&cp0_active0>;
cooling-device = <&fan 0 1>;
};
map1 {
trip = <&cp0_active1>;
cooling-device = <&fan 1 2>;
};
map2 {
trip = <&cp0_active2>;
cooling-device = <&fan 2 3>;
};
map3 {
trip = <&cp0_active3>;
cooling-device = <&fan 3 4>;
};
map4 {
trip = <&cp0_crit>;
cooling-device = <&fan 4 5>;
};
};
};
&cp1_thermal_ic {
polling-delay = <1000>; /* milliseconds */
trips {
cp1_active0: trip-active0 {
temperature = <40000>; /* millicelsius */
hysteresis = <2500>; /* millicelsius */
type = "active";
};
cp1_active1: trip-active1 {
temperature = <45000>; /* millicelsius */
hysteresis = <2500>; /* millicelsius */
type = "active";
};
cp1_active2: trip-active2 {
temperature = <50000>; /* millicelsius */
hysteresis = <2500>; /* millicelsius */
type = "active";
};
cp1_active3: trip-active3 {
temperature = <60000>; /* millicelsius */
hysteresis = <2500>; /* millicelsius */
type = "active";
};
};
cooling-maps {
map0 {
trip = <&cp1_active0>;
cooling-device = <&fan 0 1>;
};
map1 {
trip = <&cp1_active1>;
cooling-device = <&fan 1 2>;
};
map2 {
trip = <&cp1_active2>;
cooling-device = <&fan 2 3>;
};
map3 {
trip = <&cp1_active3>;
cooling-device = <&fan 3 4>;
};
map4 {
trip = <&cp1_crit>;
cooling-device = <&fan 4 5>;
};
};
};
&uart0 {
status = "okay";
pinctrl-0 = <&uart0_pins>;
pinctrl-names = "default";
};
&ap_sdhci0 {
bus-width = <8>;
no-1-8-v;
no-sd;
no-sdio;
non-removable;
status = "okay";
vqmmc-supply = <&v_3_3>;
};
&cp0_i2c0 {
clock-frequency = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&cp0_i2c0_pins>;
status = "okay";
};
&cp0_i2c1 {
clock-frequency = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&cp0_i2c1_pins>;
status = "okay";
};
&cp0_pinctrl {
/*
* MPP Bus:
* [0-31] = 0xff: Keep default CP0_shared_pins:
* [11] CLKOUT_MPP_11 (out)
* [23] LINK_RD_IN_CP2CP (in)
* [25] CLKOUT_MPP_25 (out)
* [29] AVS_FB_IN_CP2CP (in)
* [32, 33, 34] pci0/1/2 reset
* [35-38] CP0 I2C1 and I2C0
* [39] GPIO reset button
* [40,41] LED0 and LED1
* [43] 1512 phy reset
* [47] USB VBUS EN (active low)
* [48] FAN PWM
* [49] SFP+ present signal
* [50] TPM interrupt
* [51] WLAN0 disable
* [52] WLAN1 disable
* [53] LTE disable
* [54] NFC reset
* [55] Micro SD card detect
* [56-61] Micro SD
*/
cp0_pci0_reset_pins: pci0-reset-pins {
marvell,pins = "mpp32";
marvell,function = "gpio";
};
cp0_pci1_reset_pins: pci1-reset-pins {
marvell,pins = "mpp33";
marvell,function = "gpio";
};
cp0_pci2_reset_pins: pci2-reset-pins {
marvell,pins = "mpp34";
marvell,function = "gpio";
};
cp0_i2c1_pins: i2c1-pins {
marvell,pins = "mpp35", "mpp36";
marvell,function = "i2c1";
};
cp0_i2c0_pins: i2c0-pins {
marvell,pins = "mpp37", "mpp38";
marvell,function = "i2c0";
};
cp0_gpio_reset_pins: gpio-reset-pins {
marvell,pins = "mpp39";
marvell,function = "gpio";
};
cp0_led0_pins: led0-pins {
marvell,pins = "mpp40";
marvell,function = "gpio";
};
cp0_led1_pins: led1-pins {
marvell,pins = "mpp41";
marvell,function = "gpio";
};
cp0_copper_eth_phy_reset: copper-eth-phy-reset {
marvell,pins = "mpp43";
marvell,function = "gpio";
};
cp0_xhci_vbus_pins: xhci0-vbus-pins {
marvell,pins = "mpp47";
marvell,function = "gpio";
};
cp0_fan_pwm_pins: fan-pwm-pins {
marvell,pins = "mpp48";
marvell,function = "gpio";
};
cp0_sfp_present_pins: sfp-present-pins {
marvell,pins = "mpp49";
marvell,function = "gpio";
};
cp0_tpm_irq_pins: tpm-irq-pins {
marvell,pins = "mpp50";
marvell,function = "gpio";
};
cp0_wlan_disable_pins: wlan-disable-pins {
marvell,pins = "mpp51";
marvell,function = "gpio";
};
cp0_sdhci_pins: sdhci-pins {
marvell,pins = "mpp55", "mpp56", "mpp57", "mpp58", "mpp59",
"mpp60", "mpp61";
marvell,function = "sdio";
};
};
&cp0_pcie0 {
pinctrl-names = "default";
pinctrl-0 = <&cp0_pci0_reset_pins &cp0_wlan_disable_pins>;
reset-gpios = <&cp0_gpio2 0 GPIO_ACTIVE_LOW>;
phys = <&cp0_comphy0 0>;
phy-names = "cp0-pcie0-x1-phy";
status = "okay";
};
&cp0_gpio2 {
sata-reset-hog {
gpio-hog;
gpios = <1 GPIO_ACTIVE_HIGH>;
output-high;
};
lte-reset-hog {
gpio-hog;
gpios = <2 GPIO_ACTIVE_LOW>;
output-low;
};
wlan_disable-hog {
gpio-hog;
gpios = <19 GPIO_ACTIVE_LOW>;
output-low;
};
lte-disable-hog {
gpio-hog;
gpios = <21 GPIO_ACTIVE_LOW>;
output-low;
};
};
&cp0_ethernet {
status = "okay";
};
/* SFP */
&cp0_eth0 {
status = "okay";
phy-mode = "10gbase-r";
managed = "in-band-status";
phys = <&cp0_comphy2 0>;
sfp = <&sfp_cp0_eth0>;
};
&cp0_sdhci0 {
broken-cd;
bus-width = <4>;
pinctrl-names = "default";
pinctrl-0 = <&cp0_sdhci_pins>;
status = "okay";
vqmmc-supply = <&v_3_3>;
};
&cp0_usb3_1 {
status = "okay";
};
&cp1_pinctrl {
/*
* MPP Bus:
* [0-5] TDM
* [6] VHV Enable
* [7] CP1 SPI0 CSn1 (FXS)
* [8] CP1 SPI0 CSn0 (TPM)
* [9.11]CP1 SPI0 MOSI/MISO/CLK
* [13] CP1 SPI1 MISO (TDM and SPI ROM shared)
* [14] CP1 SPI1 CS0n (64Mb SPI ROM)
* [15] CP1 SPI1 MOSI (TDM and SPI ROM shared)
* [16] CP1 SPI1 CLK (TDM and SPI ROM shared)
* [24] Topaz switch reset
* [26] Buzzer
* [27] CP1 SMI MDIO
* [28] CP1 SMI MDC
* [29] CP0 10G SFP TX Disable
* [30] WPS button
* [31] Front panel button
*/
cp1_spi1_pins: spi1-pins {
marvell,pins = "mpp13", "mpp14", "mpp15", "mpp16";
marvell,function = "spi1";
};
cp1_switch_reset_pins: switch-reset-pins {
marvell,pins = "mpp24";
marvell,function = "gpio";
};
cp1_ge_mdio_pins: ge-mdio-pins {
marvell,pins = "mpp27", "mpp28";
marvell,function = "ge";
};
cp1_sfp_tx_disable_pins: sfp-tx-disable-pins {
marvell,pins = "mpp29";
marvell,function = "gpio";
};
cp1_wps_button_pins: wps-button-pins {
marvell,pins = "mpp30";
marvell,function = "gpio";
};
};
&cp1_sata0 {
pinctrl-0 = <&cp0_pci1_reset_pins>;
status = "okay";
sata-port@1 {
phys = <&cp1_comphy0 1>;
status = "okay";
};
};
&cp1_mdio {
pinctrl-names = "default";
pinctrl-0 = <&cp1_ge_mdio_pins>;
status = "okay";
ge_phy: ethernet-phy@0 {
/* LED0 - GB link
* LED1 - on: link, blink: activity
*/
marvell,reg-init = <3 16 0 0x1017>;
reg = <0>;
pinctrl-names = "default";
pinctrl-0 = <&cp0_copper_eth_phy_reset>;
reset-gpios = <&cp0_gpio2 11 GPIO_ACTIVE_LOW>;
reset-assert-us = <10000>;
reset-deassert-us = <10000>;
};
switch0: ethernet-switch@4 {
compatible = "marvell,mv88e6085";
reg = <4>;
pinctrl-names = "default";
pinctrl-0 = <&cp1_switch_reset_pins>;
reset-gpios = <&cp1_gpio1 24 GPIO_ACTIVE_LOW>;
ethernet-ports {
#address-cells = <1>;
#size-cells = <0>;
ethernet-port@1 {
reg = <1>;
label = "lan2";
phy-handle = <&switch0phy0>;
};
ethernet-port@2 {
reg = <2>;
label = "lan1";
phy-handle = <&switch0phy1>;
};
ethernet-port@3 {
reg = <3>;
label = "lan4";
phy-handle = <&switch0phy2>;
};
ethernet-port@4 {
reg = <4>;
label = "lan3";
phy-handle = <&switch0phy3>;
};
ethernet-port@5 {
reg = <5>;
label = "cpu";
ethernet = <&cp1_eth2>;
phy-mode = "2500base-x";
managed = "in-band-status";
};
};
mdio {
#address-cells = <1>;
#size-cells = <0>;
switch0phy0: ethernet-phy@11 {
reg = <0x11>;
};
switch0phy1: ethernet-phy@12 {
reg = <0x12>;
};
switch0phy2: ethernet-phy@13 {
reg = <0x13>;
};
switch0phy3: ethernet-phy@14 {
reg = <0x14>;
};
};
};
};
&cp1_ethernet {
status = "okay";
};
/* 1G copper */
&cp1_eth1 {
status = "okay";
phy-mode = "sgmii";
phy = <&ge_phy>;
phys = <&cp1_comphy3 1>;
};
/* Switch uplink */
&cp1_eth2 {
status = "okay";
phy-mode = "2500base-x";
phys = <&cp1_comphy5 2>;
managed = "in-band-status";
};
&cp1_spi1 {
pinctrl-names = "default";
pinctrl-0 = <&cp1_spi1_pins>;
status = "okay";
flash@0 {
compatible = "st,w25q32";
spi-max-frequency = <50000000>;
reg = <0>;
};
};
&cp1_comphy2 {
cp1_usbh0_con: connector {
compatible = "usb-a-connector";
phy-supply = <&v_5v0_usb3_hst_vbus>;
};
};
&cp1_usb3_0 {
phys = <&cp1_comphy2 0>;
phy-names = "cp1-usb3h0-comphy";
status = "okay";
};
@@ -0,0 +1,374 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2016 Marvell Technology Group Ltd.
*
* Device Tree file for Marvell Armada 8040 Development board platform
*/
#include <dt-bindings/gpio/gpio.h>
#include "armada-8040.dtsi"
/ {
model = "Marvell Armada 8040 DB board";
compatible = "marvell,armada8040-db", "marvell,armada8040",
"marvell,armada-ap806-quad", "marvell,armada-ap806";
chosen {
stdout-path = "serial0:115200n8";
};
memory@0 {
device_type = "memory";
reg = <0x0 0x0 0x0 0x80000000>;
};
aliases {
ethernet0 = &cp0_eth0;
ethernet1 = &cp0_eth2;
ethernet2 = &cp1_eth0;
ethernet3 = &cp1_eth1;
i2c1 = &cp0_i2c0;
i2c2 = &cp1_i2c0;
};
cp0_reg_usb3_0_vbus: cp0-usb3-0-vbus {
compatible = "regulator-fixed";
regulator-name = "cp0-usb3h0-vbus";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
enable-active-high;
gpio = <&expander0 0 GPIO_ACTIVE_HIGH>;
};
cp0_reg_usb3_1_vbus: cp0-usb3-1-vbus {
compatible = "regulator-fixed";
regulator-name = "cp0-usb3h1-vbus";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
enable-active-high;
gpio = <&expander0 1 GPIO_ACTIVE_HIGH>;
};
cp0_usb3_0_phy: cp0-usb3-0-phy {
compatible = "usb-nop-xceiv";
#phy-cells = <0>;
vcc-supply = <&cp0_reg_usb3_0_vbus>;
};
cp1_reg_usb3_0_vbus: cp1-usb3-0-vbus {
compatible = "regulator-fixed";
regulator-name = "cp1-usb3h0-vbus";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
enable-active-high;
gpio = <&expander1 0 GPIO_ACTIVE_HIGH>;
};
cp1_usb3_0_phy: cp1-usb3-0-phy {
compatible = "usb-nop-xceiv";
#phy-cells = <0>;
vcc-supply = <&cp1_reg_usb3_0_vbus>;
};
};
&spi0 {
status = "okay";
flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <10000000>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "U-Boot";
reg = <0 0x200000>;
};
partition@400000 {
label = "Filesystem";
reg = <0x200000 0xce0000>;
};
};
};
};
/* Accessible over the mini-USB CON9 connector on the main board */
&uart0 {
status = "okay";
pinctrl-0 = <&uart0_pins>;
pinctrl-names = "default";
};
/* CON6 on CP0 expansion */
&cp0_pcie0 {
phys = <&cp0_comphy0 0>;
phy-names = "cp0-pcie0-x1-phy";
status = "okay";
};
/* CON5 on CP0 expansion */
&cp0_pcie2 {
phys = <&cp0_comphy5 2>;
phy-names = "cp0-pcie2-x1-phy";
status = "okay";
};
&cp0_i2c0 {
status = "okay";
clock-frequency = <100000>;
/* U31 */
expander0: pca9555@21 {
compatible = "nxp,pca9555";
gpio-controller;
#gpio-cells = <2>;
reg = <0x21>;
};
/* U25 */
expander1: pca9555@25 {
compatible = "nxp,pca9555";
gpio-controller;
#gpio-cells = <2>;
reg = <0x25>;
};
};
/* CON4 on CP0 expansion */
&cp0_sata0 {
status = "okay";
sata-port@0 {
phys = <&cp0_comphy1 0>;
status = "okay";
};
sata-port@1 {
phys = <&cp0_comphy3 1>;
status = "okay";
};
};
/* CON9 on CP0 expansion */
&cp0_utmi {
status = "okay";
};
&cp0_usb3_0 {
usb-phy = <&cp0_usb3_0_phy>;
phys = <&cp0_utmi0>;
phy-names = "utmi";
dr_mode = "host";
status = "okay";
};
&cp0_comphy4 {
cp0_usbh1_con: connector {
compatible = "usb-a-connector";
phy-supply = <&cp0_reg_usb3_1_vbus>;
};
};
/* CON10 on CP0 expansion */
&cp0_usb3_1 {
phys = <&cp0_comphy4 1>, <&cp0_utmi1>;
phy-names = "usb", "utmi";
dr_mode = "host";
status = "okay";
};
&cp0_mdio {
status = "okay";
phy1: ethernet-phy@1 {
reg = <1>;
};
};
&cp0_ethernet {
status = "okay";
};
&cp0_eth0 {
status = "okay";
phy-mode = "10gbase-r";
fixed-link {
speed = <10000>;
full-duplex;
};
};
&cp0_eth2 {
status = "okay";
phy = <&phy1>;
phy-mode = "rgmii-id";
};
/* CON6 on CP1 expansion */
&cp1_pcie0 {
phys = <&cp1_comphy0 0>;
phy-names = "cp1-pcie0-x1-phy";
status = "okay";
};
/* CON7 on CP1 expansion */
&cp1_pcie1 {
phys = <&cp1_comphy4 1>;
phy-names = "cp1-pcie1-x1-phy";
status = "okay";
};
/* CON5 on CP1 expansion */
&cp1_pcie2 {
phys = <&cp1_comphy5 2>;
phy-names = "cp1-pcie2-x1-phy";
status = "okay";
};
&cp1_i2c0 {
status = "okay";
clock-frequency = <100000>;
};
&cp1_spi1 {
status = "okay";
flash@0 {
compatible = "jedec,spi-nor";
reg = <0x0>;
spi-max-frequency = <20000000>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "Boot";
reg = <0x0 0x200000>;
};
partition@200000 {
label = "Filesystem";
reg = <0x200000 0xd00000>;
};
partition@f00000 {
label = "Boot_2nd";
reg = <0xf00000 0x100000>;
};
};
};
};
/*
* Proper NAND usage will require DPR-76 to be in position 1-2, which disables
* MDIO signal of CP1.
*/
&cp1_nand_controller {
pinctrl-0 = <&nand_pins>, <&nand_rb>;
pinctrl-names = "default";
nand@0 {
reg = <0>;
nand-rb = <0>;
nand-on-flash-bbt;
nand-ecc-strength = <4>;
nand-ecc-step-size = <512>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "U-Boot";
reg = <0 0x200000>;
};
partition@200000 {
label = "Linux";
reg = <0x200000 0xe00000>;
};
partition@1000000 {
label = "Filesystem";
reg = <0x1000000 0x3f000000>;
};
};
};
};
/* CON4 on CP1 expansion */
&cp1_sata0 {
status = "okay";
sata-port@0 {
phys = <&cp1_comphy1 0>;
};
sata-port@1 {
phys = <&cp1_comphy3 1>;
};
};
&cp1_utmi {
status = "okay";
};
/* CON9 on CP1 expansion */
&cp1_usb3_0 {
usb-phy = <&cp1_usb3_0_phy>;
phys = <&cp1_utmi0>;
phy-names = "utmi";
dr_mode = "host";
status = "okay";
};
/* CON10 on CP1 expansion */
&cp1_usb3_1 {
phys = <&cp1_utmi1>;
phy-names = "utmi";
status = "okay";
};
&cp1_mdio {
status = "okay";
phy0: ethernet-phy@0 {
reg = <0>;
};
};
&cp1_ethernet {
status = "okay";
};
&cp1_eth0 {
status = "okay";
phy-mode = "10gbase-r";
fixed-link {
speed = <10000>;
full-duplex;
};
};
&cp1_eth1 {
status = "okay";
phy = <&phy0>;
phy-mode = "rgmii-id";
};
&ap_sdhci0 {
status = "okay";
bus-width = <4>;
non-removable;
};
&cp0_sdhci0 {
status = "okay";
bus-width = <8>;
non-removable;
};
@@ -0,0 +1,51 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2016 Marvell Technology Group Ltd.
*
* Device Tree file for MACCHIATOBin Armada 8040 community board platform
*/
#include <dt-bindings/leds/common.h>
#include "armada-8040-mcbin.dtsi"
/ {
model = "Marvell 8040 MACCHIATOBin Single-shot";
compatible = "marvell,armada8040-mcbin-singleshot",
"marvell,armada8040-mcbin", "marvell,armada8040",
"marvell,armada-ap806-quad", "marvell,armada-ap806";
leds {
compatible = "gpio-leds";
pinctrl-0 = <&cp0_led18_pins>;
pinctrl-names = "default";
led18 {
gpios = <&cp0_gpio2 1 GPIO_ACTIVE_LOW>;
function = LED_FUNCTION_HEARTBEAT;
color = <LED_COLOR_ID_GREEN>;
linux,default-trigger = "heartbeat";
};
};
};
&cp0_eth0 {
status = "okay";
phy-mode = "10gbase-r";
managed = "in-band-status";
sfp = <&sfp_eth0>;
};
&cp1_eth0 {
status = "okay";
phy-mode = "10gbase-r";
managed = "in-band-status";
sfp = <&sfp_eth1>;
};
&cp0_pinctrl {
cp0_led18_pins: led18-pins {
marvell,pins = "mpp33";
marvell,function = "gpio";
};
};
@@ -0,0 +1,45 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2016 Marvell Technology Group Ltd.
*
* Device Tree file for MACCHIATOBin Armada 8040 community board platform
*/
#include "armada-8040-mcbin.dtsi"
/ {
model = "Marvell 8040 MACCHIATOBin Double-shot";
compatible = "marvell,armada8040-mcbin-doubleshot",
"marvell,armada8040-mcbin", "marvell,armada8040",
"marvell,armada-ap806-quad", "marvell,armada-ap806";
};
&cp0_xmdio {
status = "okay";
phy0: ethernet-phy@0 {
compatible = "ethernet-phy-ieee802.3-c45";
reg = <0>;
sfp = <&sfp_eth0>;
};
phy8: ethernet-phy@8 {
compatible = "ethernet-phy-ieee802.3-c45";
reg = <8>;
sfp = <&sfp_eth1>;
};
};
&cp0_eth0 {
status = "okay";
/* Network PHY */
phy = <&phy0>;
phy-mode = "10gbase-r";
};
&cp1_eth0 {
status = "okay";
/* Network PHY */
phy = <&phy8>;
phy-mode = "10gbase-r";
};
@@ -0,0 +1,387 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2016 Marvell Technology Group Ltd.
*
* Device Tree file for MACCHIATOBin Armada 8040 community board platform
*/
#include "armada-8040.dtsi"
#include <dt-bindings/gpio/gpio.h>
/ {
model = "Marvell 8040 MACCHIATOBin";
compatible = "marvell,armada8040-mcbin", "marvell,armada8040",
"marvell,armada-ap806-quad", "marvell,armada-ap806";
chosen {
stdout-path = "serial0:115200n8";
};
memory@0 {
device_type = "memory";
reg = <0x0 0x0 0x0 0x80000000>;
};
aliases {
ethernet0 = &cp0_eth0;
ethernet1 = &cp1_eth0;
ethernet2 = &cp1_eth1;
ethernet3 = &cp1_eth2;
};
/* Regulator labels correspond with schematics */
v_3_3: regulator-3-3v {
compatible = "regulator-fixed";
regulator-name = "v_3_3";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
status = "okay";
};
v_vddo_h: regulator-1-8v {
compatible = "regulator-fixed";
regulator-name = "v_vddo_h";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
status = "okay";
};
v_5v0_usb3_hst_vbus: regulator-usb3-vbus0 {
compatible = "regulator-fixed";
enable-active-high;
gpio = <&cp0_gpio2 15 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&cp0_xhci_vbus_pins>;
regulator-name = "v_5v0_usb3_hst_vbus";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
status = "okay";
};
sfp_eth0: sfp-eth0 {
/* CON15,16 - CPM lane 4 */
compatible = "sff,sfp";
i2c-bus = <&sfpp0_i2c>;
los-gpios = <&cp1_gpio1 28 GPIO_ACTIVE_HIGH>;
mod-def0-gpios = <&cp1_gpio1 27 GPIO_ACTIVE_LOW>;
tx-disable-gpios = <&cp1_gpio1 29 GPIO_ACTIVE_HIGH>;
tx-fault-gpios = <&cp1_gpio1 26 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&cp1_sfpp0_pins>;
maximum-power-milliwatt = <2000>;
};
sfp_eth1: sfp-eth1 {
/* CON17,18 - CPS lane 4 */
compatible = "sff,sfp";
i2c-bus = <&sfpp1_i2c>;
los-gpios = <&cp1_gpio1 8 GPIO_ACTIVE_HIGH>;
mod-def0-gpios = <&cp1_gpio1 11 GPIO_ACTIVE_LOW>;
tx-disable-gpios = <&cp1_gpio1 10 GPIO_ACTIVE_HIGH>;
tx-fault-gpios = <&cp0_gpio2 30 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&cp1_sfpp1_pins &cp0_sfpp1_pins>;
maximum-power-milliwatt = <2000>;
};
sfp_eth3: sfp-eth3 {
/* CON13,14 - CPS lane 5 */
compatible = "sff,sfp";
i2c-bus = <&sfp_1g_i2c>;
los-gpios = <&cp0_gpio2 22 GPIO_ACTIVE_HIGH>;
mod-def0-gpios = <&cp0_gpio2 21 GPIO_ACTIVE_LOW>;
tx-disable-gpios = <&cp1_gpio1 24 GPIO_ACTIVE_HIGH>;
tx-fault-gpios = <&cp0_gpio2 19 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&cp0_sfp_1g_pins &cp1_sfp_1g_pins>;
maximum-power-milliwatt = <2000>;
};
};
&uart0 {
status = "okay";
pinctrl-0 = <&uart0_pins>;
pinctrl-names = "default";
};
&ap_sdhci0 {
bus-width = <8>;
/*
* Not stable in HS modes - phy needs "more calibration", so add
* the "slow-mode" and disable SDR104, SDR50 and DDR50 modes.
*/
marvell,xenon-phy-slow-mode;
no-1-8-v;
no-sd;
no-sdio;
non-removable;
status = "okay";
vqmmc-supply = <&v_vddo_h>;
};
&cp0_i2c0 {
clock-frequency = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&cp0_i2c0_pins>;
status = "okay";
};
&cp0_i2c1 {
clock-frequency = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&cp0_i2c1_pins>;
status = "okay";
i2c-mux@70 {
compatible = "nxp,pca9548";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x70>;
sfpp0_i2c: i2c@0 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0>;
};
sfpp1_i2c: i2c@1 {
#address-cells = <1>;
#size-cells = <0>;
reg = <1>;
};
sfp_1g_i2c: i2c@2 {
#address-cells = <1>;
#size-cells = <0>;
reg = <2>;
};
};
};
/* J25 UART header */
&cp0_uart1 {
pinctrl-names = "default";
pinctrl-0 = <&cp0_uart1_pins>;
status = "okay";
};
&cp0_mdio {
pinctrl-names = "default";
pinctrl-0 = <&cp0_ge_mdio_pins>;
status = "okay";
ge_phy: ethernet-phy@0 {
reg = <0>;
};
};
&cp0_pcie0 {
pinctrl-names = "default";
pinctrl-0 = <&cp0_pcie_pins>;
num-lanes = <4>;
num-viewport = <8>;
reset-gpios = <&cp0_gpio2 20 GPIO_ACTIVE_LOW>;
ranges = <0x82000000 0x0 0xc0000000 0x0 0xc0000000 0x0 0x20000000>;
phys = <&cp0_comphy0 0>, <&cp0_comphy1 0>,
<&cp0_comphy2 0>, <&cp0_comphy3 0>;
phy-names = "cp0-pcie0-x4-lane0-phy", "cp0-pcie0-x4-lane1-phy",
"cp0-pcie0-x4-lane2-phy", "cp0-pcie0-x4-lane3-phy";
status = "okay";
};
&cp0_pinctrl {
cp0_ge_mdio_pins: ge-mdio-pins {
marvell,pins = "mpp32", "mpp34";
marvell,function = "ge";
};
cp0_i2c1_pins: i2c1-pins {
marvell,pins = "mpp35", "mpp36";
marvell,function = "i2c1";
};
cp0_i2c0_pins: i2c0-pins {
marvell,pins = "mpp37", "mpp38";
marvell,function = "i2c0";
};
cp0_uart1_pins: uart1-pins {
marvell,pins = "mpp40", "mpp41";
marvell,function = "uart1";
};
cp0_xhci_vbus_pins: xhci0-vbus-pins {
marvell,pins = "mpp47";
marvell,function = "gpio";
};
cp0_sfp_1g_pins: sfp-1g-pins {
marvell,pins = "mpp51", "mpp53", "mpp54";
marvell,function = "gpio";
};
cp0_pcie_pins: pcie-pins {
marvell,pins = "mpp52";
marvell,function = "gpio";
};
cp0_sdhci_pins: sdhci-pins {
marvell,pins = "mpp55", "mpp56", "mpp57", "mpp58", "mpp59",
"mpp60", "mpp61";
marvell,function = "sdio";
};
cp0_sfpp1_pins: sfpp1-pins {
marvell,pins = "mpp62";
marvell,function = "gpio";
};
};
&cp0_ethernet {
status = "okay";
};
&cp0_eth0 {
/* Generic PHY, providing serdes lanes */
phys = <&cp0_comphy4 0>;
};
&cp0_sata0 {
status = "okay";
/* CPM Lane 5 - U29 */
sata-port@1 {
phys = <&cp0_comphy5 1>;
status = "okay";
};
};
&cp0_sdhci0 {
/* U6 */
broken-cd;
bus-width = <4>;
pinctrl-names = "default";
pinctrl-0 = <&cp0_sdhci_pins>;
status = "okay";
vqmmc-supply = <&v_3_3>;
};
&cp0_utmi {
status = "okay";
};
&cp0_usb3_0 {
/* J38? - USB2.0 only */
phys = <&cp0_utmi0>;
phy-names = "utmi";
dr_mode = "host";
status = "okay";
};
&cp0_usb3_1 {
/* J38? - USB2.0 only */
phys = <&cp0_utmi1>;
phy-names = "utmi";
dr_mode = "host";
status = "okay";
};
&cp1_ethernet {
status = "okay";
};
&cp1_eth0 {
/* Generic PHY, providing serdes lanes */
phys = <&cp1_comphy4 0>;
};
&cp1_eth1 {
/* CPS Lane 0 - J5 (Gigabit RJ45) */
status = "okay";
/* Network PHY */
phy = <&ge_phy>;
phy-mode = "sgmii";
/* Generic PHY, providing serdes lanes */
phys = <&cp1_comphy0 1>;
};
&cp1_eth2 {
/* CPS Lane 5 */
status = "okay";
/* Network PHY */
phy-mode = "2500base-x";
managed = "in-band-status";
/* Generic PHY, providing serdes lanes */
phys = <&cp1_comphy5 2>;
sfp = <&sfp_eth3>;
};
&cp1_pinctrl {
cp1_sfpp1_pins: sfpp1-pins {
marvell,pins = "mpp8", "mpp10", "mpp11";
marvell,function = "gpio";
};
cp1_spi1_pins: spi1-pins {
marvell,pins = "mpp12", "mpp13", "mpp14", "mpp15", "mpp16";
marvell,function = "spi1";
};
cp1_uart0_pins: uart0-pins {
marvell,pins = "mpp6", "mpp7";
marvell,function = "uart0";
};
cp1_sfp_1g_pins: sfp-1g-pins {
marvell,pins = "mpp24";
marvell,function = "gpio";
};
cp1_sfpp0_pins: sfpp0-pins {
marvell,pins = "mpp26", "mpp27", "mpp28", "mpp29";
marvell,function = "gpio";
};
};
/* J27 UART header */
&cp1_uart0 {
pinctrl-names = "default";
pinctrl-0 = <&cp1_uart0_pins>;
status = "okay";
};
&cp1_sata0 {
status = "okay";
/* CPS Lane 1 - U32 */
sata-port@0 {
phys = <&cp1_comphy1 0>;
status = "okay";
};
/* CPS Lane 3 - U31 */
sata-port@1 {
phys = <&cp1_comphy3 1>;
status = "okay";
};
};
&cp1_spi1 {
pinctrl-names = "default";
pinctrl-0 = <&cp1_spi1_pins>;
status = "okay";
flash@0 {
compatible = "st,w25q32";
spi-max-frequency = <50000000>;
reg = <0>;
};
};
&cp1_comphy2 {
cp1_usbh0_con: connector {
compatible = "usb-a-connector";
phy-supply = <&v_5v0_usb3_hst_vbus>;
};
};
&cp1_utmi {
status = "okay";
};
&cp1_usb3_0 {
/* CPS Lane 2 - CON7 */
phys = <&cp1_comphy2 0>, <&cp1_utmi0>;
phy-names = "cp1-usb3h0-comphy", "utmi";
dr_mode = "host";
status = "okay";
};
@@ -0,0 +1,523 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2016 Marvell Technology Group Ltd.
* Copyright (C) 2020 Sartura Ltd.
*
* Device Tree file for IEI Puzzle-M801
*/
#include "armada-8040.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/leds/common.h>
/ {
model = "IEI-Puzzle-M801";
compatible = "iei,puzzle-m801", "marvell,armada8040", "marvell,armada-ap806-quad", "marvell,armada-ap806";
aliases {
ethernet0 = &cp0_eth0;
ethernet1 = &cp1_eth0;
ethernet2 = &cp0_eth1;
ethernet3 = &cp0_eth2;
ethernet4 = &cp1_eth1;
ethernet5 = &cp1_eth2;
};
chosen {
stdout-path = "serial0:115200n8";
};
memory@0 {
device_type = "memory";
reg = <0x0 0x0 0x0 0x80000000>;
};
/* Regulator labels correspond with schematics */
v_3_3: regulator-3-3v {
compatible = "regulator-fixed";
regulator-name = "v_3_3";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
status = "okay";
};
v_5v0_usb3_hst_vbus: regulator-usb3-vbus0 {
compatible = "regulator-fixed";
enable-active-high;
gpio = <&cp0_gpio2 15 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&cp0_xhci_vbus_pins>;
regulator-name = "v_5v0_usb3_hst_vbus";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
status = "okay";
};
v_vddo_h: regulator-1-8v {
compatible = "regulator-fixed";
regulator-name = "v_vddo_h";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
status = "okay";
};
sfp_cp0_eth0: sfp-cp0-eth0 {
compatible = "sff,sfp";
i2c-bus = <&sfpplus0_i2c>;
los-gpios = <&sfpplus_gpio 11 GPIO_ACTIVE_HIGH>;
mod-def0-gpios = <&sfpplus_gpio 10 GPIO_ACTIVE_LOW>;
tx-disable-gpios = <&sfpplus_gpio 9 GPIO_ACTIVE_HIGH>;
tx-fault-gpios = <&sfpplus_gpio 8 GPIO_ACTIVE_HIGH>;
maximum-power-milliwatt = <3000>;
};
sfp_cp1_eth0: sfp-cp1-eth0 {
compatible = "sff,sfp";
i2c-bus = <&sfpplus1_i2c>;
los-gpios = <&sfpplus_gpio 3 GPIO_ACTIVE_HIGH>;
mod-def0-gpios = <&sfpplus_gpio 2 GPIO_ACTIVE_LOW>;
tx-disable-gpios = <&sfpplus_gpio 1 GPIO_ACTIVE_HIGH>;
tx-fault-gpios = <&sfpplus_gpio 0 GPIO_ACTIVE_HIGH>;
maximum-power-milliwatt = <3000>;
};
leds {
compatible = "gpio-leds";
status = "okay";
pinctrl-0 = <&cp0_sfpplus_led_pins &cp1_sfpplus_led_pins>;
pinctrl-names = "default";
led-0 {
/* SFP+ port 2: Activity */
function = LED_FUNCTION_LAN;
function-enumerator = <0>;
gpios = <&cp1_gpio1 6 GPIO_ACTIVE_LOW>;
};
led-1 {
/* SFP+ port 1: Activity */
function = LED_FUNCTION_LAN;
function-enumerator = <1>;
gpios = <&cp1_gpio1 14 GPIO_ACTIVE_LOW>;
};
led-2 {
/* SFP+ port 2: 10 Gbps indicator */
function = LED_FUNCTION_LAN;
function-enumerator = <2>;
gpios = <&cp1_gpio1 7 GPIO_ACTIVE_LOW>;
};
led-3 {
/* SFP+ port 2: 1 Gbps indicator */
function = LED_FUNCTION_LAN;
function-enumerator = <3>;
gpios = <&cp1_gpio1 8 GPIO_ACTIVE_LOW>;
};
led-4 {
/* SFP+ port 1: 10 Gbps indicator */
function = LED_FUNCTION_LAN;
function-enumerator = <4>;
gpios = <&cp1_gpio1 10 GPIO_ACTIVE_LOW>;
};
led-5 {
/* SFP+ port 1: 1 Gbps indicator */
function = LED_FUNCTION_LAN;
function-enumerator = <5>;
gpios = <&cp1_gpio1 31 GPIO_ACTIVE_LOW>;
};
led-6 {
function = LED_FUNCTION_DISK;
linux,default-trigger = "disk-activity";
gpios = <&cp0_gpio2 22 GPIO_ACTIVE_HIGH>;
};
};
};
&ap_sdhci0 {
bus-width = <8>;
/*
* Not stable in HS modes - phy needs "more calibration", so add
* the "slow-mode" and disable SDR104, SDR50 and DDR50 modes.
*/
marvell,xenon-phy-slow-mode;
no-1-8-v;
no-sd;
no-sdio;
non-removable;
status = "okay";
vqmmc-supply = <&v_vddo_h>;
};
&ap_thermal_cpu1 {
trips {
cpu_active: cpu-active {
temperature = <44000>;
hysteresis = <2000>;
type = "active";
};
};
cooling-maps {
fan-map {
trip = <&cpu_active>;
cooling-device = <&chassis_fan_group0 64 THERMAL_NO_LIMIT>,
<&chassis_fan_group1 64 THERMAL_NO_LIMIT>;
};
};
};
&i2c0 {
clock-frequency = <100000>;
status = "okay";
rtc@32 {
compatible = "epson,rx8010";
reg = <0x32>;
};
};
&spi0 {
status = "okay";
flash@0 {
#address-cells = <0x1>;
#size-cells = <0x1>;
compatible = "jedec,spi-nor";
reg = <0x0>;
spi-max-frequency = <20000000>;
partition@u-boot {
label = "u-boot";
reg = <0x00000000 0x001f0000>;
};
partition@u-boot-env {
label = "u-boot-env";
reg = <0x001f0000 0x00010000>;
};
partition@ubi1 {
label = "ubi1";
reg = <0x00200000 0x03f00000>;
};
partition@ubi2 {
label = "ubi2";
reg = <0x04100000 0x03f00000>;
};
};
};
&uart0 {
status = "okay";
pinctrl-0 = <&uart0_pins>;
pinctrl-names = "default";
};
&uart1 {
status = "okay";
/* IEI WT61P803 PUZZLE MCU Controller */
mcu {
compatible = "iei,wt61p803-puzzle";
current-speed = <115200>;
enable-beep;
leds {
compatible = "iei,wt61p803-puzzle-leds";
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
function = LED_FUNCTION_POWER;
color = <LED_COLOR_ID_BLUE>;
};
};
hwmon {
compatible = "iei,wt61p803-puzzle-hwmon";
#address-cells = <1>;
#size-cells = <0>;
chassis_fan_group0:fan-group@0 {
#cooling-cells = <2>;
reg = <0x00>;
cooling-levels = <64 102 170 230 250>;
};
chassis_fan_group1:fan-group@1 {
#cooling-cells = <2>;
reg = <0x01>;
cooling-levels = <64 102 170 230 250>;
};
};
};
};
&cp0_rtc {
status = "disabled";
};
&cp0_i2c0 {
clock-frequency = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&cp0_i2c0_pins>;
status = "okay";
sfpplus_gpio: gpio@21 {
compatible = "nxp,pca9555";
reg = <0x21>;
gpio-controller;
#gpio-cells = <2>;
};
eeprom@54 {
compatible = "atmel,24c04";
reg = <0x54>;
};
};
&cp0_i2c1 {
clock-frequency = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&cp0_i2c1_pins>;
status = "okay";
i2c-mux@70 {
compatible = "nxp,pca9544";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x70>;
sfpplus0_i2c: i2c@0 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0>;
};
sfpplus1_i2c: i2c@1 {
#address-cells = <1>;
#size-cells = <0>;
reg = <1>;
};
};
};
&cp0_uart1 {
pinctrl-names = "default";
pinctrl-0 = <&cp0_uart1_pins>;
status = "okay";
};
&cp0_mdio {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
ge_phy2: ethernet-phy@0 {
reg = <0>;
};
ge_phy3: ethernet-phy@1 {
reg = <1>;
};
};
&cp0_pcie0 {
pinctrl-names = "default";
pinctrl-0 = <&cp0_pcie_pins>;
num-lanes = <1>;
num-viewport = <8>;
reset-gpios = <&cp0_gpio2 20 GPIO_ACTIVE_LOW>;
ranges = <0x82000000 0x0 0xc0000000 0x0 0xc0000000 0x0 0x20000000>;
phys = <&cp0_comphy0 0>;
phy-names = "cp0-pcie0-x1-phy";
status = "okay";
};
&cp0_pinctrl {
cp0_ge_mdio_pins: ge-mdio-pins {
marvell,pins = "mpp32", "mpp34";
marvell,function = "ge";
};
cp0_i2c1_pins: i2c1-pins {
marvell,pins = "mpp35", "mpp36";
marvell,function = "i2c1";
};
cp0_i2c0_pins: i2c0-pins {
marvell,pins = "mpp37", "mpp38";
marvell,function = "i2c0";
};
cp0_uart1_pins: uart1-pins {
marvell,pins = "mpp40", "mpp41";
marvell,function = "uart1";
};
cp0_xhci_vbus_pins: xhci0-vbus-pins {
marvell,pins = "mpp47";
marvell,function = "gpio";
};
cp0_pcie_pins: pcie-pins {
marvell,pins = "mpp52";
marvell,function = "gpio";
};
cp0_sdhci_pins: sdhci-pins {
marvell,pins = "mpp55", "mpp56", "mpp57", "mpp58", "mpp59",
"mpp60", "mpp61";
marvell,function = "sdio";
};
cp0_sfpplus_led_pins: sfpplus-led-pins {
marvell,pins = "mpp54";
marvell,function = "gpio";
};
};
&cp0_ethernet {
status = "okay";
};
&cp0_eth0 {
status = "okay";
phy-mode = "10gbase-r";
phys = <&cp0_comphy4 0>;
local-mac-address = [ae 00 00 00 ff 00];
sfp = <&sfp_cp0_eth0>;
managed = "in-band-status";
};
&cp0_eth1 {
status = "okay";
phy = <&ge_phy2>;
phy-mode = "sgmii";
local-mac-address = [ae 00 00 00 ff 01];
phys = <&cp0_comphy3 1>;
};
&cp0_eth2 {
status = "okay";
phy-mode = "sgmii";
phys = <&cp0_comphy1 2>;
local-mac-address = [ae 00 00 00 ff 02];
phy = <&ge_phy3>;
};
&cp0_sata0 {
status = "okay";
sata-port@0 {
phys = <&cp0_comphy2 0>;
status = "okay";
};
sata-port@1 {
phys = <&cp0_comphy5 1>;
status = "okay";
};
};
&cp0_sdhci0 {
broken-cd;
bus-width = <4>;
pinctrl-names = "default";
pinctrl-0 = <&cp0_sdhci_pins>;
status = "okay";
vqmmc-supply = <&v_3_3>;
};
&cp0_usb3_0 {
status = "okay";
};
&cp0_usb3_1 {
status = "okay";
};
&cp1_i2c0 {
clock-frequency = <100000>;
status = "disabled";
};
&cp1_i2c1 {
clock-frequency = <100000>;
status = "disabled";
};
&cp1_rtc {
status = "disabled";
};
&cp1_ethernet {
status = "okay";
};
&cp1_eth0 {
status = "okay";
phy-mode = "10gbase-r";
phys = <&cp1_comphy4 0>;
local-mac-address = [ae 00 00 00 ff 03];
sfp = <&sfp_cp1_eth0>;
managed = "in-band-status";
};
&cp1_eth1 {
status = "okay";
phy = <&ge_phy4>;
phy-mode = "sgmii";
local-mac-address = [ae 00 00 00 ff 04];
phys = <&cp1_comphy3 1>;
};
&cp1_eth2 {
status = "okay";
phy-mode = "sgmii";
local-mac-address = [ae 00 00 00 ff 05];
phys = <&cp1_comphy5 2>;
phy = <&ge_phy5>;
};
&cp1_pinctrl {
cp1_sfpplus_led_pins: sfpplus-led-pins {
marvell,pins = "mpp6", "mpp7", "mpp8", "mpp10", "mpp14", "mpp31";
marvell,function = "gpio";
};
};
&cp1_uart0 {
status = "disabled";
};
&cp1_comphy2 {
cp1_usbh0_con: connector {
compatible = "usb-a-connector";
phy-supply = <&v_5v0_usb3_hst_vbus>;
};
};
&cp1_usb3_0 {
phys = <&cp1_comphy2 0>;
phy-names = "cp1-usb3h0-comphy";
status = "okay";
};
&cp1_mdio {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
ge_phy4: ethernet-phy@1 {
reg = <1>;
};
ge_phy5: ethernet-phy@0 {
reg = <0>;
};
};
&cp1_pcie0 {
num-lanes = <2>;
phys = <&cp1_comphy0 0>, <&cp1_comphy1 0>;
phy-names = "cp1-pcie0-x2-lane0-phy", "cp1-pcie0-x2-lane1-phy";
status = "okay";
};
@@ -0,0 +1,55 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2016 Marvell Technology Group Ltd.
*
* Device Tree file for the Armada 8040 SoC, made of an AP806 Quad and
* two CP110.
*/
#include "armada-ap806-quad.dtsi"
#include "armada-80x0.dtsi"
&cp0_pcie0 {
iommu-map =
<0x0 &smmu 0x480 0x20>,
<0x100 &smmu 0x4a0 0x20>,
<0x200 &smmu 0x4c0 0x20>;
iommu-map-mask = <0x031f>;
};
/* The RTC requires external oscillator. But on Aramda 80x0, the RTC clock
* in CP master is not connected (by package) to the oscillator. So
* disable it. However, the RTC clock in CP slave is connected to the
* oscillator so this one is let enabled.
*/
&cp0_rtc {
status = "disabled";
};
&cp0_sata0 {
iommus = <&smmu 0x444>;
};
&cp0_sdhci0 {
iommus = <&smmu 0x445>;
};
&cp0_usb3_0 {
iommus = <&smmu 0x440>;
};
&cp0_usb3_1 {
iommus = <&smmu 0x441>;
};
&cp1_sata0 {
iommus = <&smmu 0x454>;
};
&cp1_usb3_0 {
iommus = <&smmu 0x450>;
};
&cp1_usb3_1 {
iommus = <&smmu 0x451>;
};
@@ -0,0 +1,28 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2017 Marvell Technology Group Ltd.
*
* Device Tree file for Marvell Armada-8080 Development board platform
*/
#include "armada-8080.dtsi"
/ {
model = "Marvell 8080 board";
compatible = "marvell,armada-8080-db", "marvell,armada-8080",
"marvell,armada-ap810-octa", "marvell,armada-ap810";
chosen {
stdout-path = "serial0:115200n8";
};
memory@0 {
device_type = "memory";
reg = <0x0 0x0 0x0 0x80000000>;
};
};
&uart0_ap0 {
clock-frequency = <384000>;
status = "okay";
};
@@ -0,0 +1,8 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2017 Marvell Technology Group Ltd.
*
* Device Tree file for Marvell Armada-8080 SoC, made of an AP810 OCTA.
*/
#include "armada-ap810-ap0-octa-core.dtsi"
@@ -0,0 +1,108 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2017 Marvell Technology Group Ltd.
*
* Device Tree file for the Armada 80x0 SoC family
*/
/ {
aliases {
gpio1 = &cp1_gpio1;
gpio2 = &cp0_gpio2;
spi1 = &cp0_spi0;
spi2 = &cp0_spi1;
spi3 = &cp1_spi0;
spi4 = &cp1_spi1;
};
};
/*
* Instantiate the master CP110
*/
#define CP11X_NAME cp0
#define CP11X_BASE f2000000
#define CP11X_PCIEx_MEM_BASE(iface) (0xf6000000 + (iface * 0x1000000))
#define CP11X_PCIEx_MEM_SIZE(iface) 0xf00000
#define CP11X_PCIE0_BASE f2600000
#define CP11X_PCIE1_BASE f2620000
#define CP11X_PCIE2_BASE f2640000
#include "armada-cp110.dtsi"
#undef CP11X_NAME
#undef CP11X_BASE
#undef CP11X_PCIEx_MEM_BASE
#undef CP11X_PCIEx_MEM_SIZE
#undef CP11X_PCIE0_BASE
#undef CP11X_PCIE1_BASE
#undef CP11X_PCIE2_BASE
/*
* Instantiate the slave CP110
*/
#define CP11X_NAME cp1
#define CP11X_BASE f4000000
#define CP11X_PCIEx_MEM_BASE(iface) (0xfa000000 + (iface * 0x1000000))
#define CP11X_PCIEx_MEM_SIZE(iface) 0xf00000
#define CP11X_PCIE0_BASE f4600000
#define CP11X_PCIE1_BASE f4620000
#define CP11X_PCIE2_BASE f4640000
#include "armada-cp110.dtsi"
#undef CP11X_NAME
#undef CP11X_BASE
#undef CP11X_PCIEx_MEM_BASE
#undef CP11X_PCIEx_MEM_SIZE
#undef CP11X_PCIE0_BASE
#undef CP11X_PCIE1_BASE
#undef CP11X_PCIE2_BASE
/* The 80x0 has two CP blocks, but uses only one block from each. */
&cp1_gpio1 {
status = "okay";
};
&cp0_gpio2 {
status = "okay";
};
&cp0_syscon0 {
cp0_pinctrl: pinctrl {
compatible = "marvell,armada-8k-cpm-pinctrl";
};
};
&cp1_syscon0 {
cp1_pinctrl: pinctrl {
compatible = "marvell,armada-8k-cps-pinctrl";
nand_pins: nand-pins {
marvell,pins =
"mpp0", "mpp1", "mpp2", "mpp3",
"mpp4", "mpp5", "mpp6", "mpp7",
"mpp8", "mpp9", "mpp10", "mpp11",
"mpp15", "mpp16", "mpp17", "mpp18",
"mpp19", "mpp20", "mpp21", "mpp22",
"mpp23", "mpp24", "mpp25", "mpp26",
"mpp27";
marvell,function = "dev";
};
nand_rb: nand-rb-pins {
marvell,pins = "mpp13", "mpp12";
marvell,function = "nf";
};
};
};
&cp1_crypto {
/*
* The cryptographic engine found on the cp110
* master is enabled by default at the SoC
* level. Because it is not possible as of now
* to enable two cryptographic engines in
* parallel, disable this one by default.
*/
status = "disabled";
};
@@ -0,0 +1,60 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2016 Marvell Technology Group Ltd.
*
* Device Tree file for Marvell Armada AP806.
*/
#include "armada-ap806.dtsi"
/ {
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu0: cpu@0 {
device_type = "cpu";
compatible = "arm,cortex-a72";
reg = <0x000>;
enable-method = "psci";
#cooling-cells = <2>;
clocks = <&cpu_clk 0>;
i-cache-size = <0xc000>;
i-cache-line-size = <64>;
i-cache-sets = <256>;
d-cache-size = <0x8000>;
d-cache-line-size = <64>;
d-cache-sets = <256>;
next-level-cache = <&l2>;
};
cpu1: cpu@1 {
device_type = "cpu";
compatible = "arm,cortex-a72";
reg = <0x001>;
enable-method = "psci";
#cooling-cells = <2>;
clocks = <&cpu_clk 0>;
i-cache-size = <0xc000>;
i-cache-line-size = <64>;
i-cache-sets = <256>;
d-cache-size = <0x8000>;
d-cache-line-size = <64>;
d-cache-sets = <256>;
next-level-cache = <&l2>;
};
l2: l2-cache {
compatible = "cache";
cache-size = <0x80000>;
cache-line-size = <64>;
cache-sets = <512>;
cache-level = <2>;
cache-unified;
};
};
thermal-zones {
/delete-node/ ap-cpu2-thermal;
/delete-node/ ap-cpu3-thermal;
};
};
@@ -0,0 +1,94 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2016 Marvell Technology Group Ltd.
*
* Device Tree file for Marvell Armada AP806.
*/
#include "armada-ap806.dtsi"
/ {
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu0: cpu@0 {
device_type = "cpu";
compatible = "arm,cortex-a72";
reg = <0x000>;
enable-method = "psci";
#cooling-cells = <2>;
clocks = <&cpu_clk 0>;
i-cache-size = <0xc000>;
i-cache-line-size = <64>;
i-cache-sets = <256>;
d-cache-size = <0x8000>;
d-cache-line-size = <64>;
d-cache-sets = <256>;
next-level-cache = <&l2_0>;
};
cpu1: cpu@1 {
device_type = "cpu";
compatible = "arm,cortex-a72";
reg = <0x001>;
enable-method = "psci";
#cooling-cells = <2>;
clocks = <&cpu_clk 0>;
i-cache-size = <0xc000>;
i-cache-line-size = <64>;
i-cache-sets = <256>;
d-cache-size = <0x8000>;
d-cache-line-size = <64>;
d-cache-sets = <256>;
next-level-cache = <&l2_0>;
};
cpu2: cpu@100 {
device_type = "cpu";
compatible = "arm,cortex-a72";
reg = <0x100>;
enable-method = "psci";
#cooling-cells = <2>;
clocks = <&cpu_clk 1>;
i-cache-size = <0xc000>;
i-cache-line-size = <64>;
i-cache-sets = <256>;
d-cache-size = <0x8000>;
d-cache-line-size = <64>;
d-cache-sets = <256>;
next-level-cache = <&l2_1>;
};
cpu3: cpu@101 {
device_type = "cpu";
compatible = "arm,cortex-a72";
reg = <0x101>;
enable-method = "psci";
#cooling-cells = <2>;
clocks = <&cpu_clk 1>;
i-cache-size = <0xc000>;
i-cache-line-size = <64>;
i-cache-sets = <256>;
d-cache-size = <0x8000>;
d-cache-line-size = <64>;
d-cache-sets = <256>;
next-level-cache = <&l2_1>;
};
l2_0: l2-cache0 {
compatible = "cache";
cache-size = <0x80000>;
cache-line-size = <64>;
cache-sets = <512>;
cache-level = <2>;
cache-unified;
};
l2_1: l2-cache1 {
compatible = "cache";
cache-size = <0x80000>;
cache-line-size = <64>;
cache-sets = <512>;
cache-level = <2>;
cache-unified;
};
};
};
@@ -0,0 +1,24 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2016 Marvell Technology Group Ltd.
*
* Device Tree file for Marvell Armada AP806.
*/
#include "armada-ap80x.dtsi"
&ap_syscon0 {
ap_clk: clock {
compatible = "marvell,ap806-clock";
#clock-cells = <1>;
};
};
&ap_syscon1 {
cpu_clk: clock-cpu@278 {
compatible = "marvell,ap806-cpu-clock";
clocks = <&ap_clk 0>, <&ap_clk 1>;
#clock-cells = <1>;
reg = <0x278 0xa30>;
};
};
@@ -0,0 +1,94 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Device Tree file for Marvell Armada AP807 Quad
*
* Copyright (C) 2019 Marvell Technology Group Ltd.
*/
#include "armada-ap807.dtsi"
/ {
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu0: cpu@0 {
device_type = "cpu";
compatible = "arm,cortex-a72";
reg = <0x000>;
enable-method = "psci";
#cooling-cells = <2>;
clocks = <&cpu_clk 0>;
i-cache-size = <0xc000>;
i-cache-line-size = <64>;
i-cache-sets = <256>;
d-cache-size = <0x8000>;
d-cache-line-size = <64>;
d-cache-sets = <256>;
next-level-cache = <&l2_0>;
};
cpu1: cpu@1 {
device_type = "cpu";
compatible = "arm,cortex-a72";
reg = <0x001>;
enable-method = "psci";
#cooling-cells = <2>;
clocks = <&cpu_clk 0>;
i-cache-size = <0xc000>;
i-cache-line-size = <64>;
i-cache-sets = <256>;
d-cache-size = <0x8000>;
d-cache-line-size = <64>;
d-cache-sets = <256>;
next-level-cache = <&l2_0>;
};
cpu2: cpu@100 {
device_type = "cpu";
compatible = "arm,cortex-a72";
reg = <0x100>;
enable-method = "psci";
#cooling-cells = <2>;
clocks = <&cpu_clk 1>;
i-cache-size = <0xc000>;
i-cache-line-size = <64>;
i-cache-sets = <256>;
d-cache-size = <0x8000>;
d-cache-line-size = <64>;
d-cache-sets = <256>;
next-level-cache = <&l2_1>;
};
cpu3: cpu@101 {
device_type = "cpu";
compatible = "arm,cortex-a72";
reg = <0x101>;
enable-method = "psci";
#cooling-cells = <2>;
clocks = <&cpu_clk 1>;
i-cache-size = <0xc000>;
i-cache-line-size = <64>;
i-cache-sets = <256>;
d-cache-size = <0x8000>;
d-cache-line-size = <64>;
d-cache-sets = <256>;
next-level-cache = <&l2_1>;
};
l2_0: l2-cache0 {
compatible = "cache";
cache-size = <0x80000>;
cache-line-size = <64>;
cache-sets = <512>;
cache-level = <2>;
cache-unified;
};
l2_1: l2-cache1 {
compatible = "cache";
cache-size = <0x80000>;
cache-line-size = <64>;
cache-sets = <512>;
cache-level = <2>;
cache-unified;
};
};
};
@@ -0,0 +1,32 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Device Tree file for Marvell Armada AP807
*
* Copyright (C) 2019 Marvell Technology Group Ltd.
*/
#include "armada-ap80x.dtsi"
&ap_syscon0 {
ap_clk: clock {
compatible = "marvell,ap807-clock";
#clock-cells = <1>;
};
};
&ap_syscon1 {
cpu_clk: clock-cpu {
compatible = "marvell,ap807-cpu-clock";
clocks = <&ap_clk 0>, <&ap_clk 1>;
#clock-cells = <1>;
};
};
&ap_sdhci0 {
compatible = "marvell,armada-ap807-sdhci",
"marvell,armada-ap806-sdhci"; /* Backward compatibility */
};
&ap_thermal {
compatible = "marvell,armada-ap807-thermal";
};
@@ -0,0 +1,469 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2019 Marvell Technology Group Ltd.
*
* Device Tree file for Marvell Armada AP80x.
*/
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/thermal/thermal.h>
/dts-v1/;
/ {
#address-cells = <2>;
#size-cells = <2>;
aliases {
serial0 = &uart0;
serial1 = &uart1;
gpio0 = &ap_gpio;
spi0 = &spi0;
};
psci {
compatible = "arm,psci-0.2";
method = "smc";
};
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
/*
* This area matches the mapping done with a
* mainline U-Boot, and should be updated by the
* bootloader.
*/
psci-area@4000000 {
reg = <0x0 0x4000000 0x0 0x200000>;
no-map;
};
tee@4400000 {
reg = <0 0x4400000 0 0x1000000>;
no-map;
};
};
timer {
compatible = "arm,armv8-timer";
interrupt-parent = <&gic>;
interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
<GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
<GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
<GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>;
};
pmu {
compatible = "arm,cortex-a72-pmu";
interrupt-parent = <&pic>;
interrupts = <17>;
};
soc {
#address-cells = <2>;
#size-cells = <2>;
compatible = "simple-bus";
interrupt-parent = <&gic>;
ranges;
bus@f0000000 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "simple-bus";
ranges = <0x0 0x0 0xf0000000 0x1000000>;
smmu: iommu@100000 {
compatible = "marvell,ap806-smmu-500", "arm,mmu-500";
reg = <0x100000 0x100000>;
dma-coherent;
#iommu-cells = <1>;
#global-interrupts = <1>;
interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
};
gic: interrupt-controller@210000 {
compatible = "arm,gic-400";
#interrupt-cells = <3>;
#address-cells = <1>;
#size-cells = <1>;
ranges;
interrupt-controller;
interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
reg = <0x210000 0x10000>,
<0x220000 0x20000>,
<0x240000 0x20000>,
<0x260000 0x20000>;
gic_v2m0: v2m@280000 {
compatible = "arm,gic-v2m-frame";
msi-controller;
reg = <0x280000 0x1000>;
arm,msi-base-spi = <160>;
arm,msi-num-spis = <32>;
};
gic_v2m1: v2m@290000 {
compatible = "arm,gic-v2m-frame";
msi-controller;
reg = <0x290000 0x1000>;
arm,msi-base-spi = <192>;
arm,msi-num-spis = <32>;
};
gic_v2m2: v2m@2a0000 {
compatible = "arm,gic-v2m-frame";
msi-controller;
reg = <0x2a0000 0x1000>;
arm,msi-base-spi = <224>;
arm,msi-num-spis = <32>;
};
gic_v2m3: v2m@2b0000 {
compatible = "arm,gic-v2m-frame";
msi-controller;
reg = <0x2b0000 0x1000>;
arm,msi-base-spi = <256>;
arm,msi-num-spis = <32>;
};
};
odmi: odmi@300000 {
compatible = "marvell,odmi-controller";
msi-controller;
marvell,odmi-frames = <4>;
reg = <0x300000 0x4000>,
<0x304000 0x4000>,
<0x308000 0x4000>,
<0x30C000 0x4000>;
marvell,spi-base = <128>, <136>, <144>, <152>;
};
gicp: gicp@3f0040 {
compatible = "marvell,ap806-gicp";
reg = <0x3f0040 0x10>;
marvell,spi-ranges = <64 64>, <288 64>;
msi-controller;
};
pic: interrupt-controller@3f0100 {
compatible = "marvell,armada-8k-pic";
reg = <0x3f0100 0x10>;
#interrupt-cells = <1>;
interrupt-controller;
interrupts = <GIC_PPI 15 IRQ_TYPE_LEVEL_HIGH>;
};
sei: interrupt-controller@3f0200 {
compatible = "marvell,ap806-sei";
reg = <0x3f0200 0x40>;
interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
#interrupt-cells = <1>;
interrupt-controller;
msi-controller;
};
xor@400000 {
compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
reg = <0x400000 0x1000>,
<0x410000 0x1000>;
msi-parent = <&gic_v2m0>;
clocks = <&ap_clk 3>;
dma-coherent;
};
xor@420000 {
compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
reg = <0x420000 0x1000>,
<0x430000 0x1000>;
msi-parent = <&gic_v2m0>;
clocks = <&ap_clk 3>;
dma-coherent;
};
xor@440000 {
compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
reg = <0x440000 0x1000>,
<0x450000 0x1000>;
msi-parent = <&gic_v2m0>;
clocks = <&ap_clk 3>;
dma-coherent;
};
xor@460000 {
compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
reg = <0x460000 0x1000>,
<0x470000 0x1000>;
msi-parent = <&gic_v2m0>;
clocks = <&ap_clk 3>;
dma-coherent;
};
spi0: spi@510600 {
compatible = "marvell,armada-380-spi";
reg = <0x510600 0x50>;
#address-cells = <1>;
#size-cells = <0>;
interrupts = <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&ap_clk 3>;
status = "disabled";
};
i2c0: i2c@511000 {
compatible = "marvell,mv78230-i2c";
reg = <0x511000 0x20>;
#address-cells = <1>;
#size-cells = <0>;
interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&ap_clk 3>;
status = "disabled";
};
uart0: serial@512000 {
compatible = "snps,dw-apb-uart";
reg = <0x512000 0x100>;
reg-shift = <2>;
interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
reg-io-width = <1>;
clocks = <&ap_clk 3>;
status = "disabled";
};
uart1: serial@512100 {
compatible = "snps,dw-apb-uart";
reg = <0x512100 0x100>;
reg-shift = <2>;
interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>;
reg-io-width = <1>;
clocks = <&ap_clk 3>;
status = "disabled";
};
watchdog: watchdog@610000 {
compatible = "arm,sbsa-gwdt";
reg = <0x610000 0x1000>, <0x600000 0x1000>;
interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
};
ap_sdhci0: mmc@6e0000 {
compatible = "marvell,armada-ap806-sdhci";
reg = <0x6e0000 0x300>;
interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>;
clock-names = "core";
clocks = <&ap_clk 4>;
dma-coherent;
marvell,xenon-phy-slow-mode;
status = "disabled";
};
ap_syscon0: system-controller@6f4000 {
compatible = "syscon", "simple-mfd";
reg = <0x6f4000 0x2000>;
ap_pinctrl: pinctrl {
compatible = "marvell,ap806-pinctrl";
uart0_pins: uart0-pins {
marvell,pins = "mpp11", "mpp19";
marvell,function = "uart0";
};
};
ap_gpio: gpio@1040 {
compatible = "marvell,armada-8k-gpio";
offset = <0x1040>;
ngpios = <20>;
gpio-controller;
#gpio-cells = <2>;
gpio-ranges = <&ap_pinctrl 0 0 20>;
marvell,pwm-offset = <0x10c0>;
#pwm-cells = <2>;
clocks = <&ap_clk 3>;
};
};
ap_syscon1: system-controller@6f8000 {
compatible = "syscon", "simple-mfd";
reg = <0x6f8000 0x1000>;
#address-cells = <1>;
#size-cells = <1>;
ap_thermal: thermal-sensor@80 {
compatible = "marvell,armada-ap806-thermal";
reg = <0x80 0x10>;
interrupt-parent = <&sei>;
interrupts = <18>;
#thermal-sensor-cells = <1>;
};
};
};
};
/*
* The thermal IP features one internal sensor plus, if applicable, one
* remote channel wired to one sensor per CPU.
*
* Only one thermal zone per AP/CP may trigger interrupts at a time, the
* first one that will have a critical trip point will be chosen.
*/
thermal-zones {
ap_thermal_ic: ap-ic-thermal {
polling-delay-passive = <0>; /* Interrupt driven */
polling-delay = <0>; /* Interrupt driven */
thermal-sensors = <&ap_thermal 0>;
trips {
ap_crit: ap-crit {
temperature = <100000>; /* mC degrees */
hysteresis = <2000>; /* mC degrees */
type = "critical";
};
};
cooling-maps { };
};
ap_thermal_cpu0: ap-cpu0-thermal {
polling-delay-passive = <1000>;
polling-delay = <1000>;
thermal-sensors = <&ap_thermal 1>;
trips {
cpu0_hot: cpu0-hot {
temperature = <85000>;
hysteresis = <2000>;
type = "passive";
};
cpu0_emerg: cpu0-emerg {
temperature = <95000>;
hysteresis = <2000>;
type = "passive";
};
};
cooling-maps {
map0_hot: map0-hot {
trip = <&cpu0_hot>;
cooling-device = <&cpu0 1 2>,
<&cpu1 1 2>;
};
map0_emerg: map0-ermerg {
trip = <&cpu0_emerg>;
cooling-device = <&cpu0 3 3>,
<&cpu1 3 3>;
};
};
};
ap_thermal_cpu1: ap-cpu1-thermal {
polling-delay-passive = <1000>;
polling-delay = <1000>;
thermal-sensors = <&ap_thermal 2>;
trips {
cpu1_hot: cpu1-hot {
temperature = <85000>;
hysteresis = <2000>;
type = "passive";
};
cpu1_emerg: cpu1-emerg {
temperature = <95000>;
hysteresis = <2000>;
type = "passive";
};
};
cooling-maps {
map1_hot: map1-hot {
trip = <&cpu1_hot>;
cooling-device = <&cpu0 1 2>,
<&cpu1 1 2>;
};
map1_emerg: map1-emerg {
trip = <&cpu1_emerg>;
cooling-device = <&cpu0 3 3>,
<&cpu1 3 3>;
};
};
};
ap_thermal_cpu2: ap-cpu2-thermal {
polling-delay-passive = <1000>;
polling-delay = <1000>;
thermal-sensors = <&ap_thermal 3>;
trips {
cpu2_hot: cpu2-hot {
temperature = <85000>;
hysteresis = <2000>;
type = "passive";
};
cpu2_emerg: cpu2-emerg {
temperature = <95000>;
hysteresis = <2000>;
type = "passive";
};
};
cooling-maps {
map2_hot: map2-hot {
trip = <&cpu2_hot>;
cooling-device = <&cpu2 1 2>,
<&cpu3 1 2>;
};
map2_emerg: map2-emerg {
trip = <&cpu2_emerg>;
cooling-device = <&cpu2 3 3>,
<&cpu3 3 3>;
};
};
};
ap_thermal_cpu3: ap-cpu3-thermal {
polling-delay-passive = <1000>;
polling-delay = <1000>;
thermal-sensors = <&ap_thermal 4>;
trips {
cpu3_hot: cpu3-hot {
temperature = <85000>;
hysteresis = <2000>;
type = "passive";
};
cpu3_emerg: cpu3-emerg {
temperature = <95000>;
hysteresis = <2000>;
type = "passive";
};
};
cooling-maps {
map3_hot: map3-bhot {
trip = <&cpu3_hot>;
cooling-device = <&cpu2 1 2>,
<&cpu3 1 2>;
};
map3_emerg: map3-emerg {
trip = <&cpu3_emerg>;
cooling-device = <&cpu2 3 3>,
<&cpu3 3 3>;
};
};
};
};
};
@@ -0,0 +1,64 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2017 Marvell Technology Group Ltd.
*
* Device Tree file for Marvell Armada AP810 OCTA cores.
*/
#include "armada-ap810-ap0.dtsi"
/ {
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu0: cpu@0 {
device_type = "cpu";
compatible = "arm,cortex-a72";
reg = <0x000>;
enable-method = "psci";
};
cpu1: cpu@1 {
device_type = "cpu";
compatible = "arm,cortex-a72";
reg = <0x001>;
enable-method = "psci";
};
cpu2: cpu@100 {
device_type = "cpu";
compatible = "arm,cortex-a72";
reg = <0x100>;
enable-method = "psci";
};
cpu3: cpu@101 {
device_type = "cpu";
compatible = "arm,cortex-a72";
reg = <0x101>;
enable-method = "psci";
};
cpu4: cpu@200 {
device_type = "cpu";
compatible = "arm,cortex-a72";
reg = <0x200>;
enable-method = "psci";
};
cpu5: cpu@201 {
device_type = "cpu";
compatible = "arm,cortex-a72";
reg = <0x201>;
enable-method = "psci";
};
cpu6: cpu@300 {
device_type = "cpu";
compatible = "arm,cortex-a72";
reg = <0x300>;
enable-method = "psci";
};
cpu7: cpu@301 {
device_type = "cpu";
compatible = "arm,cortex-a72";
reg = <0x301>;
enable-method = "psci";
};
};
};
@@ -0,0 +1,122 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2017 Marvell Technology Group Ltd.
*
* Device Tree file for Marvell Armada AP810.
*/
#include <dt-bindings/interrupt-controller/arm-gic.h>
/dts-v1/;
/ {
#address-cells = <2>;
#size-cells = <2>;
interrupt-parent = <&gic>;
aliases {
serial0 = &uart0_ap0;
serial1 = &uart1_ap0;
};
psci {
compatible = "arm,psci-0.2";
method = "smc";
};
timer {
compatible = "arm,armv8-timer";
interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_LOW>,
<GIC_PPI 14 IRQ_TYPE_LEVEL_LOW>,
<GIC_PPI 11 IRQ_TYPE_LEVEL_LOW>,
<GIC_PPI 10 IRQ_TYPE_LEVEL_LOW>;
};
soc {
#address-cells = <2>;
#size-cells = <2>;
compatible = "simple-bus";
ranges;
bus@e8000000 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "simple-bus";
ranges = <0x0 0x0 0xe8000000 0x4000000>;
interrupt-parent = <&gic>;
gic: interrupt-controller@3000000 {
compatible = "arm,gic-v3";
#interrupt-cells = <3>;
#address-cells = <1>;
#size-cells = <1>;
interrupt-controller;
interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
ranges;
reg = <0x3000000 0x10000>, /* GICD */
<0x3060000 0x100000>, /* GICR */
<0x00c0000 0x2000>, /* GICC */
<0x00d0000 0x1000>, /* GICH */
<0x00e0000 0x2000>; /* GICV */
gic_its_ap0: msi-controller@3040000 {
compatible = "arm,gic-v3-its";
msi-controller;
#msi-cells = <1>;
reg = <0x3040000 0x20000>;
};
};
xor@400000 {
compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
reg = <0x400000 0x1000>,
<0x410000 0x1000>;
msi-parent = <&gic_its_ap0 0xa0>;
dma-coherent;
};
xor@420000 {
compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
reg = <0x420000 0x1000>,
<0x430000 0x1000>;
msi-parent = <&gic_its_ap0 0xa1>;
dma-coherent;
};
xor@440000 {
compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
reg = <0x440000 0x1000>,
<0x450000 0x1000>;
msi-parent = <&gic_its_ap0 0xa2>;
dma-coherent;
};
xor@460000 {
compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
reg = <0x460000 0x1000>,
<0x470000 0x1000>;
msi-parent = <&gic_its_ap0 0xa3>;
dma-coherent;
};
uart0_ap0: serial@512000 {
compatible = "snps,dw-apb-uart";
reg = <0x512000 0x100>;
reg-shift = <2>;
interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>;
reg-io-width = <1>;
status = "disabled";
};
uart1_ap0: serial@512100 {
compatible = "snps,dw-apb-uart";
reg = <0x512100 0x100>;
reg-shift = <2>;
interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
reg-io-width = <1>;
status = "disabled";
};
};
};
};
@@ -0,0 +1,11 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2016 Marvell Technology Group Ltd.
*/
/* Common definitions used by Armada 7K/8K DTs */
#define PASTER(x, y) x ## y
#define EVALUATOR(x, y) PASTER(x, y)
#define CP11X_LABEL(name) EVALUATOR(CP11X_NAME, EVALUATOR(_, name))
#define CP11X_NODE_NAME(name) EVALUATOR(CP11X_NAME, EVALUATOR(-, name))
#define ADDRESSIFY(addr) EVALUATOR(0x, addr)
@@ -0,0 +1,8 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2019 Marvell Technology Group Ltd.
*
* Device Tree file for Marvell Armada CP110.
*/
#include "armada-cp11x.dtsi"
@@ -0,0 +1,8 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2019 Marvell Technology Group Ltd.
*
* Device Tree file for Marvell Armada CP115.
*/
#include "armada-cp11x.dtsi"
@@ -0,0 +1,606 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2016 Marvell Technology Group Ltd.
*
* Device Tree file for Marvell Armada CP11x.
*/
#include <dt-bindings/interrupt-controller/mvebu-icu.h>
#include <dt-bindings/thermal/thermal.h>
#include "armada-common.dtsi"
#define CP11X_PCIEx_CONF_BASE(iface) (CP11X_PCIEx_MEM_BASE(iface) + CP11X_PCIEx_MEM_SIZE(iface))
/ {
/*
* The contents of the node are defined below, in order to
* save one indentation level
*/
CP11X_NAME: CP11X_NODE_NAME(bus) { };
/*
* CPs only have one sensor in the thermal IC.
*
* The cooling maps are empty as there are no cooling devices.
*/
thermal-zones {
CP11X_LABEL(thermal_ic): CP11X_NODE_NAME(ic-thermal) {
polling-delay-passive = <0>; /* Interrupt driven */
polling-delay = <0>; /* Interrupt driven */
thermal-sensors = <&CP11X_LABEL(thermal) 0>;
trips {
CP11X_LABEL(crit): crit {
temperature = <100000>; /* mC degrees */
hysteresis = <2000>; /* mC degrees */
type = "critical";
};
};
cooling-maps { };
};
};
};
&CP11X_NAME {
#address-cells = <2>;
#size-cells = <2>;
compatible = "simple-bus";
interrupt-parent = <&CP11X_LABEL(icu_nsr)>;
ranges;
bus@CP11X_BASE {
#address-cells = <1>;
#size-cells = <1>;
compatible = "simple-bus";
ranges = <0x0 0x0 ADDRESSIFY(CP11X_BASE) 0x2000000>;
CP11X_LABEL(ethernet): ethernet@0 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "marvell,armada-7k-pp22";
reg = <0x0 0x100000>, <0x129000 0xb000>, <0x220000 0x800>;
clocks = <&CP11X_LABEL(clk) 1 3>, <&CP11X_LABEL(clk) 1 9>,
<&CP11X_LABEL(clk) 1 5>, <&CP11X_LABEL(clk) 1 6>,
<&CP11X_LABEL(clk) 1 18>;
clock-names = "pp_clk", "gop_clk",
"mg_clk", "mg_core_clk", "axi_clk";
marvell,system-controller = <&CP11X_LABEL(syscon0)>;
status = "disabled";
dma-coherent;
CP11X_LABEL(eth0): ethernet-port@0 {
interrupts = <39 IRQ_TYPE_LEVEL_HIGH>,
<43 IRQ_TYPE_LEVEL_HIGH>,
<47 IRQ_TYPE_LEVEL_HIGH>,
<51 IRQ_TYPE_LEVEL_HIGH>,
<55 IRQ_TYPE_LEVEL_HIGH>,
<59 IRQ_TYPE_LEVEL_HIGH>,
<63 IRQ_TYPE_LEVEL_HIGH>,
<67 IRQ_TYPE_LEVEL_HIGH>,
<71 IRQ_TYPE_LEVEL_HIGH>,
<129 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "hif0", "hif1", "hif2",
"hif3", "hif4", "hif5", "hif6", "hif7",
"hif8", "link";
reg = <0>;
port-id = <0>; /* For backward compatibility. */
gop-port-id = <0>;
status = "disabled";
};
CP11X_LABEL(eth1): ethernet-port@1 {
interrupts = <40 IRQ_TYPE_LEVEL_HIGH>,
<44 IRQ_TYPE_LEVEL_HIGH>,
<48 IRQ_TYPE_LEVEL_HIGH>,
<52 IRQ_TYPE_LEVEL_HIGH>,
<56 IRQ_TYPE_LEVEL_HIGH>,
<60 IRQ_TYPE_LEVEL_HIGH>,
<64 IRQ_TYPE_LEVEL_HIGH>,
<68 IRQ_TYPE_LEVEL_HIGH>,
<72 IRQ_TYPE_LEVEL_HIGH>,
<128 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "hif0", "hif1", "hif2",
"hif3", "hif4", "hif5", "hif6", "hif7",
"hif8", "link";
reg = <1>;
port-id = <1>; /* For backward compatibility. */
gop-port-id = <2>;
status = "disabled";
};
CP11X_LABEL(eth2): ethernet-port@2 {
interrupts = <41 IRQ_TYPE_LEVEL_HIGH>,
<45 IRQ_TYPE_LEVEL_HIGH>,
<49 IRQ_TYPE_LEVEL_HIGH>,
<53 IRQ_TYPE_LEVEL_HIGH>,
<57 IRQ_TYPE_LEVEL_HIGH>,
<61 IRQ_TYPE_LEVEL_HIGH>,
<65 IRQ_TYPE_LEVEL_HIGH>,
<69 IRQ_TYPE_LEVEL_HIGH>,
<73 IRQ_TYPE_LEVEL_HIGH>,
<127 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "hif0", "hif1", "hif2",
"hif3", "hif4", "hif5", "hif6", "hif7",
"hif8", "link";
reg = <2>;
port-id = <2>; /* For backward compatibility. */
gop-port-id = <3>;
status = "disabled";
};
};
CP11X_LABEL(comphy): phy@120000 {
compatible = "marvell,comphy-cp110";
reg = <0x120000 0x6000>;
marvell,system-controller = <&CP11X_LABEL(syscon0)>;
clocks = <&CP11X_LABEL(clk) 1 5>, <&CP11X_LABEL(clk) 1 6>,
<&CP11X_LABEL(clk) 1 18>;
clock-names = "mg_clk", "mg_core_clk", "axi_clk";
#address-cells = <1>;
#size-cells = <0>;
CP11X_LABEL(comphy0): phy@0 {
reg = <0>;
#phy-cells = <1>;
};
CP11X_LABEL(comphy1): phy@1 {
reg = <1>;
#phy-cells = <1>;
};
CP11X_LABEL(comphy2): phy@2 {
reg = <2>;
#phy-cells = <1>;
};
CP11X_LABEL(comphy3): phy@3 {
reg = <3>;
#phy-cells = <1>;
};
CP11X_LABEL(comphy4): phy@4 {
reg = <4>;
#phy-cells = <1>;
};
CP11X_LABEL(comphy5): phy@5 {
reg = <5>;
#phy-cells = <1>;
};
};
CP11X_LABEL(mdio): mdio@12a200 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "marvell,orion-mdio";
reg = <0x12a200 0x10>;
clocks = <&CP11X_LABEL(clk) 1 9>, <&CP11X_LABEL(clk) 1 5>,
<&CP11X_LABEL(clk) 1 6>, <&CP11X_LABEL(clk) 1 18>;
status = "disabled";
};
CP11X_LABEL(xmdio): mdio@12a600 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "marvell,xmdio";
reg = <0x12a600 0x10>;
clocks = <&CP11X_LABEL(clk) 1 5>,
<&CP11X_LABEL(clk) 1 6>, <&CP11X_LABEL(clk) 1 18>;
status = "disabled";
};
CP11X_LABEL(icu): interrupt-controller@1e0000 {
compatible = "marvell,cp110-icu";
reg = <0x1e0000 0x440>;
#address-cells = <1>;
#size-cells = <1>;
CP11X_LABEL(icu_nsr): interrupt-controller@10 {
compatible = "marvell,cp110-icu-nsr";
reg = <0x10 0x20>;
#address-cells = <0>;
#interrupt-cells = <2>;
interrupt-controller;
msi-parent = <&gicp>;
};
CP11X_LABEL(icu_sei): interrupt-controller@50 {
compatible = "marvell,cp110-icu-sei";
reg = <0x50 0x10>;
#interrupt-cells = <2>;
interrupt-controller;
msi-parent = <&sei>;
};
};
CP11X_LABEL(rtc): rtc@284000 {
compatible = "marvell,armada-8k-rtc";
reg = <0x284000 0x20>, <0x284080 0x24>;
reg-names = "rtc", "rtc-soc";
interrupts = <77 IRQ_TYPE_LEVEL_HIGH>;
};
CP11X_LABEL(syscon0): system-controller@440000 {
compatible = "syscon", "simple-mfd";
reg = <0x440000 0x2000>;
CP11X_LABEL(clk): clock {
compatible = "marvell,cp110-clock";
#clock-cells = <2>;
};
CP11X_LABEL(gpio1): gpio@100 {
compatible = "marvell,armada-8k-gpio";
offset = <0x100>;
ngpios = <32>;
gpio-controller;
#gpio-cells = <2>;
gpio-ranges = <&CP11X_LABEL(pinctrl) 0 0 32>;
marvell,pwm-offset = <0x1f0>;
#pwm-cells = <2>;
interrupt-controller;
interrupts = <86 IRQ_TYPE_LEVEL_HIGH>,
<85 IRQ_TYPE_LEVEL_HIGH>,
<84 IRQ_TYPE_LEVEL_HIGH>,
<83 IRQ_TYPE_LEVEL_HIGH>;
#interrupt-cells = <2>;
clock-names = "core", "axi";
clocks = <&CP11X_LABEL(clk) 1 21>,
<&CP11X_LABEL(clk) 1 17>;
status = "disabled";
};
CP11X_LABEL(gpio2): gpio@140 {
compatible = "marvell,armada-8k-gpio";
offset = <0x140>;
ngpios = <31>;
gpio-controller;
#gpio-cells = <2>;
gpio-ranges = <&CP11X_LABEL(pinctrl) 0 32 31>;
marvell,pwm-offset = <0x1f0>;
#pwm-cells = <2>;
interrupt-controller;
interrupts = <82 IRQ_TYPE_LEVEL_HIGH>,
<81 IRQ_TYPE_LEVEL_HIGH>,
<80 IRQ_TYPE_LEVEL_HIGH>,
<79 IRQ_TYPE_LEVEL_HIGH>;
#interrupt-cells = <2>;
clock-names = "core", "axi";
clocks = <&CP11X_LABEL(clk) 1 21>,
<&CP11X_LABEL(clk) 1 17>;
status = "disabled";
};
};
CP11X_LABEL(syscon1): system-controller@400000 {
compatible = "syscon", "simple-mfd";
reg = <0x400000 0x1000>;
#address-cells = <1>;
#size-cells = <1>;
CP11X_LABEL(thermal): thermal-sensor@70 {
compatible = "marvell,armada-cp110-thermal";
reg = <0x70 0x10>;
interrupts-extended =
<&CP11X_LABEL(icu_sei) 116 IRQ_TYPE_LEVEL_HIGH>;
#thermal-sensor-cells = <1>;
};
};
CP11X_LABEL(utmi): utmi@580000 {
compatible = "marvell,cp110-utmi-phy";
reg = <0x580000 0x2000>;
marvell,system-controller = <&CP11X_LABEL(syscon0)>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
CP11X_LABEL(utmi0): usb-phy@0 {
reg = <0>;
#phy-cells = <0>;
};
CP11X_LABEL(utmi1): usb-phy@1 {
reg = <1>;
#phy-cells = <0>;
};
};
CP11X_LABEL(usb3_0): usb@500000 {
compatible = "marvell,armada-8k-xhci",
"generic-xhci";
reg = <0x500000 0x4000>;
dma-coherent;
interrupts = <106 IRQ_TYPE_LEVEL_HIGH>;
clock-names = "core", "reg";
clocks = <&CP11X_LABEL(clk) 1 22>,
<&CP11X_LABEL(clk) 1 16>;
status = "disabled";
};
CP11X_LABEL(usb3_1): usb@510000 {
compatible = "marvell,armada-8k-xhci",
"generic-xhci";
reg = <0x510000 0x4000>;
dma-coherent;
interrupts = <105 IRQ_TYPE_LEVEL_HIGH>;
clock-names = "core", "reg";
clocks = <&CP11X_LABEL(clk) 1 23>,
<&CP11X_LABEL(clk) 1 16>;
status = "disabled";
};
CP11X_LABEL(sata0): sata@540000 {
compatible = "marvell,armada-8k-ahci",
"generic-ahci";
reg = <0x540000 0x30000>;
dma-coherent;
interrupts = <107 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&CP11X_LABEL(clk) 1 15>,
<&CP11X_LABEL(clk) 1 16>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
sata-port@0 {
reg = <0>;
status = "disabled";
};
sata-port@1 {
reg = <1>;
status = "disabled";
};
};
CP11X_LABEL(xor0): xor@6a0000 {
compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
reg = <0x6a0000 0x1000>, <0x6b0000 0x1000>;
dma-coherent;
msi-parent = <&gic_v2m0>;
clock-names = "core", "reg";
clocks = <&CP11X_LABEL(clk) 1 8>,
<&CP11X_LABEL(clk) 1 14>;
};
CP11X_LABEL(xor1): xor@6c0000 {
compatible = "marvell,armada-7k-xor", "marvell,xor-v2";
reg = <0x6c0000 0x1000>, <0x6d0000 0x1000>;
dma-coherent;
msi-parent = <&gic_v2m0>;
clock-names = "core", "reg";
clocks = <&CP11X_LABEL(clk) 1 7>,
<&CP11X_LABEL(clk) 1 14>;
};
CP11X_LABEL(spi0): spi@700600 {
compatible = "marvell,armada-380-spi";
reg = <0x700600 0x50>;
#address-cells = <0x1>;
#size-cells = <0x0>;
clock-names = "core", "axi";
clocks = <&CP11X_LABEL(clk) 1 21>,
<&CP11X_LABEL(clk) 1 17>;
status = "disabled";
};
CP11X_LABEL(spi1): spi@700680 {
compatible = "marvell,armada-380-spi";
reg = <0x700680 0x50>;
#address-cells = <1>;
#size-cells = <0>;
clock-names = "core", "axi";
clocks = <&CP11X_LABEL(clk) 1 21>,
<&CP11X_LABEL(clk) 1 17>;
status = "disabled";
};
CP11X_LABEL(i2c0): i2c@701000 {
compatible = "marvell,mv78230-i2c";
reg = <0x701000 0x20>;
#address-cells = <1>;
#size-cells = <0>;
interrupts = <120 IRQ_TYPE_LEVEL_HIGH>;
clock-names = "core", "reg";
clocks = <&CP11X_LABEL(clk) 1 21>,
<&CP11X_LABEL(clk) 1 17>;
status = "disabled";
};
CP11X_LABEL(i2c1): i2c@701100 {
compatible = "marvell,mv78230-i2c";
reg = <0x701100 0x20>;
#address-cells = <1>;
#size-cells = <0>;
interrupts = <121 IRQ_TYPE_LEVEL_HIGH>;
clock-names = "core", "reg";
clocks = <&CP11X_LABEL(clk) 1 21>,
<&CP11X_LABEL(clk) 1 17>;
status = "disabled";
};
CP11X_LABEL(uart0): serial@702000 {
compatible = "snps,dw-apb-uart";
reg = <0x702000 0x100>;
reg-shift = <2>;
interrupts = <122 IRQ_TYPE_LEVEL_HIGH>;
reg-io-width = <1>;
clock-names = "baudclk", "apb_pclk";
clocks = <&CP11X_LABEL(clk) 1 21>,
<&CP11X_LABEL(clk) 1 17>;
status = "disabled";
};
CP11X_LABEL(uart1): serial@702100 {
compatible = "snps,dw-apb-uart";
reg = <0x702100 0x100>;
reg-shift = <2>;
interrupts = <123 IRQ_TYPE_LEVEL_HIGH>;
reg-io-width = <1>;
clock-names = "baudclk", "apb_pclk";
clocks = <&CP11X_LABEL(clk) 1 21>,
<&CP11X_LABEL(clk) 1 17>;
status = "disabled";
};
CP11X_LABEL(uart2): serial@702200 {
compatible = "snps,dw-apb-uart";
reg = <0x702200 0x100>;
reg-shift = <2>;
interrupts = <124 IRQ_TYPE_LEVEL_HIGH>;
reg-io-width = <1>;
clock-names = "baudclk", "apb_pclk";
clocks = <&CP11X_LABEL(clk) 1 21>,
<&CP11X_LABEL(clk) 1 17>;
status = "disabled";
};
CP11X_LABEL(uart3): serial@702300 {
compatible = "snps,dw-apb-uart";
reg = <0x702300 0x100>;
reg-shift = <2>;
interrupts = <125 IRQ_TYPE_LEVEL_HIGH>;
reg-io-width = <1>;
clock-names = "baudclk", "apb_pclk";
clocks = <&CP11X_LABEL(clk) 1 21>,
<&CP11X_LABEL(clk) 1 17>;
status = "disabled";
};
CP11X_LABEL(nand_controller): nand-controller@720000 {
/*
* Due to the limitation of the pins available
* this controller is only usable on the CPM
* for A7K and on the CPS for A8K.
*/
compatible = "marvell,armada-8k-nand-controller",
"marvell,armada370-nand-controller";
reg = <0x720000 0x54>;
#address-cells = <1>;
#size-cells = <0>;
interrupts = <115 IRQ_TYPE_LEVEL_HIGH>;
clock-names = "core", "reg";
clocks = <&CP11X_LABEL(clk) 1 2>,
<&CP11X_LABEL(clk) 1 17>;
marvell,system-controller = <&CP11X_LABEL(syscon0)>;
status = "disabled";
};
CP11X_LABEL(trng): trng@760000 {
compatible = "marvell,armada-8k-rng",
"inside-secure,safexcel-eip76";
reg = <0x760000 0x7d>;
interrupts = <95 IRQ_TYPE_LEVEL_HIGH>;
clock-names = "core", "reg";
clocks = <&CP11X_LABEL(clk) 1 25>,
<&CP11X_LABEL(clk) 1 17>;
status = "okay";
};
CP11X_LABEL(sdhci0): mmc@780000 {
compatible = "marvell,armada-cp110-sdhci";
reg = <0x780000 0x300>;
interrupts = <27 IRQ_TYPE_LEVEL_HIGH>;
clock-names = "core", "axi";
clocks = <&CP11X_LABEL(clk) 1 4>, <&CP11X_LABEL(clk) 1 18>;
dma-coherent;
status = "disabled";
};
CP11X_LABEL(crypto): crypto@800000 {
compatible = "marvell,armada-cp110-crypto",
"inside-secure,safexcel-eip197b";
reg = <0x800000 0x200000>;
interrupts = <88 IRQ_TYPE_LEVEL_HIGH>,
<89 IRQ_TYPE_LEVEL_HIGH>,
<90 IRQ_TYPE_LEVEL_HIGH>,
<91 IRQ_TYPE_LEVEL_HIGH>,
<92 IRQ_TYPE_LEVEL_HIGH>,
<87 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "ring0", "ring1", "ring2", "ring3",
"eip", "mem";
clock-names = "core", "reg";
clocks = <&CP11X_LABEL(clk) 1 26>,
<&CP11X_LABEL(clk) 1 17>;
dma-coherent;
};
};
CP11X_LABEL(pcie0): pcie@CP11X_PCIE0_BASE {
compatible = "marvell,armada8k-pcie", "snps,dw-pcie";
reg = <0 ADDRESSIFY(CP11X_PCIE0_BASE) 0 0x10000>,
<0 CP11X_PCIEx_CONF_BASE(0) 0 0x80000>;
reg-names = "ctrl", "config";
#address-cells = <3>;
#size-cells = <2>;
#interrupt-cells = <1>;
device_type = "pci";
dma-coherent;
msi-parent = <&gic_v2m0>;
bus-range = <0 0xff>;
/* non-prefetchable memory */
ranges = <0x82000000 0 CP11X_PCIEx_MEM_BASE(0) 0 CP11X_PCIEx_MEM_BASE(0) 0 CP11X_PCIEx_MEM_SIZE(0)>;
interrupt-map-mask = <0 0 0 0>;
interrupt-map = <0 0 0 0 &CP11X_LABEL(icu_nsr) 22 IRQ_TYPE_LEVEL_HIGH>;
interrupts = <22 IRQ_TYPE_LEVEL_HIGH>;
num-lanes = <1>;
clock-names = "core", "reg";
clocks = <&CP11X_LABEL(clk) 1 13>, <&CP11X_LABEL(clk) 1 14>;
status = "disabled";
};
CP11X_LABEL(pcie1): pcie@CP11X_PCIE1_BASE {
compatible = "marvell,armada8k-pcie", "snps,dw-pcie";
reg = <0 ADDRESSIFY(CP11X_PCIE1_BASE) 0 0x10000>,
<0 CP11X_PCIEx_CONF_BASE(1) 0 0x80000>;
reg-names = "ctrl", "config";
#address-cells = <3>;
#size-cells = <2>;
#interrupt-cells = <1>;
device_type = "pci";
dma-coherent;
msi-parent = <&gic_v2m0>;
bus-range = <0 0xff>;
/* non-prefetchable memory */
ranges = <0x82000000 0 CP11X_PCIEx_MEM_BASE(1) 0 CP11X_PCIEx_MEM_BASE(1) 0 CP11X_PCIEx_MEM_SIZE(1)>;
interrupt-map-mask = <0 0 0 0>;
interrupt-map = <0 0 0 0 &CP11X_LABEL(icu_nsr) 24 IRQ_TYPE_LEVEL_HIGH>;
interrupts = <24 IRQ_TYPE_LEVEL_HIGH>;
num-lanes = <1>;
clock-names = "core", "reg";
clocks = <&CP11X_LABEL(clk) 1 11>, <&CP11X_LABEL(clk) 1 14>;
status = "disabled";
};
CP11X_LABEL(pcie2): pcie@CP11X_PCIE2_BASE {
compatible = "marvell,armada8k-pcie", "snps,dw-pcie";
reg = <0 ADDRESSIFY(CP11X_PCIE2_BASE) 0 0x10000>,
<0 CP11X_PCIEx_CONF_BASE(2) 0 0x80000>;
reg-names = "ctrl", "config";
#address-cells = <3>;
#size-cells = <2>;
#interrupt-cells = <1>;
device_type = "pci";
dma-coherent;
msi-parent = <&gic_v2m0>;
bus-range = <0 0xff>;
/* non-prefetchable memory */
ranges = <0x82000000 0 CP11X_PCIEx_MEM_BASE(2) 0 CP11X_PCIEx_MEM_BASE(2) 0 CP11X_PCIEx_MEM_SIZE(2)>;
interrupt-map-mask = <0 0 0 0>;
interrupt-map = <0 0 0 0 &CP11X_LABEL(icu_nsr) 23 IRQ_TYPE_LEVEL_HIGH>;
interrupts = <23 IRQ_TYPE_LEVEL_HIGH>;
num-lanes = <1>;
clock-names = "core", "reg";
clocks = <&CP11X_LABEL(clk) 1 12>, <&CP11X_LABEL(clk) 1 14>;
status = "disabled";
};
};
@@ -0,0 +1,178 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright (C) 2024 Josua Mayer <josua@solid-run.com>
*
* DTS for SolidRun CN9130 Clearfog Base.
*
*/
/dts-v1/;
#include <dt-bindings/input/input.h>
#include <dt-bindings/leds/common.h>
#include "cn9130.dtsi"
#include "cn9130-sr-som.dtsi"
#include "cn9130-cf.dtsi"
/ {
model = "SolidRun CN9130 Clearfog Base";
compatible = "solidrun,cn9130-clearfog-base",
"solidrun,cn9130-sr-som", "marvell,cn9130";
gpio-keys {
compatible = "gpio-keys";
pinctrl-0 = <&rear_button_pins>;
pinctrl-names = "default";
button-0 {
/* The rear SW3 button */
label = "Rear Button";
gpios = <&cp0_gpio1 31 GPIO_ACTIVE_LOW>;
linux,can-disable;
linux,code = <BTN_0>;
};
};
rfkill-m2-gnss {
compatible = "rfkill-gpio";
label = "m.2 GNSS";
radio-type = "gps";
/* rfkill-gpio inverts internally */
shutdown-gpios = <&expander0 9 GPIO_ACTIVE_HIGH>;
};
/* M.2 is B-keyed, so w-disable is for WWAN */
rfkill-m2-wwan {
compatible = "rfkill-gpio";
label = "m.2 WWAN";
radio-type = "wwan";
/* rfkill-gpio inverts internally */
shutdown-gpios = <&expander0 8 GPIO_ACTIVE_HIGH>;
};
};
/* SRDS #3 - SGMII 1GE */
&cp0_eth1 {
phy = <&phy1>;
phys = <&cp0_comphy3 1>;
phy-mode = "sgmii";
status = "okay";
};
&cp0_eth2_phy {
/*
* Configure LEDs default behaviour:
* - LED[0]: link/activity: On/blink (green)
* - LED[1]: link is 100/1000Mbps: On (yellow)
* - LED[2]: high impedance (floating)
*/
marvell,reg-init = <3 16 0xf000 0x0a61>;
leds {
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_WAN;
default-state = "keep";
};
led@1 {
reg = <1>;
color = <LED_COLOR_ID_YELLOW>;
function = LED_FUNCTION_WAN;
default-state = "keep";
};
};
};
&cp0_gpio1 {
sim-select-hog {
gpio-hog;
gpios = <27 GPIO_ACTIVE_HIGH>;
output-high;
line-name = "sim-select";
};
};
&cp0_mdio {
phy1: ethernet-phy@1 {
reg = <1>;
/*
* Configure LEDs default behaviour:
* - LED[0]: link/activity: On/blink (green)
* - LED[1]: link is 100/1000Mbps: On (yellow)
* - LED[2]: high impedance (floating)
*
* Configure LEDs electrical polarity
* - on-state: low
* - off-state: high (not hi-z, to avoid residual glow)
*/
marvell,reg-init = <3 16 0xf000 0x0a61>,
<3 17 0x003f 0x000a>;
leds {
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
led@1 {
reg = <1>;
color = <LED_COLOR_ID_YELLOW>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
};
};
};
&cp0_pinctrl {
pinctrl-0 = <&sim_select_pins>;
pinctrl-names = "default";
rear_button_pins: cp0-rear-button-pins {
marvell,pins = "mpp31";
marvell,function = "gpio";
};
sim_select_pins: cp0-sim-select-pins {
marvell,pins = "mpp27";
marvell,function = "gpio";
};
};
/*
* SRDS #4 - USB 3.0 host on M.2 connector
* USB-2.0 Host on Type-A connector
*/
&cp0_usb3_1 {
phys = <&cp0_comphy4 1>, <&cp0_utmi1>;
phy-names = "comphy", "utmi";
dr_mode = "host";
status = "okay";
};
&expander0 {
m2-full-card-power-off-hog {
gpio-hog;
gpios = <2 GPIO_ACTIVE_LOW>;
output-low;
line-name = "m2-full-card-power-off";
};
m2-reset-hog {
gpio-hog;
gpios = <10 GPIO_ACTIVE_LOW>;
output-low;
line-name = "m2-reset";
};
};
@@ -0,0 +1,375 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright (C) 2024 Josua Mayer <josua@solid-run.com>
*
* DTS for SolidRun CN9130 Clearfog Pro.
*
*/
/dts-v1/;
#include <dt-bindings/input/input.h>
#include <dt-bindings/leds/common.h>
#include "cn9130.dtsi"
#include "cn9130-sr-som.dtsi"
#include "cn9130-cf.dtsi"
/ {
model = "SolidRun CN9130 Clearfog Pro";
compatible = "solidrun,cn9130-clearfog-pro",
"solidrun,cn9130-sr-som", "marvell,cn9130";
gpio-keys {
compatible = "gpio-keys";
pinctrl-0 = <&rear_button_pins>;
pinctrl-names = "default";
button-0 {
/* The rear SW3 button */
label = "Rear Button";
gpios = <&cp0_gpio2 0 GPIO_ACTIVE_LOW>;
linux,can-disable;
linux,code = <BTN_0>;
};
};
};
/* SRDS #3 - SGMII 1GE to L2 switch */
&cp0_eth1 {
phys = <&cp0_comphy3 1>;
phy-mode = "sgmii";
status = "okay";
fixed-link {
speed = <1000>;
full-duplex;
};
};
&cp0_eth2_phy {
/*
* Configure LEDs default behaviour similar to switch ports:
* - LED[0]: link/activity: On/blink (green)
* - LED[1]: link is 100/1000Mbps: On (red)
* - LED[2]: high impedance (floating)
*
* Switch port defaults:
* - LED0: link/activity: On/blink (green)
* - LED1: link is 1000Mbps: On (red)
*
* Identical configuration is impossible with hardware offload.
*/
marvell,reg-init = <3 16 0xf000 0x0a61>;
leds {
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_WAN;
label = "LED2";
default-state = "keep";
};
led@1 {
reg = <1>;
color = <LED_COLOR_ID_RED>;
function = LED_FUNCTION_WAN;
label = "LED1";
default-state = "keep";
};
};
};
&cp0_mdio {
ethernet-switch@4 {
compatible = "marvell,mv88e6085";
reg = <4>;
pinctrl-0 = <&dsa_clk_pins &dsa_pins>;
pinctrl-names = "default";
reset-gpios = <&cp0_gpio1 27 GPIO_ACTIVE_LOW>;
interrupt-parent = <&cp0_gpio1>;
interrupts = <29 IRQ_TYPE_EDGE_FALLING>;
ethernet-ports {
#address-cells = <1>;
#size-cells = <0>;
ethernet-port@0 {
reg = <0>;
label = "lan5";
phy = <&switch0phy0>;
leds {
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
label = "LED12";
default-state = "keep";
};
led@1 {
reg = <1>;
color = <LED_COLOR_ID_RED>;
function = LED_FUNCTION_LAN;
label = "LED11";
default-state = "keep";
};
};
};
ethernet-port@1 {
reg = <1>;
label = "lan4";
phy = <&switch0phy1>;
leds {
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
label = "LED10";
default-state = "keep";
};
led@1 {
reg = <1>;
color = <LED_COLOR_ID_RED>;
function = LED_FUNCTION_LAN;
label = "LED9";
default-state = "keep";
};
};
};
ethernet-port@2 {
reg = <2>;
label = "lan3";
phy = <&switch0phy2>;
leds {
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
label = "LED8";
default-state = "keep";
};
led@1 {
reg = <1>;
color = <LED_COLOR_ID_RED>;
function = LED_FUNCTION_LAN;
label = "LED7";
default-state = "keep";
};
};
};
ethernet-port@3 {
reg = <3>;
label = "lan2";
phy = <&switch0phy3>;
leds {
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
label = "LED6";
default-state = "keep";
};
led@1 {
reg = <1>;
color = <LED_COLOR_ID_RED>;
function = LED_FUNCTION_LAN;
label = "LED5";
default-state = "keep";
};
};
};
ethernet-port@4 {
reg = <4>;
label = "lan1";
phy = <&switch0phy4>;
leds {
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
label = "LED4";
default-state = "keep";
};
led@1 {
reg = <1>;
color = <LED_COLOR_ID_RED>;
function = LED_FUNCTION_LAN;
label = "LED3";
default-state = "keep";
};
};
};
ethernet-port@5 {
reg = <5>;
label = "cpu";
ethernet = <&cp0_eth1>;
phy-mode = "sgmii";
fixed-link {
speed = <1000>;
full-duplex;
};
};
ethernet-port@6 {
reg = <6>;
label = "lan6";
phy-mode = "rgmii";
/*
* Because of mdio address conflict the
* external phy is not readable.
* Force a fixed link instead.
*/
fixed-link {
speed = <1000>;
full-duplex;
};
};
};
mdio {
#address-cells = <1>;
#size-cells = <0>;
switch0phy0: ethernet-phy@0 {
reg = <0x0>;
};
switch0phy1: ethernet-phy@1 {
reg = <0x1>;
/*
* Indirectly configure default behaviour
* for port lan6 leds behind external phy.
* Internal PHYs are not using page 3,
* therefore writing to it is safe.
*/
marvell,reg-init = <3 16 0xf000 0x0a61>;
};
switch0phy2: ethernet-phy@2 {
reg = <0x2>;
};
switch0phy3: ethernet-phy@3 {
reg = <0x3>;
};
switch0phy4: ethernet-phy@4 {
reg = <0x4>;
};
};
/*
* There is an external phy on the switch mdio bus.
* Because its mdio address collides with internal phys,
* it is not readable.
*
* mdio-external {
* compatible = "marvell,mv88e6xxx-mdio-external";
* #address-cells = <1>;
* #size-cells = <0>;
*
* ethernet-phy@1 {
* reg = <0x1>;
* };
* };
*/
};
};
/* SRDS #4 - miniPCIe (CON2) */
&cp0_pcie1 {
num-lanes = <1>;
phys = <&cp0_comphy4 1>;
/* dw-pcie inverts internally */
reset-gpios = <&expander0 2 GPIO_ACTIVE_HIGH>;
status = "okay";
};
&cp0_pinctrl {
dsa_clk_pins: cp0-dsa-clk-pins {
marvell,pins = "mpp40";
marvell,function = "synce1";
};
dsa_pins: cp0-dsa-pins {
marvell,pins = "mpp27", "mpp29";
marvell,function = "gpio";
};
rear_button_pins: cp0-rear-button-pins {
marvell,pins = "mpp32";
marvell,function = "gpio";
};
cp0_spi1_cs1_pins: cp0-spi1-cs1-pins {
marvell,pins = "mpp12";
marvell,function = "spi1";
};
};
&cp0_spi1 {
/* add pin for chip-select 1 on mikrobus */
pinctrl-0 = <&cp0_spi1_pins &cp0_spi1_cs1_pins>;
};
/* USB-2.0 Host on Type-A connector */
&cp0_usb3_1 {
phys = <&cp0_utmi1>;
phy-names = "utmi";
dr_mode = "host";
status = "okay";
};
&expander0 {
/* CON2 */
pcie1-0-clkreq-hog {
gpio-hog;
gpios = <4 GPIO_ACTIVE_LOW>;
input;
line-name = "pcie1.0-clkreq";
};
/* CON2 */
pcie1-0-w-disable-hog {
gpio-hog;
gpios = <7 GPIO_ACTIVE_LOW>;
output-low;
line-name = "pcie1.0-w-disable";
};
};
@@ -0,0 +1,198 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright (C) 2024 Josua Mayer <josua@solid-run.com>
*
* DTS for common base of SolidRun CN9130 Clearfog Base and Pro.
*
*/
/ {
aliases {
/* label nics same order as armada 388 clearfog */
ethernet0 = &cp0_eth2;
ethernet1 = &cp0_eth1;
ethernet2 = &cp0_eth0;
i2c1 = &cp0_i2c1;
mmc1 = &cp0_sdhci0;
};
reg_usb3_vbus0: regulator-usb3-vbus0 {
compatible = "regulator-fixed";
regulator-name = "vbus0";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
gpios = <&expander0 6 GPIO_ACTIVE_LOW>;
};
sfp: sfp {
compatible = "sff,sfp";
i2c-bus = <&cp0_i2c1>;
los-gpios = <&expander0 12 GPIO_ACTIVE_HIGH>;
mod-def0-gpios = <&expander0 15 GPIO_ACTIVE_LOW>;
tx-disable-gpios = <&expander0 14 GPIO_ACTIVE_HIGH>;
tx-fault-gpios = <&expander0 13 GPIO_ACTIVE_HIGH>;
maximum-power-milliwatt = <2000>;
};
};
/* SRDS #2 - SFP+ 10GE */
&cp0_eth0 {
managed = "in-band-status";
phys = <&cp0_comphy2 0>;
phy-mode = "10gbase-r";
sfp = <&sfp>;
status = "okay";
};
&cp0_i2c0 {
expander0: gpio-expander@20 {
compatible = "nxp,pca9555";
reg = <0x20>;
gpio-controller;
#gpio-cells = <2>;
pinctrl-0 = <&expander0_pins>;
pinctrl-names = "default";
interrupt-parent = <&cp0_gpio1>;
interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
/* CON3 */
pcie2-0-clkreq-hog {
gpio-hog;
gpios = <0 GPIO_ACTIVE_LOW>;
input;
line-name = "pcie2.0-clkreq";
};
/* CON3 */
pcie2-0-w-disable-hog {
gpio-hog;
gpios = <3 GPIO_ACTIVE_LOW>;
output-low;
line-name = "pcie2.0-w-disable";
};
usb3-ilimit-hog {
gpio-hog;
gpios = <5 GPIO_ACTIVE_LOW>;
input;
line-name = "usb3-current-limit";
};
m2-devslp-hog {
gpio-hog;
gpios = <11 GPIO_ACTIVE_HIGH>;
output-low;
line-name = "m.2 devslp";
};
};
/* The MCP3021 supports standard and fast modes */
adc@4c {
compatible = "microchip,mcp3021";
reg = <0x4c>;
};
carrier_eeprom: eeprom@52 {
compatible = "atmel,24c02";
reg = <0x52>;
pagesize = <8>;
};
};
&cp0_i2c1 {
/*
* Routed to SFP, M.2, mikrobus, and miniPCIe
* SFP limits this to 100kHz, and requires an AT24C01A/02/04 with
* address pins tied low, which takes addresses 0x50 and 0x51.
* Mikrobus doesn't specify beyond an I2C bus being present.
* PCIe uses ARP to assign addresses, or 0x63-0x64.
*/
clock-frequency = <100000>;
pinctrl-0 = <&cp0_i2c1_pins>;
pinctrl-names = "default";
status = "okay";
};
/* SRDS #5 - miniPCIe (CON3) */
&cp0_pcie2 {
num-lanes = <1>;
phys = <&cp0_comphy5 2>;
/* dw-pcie inverts internally */
reset-gpios = <&expander0 1 GPIO_ACTIVE_HIGH>;
status = "okay";
};
&cp0_pinctrl {
cp0_i2c1_pins: cp0-i2c1-pins {
marvell,pins = "mpp35", "mpp36";
marvell,function = "i2c1";
};
cp0_mmc0_pins: cp0-mmc0-pins {
marvell,pins = "mpp43", "mpp56", "mpp57", "mpp58",
"mpp59", "mpp60", "mpp61";
marvell,function = "sdio";
};
mikro_spi_pins: cp0-spi1-cs1-pins {
marvell,pins = "mpp12";
marvell,function = "spi1";
};
mikro_uart_pins: cp0-uart-pins {
marvell,pins = "mpp2", "mpp3";
marvell,function = "uart1";
};
expander0_pins: cp0-expander0-pins {
marvell,pins = "mpp4";
marvell,function = "gpio";
};
};
/* SRDS #0 - SATA on M.2 connector */
&cp0_sata0 {
status = "okay";
sata-port@1 {
phys = <&cp0_comphy0 1>;
status = "okay";
};
};
/* microSD */
&cp0_sdhci0 {
pinctrl-0 = <&cp0_mmc0_pins>;
pinctrl-names = "default";
bus-width = <4>;
no-1-8-v;
status = "okay";
};
&cp0_spi1 {
/* CS1 for mikrobus */
pinctrl-0 = <&cp0_spi1_pins &mikro_spi_pins>;
};
/*
* SRDS #1 - USB-3.0 Host on Type-A connector
* USB-2.0 Host on mPCI-e connector (CON3)
*/
&cp0_usb3_0 {
phys = <&cp0_comphy1 0>, <&cp0_utmi0>;
phy-names = "comphy", "utmi";
vbus-supply = <&reg_usb3_vbus0>;
dr_mode = "host";
status = "okay";
};
&cp0_utmi {
status = "okay";
};
/* mikrobus uart */
&cp0_uart0 {
pinctrl-0 = <&mikro_uart_pins>;
pinctrl-names = "default";
status = "okay";
};
@@ -0,0 +1,38 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright (C) 2020 Marvell International Ltd.
*/
#include "cn9130-crb.dtsi"
/ {
model = "Marvell Armada CN9130-CRB-A";
};
&cp0_pcie0 {
status = "okay";
num-lanes = <4>;
num-viewport = <8>;
/* Generic PHY, providing serdes lanes */
phys = <&cp0_comphy0 0
&cp0_comphy1 0
&cp0_comphy2 0
&cp0_comphy3 0>;
iommu-map =
<0x0 &smmu 0x480 0x20>,
<0x100 &smmu 0x4a0 0x20>,
<0x200 &smmu 0x4c0 0x20>;
iommu-map-mask = <0x031f>;
};
&cp0_usb3_0 {
status = "okay";
usb-phy = <&cp0_usb3_0_phy0>;
phy-names = "usb";
};
&cp0_usb3_1 {
status = "okay";
usb-phy = <&cp0_usb3_0_phy1>;
phy-names = "usb";
};
@@ -0,0 +1,47 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright (C) 2020 Marvell International Ltd.
*/
#include "cn9130-crb.dtsi"
/ {
model = "Marvell Armada CN9130-CRB-B";
};
&cp0_pcie0 {
status = "okay";
num-lanes = <1>;
num-viewport = <8>;
/* Generic PHY, providing serdes lanes */
phys = <&cp0_comphy0 0>;
iommu-map =
<0x0 &smmu 0x480 0x20>,
<0x100 &smmu 0x4a0 0x20>,
<0x200 &smmu 0x4c0 0x20>;
iommu-map-mask = <0x031f>;
};
&cp0_sata0 {
status = "okay";
sata-port@0 {
status = "okay";
/* Generic PHY, providing serdes lanes */
phys = <&cp0_comphy2 0>;
status = "okay";
};
};
&cp0_usb3_0 {
status = "okay";
usb-phy = <&cp0_usb3_0_phy0>;
phy-names = "usb";
phys = <&cp0_comphy1 0>;
};
&cp0_usb3_1 {
status = "okay";
usb-phy = <&cp0_usb3_0_phy1>;
phy-names = "usb";
phys = <&cp0_comphy3 1>;
};
@@ -0,0 +1,361 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright (C) 2020 Marvell International Ltd.
*/
#include "cn9130.dtsi" /* include SoC device tree */
#include <dt-bindings/gpio/gpio.h>
/ {
chosen {
stdout-path = "serial0:115200n8";
};
aliases {
i2c0 = &cp0_i2c0;
ethernet0 = &cp0_eth0;
ethernet1 = &cp0_eth1;
ethernet2 = &cp0_eth2;
gpio1 = &cp0_gpio1;
gpio2 = &cp0_gpio2;
};
memory@0 {
device_type = "memory";
reg = <0x0 0x0 0x0 0x80000000>;
};
ap0_reg_mmc_vccq: regulator-1 {
compatible = "regulator-gpio";
regulator-name = "ap0_mmc_vccq";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
gpios = <&expander0 5 GPIO_ACTIVE_HIGH>;
states = <1800000 0x1
3300000 0x0>;
};
cp0_reg_usb3_vbus1: regulator-2 {
compatible = "regulator-fixed";
regulator-name = "cp0-xhci1-vbus";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
enable-active-high;
gpio = <&expander0 8 GPIO_ACTIVE_HIGH>;
};
cp0_usb3_0_phy0: usb-phy-1 {
compatible = "usb-nop-xceiv";
#phy-cells = <0>;
};
cp0_usb3_0_phy1: usb-phy-2 {
compatible = "usb-nop-xceiv";
#phy-cells = <0>;
vcc-supply = <&cp0_reg_usb3_vbus1>;
};
cp0_reg_sd_vccq: regulator-3 {
compatible = "regulator-gpio";
regulator-name = "cp0_sd_vccq";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
gpios = <&cp0_gpio2 18 GPIO_ACTIVE_HIGH>;
states = <1800000 0x1
3300000 0x0>;
};
cp0_reg_sd_vcc: regulator-4 {
compatible = "regulator-fixed";
regulator-name = "cp0_sd_vcc";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
gpio = <&cp0_gpio2 19 GPIO_ACTIVE_HIGH>;
enable-active-high;
regulator-always-on;
};
sfp: sfp {
compatible = "sff,sfp";
i2c-bus = <&cp0_i2c1>;
mod-def0-gpios = <&expander0 3 GPIO_ACTIVE_LOW>;
los-gpios = <&expander0 15 GPIO_ACTIVE_HIGH>;
tx-disable-gpios = <&expander0 2 GPIO_ACTIVE_HIGH>;
tx-fault-gpios = <&cp0_gpio1 24 GPIO_ACTIVE_HIGH>;
maximum-power-milliwatt = <3000>;
};
};
&uart0 {
status = "okay";
};
/* on-board eMMC U6 */
&ap_sdhci0 {
bus-width = <8>;
status = "okay";
mmc-ddr-1_8v;
vqmmc-supply = <&ap0_reg_mmc_vccq>;
};
&cp0_syscon0 {
cp0_pinctrl: pinctrl {
compatible = "marvell,cp115-standalone-pinctrl";
cp0_i2c0_pins: cp0-i2c-pins-0 {
marvell,pins = "mpp37", "mpp38";
marvell,function = "i2c0";
};
cp0_i2c1_pins: cp0-i2c-pins-1 {
marvell,pins = "mpp35", "mpp36";
marvell,function = "i2c1";
};
cp0_sdhci_cd_pins_crb: cp0-sdhci-cd-pins-crb {
marvell,pins = "mpp55";
marvell,function = "gpio";
};
cp0_sdhci_pins: cp0-sdhi-pins-0 {
marvell,pins = "mpp56", "mpp57", "mpp58",
"mpp59", "mpp60", "mpp61";
marvell,function = "sdio";
};
cp0_spi1_pins: cp0-spi-pins-1 {
marvell,pins = "mpp13", "mpp14", "mpp15", "mpp16";
marvell,function = "spi1";
};
};
};
&cp0_gpio1 {
status = "okay";
};
&cp0_gpio2 {
status = "okay";
};
&cp0_i2c0 {
pinctrl-names = "default";
pinctrl-0 = <&cp0_i2c0_pins>;
status = "okay";
clock-frequency = <100000>;
expander0: mcp23x17@20 {
compatible = "microchip,mcp23017";
gpio-controller;
#gpio-cells = <2>;
reg = <0x20>;
status = "okay";
};
};
&cp0_i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&cp0_i2c1_pins>;
clock-frequency = <100000>;
status = "okay";
};
&cp0_sdhci0 {
pinctrl-names = "default";
pinctrl-0 = <&cp0_sdhci_pins
&cp0_sdhci_cd_pins_crb>;
bus-width = <4>;
cd-gpios = <&cp0_gpio2 23 GPIO_ACTIVE_HIGH>;
vqmmc-supply = <&cp0_reg_sd_vccq>;
vmmc-supply = <&cp0_reg_sd_vcc>;
status = "okay";
};
&cp0_spi1 {
pinctrl-names = "default";
pinctrl-0 = <&cp0_spi1_pins>;
reg = <0x700680 0x50>, /* control */
<0x2000000 0x1000000>; /* CS0 */
status = "okay";
flash@0 {
#address-cells = <0x1>;
#size-cells = <0x1>;
compatible = "jedec,spi-nor";
reg = <0x0>;
/* On-board MUX does not allow higher frequencies */
spi-max-frequency = <40000000>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "U-Boot";
reg = <0x0 0x200000>;
};
partition@400000 {
label = "Filesystem";
reg = <0x200000 0xe00000>;
};
};
};
};
&cp0_mdio {
status = "okay";
phy0: ethernet-phy@0 {
reg = <0>;
};
switch6: ethernet-switch@6 {
/* Actual device is MV88E6393X */
compatible = "marvell,mv88e6190";
reg = <6>;
interrupt-parent = <&cp0_gpio1>;
interrupts = <28 IRQ_TYPE_LEVEL_LOW>;
interrupt-controller;
#interrupt-cells = <2>;
dsa,member = <0 0>;
ethernet-ports {
#address-cells = <1>;
#size-cells = <0>;
ethernet-port@1 {
reg = <1>;
label = "p1";
phy-handle = <&switch0phy1>;
};
ethernet-port@2 {
reg = <2>;
label = "p2";
phy-handle = <&switch0phy2>;
};
ethernet-port@3 {
reg = <3>;
label = "p3";
phy-handle = <&switch0phy3>;
};
ethernet-port@4 {
reg = <4>;
label = "p4";
phy-handle = <&switch0phy4>;
};
ethernet-port@5 {
reg = <5>;
label = "p5";
phy-handle = <&switch0phy5>;
};
ethernet-port@6 {
reg = <6>;
label = "p6";
phy-handle = <&switch0phy6>;
};
ethernet-port@7 {
reg = <7>;
label = "p7";
phy-handle = <&switch0phy7>;
};
ethernet-port@8 {
reg = <8>;
label = "p8";
phy-handle = <&switch0phy8>;
};
ethernet-port@9 {
reg = <9>;
label = "p9";
phy-mode = "10gbase-r";
sfp = <&sfp>;
managed = "in-band-status";
};
ethernet-port@a {
reg = <10>;
ethernet = <&cp0_eth0>;
phy-mode = "10gbase-r";
managed = "in-band-status";
};
};
mdio {
#address-cells = <1>;
#size-cells = <0>;
switch0phy1: ethernet-phy@1 {
reg = <0x1>;
};
switch0phy2: ethernet-phy@2 {
reg = <0x2>;
};
switch0phy3: ethernet-phy@3 {
reg = <0x3>;
};
switch0phy4: ethernet-phy@4 {
reg = <0x4>;
};
switch0phy5: ethernet-phy@5 {
reg = <0x5>;
};
switch0phy6: ethernet-phy@6 {
reg = <0x6>;
};
switch0phy7: ethernet-phy@7 {
reg = <0x7>;
};
switch0phy8: ethernet-phy@8 {
reg = <0x8>;
};
};
};
};
&cp0_xmdio {
status = "okay";
nbaset_phy0: ethernet-phy@0 {
compatible = "ethernet-phy-ieee802.3-c45";
reg = <0>;
};
};
&cp0_ethernet {
status = "okay";
};
&cp0_eth0 {
/* This port is connected to 88E6393X switch */
status = "okay";
phy-mode = "10gbase-r";
managed = "in-band-status";
phys = <&cp0_comphy4 0>;
};
&cp0_eth1 {
status = "okay";
phy = <&phy0>;
phy-mode = "rgmii-id";
};
&cp0_eth2 {
/* This port uses "2500base-t" phy-mode */
status = "disabled";
phy = <&nbaset_phy0>;
phys = <&cp0_comphy5 2>;
};
@@ -0,0 +1,22 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2020 Marvell International Ltd.
*
* Device tree for the CN9130-DB board (setup "B").
*/
#include "cn9130-db.dtsi"
/ {
model = "Marvell Armada CN9130-DB setup B";
};
/* Setup B has NAND flash as a boot device, while regular setup uses SPI flash.
* Since CP0 SPI1 and CP0 NAND are sharing some pins, they cannot be activated
* simultaneously. When NAND controller is enabled, SPI1 should be disabled.
*/
&cp0_nand_controller {
status = "okay";
};
@@ -0,0 +1,22 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2019 Marvell International Ltd.
*
* Device tree for the CN9130-DB board.
*/
#include "cn9130-db.dtsi"
/ {
model = "Marvell Armada CN9130-DB setup A";
};
/* Setup A has SPI1 flash as a boot device, while setup B uses NAND flash.
* Since CP0 SPI1 and CP0 NAND are sharing some pins, they cannot be activated
* simultaneously. When SPI controller is enabled, NAND should be disabled.
*/
&cp0_spi1 {
status = "okay";
};
@@ -0,0 +1,407 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2019 Marvell International Ltd.
*
* Device tree for the CN9130-DB board.
*/
#include "cn9130.dtsi"
#include <dt-bindings/gpio/gpio.h>
/ {
chosen {
stdout-path = "serial0:115200n8";
};
aliases {
gpio1 = &cp0_gpio1;
gpio2 = &cp0_gpio2;
i2c0 = &cp0_i2c0;
ethernet0 = &cp0_eth0;
ethernet1 = &cp0_eth1;
ethernet2 = &cp0_eth2;
spi1 = &cp0_spi0;
spi2 = &cp0_spi1;
};
memory@0 {
device_type = "memory";
reg = <0x0 0x0 0x0 0x80000000>;
};
ap0_reg_sd_vccq: regulator-1 {
compatible = "regulator-gpio";
regulator-name = "ap0_sd_vccq";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
gpios = <&expander0 8 GPIO_ACTIVE_HIGH>;
states = <1800000 0x1 3300000 0x0>;
};
cp0_reg_usb3_vbus0: regulator-2 {
compatible = "regulator-fixed";
regulator-name = "cp0-xhci0-vbus";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
enable-active-high;
gpio = <&expander0 0 GPIO_ACTIVE_HIGH>;
};
cp0_usb3_0_phy0: usb-phy-1 {
compatible = "usb-nop-xceiv";
#phy-cells = <0>;
vcc-supply = <&cp0_reg_usb3_vbus0>;
};
cp0_reg_usb3_vbus1: regulator-3 {
compatible = "regulator-fixed";
regulator-name = "cp0-xhci1-vbus";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
enable-active-high;
gpio = <&expander0 1 GPIO_ACTIVE_HIGH>;
};
cp0_usb3_0_phy1: usb-phy-2 {
compatible = "usb-nop-xceiv";
#phy-cells = <0>;
vcc-supply = <&cp0_reg_usb3_vbus1>;
};
cp0_reg_sd_vccq: regulator-4 {
compatible = "regulator-gpio";
regulator-name = "cp0_sd_vccq";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
gpios = <&expander0 15 GPIO_ACTIVE_HIGH>;
states = <1800000 0x1
3300000 0x0>;
};
cp0_reg_sd_vcc: regulator-5 {
compatible = "regulator-fixed";
regulator-name = "cp0_sd_vcc";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
gpio = <&expander0 14 GPIO_ACTIVE_HIGH>;
enable-active-high;
regulator-always-on;
};
cp0_sfp_eth0: sfp-eth-1 {
compatible = "sff,sfp";
i2c-bus = <&cp0_sfpp0_i2c>;
los-gpios = <&cp0_module_expander1 11 GPIO_ACTIVE_HIGH>;
mod-def0-gpios = <&cp0_module_expander1 10 GPIO_ACTIVE_LOW>;
tx-disable-gpios = <&cp0_module_expander1 9 GPIO_ACTIVE_HIGH>;
tx-fault-gpios = <&cp0_module_expander1 8 GPIO_ACTIVE_HIGH>;
/*
* SFP cages are unconnected on early PCBs because of an the I2C
* lanes not being connected. Prevent the port for being
* unusable by disabling the SFP node.
*/
status = "disabled";
};
};
&uart0 {
status = "okay";
};
/* on-board eMMC - U9 */
&ap_sdhci0 {
bus-width = <8>;
vqmmc-supply = <&ap0_reg_sd_vccq>;
status = "okay";
};
&cp0_crypto {
status = "disabled";
};
&cp0_ethernet {
status = "okay";
};
/* SLM-1521-V2, CON9 */
&cp0_eth0 {
status = "okay";
phy-mode = "10gbase-r";
/* Generic PHY, providing serdes lanes */
phys = <&cp0_comphy4 0>;
managed = "in-band-status";
sfp = <&cp0_sfp_eth0>;
};
/* CON56 */
&cp0_eth1 {
status = "okay";
phy = <&phy0>;
phy-mode = "rgmii-id";
};
/* CON57 */
&cp0_eth2 {
status = "okay";
phy = <&phy1>;
phy-mode = "rgmii-id";
};
&cp0_gpio1 {
status = "okay";
};
&cp0_gpio2 {
status = "okay";
};
&cp0_i2c0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&cp0_i2c0_pins>;
clock-frequency = <100000>;
/* U36 */
expander0: pca953x@21 {
compatible = "nxp,pca9555";
gpio-controller;
#gpio-cells = <2>;
reg = <0x21>;
status = "okay";
};
/* U42 */
eeprom0: eeprom@50 {
compatible = "atmel,24c64";
reg = <0x50>;
pagesize = <0x20>;
};
/* U38 */
eeprom1: eeprom@57 {
compatible = "atmel,24c64";
reg = <0x57>;
pagesize = <0x20>;
};
};
&cp0_i2c1 {
status = "okay";
clock-frequency = <100000>;
/* SLM-1521-V2 - U3 */
i2c-mux@72 { /* verify address - depends on dpr */
compatible = "nxp,pca9544";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x72>;
cp0_sfpp0_i2c: i2c@0 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0>;
};
i2c@1 {
#address-cells = <1>;
#size-cells = <0>;
reg = <1>;
/* U12 */
cp0_module_expander1: pca9555@21 {
compatible = "nxp,pca9555";
gpio-controller;
#gpio-cells = <2>;
reg = <0x21>;
};
};
};
};
&cp0_mdio {
status = "okay";
phy0: ethernet-phy@0 {
reg = <0>;
};
phy1: ethernet-phy@1 {
reg = <1>;
};
};
/* U54 */
&cp0_nand_controller {
status = "disabled";
pinctrl-names = "default";
pinctrl-0 = <&nand_pins &nand_rb>;
nand@0 {
reg = <0>;
label = "main-storage";
nand-rb = <0>;
nand-ecc-mode = "hw";
nand-on-flash-bbt;
nand-ecc-strength = <8>;
nand-ecc-step-size = <512>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "U-Boot";
reg = <0 0x200000>;
};
partition@200000 {
label = "Linux";
reg = <0x200000 0xe00000>;
};
partition@1000000 {
label = "Filesystem";
reg = <0x1000000 0x3f000000>;
};
};
};
};
/* SLM-1521-V2, CON6 */
&cp0_pcie0 {
status = "okay";
num-lanes = <4>;
num-viewport = <8>;
/* Generic PHY, providing serdes lanes */
phys = <&cp0_comphy0 0
&cp0_comphy1 0
&cp0_comphy2 0
&cp0_comphy3 0>;
};
&cp0_sata0 {
status = "okay";
/* SLM-1521-V2, CON2 */
sata-port@1 {
status = "okay";
/* Generic PHY, providing serdes lanes */
phys = <&cp0_comphy5 1>;
};
};
/* CON 28 */
&cp0_sdhci0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&cp0_sdhci_pins
&cp0_sdhci_cd_pins>;
bus-width = <4>;
cd-gpios = <&cp0_gpio2 11 GPIO_ACTIVE_LOW>;
no-1-8-v;
vqmmc-supply = <&cp0_reg_sd_vccq>;
vmmc-supply = <&cp0_reg_sd_vcc>;
};
/* U55 */
&cp0_spi1 {
status = "disabled";
pinctrl-names = "default";
pinctrl-0 = <&cp0_spi1_pins>;
reg = <0x700680 0x50>;
flash@0 {
compatible = "jedec,spi-nor";
reg = <0x0>;
/* On-board MUX does not allow higher frequencies */
spi-max-frequency = <40000000>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "U-Boot-0";
reg = <0x0 0x200000>;
};
partition@400000 {
label = "Filesystem-0";
reg = <0x200000 0xe00000>;
};
};
};
};
&cp0_syscon0 {
cp0_pinctrl: pinctrl {
compatible = "marvell,cp115-standalone-pinctrl";
cp0_i2c0_pins: cp0-i2c-pins-0 {
marvell,pins = "mpp37", "mpp38";
marvell,function = "i2c0";
};
cp0_i2c1_pins: cp0-i2c-pins-1 {
marvell,pins = "mpp35", "mpp36";
marvell,function = "i2c1";
};
cp0_ge1_rgmii_pins: cp0-ge-rgmii-pins-0 {
marvell,pins = "mpp0", "mpp1", "mpp2",
"mpp3", "mpp4", "mpp5",
"mpp6", "mpp7", "mpp8",
"mpp9", "mpp10", "mpp11";
marvell,function = "ge0";
};
cp0_ge2_rgmii_pins: cp0-ge-rgmii-pins-1 {
marvell,pins = "mpp44", "mpp45", "mpp46",
"mpp47", "mpp48", "mpp49",
"mpp50", "mpp51", "mpp52",
"mpp53", "mpp54", "mpp55";
marvell,function = "ge1";
};
cp0_sdhci_cd_pins: cp0-sdhci-cd-pins-0 {
marvell,pins = "mpp43";
marvell,function = "gpio";
};
cp0_sdhci_pins: cp0-sdhi-pins-0 {
marvell,pins = "mpp56", "mpp57", "mpp58",
"mpp59", "mpp60", "mpp61";
marvell,function = "sdio";
};
cp0_spi1_pins: cp0-spi-pins-1 {
marvell,pins = "mpp13", "mpp14", "mpp15", "mpp16";
marvell,function = "spi1";
};
nand_pins: nand-pins {
marvell,pins = "mpp15", "mpp16", "mpp17", "mpp18",
"mpp19", "mpp20", "mpp21", "mpp22",
"mpp23", "mpp24", "mpp25", "mpp26",
"mpp27";
marvell,function = "dev";
};
nand_rb: nand-rb-pins {
marvell,pins = "mpp13";
marvell,function = "nf";
};
};
};
&cp0_utmi {
status = "okay";
};
&cp0_usb3_0 {
status = "okay";
usb-phy = <&cp0_usb3_0_phy0>;
phys = <&cp0_utmi0>;
phy-names = "utmi";
dr_mode = "host";
};
&cp0_usb3_1 {
status = "okay";
usb-phy = <&cp0_usb3_0_phy1>;
phys = <&cp0_utmi1>;
phy-names = "utmi";
dr_mode = "host";
};
@@ -0,0 +1,159 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2024 Josua Mayer <josua@solid-run.com>
*
*/
#include <dt-bindings/gpio/gpio.h>
/ {
aliases {
ethernet0 = &cp0_eth0;
ethernet1 = &cp0_eth1;
ethernet2 = &cp0_eth2;
i2c0 = &cp0_i2c0;
mmc0 = &ap_sdhci0;
rtc0 = &cp0_rtc;
};
chosen {
stdout-path = "serial0:115200n8";
};
v_1_8: regulator-1-8 {
compatible = "regulator-fixed";
regulator-name = "1v8";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
};
/* requires assembly of R9307 */
vhv: regulator-vhv-1-8 {
compatible = "regulator-fixed";
regulator-name = "vhv-1v8";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
pinctrl-0 = <&cp0_reg_vhv_pins>;
pinctrl-names = "default";
gpios = <&cp0_gpio2 9 GPIO_ACTIVE_HIGH>;
enable-active-high;
};
};
&ap_pinctrl {
ap_mmc0_pins: ap-mmc0-pins {
marvell,pins = "mpp0", "mpp1", "mpp2", "mpp3", "mpp4", "mpp5",
"mpp6", "mpp7", "mpp8", "mpp9", "mpp10", "mpp12";
marvell,function = "sdio";
/*
* mpp12 is emmc reset, function should be sdio (hw_rst),
* but pinctrl-mvebu does not support this.
*
* From pinctrl-mvebu.h:
* "The name will be used to switch to this setting in DT description, e.g.
* marvell,function = "uart2". subname is only for debugging purposes."
*/
};
};
&ap_sdhci0 {
bus-width = <8>;
pinctrl-0 = <&ap_mmc0_pins>;
pinctrl-names = "default";
vqmmc-supply = <&v_1_8>;
no-sdio;
non-removable;
status = "okay";
};
&cp0_ethernet {
status = "okay";
};
/* for assembly with phy */
&cp0_eth2 {
pinctrl-names = "default";
pinctrl-0 = <&cp0_eth2_pins>;
phy-mode = "rgmii-id";
phy = <&cp0_eth2_phy>;
status = "okay";
};
&cp0_i2c0 {
pinctrl-names = "default";
pinctrl-0 = <&cp0_i2c0_pins>;
clock-frequency = <100000>;
status = "okay";
som_eeprom: eeprom@53 {
compatible = "atmel,24c02";
reg = <0x53>;
pagesize = <8>;
};
};
&cp0_mdio {
pinctrl-0 = <&cp0_mdio_pins>;
status = "okay";
/* assembly option */
cp0_eth2_phy: ethernet-phy@0 {
reg = <0>;
};
};
&cp0_spi1 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&cp0_spi1_pins>;
/* max speed limited by a mux */
spi-max-frequency = <1800000000>;
flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
/* read command supports max. 50MHz */
spi-max-frequency = <50000000>;
};
};
&cp0_syscon0 {
cp0_pinctrl: pinctrl {
compatible = "marvell,cp115-standalone-pinctrl";
cp0_eth2_pins: cp0-ge2-rgmii-pins {
marvell,pins = "mpp44", "mpp45", "mpp46", "mpp47",
"mpp48", "mpp49", "mpp50", "mpp51",
"mpp52", "mpp53", "mpp54", "mpp55";
/* docs call it "ge2", but cp110-pinctrl "ge1" */
marvell,function = "ge1";
};
cp0_i2c0_pins: cp0-i2c0-pins {
marvell,pins = "mpp37", "mpp38";
marvell,function = "i2c0";
};
cp0_mdio_pins: cp0-mdio-pins {
marvell,pins = "mpp0", "mpp1";
marvell,function = "ge";
};
cp0_spi1_pins: cp0-spi1-pins {
marvell,pins = "mpp13", "mpp14", "mpp15", "mpp16";
marvell,function = "spi1";
};
cp0_reg_vhv_pins: cp0-reg-vhv-pins {
marvell,pins = "mpp41";
marvell,function = "gpio";
};
};
};
/* AP default console */
&uart0 {
pinctrl-0 = <&uart0_pins>;
pinctrl-names = "default";
status = "okay";
};
@@ -0,0 +1,52 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2019 Marvell International Ltd.
*
* Device tree for the CN9130 SoC.
*/
#include "armada-ap807-quad.dtsi"
/ {
model = "Marvell Armada CN9130 SoC";
compatible = "marvell,cn9130", "marvell,armada-ap807-quad",
"marvell,armada-ap807";
aliases {
gpio1 = &cp0_gpio1;
gpio2 = &cp0_gpio2;
spi1 = &cp0_spi0;
spi2 = &cp0_spi1;
};
};
/*
* Instantiate the internal CP115
*/
#define CP11X_NAME cp0
#define CP11X_BASE f2000000
#define CP11X_PCIEx_MEM_BASE(iface) ((iface == 0) ? 0xc0000000 : \
0xe0000000 + ((iface - 1) * 0x1000000))
#define CP11X_PCIEx_MEM_SIZE(iface) ((iface == 0) ? 0x1ff00000 : 0xf00000)
#define CP11X_PCIE0_BASE f2600000
#define CP11X_PCIE1_BASE f2620000
#define CP11X_PCIE2_BASE f2640000
#include "armada-cp115.dtsi"
#undef CP11X_NAME
#undef CP11X_BASE
#undef CP11X_PCIEx_MEM_BASE
#undef CP11X_PCIEx_MEM_SIZE
#undef CP11X_PCIE0_BASE
#undef CP11X_PCIE1_BASE
#undef CP11X_PCIE2_BASE
&cp0_gpio1 {
status = "okay";
};
&cp0_gpio2 {
status = "okay";
};
@@ -0,0 +1,641 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright (C) 2024 Josua Mayer <josua@solid-run.com>
*
* DTS for SolidRun CN9130 Clearfog Base.
*
*/
/dts-v1/;
#include <dt-bindings/input/input.h>
#include <dt-bindings/leds/common.h>
#include "cn9130.dtsi"
#include "cn9130-sr-som.dtsi"
/*
* Instantiate the external CP115
*/
#define CP11X_NAME cp1
#define CP11X_BASE f4000000
#define CP11X_PCIEx_MEM_BASE(iface) (0xe2000000 + (iface * 0x1000000))
#define CP11X_PCIEx_MEM_SIZE(iface) 0xf00000
#define CP11X_PCIE0_BASE f4600000
#define CP11X_PCIE1_BASE f4620000
#define CP11X_PCIE2_BASE f4640000
#include "armada-cp115.dtsi"
#undef CP11X_NAME
#undef CP11X_BASE
#undef CP11X_PCIEx_MEM_BASE
#undef CP11X_PCIEx_MEM_SIZE
#undef CP11X_PCIE0_BASE
#undef CP11X_PCIE1_BASE
#undef CP11X_PCIE2_BASE
/ {
model = "SolidRun CN9131 SolidWAN";
compatible = "solidrun,cn9131-solidwan",
"solidrun,cn9130-sr-som", "marvell,cn9130";
aliases {
ethernet0 = &cp1_eth1;
ethernet1 = &cp1_eth2;
ethernet2 = &cp0_eth1;
ethernet3 = &cp0_eth2;
ethernet4 = &cp0_eth0;
ethernet5 = &cp1_eth0;
gpio0 = &ap_gpio;
gpio1 = &cp0_gpio1;
gpio2 = &cp0_gpio2;
gpio3 = &cp1_gpio1;
gpio4 = &cp1_gpio2;
gpio5 = &expander0;
i2c0 = &cp0_i2c0;
i2c1 = &cp0_i2c1;
i2c2 = &cp1_i2c1;
mmc0 = &ap_sdhci0;
mmc1 = &cp0_sdhci0;
rtc0 = &cp0_rtc;
rtc1 = &carrier_rtc;
};
leds {
compatible = "gpio-leds";
pinctrl-names = "default";
pinctrl-0 = <&cp0_led_pins &cp1_led_pins>;
/* for sfp-1 (J42) */
led-sfp1-activity {
label = "sfp1:green";
gpios = <&cp0_gpio1 7 GPIO_ACTIVE_HIGH>;
};
/* for sfp-1 (J42) */
led-sfp1-link {
label = "sfp1:yellow";
gpios = <&cp0_gpio1 4 GPIO_ACTIVE_HIGH>;
};
/* (J28) */
led-sfp0-activity {
label = "sfp0:green";
gpios = <&cp1_gpio2 22 GPIO_ACTIVE_HIGH>;
};
/* (J28) */
led-sfp0-link {
label = "sfp0:yellow";
gpios = <&cp1_gpio2 23 GPIO_ACTIVE_HIGH>;
};
};
/* Type-A port on J53 */
reg_usb_a_vbus0: regulator-usb-a-vbus0 {
compatible = "regulator-fixed";
pinctrl-0 = <&cp0_reg_usb_a_vbus0_pins>;
pinctrl-names = "default";
regulator-name = "vbus0";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
gpios = <&cp0_gpio1 27 GPIO_ACTIVE_HIGH>;
enable-active-high;
regulator-always-on;
};
reg_usb_a_vbus1: regulator-usb-a-vbus1 {
compatible = "regulator-fixed";
pinctrl-0 = <&cp0_reg_usb_a_vbus1_pins>;
pinctrl-names = "default";
regulator-name = "vbus1";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
gpios = <&cp0_gpio1 28 GPIO_ACTIVE_HIGH>;
enable-active-high;
regulator-always-on;
};
sfp0: sfp-0 {
compatible = "sff,sfp";
pinctrl-0 = <&cp0_sfp0_pins>;
pinctrl-names = "default";
i2c-bus = <&cp0_i2c1>;
los-gpios = <&cp0_gpio2 2 GPIO_ACTIVE_HIGH>;
mod-def0-gpios = <&cp0_gpio2 0 GPIO_ACTIVE_LOW>;
tx-disable-gpios = <&cp0_gpio2 1 GPIO_ACTIVE_HIGH>;
tx-fault-gpios = <&cp0_gpio1 31 GPIO_ACTIVE_HIGH>;
maximum-power-milliwatt = <2000>;
};
sfp1: sfp-1 {
compatible = "sff,sfp";
pinctrl-0 = <&cp1_sfp1_pins>;
pinctrl-names = "default";
i2c-bus = <&cp1_i2c1>;
los-gpios = <&cp1_gpio2 2 GPIO_ACTIVE_HIGH>;
mod-def0-gpios = <&cp1_gpio2 18 GPIO_ACTIVE_LOW>;
tx-disable-gpios = <&cp1_gpio2 1 GPIO_ACTIVE_HIGH>;
tx-fault-gpios = <&cp1_gpio2 17 GPIO_ACTIVE_HIGH>;
maximum-power-milliwatt = <2000>;
};
};
&cp0_ethernet {
status = "okay";
};
/* SRDS #2 - SFP+ 10GE */
&cp0_eth0 {
managed = "in-band-status";
phy-mode = "10gbase-r";
phys = <&cp0_comphy2 0>;
sfp = <&sfp0>;
status = "okay";
};
/* SRDS #3 - SGMII 1GE */
&cp0_eth1 {
managed = "in-band-status";
phy-mode = "sgmii";
/* Without mdio phy access rely on sgmii auto-negotiation. */
phys = <&cp0_comphy3 1>;
status = "okay";
};
/* SRDS #1 - SGMII */
&cp0_eth2 {
/delete-property/ pinctrl-0;
/delete-property/ pinctrl-names;
managed = "in-band-status";
phy-mode = "sgmii";
phy = <&cp0_phy1>;
phys = <&cp0_comphy1 2>;
};
&cp0_gpio1 {
pcie0-0-w-disable-hog {
gpio-hog;
gpios = <6 GPIO_ACTIVE_LOW>;
output-low;
line-name = "pcie0.0-w-disable";
};
/* J34 */
m2-full-card-power-off-hog {
gpio-hog;
gpios = <8 GPIO_ACTIVE_LOW>;
output-low;
line-name = "m2-full-card-power-off";
};
};
&cp0_i2c0 {
/* assembly option */
fan-controller@18 {
compatible = "ti,amc6821";
reg = <0x18>;
};
expander0: gpio@41 {
compatible = "nxp,pca9536";
reg = <0x41>;
gpio-controller;
#gpio-cells = <2>;
usb-a-vbus0-ilimit-hog {
gpio-hog;
gpios = <0 GPIO_ACTIVE_LOW>;
input;
line-name = "vbus0-ilimit";
};
/* duplicate connection, controlled by soc gpio */
usb-vbus0-enable-hog {
gpio-hog;
gpios = <1 GPIO_ACTIVE_HIGH>;
input;
line-name = "vbus0-enable";
};
usb-a-vbus1-ilimit-hog {
gpio-hog;
gpios = <2 GPIO_ACTIVE_LOW>;
input;
line-name = "vbus1-ilimit";
};
/* duplicate connection, controlled by soc gpio */
usb-vbus1-enable-hog {
gpio-hog;
gpios = <3 GPIO_ACTIVE_HIGH>;
input;
line-name = "vbus1-enable";
};
};
carrier_eeprom: eeprom@52 {
compatible = "atmel,24c02";
reg = <0x52>;
pagesize = <8>;
};
/* usb-hub@60 */
/* assembly option */
carrier_rtc: rtc@68 {
compatible = "st,m41t83";
reg = <0x68>;
pinctrl-0 = <&cp1_rtc_pins>;
pinctrl-names = "default";
interrupt-parent = <&cp1_gpio1>;
interrupts = <12 IRQ_TYPE_EDGE_FALLING>;
reset-gpios = <&cp1_gpio1 13 GPIO_ACTIVE_LOW>;
};
};
&cp0_i2c1 {
/*
* Routed to SFP.
* Limit to 100kHz for compatibility with SFP modules,
* featuring AT24C01A/02/04 at addresses 0x50/0x51.
*/
clock-frequency = <100000>;
pinctrl-0 = <&cp0_i2c1_pins>;
pinctrl-names = "default";
status = "okay";
};
&cp0_mdio {
/*
* SoM + Carrier each have a PHY at address 0.
* Remove the SoM phy node, and skip adding the carrier node.
* SGMII Auto-Negotation is enabled by bootloader for
* autonomous operation without mdio control.
*/
/delete-node/ ethernet-phy@0;
/* U17016 */
cp0_phy1: ethernet-phy@1 {
reg = <1>;
/*
* Configure LEDs default behaviour:
* - LED[0]: link is 1000Mbps: On (yellow)
* - LED[1]: link/activity: On/blink (green)
* - LED[2]: high impedance (floating)
*/
marvell,reg-init = <3 16 0xf000 0x0a17>;
leds {
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
color = <LED_COLOR_ID_YELLOW>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
led@1 {
reg = <1>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
};
};
};
/* SRDS #0 - miniPCIe */
&cp0_pcie0 {
num-lanes = <1>;
phys = <&cp0_comphy0 0>;
status = "okay";
};
/* SRDS #5 - M.2 B-Key (J34) */
&cp0_pcie2 {
num-lanes = <1>;
phys = <&cp0_comphy5 2>;
status = "okay";
};
&cp0_pinctrl {
pinctrl-0 = <&cp0_m2_0_shutdown_pins &cp0_mpcie_rfkill_pins>;
pinctrl-names = "default";
cp0_i2c1_pins: cp0-i2c1-pins {
marvell,pins = "mpp35", "mpp36";
marvell,function = "i2c1";
};
cp0_led_pins: cp0-led-pins {
marvell,pins = "mpp4", "mpp7";
marvell,function = "gpio";
};
cp0_m2_0_shutdown_pins: cp0-m2-0-shutdown-pins {
marvell,pins = "mpp8";
marvell,function = "gpio";
};
cp0_mmc0_pins: cp0-mmc0-pins {
marvell,pins = "mpp43", "mpp56", "mpp57", "mpp58",
"mpp59", "mpp60", "mpp61";
marvell,function = "sdio";
};
cp0_mpcie_rfkill_pins: cp0-mpcie-rfkill-pins {
marvell,pins = "mpp6";
marvell,function = "gpio";
};
cp0_reg_usb_a_vbus0_pins: cp0-reg-usb-a-vbus0-pins {
marvell,pins = "mpp27";
marvell,function = "gpio";
};
cp0_reg_usb_a_vbus1_pins: cp0-reg-usb-a-vbus1-pins {
marvell,pins = "mpp28";
marvell,function = "gpio";
};
cp0_sfp0_pins: cp0-sfp0-pins {
marvell,pins = "mpp31", "mpp32", "mpp33", "mpp34";
marvell,function = "gpio";
};
cp0_spi1_cs1_pins: cp0-spi1-cs1-pins {
marvell,pins = "mpp12";
marvell,function = "spi1";
};
};
/* microSD */
&cp0_sdhci0 {
pinctrl-0 = <&cp0_mmc0_pins>;
pinctrl-names = "default";
bus-width = <4>;
no-1-8-v;
status = "okay";
};
&cp0_spi1 {
/* add pin for chip-select 1 */
pinctrl-0 = <&cp0_spi1_pins &cp0_spi1_cs1_pins>;
flash@1 {
compatible = "jedec,spi-nor";
reg = <1>;
/* read command supports max. 50MHz */
spi-max-frequency = <50000000>;
};
};
/* USB-2.0 Host to USB-Hub */
&cp0_usb3_0 {
phys = <&cp0_utmi0>;
phy-names = "utmi";
dr_mode = "host";
status = "okay";
};
/* SRDS #4 - USB-3.0 Host to USB-Hub */
&cp0_usb3_1 {
phys = <&cp0_comphy4 1>, <&cp0_utmi1>;
phy-names = "comphy", "utmi";
dr_mode = "host";
status = "okay";
};
&cp0_utmi {
status = "okay";
};
&cp0_utmi1 {
status = "disabled";
};
&cp1_ethernet {
status = "okay";
};
/* SRDS #4 - SFP+ 10GE */
&cp1_eth0 {
managed = "in-band-status";
phy-mode = "10gbase-r";
phys = <&cp1_comphy4 0>;
sfp = <&sfp1>;
status = "okay";
};
/* SRDS #3 - SGMII 1GE */
&cp1_eth1 {
managed = "in-band-status";
phy-mode = "sgmii";
phy = <&cp1_phy0>;
phys = <&cp1_comphy3 1>;
status = "okay";
};
/* SRDS #5 - SGMII 1GE */
&cp1_eth2 {
managed = "in-band-status";
phy-mode = "sgmii";
phy = <&cp1_phy1>;
phys = <&cp1_comphy5 2>;
status = "okay";
};
&cp1_gpio1 {
status = "okay";
/* J30 */
m2-full-card-power-off-hog-0 {
gpio-hog;
gpios = <29 GPIO_ACTIVE_LOW>;
output-low;
line-name = "m2-full-card-power-off";
};
/* J44 */
m2-full-card-power-off-hog-1 {
gpio-hog;
gpios = <30 GPIO_ACTIVE_LOW>;
output-low;
line-name = "m2-full-card-power-off";
};
};
&cp1_gpio2 {
status = "okay";
};
&cp1_i2c1 {
/*
* Routed to SFP.
* Limit to 100kHz for compatibility with SFP modules,
* featuring AT24C01A/02/04 at addresses 0x50/0x51.
*/
clock-frequency = <100000>;
pinctrl-0 = <&cp1_i2c1_pins>;
pinctrl-names = "default";
status = "okay";
};
&cp1_mdio {
pinctrl-0 = <&cp1_mdio_pins>;
pinctrl-names = "default";
status = "okay";
cp1_phy0: ethernet-phy@0 {
reg = <0>;
/*
* Configure LEDs default behaviour:
* - LED[0]: link is 1000Mbps: On (yellow)
* - LED[1]: link/activity: On/blink (green)
* - LED[2]: high impedance (floating)
*/
marvell,reg-init = <3 16 0xf000 0x0a17>;
leds {
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
color = <LED_COLOR_ID_YELLOW>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
led@1 {
reg = <1>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
};
};
cp1_phy1: ethernet-phy@1 {
reg = <1>;
/*
* Configure LEDs default behaviour:
* - LED[0]: link is 1000Mbps: On (yellow)
* - LED[1]: link/activity: On/blink (green)
* - LED[2]: high impedance (floating)
*/
marvell,reg-init = <3 16 0xf000 0x0a17>;
leds {
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
color = <LED_COLOR_ID_YELLOW>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
led@1 {
reg = <1>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
};
};
};
/* SRDS #0 - M.2 (J30) */
&cp1_pcie0 {
num-lanes = <1>;
phys = <&cp1_comphy0 0>;
status = "okay";
};
&cp1_rtc {
status = "disabled";
};
/* SRDS #1 - SATA on M.2 (J44) */
&cp1_sata0 {
status = "okay";
/* only port 0 is available */
sata-port@0 {
phys = <&cp1_comphy1 0>;
status = "okay";
};
};
&cp1_syscon0 {
cp1_pinctrl: pinctrl {
compatible = "marvell,cp115-standalone-pinctrl";
pinctrl-0 = <&cp1_m2_1_shutdown_pins &cp1_m2_2_shutdown_pins>;
pinctrl-names = "default";
cp1_i2c1_pins: cp0-i2c1-pins {
marvell,pins = "mpp35", "mpp36";
marvell,function = "i2c1";
};
cp1_led_pins: cp1-led-pins {
marvell,pins = "mpp54", "mpp55";
marvell,function = "gpio";
};
cp1_m2_1_shutdown_pins: cp1-m2-1-shutdown-pins {
marvell,pins = "mpp29";
marvell,function = "gpio";
};
cp1_m2_2_shutdown_pins: cp1-m2-2-shutdown-pins {
marvell,pins = "mpp30";
marvell,function = "gpio";
};
cp1_mdio_pins: cp1-mdio-pins {
marvell,pins = "mpp37", "mpp38";
marvell,function = "ge";
};
cp1_rtc_pins: cp1-rtc-pins {
marvell,pins = "mpp12", "mpp13";
marvell,function = "gpio";
};
cp1_sfp1_pins: cp1-sfp1-pins {
marvell,pins = "mpp33", "mpp34", "mpp49", "mpp50";
marvell,function = "gpio";
};
};
};
/*
* SRDS #2 - USB-3.0 Host to M.2 (J44)
* USB-2.0 Host to M.2 (J30)
*/
&cp1_usb3_0 {
phys = <&cp1_comphy2 0>, <&cp1_utmi0>;
phy-names = "comphy", "utmi";
dr_mode = "host";
status = "okay";
};
/* USB-2.0 Host to M.2 (J44) */
&cp1_usb3_1 {
phys = <&cp1_utmi1>;
phy-names = "utmi";
dr_mode = "host";
status = "okay";
};
&cp1_utmi {
status = "okay";
};
@@ -0,0 +1,22 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2020 Marvell International Ltd.
*
* Device tree for the CN9131-DB board (setup "B").
*/
#include "cn9131-db.dtsi"
/ {
model = "Marvell Armada CN9131-DB setup B";
};
/* Setup B has NAND flash as a boot device, while regular setup uses SPI flash.
* Since CP0 SPI1 and CP0 NAND are sharing some pins, they cannot be activated
* simultaneously. When NAND controller is enabled, SPI1 should be disabled.
*/
&cp0_nand_controller {
status = "okay";
};
@@ -0,0 +1,109 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2023 Marvell International Ltd.
*
* Device tree for the CN9131-DB Com Express CPU module board.
*/
#include "cn9131-db.dtsi"
/ {
model = "Marvell Armada CN9131-DB COM EXPRESS type 7 CPU module board";
compatible = "marvell,cn9131-cpu-module", "marvell,cn9131", "marvell,cn9130",
"marvell,armada-ap807-quad", "marvell,armada-ap807";
};
&ap0_reg_sd_vccq {
compatible = "regulator-fixed";
regulator-max-microvolt = <1800000>;
/delete-property/ states;
/delete-property/ gpios;
};
&cp0_reg_usb3_vbus0 {
/delete-property/ gpio;
};
&cp0_reg_usb3_vbus1 {
/delete-property/ gpio;
};
&cp1_reg_usb3_vbus0 {
/delete-property/ gpio;
};
&cp0_reg_sd_vcc {
status = "disabled";
};
&cp0_reg_sd_vccq {
status = "disabled";
};
&cp0_sdhci0 {
status = "disabled";
};
&cp0_eth0 {
status = "disabled";
};
&cp0_eth1 {
status = "okay";
phy = <&phy0>;
phy-mode = "rgmii-id";
};
&cp0_eth2 {
status = "disabled";
};
&cp0_mdio {
status = "okay";
pinctrl-0 = <&cp0_ge_mdio_pins>;
phy0: ethernet-phy@0 {
status = "okay";
};
};
&cp0_syscon0 {
cp0_pinctrl: pinctrl {
compatible = "marvell,cp115-standalone-pinctrl";
cp0_ge_mdio_pins: ge-mdio-pins {
marvell,pins = "mpp40", "mpp41";
marvell,function = "ge";
};
};
};
&cp0_sdhci0 {
status = "disabled";
};
&cp0_spi1 {
status = "okay";
};
&cp0_usb3_0 {
status = "okay";
usb-phy = <&cp0_usb3_0_phy0>;
phy-names = "usb";
/delete-property/ phys;
};
&cp0_usb3_1 {
status = "okay";
usb-phy = <&cp0_usb3_0_phy1>;
phy-names = "usb";
/delete-property/ phys;
};
&cp1_usb3_1 {
status = "okay";
usb-phy = <&cp1_usb3_0_phy0>;
/* Generic PHY, providing serdes lanes */
phys = <&cp1_comphy3 1>;
phy-names = "usb";
};
@@ -0,0 +1,22 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2019 Marvell International Ltd.
*
* Device tree for the CN9131-DB board.
*/
#include "cn9131-db.dtsi"
/ {
model = "Marvell Armada CN9131-DB setup A";
};
/* Setup A has SPI1 flash as a boot device, while setup B uses NAND flash.
* Since CP0 SPI1 and CP0 NAND are sharing some pins, they cannot be activated
* simultaneously. When SPI controller is enabled, NAND should be disabled.
*/
&cp0_spi1 {
status = "okay";
};
@@ -0,0 +1,206 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2020 Marvell International Ltd.
*
* Device tree for the CN9131-DB board.
*/
#include "cn9130-db.dtsi"
/ {
compatible = "marvell,cn9131", "marvell,cn9130",
"marvell,armada-ap807-quad", "marvell,armada-ap807";
aliases {
gpio3 = &cp1_gpio1;
gpio4 = &cp1_gpio2;
ethernet3 = &cp1_eth0;
ethernet4 = &cp1_eth1;
};
cp1_reg_usb3_vbus0: regulator-6 {
compatible = "regulator-fixed";
pinctrl-names = "default";
pinctrl-0 = <&cp1_xhci0_vbus_pins>;
regulator-name = "cp1-xhci0-vbus";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
enable-active-high;
gpio = <&cp1_gpio1 3 GPIO_ACTIVE_HIGH>;
};
cp1_usb3_0_phy0: usb-phy-3 {
compatible = "usb-nop-xceiv";
#phy-cells = <0>;
vcc-supply = <&cp1_reg_usb3_vbus0>;
};
cp1_sfp_eth1: sfp-eth-2 {
compatible = "sff,sfp";
i2c-bus = <&cp1_i2c0>;
los-gpios = <&cp1_gpio1 11 GPIO_ACTIVE_HIGH>;
mod-def0-gpios = <&cp1_gpio1 10 GPIO_ACTIVE_LOW>;
tx-disable-gpios = <&cp1_gpio1 9 GPIO_ACTIVE_HIGH>;
tx-fault-gpios = <&cp1_gpio1 8 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&cp1_sfp_pins>;
/*
* SFP cages are unconnected on early PCBs because of an the I2C
* lanes not being connected. Prevent the port for being
* unusable by disabling the SFP node.
*/
status = "disabled";
};
};
/*
* Instantiate the first slave CP115
*/
#define CP11X_NAME cp1
#define CP11X_BASE f4000000
#define CP11X_PCIEx_MEM_BASE(iface) (0xe2000000 + (iface * 0x1000000))
#define CP11X_PCIEx_MEM_SIZE(iface) 0xf00000
#define CP11X_PCIE0_BASE f4600000
#define CP11X_PCIE1_BASE f4620000
#define CP11X_PCIE2_BASE f4640000
#include "armada-cp115.dtsi"
#undef CP11X_NAME
#undef CP11X_BASE
#undef CP11X_PCIEx_MEM_BASE
#undef CP11X_PCIEx_MEM_SIZE
#undef CP11X_PCIE0_BASE
#undef CP11X_PCIE1_BASE
#undef CP11X_PCIE2_BASE
&cp1_crypto {
status = "disabled";
};
&cp1_ethernet {
status = "okay";
};
/* CON50 */
&cp1_eth0 {
status = "okay";
phy-mode = "10gbase-r";
/* Generic PHY, providing serdes lanes */
phys = <&cp1_comphy4 0>;
managed = "in-band-status";
sfp = <&cp1_sfp_eth1>;
};
&cp1_gpio1 {
status = "okay";
};
&cp1_gpio2 {
status = "okay";
};
&cp1_i2c0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&cp1_i2c0_pins>;
clock-frequency = <100000>;
};
/* CON40 */
&cp1_pcie0 {
pinctrl-names = "default";
pinctrl-0 = <&cp1_pcie_reset_pins>;
num-lanes = <2>;
num-viewport = <8>;
marvell,reset-gpio = <&cp1_gpio1 0 GPIO_ACTIVE_HIGH>;
status = "okay";
/* Generic PHY, providing serdes lanes */
phys = <&cp1_comphy0 0
&cp1_comphy1 0>;
};
&cp1_sata0 {
status = "okay";
/* CON32 */
sata-port@1 {
/* Generic PHY, providing serdes lanes */
phys = <&cp1_comphy5 1>;
status = "okay";
};
};
/* U24 */
&cp1_spi1 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&cp1_spi0_pins>;
reg = <0x700680 0x50>;
flash@0 {
compatible = "jedec,spi-nor";
reg = <0x0>;
/* On-board MUX does not allow higher frequencies */
spi-max-frequency = <40000000>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "U-Boot-1";
reg = <0x0 0x200000>;
};
partition@400000 {
label = "Filesystem-1";
reg = <0x200000 0xe00000>;
};
};
};
};
&cp1_syscon0 {
cp1_pinctrl: pinctrl {
compatible = "marvell,cp115-standalone-pinctrl";
cp1_i2c0_pins: cp1-i2c-pins-0 {
marvell,pins = "mpp37", "mpp38";
marvell,function = "i2c0";
};
cp1_spi0_pins: cp1-spi-pins-0 {
marvell,pins = "mpp13", "mpp14", "mpp15", "mpp16";
marvell,function = "spi1";
};
cp1_xhci0_vbus_pins: cp1-xhci0-vbus-pins {
marvell,pins = "mpp3";
marvell,function = "gpio";
};
cp1_sfp_pins: sfp-pins {
marvell,pins = "mpp8", "mpp9", "mpp10", "mpp11";
marvell,function = "gpio";
};
cp1_pcie_reset_pins: cp1-pcie-reset-pins {
marvell,pins = "mpp0";
marvell,function = "gpio";
};
};
};
/* CON58 */
&cp1_utmi {
status = "okay";
};
&cp1_usb3_1 {
status = "okay";
usb-phy = <&cp1_usb3_0_phy0>;
/* Generic PHY, providing serdes lanes */
phys = <&cp1_comphy3 1>, <&cp1_utmi1>;
phy-names = "usb", "utmi";
dr_mode = "host";
};
@@ -0,0 +1,671 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2024 Josua Mayer <josua@solid-run.com>
*
* DTS for SolidRun CN9132 Clearfog.
*
*/
/dts-v1/;
#include <dt-bindings/input/input.h>
#include <dt-bindings/leds/common.h>
#include "cn9130.dtsi"
#include "cn9132-sr-cex7.dtsi"
/ {
model = "SolidRun CN9132 Clearfog";
compatible = "solidrun,cn9132-clearfog",
"solidrun,cn9132-sr-cex7", "marvell,cn9130";
aliases {
ethernet1 = &cp0_eth2;
ethernet2 = &cp0_eth0;
ethernet3 = &cp2_eth0;
ethernet4 = &cp1_eth0;
i2c7 = &carrier_mpcie_i2c;
i2c8 = &carrier_ptp_i2c;
mmc1 = &cp0_sdhci0;
};
gpio-keys {
compatible = "gpio-keys";
pinctrl-names = "default";
pinctrl-0 = <&cp1_wake0_pins>;
button-0 {
label = "SW2";
gpios = <&cp1_gpio2 8 GPIO_ACTIVE_LOW>;
linux,can-disable;
linux,code = <BTN_2>;
};
};
leds {
compatible = "gpio-leds";
pinctrl-names = "default";
pinctrl-0 = <&cp1_batlow_pins &cp2_rsvd4_pins>;
/* LED11 */
led-io-0 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_DISK;
function-enumerator = <0>;
default-state = "off";
gpios = <&cp1_gpio1 11 GPIO_ACTIVE_HIGH>;
};
/* LED12 */
led-io-1 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_DISK;
function-enumerator = <1>;
default-state = "off";
gpios = <&cp2_gpio1 4 GPIO_ACTIVE_HIGH>;
};
};
/* CON4 W_DISABLE1/W_DISABLE2 */
rfkill-m2-wlan {
compatible = "rfkill-gpio";
label = "m.2 wlan (CON4)";
radio-type = "wlan";
pinctrl-names = "default";
pinctrl-0 = <&cp1_10g_phy_rst_01_pins>;
/* rfkill-gpio inverts internally */
shutdown-gpios = <&cp1_gpio2 11 GPIO_ACTIVE_HIGH>;
};
/* CON5 W_DISABLE1/W_DISABLE2 */
rfkill-m2-wlan {
compatible = "rfkill-gpio";
label = "m.2 wlan (CON5)";
radio-type = "wlan";
pinctrl-names = "default";
pinctrl-0 = <&cp1_10g_phy_rst_23_pins>;
/* rfkill-gpio inverts internally */
shutdown-gpios = <&cp1_gpio2 10 GPIO_ACTIVE_HIGH>;
};
/* J21 W_DISABLE1 */
rfkill-m2-wwan {
compatible = "rfkill-gpio";
label = "m.2 wwan (J21)";
radio-type = "wwan";
pinctrl-names = "default";
pinctrl-0 = <&cp2_rsvd3_pins>;
/* rfkill-gpio inverts internally */
shutdown-gpios = <&cp2_gpio1 3 GPIO_ACTIVE_HIGH>;
};
/* J21 W_DISABLE1 */
rfkill-m2-gnss {
compatible = "rfkill-gpio";
label = "m.2 gnss (J21)";
radio-type = "gps";
pinctrl-names = "default";
pinctrl-0 = <&cp2_rsvd8_pins>;
/* rfkill-gpio inverts internally */
shutdown-gpios = <&cp2_gpio1 8 GPIO_ACTIVE_HIGH>;
};
/* J14 W_DISABLE */
rfkill-mpcie-wlan {
compatible = "rfkill-gpio";
label = "mpcie wlan (J14)";
radio-type = "wlan";
pinctrl-names = "default";
pinctrl-0 = <&cp2_rsvd2_pins>;
/* rfkill-gpio inverts internally */
shutdown-gpios = <&cp2_gpio1 2 GPIO_ACTIVE_HIGH>;
};
sfp: sfp {
compatible = "sff,sfp";
i2c-bus = <&com_10g_sfp_i2c0>;
pinctrl-names = "default";
pinctrl-0 = <&com_10g_int0_pins>;
mod-def0-gpios = <&cp0_gpio1 24 GPIO_ACTIVE_LOW>;
maximum-power-milliwatt = <2000>;
};
};
&com_smbus {
/* This bus is also routed to STM32 BMC Microcontroller (U2) */
power-sensor@40 {
compatible = "ti,ina220";
reg = <0x40>;
#io-channel-cells = <1>;
label = "vdd_12v0";
shunt-resistor = <2000>;
};
adc@48 {
compatible = "ti,tla2021";
reg = <0x48>;
#address-cells = <1>;
#size-cells = <0>;
/* supplied by chaoskey hardware noise generator circuit */
channel@0 {
reg = <0>;
};
};
};
&cp0_eth_phy0 {
/*
* Configure LEDs default behaviour:
* - LED[0]: link is 1000Mbps: On (yellow): 0111
* - LED[1]: link/activity: On/Blink (green): 0001
* - LED[2]: Off (green): 1000
*/
marvell,reg-init = <3 16 0xf000 0x0817>;
leds {
#address-cells = <1>;
#size-cells = <0>;
led@0 {
/* link */
reg = <0>;
color = <LED_COLOR_ID_YELLOW>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
led@1 {
/* act */
reg = <1>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
led@2 {
/* 1000 */
reg = <2>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
};
};
/* SRDS #4 - 10GE */
&cp0_eth0 {
phys = <&cp0_comphy4 0>;
phy-mode = "10gbase-r";
managed = "in-band-status";
sfp = <&sfp>;
status = "okay";
};
&cp0_eth2 {
phy-mode = "2500base-x";
phys = <&cp0_comphy5 2>;
status = "okay";
fixed-link {
speed = <2500>;
full-duplex;
pause;
};
};
&cp0_i2c1 {
/*
* Both COM and Carrier Board have a PCA9547 i2c mux at 0x77.
* Describe them as a single device merging each child bus.
*/
i2c-mux@77 {
i2c@0 {
/* Routed to Full PCIe (J4) */
};
i2c@1 {
/* Routed to USB Hub (U29) */
};
i2c@2 {
/* Routed to M.2 (CON4) */
};
i2c@3 {
/* Routed to M.2 (CON5) */
};
i2c@4 {
/* Routed to M.2 (J21) */
};
carrier_mpcie_i2c: i2c@5 {
#address-cells = <1>;
#size-cells = <0>;
reg = <5>;
/* Routed to mini-PCIe (J14) */
};
carrier_ptp_i2c: i2c@6 {
#address-cells = <1>;
#size-cells = <0>;
reg = <6>;
/* Routed to various optional PTP related components */
};
};
};
&cp0_mdio {
ethernet-switch@4 {
compatible = "marvell,mv88e6085";
reg = <4>;
mdio {
#address-cells = <1>;
#size-cells = <0>;
sw_phy1: ethernet-phy@1 {
reg = <0x11>;
};
sw_phy2: ethernet-phy@2 {
reg = <0x12>;
};
sw_phy3: ethernet-phy@3 {
reg = <0x13>;
};
sw_phy4: ethernet-phy@4 {
reg = <0x14>;
};
};
ethernet-ports {
#address-cells = <1>;
#size-cells = <0>;
ethernet-port@1 {
reg = <1>;
label = "lan1";
phy-handle = <&sw_phy1>;
phy-mode = "internal";
leds {
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
led@1 {
reg = <1>;
color = <LED_COLOR_ID_YELLOW>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
};
};
ethernet-port@2 {
reg = <2>;
label = "lan2";
phy-handle = <&sw_phy2>;
phy-mode = "internal";
leds {
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
led@1 {
reg = <1>;
color = <LED_COLOR_ID_YELLOW>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
};
};
ethernet-port@3 {
reg = <3>;
label = "lan3";
phy-handle = <&sw_phy3>;
phy-mode = "internal";
leds {
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
led@1 {
reg = <1>;
color = <LED_COLOR_ID_YELLOW>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
};
};
ethernet-port@4 {
reg = <4>;
label = "lan4";
phy-handle = <&sw_phy4>;
phy-mode = "internal";
leds {
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
led@1 {
reg = <1>;
color = <LED_COLOR_ID_YELLOW>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
};
};
ethernet-port@5 {
reg = <5>;
label = "cpu";
ethernet = <&cp0_eth2>;
phy-mode = "2500base-x";
fixed-link {
speed = <2500>;
full-duplex;
pause;
};
};
};
};
};
/* SRDS #0,#1,#2,#3 - PCIe */
&cp0_pcie0 {
num-lanes = <4>;
phys = <&cp0_comphy0 0>, <&cp0_comphy1 0>, <&cp0_comphy2 0>, <&cp0_comphy3 0>;
status = "okay";
};
&cp0_pinctrl {
/*
* configure unused gpios exposed via pin headers:
* - J7-10: PWRBTN
*/
pinctrl-names = "default";
pinctrl-0 = <&cp0_pwrbtn_pins>;
};
/* microSD */
&cp0_sdhci0 {
pinctrl-0 = <&cp0_mmc0_pins>, <&cp0_mmc0_cd_pins>;
pinctrl-names = "default";
bus-width = <4>;
no-1-8-v;
status = "okay";
};
&cp0_spi1 {
/* add CS1 */
pinctrl-0 = <&cp0_spi1_pins>, <&cp0_spi1_cs1_pins>;
flash@1 {
compatible = "jedec,spi-nor";
reg = <1>;
/* read command supports max. 50MHz */
spi-max-frequency = <50000000>;
};
};
/* J38 */
&cp0_uart2 {
pinctrl-names = "default";
pinctrl-0 = <&cp0_uart2_pins>;
status = "okay";
};
&cp0_utmi {
/* M.2 "CON5" swaps D+/D- */
swap-dx-lanes = <1>;
};
&cp1_ethernet {
status = "okay";
};
/* SRDS #2 - 5GE */
&cp1_eth0 {
phys = <&cp1_comphy2 0>;
phy-mode = "5gbase-r";
phy = <&cp1_eth_phy0>;
managed = "in-band-status";
status = "okay";
};
/* SRDS #0,#1 - PCIe */
&cp1_pcie0 {
num-lanes = <2>;
phys = <&cp1_comphy0 0>, <&cp1_comphy1 0>;
status = "okay";
};
/* SRDS #4 - PCIe */
&cp1_pcie1 {
num-lanes = <1>;
phys = <&cp1_comphy4 1>;
status = "okay";
};
/* SRDS #5 - PCIe */
&cp1_pcie2 {
num-lanes = <1>;
phys = <&cp1_comphy5 2>;
status = "okay";
};
&cp1_pinctrl {
/*
* configure unused gpios exposed via pin headers:
* - J7-8: RSVD16
* - J7-10: THRM
* - J10-1: WAKE1
* - J10-2: SATA_ACT
* - J10-8: THERMTRIP
*/
pinctrl-names = "default";
pinctrl-0 = <&cp1_rsvd16_pins &cp1_sata_act_pins &cp1_thrm_irq_pins>,
<&cp1_thrm_trip_pins &cp1_wake1_pins>;
};
/* SRDS #3 - SATA */
&cp1_sata0 {
status = "okay";
/* only port 1 is available */
sata-port@1 {
phys = <&cp1_comphy3 1>;
status = "okay";
};
};
&cp1_utmi {
/* M.2 "CON4" swaps D+/D- */
swap-dx-lanes = <0>;
};
&cp1_xmdio {
pinctrl-names = "default";
pinctrl-0 = <&cp1_xmdio_pins>;
status = "okay";
cp1_eth_phy0: ethernet-phy@8 {
compatible = "ethernet-phy-ieee802.3-c45";
reg = <8>;
pinctrl-names = "default";
pinctrl-0 = <&com_10g_int1_pins>;
interrupt-parent = <&cp1_gpio2>;
interrupts = <18 IRQ_TYPE_EDGE_FALLING>;
leds {
#address-cells = <1>;
#size-cells = <0>;
led@1 {
reg = <1>;
color = <LED_COLOR_ID_YELLOW>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
led@2 {
reg = <2>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
};
};
};
&cp2_ethernet {
status = "okay";
};
/* SRDS #2 - 5GE */
&cp2_eth0 {
phys = <&cp2_comphy2 0>;
phy-mode = "5gbase-r";
phy = <&cp2_eth_phy0>;
managed = "in-band-status";
status = "okay";
};
&cp2_gpio1 {
pinctrl-names = "default";
pinctrl-0 = <&cp2_rsvd9_pins>;
/* J21 */
m2-wwan-reset-hog {
gpio-hog;
gpios = <9 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>;
output-low;
line-name = "m2-wwan-reset";
};
};
/* SRDS #0 - PCIe */
&cp2_pcie0 {
num-lanes = <1>;
phys = <&cp2_comphy0 0>;
status = "okay";
};
/* SRDS #4 - PCIe */
&cp2_pcie1 {
num-lanes = <1>;
phys = <&cp2_comphy4 1>;
status = "okay";
};
/* SRDS #5 - PCIe */
&cp2_pcie2 {
num-lanes = <1>;
phys = <&cp2_comphy5 2>;
status = "okay";
};
&cp2_pinctrl {
/*
* configure unused gpios exposed via pin headers:
* - J7-1: RSVD10
* - J7-3: RSVD11
* - J7-5: RSVD56
* - J7-6: RSVD7
* - J7-7: RSVD27
* - J10-3: RSVD31
* - J10-5: RSVD5
* - J10-6: RSVD32
* - J10-7: RSVD0
* - J10-9: RSVD1
*/
pinctrl-names = "default";
pinctrl-0 = <&cp2_rsvd0_pins &cp2_rsvd1_pins &cp2_rsvd5_pins>,
<&cp2_rsvd7_pins &cp2_rsvd10_pins &cp2_rsvd11_pins>,
<&cp2_rsvd27_pins &cp2_rsvd31_pins &cp2_rsvd32_pins>,
<&cp2_rsvd56_pins>;
};
/* SRDS #3 - SATA */
&cp2_sata0 {
status = "okay";
/* only port 1 is available */
sata-port@1 {
status = "okay";
phys = <&cp2_comphy3 1>;
};
};
&cp2_xmdio {
pinctrl-names = "default";
pinctrl-0 = <&cp2_xmdio_pins>;
status = "okay";
cp2_eth_phy0: ethernet-phy@8 {
compatible = "ethernet-phy-ieee802.3-c45";
reg = <8>;
pinctrl-names = "default";
pinctrl-0 = <&com_10g_int2_pins>;
interrupt-parent = <&cp2_gpio2>;
interrupts = <18 IRQ_TYPE_EDGE_FALLING>;
leds {
#address-cells = <1>;
#size-cells = <0>;
led@1 {
reg = <1>;
color = <LED_COLOR_ID_YELLOW>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
led@2 {
reg = <2>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
};
};
};
@@ -0,0 +1,22 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2019 Marvell International Ltd.
*
* Device tree for the CN9132-DB board.
*/
#include "cn9132-db.dtsi"
/ {
model = "Marvell Armada CN9132-DB setup B";
};
/* Setup B has NAND flash as a boot device, while regular setup uses SPI flash.
* Since CP0 SPI1 and CP0 NAND are sharing some pins, they cannot be activated
* simultaneously. When NAND controller is enabled, SPI1 should be disabled.
*/
&cp0_nand_controller {
status = "okay";
};
@@ -0,0 +1,22 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2019 Marvell International Ltd.
*
* Device tree for the CN9132-DB board.
*/
#include "cn9132-db.dtsi"
/ {
model = "Marvell Armada CN9132-DB setup A";
};
/* Setup A has SPI1 flash as a boot device, while setup B uses NAND flash.
* Since CP0 SPI1 and CP0 NAND are sharing some pins, they cannot be activated
* simultaneously. When SPI controller is enabled, NAND should be disabled.
*/
&cp0_spi1 {
status = "okay";
};
@@ -0,0 +1,229 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2020 Marvell International Ltd.
*
* Device tree for the CN9132-DB board.
*/
#include "cn9131-db.dtsi"
/ {
compatible = "marvell,cn9132", "marvell,cn9131", "marvell,cn9130",
"marvell,armada-ap807-quad", "marvell,armada-ap807";
aliases {
gpio5 = &cp2_gpio1;
gpio6 = &cp2_gpio2;
ethernet5 = &cp2_eth0;
};
cp2_reg_usb3_vbus0: regulator-7 {
compatible = "regulator-fixed";
regulator-name = "cp2-xhci0-vbus";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
enable-active-high;
gpio = <&cp2_gpio1 2 GPIO_ACTIVE_HIGH>;
};
cp2_usb3_0_phy0: usb-phy-4 {
compatible = "usb-nop-xceiv";
#phy-cells = <0>;
vcc-supply = <&cp2_reg_usb3_vbus0>;
};
cp2_reg_usb3_vbus1: regulator-8 {
compatible = "regulator-fixed";
regulator-name = "cp2-xhci1-vbus";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
enable-active-high;
gpio = <&cp2_gpio1 3 GPIO_ACTIVE_HIGH>;
};
cp2_usb3_0_phy1: usb-phy-5 {
compatible = "usb-nop-xceiv";
#phy-cells = <0>;
vcc-supply = <&cp2_reg_usb3_vbus1>;
};
cp2_reg_sd_vccq: regulator-9 {
compatible = "regulator-gpio";
regulator-name = "cp2_sd_vcc";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
gpios = <&cp2_gpio2 17 GPIO_ACTIVE_HIGH>;
states = <1800000 0x1 3300000 0x0>;
};
cp2_sfp_eth0: sfp-eth-3 {
compatible = "sff,sfp";
i2c-bus = <&cp2_sfpp0_i2c>;
los-gpios = <&cp2_module_expander1 11 GPIO_ACTIVE_HIGH>;
mod-def0-gpios = <&cp2_module_expander1 10 GPIO_ACTIVE_LOW>;
tx-disable-gpios = <&cp2_module_expander1 9 GPIO_ACTIVE_HIGH>;
tx-fault-gpios = <&cp2_module_expander1 8 GPIO_ACTIVE_HIGH>;
/*
* SFP cages are unconnected on early PCBs because of an the I2C
* lanes not being connected. Prevent the port for being
* unusable by disabling the SFP node.
*/
status = "disabled";
};
};
/*
* Instantiate the second slave CP115
*/
#define CP11X_NAME cp2
#define CP11X_BASE f6000000
#define CP11X_PCIEx_MEM_BASE(iface) (0xe5000000 + (iface * 0x1000000))
#define CP11X_PCIEx_MEM_SIZE(iface) 0xf00000
#define CP11X_PCIE0_BASE f6600000
#define CP11X_PCIE1_BASE f6620000
#define CP11X_PCIE2_BASE f6640000
#include "armada-cp115.dtsi"
#undef CP11X_NAME
#undef CP11X_BASE
#undef CP11X_PCIEx_MEM_BASE
#undef CP11X_PCIEx_MEM_SIZE
#undef CP11X_PCIE0_BASE
#undef CP11X_PCIE1_BASE
#undef CP11X_PCIE2_BASE
&cp2_crypto {
status = "disabled";
};
&cp2_ethernet {
status = "okay";
};
/* SLM-1521-V2, CON9 */
&cp2_eth0 {
status = "disabled";
phy-mode = "10gbase-r";
/* Generic PHY, providing serdes lanes */
phys = <&cp2_comphy4 0>;
managed = "in-band-status";
sfp = <&cp2_sfp_eth0>;
};
&cp2_gpio1 {
status = "okay";
};
&cp2_gpio2 {
status = "okay";
};
&cp2_i2c0 {
clock-frequency = <100000>;
/* SLM-1521-V2 - U3 */
i2c-mux@72 {
compatible = "nxp,pca9544";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x72>;
cp2_sfpp0_i2c: i2c@0 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0>;
};
i2c@1 {
#address-cells = <1>;
#size-cells = <0>;
reg = <1>;
/* U12 */
cp2_module_expander1: pca9555@21 {
compatible = "nxp,pca9555";
gpio-controller;
#gpio-cells = <2>;
reg = <0x21>;
};
};
};
};
/* SLM-1521-V2, CON6 */
&cp2_pcie0 {
status = "okay";
num-lanes = <2>;
num-viewport = <8>;
/* Generic PHY, providing serdes lanes */
phys = <&cp2_comphy0 0
&cp2_comphy1 0>;
};
/* SLM-1521-V2, CON8 */
&cp2_pcie2 {
status = "okay";
num-lanes = <1>;
num-viewport = <8>;
/* Generic PHY, providing serdes lanes */
phys = <&cp2_comphy5 2>;
};
&cp2_sata0 {
status = "okay";
/* SLM-1521-V2, CON4 */
sata-port@0 {
/* Generic PHY, providing serdes lanes */
phys = <&cp2_comphy2 0>;
status = "okay";
};
};
/* CON 2 on SLM-1683 - microSD */
&cp2_sdhci0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&cp2_sdhci_pins>;
bus-width = <4>;
cd-gpios = <&cp2_gpio2 23 GPIO_ACTIVE_LOW>;
vqmmc-supply = <&cp2_reg_sd_vccq>;
};
&cp2_syscon0 {
cp2_pinctrl: pinctrl {
compatible = "marvell,cp115-standalone-pinctrl";
cp2_i2c0_pins: cp2-i2c-pins-0 {
marvell,pins = "mpp37", "mpp38";
marvell,function = "i2c0";
};
cp2_sdhci_pins: cp2-sdhi-pins-0 {
marvell,pins = "mpp56", "mpp57", "mpp58",
"mpp59", "mpp60", "mpp61";
marvell,function = "sdio";
};
};
};
&cp2_utmi {
status = "okay";
};
&cp2_usb3_0 {
status = "okay";
usb-phy = <&cp2_usb3_0_phy0>;
phys = <&cp2_utmi0>;
phy-names = "usb";
dr_mode = "host";
};
/* SLM-1521-V2, CON11 */
&cp2_usb3_1 {
status = "okay";
usb-phy = <&cp2_usb3_0_phy1>;
/* Generic PHY, providing serdes lanes */
phys = <&cp2_comphy3 1>, <&cp2_utmi1>;
phy-names = "usb", "utmi";
dr_mode = "host";
};
@@ -0,0 +1,720 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2024 Josua Mayer <josua@solid-run.com>
*
*/
#include <dt-bindings/gpio/gpio.h>
/*
* Instantiate the first external CP115
*/
#define CP11X_NAME cp1
#define CP11X_BASE f4000000
#define CP11X_PCIEx_MEM_BASE(iface) (0xe2000000 + (iface * 0x1000000))
#define CP11X_PCIEx_MEM_SIZE(iface) 0xf00000
#define CP11X_PCIE0_BASE f4600000
#define CP11X_PCIE1_BASE f4620000
#define CP11X_PCIE2_BASE f4640000
#include "armada-cp115.dtsi"
#undef CP11X_NAME
#undef CP11X_BASE
#undef CP11X_PCIEx_MEM_BASE
#undef CP11X_PCIEx_MEM_SIZE
#undef CP11X_PCIE0_BASE
#undef CP11X_PCIE1_BASE
#undef CP11X_PCIE2_BASE
/*
* Instantiate the second external CP115
*/
#define CP11X_NAME cp2
#define CP11X_BASE f6000000
#define CP11X_PCIEx_MEM_BASE(iface) (0xe5000000 + (iface * 0x1000000))
#define CP11X_PCIEx_MEM_SIZE(iface) 0xf00000
#define CP11X_PCIE0_BASE f6600000
#define CP11X_PCIE1_BASE f6620000
#define CP11X_PCIE2_BASE f6640000
#include "armada-cp115.dtsi"
#undef CP11X_NAME
#undef CP11X_BASE
#undef CP11X_PCIEx_MEM_BASE
#undef CP11X_PCIEx_MEM_SIZE
#undef CP11X_PCIE0_BASE
#undef CP11X_PCIE1_BASE
#undef CP11X_PCIE2_BASE
/ {
model = "SolidRun CN9132 COM Express Type 7 Module";
compatible = "solidrun,cn9132-sr-cex7", "marvell,cn9130";
aliases {
ethernet0 = &cp0_eth1;
gpio3 = &cp1_gpio1;
gpio4 = &cp1_gpio2;
gpio5 = &cp2_gpio1;
gpio6 = &cp2_gpio2;
i2c0 = &cp0_i2c0;
i2c1 = &cp0_i2c1;
i2c2 = &com_clkgen_i2c;
i2c3 = &com_10g_led_i2c;
i2c4 = &com_10g_sfp_i2c0;
i2c5 = &com_smbus;
i2c6 = &com_fanctrl_i2c;
mmc0 = &ap_sdhci0;
rtc0 = &cp0_rtc;
};
chosen {
stdout-path = "serial0:115200n8";
};
fan: pwm-fan {
compatible = "pwm-fan";
cooling-levels = <0 51 102 153 204 255>;
#cooling-cells = <2>;
pinctrl-names = "default";
pinctrl-0 = <&cp0_fan_pwm_pins &cp0_fan_tacho_pins>;
pwms = <&cp0_gpio2 7 40000>;
interrupt-parent = <&cp0_gpio1>;
interrupts = <26 IRQ_TYPE_EDGE_FALLING>;
};
v_1_8: regulator-1-8 {
compatible = "regulator-fixed";
regulator-name = "1v8";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
};
ap_vhv: regulator-ap-vhv-1-8 {
compatible = "regulator-fixed";
regulator-name = "ap-vhv-1v8";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
pinctrl-0 = <&cp0_reg_ap_vhv_pins>;
pinctrl-names = "default";
gpios = <&cp0_gpio2 21 GPIO_ACTIVE_HIGH>;
enable-active-high;
};
cp_vhv: regulator-cp-vhv-1-8 {
compatible = "regulator-fixed";
regulator-name = "cp-vhv-1v8";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
pinctrl-0 = <&cp0_reg_cp_vhv_pins>;
pinctrl-names = "default";
gpios = <&cp0_gpio2 17 GPIO_ACTIVE_HIGH>;
enable-active-high;
};
};
&ap_pinctrl {
ap_mmc0_pins: ap-mmc0-pins {
marvell,pins = "mpp0", "mpp1", "mpp2", "mpp3", "mpp4", "mpp5",
"mpp6", "mpp7", "mpp8", "mpp9", "mpp10", "mpp12";
marvell,function = "sdio";
/*
* mpp12 is emmc reset, function should be sdio (hw_rst),
* but pinctrl-mvebu does not support this.
*
* From pinctrl-mvebu.h:
* "The name will be used to switch to this setting in DT description, e.g.
* marvell,function = "uart2". subname is only for debugging purposes."
*/
};
};
&ap_sdhci0 {
bus-width = <8>;
pinctrl-0 = <&ap_mmc0_pins>;
pinctrl-names = "default";
vqmmc-supply = <&v_1_8>;
/*
* Not stable in HS modes - phy needs "more calibration", so disable
* UHS (by preventing voltage switch), SDR104, SDR50 and DDR50 modes.
*/
no-1-8-v;
no-sd;
no-sdio;
non-removable;
status = "okay";
};
&ap_thermal_ic {
polling-delay = <1000>;
trips {
ap_active: trip-active {
temperature = <40000>;
hysteresis = <4000>;
type = "active";
};
};
cooling-maps {
map0 {
trip = <&ap_active>;
cooling-device = <&fan THERMAL_NO_LIMIT 4>;
};
map1 {
trip = <&ap_crit>;
cooling-device = <&fan 4 5>;
};
};
};
&cp0_ethernet {
status = "okay";
};
&cp0_eth1 {
pinctrl-names = "default";
pinctrl-0 = <&cp0_eth1_pins>;
phy-mode = "rgmii-id";
phy = <&cp0_eth_phy0>;
status = "okay";
};
&cp0_gpio1 {
status = "okay";
/*
* Tacho signal used as interrupt source by pwm-fan driver.
* Hog IO as input to ensure mvebu-gpio irq driver`s
* irq_set_type can succeed.
*/
pwm-tacho-irq-hog {
gpio-hog;
gpios = <26 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>;
input;
line-name = "fan-tacho";
};
};
&cp0_gpio2 {
status = "okay";
};
&cp0_i2c0 {
pinctrl-names = "default";
pinctrl-0 = <&cp0_i2c0_pins>;
clock-frequency = <100000>;
status = "okay";
com_eeprom: eeprom@50 {
compatible = "atmel,24c02";
reg = <0x50>;
pagesize = <8>;
};
eeprom@53 {
compatible = "atmel,spd";
reg = <0x53>;
};
};
&cp0_i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&cp0_i2c1_pins>;
clock-frequency = <100000>;
status = "okay";
i2c-mux@77 {
compatible = "nxp,pca9547";
reg = <0x77>;
i2c-mux-idle-disconnect;
#address-cells = <1>;
#size-cells = <0>;
com_clkgen_i2c: i2c@0 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0>;
/* clock-controller@6b */
};
com_10g_led_i2c: i2c@1 {
#address-cells = <1>;
#size-cells = <0>;
reg = <1>;
/* Routed to B2B Connector as I2C_10G_LED_SCL/SDA */
};
com_10g_sfp_i2c0: i2c@2 {
#address-cells = <1>;
#size-cells = <0>;
reg = <2>;
/* Routed to B2B Connector as I2C_SFP0_CP0_SCL/SDA */
};
com_smbus: i2c@3 {
#address-cells = <1>;
#size-cells = <0>;
reg = <3>;
/* Routed to B2B Connector as SBM_CLK/DAT */
};
com_fanctrl_i2c: i2c@4 {
#address-cells = <1>;
#size-cells = <0>;
reg = <4>;
/* fan-controller@2f (assembly option) */
};
};
};
&cp0_mdio {
pinctrl-names = "default";
pinctrl-0 = <&cp0_mdio_pins>;
status = "okay";
cp0_eth_phy0: ethernet-phy@0 {
reg = <0>;
};
};
&cp0_spi1 {
pinctrl-names = "default";
pinctrl-0 = <&cp0_spi1_pins>;
status = "okay";
flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
/* read command supports max. 50MHz */
spi-max-frequency = <50000000>;
};
};
&cp0_syscon0 {
cp0_pinctrl: pinctrl {
compatible = "marvell,cp115-standalone-pinctrl";
com_10g_int0_pins: cp0-10g-int-pins {
marvell,pins = "mpp24";
marvell,function = "gpio";
};
cp0_eth1_pins: cp0-eth1-pins {
marvell,pins = "mpp0", "mpp1", "mpp2", "mpp3",
"mpp4", "mpp5", "mpp6", "mpp7",
"mpp8", "mpp9", "mpp10", "mpp11";
/* docs call it "ge1", but cp110-pinctrl "ge0" */
marvell,function = "ge0";
};
cp0_fan_pwm_pins: cp0-fan-pwm-pins {
marvell,pins = "mpp39";
marvell,function = "gpio";
};
cp0_fan_tacho_pins: cp0-fan-tacho-pins {
marvell,pins = "mpp26";
marvell,function = "gpio";
};
cp0_i2c0_pins: cp0-i2c0-pins {
marvell,pins = "mpp37", "mpp38";
marvell,function = "i2c0";
};
cp0_i2c1_pins: cp0-i2c1-pins {
marvell,pins = "mpp35", "mpp36";
marvell,function = "i2c1";
};
cp0_mdio_pins: cp0-mdio-pins {
marvell,pins = "mpp40", "mpp41";
marvell,function = "ge";
};
cp0_mmc0_pins: cp0-mmc0-pins {
marvell,pins = "mpp56", "mpp57", "mpp58", "mpp59",
"mpp60", "mpp61";
marvell,function = "sdio";
};
cp0_mmc0_cd_pins: cp0-mmc0-cd-pins {
marvell,pins = "mpp55";
marvell,function = "sdio_cd";
};
cp0_pwrbtn_pins: cp0-pwrbtn-pins {
marvell,pins = "mpp31";
marvell,function = "gpio";
};
cp0_reg_ap_vhv_pins: cp0-reg-ap-vhv-pins {
marvell,pins = "mpp53";
marvell,function = "gpio";
};
cp0_reg_cp_vhv_pins: cp0-reg-cp-vhv-pins {
marvell,pins = "mpp49";
marvell,function = "gpio";
};
cp0_spi1_pins: cp0-spi1-pins {
marvell,pins = "mpp13", "mpp14", "mpp15", "mpp16";
marvell,function = "spi1";
};
cp0_spi1_cs1_pins: cp0-spi1-cs1-pins {
marvell,pins = "mpp12";
marvell,function = "spi1";
};
cp0_uart2_pins: cp0-uart2-pins {
marvell,pins = "mpp50", "mpp51";
marvell,function = "uart2";
};
};
};
&cp0_thermal_ic {
polling-delay = <1000>;
trips {
cp0_active: trip-active {
temperature = <40000>;
hysteresis = <4000>;
type = "active";
};
};
cooling-maps {
map0 {
trip = <&cp0_active>;
cooling-device = <&fan THERMAL_NO_LIMIT 4>;
};
map1 {
trip = <&cp0_crit>;
cooling-device = <&fan 4 5>;
};
};
};
/* USB-2.0 Host */
&cp0_usb3_0 {
phys = <&cp0_utmi0>;
phy-names = "utmi";
dr_mode = "host";
status = "okay";
};
/* USB-2.0 Host */
&cp0_usb3_1 {
phys = <&cp0_utmi1>;
phy-names = "utmi";
dr_mode = "host";
status = "okay";
};
&cp0_utmi {
status = "okay";
};
&cp1_gpio1 {
status = "okay";
};
&cp1_gpio2 {
status = "okay";
};
&cp1_rtc {
status = "disabled";
};
&cp1_spi1 {
pinctrl-names = "default";
pinctrl-0 = <&cp1_spi1_pins>;
status = "okay";
tpm@0 {
reg = <0>;
compatible = "infineon,slb9670", "tcg,tpm_tis-spi";
spi-max-frequency = <10000000>;
pinctrl-names = "default";
pinctrl-0 = <&cp1_tpm_irq_pins>;
interrupt-parent = <&cp1_gpio1>;
interrupts = <17 IRQ_TYPE_LEVEL_LOW>;
};
};
&cp1_syscon0 {
cp1_pinctrl: pinctrl {
compatible = "marvell,cp115-standalone-pinctrl";
com_10g_int1_pins: cp1-10g-int-pins {
marvell,pins = "mpp50";
marvell,function = "gpio";
};
cp1_10g_phy_rst_01_pins: cp1-10g-phy-rst-01-pins {
marvell,pins = "mpp43";
marvell,function = "gpio";
};
cp1_10g_phy_rst_23_pins: cp1-10g-phy-rst-23-pins {
marvell,pins = "mpp42";
marvell,function = "gpio";
};
cp1_batlow_pins: cp1-batlow-pins {
marvell,pins = "mpp11";
marvell,function = "gpio";
};
cp1_rsvd16_pins: cp1-rsvd16-pins {
marvell,pins = "mpp29";
marvell,function = "gpio";
};
cp1_sata_act_pins: cp1-sata-act-pins {
marvell,pins = "mpp39";
marvell,function = "gpio";
};
cp1_spi1_pins: cp1-spi1-pins {
marvell,pins = "mpp13", "mpp14", "mpp15", "mpp16";
marvell,function = "spi1";
};
cp1_thrm_irq_pins: cp1-thrm-irq-pins {
marvell,pins = "mpp34";
marvell,function = "gpio";
};
cp1_thrm_trip_pins: cp1-thrm-trip-pins {
marvell,pins = "mpp33";
marvell,function = "gpio";
};
cp1_tpm_irq_pins: cp1-tpm-irq-pins {
marvell,pins = "mpp17";
marvell,function = "gpio";
};
cp1_wake0_pins: cp1-wake0-pins {
marvell,pins = "mpp40";
marvell,function = "gpio";
};
cp1_wake1_pins: cp1-wake1-pins {
marvell,pins = "mpp51";
marvell,function = "gpio";
};
cp1_xmdio_pins: cp1-xmdio-pins {
marvell,pins = "mpp37", "mpp38";
marvell,function = "xg";
};
};
};
&cp1_thermal_ic {
polling-delay = <1000>;
trips {
cp1_active: trip-active {
temperature = <40000>;
hysteresis = <4000>;
type = "active";
};
};
cooling-maps {
map0 {
trip = <&cp1_active>;
cooling-device = <&fan THERMAL_NO_LIMIT 4>;
};
map1 {
trip = <&cp1_crit>;
cooling-device = <&fan 4 5>;
};
};
};
/* USB-2.0 Host */
&cp1_usb3_0 {
phys = <&cp1_utmi0>;
phy-names = "utmi";
dr_mode = "host";
status = "okay";
};
&cp1_utmi {
status = "okay";
};
&cp2_ethernet {
status = "okay";
};
&cp2_gpio1 {
status = "okay";
};
&cp2_gpio2 {
status = "okay";
};
&cp2_rtc {
status = "disabled";
};
&cp2_syscon0 {
cp2_pinctrl: pinctrl {
compatible = "marvell,cp115-standalone-pinctrl";
com_10g_int2_pins: cp2-10g-int-pins {
marvell,pins = "mpp50";
marvell,function = "gpio";
};
cp2_rsvd0_pins: cp2-rsvd0-pins {
marvell,pins = "mpp0";
marvell,function = "gpio";
};
cp2_rsvd1_pins: cp2-rsvd1-pins {
marvell,pins = "mpp1";
marvell,function = "gpio";
};
cp2_rsvd2_pins: cp2-rsvd2-pins {
marvell,pins = "mpp2";
marvell,function = "gpio";
};
cp2_rsvd3_pins: cp2-rsvd3-pins {
marvell,pins = "mpp3";
marvell,function = "gpio";
};
cp2_rsvd4_pins: cp2-rsvd4-pins {
marvell,pins = "mpp4";
marvell,function = "gpio";
};
cp2_rsvd5_pins: cp2-rsvd5-pins {
marvell,pins = "mpp54";
marvell,function = "gpio";
};
cp2_rsvd7_pins: cp2-rsvd7-pins {
marvell,pins = "mpp7";
marvell,function = "gpio";
};
cp2_rsvd8_pins: cp2-rsvd8-pins {
marvell,pins = "mpp8";
marvell,function = "gpio";
};
cp2_rsvd9_pins: cp2-rsvd9-pins {
marvell,pins = "mpp9";
marvell,function = "gpio";
};
cp2_rsvd10_pins: cp2-rsvd10-pins {
marvell,pins = "mpp10";
marvell,function = "gpio";
};
cp2_rsvd11_pins: cp2-rsvd11-pins {
marvell,pins = "mpp11";
marvell,function = "gpio";
};
cp2_rsvd27_pins: cp2-rsvd27-pins {
marvell,pins = "mpp11";
marvell,function = "gpio";
};
cp2_rsvd31_pins: cp2-rsvd31-pins {
marvell,pins = "mpp31";
marvell,function = "gpio";
};
cp2_rsvd32_pins: cp2-rsvd32-pins {
marvell,pins = "mpp32";
marvell,function = "gpio";
};
cp2_rsvd55_pins: cp2-rsvd55-pins {
marvell,pins = "mpp55";
marvell,function = "gpio";
};
cp2_rsvd56_pins: cp2-rsvd56-pins {
marvell,pins = "mpp56";
marvell,function = "gpio";
};
cp2_xmdio_pins: cp2-xmdio-pins {
marvell,pins = "mpp37", "mpp38";
marvell,function = "xg";
};
};
};
&cp2_thermal_ic {
polling-delay = <1000>;
trips {
cp2_active: trip-active {
temperature = <40000>;
hysteresis = <4000>;
type = "active";
};
};
cooling-maps {
map0 {
trip = <&cp2_active>;
cooling-device = <&fan THERMAL_NO_LIMIT 4>;
};
map1 {
trip = <&cp2_crit>;
cooling-device = <&fan 4 5>;
};
};
};
/* USB-2.0/3.0 Host */
&cp2_usb3_0 {
phys = <&cp2_utmi0>, <&cp2_comphy1 0>;
phy-names = "utmi", "comphy";
dr_mode = "host";
status = "okay";
};
&cp2_utmi {
status = "okay";
};
/* AP default console */
&uart0 {
pinctrl-0 = <&uart0_pins>;
pinctrl-names = "default";
status = "okay";
};
@@ -0,0 +1,27 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2023 Marvell International Ltd.
*
* Device tree for the Falcon DB Type 7 Com Express carrier board,
* Utilizing the Armada 7020 COM Express CPU module board.
* This specific carrier board (DB-98CX8540/80)
* only maintains a PCIe link with the CPU module,
* which does not require any special DTS definitions.
*
* There is no Linux CPU booting in this mode on the carrier, only on the
* Armada 7020 COM Express CPU module.
* What runs the Linux is the Armada 7020 on the COM Express CPU module,
* And it accesses the switch end-point on the Falcon DB portion of the carrier
* via PCIe.
*/
#include "armada-7020-comexpress.dtsi"
#include "db-falcon-carrier.dtsi"
/ {
model = "Marvell Falcon DB COM EXPRESS type 7 carrier board with Armada 7020 CPU module";
compatible = "marvell,armada7020-falcon-carrier", "marvell,db-falcon-carrier",
"marvell,armada7020-cpu-module", "marvell,armada7020",
"marvell,armada-ap806-dual", "marvell,armada-ap806";
};
@@ -0,0 +1,22 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2023 Marvell International Ltd.
*
* Device tree for the Falcon DB Type 7 Com Express carrier board,
* This (DB-98CX8540/80) specific carrier board only maintains
* a PCIe link with the COM Express CPU module, which does not
* require any special DTS definitions.
*
* The board contains the 98CX8540/80 Switch, which connects by
* PCIe to the COM Express CPU module.
* This CPU module can be any standard COM Express CPU module with
* PCIe support.
*
* There is no Linux CPU booting in this mode on the carrier,
* only on the COM Express CPU module.
*/
/ {
model = "Marvell Armada Falcon DB COM EXPRESS type 7 carrier board";
compatible = "marvell,db-falcon-carrier";
};
@@ -0,0 +1,2 @@
# SPDX-License-Identifier: GPL-2.0
dtb-$(CONFIG_ARCH_MMP) += pxa1908-samsung-coreprimevelte.dtb
@@ -0,0 +1,533 @@
// SPDX-License-Identifier: GPL-2.0-only
#include "pxa1908.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/linux-event-codes.h>
/ {
model = "Samsung Galaxy Core Prime VE LTE";
compatible = "samsung,coreprimevelte", "marvell,pxa1908";
aliases {
mmc0 = &sdh2; /* eMMC */
mmc1 = &sdh0; /* SD card */
mmc2 = &sdh1; /* SDIO */
serial0 = &uart0;
};
chosen {
#address-cells = <2>;
#size-cells = <2>;
ranges;
stdout-path = "serial0:115200n8";
fb0: framebuffer@17177000 {
compatible = "simple-framebuffer";
memory-region = <&fb_mem>;
power-domains = <&apmu PXA1908_POWER_DOMAIN_DSI>;
width = <480>;
height = <800>;
stride = <(480 * 4)>;
format = "a8r8g8b8";
};
};
memory@0 {
device_type = "memory";
reg = <0 0 0 0x40000000>;
};
reserved-memory {
/*
* Reserved by the vendor bootloader as a "secure region".
*
* TODO: See if the responsible stage of the bootloader can be
* replaced
*/
secure-region@0 {
reg = <0 0 0 0x1000000>;
};
/* The "active buffer" is at 0x17000000 + (size of one buffer). */
fb_mem: framebuffer@17177000 {
reg = <0 0x17177000 0 (480 * 800 * 4)>;
no-map;
};
};
i2c-muic {
compatible = "i2c-gpio";
sda-gpios = <&gpio 30 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
scl-gpios = <&gpio 29 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
i2c-gpio,delay-us = <3>;
i2c-gpio,timeout-ms = <100>;
#address-cells = <1>;
#size-cells = <0>;
pinctrl-names = "default";
pinctrl-0 = <&i2c_muic_pins>;
muic: extcon@14 {
compatible = "siliconmitus,sm5504-muic";
reg = <0x14>;
interrupt-parent = <&gpio>;
interrupts = <0 IRQ_TYPE_EDGE_FALLING>;
usb_con: connector {
compatible = "usb-b-connector";
label = "micro-USB";
type = "micro";
};
};
};
gpio-keys {
compatible = "gpio-keys";
pinctrl-names = "default";
pinctrl-0 = <&gpio_keys_pins>;
autorepeat;
key-home {
label = "Home";
linux,code = <KEY_HOME>;
gpios = <&gpio 50 GPIO_ACTIVE_LOW>;
};
key-volup {
label = "Volume Up";
linux,code = <KEY_VOLUMEUP>;
gpios = <&gpio 16 GPIO_ACTIVE_LOW>;
};
key-voldown {
label = "Volume Down";
linux,code = <KEY_VOLUMEDOWN>;
gpios = <&gpio 17 GPIO_ACTIVE_LOW>;
};
};
backlight {
compatible = "kinetic,ktd2801";
ctrl-gpios = <&gpio 97 GPIO_ACTIVE_HIGH>;
max-brightness = <210>;
};
vibrator {
compatible = "pwm-vibrator";
pwm-names = "enable";
pwms = <&pwm3 100000>;
enable-gpios = <&gpio 20 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&vibrator_pin>;
};
};
&smmu {
status = "okay";
};
&pmx {
pinctrl-single,gpio-range = <&range 55 55 0>,
<&range 110 32 0>,
<&range 52 1 0>;
pinctrl-names = "default";
pinctrl-0 = <&board_pins_0 &board_pins_1 &board_pins_2>;
board_pins_0: board-pins-0 {
pinctrl-single,pins = <
0x160 0
0x164 0
0x168 0
0x16c 0
>;
pinctrl-single,drive-strength = <0x1000 0x1800>;
pinctrl-single,bias-pullup = <0x8000 0x8000 0 0xc000>;
pinctrl-single,bias-pulldown = <0x8000 0x8000 0 0xa000>;
pinctrl-single,input-schmitt = <0 0x30>;
pinctrl-single,input-schmitt-enable = <0x40 0 0x40 0x40>;
pinctrl-single,low-power-mode = <0x288 0x388>;
};
board_pins_1: board-pins-1 {
pinctrl-single,pins = <
0x44 1
0x48 1
0x20 1
0x18 1
0x14 1
0x10 1
0xc 1
0x8 1
0x68 1
0x58 0
0x54 0
0x7c 0
0x6c 0
0x70 0
0x4c 1
0x50 1
0xac 0
0x90 0
0x8c 0
0x88 0
0x84 0
0xc8 0
0x128 0
0x190 0
0x194 0
0x1a0 0
0x114 0
0x118 0
0x1d8 0
0x1e4 0
0xe8 0
0x100 0
0x204 0
0x210 0
0x218 0
>;
pinctrl-single,bias-pullup = <0xc000 0xc000 0 0xc000>;
pinctrl-single,bias-pulldown = <0x8000 0xa000 0x8000 0xc000>;
pinctrl-single,low-power-mode = <0x288 0x388>;
};
board_pins_2: board-pins-2 {
pinctrl-single,pins = <
0x260 0
0x264 0
0x268 0
0x26c 0
0x270 0
0x274 0
0x78 0
0x74 0
0xb0 1
>;
pinctrl-single,drive-strength = <0x1000 0x1800>;
pinctrl-single,bias-pullup = <0 0xc000 0 0xc000>;
pinctrl-single,bias-pulldown = <0 0xa000 0 0xa000>;
pinctrl-single,input-schmitt = <0 0x30>;
pinctrl-single,input-schmitt-enable = <0x40 0 0x40 0x40>;
pinctrl-single,low-power-mode = <0 0x388>;
};
uart0_pins: uart0-pins {
pinctrl-single,pins = <
0x198 6
0x19c 6
>;
pinctrl-single,drive-strength = <0x1000 0x1800>;
pinctrl-single,bias-pullup = <0 0xc000 0 0xc000>;
pinctrl-single,bias-pulldown = <0 0xa000 0 0xa000>;
pinctrl-single,input-schmitt = <0 0x30>;
pinctrl-single,input-schmitt-enable = <0x40 0 0x40 0x40>;
pinctrl-single,low-power-mode = <0 0x388>;
};
gpio_keys_pins: gpio-keys-pins {
pinctrl-single,pins = <
0x11c 0
0x120 0
0x1a4 0
>;
pinctrl-single,drive-strength = <0x1000 0x1800>;
pinctrl-single,bias-pullup = <0xc000 0xc000 0 0xc000>;
pinctrl-single,bias-pulldown = <0x8000 0xa0000 0x8000 0xa000>;
pinctrl-single,input-schmitt = <0 0x30>;
pinctrl-single,input-schmitt-enable = <0x40 0 0x40 0x40>;
pinctrl-single,low-power-mode = <0 0x388>;
};
i2c_muic_pins: i2c-muic-pins {
pinctrl-single,pins = <
0x154 0
0x150 0
>;
pinctrl-single,drive-strength = <0x1000 0x1800>;
pinctrl-single,bias-pullup = <0 0xc000 0 0xc000>;
pinctrl-single,bias-pulldown = <0 0xa000 0 0xa000>;
pinctrl-single,input-schmitt = <0 0x30>;
pinctrl-single,input-schmitt-enable = <0x40 0 0x40 0x40>;
pinctrl-single,low-power-mode = <0x288 0x388>;
};
sdh0_pins_0: sdh0-pins-0 {
pinctrl-single,pins = <
0x108 0
>;
pinctrl-single,drive-strength = <0x1000 0x1800>;
pinctrl-single,bias-pullup = <0xc000 0xc000 0 0xc000>;
pinctrl-single,bias-pulldown = <0x8000 0xa000 0x8000 0xa000>;
pinctrl-single,input-schmitt = <0 0x30>;
pinctrl-single,input-schmitt-enable = <0x40 0 0x40 0x40>;
pinctrl-single,low-power-mode = <0 0x388>;
};
sdh0_pins_1: sdh0-pins-1 {
pinctrl-single,pins = <
0x94 0
0x98 0
0x9c 0
0xa0 0
0xa4 0
>;
pinctrl-single,drive-strength = <0x800 0x1800>;
pinctrl-single,bias-pullup = <0xc000 0xc000 0 0xc000>;
pinctrl-single,bias-pulldown = <0x8000 0xa000 0x8000 0xa000>;
pinctrl-single,input-schmitt = <0 0x30>;
pinctrl-single,input-schmitt-enable = <0x40 0 0x40 0x40>;
pinctrl-single,low-power-mode = <0 0x388>;
};
sdh0_pins_2: sdh0-pins-2 {
pinctrl-single,pins = <
0xa8 0
>;
pinctrl-single,drive-strength = <0x1000 0x1800>;
pinctrl-single,bias-pullup = <0 0xc000 0 0xc000>;
pinctrl-single,bias-pulldown = <0 0xa000 0 0xa000>;
pinctrl-single,input-schmitt = <0 0x30>;
pinctrl-single,input-schmitt-enable = <0x40 0 0x40 0x40>;
pinctrl-single,low-power-mode = <0x208 0x388>;
};
sdh1_pins_0: sdh1-pins-0 {
pinctrl-single,pins = <
0x170 1
0x174 1
0x178 1
0x17c 1
0x180 1
>;
pinctrl-single,drive-strength = <0x1000 0x1800>;
pinctrl-single,bias-pullup = <0 0xc000 0 0xc000>;
pinctrl-single,bias-pulldown = <0 0xa000 0 0xa000>;
pinctrl-single,input-schmitt = <0 0x30>;
pinctrl-single,input-schmitt-enable = <0x40 0 0x40 0x40>;
pinctrl-single,low-power-mode = <0 0x388>;
};
sdh1_pins_1: sdh1-pins-1 {
pinctrl-single,pins = <0x184 1>;
pinctrl-single,drive-strength = <0 0x1800>;
pinctrl-single,bias-pullup = <0 0xc000 0 0xc000>;
pinctrl-single,bias-pulldown = <0 0xa000 0 0xa000>;
pinctrl-single,input-schmitt = <0 0x30>;
pinctrl-single,input-schmitt-enable = <0x40 0 0x40 0x40>;
pinctrl-single,low-power-mode = <0x208 0x388>;
};
sdh1_pins_2: sdh1-pins-2 {
pinctrl-single,pins = <0xec 0>;
pinctrl-single,drive-strength = <0x1000 0x1800>;
pinctrl-single,bias-pullup = <0x8000 0x8000 0 0xc000>;
pinctrl-single,bias-pulldown = <0x8000 0x8000 0 0xa000>;
pinctrl-single,input-schmitt = <0 0x30>;
pinctrl-single,input-schmitt-enable = <0x40 0 0x40 0x40>;
pinctrl-single,low-power-mode = <0 0x388>;
};
sdh1_fast_pins_0: sdh1-fast-pins-0 {
pinctrl-single,pins = <
0x170 1
0x174 1
0x178 1
0x17c 1
0x180 1
>;
pinctrl-single,drive-strength = <0x1800 0x1800>;
pinctrl-single,bias-pullup = <0 0xc000 0 0xc000>;
pinctrl-single,bias-pulldown = <0 0xa000 0 0xa000>;
pinctrl-single,input-schmitt = <0 0x30>;
pinctrl-single,input-schmitt-enable = <0x40 0 0x40 0x40>;
pinctrl-single,low-power-mode = <0 0x388>;
};
sdh1_fast_pins_1: sdh1-fast-pins-1 {
pinctrl-single,pins = <0x184 1>;
pinctrl-single,drive-strength = <0x1800 0x1800>;
pinctrl-single,bias-pullup = <0 0xc000 0 0xc000>;
pinctrl-single,bias-pulldown = <0 0xa000 0 0xa000>;
pinctrl-single,input-schmitt = <0 0x30>;
pinctrl-single,input-schmitt-enable = <0x40 0 0x40 0x40>;
pinctrl-single,low-power-mode = <0x208 0x388>;
};
sdh2_pins_0: sdh2-pins-0 {
pinctrl-single,pins = <
0x24 1
0x28 1
0x2c 1
0x30 1
0x34 1
0x38 1
0x3c 1
0x40 1
>;
pinctrl-single,drive-strength = <0x1000 0x1800>;
pinctrl-single,bias-pullup = <0 0xc000 0 0xc000>;
pinctrl-single,bias-pulldown = <0 0xa000 0 0xa000>;
pinctrl-single,input-schmitt = <0 0x30>;
pinctrl-single,input-schmitt-enable = <0x40 0 0x40 0x40>;
pinctrl-single,low-power-mode = <0 0x388>;
};
sdh2_pins_1: sdh2-pins-1 {
pinctrl-single,pins = <0x64 1>;
pinctrl-single,drive-strength = <0x1000 0x1800>;
pinctrl-single,bias-pullup = <0 0xc000 0 0xc000>;
pinctrl-single,bias-pulldown = <0 0xa000 0 0xa000>;
pinctrl-single,input-schmitt = <0 0x30>;
pinctrl-single,input-schmitt-enable = <0x40 0 0x40 0x40>;
pinctrl-single,low-power-mode = <0x208 0x388>;
};
sdh2_pins_2: sdh2-pins-2 {
pinctrl-single,pins = <0x5c 1>;
pinctrl-single,bias-pullup = <0xc000 0xc000 0 0xc000>;
pinctrl-single,bias-pulldown = <0x8000 0xa000 0x8000 0xa000>;
pinctrl-single,low-power-mode = <0x288 0x388>;
};
sdh2_fast_pins_0: sdh2-fast-pins-0 {
pinctrl-single,pins = <
0x24 1
0x28 1
0x2c 1
0x30 1
0x34 1
0x38 1
0x3c 1
0x40 1
>;
pinctrl-single,drive-strength = <0x1800 0x1800>;
pinctrl-single,bias-pullup = <0 0xc000 0 0xc000>;
pinctrl-single,bias-pulldown = <0 0xa000 0 0xa000>;
pinctrl-single,input-schmitt = <0 0x30>;
pinctrl-single,input-schmitt-enable = <0x40 0 0x40 0x40>;
pinctrl-single,low-power-mode = <0 0x388>;
};
sdh2_fast_pins_1: sdh2-fast-pins-1 {
pinctrl-single,pins = <0x64 1>;
pinctrl-single,drive-strength = <0x1800 0x1800>;
pinctrl-single,bias-pullup = <0 0xc000 0 0xc000>;
pinctrl-single,bias-pulldown = <0 0xa000 0 0xa000>;
pinctrl-single,input-schmitt = <0 0x30>;
pinctrl-single,input-schmitt-enable = <0x40 0 0x40 0x40>;
pinctrl-single,low-power-mode = <0x208 0x388>;
};
sdh2_fast_pins_2: sdh2-fast-pins-2 {
pinctrl-single,pins = <0x5c 1>;
pinctrl-single,drive-strength = <0x1800 0x1800>;
pinctrl-single,bias-pullup = <0xc000 0xc000 0 0xc000>;
pinctrl-single,bias-pulldown = <0x8000 0xa000 0x8000 0xa000>;
pinctrl-single,low-power-mode = <0x288 0x388>;
};
vibrator_pin: vibrator-pin {
pinctrl-single,pins = <0x12c 0>;
pinctrl-single,drive-strength = <0x1000 0x1800>;
pinctrl-single,bias-pullup = <0x8000 0xc000 0x8000 0xc000>;
pinctrl-single,bias-pulldown = <0xa000 0xa000 0 0xa000>;
pinctrl-single,input-schmitt = <0 0x30>;
pinctrl-single,input-schmitt-enable = <0x40 0 0x40 0x40>;
pinctrl-single,low-power-mode = <0 0x388>;
};
};
&uart0 {
pinctrl-names = "default";
pinctrl-0 = <&uart0_pins>;
};
&twsi0 {
status = "okay";
};
&twsi1 {
status = "okay";
};
&twsi2 {
status = "okay";
pmic@30 {
compatible = "marvell,88pm886-a1";
reg = <0x30>;
interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
wakeup-source;
regulators {
ldo2: ldo2 {
regulator-min-microvolt = <2500000>;
regulator-max-microvolt = <3100000>;
};
ldo6: ldo6 {
regulator-boot-on;
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <3300000>;
};
ldo14: ldo14 {
regulator-boot-on;
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <3300000>;
};
};
};
};
&twsi3 {
status = "okay";
touchscreen@50 {
compatible = "imagis,ist3032c";
reg = <0x50>;
interrupt-parent = <&gpio>;
interrupts = <72 IRQ_TYPE_EDGE_FALLING>;
vdd-supply = <&ldo2>;
touchscreen-size-x = <480>;
touchscreen-size-y = <800>;
};
};
&usb {
extcon = <&muic>, <&muic>;
};
&sdh2 {
pinctrl-names = "default", "state_uhs";
pinctrl-0 = <&sdh2_pins_0 &sdh2_pins_1 &sdh2_pins_2>;
pinctrl-1 = <&sdh2_fast_pins_0 &sdh2_fast_pins_1 &sdh2_fast_pins_2>;
bus-width = <8>;
non-removable;
mmc-ddr-1_8v;
mmc-hs200-1_8v;
};
&sdh0 {
pinctrl-names = "default";
pinctrl-0 = <&sdh0_pins_0 &sdh0_pins_1 &sdh0_pins_2>;
cd-gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
bus-width = <4>;
wp-inverted;
vmmc-supply = <&ldo14>;
vqmmc-supply = <&ldo6>;
};
&sdh1 {
pinctrl-names = "default", "state_uhs";
pinctrl-0 = <&sdh1_pins_0 &sdh1_pins_1 &sdh1_pins_2>;
pinctrl-1 = <&sdh1_fast_pins_0 &sdh1_fast_pins_1 &sdh1_pins_2>;
bus-width = <4>;
non-removable;
keep-power-in-suspend;
wakeup-source;
};
&pwm3 {
status = "okay";
};
@@ -0,0 +1,352 @@
// SPDX-License-Identifier: GPL-2.0-only
/dts-v1/;
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/clock/marvell,pxa1908.h>
#include <dt-bindings/power/marvell,pxa1908-power.h>
/ {
model = "Marvell Armada PXA1908";
compatible = "marvell,pxa1908";
#address-cells = <2>;
#size-cells = <2>;
interrupt-parent = <&gic>;
cpus {
#address-cells = <2>;
#size-cells = <0>;
cpu0: cpu@0 {
device_type = "cpu";
compatible = "arm,cortex-a53";
reg = <0 0>;
enable-method = "psci";
};
cpu1: cpu@1 {
device_type = "cpu";
compatible = "arm,cortex-a53";
reg = <0 1>;
enable-method = "psci";
};
cpu2: cpu@2 {
device_type = "cpu";
compatible = "arm,cortex-a53";
reg = <0 2>;
enable-method = "psci";
};
cpu3: cpu@3 {
device_type = "cpu";
compatible = "arm,cortex-a53";
reg = <0 3>;
enable-method = "psci";
};
};
pmu {
compatible = "arm,cortex-a53-pmu";
interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>;
interrupt-affinity = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>;
};
psci {
compatible = "arm,psci-0.2", "arm,psci";
method = "smc";
cpu_off = <0x85000001>;
cpu_on = <0x85000002>;
};
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
ramoops@8100000 {
compatible = "ramoops";
reg = <0 0x8100000 0 0x40000>;
record-size = <0x8000>;
console-size = <0x20000>;
max-reason = <5>;
};
};
timer {
compatible = "arm,armv8-timer";
interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
<GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
<GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
<GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>;
};
soc {
compatible = "simple-bus";
#address-cells = <2>;
#size-cells = <2>;
ranges;
smmu: iommu@c0010000 {
compatible = "arm,mmu-400";
reg = <0 0xc0010000 0 0x10000>;
#global-interrupts = <1>;
#iommu-cells = <1>;
interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>;
power-domains = <&apmu PXA1908_POWER_DOMAIN_VPU>;
status = "disabled";
};
gic: interrupt-controller@d1df9000 {
compatible = "arm,gic-400";
reg = <0 0xd1df9000 0 0x1000>,
<0 0xd1dfa000 0 0x2000>,
/* The subsequent registers are guesses. */
<0 0xd1dfc000 0 0x2000>,
<0 0xd1dfe000 0 0x2000>;
interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>;
interrupt-controller;
#interrupt-cells = <3>;
};
apb@d4000000 {
compatible = "simple-bus";
reg = <0 0xd4000000 0 0x200000>;
#address-cells = <1>;
#size-cells = <1>;
ranges = <0 0 0xd4000000 0x200000>;
pdma: dma-controller@0 {
compatible = "marvell,pdma-1.0";
reg = <0 0x10000>;
interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>;
dma-channels = <30>;
#dma-cells = <2>;
};
twsi1: i2c@10800 {
compatible = "mrvl,mmp-twsi";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x10800 0x64>;
interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&apbc PXA1908_CLK_TWSI1>;
mrvl,i2c-fast-mode;
status = "disabled";
};
twsi0: i2c@11000 {
compatible = "mrvl,mmp-twsi";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x11000 0x64>;
interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&apbc PXA1908_CLK_TWSI0>;
mrvl,i2c-fast-mode;
status = "disabled";
};
twsi3: i2c@13800 {
compatible = "mrvl,mmp-twsi";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x13800 0x64>;
interrupts = <GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&apbc PXA1908_CLK_TWSI3>;
mrvl,i2c-fast-mode;
status = "disabled";
};
apbc: clock-controller@15000 {
compatible = "marvell,pxa1908-apbc";
reg = <0x15000 0x1000>;
#clock-cells = <1>;
};
uart0: serial@17000 {
compatible = "mrvl,mmp-uart", "intel,xscale-uart";
reg = <0x17000 0x1000>;
interrupts = <GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&apbc PXA1908_CLK_UART0>;
reg-shift = <2>;
};
uart1: serial@18000 {
compatible = "mrvl,mmp-uart", "intel,xscale-uart";
reg = <0x18000 0x1000>;
interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&apbc PXA1908_CLK_UART1>;
reg-shift = <2>;
};
gpio: gpio@19000 {
compatible = "marvell,mmp-gpio";
reg = <0x19000 0x800>;
#address-cells = <1>;
#size-cells = <1>;
gpio-controller;
#gpio-cells = <2>;
clocks = <&apbc PXA1908_CLK_GPIO>;
interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "gpio_mux";
interrupt-controller;
#interrupt-cells = <2>;
ranges = <0 0x19000 0x800>;
gpio@0 {
reg = <0x0 0x4>;
};
gpio@4 {
reg = <0x4 0x4>;
};
gpio@8 {
reg = <0x8 0x4>;
};
gpio@100 {
reg = <0x100 0x4>;
};
};
pwm0: pwm@1a000 {
compatible = "marvell,pxa250-pwm";
reg = <0x1a000 0x10>;
clocks = <&apbc PXA1908_CLK_PWM0>;
#pwm-cells = <1>;
status = "disabled";
};
pwm1: pwm@1a400 {
compatible = "marvell,pxa250-pwm";
reg = <0x1a400 0x10>;
clocks = <&apbc PXA1908_CLK_PWM1>;
#pwm-cells = <1>;
status = "disabled";
};
pwm2: pwm@1a800 {
compatible = "marvell,pxa250-pwm";
reg = <0x1a800 0x10>;
clocks = <&apbc PXA1908_CLK_PWM2>;
#pwm-cells = <1>;
status = "disabled";
};
pwm3: pwm@1ac00 {
compatible = "marvell,pxa250-pwm";
reg = <0x1ac00 0x10>;
clocks = <&apbc PXA1908_CLK_PWM3>;
#pwm-cells = <1>;
status = "disabled";
};
pmx: pinmux@1e000 {
compatible = "marvell,pxa1908-padconf", "pinconf-single";
reg = <0x1e000 0x330>;
#pinctrl-cells = <1>;
pinctrl-single,register-width = <32>;
pinctrl-single,function-mask = <7>;
range: gpio-range {
#pinctrl-single,gpio-range-cells = <3>;
};
};
uart2: serial@36000 {
compatible = "mrvl,mmp-uart", "intel,xscale-uart";
reg = <0x36000 0x1000>;
interrupts = <GIC_SPI 59 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&apbcp PXA1908_CLK_UART2>;
reg-shift = <2>;
};
twsi2: i2c@37000 {
compatible = "mrvl,mmp-twsi";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x37000 0x64>;
interrupts = <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&apbcp PXA1908_CLK_TWSI2>;
mrvl,i2c-fast-mode;
status = "disabled";
};
apbcp: clock-controller@3b000 {
compatible = "marvell,pxa1908-apbcp";
reg = <0x3b000 0x1000>;
#clock-cells = <1>;
};
mpmu: clock-controller@50000 {
compatible = "marvell,pxa1908-mpmu";
reg = <0x50000 0x1000>;
#clock-cells = <1>;
};
};
axi@d4200000 {
compatible = "simple-bus";
reg = <0 0xd4200000 0 0x200000>;
#address-cells = <1>;
#size-cells = <1>;
ranges = <0 0 0xd4200000 0x200000>;
usbphy: phy@7000 {
compatible = "marvell,pxa1928-usb-phy";
reg = <0x7000 0x200>;
clocks = <&apmu PXA1908_CLK_USB>;
#phy-cells = <0>;
};
usb: usb@8000 {
compatible = "chipidea,usb2";
reg = <0x8000 0x200>;
interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&apmu PXA1908_CLK_USB>;
phys = <&usbphy>;
phy-names = "usb-phy";
};
sdh0: mmc@80000 {
compatible = "mrvl,pxav3-mmc";
reg = <0x80000 0x120>;
interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&apmu PXA1908_CLK_SDH0>;
clock-names = "io";
mrvl,clk-delay-cycles = <31>;
};
sdh1: mmc@80800 {
compatible = "mrvl,pxav3-mmc";
reg = <0x80800 0x120>;
interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&apmu PXA1908_CLK_SDH1>;
clock-names = "io";
mrvl,clk-delay-cycles = <31>;
};
sdh2: mmc@81000 {
compatible = "mrvl,pxav3-mmc";
reg = <0x81000 0x120>;
interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&apmu PXA1908_CLK_SDH2>;
clock-names = "io";
mrvl,clk-delay-cycles = <31>;
};
apmu: clock-controller@82800 {
compatible = "marvell,pxa1908-apmu", "syscon";
reg = <0x82800 0x400>;
#clock-cells = <1>;
#power-domain-cells = <1>;
};
};
};
};