/*
 * Copyright (c) 2016 Andreas Färber
 *
 * Copyright (c) 2016 BayLibre, SAS.
 * Author: Neil Armstrong <narmstrong@baylibre.com>
 *
 * Copyright (c) 2016 Endless Computers, Inc.
 * Author: Carlo Caione <carlo@endlessm.com>
 *
 * This file is dual-licensed: you can use it either under the terms
 * of the GPL or the X11 license, at your option. Note that this dual
 * licensing only applies to this file, and not this project as a
 * whole.
 *
 *  a) This library is free software; you can redistribute it and/or
 *     modify it under the terms of the GNU General Public License as
 *     published by the Free Software Foundation; either version 2 of the
 *     License, or (at your option) any later version.
 *
 *     This library is distributed in the hope that it will be useful,
 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *     GNU General Public License for more details.
 *
 * Or, alternatively,
 *
 *  b) Permission is hereby granted, free of charge, to any person
 *     obtaining a copy of this software and associated documentation
 *     files (the "Software"), to deal in the Software without
 *     restriction, including without limitation the rights to use,
 *     copy, modify, merge, publish, distribute, sublicense, and/or
 *     sell copies of the Software, and to permit persons to whom the
 *     Software is furnished to do so, subject to the following
 *     conditions:
 *
 *     The above copyright notice and this permission notice shall be
 *     included in all copies or substantial portions of the Software.
 *
 *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 *     OTHER DEALINGS IN THE SOFTWARE.
 */

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/pwm/pwm.h>
#include <dt-bindings/pwm/meson.h>
#include <dt-bindings/clock/a1-clkc.h>

