/*
 * Copyright (C) 2014, Bin Meng <bmeng.cn@gmail.com>
 *
 * SPDX-License-Identifier:	GPL-2.0+
 */

/dts-v1/;

#include <dt-bindings/interrupt-router/intel-irq.h>

/include/ "skeleton.dtsi"
/include/ "serial.dtsi"
/include/ "keyboard.dtsi"
/include/ "rtc.dtsi"

/ {
	model = "Intel Crown Bay";
	compatible = "intel,crownbay", "intel,queensbay";

	aliases {
		spi0 = "/spi";
	};

	config {
		silent_console = <0>;
	};

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

		cpu@0 {
			device_type = "cpu";
			compatible = "cpu-x86";
			reg = <0>;
			intel,apic-id = <0>;
		};

		cpu@1 {
			device_type = "cpu";
			compatible = "cpu-x86";
			reg = <1>;
			intel,apic-id = <1>;
		};

	};

	gpioa {
		compatible = "intel,ich6-gpio";
		u-boot,dm-pre-reloc;
		reg = <0 0x20>;
		bank-name = "A";
	};

	gpiob {
		compatible = "intel,ich6-gpio";
		u-boot,dm-pre-reloc;
		reg = <0x20 0x20>;
		bank-name = "B";
	};

	chosen {
		/*
		 * By default the legacy superio serial port is used as the
		 * U-Boot serial console. If we want to use UART from Topcliff
		 * PCH as the console, change this property to &pciuart#.
		 *
		 * For example, stdout-path = &pciuart0 will use the first
		 * UART on Topcliff PCH.
		 */
		stdout-path = "/serial";
	};

	spi {
		#address-cells = <1>;
		#size-cells = <0>;
		compatible = "intel,ich-spi";
		spi-flash@0 {
			reg = <0>;
			compatible = "sst,25vf016b", "spi-flash";
			memory-map = <0xffe00000 0x00200000>;
		};
	};

	microcode {
		update@0 {
#include "microcode/m0220661105_cv.dtsi"
		};
	};

	pci {
		#address-cells = <3>;
		#size-cells = <2>;
		compatible = "pci-x86";
		u-boot,dm-pre-reloc;
		ranges = <0x02000000 0x0 0x40000000 0x40000000 0 0x80000000
			  0x42000000 0x0 0xc0000000 0xc0000000 0 0x20000000
			  0x01000000 0x0 0x2000 0x2000 0 0xe000>;

		pcie@17,0 {
			#address-cells = <3>;
			#size-cells = <2>;
			compatible = "pci-bridge";
			u-boot,dm-pre-reloc;
			reg = <0x0000b800 0x0 0x0 0x0 0x0>;

			topcliff@0,0 {
				#address-cells = <3>;
				#size-cells = <2>;
				compatible = "pci-bridge";
				u-boot,dm-pre-reloc;
				reg = <0x00010000 0x0 0x0 0x0 0x0>;

				pciuart0: uart@a,1 {
					compatible = "pci8086,8811.00",
							"pci8086,8811",
							"pciclass,070002",
							"pciclass,0700",
							"x86-uart";
					u-boot,dm-pre-reloc;
					reg = <0x00025100 0x0 0x0 0x0 0x0
					       0x01025110 0x0 0x0 0x0 0x0>;
					reg-shift = <0>;
					clock-frequency = <1843200>;
					current-speed = <115200>;
				};

				pciuart1: uart@a,2 {
					compatible = "pci8086,8812.00",
							"pci8086,8812",
							"pciclass,070002",
							"pciclass,0700",
							"x86-uart";
					u-boot,dm-pre-reloc;
					reg = <0x00025200 0x0 0x0 0x0 0x0
					       0x01025210 0x0 0x0 0x0 0x0>;
					reg-shift = <0>;
					clock-frequency = <1843200>;
					current-speed = <115200>;
				};

				pciuart2: uart@a,3 {
					compatible = "pci8086,8813.00",
							"pci8086,8813",
							"pciclass,070002",
							"pciclass,0700",
							"x86-uart";
					u-boot,dm-pre-reloc;
					reg = <0x00025300 0x0 0x0 0x0 0x0
					       0x01025310 0x0 0x0 0x0 0x0>;
					reg-shift = <0>;
					clock-frequency = <1843200>;
					current-speed = <115200>;
				};

				pciuart3: uart@a,4 {
					compatible = "pci8086,8814.00",
							"pci8086,8814",
							"pciclass,070002",
							"pciclass,0700",
							"x86-uart";
					u-boot,dm-pre-reloc;
					reg = <0x00025400 0x0 0x0 0x0 0x0
					       0x01025410 0x0 0x0 0x0 0x0>;
					reg-shift = <0>;
					clock-frequency = <1843200>;
					current-speed = <115200>;
				};
			};
		};

		irq-router@1f,0 {
			reg = <0x0000f800 0 0 0 0>;
			compatible = "intel,irq-router";
			intel,pirq-config = "pci";
			intel,pirq-link = <0x60 8>;
			intel,pirq-mask = <0xcee0>;
			intel,pirq-routing = <
				/* TunnelCreek PCI devices */
				PCI_BDF(0, 2, 0) INTA PIRQE
				PCI_BDF(0, 3, 0) INTA PIRQF
				PCI_BDF(0, 23, 0) INTA PIRQA
				PCI_BDF(0, 23, 0) INTB PIRQB
				PCI_BDF(0, 23, 0) INTC PIRQC
				PCI_BDF(0, 23, 0) INTD PIRQD
				PCI_BDF(0, 24, 0) INTA PIRQB
				PCI_BDF(0, 24, 0) INTB PIRQC
				PCI_BDF(0, 24, 0) INTC PIRQD
				PCI_BDF(0, 24, 0) INTD PIRQA
				PCI_BDF(0, 25, 0) INTA PIRQC
				PCI_BDF(0, 25, 0) INTB PIRQD
				PCI_BDF(0, 25, 0) INTC PIRQA
				PCI_BDF(0, 25, 0) INTD PIRQB
				PCI_BDF(0, 26, 0) INTA PIRQD
				PCI_BDF(0, 26, 0) INTB PIRQA
				PCI_BDF(0, 26, 0) INTC PIRQB
				PCI_BDF(0, 26, 0) INTD PIRQC
				PCI_BDF(0, 27, 0) INTA PIRQG
				/*
				 * Topcliff PCI devices
				 *
				 * Note on the Crown Bay board, Topcliff chipset
				 * is connected to TunnelCreek PCIe port 0, so
				 * its bus number is 1 for its PCIe port and 2
				 * for its PCI devices per U-Boot current PCI
				 * bus enumeration algorithm.
				 */
				PCI_BDF(1, 0, 0) INTA PIRQA
				PCI_BDF(2, 0, 1) INTA PIRQA
				PCI_BDF(2, 0, 2) INTA PIRQA
				PCI_BDF(2, 2, 0) INTB PIRQD
				PCI_BDF(2, 2, 1) INTB PIRQD
				PCI_BDF(2, 2, 2) INTB PIRQD
				PCI_BDF(2, 2, 3) INTB PIRQD
				PCI_BDF(2, 2, 4) INTB PIRQD
				PCI_BDF(2, 4, 0) INTC PIRQC
				PCI_BDF(2, 4, 1) INTC PIRQC
				PCI_BDF(2, 6, 0) INTD PIRQB
				PCI_BDF(2, 8, 0) INTA PIRQA
				PCI_BDF(2, 8, 1) INTA PIRQA
				PCI_BDF(2, 8, 2) INTA PIRQA
				PCI_BDF(2, 8, 3) INTA PIRQA
				PCI_BDF(2, 10, 0) INTB PIRQD
				PCI_BDF(2, 10, 1) INTB PIRQD
				PCI_BDF(2, 10, 2) INTB PIRQD
				PCI_BDF(2, 10, 3) INTB PIRQD
				PCI_BDF(2, 10, 4) INTB PIRQD
				PCI_BDF(2, 12, 0) INTC PIRQC
				PCI_BDF(2, 12, 1) INTC PIRQC
				PCI_BDF(2, 12, 2) INTC PIRQC
				PCI_BDF(2, 12, 3) INTC PIRQC
				PCI_BDF(2, 12, 4) INTC PIRQC
			>;
		};
	};

};
