/*
 * 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";
	};

	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>;
				};
			};
		};

		pch@1f,0 {
			reg = <0x0000f800 0 0 0 0>;
			compatible = "intel,pch7";

			irq-router {
				compatible = "intel,queensbay-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
				>;
			};

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

};
