Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/arch/arm/boot/dts/marvell/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 11 kB image not shown  

Quelle  armada-385-turris-omnia.dts   Sprache: unbekannt

 
// SPDX-License-Identifier: (GPL-2.0 OR MIT)
/*
 * Device Tree file for the Turris Omnia
 *
 * Copyright (C) 2016 Uwe Kleine-König <uwe@kleine-koenig.org>
 * Copyright (C) 2016 Tomas Hlavacek <tmshlvkc@gmail.com>
 *
 * Schematic available at https://www.turris.cz/doc/_media/rtrom01-schema.pdf
 */

/dts-v1/;

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/leds/common.h>
#include "armada-385.dtsi"

/ {
 model = "Turris Omnia";
 compatible = "cznic,turris-omnia", "marvell,armada385", "marvell,armada380";

 chosen {
  stdout-path = &uart0;
 };

 aliases {
  ethernet0 = ð0;
  ethernet1 = ð1;
  ethernet2 = ð2;
 };

 memory {
  device_type = "memory";
  reg = <0x00000000 0x40000000>; /* 1024 MB */
 };

 soc {
  ranges = <MBUS_ID(0xf0, 0x01) 0 0xf1000000 0x100000
     MBUS_ID(0x01, 0x1d) 0 0xfff00000 0x100000
     MBUS_ID(0x09, 0x19) 0 0xf1100000 0x10000
     MBUS_ID(0x09, 0x15) 0 0xf1110000 0x10000
     MBUS_ID(0x0c, 0x04) 0 0xf1200000 0x100000>;

  internal-regs {

   /* USB part of the PCIe2/USB 2.0 port */
   usb@58000 {
    status = "okay";
   };

   sata@a8000 {
    status = "okay";
   };

   sdhci@d8000 {
    pinctrl-names = "default";
    pinctrl-0 = <&sdhci_pins>;
    status = "okay";

    bus-width = <8>;
    no-1-8-v;
    non-removable;
   };

   usb3@f0000 {
    status = "okay";
   };

   usb3@f8000 {
    status = "okay";
   };
  };

  pcie {
   status = "okay";

   pcie@1,0 {
    /* Port 0, Lane 0 */
    status = "okay";
    slot-power-limit-milliwatt = <10000>;
   };

   pcie@2,0 {
    /* Port 1, Lane 0 */
    status = "okay";
    slot-power-limit-milliwatt = <10000>;
   };

   pcie@3,0 {
    /* Port 2, Lane 0 */
    status = "okay";
    slot-power-limit-milliwatt = <10000>;
   };
  };
 };

 sfp: sfp {
  compatible = "sff,sfp";
  i2c-bus = <&sfp_i2c>;
  tx-fault-gpios = <&pcawan 0 GPIO_ACTIVE_HIGH>;
  tx-disable-gpios = <&pcawan 1 GPIO_ACTIVE_HIGH>;
  rate-select0-gpios = <&pcawan 2 GPIO_ACTIVE_HIGH>;
  los-gpios = <&pcawan 3 GPIO_ACTIVE_HIGH>;
  mod-def0-gpios = <&pcawan 4 GPIO_ACTIVE_LOW>;
  maximum-power-milliwatt = <3000>;

  /*
   * For now this has to be enabled at boot time by U-Boot when
   * a SFP module is present. Read more in the comment in the
   * eth2 node below.
   */
  status = "disabled";
 };

 gpio-keys {
  compatible = "gpio-keys";

  front-button {
   label = "Front Button";
   linux,code = <KEY_VENDOR>;
   linux,can-disable;
   gpios = <&mcu 0 12 GPIO_ACTIVE_HIGH>;
   /* debouncing is done by the microcontroller */
   debounce-interval = <0>;
  };
 };

 sound {
  compatible = "simple-audio-card";
  simple-audio-card,name = "SPDIF";
  simple-audio-card,format = "i2s";

  simple-audio-card,cpu {
   sound-dai = <&audio_controller 1>;
  };

  simple-audio-card,codec {
   sound-dai = <&spdif_out>;
  };
 };

 spdif_out: spdif-out {
  #sound-dai-cells = <0>;
  compatible = "linux,spdif-dit";
 };
};

