|  | // SPDX-License-Identifier: GPL-2.0 | 
|  | /* | 
|  | * Device Tree file for Cortina systems Gemini SoC | 
|  | */ | 
|  |  | 
|  | #include <dt-bindings/interrupt-controller/irq.h> | 
|  | #include <dt-bindings/clock/cortina,gemini-clock.h> | 
|  | #include <dt-bindings/reset/cortina,gemini-reset.h> | 
|  | #include <dt-bindings/gpio/gpio.h> | 
|  |  | 
|  | / { | 
|  | soc { | 
|  | #address-cells = <1>; | 
|  | #size-cells = <1>; | 
|  | ranges; | 
|  | compatible = "simple-bus"; | 
|  | interrupt-parent = <&intcon>; | 
|  |  | 
|  | flash: flash@30000000 { | 
|  | compatible = "cortina,gemini-flash", "cfi-flash"; | 
|  | syscon = <&syscon>; | 
|  | pinctrl-names = "default"; | 
|  | pinctrl-0 = <&pflash_default_pins>; | 
|  | bank-width = <2>; | 
|  | status = "disabled"; | 
|  | }; | 
|  |  | 
|  | syscon: syscon@40000000 { | 
|  | compatible = "cortina,gemini-syscon", | 
|  | "syscon", "simple-mfd"; | 
|  | reg = <0x40000000 0x1000>; | 
|  | #clock-cells = <1>; | 
|  | #reset-cells = <1>; | 
|  |  | 
|  | syscon-reboot { | 
|  | compatible = "syscon-reboot"; | 
|  | regmap = <&syscon>; | 
|  | /* GLOBAL_RESET register */ | 
|  | offset = <0x0c>; | 
|  | /* RESET_GLOBAL | RESET_CPU1 */ | 
|  | mask = <0xC0000000>; | 
|  | }; | 
|  |  | 
|  | pinctrl { | 
|  | compatible = "cortina,gemini-pinctrl"; | 
|  | regmap = <&syscon>; | 
|  | /* Hog the DRAM pins */ | 
|  | pinctrl-names = "default"; | 
|  | pinctrl-0 = <&dram_default_pins>, <&system_default_pins>, | 
|  | <&vcontrol_default_pins>; | 
|  |  | 
|  | dram_default_pins: pinctrl-dram { | 
|  | mux { | 
|  | function = "dram"; | 
|  | groups = "dramgrp"; | 
|  | }; | 
|  | }; | 
|  | rtc_default_pins: pinctrl-rtc { | 
|  | mux { | 
|  | function = "rtc"; | 
|  | groups = "rtcgrp"; | 
|  | }; | 
|  | }; | 
|  | power_default_pins: pinctrl-power { | 
|  | mux { | 
|  | function = "power"; | 
|  | groups = "powergrp"; | 
|  | }; | 
|  | }; | 
|  | cir_default_pins: pinctrl-cir { | 
|  | mux { | 
|  | function = "cir"; | 
|  | groups = "cirgrp"; | 
|  | }; | 
|  | }; | 
|  | system_default_pins: pinctrl-system { | 
|  | mux { | 
|  | function = "system"; | 
|  | groups = "systemgrp"; | 
|  | }; | 
|  | }; | 
|  | vcontrol_default_pins: pinctrl-vcontrol { | 
|  | mux { | 
|  | function = "vcontrol"; | 
|  | groups = "vcontrolgrp"; | 
|  | }; | 
|  | }; | 
|  | ice_default_pins: pinctrl-ice { | 
|  | mux { | 
|  | function = "ice"; | 
|  | groups = "icegrp"; | 
|  | }; | 
|  | }; | 
|  | uart_default_pins: pinctrl-uart { | 
|  | mux { | 
|  | function = "uart"; | 
|  | groups = "uartrxtxgrp"; | 
|  | }; | 
|  | }; | 
|  | pflash_default_pins: pinctrl-pflash { | 
|  | mux { | 
|  | function = "pflash"; | 
|  | groups = "pflashgrp"; | 
|  | }; | 
|  | }; | 
|  | usb_default_pins: pinctrl-usb { | 
|  | mux { | 
|  | function = "usb"; | 
|  | groups = "usbgrp"; | 
|  | }; | 
|  | }; | 
|  | gmii_default_pins: pinctrl-gmii { | 
|  | /* | 
|  | * Only activate GMAC0 by default since | 
|  | * GMAC1 will overlap with 8 GPIO lines | 
|  | * gpio2a, gpio2b. Overlay groups with | 
|  | * "gmii_gmac0_grp", "gmii_gmac1_grp" for | 
|  | * both ethernet interfaces. | 
|  | */ | 
|  | mux { | 
|  | function = "gmii"; | 
|  | groups = "gmii_gmac0_grp"; | 
|  | }; | 
|  | }; | 
|  | pci_default_pins: pinctrl-pci { | 
|  | mux { | 
|  | function = "pci"; | 
|  | groups = "pcigrp"; | 
|  | }; | 
|  | }; | 
|  | sata_default_pins: pinctrl-sata { | 
|  | mux { | 
|  | function = "sata"; | 
|  | groups = "satagrp"; | 
|  | }; | 
|  | }; | 
|  | /* Activate both groups of pins for this state */ | 
|  | sata_and_ide_pins: pinctrl-sata-ide { | 
|  | mux0 { | 
|  | function = "sata"; | 
|  | groups = "satagrp"; | 
|  | }; | 
|  | mux1 { | 
|  | function = "ide"; | 
|  | groups = "idegrp"; | 
|  | }; | 
|  | }; | 
|  | tvc_default_pins: pinctrl-tvc { | 
|  | mux { | 
|  | function = "tvc"; | 
|  | groups = "tvcgrp"; | 
|  | }; | 
|  | }; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | watchdog@41000000 { | 
|  | compatible = "cortina,gemini-watchdog", "faraday,ftwdt010"; | 
|  | reg = <0x41000000 0x1000>; | 
|  | interrupts = <3 IRQ_TYPE_LEVEL_HIGH>; | 
|  | resets = <&syscon GEMINI_RESET_WDOG>; | 
|  | clocks = <&syscon GEMINI_CLK_APB>; | 
|  | clock-names = "PCLK"; | 
|  | }; | 
|  |  | 
|  | uart0: serial@42000000 { | 
|  | compatible = "ns16550a"; | 
|  | reg = <0x42000000 0x100>; | 
|  | resets = <&syscon GEMINI_RESET_UART>; | 
|  | clocks = <&syscon GEMINI_CLK_UART>; | 
|  | interrupts = <18 IRQ_TYPE_LEVEL_HIGH>; | 
|  | pinctrl-names = "default"; | 
|  | pinctrl-0 = <&uart_default_pins>; | 
|  | reg-shift = <2>; | 
|  | }; | 
|  |  | 
|  | timer@43000000 { | 
|  | compatible = "faraday,fttmr010"; | 
|  | reg = <0x43000000 0x1000>; | 
|  | interrupt-parent = <&intcon>; | 
|  | interrupts = <14 IRQ_TYPE_EDGE_FALLING>, /* Timer 1 */ | 
|  | <15 IRQ_TYPE_EDGE_FALLING>, /* Timer 2 */ | 
|  | <16 IRQ_TYPE_EDGE_FALLING>; /* Timer 3 */ | 
|  | resets = <&syscon GEMINI_RESET_TIMER>; | 
|  | /* APB clock or RTC clock */ | 
|  | clocks = <&syscon GEMINI_CLK_APB>, <&syscon GEMINI_CLK_RTC>; | 
|  | clock-names = "PCLK", "EXTCLK"; | 
|  | syscon = <&syscon>; | 
|  | }; | 
|  |  | 
|  | rtc@45000000 { | 
|  | compatible = "cortina,gemini-rtc", "faraday,ftrtc010"; | 
|  | reg = <0x45000000 0x100>; | 
|  | interrupts = <17 IRQ_TYPE_LEVEL_HIGH>; | 
|  | resets = <&syscon GEMINI_RESET_RTC>; | 
|  | clocks = <&syscon GEMINI_CLK_APB>, <&syscon GEMINI_CLK_RTC>; | 
|  | clock-names = "PCLK", "EXTCLK"; | 
|  | pinctrl-names = "default"; | 
|  | pinctrl-0 = <&rtc_default_pins>; | 
|  | }; | 
|  |  | 
|  | sata: sata@46000000 { | 
|  | compatible = "cortina,gemini-sata-bridge"; | 
|  | reg = <0x46000000 0x100>; | 
|  | resets = <&syscon GEMINI_RESET_SATA0>, | 
|  | <&syscon GEMINI_RESET_SATA1>; | 
|  | reset-names = "sata0", "sata1"; | 
|  | clocks = <&syscon GEMINI_CLK_GATE_SATA0>, | 
|  | <&syscon GEMINI_CLK_GATE_SATA1>; | 
|  | clock-names = "SATA0_PCLK", "SATA1_PCLK"; | 
|  | /* | 
|  | * This defines the special "ide" state that needs | 
|  | * to be explicitly enabled to enable the IDE pins, | 
|  | * as these pins are normally used for other things. | 
|  | */ | 
|  | pinctrl-names = "default", "ide"; | 
|  | pinctrl-0 = <&sata_default_pins>; | 
|  | pinctrl-1 = <&sata_and_ide_pins>; | 
|  | syscon = <&syscon>; | 
|  | status = "disabled"; | 
|  | }; | 
|  |  | 
|  | intcon: interrupt-controller@48000000 { | 
|  | compatible = "faraday,ftintc010"; | 
|  | reg = <0x48000000 0x1000>; | 
|  | resets = <&syscon GEMINI_RESET_INTCON0>; | 
|  | interrupt-controller; | 
|  | #interrupt-cells = <2>; | 
|  | }; | 
|  |  | 
|  | power-controller@4b000000 { | 
|  | compatible = "cortina,gemini-power-controller"; | 
|  | reg = <0x4b000000 0x100>; | 
|  | interrupts = <26 IRQ_TYPE_EDGE_RISING>; | 
|  | pinctrl-names = "default"; | 
|  | pinctrl-0 = <&power_default_pins>; | 
|  | }; | 
|  |  | 
|  | gpio0: gpio@4d000000 { | 
|  | compatible = "cortina,gemini-gpio", "faraday,ftgpio010"; | 
|  | reg = <0x4d000000 0x100>; | 
|  | interrupts = <22 IRQ_TYPE_LEVEL_HIGH>; | 
|  | resets = <&syscon GEMINI_RESET_GPIO0>; | 
|  | clocks = <&syscon GEMINI_CLK_APB>; | 
|  | gpio-controller; | 
|  | #gpio-cells = <2>; | 
|  | interrupt-controller; | 
|  | #interrupt-cells = <2>; | 
|  | }; | 
|  |  | 
|  | gpio1: gpio@4e000000 { | 
|  | compatible = "cortina,gemini-gpio", "faraday,ftgpio010"; | 
|  | reg = <0x4e000000 0x100>; | 
|  | interrupts = <23 IRQ_TYPE_LEVEL_HIGH>; | 
|  | resets = <&syscon GEMINI_RESET_GPIO1>; | 
|  | clocks = <&syscon GEMINI_CLK_APB>; | 
|  | gpio-controller; | 
|  | #gpio-cells = <2>; | 
|  | interrupt-controller; | 
|  | #interrupt-cells = <2>; | 
|  | }; | 
|  |  | 
|  | gpio2: gpio@4f000000 { | 
|  | compatible = "cortina,gemini-gpio", "faraday,ftgpio010"; | 
|  | reg = <0x4f000000 0x100>; | 
|  | interrupts = <24 IRQ_TYPE_LEVEL_HIGH>; | 
|  | resets = <&syscon GEMINI_RESET_GPIO2>; | 
|  | clocks = <&syscon GEMINI_CLK_APB>; | 
|  | gpio-controller; | 
|  | #gpio-cells = <2>; | 
|  | interrupt-controller; | 
|  | #interrupt-cells = <2>; | 
|  | }; | 
|  |  | 
|  | pci@50000000 { | 
|  | compatible = "cortina,gemini-pci", "faraday,ftpci100"; | 
|  | /* | 
|  | * The first 256 bytes in the IO range is actually used | 
|  | * to configure the host bridge. | 
|  | */ | 
|  | reg = <0x50000000 0x100>; | 
|  | resets = <&syscon GEMINI_RESET_PCI>; | 
|  | clocks = <&syscon GEMINI_CLK_GATE_PCI>, <&syscon GEMINI_CLK_PCI>; | 
|  | clock-names = "PCLK", "PCICLK"; | 
|  | pinctrl-names = "default"; | 
|  | pinctrl-0 = <&pci_default_pins>; | 
|  | device_type = "pci"; | 
|  | #address-cells = <3>; | 
|  | #size-cells = <2>; | 
|  | status = "disabled"; | 
|  |  | 
|  | #interrupt-cells = <1>; | 
|  | interrupt-map-mask = <0xf800 0 0 7>; | 
|  | interrupt-map = | 
|  | <0x4800 0 0 1 &pci_intc 0>, /* Slot 9 */ | 
|  | <0x4800 0 0 2 &pci_intc 1>, | 
|  | <0x4800 0 0 3 &pci_intc 2>, | 
|  | <0x4800 0 0 4 &pci_intc 3>, | 
|  | <0x5000 0 0 1 &pci_intc 1>, /* Slot 10 */ | 
|  | <0x5000 0 0 2 &pci_intc 2>, | 
|  | <0x5000 0 0 3 &pci_intc 3>, | 
|  | <0x5000 0 0 4 &pci_intc 0>, | 
|  | <0x5800 0 0 1 &pci_intc 2>, /* Slot 11 */ | 
|  | <0x5800 0 0 2 &pci_intc 3>, | 
|  | <0x5800 0 0 3 &pci_intc 0>, | 
|  | <0x5800 0 0 4 &pci_intc 1>, | 
|  | <0x6000 0 0 1 &pci_intc 3>, /* Slot 12 */ | 
|  | <0x6000 0 0 2 &pci_intc 0>, | 
|  | <0x6000 0 0 3 &pci_intc 1>, | 
|  | <0x6000 0 0 4 &pci_intc 2>; | 
|  |  | 
|  | bus-range = <0x00 0xff>; | 
|  | /* PCI ranges mappings */ | 
|  | ranges = | 
|  | /* 1MiB I/O space 0x50000000-0x500fffff */ | 
|  | <0x01000000 0 0          0x50000000 0 0x00100000>, | 
|  | /* 128MiB non-prefetchable memory 0x58000000-0x5fffffff */ | 
|  | <0x02000000 0 0x58000000 0x58000000 0 0x08000000>; | 
|  |  | 
|  | /* DMA ranges */ | 
|  | dma-ranges = | 
|  | /* 128MiB at 0x00000000-0x07ffffff */ | 
|  | <0x02000000 0 0x00000000 0x00000000 0 0x08000000>, | 
|  | /* 64MiB at 0x00000000-0x03ffffff */ | 
|  | <0x02000000 0 0x00000000 0x00000000 0 0x04000000>, | 
|  | /* 64MiB at 0x00000000-0x03ffffff */ | 
|  | <0x02000000 0 0x00000000 0x00000000 0 0x04000000>; | 
|  |  | 
|  | /* | 
|  | * This PCI host bridge variant has a cascaded interrupt | 
|  | * controller embedded in the host bridge. | 
|  | */ | 
|  | pci_intc: interrupt-controller { | 
|  | interrupt-parent = <&intcon>; | 
|  | interrupts = <8 IRQ_TYPE_LEVEL_HIGH>; | 
|  | interrupt-controller; | 
|  | #address-cells = <0>; | 
|  | #interrupt-cells = <1>; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | ethernet: ethernet@60000000 { | 
|  | compatible = "cortina,gemini-ethernet"; | 
|  | reg = <0x60000000 0x4000>, /* Global registers, queue */ | 
|  | <0x60004000 0x2000>, /* V-bit */ | 
|  | <0x60006000 0x2000>; /* A-bit */ | 
|  | pinctrl-names = "default"; | 
|  | pinctrl-0 = <&gmii_default_pins>; | 
|  | status = "disabled"; | 
|  | #address-cells = <1>; | 
|  | #size-cells = <1>; | 
|  | ranges; | 
|  |  | 
|  | gmac0: ethernet-port@0 { | 
|  | compatible = "cortina,gemini-ethernet-port"; | 
|  | reg = <0x60008000 0x2000>, /* Port 0 DMA/TOE */ | 
|  | <0x6000a000 0x2000>; /* Port 0 GMAC */ | 
|  | interrupt-parent = <&intcon>; | 
|  | interrupts = <1 IRQ_TYPE_LEVEL_HIGH>; | 
|  | resets = <&syscon GEMINI_RESET_GMAC0>; | 
|  | clocks = <&syscon GEMINI_CLK_GATE_GMAC0>; | 
|  | clock-names = "PCLK"; | 
|  | }; | 
|  |  | 
|  | gmac1: ethernet-port@1 { | 
|  | compatible = "cortina,gemini-ethernet-port"; | 
|  | reg = <0x6000c000 0x2000>, /* Port 1 DMA/TOE */ | 
|  | <0x6000e000 0x2000>; /* Port 1 GMAC */ | 
|  | interrupt-parent = <&intcon>; | 
|  | interrupts = <2 IRQ_TYPE_LEVEL_HIGH>; | 
|  | resets = <&syscon GEMINI_RESET_GMAC1>; | 
|  | clocks = <&syscon GEMINI_CLK_GATE_GMAC1>; | 
|  | clock-names = "PCLK"; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | crypto: crypto@62000000 { | 
|  | compatible = "cortina,sl3516-crypto"; | 
|  | reg = <0x62000000 0x10000>; | 
|  | interrupts = <7 IRQ_TYPE_EDGE_RISING>; | 
|  | resets = <&syscon GEMINI_RESET_SECURITY>; | 
|  | clocks = <&syscon GEMINI_CLK_GATE_SECURITY>; | 
|  | }; | 
|  |  | 
|  | ide0: ide@63000000 { | 
|  | compatible = "cortina,gemini-pata", "faraday,ftide010"; | 
|  | reg = <0x63000000 0x1000>; | 
|  | interrupts = <4 IRQ_TYPE_EDGE_RISING>; | 
|  | resets = <&syscon GEMINI_RESET_IDE>; | 
|  | clocks = <&syscon GEMINI_CLK_GATE_IDE>; | 
|  | clock-names = "PCLK"; | 
|  | sata = <&sata>; | 
|  | status = "disabled"; | 
|  | #address-cells = <1>; | 
|  | #size-cells = <0>; | 
|  | }; | 
|  |  | 
|  | ide1: ide@63400000 { | 
|  | compatible = "cortina,gemini-pata", "faraday,ftide010"; | 
|  | reg = <0x63400000 0x1000>; | 
|  | interrupts = <5 IRQ_TYPE_EDGE_RISING>; | 
|  | resets = <&syscon GEMINI_RESET_IDE>; | 
|  | clocks = <&syscon GEMINI_CLK_GATE_IDE>; | 
|  | clock-names = "PCLK"; | 
|  | sata = <&sata>; | 
|  | status = "disabled"; | 
|  | #address-cells = <1>; | 
|  | #size-cells = <0>; | 
|  | }; | 
|  |  | 
|  | dma-controller@67000000 { | 
|  | compatible = "faraday,ftdma020", "arm,pl080", "arm,primecell"; | 
|  | /* Faraday Technology FTDMAC020 variant */ | 
|  | arm,primecell-periphid = <0x0003b080>; | 
|  | reg = <0x67000000 0x1000>; | 
|  | interrupts = <9 IRQ_TYPE_EDGE_RISING>; | 
|  | resets = <&syscon GEMINI_RESET_DMAC>; | 
|  | clocks = <&syscon GEMINI_CLK_AHB>; | 
|  | clock-names = "apb_pclk"; | 
|  | /* Bus interface AHB1 (AHB0) is totally tilted */ | 
|  | lli-bus-interface-ahb2; | 
|  | mem-bus-interface-ahb2; | 
|  | memcpy-burst-size = <256>; | 
|  | memcpy-bus-width = <32>; | 
|  | #dma-cells = <2>; | 
|  | }; | 
|  |  | 
|  | display-controller@6a000000 { | 
|  | compatible = "cortina,gemini-tvc", "faraday,tve200"; | 
|  | reg = <0x6a000000 0x1000>; | 
|  | interrupts = <13 IRQ_TYPE_EDGE_RISING>; | 
|  | resets = <&syscon GEMINI_RESET_TVC>; | 
|  | clocks = <&syscon GEMINI_CLK_GATE_TVC>, | 
|  | <&syscon GEMINI_CLK_TVC>; | 
|  | clock-names = "PCLK", "TVE"; | 
|  | pinctrl-names = "default"; | 
|  | pinctrl-0 = <&tvc_default_pins>; | 
|  | status = "disabled"; | 
|  | }; | 
|  |  | 
|  | usb0: usb@68000000 { | 
|  | compatible = "cortina,gemini-usb", "faraday,fotg200"; | 
|  | reg = <0x68000000 0x1000>; | 
|  | interrupts = <10 IRQ_TYPE_LEVEL_HIGH>; | 
|  | resets = <&syscon GEMINI_RESET_USB0>; | 
|  | clocks = <&syscon GEMINI_CLK_GATE_USB0>; | 
|  | clock-names = "PCLK"; | 
|  | /* | 
|  | * This will claim pins for USB0 and USB1 at the same | 
|  | * time as they are using some common pins. If you for | 
|  | * some reason have a system using USB1 at 96000000 but | 
|  | * NOT using USB0 at 68000000 you wll have to add the | 
|  | * usb_default_pins to the USB controller at 96000000 | 
|  | * in your .dts for the board. | 
|  | */ | 
|  | pinctrl-names = "default"; | 
|  | pinctrl-0 = <&usb_default_pins>; | 
|  | /* Default to host mode */ | 
|  | dr_mode = "host"; | 
|  | syscon = <&syscon>; | 
|  | status = "disabled"; | 
|  | }; | 
|  |  | 
|  | usb1: usb@69000000 { | 
|  | compatible = "cortina,gemini-usb", "faraday,fotg200"; | 
|  | reg = <0x69000000 0x1000>; | 
|  | interrupts = <11 IRQ_TYPE_LEVEL_HIGH>; | 
|  | resets = <&syscon GEMINI_RESET_USB1>; | 
|  | clocks = <&syscon GEMINI_CLK_GATE_USB1>; | 
|  | clock-names = "PCLK"; | 
|  | syscon = <&syscon>; | 
|  | status = "disabled"; | 
|  | }; | 
|  | }; | 
|  | }; |