1/* 2 * Copyright 2017 Chen-Yu Tsai <wens@csie.org> 3 * Copyright 2017 Icenowy Zheng <icenowy@aosc.io> 4 * 5 * This file is dual-licensed: you can use it either under the terms 6 * of the GPL or the X11 license, at your option. Note that this dual 7 * licensing only applies to this file, and not this project as a 8 * whole. 9 * 10 * a) This file is free software; you can redistribute it and/or 11 * modify it under the terms of the GNU General Public License as 12 * published by the Free Software Foundation; either version 2 of the 13 * License, or (at your option) any later version. 14 * 15 * This file is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU General Public License for more details. 19 * 20 * Or, alternatively, 21 * 22 * b) Permission is hereby granted, free of charge, to any person 23 * obtaining a copy of this software and associated documentation 24 * files (the "Software"), to deal in the Software without 25 * restriction, including without limitation the rights to use, 26 * copy, modify, merge, publish, distribute, sublicense, and/or 27 * sell copies of the Software, and to permit persons to whom the 28 * Software is furnished to do so, subject to the following 29 * conditions: 30 * 31 * The above copyright notice and this permission notice shall be 32 * included in all copies or substantial portions of the Software. 33 * 34 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 35 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 36 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 37 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 38 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 39 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 40 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 41 * OTHER DEALINGS IN THE SOFTWARE. 42 */ 43 44#include <dt-bindings/interrupt-controller/arm-gic.h> 45#include <dt-bindings/clock/sun8i-de2.h> 46#include <dt-bindings/clock/sun8i-r40-ccu.h> 47#include <dt-bindings/reset/sun8i-r40-ccu.h> 48#include <dt-bindings/reset/sun8i-de2.h> 49 50/ { 51 #address-cells = <1>; 52 #size-cells = <1>; 53 interrupt-parent = <&gic>; 54 55 clocks { 56 #address-cells = <1>; 57 #size-cells = <1>; 58 ranges; 59 60 osc24M: osc24M { 61 #clock-cells = <0>; 62 compatible = "fixed-clock"; 63 clock-frequency = <24000000>; 64 clock-accuracy = <50000>; 65 clock-output-names = "osc24M"; 66 }; 67 68 osc32k: osc32k { 69 #clock-cells = <0>; 70 compatible = "fixed-clock"; 71 clock-frequency = <32768>; 72 clock-accuracy = <20000>; 73 clock-output-names = "ext-osc32k"; 74 }; 75 }; 76 77 cpus { 78 #address-cells = <1>; 79 #size-cells = <0>; 80 81 cpu@0 { 82 compatible = "arm,cortex-a7"; 83 device_type = "cpu"; 84 reg = <0>; 85 }; 86 87 cpu@1 { 88 compatible = "arm,cortex-a7"; 89 device_type = "cpu"; 90 reg = <1>; 91 }; 92 93 cpu@2 { 94 compatible = "arm,cortex-a7"; 95 device_type = "cpu"; 96 reg = <2>; 97 }; 98 99 cpu@3 { 100 compatible = "arm,cortex-a7"; 101 device_type = "cpu"; 102 reg = <3>; 103 }; 104 }; 105 106 de: display-engine { 107 compatible = "allwinner,sun8i-r40-display-engine"; 108 allwinner,pipelines = <&mixer0>, <&mixer1>; 109 status = "disabled"; 110 }; 111 112 soc { 113 compatible = "simple-bus"; 114 #address-cells = <1>; 115 #size-cells = <1>; 116 ranges; 117 118 display_clocks: clock@1000000 { 119 compatible = "allwinner,sun8i-r40-de2-clk", 120 "allwinner,sun8i-h3-de2-clk"; 121 reg = <0x01000000 0x10000>; 122 clocks = <&ccu CLK_BUS_DE>, 123 <&ccu CLK_DE>; 124 clock-names = "bus", 125 "mod"; 126 resets = <&ccu RST_BUS_DE>; 127 #clock-cells = <1>; 128 #reset-cells = <1>; 129 }; 130 131 mixer0: mixer@1100000 { 132 compatible = "allwinner,sun8i-r40-de2-mixer-0"; 133 reg = <0x01100000 0x100000>; 134 clocks = <&display_clocks CLK_BUS_MIXER0>, 135 <&display_clocks CLK_MIXER0>; 136 clock-names = "bus", 137 "mod"; 138 resets = <&display_clocks RST_MIXER0>; 139 140 ports { 141 #address-cells = <1>; 142 #size-cells = <0>; 143 144 mixer0_out: port@1 { 145 reg = <1>; 146 mixer0_out_tcon_top: endpoint { 147 remote-endpoint = <&tcon_top_mixer0_in_mixer0>; 148 }; 149 }; 150 }; 151 }; 152 153 mixer1: mixer@1200000 { 154 compatible = "allwinner,sun8i-r40-de2-mixer-1"; 155 reg = <0x01200000 0x100000>; 156 clocks = <&display_clocks CLK_BUS_MIXER1>, 157 <&display_clocks CLK_MIXER1>; 158 clock-names = "bus", 159 "mod"; 160 resets = <&display_clocks RST_WB>; 161 162 ports { 163 #address-cells = <1>; 164 #size-cells = <0>; 165 166 mixer1_out: port@1 { 167 reg = <1>; 168 mixer1_out_tcon_top: endpoint { 169 remote-endpoint = <&tcon_top_mixer1_in_mixer1>; 170 }; 171 }; 172 }; 173 }; 174 175 nmi_intc: interrupt-controller@1c00030 { 176 compatible = "allwinner,sun7i-a20-sc-nmi"; 177 interrupt-controller; 178 #interrupt-cells = <2>; 179 reg = <0x01c00030 0x0c>; 180 interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>; 181 }; 182 183 mmc0: mmc@1c0f000 { 184 compatible = "allwinner,sun8i-r40-mmc", 185 "allwinner,sun50i-a64-mmc"; 186 reg = <0x01c0f000 0x1000>; 187 clocks = <&ccu CLK_BUS_MMC0>, <&ccu CLK_MMC0>; 188 clock-names = "ahb", "mmc"; 189 resets = <&ccu RST_BUS_MMC0>; 190 reset-names = "ahb"; 191 pinctrl-0 = <&mmc0_pins>; 192 pinctrl-names = "default"; 193 interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>; 194 status = "disabled"; 195 #address-cells = <1>; 196 #size-cells = <0>; 197 }; 198 199 mmc1: mmc@1c10000 { 200 compatible = "allwinner,sun8i-r40-mmc", 201 "allwinner,sun50i-a64-mmc"; 202 reg = <0x01c10000 0x1000>; 203 clocks = <&ccu CLK_BUS_MMC1>, <&ccu CLK_MMC1>; 204 clock-names = "ahb", "mmc"; 205 resets = <&ccu RST_BUS_MMC1>; 206 reset-names = "ahb"; 207 interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>; 208 status = "disabled"; 209 #address-cells = <1>; 210 #size-cells = <0>; 211 }; 212 213 mmc2: mmc@1c11000 { 214 compatible = "allwinner,sun8i-r40-emmc", 215 "allwinner,sun50i-a64-emmc"; 216 reg = <0x01c11000 0x1000>; 217 clocks = <&ccu CLK_BUS_MMC2>, <&ccu CLK_MMC2>; 218 clock-names = "ahb", "mmc"; 219 resets = <&ccu RST_BUS_MMC2>; 220 reset-names = "ahb"; 221 pinctrl-0 = <&mmc2_pins>; 222 pinctrl-names = "default"; 223 interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>; 224 status = "disabled"; 225 #address-cells = <1>; 226 #size-cells = <0>; 227 }; 228 229 mmc3: mmc@1c12000 { 230 compatible = "allwinner,sun8i-r40-mmc", 231 "allwinner,sun50i-a64-mmc"; 232 reg = <0x01c12000 0x1000>; 233 clocks = <&ccu CLK_BUS_MMC3>, <&ccu CLK_MMC3>; 234 clock-names = "ahb", "mmc"; 235 resets = <&ccu RST_BUS_MMC3>; 236 reset-names = "ahb"; 237 interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>; 238 status = "disabled"; 239 #address-cells = <1>; 240 #size-cells = <0>; 241 }; 242 243 usbphy: phy@1c13400 { 244 compatible = "allwinner,sun8i-r40-usb-phy"; 245 reg = <0x01c13400 0x14>, 246 <0x01c14800 0x4>, 247 <0x01c19800 0x4>, 248 <0x01c1c800 0x4>; 249 reg-names = "phy_ctrl", 250 "pmu0", 251 "pmu1", 252 "pmu2"; 253 clocks = <&ccu CLK_USB_PHY0>, 254 <&ccu CLK_USB_PHY1>, 255 <&ccu CLK_USB_PHY2>; 256 clock-names = "usb0_phy", 257 "usb1_phy", 258 "usb2_phy"; 259 resets = <&ccu RST_USB_PHY0>, 260 <&ccu RST_USB_PHY1>, 261 <&ccu RST_USB_PHY2>; 262 reset-names = "usb0_reset", 263 "usb1_reset", 264 "usb2_reset"; 265 status = "disabled"; 266 #phy-cells = <1>; 267 }; 268 269 ahci: sata@1c18000 { 270 compatible = "allwinner,sun8i-r40-ahci"; 271 reg = <0x01c18000 0x1000>; 272 interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>; 273 clocks = <&ccu CLK_BUS_SATA>, <&ccu CLK_SATA>; 274 resets = <&ccu RST_BUS_SATA>; 275 reset-names = "ahci"; 276 status = "disabled"; 277 }; 278 279 ehci1: usb@1c19000 { 280 compatible = "allwinner,sun8i-r40-ehci", "generic-ehci"; 281 reg = <0x01c19000 0x100>; 282 interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>; 283 clocks = <&ccu CLK_BUS_EHCI1>; 284 resets = <&ccu RST_BUS_EHCI1>; 285 phys = <&usbphy 1>; 286 phy-names = "usb"; 287 status = "disabled"; 288 }; 289 290 ohci1: usb@1c19400 { 291 compatible = "allwinner,sun8i-r40-ohci", "generic-ohci"; 292 reg = <0x01c19400 0x100>; 293 interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>; 294 clocks = <&ccu CLK_BUS_OHCI1>, 295 <&ccu CLK_USB_OHCI1>; 296 resets = <&ccu RST_BUS_OHCI1>; 297 phys = <&usbphy 1>; 298 phy-names = "usb"; 299 status = "disabled"; 300 }; 301 302 ehci2: usb@1c1c000 { 303 compatible = "allwinner,sun8i-r40-ehci", "generic-ehci"; 304 reg = <0x01c1c000 0x100>; 305 interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>; 306 clocks = <&ccu CLK_BUS_EHCI2>; 307 resets = <&ccu RST_BUS_EHCI2>; 308 phys = <&usbphy 2>; 309 phy-names = "usb"; 310 status = "disabled"; 311 }; 312 313 ohci2: usb@1c1c400 { 314 compatible = "allwinner,sun8i-r40-ohci", "generic-ohci"; 315 reg = <0x01c1c400 0x100>; 316 interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>; 317 clocks = <&ccu CLK_BUS_OHCI2>, 318 <&ccu CLK_USB_OHCI2>; 319 resets = <&ccu RST_BUS_OHCI2>; 320 phys = <&usbphy 2>; 321 phy-names = "usb"; 322 status = "disabled"; 323 }; 324 325 ccu: clock@1c20000 { 326 compatible = "allwinner,sun8i-r40-ccu"; 327 reg = <0x01c20000 0x400>; 328 clocks = <&osc24M>, <&rtc 0>; 329 clock-names = "hosc", "losc"; 330 #clock-cells = <1>; 331 #reset-cells = <1>; 332 }; 333 334 rtc: rtc@1c20400 { 335 compatible = "allwinner,sun8i-r40-rtc"; 336 reg = <0x01c20400 0x400>; 337 interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>; 338 clock-output-names = "osc32k", "osc32k-out"; 339 clocks = <&osc32k>; 340 #clock-cells = <1>; 341 }; 342 343 pio: pinctrl@1c20800 { 344 compatible = "allwinner,sun8i-r40-pinctrl"; 345 reg = <0x01c20800 0x400>; 346 interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>; 347 clocks = <&ccu CLK_BUS_PIO>, <&osc24M>, <&rtc 0>; 348 clock-names = "apb", "hosc", "losc"; 349 gpio-controller; 350 interrupt-controller; 351 #interrupt-cells = <3>; 352 #gpio-cells = <3>; 353 354 clk_out_a_pin: clk-out-a-pin { 355 pins = "PI12"; 356 function = "clk_out_a"; 357 }; 358 359 gmac_rgmii_pins: gmac-rgmii-pins { 360 pins = "PA0", "PA1", "PA2", "PA3", 361 "PA4", "PA5", "PA6", "PA7", 362 "PA8", "PA10", "PA11", "PA12", 363 "PA13", "PA15", "PA16"; 364 function = "gmac"; 365 /* 366 * data lines in RGMII mode use DDR mode 367 * and need a higher signal drive strength 368 */ 369 drive-strength = <40>; 370 }; 371 372 i2c0_pins: i2c0-pins { 373 pins = "PB0", "PB1"; 374 function = "i2c0"; 375 }; 376 377 mmc0_pins: mmc0-pins { 378 pins = "PF0", "PF1", "PF2", 379 "PF3", "PF4", "PF5"; 380 function = "mmc0"; 381 drive-strength = <30>; 382 bias-pull-up; 383 }; 384 385 mmc1_pg_pins: mmc1-pg-pins { 386 pins = "PG0", "PG1", "PG2", 387 "PG3", "PG4", "PG5"; 388 function = "mmc1"; 389 drive-strength = <30>; 390 bias-pull-up; 391 }; 392 393 mmc2_pins: mmc2-pins { 394 pins = "PC5", "PC6", "PC7", "PC8", "PC9", 395 "PC10", "PC11", "PC12", "PC13", "PC14", 396 "PC15", "PC24"; 397 function = "mmc2"; 398 drive-strength = <30>; 399 bias-pull-up; 400 }; 401 402 uart0_pb_pins: uart0-pb-pins { 403 pins = "PB22", "PB23"; 404 function = "uart0"; 405 }; 406 407 uart3_pg_pins: uart3-pg-pins { 408 pins = "PG6", "PG7"; 409 function = "uart3"; 410 }; 411 412 uart3_rts_cts_pg_pins: uart3-rts-cts-pg-pins { 413 pins = "PG8", "PG9"; 414 function = "uart3"; 415 }; 416 }; 417 418 wdt: watchdog@1c20c90 { 419 compatible = "allwinner,sun4i-a10-wdt"; 420 reg = <0x01c20c90 0x10>; 421 interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>; 422 clocks = <&osc24M>; 423 }; 424 425 uart0: serial@1c28000 { 426 compatible = "snps,dw-apb-uart"; 427 reg = <0x01c28000 0x400>; 428 interrupts = <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>; 429 reg-shift = <2>; 430 reg-io-width = <4>; 431 clocks = <&ccu CLK_BUS_UART0>; 432 resets = <&ccu RST_BUS_UART0>; 433 status = "disabled"; 434 }; 435 436 uart1: serial@1c28400 { 437 compatible = "snps,dw-apb-uart"; 438 reg = <0x01c28400 0x400>; 439 interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>; 440 reg-shift = <2>; 441 reg-io-width = <4>; 442 clocks = <&ccu CLK_BUS_UART1>; 443 resets = <&ccu RST_BUS_UART1>; 444 status = "disabled"; 445 }; 446 447 uart2: serial@1c28800 { 448 compatible = "snps,dw-apb-uart"; 449 reg = <0x01c28800 0x400>; 450 interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>; 451 reg-shift = <2>; 452 reg-io-width = <4>; 453 clocks = <&ccu CLK_BUS_UART2>; 454 resets = <&ccu RST_BUS_UART2>; 455 status = "disabled"; 456 }; 457 458 uart3: serial@1c28c00 { 459 compatible = "snps,dw-apb-uart"; 460 reg = <0x01c28c00 0x400>; 461 interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>; 462 reg-shift = <2>; 463 reg-io-width = <4>; 464 clocks = <&ccu CLK_BUS_UART3>; 465 resets = <&ccu RST_BUS_UART3>; 466 status = "disabled"; 467 }; 468 469 uart4: serial@1c29000 { 470 compatible = "snps,dw-apb-uart"; 471 reg = <0x01c29000 0x400>; 472 interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>; 473 reg-shift = <2>; 474 reg-io-width = <4>; 475 clocks = <&ccu CLK_BUS_UART4>; 476 resets = <&ccu RST_BUS_UART4>; 477 status = "disabled"; 478 }; 479 480 uart5: serial@1c29400 { 481 compatible = "snps,dw-apb-uart"; 482 reg = <0x01c29400 0x400>; 483 interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>; 484 reg-shift = <2>; 485 reg-io-width = <4>; 486 clocks = <&ccu CLK_BUS_UART5>; 487 resets = <&ccu RST_BUS_UART5>; 488 status = "disabled"; 489 }; 490 491 uart6: serial@1c29800 { 492 compatible = "snps,dw-apb-uart"; 493 reg = <0x01c29800 0x400>; 494 interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>; 495 reg-shift = <2>; 496 reg-io-width = <4>; 497 clocks = <&ccu CLK_BUS_UART6>; 498 resets = <&ccu RST_BUS_UART6>; 499 status = "disabled"; 500 }; 501 502 uart7: serial@1c29c00 { 503 compatible = "snps,dw-apb-uart"; 504 reg = <0x01c29c00 0x400>; 505 interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>; 506 reg-shift = <2>; 507 reg-io-width = <4>; 508 clocks = <&ccu CLK_BUS_UART7>; 509 resets = <&ccu RST_BUS_UART7>; 510 status = "disabled"; 511 }; 512 513 i2c0: i2c@1c2ac00 { 514 compatible = "allwinner,sun6i-a31-i2c"; 515 reg = <0x01c2ac00 0x400>; 516 interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>; 517 clocks = <&ccu CLK_BUS_I2C0>; 518 resets = <&ccu RST_BUS_I2C0>; 519 pinctrl-0 = <&i2c0_pins>; 520 pinctrl-names = "default"; 521 status = "disabled"; 522 #address-cells = <1>; 523 #size-cells = <0>; 524 }; 525 526 i2c1: i2c@1c2b000 { 527 compatible = "allwinner,sun6i-a31-i2c"; 528 reg = <0x01c2b000 0x400>; 529 interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>; 530 clocks = <&ccu CLK_BUS_I2C1>; 531 resets = <&ccu RST_BUS_I2C1>; 532 status = "disabled"; 533 #address-cells = <1>; 534 #size-cells = <0>; 535 }; 536 537 i2c2: i2c@1c2b400 { 538 compatible = "allwinner,sun6i-a31-i2c"; 539 reg = <0x01c2b400 0x400>; 540 interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>; 541 clocks = <&ccu CLK_BUS_I2C2>; 542 resets = <&ccu RST_BUS_I2C2>; 543 status = "disabled"; 544 #address-cells = <1>; 545 #size-cells = <0>; 546 }; 547 548 i2c3: i2c@1c2b800 { 549 compatible = "allwinner,sun6i-a31-i2c"; 550 reg = <0x01c2b800 0x400>; 551 interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>; 552 clocks = <&ccu CLK_BUS_I2C3>; 553 resets = <&ccu RST_BUS_I2C3>; 554 status = "disabled"; 555 #address-cells = <1>; 556 #size-cells = <0>; 557 }; 558 559 i2c4: i2c@1c2c000 { 560 compatible = "allwinner,sun6i-a31-i2c"; 561 reg = <0x01c2c000 0x400>; 562 interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>; 563 clocks = <&ccu CLK_BUS_I2C4>; 564 resets = <&ccu RST_BUS_I2C4>; 565 status = "disabled"; 566 #address-cells = <1>; 567 #size-cells = <0>; 568 }; 569 570 gmac: ethernet@1c50000 { 571 compatible = "allwinner,sun8i-r40-gmac"; 572 syscon = <&ccu>; 573 reg = <0x01c50000 0x10000>; 574 interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>; 575 interrupt-names = "macirq"; 576 resets = <&ccu RST_BUS_GMAC>; 577 reset-names = "stmmaceth"; 578 clocks = <&ccu CLK_BUS_GMAC>; 579 clock-names = "stmmaceth"; 580 status = "disabled"; 581 582 gmac_mdio: mdio { 583 compatible = "snps,dwmac-mdio"; 584 #address-cells = <1>; 585 #size-cells = <0>; 586 }; 587 }; 588 589 tcon_top: tcon-top@1c70000 { 590 compatible = "allwinner,sun8i-r40-tcon-top"; 591 reg = <0x01c70000 0x1000>; 592 clocks = <&ccu CLK_BUS_TCON_TOP>, 593 <&ccu CLK_TCON_TV0>, 594 <&ccu CLK_TVE0>, 595 <&ccu CLK_TCON_TV1>, 596 <&ccu CLK_TVE1>, 597 <&ccu CLK_DSI_DPHY>; 598 clock-names = "bus", 599 "tcon-tv0", 600 "tve0", 601 "tcon-tv1", 602 "tve1", 603 "dsi"; 604 clock-output-names = "tcon-top-tv0", 605 "tcon-top-tv1", 606 "tcon-top-dsi"; 607 resets = <&ccu RST_BUS_TCON_TOP>; 608 #clock-cells = <1>; 609 610 ports { 611 #address-cells = <1>; 612 #size-cells = <0>; 613 614 tcon_top_mixer0_in: port@0 { 615 reg = <0>; 616 617 tcon_top_mixer0_in_mixer0: endpoint { 618 remote-endpoint = <&mixer0_out_tcon_top>; 619 }; 620 }; 621 622 tcon_top_mixer0_out: port@1 { 623 #address-cells = <1>; 624 #size-cells = <0>; 625 reg = <1>; 626 627 tcon_top_mixer0_out_tcon_lcd0: endpoint@0 { 628 reg = <0>; 629 }; 630 631 tcon_top_mixer0_out_tcon_lcd1: endpoint@1 { 632 reg = <1>; 633 }; 634 635 tcon_top_mixer0_out_tcon_tv0: endpoint@2 { 636 reg = <2>; 637 remote-endpoint = <&tcon_tv0_in_tcon_top_mixer0>; 638 }; 639 640 tcon_top_mixer0_out_tcon_tv1: endpoint@3 { 641 reg = <3>; 642 remote-endpoint = <&tcon_tv1_in_tcon_top_mixer0>; 643 }; 644 }; 645 646 tcon_top_mixer1_in: port@2 { 647 #address-cells = <1>; 648 #size-cells = <0>; 649 reg = <2>; 650 651 tcon_top_mixer1_in_mixer1: endpoint@1 { 652 reg = <1>; 653 remote-endpoint = <&mixer1_out_tcon_top>; 654 }; 655 }; 656 657 tcon_top_mixer1_out: port@3 { 658 #address-cells = <1>; 659 #size-cells = <0>; 660 reg = <3>; 661 662 tcon_top_mixer1_out_tcon_lcd0: endpoint@0 { 663 reg = <0>; 664 }; 665 666 tcon_top_mixer1_out_tcon_lcd1: endpoint@1 { 667 reg = <1>; 668 }; 669 670 tcon_top_mixer1_out_tcon_tv0: endpoint@2 { 671 reg = <2>; 672 remote-endpoint = <&tcon_tv0_in_tcon_top_mixer1>; 673 }; 674 675 tcon_top_mixer1_out_tcon_tv1: endpoint@3 { 676 reg = <3>; 677 remote-endpoint = <&tcon_tv1_in_tcon_top_mixer1>; 678 }; 679 }; 680 681 tcon_top_hdmi_in: port@4 { 682 #address-cells = <1>; 683 #size-cells = <0>; 684 reg = <4>; 685 686 tcon_top_hdmi_in_tcon_tv0: endpoint@0 { 687 reg = <0>; 688 remote-endpoint = <&tcon_tv0_out_tcon_top>; 689 }; 690 691 tcon_top_hdmi_in_tcon_tv1: endpoint@1 { 692 reg = <1>; 693 remote-endpoint = <&tcon_tv1_out_tcon_top>; 694 }; 695 }; 696 697 tcon_top_hdmi_out: port@5 { 698 reg = <5>; 699 700 tcon_top_hdmi_out_hdmi: endpoint { 701 remote-endpoint = <&hdmi_in_tcon_top>; 702 }; 703 }; 704 }; 705 }; 706 707 tcon_tv0: lcd-controller@1c73000 { 708 compatible = "allwinner,sun8i-r40-tcon-tv"; 709 reg = <0x01c73000 0x1000>; 710 interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>; 711 clocks = <&ccu CLK_BUS_TCON_TV0>, <&tcon_top 0>; 712 clock-names = "ahb", "tcon-ch1"; 713 resets = <&ccu RST_BUS_TCON_TV0>; 714 reset-names = "lcd"; 715 status = "disabled"; 716 717 ports { 718 #address-cells = <1>; 719 #size-cells = <0>; 720 721 tcon_tv0_in: port@0 { 722 #address-cells = <1>; 723 #size-cells = <0>; 724 reg = <0>; 725 726 tcon_tv0_in_tcon_top_mixer0: endpoint@0 { 727 reg = <0>; 728 remote-endpoint = <&tcon_top_mixer0_out_tcon_tv0>; 729 }; 730 731 tcon_tv0_in_tcon_top_mixer1: endpoint@1 { 732 reg = <1>; 733 remote-endpoint = <&tcon_top_mixer1_out_tcon_tv0>; 734 }; 735 }; 736 737 tcon_tv0_out: port@1 { 738 #address-cells = <1>; 739 #size-cells = <0>; 740 reg = <1>; 741 742 tcon_tv0_out_tcon_top: endpoint@1 { 743 reg = <1>; 744 remote-endpoint = <&tcon_top_hdmi_in_tcon_tv0>; 745 }; 746 }; 747 }; 748 }; 749 750 tcon_tv1: lcd-controller@1c74000 { 751 compatible = "allwinner,sun8i-r40-tcon-tv"; 752 reg = <0x01c74000 0x1000>; 753 interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>; 754 clocks = <&ccu CLK_BUS_TCON_TV1>, <&tcon_top 1>; 755 clock-names = "ahb", "tcon-ch1"; 756 resets = <&ccu RST_BUS_TCON_TV1>; 757 reset-names = "lcd"; 758 status = "disabled"; 759 760 ports { 761 #address-cells = <1>; 762 #size-cells = <0>; 763 764 tcon_tv1_in: port@0 { 765 #address-cells = <1>; 766 #size-cells = <0>; 767 reg = <0>; 768 769 tcon_tv1_in_tcon_top_mixer0: endpoint@0 { 770 reg = <0>; 771 remote-endpoint = <&tcon_top_mixer0_out_tcon_tv1>; 772 }; 773 774 tcon_tv1_in_tcon_top_mixer1: endpoint@1 { 775 reg = <1>; 776 remote-endpoint = <&tcon_top_mixer1_out_tcon_tv1>; 777 }; 778 }; 779 780 tcon_tv1_out: port@1 { 781 #address-cells = <1>; 782 #size-cells = <0>; 783 reg = <1>; 784 785 tcon_tv1_out_tcon_top: endpoint@1 { 786 reg = <1>; 787 remote-endpoint = <&tcon_top_hdmi_in_tcon_tv1>; 788 }; 789 }; 790 }; 791 }; 792 793 gic: interrupt-controller@1c81000 { 794 compatible = "arm,gic-400"; 795 reg = <0x01c81000 0x1000>, 796 <0x01c82000 0x1000>, 797 <0x01c84000 0x2000>, 798 <0x01c86000 0x2000>; 799 interrupt-controller; 800 #interrupt-cells = <3>; 801 interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>; 802 }; 803 804 hdmi: hdmi@1ee0000 { 805 compatible = "allwinner,sun8i-r40-dw-hdmi", 806 "allwinner,sun8i-a83t-dw-hdmi"; 807 reg = <0x01ee0000 0x10000>; 808 reg-io-width = <1>; 809 interrupts = <GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>; 810 clocks = <&ccu CLK_BUS_HDMI0>, <&ccu CLK_HDMI_SLOW>, 811 <&ccu CLK_HDMI>; 812 clock-names = "iahb", "isfr", "tmds"; 813 resets = <&ccu RST_BUS_HDMI1>; 814 reset-names = "ctrl"; 815 phys = <&hdmi_phy>; 816 phy-names = "phy"; 817 status = "disabled"; 818 819 ports { 820 #address-cells = <1>; 821 #size-cells = <0>; 822 823 hdmi_in: port@0 { 824 reg = <0>; 825 826 hdmi_in_tcon_top: endpoint { 827 remote-endpoint = <&tcon_top_hdmi_out_hdmi>; 828 }; 829 }; 830 831 hdmi_out: port@1 { 832 reg = <1>; 833 }; 834 }; 835 }; 836 837 hdmi_phy: hdmi-phy@1ef0000 { 838 compatible = "allwinner,sun8i-r40-hdmi-phy"; 839 reg = <0x01ef0000 0x10000>; 840 clocks = <&ccu CLK_BUS_HDMI1>, <&ccu CLK_HDMI_SLOW>, 841 <&ccu 7>, <&ccu 16>; 842 clock-names = "bus", "mod", "pll-0", "pll-1"; 843 resets = <&ccu RST_BUS_HDMI0>; 844 reset-names = "phy"; 845 #phy-cells = <0>; 846 }; 847 }; 848 849 timer { 850 compatible = "arm,armv7-timer"; 851 interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>, 852 <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>, 853 <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>, 854 <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>; 855 }; 856}; 857