1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Device Tree file for Cortina systems Gemini SoC 4 */ 5 6#include <dt-bindings/interrupt-controller/irq.h> 7#include <dt-bindings/clock/cortina,gemini-clock.h> 8#include <dt-bindings/reset/cortina,gemini-reset.h> 9#include <dt-bindings/gpio/gpio.h> 10 11/ { 12 soc { 13 #address-cells = <1>; 14 #size-cells = <1>; 15 ranges; 16 compatible = "simple-bus"; 17 interrupt-parent = <&intcon>; 18 19 flash@30000000 { 20 compatible = "cortina,gemini-flash", "cfi-flash"; 21 syscon = <&syscon>; 22 pinctrl-names = "default"; 23 pinctrl-0 = <&pflash_default_pins>; 24 bank-width = <2>; 25 #address-cells = <1>; 26 #size-cells = <1>; 27 status = "disabled"; 28 }; 29 30 syscon: syscon@40000000 { 31 compatible = "cortina,gemini-syscon", 32 "syscon", "simple-mfd"; 33 reg = <0x40000000 0x1000>; 34 #clock-cells = <1>; 35 #reset-cells = <1>; 36 37 syscon-reboot { 38 compatible = "syscon-reboot"; 39 regmap = <&syscon>; 40 /* GLOBAL_RESET register */ 41 offset = <0x0c>; 42 /* RESET_GLOBAL | RESET_CPU1 */ 43 mask = <0xC0000000>; 44 }; 45 46 pinctrl { 47 compatible = "cortina,gemini-pinctrl"; 48 regmap = <&syscon>; 49 /* Hog the DRAM pins */ 50 pinctrl-names = "default"; 51 pinctrl-0 = <&dram_default_pins>, <&system_default_pins>, 52 <&vcontrol_default_pins>; 53 54 dram_default_pins: pinctrl-dram { 55 mux { 56 function = "dram"; 57 groups = "dramgrp"; 58 }; 59 }; 60 rtc_default_pins: pinctrl-rtc { 61 mux { 62 function = "rtc"; 63 groups = "rtcgrp"; 64 }; 65 }; 66 power_default_pins: pinctrl-power { 67 mux { 68 function = "power"; 69 groups = "powergrp"; 70 }; 71 }; 72 cir_default_pins: pinctrl-cir { 73 mux { 74 function = "cir"; 75 groups = "cirgrp"; 76 }; 77 }; 78 system_default_pins: pinctrl-system { 79 mux { 80 function = "system"; 81 groups = "systemgrp"; 82 }; 83 }; 84 vcontrol_default_pins: pinctrl-vcontrol { 85 mux { 86 function = "vcontrol"; 87 groups = "vcontrolgrp"; 88 }; 89 }; 90 ice_default_pins: pinctrl-ice { 91 mux { 92 function = "ice"; 93 groups = "icegrp"; 94 }; 95 }; 96 uart_default_pins: pinctrl-uart { 97 mux { 98 function = "uart"; 99 groups = "uartrxtxgrp"; 100 }; 101 }; 102 pflash_default_pins: pinctrl-pflash { 103 mux { 104 function = "pflash"; 105 groups = "pflashgrp"; 106 }; 107 }; 108 usb_default_pins: pinctrl-usb { 109 mux { 110 function = "usb"; 111 groups = "usbgrp"; 112 }; 113 }; 114 gmii_default_pins: pinctrl-gmii { 115 /* 116 * Only activate GMAC0 by default since 117 * GMAC1 will overlap with 8 GPIO lines 118 * gpio2a, gpio2b. Overlay groups with 119 * "gmii_gmac0_grp", "gmii_gmac1_grp" for 120 * both ethernet interfaces. 121 */ 122 mux { 123 function = "gmii"; 124 groups = "gmii_gmac0_grp"; 125 }; 126 }; 127 pci_default_pins: pinctrl-pci { 128 mux { 129 function = "pci"; 130 groups = "pcigrp"; 131 }; 132 }; 133 sata_default_pins: pinctrl-sata { 134 mux { 135 function = "sata"; 136 groups = "satagrp"; 137 }; 138 }; 139 /* Activate both groups of pins for this state */ 140 sata_and_ide_pins: pinctrl-sata-ide { 141 mux0 { 142 function = "sata"; 143 groups = "satagrp"; 144 }; 145 mux1 { 146 function = "ide"; 147 groups = "idegrp"; 148 }; 149 }; 150 tvc_default_pins: pinctrl-tvc { 151 mux { 152 function = "tvc"; 153 groups = "tvcgrp"; 154 }; 155 }; 156 }; 157 }; 158 159 watchdog@41000000 { 160 compatible = "cortina,gemini-watchdog", "faraday,ftwdt010"; 161 reg = <0x41000000 0x1000>; 162 interrupts = <3 IRQ_TYPE_LEVEL_HIGH>; 163 resets = <&syscon GEMINI_RESET_WDOG>; 164 clocks = <&syscon GEMINI_CLK_APB>; 165 clock-names = "PCLK"; 166 }; 167 168 uart0: serial@42000000 { 169 compatible = "ns16550a"; 170 reg = <0x42000000 0x100>; 171 resets = <&syscon GEMINI_RESET_UART>; 172 clocks = <&syscon GEMINI_CLK_UART>; 173 interrupts = <18 IRQ_TYPE_LEVEL_HIGH>; 174 pinctrl-names = "default"; 175 pinctrl-0 = <&uart_default_pins>; 176 reg-shift = <2>; 177 }; 178 179 timer@43000000 { 180 compatible = "faraday,fttmr010"; 181 reg = <0x43000000 0x1000>; 182 interrupt-parent = <&intcon>; 183 interrupts = <14 IRQ_TYPE_EDGE_FALLING>, /* Timer 1 */ 184 <15 IRQ_TYPE_EDGE_FALLING>, /* Timer 2 */ 185 <16 IRQ_TYPE_EDGE_FALLING>; /* Timer 3 */ 186 resets = <&syscon GEMINI_RESET_TIMER>; 187 /* APB clock or RTC clock */ 188 clocks = <&syscon GEMINI_CLK_APB>, <&syscon GEMINI_CLK_RTC>; 189 clock-names = "PCLK", "EXTCLK"; 190 syscon = <&syscon>; 191 }; 192 193 rtc@45000000 { 194 compatible = "cortina,gemini-rtc", "faraday,ftrtc010"; 195 reg = <0x45000000 0x100>; 196 interrupts = <17 IRQ_TYPE_LEVEL_HIGH>; 197 resets = <&syscon GEMINI_RESET_RTC>; 198 clocks = <&syscon GEMINI_CLK_APB>, <&syscon GEMINI_CLK_RTC>; 199 clock-names = "PCLK", "EXTCLK"; 200 pinctrl-names = "default"; 201 pinctrl-0 = <&rtc_default_pins>; 202 }; 203 204 sata: sata@46000000 { 205 compatible = "cortina,gemini-sata-bridge"; 206 reg = <0x46000000 0x100>; 207 resets = <&syscon GEMINI_RESET_SATA0>, 208 <&syscon GEMINI_RESET_SATA1>; 209 reset-names = "sata0", "sata1"; 210 clocks = <&syscon GEMINI_CLK_GATE_SATA0>, 211 <&syscon GEMINI_CLK_GATE_SATA1>; 212 clock-names = "SATA0_PCLK", "SATA1_PCLK"; 213 /* 214 * This defines the special "ide" state that needs 215 * to be explicitly enabled to enable the IDE pins, 216 * as these pins are normally used for other things. 217 */ 218 pinctrl-names = "default", "ide"; 219 pinctrl-0 = <&sata_default_pins>; 220 pinctrl-1 = <&sata_and_ide_pins>; 221 syscon = <&syscon>; 222 status = "disabled"; 223 }; 224 225 intcon: interrupt-controller@48000000 { 226 compatible = "faraday,ftintc010"; 227 reg = <0x48000000 0x1000>; 228 resets = <&syscon GEMINI_RESET_INTCON0>; 229 interrupt-controller; 230 #interrupt-cells = <2>; 231 }; 232 233 power-controller@4b000000 { 234 compatible = "cortina,gemini-power-controller"; 235 reg = <0x4b000000 0x100>; 236 interrupts = <26 IRQ_TYPE_EDGE_RISING>; 237 pinctrl-names = "default"; 238 pinctrl-0 = <&power_default_pins>; 239 }; 240 241 gpio0: gpio@4d000000 { 242 compatible = "cortina,gemini-gpio", "faraday,ftgpio010"; 243 reg = <0x4d000000 0x100>; 244 interrupts = <22 IRQ_TYPE_LEVEL_HIGH>; 245 resets = <&syscon GEMINI_RESET_GPIO0>; 246 clocks = <&syscon GEMINI_CLK_APB>; 247 gpio-controller; 248 #gpio-cells = <2>; 249 interrupt-controller; 250 #interrupt-cells = <2>; 251 }; 252 253 gpio1: gpio@4e000000 { 254 compatible = "cortina,gemini-gpio", "faraday,ftgpio010"; 255 reg = <0x4e000000 0x100>; 256 interrupts = <23 IRQ_TYPE_LEVEL_HIGH>; 257 resets = <&syscon GEMINI_RESET_GPIO1>; 258 clocks = <&syscon GEMINI_CLK_APB>; 259 gpio-controller; 260 #gpio-cells = <2>; 261 interrupt-controller; 262 #interrupt-cells = <2>; 263 }; 264 265 gpio2: gpio@4f000000 { 266 compatible = "cortina,gemini-gpio", "faraday,ftgpio010"; 267 reg = <0x4f000000 0x100>; 268 interrupts = <24 IRQ_TYPE_LEVEL_HIGH>; 269 resets = <&syscon GEMINI_RESET_GPIO2>; 270 clocks = <&syscon GEMINI_CLK_APB>; 271 gpio-controller; 272 #gpio-cells = <2>; 273 interrupt-controller; 274 #interrupt-cells = <2>; 275 }; 276 277 pci@50000000 { 278 compatible = "cortina,gemini-pci", "faraday,ftpci100"; 279 /* 280 * The first 256 bytes in the IO range is actually used 281 * to configure the host bridge. 282 */ 283 reg = <0x50000000 0x100>; 284 resets = <&syscon GEMINI_RESET_PCI>; 285 clocks = <&syscon GEMINI_CLK_GATE_PCI>, <&syscon GEMINI_CLK_PCI>; 286 clock-names = "PCLK", "PCICLK"; 287 pinctrl-names = "default"; 288 pinctrl-0 = <&pci_default_pins>; 289 device_type = "pci"; 290 #address-cells = <3>; 291 #size-cells = <2>; 292 #interrupt-cells = <1>; 293 status = "disabled"; 294 295 bus-range = <0x00 0xff>; 296 /* PCI ranges mappings */ 297 ranges = 298 /* 1MiB I/O space 0x50000000-0x500fffff */ 299 <0x01000000 0 0 0x50000000 0 0x00100000>, 300 /* 128MiB non-prefetchable memory 0x58000000-0x5fffffff */ 301 <0x02000000 0 0x58000000 0x58000000 0 0x08000000>; 302 303 /* DMA ranges */ 304 dma-ranges = 305 /* 128MiB at 0x00000000-0x07ffffff */ 306 <0x02000000 0 0x00000000 0x00000000 0 0x08000000>, 307 /* 64MiB at 0x00000000-0x03ffffff */ 308 <0x02000000 0 0x00000000 0x00000000 0 0x04000000>, 309 /* 64MiB at 0x00000000-0x03ffffff */ 310 <0x02000000 0 0x00000000 0x00000000 0 0x04000000>; 311 312 /* 313 * This PCI host bridge variant has a cascaded interrupt 314 * controller embedded in the host bridge. 315 */ 316 pci_intc: interrupt-controller { 317 interrupt-parent = <&intcon>; 318 interrupts = <8 IRQ_TYPE_LEVEL_HIGH>; 319 interrupt-controller; 320 #address-cells = <0>; 321 #interrupt-cells = <1>; 322 }; 323 }; 324 325 ethernet@60000000 { 326 compatible = "cortina,gemini-ethernet"; 327 reg = <0x60000000 0x4000>, /* Global registers, queue */ 328 <0x60004000 0x2000>, /* V-bit */ 329 <0x60006000 0x2000>; /* A-bit */ 330 pinctrl-names = "default"; 331 pinctrl-0 = <&gmii_default_pins>; 332 status = "disabled"; 333 #address-cells = <1>; 334 #size-cells = <1>; 335 ranges; 336 337 gmac0: ethernet-port@0 { 338 compatible = "cortina,gemini-ethernet-port"; 339 reg = <0x60008000 0x2000>, /* Port 0 DMA/TOE */ 340 <0x6000a000 0x2000>; /* Port 0 GMAC */ 341 interrupt-parent = <&intcon>; 342 interrupts = <1 IRQ_TYPE_LEVEL_HIGH>; 343 resets = <&syscon GEMINI_RESET_GMAC0>; 344 clocks = <&syscon GEMINI_CLK_GATE_GMAC0>; 345 clock-names = "PCLK"; 346 }; 347 348 gmac1: ethernet-port@1 { 349 compatible = "cortina,gemini-ethernet-port"; 350 reg = <0x6000c000 0x2000>, /* Port 1 DMA/TOE */ 351 <0x6000e000 0x2000>; /* Port 1 GMAC */ 352 interrupt-parent = <&intcon>; 353 interrupts = <2 IRQ_TYPE_LEVEL_HIGH>; 354 resets = <&syscon GEMINI_RESET_GMAC1>; 355 clocks = <&syscon GEMINI_CLK_GATE_GMAC1>; 356 clock-names = "PCLK"; 357 }; 358 }; 359 360 crypto: crypto@62000000 { 361 compatible = "cortina,sl3516-crypto"; 362 reg = <0x62000000 0x10000>; 363 interrupts = <7 IRQ_TYPE_EDGE_RISING>; 364 resets = <&syscon GEMINI_RESET_SECURITY>; 365 clocks = <&syscon GEMINI_CLK_GATE_SECURITY>; 366 }; 367 368 ide@63000000 { 369 compatible = "cortina,gemini-pata", "faraday,ftide010"; 370 reg = <0x63000000 0x1000>; 371 interrupts = <4 IRQ_TYPE_EDGE_RISING>; 372 resets = <&syscon GEMINI_RESET_IDE>; 373 clocks = <&syscon GEMINI_CLK_GATE_IDE>; 374 clock-names = "PCLK"; 375 sata = <&sata>; 376 status = "disabled"; 377 #address-cells = <1>; 378 #size-cells = <0>; 379 }; 380 381 ide@63400000 { 382 compatible = "cortina,gemini-pata", "faraday,ftide010"; 383 reg = <0x63400000 0x1000>; 384 interrupts = <5 IRQ_TYPE_EDGE_RISING>; 385 resets = <&syscon GEMINI_RESET_IDE>; 386 clocks = <&syscon GEMINI_CLK_GATE_IDE>; 387 clock-names = "PCLK"; 388 sata = <&sata>; 389 status = "disabled"; 390 #address-cells = <1>; 391 #size-cells = <0>; 392 }; 393 394 dma-controller@67000000 { 395 compatible = "faraday,ftdma020", "arm,pl080", "arm,primecell"; 396 /* Faraday Technology FTDMAC020 variant */ 397 arm,primecell-periphid = <0x0003b080>; 398 reg = <0x67000000 0x1000>; 399 interrupts = <9 IRQ_TYPE_EDGE_RISING>; 400 resets = <&syscon GEMINI_RESET_DMAC>; 401 clocks = <&syscon GEMINI_CLK_AHB>; 402 clock-names = "apb_pclk"; 403 /* Bus interface AHB1 (AHB0) is totally tilted */ 404 lli-bus-interface-ahb2; 405 mem-bus-interface-ahb2; 406 memcpy-burst-size = <256>; 407 memcpy-bus-width = <32>; 408 #dma-cells = <2>; 409 }; 410 411 display-controller@6a000000 { 412 compatible = "cortina,gemini-tvc", "faraday,tve200"; 413 reg = <0x6a000000 0x1000>; 414 interrupts = <13 IRQ_TYPE_EDGE_RISING>; 415 resets = <&syscon GEMINI_RESET_TVC>; 416 clocks = <&syscon GEMINI_CLK_GATE_TVC>, 417 <&syscon GEMINI_CLK_TVC>; 418 clock-names = "PCLK", "TVE"; 419 pinctrl-names = "default"; 420 pinctrl-0 = <&tvc_default_pins>; 421 status = "disabled"; 422 }; 423 424 usb@68000000 { 425 compatible = "cortina,gemini-usb", "faraday,fotg210"; 426 reg = <0x68000000 0x1000>; 427 interrupts = <10 IRQ_TYPE_LEVEL_HIGH>; 428 resets = <&syscon GEMINI_RESET_USB0>; 429 clocks = <&syscon GEMINI_CLK_GATE_USB0>; 430 clock-names = "PCLK"; 431 /* 432 * This will claim pins for USB0 and USB1 at the same 433 * time as they are using some common pins. If you for 434 * some reason have a system using USB1 at 96000000 but 435 * NOT using USB0 at 68000000 you wll have to add the 436 * usb_default_pins to the USB controller at 96000000 437 * in your .dts for the board. 438 */ 439 pinctrl-names = "default"; 440 pinctrl-0 = <&usb_default_pins>; 441 syscon = <&syscon>; 442 status = "disabled"; 443 }; 444 445 usb@69000000 { 446 compatible = "cortina,gemini-usb", "faraday,fotg210"; 447 reg = <0x69000000 0x1000>; 448 interrupts = <11 IRQ_TYPE_LEVEL_HIGH>; 449 resets = <&syscon GEMINI_RESET_USB1>; 450 clocks = <&syscon GEMINI_CLK_GATE_USB1>; 451 clock-names = "PCLK"; 452 syscon = <&syscon>; 453 status = "disabled"; 454 }; 455 }; 456}; 457