From: Michael Ellerman <mpe@ellerman.id.au>
To: <linuxppc-dev@ozlabs.org>
Cc: gpiccoli@linux.vnet.ibm.com,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
chzigotzky@xenosoft.de
Subject: [PATCH] powerpc/pci: Only do fixed PHB numbering on powernv
Date: Fri, 5 Aug 2016 16:40:56 +1000 [thread overview]
Message-ID: <1470379256-24266-1-git-send-email-mpe@ellerman.id.au> (raw)
The recent commit 63a72284b159 ("powerpc/pci: Assign fixed PHB number
based on device-tree properties"), added code to read a 64-bit property
from the device tree, and if not found read a 32-bit property (reg).
There was a bug in the 32-bit case, on big endian machines, due to the
use of the 64-bit value to read the 32-bit property. The cast of &prop
means we end up writing to the high 32-bit of prop, leaving the low
32-bits containing whatever junk was on the stack.
If that junk value was non-zero, and < MAX_PHBS, we would end up using
it as the PHB id.
This exposed a second problem, which is that Xorg can't cope with a
domain number > 256.
So for now drop the fallback to reg, and only use "ibm,opal-phbid" for
PHB numbering.
Fixes: 63a72284b159 ("powerpc/pci: Assign fixed PHB number based on device-tree properties")
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
arch/powerpc/kernel/pci-common.c | 24 +++++++++---------------
1 file changed, 9 insertions(+), 15 deletions(-)
This is my bad. Guilherme limited the reg case to pseries only, but I made it
generic. I tested it on G5, Cell etc. which all booted - but that's not really
a good enough test.
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c
index f93942b4b6a6..f9c2ffaa1884 100644
--- a/arch/powerpc/kernel/pci-common.c
+++ b/arch/powerpc/kernel/pci-common.c
@@ -77,29 +77,23 @@ EXPORT_SYMBOL(get_pci_dma_ops);
*/
static int get_phb_number(struct device_node *dn)
{
- int ret, phb_id = -1;
+ int ret, phb_id;
u64 prop;
/*
- * Try fixed PHB numbering first, by checking archs and reading
- * the respective device-tree properties. Firstly, try powernv by
- * reading "ibm,opal-phbid", only present in OPAL environment.
+ * On powernv machines we should have the "ibm,opal-phbid" property, if
+ * so use that so that PHB numbers are predictable.
*/
ret = of_property_read_u64(dn, "ibm,opal-phbid", &prop);
- if (ret)
- ret = of_property_read_u32_index(dn, "reg", 1, (u32 *)&prop);
-
- if (!ret)
+ if (ret == 0) {
phb_id = (int)(prop & (MAX_PHBS - 1));
- /* We need to be sure to not use the same PHB number twice. */
- if ((phb_id >= 0) && !test_and_set_bit(phb_id, phb_bitmap))
- return phb_id;
+ /* Make sure never to use the same PHB number twice. */
+ if (!test_and_set_bit(phb_id, phb_bitmap))
+ return phb_id;
+ }
- /*
- * If not pseries nor powernv, or if fixed PHB numbering tried to add
- * the same PHB number twice, then fallback to dynamic PHB numbering.
- */
+ /* If fixed PHB numbering failed, fallback to dynamic PHB numbering. */
phb_id = find_first_zero_bit(phb_bitmap, MAX_PHBS);
BUG_ON(phb_id >= MAX_PHBS);
set_bit(phb_id, phb_bitmap);
--
2.7.4
next reply other threads:[~2016-08-05 6:41 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-05 6:40 Michael Ellerman [this message]
2016-08-07 23:48 ` [PATCH] powerpc/pci: Only do fixed PHB numbering on powernv Gavin Shan
2016-08-08 13:17 ` Guilherme G. Piccoli
2016-08-09 0:32 ` Michael Ellerman
2016-08-09 2:26 ` Guilherme G. Piccoli
2016-08-09 4:44 ` Michael Ellerman
2016-08-09 11:19 ` Guilherme G. Piccoli
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1470379256-24266-1-git-send-email-mpe@ellerman.id.au \
--to=mpe@ellerman.id.au \
--cc=benh@kernel.crashing.org \
--cc=chzigotzky@xenosoft.de \
--cc=gpiccoli@linux.vnet.ibm.com \
--cc=linuxppc-dev@ozlabs.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).