mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-11 22:03:15 +00:00
cdb6babec6
So far interrupt routing works pretty well for any on-chip devices on Intel Crown Bay. When inserting any PCIe card to any PCIe slot, Linux kernel is smart enough to do interrupt swizzling and figure out device's irq using its parent bridge's interrupt routing info all the way up to its root port. In U-Boot all PCIe root ports' interrupts were routed to PIRQ E/F/G/H before, while actually all PCIe downstream ports received INTx are routed to PIRQ A/B/C/D directly and not configurable. Now we change this mapping so that any external PCIe device can work correctly. Signed-off-by: Bin Meng <bmeng.cn@gmail.com> Acked-by: Simon Glass <sjg@chromium.org>
227 lines
5 KiB
Text
227 lines
5 KiB
Text
/*
|
|
* 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/ "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 = "intel,pci";
|
|
device_type = "pci";
|
|
|
|
pcie@17,0 {
|
|
#address-cells = <3>;
|
|
#size-cells = <2>;
|
|
compatible = "intel,pci";
|
|
device_type = "pci";
|
|
|
|
topcliff@0,0 {
|
|
#address-cells = <3>;
|
|
#size-cells = <2>;
|
|
compatible = "intel,pci";
|
|
device_type = "pci";
|
|
|
|
pciuart0: uart@a,1 {
|
|
compatible = "pci8086,8811.00",
|
|
"pci8086,8811",
|
|
"pciclass,070002",
|
|
"pciclass,0700",
|
|
"x86-uart";
|
|
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";
|
|
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";
|
|
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";
|
|
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 = <0xdee0>;
|
|
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
|
|
>;
|
|
};
|
|
};
|
|
|
|
};
|