&audio_controller {
 /* Pin header U16, GPIO51 in SPDIFO mode */
 pinctrl-0 = <&spdif_pins>;
 pinctrl-names = "default";
 spdif-mode;
 status = "okay";
};

&bm {
 status = "okay";
};

&bm_bppi {
 status = "okay";
};

/* Connected to 88E6176 switch, port 6 */
ð0 {
 pinctrl-names = "default";
 pinctrl-0 = <&ge0_rgmii_pins>;
 status = "okay";
 phy-mode = "rgmii";
 buffer-manager = <&bm>;
 bm,pool-long = <0>;
 bm,pool-short = <3>;

 fixed-link {
  speed = <1000>;
  full-duplex;
 };
};

/* Connected to 88E6176 switch, port 5 */
ð1 {
 pinctrl-names = "default";
 pinctrl-0 = <&ge1_rgmii_pins>;
 status = "okay";
 phy-mode = "rgmii";
 buffer-manager = <&bm>;
 bm,pool-long = <1>;
 bm,pool-short = <3>;

 fixed-link {
  speed = <1000>;
  full-duplex;
 };
};

/* WAN port */
ð2 {
 /*
  * eth2 is connected via a multiplexor to both the SFP cage and to
  * ethernet-phy@1. The multiplexor switches the signal to SFP cage when
  * a SFP module is present, as determined by the mode-def0 GPIO.
  *
  * Until kernel supports this configuration properly, in case SFP module
  * is present, U-Boot has to enable the sfp node above, remove phy
  * handle and add managed = "in-band-status" property.
  */
 status = "okay";
 phy-mode = "sgmii";
 phy-handle = <&phy1>;
 phys = <&comphy5 2>;
 sfp = <&sfp>;
 buffer-manager = <&bm>;
 bm,pool-long = <2>;
 bm,pool-short = <3>;
 label = "wan";
};

