From patchwork Tue Sep 24 07:22:14 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexey Kardashevskiy X-Patchwork-Id: 277359 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from ozlabs.org (localhost [IPv6:::1]) by ozlabs.org (Postfix) with ESMTP id 4E40A2C01E4 for ; Tue, 24 Sep 2013 17:22:54 +1000 (EST) Received: from e23smtp04.au.ibm.com (e23smtp04.au.ibm.com [202.81.31.146]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "e23smtp04.au.ibm.com", Issuer "GeoTrust SSL CA" (not verified)) by ozlabs.org (Postfix) with ESMTPS id 1FCDA2C00B9 for ; Tue, 24 Sep 2013 17:22:25 +1000 (EST) Received: from /spool/local by e23smtp04.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 24 Sep 2013 17:22:24 +1000 Received: from d23dlp03.au.ibm.com (202.81.31.214) by e23smtp04.au.ibm.com (202.81.31.210) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Tue, 24 Sep 2013 17:22:23 +1000 Received: from d23relay04.au.ibm.com (d23relay04.au.ibm.com [9.190.234.120]) by d23dlp03.au.ibm.com (Postfix) with ESMTP id 2E2B73578040 for ; Tue, 24 Sep 2013 17:22:20 +1000 (EST) Received: from d23av03.au.ibm.com (d23av03.au.ibm.com [9.190.234.97]) by d23relay04.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r8O75euZ56885340 for ; Tue, 24 Sep 2013 17:05:41 +1000 Received: from d23av03.au.ibm.com (localhost [127.0.0.1]) by d23av03.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id r8O7MHKc028182 for ; Tue, 24 Sep 2013 17:22:17 +1000 Received: from ozlabs.au.ibm.com (ozlabs.au.ibm.com [9.190.163.12]) by d23av03.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id r8O7MHAm028178; Tue, 24 Sep 2013 17:22:17 +1000 Received: from bran.ozlabs.ibm.com (haven.au.ibm.com [9.190.164.82]) by ozlabs.au.ibm.com (Postfix) with ESMTP id 66093A0180; Tue, 24 Sep 2013 17:22:17 +1000 (EST) Received: from ka1.ozlabs.ibm.com (ka1.ozlabs.ibm.com [10.61.145.11]) by bran.ozlabs.ibm.com (Postfix) with ESMTP id 0D0FB16AB34; Tue, 24 Sep 2013 17:22:16 +1000 (EST) From: Alexey Kardashevskiy To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH v2] pci: fix interrupt-map for bridges Date: Tue, 24 Sep 2013 17:22:14 +1000 Message-Id: <1380007334-466-1-git-send-email-aik@ozlabs.ru> X-Mailer: git-send-email 1.8.4.rc4 X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13092407-9264-0000-0000-0000049712CD Cc: Alexey Kardashevskiy , Nikunj A Dadhania X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.16rc2 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" 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 --- Changes: v2: * removed redundand r-stack push-pop --- This is the example of working system: [root@erif_root pci@1]# lspci 0001:00:01.0 PCI bridge: Red Hat, Inc. Device 0001 0001:01:02.0 PCI bridge: Red Hat, Inc. Device 0001 0001:01:03.0 PCI bridge: Red Hat, Inc. Device 0001 0001:02:01.0 Ethernet controller: Intel Corporation 82571EB Gigabit Ethernet Controller (Copper) (rev 06) 0001:02:02.0 Ethernet controller: Intel Corporation 82571EB Gigabit Ethernet Controller (Copper) (rev 06) 0001:03:01.0 Ethernet controller: Intel Corporation 82571EB Gigabit Ethernet Controller (Copper) (rev 06) 0001:03:02.0 Ethernet controller: Intel Corporation 82571EB Gigabit Ethernet Controller (Copper) (rev 06) [root@erif_root pci@1]# pwd /proc/device-tree/pci@80000002000000f/pci@1 [root@erif_root pci@1]# hexdump -e '9/4 "%08x "' -e '"\n"' i*map 00001000 00000000 00000000 00000001 3e57f7e0 00000800 00000000 00000000 00000003 00001000 00000000 00000000 00000002 3e57f7e0 00000800 00000000 00000000 00000000 00001000 00000000 00000000 00000003 3e57f7e0 00000800 00000000 00000000 00000001 00001000 00000000 00000000 00000004 3e57f7e0 00000800 00000000 00000000 00000002 00001800 00000000 00000000 00000001 3e57f7e0 00000800 00000000 00000000 00000000 00001800 00000000 00000000 00000002 3e57f7e0 00000800 00000000 00000000 00000001 00001800 00000000 00000000 00000003 3e57f7e0 00000800 00000000 00000000 00000002 00001800 00000000 00000000 00000004 3e57f7e0 00000800 00000000 00000000 00000003 [root@erif_root pci@1]# cd pci@2/ [root@erif_root pci@2]# hexdump -e '9/4 "%08x "' -e '"\n"' i*map 00000800 00000000 00000000 00000001 3e5a86f0 00001000 00000000 00000000 00000002 00000800 00000000 00000000 00000002 3e5a86f0 00001000 00000000 00000000 00000003 00000800 00000000 00000000 00000003 3e5a86f0 00001000 00000000 00000000 00000000 00000800 00000000 00000000 00000004 3e5a86f0 00001000 00000000 00000000 00000001 00001000 00000000 00000000 00000001 3e5a86f0 00001000 00000000 00000000 00000003 00001000 00000000 00000000 00000002 3e5a86f0 00001000 00000000 00000000 00000000 00001000 00000000 00000000 00000003 3e5a86f0 00001000 00000000 00000000 00000001 00001000 00000000 00000000 00000004 3e5a86f0 00001000 00000000 00000000 00000002 [root@erif_root pci@2]# cd ethernet@ ethernet@1/ ethernet@2/ [root@erif_root pci@2]# cd ethernet@1/ [root@erif_root ethernet@1]# lsprop reg reg 00020800 00000000 00000000 00000000 00000000 02020810 00000000 00000000 00000000 00020000 02020814 00000000 00000000 00000000 00020000 01020818 00000000 00000000 00000000 00000020 02020830 00000000 00000000 00000000 00020000 [root@erif_root ethernet@1]# lsprop interrupts interrupts 00000002 --- board-qemu/slof/pci-interrupts.fs | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 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 ) + 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 ) + + \ Parent phandle + get-parent encode-int+ + + \ Parent slot# 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 ) - - 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 ) - - 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: ) + 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 )