diff options
author | Alexey Kardashevskiy <aik@ozlabs.ru> | 2013-09-24 17:22:14 +1000 |
---|---|---|
committer | Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> | 2013-10-04 12:01:21 +0530 |
commit | 10cc042a955af671aaa9fa3b030abad42a47defd (patch) | |
tree | 91873c8a5bb8c45093cee70319a7e322e37bd292 | |
parent | 5962dbf56dbf8028eeb60dbae0d0b5b96a3b28cc (diff) | |
download | SLOF-10cc042a955af671aaa9fa3b030abad42a47defd.zip SLOF-10cc042a955af671aaa9fa3b030abad42a47defd.tar.gz SLOF-10cc042a955af671aaa9fa3b030abad42a47defd.tar.bz2 |
pci: fix interrupt-map for bridges
The previous scheme always put 0 as a parent slot#. However it is
not always the case and QEMU's PCI bridge does not support putting
device at slot#0 as it claims SHPC support for hotplug.
This modifies the interrups map to let the linux guest resolve XICS
global interrupt number correctly.
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
-rw-r--r-- | board-qemu/slof/pci-interrupts.fs | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/board-qemu/slof/pci-interrupts.fs b/board-qemu/slof/pci-interrupts.fs index a12d7bb..e11b779 100644 --- a/board-qemu/slof/pci-interrupts.fs +++ b/board-qemu/slof/pci-interrupts.fs @@ -1,17 +1,26 @@ : pci-gen-irq-map-one ( prop-addr prop-len slot pin -- prop-addr prop-len ) - 2dup + 4 mod ( prop-addr prop-len slot pin parentpin ) - get-node >space - pci-addr2dev + 1- 4 mod 1+ \ do swizzling ( prop-addr prop-len slot pin swizzledpin ) - >r >r >r ( prop-addr prop-len R: swizzledpin pin slot ) + 2dup + 4 mod ( prop-addr prop-len slot pin parentpin ) + >r >r ( prop-addr prop-len slot R: swizzledpin pin ) + + \ Child slot# + B lshift encode-int+ ( prop-addr prop-len R: swizzledpin pin ) + \ Child 64bit BAR (not really used) + 0 encode-64+ + \ Chile pin# + r> encode-int+ ( prop-addr prop-len R: swizzledpin ) - r> B lshift encode-int+ - 0 encode-64+ \ device slot ( prop-addr prop-len R: swizzledpin pin ) - r> encode-int+ \ device pin ( prop-addr prop-len R: swizzledpin ) + \ Parent phandle + get-parent encode-int+ - get-parent encode-int+ \ parent phandle - 0 encode-int+ 0 encode-64+ \ parent slot - r> encode-int+ \ parent swizzled pin ( prop-addr prop-len R: ) + \ Parent slot# + get-node >space + pci-addr2dev B lshift ( prop-addr prop-len parent-slot R: swizzledpin ) + encode-int+ + \ Parent 64bit BAR (not really used) + 0 encode-64+ + \ Parent pin + r> encode-int+ ( prop-addr prop-len R: ) ; : pci-gen-irq-entry ( prop-addr prop-len config-addr -- prop-addr prop-len ) |