&i2c0 {
 pinctrl-names = "default";
 pinctrl-0 = <&i2c0_pins>;
 status = "okay";

 i2cmux@70 {
  compatible = "nxp,pca9547";
  #address-cells = <1>;
  #size-cells = <0>;
  reg = <0x70>;

  i2c@0 {
   #address-cells = <1>;
   #size-cells = <0>;
   reg = <0>;

   mcu: system-controller@2a {
    compatible = "cznic,turris-omnia-mcu";
    reg = <0x2a>;

    pinctrl-names = "default";
    pinctrl-0 = <&mcu_pins>;

    interrupt-parent = <&gpio1>;
    interrupts = <11 IRQ_TYPE_NONE>;

    gpio-controller;
    #gpio-cells = <3>;

    interrupt-controller;
    #interrupt-cells = <2>;
   };

   led-controller@2b {
    compatible = "cznic,turris-omnia-leds";
    reg = <0x2b>;
    interrupts-extended = <&mcu 11 IRQ_TYPE_NONE>;
    #address-cells = <1>;
    #size-cells = <0>;
    status = "okay";

    /*
     * LEDs are controlled by MCU (STM32F0) at
     * address 0x2b.
     *
     * LED functions are not stable yet:
     * - there are 3 LEDs connected via MCU to PCIe
     *   ports. One of these ports supports mSATA.
     *   There is no mSATA nor PCIe function.
     *   For now we use LED_FUNCTION_WLAN, since
     *   in most cases users have wifi cards in
     *   these slots
     * - there are 2 LEDs dedicated for user: A and
     *   B. Again there is no such function defined.
     *   For now we use LED_FUNCTION_INDICATOR
     */

    multi-led@0 {
     reg = <0x0>;
     color = <LED_COLOR_ID_RGB>;
     function = LED_FUNCTION_INDICATOR;
     function-enumerator = <2>;
    };

    multi-led@1 {
     reg = <0x1>;
     color = <LED_COLOR_ID_RGB>;
     function = LED_FUNCTION_INDICATOR;
     function-enumerator = <1>;
    };

    multi-led@2 {
     reg = <0x2>;
     color = <LED_COLOR_ID_RGB>;
     function = LED_FUNCTION_WLAN;
     function-enumerator = <3>;
    };

    multi-led@3 {
     reg = <0x3>;
     color = <LED_COLOR_ID_RGB>;
     function = LED_FUNCTION_WLAN;
     function-enumerator = <2>;
    };

    multi-led@4 {
     reg = <0x4>;
     color = <LED_COLOR_ID_RGB>;
     function = LED_FUNCTION_WLAN;
     function-enumerator = <1>;
    };

    multi-led@5 {
     reg = <0x5>;
     color = <LED_COLOR_ID_RGB>;
     function = LED_FUNCTION_WAN;
    };

    multi-led@6 {
     reg = <0x6>;
     color = <LED_COLOR_ID_RGB>;
     function = LED_FUNCTION_LAN;
     function-enumerator = <4>;
    };

    multi-led@7 {
     reg = <0x7>;
     color = <LED_COLOR_ID_RGB>;
     function = LED_FUNCTION_LAN;
     function-enumerator = <3>;
    };

    multi-led@8 {
     reg = <0x8>;
     color = <LED_COLOR_ID_RGB>;
     function = LED_FUNCTION_LAN;
     function-enumerator = <2>;
    };

    multi-led@9 {
     reg = <0x9>;
     color = <LED_COLOR_ID_RGB>;
     function = LED_FUNCTION_LAN;
     function-enumerator = <1>;
    };

    multi-led@a {
     reg = <0xa>;
     color = <LED_COLOR_ID_RGB>;
     function = LED_FUNCTION_LAN;
     function-enumerator = <0>;
    };

    multi-led@b {
     reg = <0xb>;
     color = <LED_COLOR_ID_RGB>;
     function = LED_FUNCTION_POWER;
    };
   };

   eeprom@54 {
    compatible = "atmel,24c64";
    reg = <0x54>;

    /* The EEPROM contains data for bootloader.
     * Contents:
     *  struct omnia_eeprom {
     *   u32 magic; (=0x0341a034 in LE)
     *  u32 ramsize; (in GiB)
     *   char regdomain[4];
     *   u32 crc32;
     *  };
     */
   };
  };

  i2c@1 {
   #address-cells = <1>;
   #size-cells = <0>;
   reg = <1>;

   /* routed to PCIe0/mSATA connector (CN7A) */
  };

  i2c@2 {
   #address-cells = <1>;
   #size-cells = <0>;
   reg = <2>;

   /* routed to PCIe1/USB2 connector (CN61A) */
  };

  i2c@3 {
   #address-cells = <1>;
   #size-cells = <0>;
   reg = <3>;

   /* routed to PCIe2 connector (CN62A) */
  };

  sfp_i2c: i2c@4 {
   #address-cells = <1>;
   #size-cells = <0>;
   reg = <4>;

   /* routed to SFP+ */
  };

  i2c@5 {
   #address-cells = <1>;
   #size-cells = <0>;
   reg = <5>;

   /* ATSHA204A-MAHDA-T crypto module */
   crypto@64 {
    compatible = "atmel,atsha204a";
    reg = <0x64>;
   };
  };

  i2c@6 {
   #address-cells = <1>;
   #size-cells = <0>;
   reg = <6>;

   /* exposed on pin header */
  };

  i2c@7 {
   #address-cells = <1>;
   #size-cells = <0>;
   reg = <7>;

   pcawan: gpio@71 {
    /*
     * GPIO expander for SFP+ signals and
     * and phy irq
     */
    compatible = "nxp,pca9538";
    reg = <0x71>;

    pinctrl-names = "default";
    pinctrl-0 = <&pcawan_pins>;

    interrupt-parent = <&gpio1>;
    interrupts = <14 IRQ_TYPE_LEVEL_LOW>;

    gpio-controller;
    #gpio-cells = <2>;
   };
  };
 };
};

