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

/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 Cougar Canyon 2";
	compatible = "intel,cougarcanyon2", "intel,chiefriver";

	aliases {
		spi0 = &spi0;
	};

	config {
		silent_console = <0>;
	};

	chosen {
		stdout-path = "/serial";
	};

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

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

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

		cpu@2 {
			device_type = "cpu";
			compatible = "intel,core-gen3";
			reg = <2>;
			intel,apic-id = <2>;
		};

		cpu@3 {
			device_type = "cpu";
			compatible = "intel,core-gen3";
			reg = <3>;
			intel,apic-id = <3>;
		};
	};

	microcode {
		update@0 {
#include "microcode/m12306a2_00000008.dtsi"
		};
		update@1 {
#include "microcode/m12306a4_00000007.dtsi"
		};
		update@2 {
#include "microcode/m12306a5_00000007.dtsi"
		};
		update@3 {
#include "microcode/m12306a8_00000010.dtsi"
		};
		update@4 {
#include "microcode/m12306a9_0000001b.dtsi"
		};
	};

	fsp {
		compatible = "intel,ivybridge-fsp";
		fsp,enable-ht;
	};

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

		pch@1f,0 {
			reg = <0x0000f800 0 0 0 0>;
			compatible = "intel,bd82x6x";
			u-boot,dm-pre-reloc;
			#address-cells = <1>;
			#size-cells = <1>;

			irq-router {
				compatible = "intel,irq-router";
				intel,pirq-config = "pci";
				intel,actl-8bit;
				intel,actl-addr = <0x44>;
				intel,pirq-link = <0x60 8>;
				intel,pirq-regmap = <
					PIRQA 0
					PIRQB 1
					PIRQC 2
					PIRQD 3
					PIRQE 8
					PIRQF 9
					PIRQG 10
					PIRQH 11
				>;
				intel,pirq-mask = <0xcee0>;
				intel,pirq-routing = <
					/* Panther Point PCI devices */
					PCI_BDF(0, 2, 0) INTA PIRQA
					PCI_BDF(0, 20, 0) INTA PIRQA
					PCI_BDF(0, 22, 0) INTA PIRQA
					PCI_BDF(0, 22, 1) INTB PIRQB
					PCI_BDF(0, 22, 2) INTC PIRQC
					PCI_BDF(0, 22, 3) INTD PIRQD
					PCI_BDF(0, 25, 0) INTA PIRQA
					PCI_BDF(0, 26, 0) INTA PIRQA
					PCI_BDF(0, 27, 0) INTB PIRQA
					PCI_BDF(0, 28, 0) INTA PIRQA
					PCI_BDF(0, 28, 1) INTB PIRQB
					PCI_BDF(0, 28, 2) INTC PIRQC
					PCI_BDF(0, 28, 3) INTD PIRQD
					PCI_BDF(0, 28, 4) INTA PIRQA
					PCI_BDF(0, 28, 5) INTB PIRQB
					PCI_BDF(0, 28, 6) INTC PIRQC
					PCI_BDF(0, 28, 7) INTD PIRQD
					PCI_BDF(0, 29, 0) INTA PIRQA
					PCI_BDF(0, 31, 2) INTB PIRQB
					PCI_BDF(0, 31, 3) INTC PIRQC
					PCI_BDF(0, 31, 5) INTB PIRQB
					PCI_BDF(0, 31, 6) INTC PIRQC
				>;
			};

			spi0: spi {
				#address-cells = <1>;
				#size-cells = <0>;
				compatible = "intel,ich9-spi";
				intel,spi-lock-down;

				spi-flash@0 {
					reg = <0>;
					compatible = "winbond,w25q64bv", "spi-flash";
					memory-map = <0xff800000 0x00800000>;
				};
			};

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

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

			gpioc {
				compatible = "intel,ich6-gpio";
				u-boot,dm-pre-reloc;
				reg = <0x40 0x10>;
				bank-name = "C";
			};
		};
	};

};
