/*
 * ox820.dtsi - Device tree file for Oxford Semiconductor OX820 SoC
 *
 * Copyright (C) 2016 Neil Armstrong <narmstrong@baylibre.com>
 *
 * Licensed under GPLv2 or later
 */

/include/ "skeleton.dtsi"
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/clock/oxsemi,ox820.h>
#include <dt-bindings/reset/oxsemi,ox820.h>

/ {
	compatible = "oxsemi,ox820";

	cpus {
		#address-cells = <1>;
		#size-cells = <0>;
		enable-method = "oxsemi,ox820-smp";

		cpu@0 {
			device_type = "cpu";
			compatible = "arm,arm11mpcore";
			clocks = <&armclk>;
			reg = <0>;
		};

		cpu@1 {
			device_type = "cpu";
			compatible = "arm,arm11mpcore";
			clocks = <&armclk>;
			reg = <1>;
		};
	};

	memory {
		/* Max 512MB @ 0x60000000 */
		reg = <0x60000000 0x20000000>;
	};

	clocks {
		osc: oscillator {
			compatible = "fixed-clock";
			#clock-cells = <0>;
			clock-frequency = <25000000>;
		};

		gmacclk: gmacclk {
			compatible = "fixed-clock";
			#clock-cells = <0>;
			clock-frequency = <125000000>;
		};

		sysclk: sysclk {
			compatible = "fixed-factor-clock";
			#clock-cells = <0>;
			clock-div = <4>;
			clock-mult = <1>;
			clocks = <&osc>;
		};

		plla: plla {
			compatible = "fixed-clock";
			#clock-cells = <0>;
			clock-frequency = <850000000>;
		};

		armclk: armclk {
			compatible = "fixed-factor-clock";
			#clock-cells = <0>;
			clock-div = <2>;
			clock-mult = <1>;
			clocks = <&plla>;
		};
	};

	soc {
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "simple-bus";
		ranges;
		interrupt-parent = <&gic>;

		nandc: nand-controller@41000000 {
			compatible = "oxsemi,ox820-nand";
			reg = <0x41000000 0x100000>;
			clocks = <&stdclk CLK_820_NAND>;
			resets = <&reset RESET_NAND>;
			#address-cells = <1>;
			#size-cells = <0>;
			status = "disabled";
		};

		etha: ethernet@40400000 {
			compatible = "oxsemi,ox820-dwmac", "snps,dwmac";
			reg = <0x40400000 0x2000>;
			interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>,
				     <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
			interrupt-names = "macirq", "eth_wake_irq";
			mac-address = [000000000000]; /* Filled in by U-Boot */
			phy-mode = "rgmii";

			clocks = <&stdclk CLK_820_ETHA>, <&gmacclk>;
			clock-names = "gmac", "stmmaceth";
			resets = <&reset RESET_MAC>;

			/* Regmap for sys registers */
			oxsemi,sys-ctrl = <&sys>;

			status = "disabled";
		};

		apb-bridge@44000000 {
			#address-cells = <1>;
			#size-cells = <1>;
			compatible = "simple-bus";
			ranges = <0 0x44000000 0x1000000>;

			pinctrl: pinctrl {
				compatible = "oxsemi,ox820-pinctrl";

				/* Regmap for sys registers */
				oxsemi,sys-ctrl = <&sys>;

				pinctrl_uart0: uart0 {
					uart0 {
						pins = "gpio30", "gpio31";
						function = "fct5";
					};
				};

				pinctrl_uart0_modem: uart0_modem {
					uart0_modem_a {
						pins = "gpio24", "gpio24", "gpio26", "gpio27";
						function = "fct4";
					};
					uart0_modem_b {
						pins = "gpio28", "gpio29";
						function = "fct5";
					};
				};

				pinctrl_uart1: uart1 {
					uart1 {
						pins = "gpio7", "gpio8";
						function = "fct4";
					};
				};

				pinctrl_uart1_modem: uart1_modem {
					uart1_modem {
						pins = "gpio5", "gpio6", "gpio40", "gpio41", "gpio42", "gpio43";
						function = "fct4";
					};
				};

				pinctrl_etha_mdio: etha_mdio {
					etha_mdio {
						pins = "gpio3", "gpio4";
						function = "fct1";
					};
				};

				pinctrl_nand: nand {
					nand {
						pins = "gpio12", "gpio13", "gpio14", "gpio15",
						     "gpio16", "gpio17", "gpio18", "gpio19",
						     "gpio20", "gpio21", "gpio22", "gpio23",
						     "gpio24";
						function = "fct1";
					};
				};
			};

			gpio0: gpio@0 {
				compatible = "oxsemi,ox820-gpio";
				reg = <0x000000 0x100000>;
				interrupts = <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>;
				#gpio-cells = <2>;
				gpio-controller;
				interrupt-controller;
				#interrupt-cells = <2>;
				ngpios = <32>;
				oxsemi,gpio-bank = <0>;
				gpio-ranges = <&pinctrl 0 0 32>;
			};

			gpio1: gpio@100000 {
				compatible = "oxsemi,ox820-gpio";
				reg = <0x100000 0x100000>;
				interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>;
				#gpio-cells = <2>;
				gpio-controller;
				interrupt-controller;
				#interrupt-cells = <2>;
				ngpios = <18>;
				oxsemi,gpio-bank = <1>;
				gpio-ranges = <&pinctrl 0 32 18>;
			};

			uart0: serial@200000 {
			       compatible = "ns16550a";
			       reg = <0x200000 0x100000>;
			       interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
			       reg-shift = <0>;
			       fifo-size = <16>;
			       reg-io-width = <1>;
			       current-speed = <115200>;
			       no-loopback-test;
			       status = "disabled";
			       clocks = <&sysclk>;
			       resets = <&reset RESET_UART1>;
			};

			uart1: serial@300000 {
			       compatible = "ns16550a";
			       reg = <0x200000 0x100000>;
			       interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
			       reg-shift = <0>;
			       fifo-size = <16>;
			       reg-io-width = <1>;
			       current-speed = <115200>;
			       no-loopback-test;
			       status = "disabled";
			       clocks = <&sysclk>;
			       resets = <&reset RESET_UART2>;
			};

			rps@400000 {
				#address-cells = <1>;
				#size-cells = <1>;
				compatible = "simple-bus";
				ranges = <0 0x400000 0x100000>;

				intc: interrupt-controller@0 {
					compatible = "oxsemi,ox820-rps-irq", "oxsemi,ox810se-rps-irq";
					interrupt-controller;
					reg = <0 0x200>;
					interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
					#interrupt-cells = <1>;
					valid-mask = <0xFFFFFFFF>;
					clear-mask = <0>;
				};

				timer0: timer@200 {
					compatible = "oxsemi,ox820-rps-timer";
					reg = <0x200 0x40>;
					clocks = <&sysclk>;
					interrupt-parent = <&intc>;
					interrupts = <4>;
				};
			};

			sys: sys-ctrl@e00000 {
				compatible = "oxsemi,ox820-sys-ctrl", "syscon", "simple-mfd";
				reg = <0xe00000 0x200000>;

				reset: reset-controller {
					compatible = "oxsemi,ox820-reset", "oxsemi,ox810se-reset";
					#reset-cells = <1>;
				};

				stdclk: stdclk {
					compatible = "oxsemi,ox820-stdclk", "oxsemi,ox810se-stdclk";
					#clock-cells = <1>;
				};
			};
		};

		apb-bridge@47000000 {
			#address-cells = <1>;
			#size-cells = <1>;
			compatible = "simple-bus";
			ranges = <0 0x47000000 0x1000000>;

			scu: scu@0 {
				compatible = "arm,arm11mp-scu";
				reg = <0x0 0x100>;
			};

			local-timer@600 {
				compatible = "arm,arm11mp-twd-timer";
				reg = <0x600 0x20>;
				interrupts = <GIC_PPI 13 (GIC_CPU_MASK_RAW(3)|IRQ_TYPE_LEVEL_HIGH)>;
				clocks = <&armclk>;
			};

			gic: gic@1000 {
				compatible = "arm,arm11mp-gic";
				interrupt-controller;
				#interrupt-cells = <3>;
				reg = <0x1000 0x1000>,
				      <0x100 0x500>;
			};
		};
	};
};