&mdio {
 pinctrl-names = "default";
 pinctrl-0 = <&mdio_pins>;
 status = "okay";

 phy1: ethernet-phy@1 {
  compatible = "ethernet-phy-ieee802.3-c22";
  reg = <1>;
  marvell,reg-init = <3 18 0 0x4985>,
       <3 16 0xfff0 0x0001>;

  /* irq is connected to &pcawan pin 7 */
 };

 /* Switch MV88E6176 at address 0x10 */
 ethernet-switch@10 {
  pinctrl-names = "default";
  pinctrl-0 = <&swint_pins>;
  compatible = "marvell,mv88e6085";

  dsa,member = <0 0>;
  reg = <0x10>;

  interrupt-parent = <&gpio1>;
  interrupts = <13 IRQ_TYPE_LEVEL_LOW>;

  ethernet-ports {
   #address-cells = <1>;
   #size-cells = <0>;

   ethernet-port@0 {
    reg = <0>;
    label = "lan0";
   };

   ethernet-port@1 {
    reg = <1>;
    label = "lan1";
   };

   ethernet-port@2 {
    reg = <2>;
    label = "lan2";
   };

   ethernet-port@3 {
    reg = <3>;
    label = "lan3";
   };

   ethernet-port@4 {
    reg = <4>;
    label = "lan4";
   };

   ethernet-port@5 {
    reg = <5>;
    ethernet = <ð1>;
    phy-mode = "rgmii-id";

    fixed-link {
     speed = <1000>;
     full-duplex;
    };
   };

   ethernet-port@6 {
    reg = <6>;
    ethernet = <ð0>;
    phy-mode = "rgmii-id";

    fixed-link {
     speed = <1000>;
     full-duplex;
    };
   };
  };
 };
};

&pinctrl {
 mcu_pins: mcu-pins {
  marvell,pins = "mpp43";
  marvell,function = "gpio";
 };

 pcawan_pins: pcawan-pins {
  marvell,pins = "mpp46";
  marvell,function = "gpio";
 };

 swint_pins: swint-pins {
  marvell,pins = "mpp45";
  marvell,function = "gpio";
 };

 spi0cs0_pins: spi0cs0-pins {
  marvell,pins = "mpp25";
  marvell,function = "spi0";
 };

 spi0cs2_pins: spi0cs2-pins {
  marvell,pins = "mpp26";
  marvell,function = "spi0";
 };
};

&spi0 {
 pinctrl-names = "default";
 pinctrl-0 = <&spi0_pins &spi0cs0_pins>;
 status = "okay";

 flash@0 {
  compatible = "spansion,s25fl164k", "jedec,spi-nor";
  #address-cells = <1>;
  #size-cells = <1>;
  reg = <0>;
  spi-max-frequency = <40000000>;

  partitions {
   compatible = "fixed-partitions";
   #address-cells = <1>;
   #size-cells = <1>;

   partition@0 {
    reg = <0x0 0x00100000>;
    label = "U-Boot";
   };

   partition@100000 {
    reg = <0x00100000 0x00700000>;
    label = "Rescue system";
   };
  };
 };

 /* MISO, MOSI, SCLK and CS2 are routed to pin header CN11 */
};

&uart0 {
 /* Pin header CN10 */
 pinctrl-names = "default";
 pinctrl-0 = <&uart0_pins>;
 status = "okay";
};

&uart1 {
 /* Pin header CN11 */
 pinctrl-names = "default";
 pinctrl-0 = <&uart1_pins>;
 status = "okay";
};

[ Dauer der Verarbeitung: 0.4 Sekunden  (vorverarbeitet)  ]