/*
 * 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"
/include/ "tsc_timer.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",
							"ns16550";
					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",
							"ns16550";
					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",
							"ns16550";
					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",
							"ns16550";
					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
			>;
		};
	};

};
