aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Kardashevskiy <aik@ozlabs.ru>2013-09-24 17:22:14 +1000
committerNikunj A Dadhania <nikunj@linux.vnet.ibm.com>2013-10-04 12:01:21 +0530
commit10cc042a955af671aaa9fa3b030abad42a47defd (patch)
tree91873c8a5bb8c45093cee70319a7e322e37bd292
parent5962dbf56dbf8028eeb60dbae0d0b5b96a3b28cc (diff)
downloadSLOF-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.fs29
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 )