/ {
	interrupt-parent = <&gic>;
	#address-cells = <2>;
	#size-cells = <2>;

	reserved-memory {
		#address-cells = <2>;
		#size-cells = <2>;
		ranges;

		/* 16 MiB reserved for Hardware ROM Firmware */
		hwrom_reserved: hwrom@0 {
			reg = <0x0 0x0 0x0 0x1000000>;
			no-map;
		};

		/* 2 MiB reserved for ARM Trusted Firmware (BL31) */
		secmon_reserved: secmon@10000000 {
			reg = <0x0 0x10000000 0x0 0x200000>;
			no-map;
		};

		linux,cma {
			compatible = "shared-dma-pool";
			reusable;
			size = <0x0 0xbc00000>;
			alignment = <0x0 0x400000>;
			linux,cma-default;
		};
	};

	cpus {
		#address-cells = <0x2>;
		#size-cells = <0x0>;

		cpu0: cpu@0 {
			device_type = "cpu";
			compatible = "arm,cortex-a53", "arm,armv8";
			reg = <0x0 0x0>;
			enable-method = "psci";
			next-level-cache = <&l2>;
			clocks = <&scpi_dvfs 0>;
		};

		cpu1: cpu@1 {
			device_type = "cpu";
			compatible = "arm,cortex-a53", "arm,armv8";
			reg = <0x0 0x1>;
			enable-method = "psci";
			next-level-cache = <&l2>;
			clocks = <&scpi_dvfs 0>;
		};

		cpu2: cpu@2 {
			device_type = "cpu";
			compatible = "arm,cortex-a53", "arm,armv8";
			reg = <0x0 0x2>;
			enable-method = "psci";
			next-level-cache = <&l2>;
			clocks = <&scpi_dvfs 0>;
		};

		cpu3: cpu@3 {
			device_type = "cpu";
			compatible = "arm,cortex-a53", "arm,armv8";
			reg = <0x0 0x3>;
			enable-method = "psci";
			next-level-cache = <&l2>;
			clocks = <&scpi_dvfs 0>;
		};

		l2: l2-cache0 {
			compatible = "cache";
		};
	};

	arm-pmu {
		compatible = "arm,cortex-a53-pmu";
		interrupts = <GIC_SPI 137 IRQ_TYPE_LEVEL_HIGH>,
			     <GIC_SPI 138 IRQ_TYPE_LEVEL_HIGH>,
			     <GIC_SPI 153 IRQ_TYPE_LEVEL_HIGH>,
			     <GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>;
		interrupt-affinity = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>;
	};

	psci {
		compatible = "arm,psci-0.2";
		method = "smc";
	};

	timer {
		compatible = "arm,armv8-timer";
		interrupts = <GIC_PPI 13
			(GIC_CPU_MASK_RAW(0xff) | IRQ_TYPE_LEVEL_LOW)>,
			     <GIC_PPI 14
			(GIC_CPU_MASK_RAW(0xff) | IRQ_TYPE_LEVEL_LOW)>,
			     <GIC_PPI 11
			(GIC_CPU_MASK_RAW(0xff) | IRQ_TYPE_LEVEL_LOW)>,
			     <GIC_PPI 10
			(GIC_CPU_MASK_RAW(0xff) | IRQ_TYPE_LEVEL_LOW)>;
	};

	xtal: xtal-clk {
		compatible = "fixed-clock";
		clock-frequency = <24000000>;
		clock-output-names = "xtal";
		#clock-cells = <0>;
	};

	firmware {
		sm: secure-monitor {
			compatible = "amlogic,meson-gx-sm", "amlogic,meson-gxbb-sm";
		};
	};

	efuse: efuse {
		compatible = "amlogic,meson-gx-efuse", "amlogic,meson-gxbb-efuse";
		#address-cells = <1>;
		#size-cells = <1>;

		sn: sn@14 {
			reg = <0x14 0x10>;
		};

		eth_mac: eth_mac@34 {
			reg = <0x34 0x10>;
		};

		bid: bid@46 {
			reg = <0x46 0x30>;
		};
	};

	scpi {
		compatible = "amlogic,meson-gxbb-scpi", "arm,scpi-pre-1.0";
		mboxes = <&mailbox 1 &mailbox 2>;
		shmem = <&cpu_scp_lpri &cpu_scp_hpri>;

		scpi_clocks: clocks {
			compatible = "arm,scpi-clocks";

			scpi_dvfs: scpi_clocks@0 {
				compatible = "arm,scpi-dvfs-clocks";
				#clock-cells = <1>;
				clock-indices = <0>;
				clock-output-names = "vcpu";
			};
		};

		scpi_sensors: sensors {
			compatible = "amlogic,meson-gxbb-scpi-sensors", "arm,scpi-sensors";
			#thermal-sensor-cells = <1>;
		};
	};

	soc {
		compatible = "simple-bus";
		#address-cells = <2>;
		#size-cells = <2>;
		ranges;

		gic: interrupt-controller@2c001000 {
			compatible = "arm,gic-400";
			reg = <0x0 0xffc01000 0 0x1000>,
			      <0x0 0xffc02000 0 0x2000>,
			      <0x0 0xffc04000 0 0x2000>,
			      <0x0 0xffc06000 0 0x2000>;
			interrupt-controller;
			interrupts = <GIC_PPI 9
				(GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_HIGH)>;
			#interrupt-cells = <3>;
			#address-cells = <0>;
		};

		sram: sram@fffa0000 {
			compatible = "amlogic,meson-gx-sram", "amlogic,meson-gxbb-sram", "mmio-sram";
			reg = <0x0 0xfffa0000 0x0 0x48000>;

			#address-cells = <1>;
			#size-cells = <1>;
			ranges = <0 0x0 0xfffa0000 0x48000>;

			cpu_scp_lpri: scp-shmem@0 {
				compatible = "amlogic,meson-gx-scp-shmem", "amlogic,meson-gxbb-scp-shmem";
				reg = <0x47000 0x400>;
			};

			cpu_scp_hpri: scp-shmem@200 {
				compatible = "amlogic,meson-gx-scp-shmem", "amlogic,meson-gxbb-scp-shmem";
				reg = <0x47400 0x400>;
			};
		};

		cbus: cbus@fe000000 {
			compatible = "simple-bus";
			reg = <0x0 0xfe000000 0x0 0x8000>;
			#address-cells = <2>;
			#size-cells = <2>;
			ranges = <0x0 0x0 0x0 0xfe000000 0x0 0x8000>;

			uart_a: serial@1c00 {
				compatible = "amlogic,meson-uart";
				reg = <0x0 0x1c00 0x0 0x14>;
				clocks = <&xtal>;
				status = "disabled";
			};

			uart_b: serial@2000 {
				compatible = "amlogic,meson-uart";
				reg = <0x0 0x2000 0x0 0x14>;
				clocks = <&xtal>;
				status = "disabled";
			};

			pwm_ab: pwm@2400 {
				compatible = "amlogic,meson-v2-pwm";
				reg = <0x0 0x2400  0x0 0x20>,
					<0x0 0x08c4  0x0 0x04>;
				#pwm-cells = <3>;
				status = "disabled";
			};

			pwm_cd: pwm@2800 {
				compatible = "amlogic,meson-v2-pwm";
				reg = <0x0 0x2800  0x0 0x20>,
					<0x0 0x08c8  0x0 0x04>;
				#pwm-cells = <3>;
				status = "disabled";
			};

			pwm_ef: pwm@5400 {
				compatible = "amlogic,meson-v2-pwm";
				reg = <0x0 0x5400  0x0 0x20>,
					<0x0 0x08cc  0x0 0x04>;
				#pwm-cells = <3>;
				status = "disabled";
			};

			ir: ir@8040 {
				compatible = "amlogic,meson-gx-ir", "amlogic,meson-gxbb-ir";
				reg = <0x0 0x8040 0x0 0x40>;
				interrupts = <GIC_SPI 196 IRQ_TYPE_EDGE_RISING>;
				status = "disabled";
			};

			reset: reset-controller@1000 {
				compatible = "amlogic,meson-gx-reset", "amlogic,meson-gxbb-reset";
				reg = <0x0 0x01000 0x0 0x1000>;
				#reset-cells = <1>;
			};

			uart_c: serial@22000 {
				compatible = "amlogic,meson-uart";
				reg = <0x0 0x22000 0x0 0x18>;
				interrupts = <GIC_SPI 93 IRQ_TYPE_EDGE_RISING>;
				clocks = <&xtal>;
				status = "disabled";
			};

			spicc0: spi@3800 {
				compatible = "amlogic,meson-g12a-spicc";
				reg = <0x0 0x3800 0x0 0x44>;
				interrupts = <GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>;
				#address-cells = <1>;
				#size-cells = <0>;
				status = "disabled";
			};

			spifc: spi@14000 {
				compatible = "amlogic,spifc";
				reg = <0x0 0x14000 0x0 0x80>;
				#address-cells = <1>;
				#size-cells = <0>;
				status = "disabled";
					spi-flash@0 {
						reg = <0>;
						spi-tx-bus-width = <4>;
        					spi-rx-bus-width = <4>;
						compatible = "spi-flash";
						status = "okay";
					};
					spi-nand@1 {
						reg = <1>;
						spi-tx-bus-width = <4>;
        					spi-rx-bus-width = <4>;
						compatible = "spi-nand";
						status = "okay";
					};
			};

			watchdog@0f0d0 {
				compatible = "amlogic,meson-a1-wdt";
				reg = <0x0 0x0f0d0 0x0 0x10>;
				clocks = <&xtal>;
				clock-names = "wdt-clk";
			};

			jtag {
				compatible = "amlogic, jtag";
				status = "okay";
				select = "disable"; /* disable/jtag-a/swd-a */
				pinctrl-names="jtag_a_pins", "swd_a_pins";
				pinctrl-0=<&jtag_a_pins>;
				pinctrl-1=<&swd_a_pins>;
			};
		};

		periphs: periphs@ff634000 {
			compatible = "simple-bus";
			reg = <0x0 0xff634000 0x0 0x2000>;
			#address-cells = <2>;
			#size-cells = <2>;
			ranges = <0x0 0x0 0x0 0xff634000 0x0 0x2000>;

			hwrng: rng {
				compatible = "amlogic,meson-rng";
				reg = <0x0 0x0 0x0 0x4>;
			};
		};

		hiubus: hiubus@ff63c000 {
			compatible = "simple-bus";
			reg = <0x0 0xff63c000 0x0 0x2000>;
			#address-cells = <2>;
			#size-cells = <2>;
			ranges = <0x0 0x0 0x0 0xff63c000 0x0 0x2000>;

			mailbox: mailbox@404 {
				compatible = "amlogic,meson-gx-mhu", "amlogic,meson-gxbb-mhu";
				reg = <0 0x404 0 0x4c>;
				interrupts = <0 208 IRQ_TYPE_EDGE_RISING>,
					     <0 209 IRQ_TYPE_EDGE_RISING>,
					     <0 210 IRQ_TYPE_EDGE_RISING>;
				#mbox-cells = <1>;
			};
		};

		clkc: clock-controller@0 {
			compatible = "amlogic,a1-clkc";
			#clock-cells = <1>;
			reg = <0x0 0xfe000800 0x0 0xe4>;
			clocks = <&xtal>;
			clock-names = "xtal";
		};

		i2c0: i2c@fe001400 {
			compatible = "amlogic,meson-a1-i2c";
			reg = <0x0 0xfe001400 0x0 0x24>;
			#address-cells = <2>;
			#size-cells = <0>;
			clocks = <&clkc CLKID_I2C_M_A>;
			clock-names = "clk_i2c";
			status = "disabled";
		};

		i2c1: i2c@fe005c00 {
			compatible = "amlogic,meson-a1-i2c";
			reg = <0x0 0xfe005c00 0x0 0x24>;
			#address-cells = <2>;
			#size-cells = <0>;
			clocks = <&clkc CLKID_I2C_M_B>;
			clock-names = "clk_i2c";
			status = "disabled";
		};

		i2c2: i2c@fe006800 {
			compatible = "amlogic,meson-a1-i2c";
			reg = <0x0 0xfe006800 0x0 0x24>;
			#address-cells = <2>;
			#size-cells = <0>;
			clocks = <&clkc CLKID_I2C_M_C>;
			clock-names = "clk_i2c";
			status = "disabled";
		};

		i2c3: i2c@fe006c00 {
			compatible = "amlogic,meson-a1-i2c";
			reg = <0x0 0xfe006c00 0x0 0x24>;
			#address-cells = <2>;
			#size-cells = <0>;
			clocks = <&clkc CLKID_I2C_M_D>;
			clock-names = "clk_i2c";
			status = "disabled";
		};

		ethmac: ethernet@ff3f0000 {
			compatible = "amlogic,g12a-eth-dwmac";
			phy_cntl1 = <0x41054147>;
			pll_val = <0x9c0040a 0x927e0000 0xac5f49e5>;
			analog_val = <0x20200000 0x0000c000 0x00000023>;
			status = "disabled";
		};

		saradc: adc@ff809000 {
			compatible = "amlogic,meson-saradc";
			reg = <0x0 0xfe002c00 0x0 0x48>;
			status = "disabled";
		};

		nand: nfc@ffe07800 {
			compatible = "amlogic,meson-nfc";
			reg = <0x0 0xFFE07800 0x0 0x200>;
			interrupts = <GIC_SPI 34 IRQ_TYPE_EDGE_RISING>;
			status = "disabled";
			clk_reg = <0 0xFFE07000>;
		};

		apb: apb@ffe01000 {
			compatible = "simple-bus";
			reg = <0x0 0xffe01000 0x0 0x7f000>;
			#address-cells = <2>;
			#size-cells = <2>;
			ranges = <0x0 0x0 0x0 0xffe01000 0x0 0x7f000>;

			sd_emmc_a: mmc@2000 {
				compatible = "";
				reg = <0x0 0x2000 0x0 0x800>;
				interrupts = <GIC_SPI 189 IRQ_TYPE_EDGE_RISING>;
				status = "disabled";
			};

			sd_emmc_b: mmc@4000 {
				compatible = "amlogic,meson-gx-mmc", "amlogic,meson-gxbb-mmc";
				reg = <0x0 0x4000 0x0 0x800>;
				interrupts = <GIC_SPI 190 IRQ_TYPE_EDGE_RISING>;
				status = "disabled";
			};

			sd_emmc_c: mmc@6000 {
				compatible = "amlogic,meson-gx-mmc", "amlogic,meson-gxbb-mmc";
				reg = <0x0 0x6000 0x0 0x800>;
				interrupts = <GIC_SPI 191 IRQ_TYPE_EDGE_RISING>;
				status = "disabled";
			};
		};

		dwc3: dwc3@ff400000 {
			compatible = "snps,dwc3","synopsys,xhci-dwc3";
			status = "disable";
			reg = <0x0 0xff400000 0x0 0x100000>;
			phys = <&usb2_phy_v2>, <&usb3_phy_v2>;
			phy-names = "usb2-phy", "usb3-phy";
		};

		usb2_phy_v2: usb2phy@fe004420 {
			compatible = "amlogic, amlogic-new-usb2-v2";
			status = "disable";
			#address-cells = <2>;
			#size-cells = <2>;
			phy-version = <2>;
			reg = <0x0 0xfe004420 0x0 0x60
					0x0 0xfe000004 0x0 0x100
					0x0 0xfe004000 0x0 0x2000
					0x0 0xfe0008dc 0x0 0x4>;
			dwc2_a_reg = <0xff500000>;
			#phy-cells = <0>;
		};

		usb3_phy_v2: usb3phy@fe004480 {
			compatible = "amlogic, amlogic-new-usb3-v2";
			status = "disable";
			#address-cells = <2>;
			#size-cells = <2>;
			phy-version = <3>;
			reg = <0x0 0xfe004480 0x0 0x20>;
			#phy-cells = <0>;
		};

	};
};
