On Tue, 2015-04-07 at 17:24 -0700, Yinghai Lu wrote: > For device resource PREF bit setting under bridge 64-bit pref resource, > we need to make sure only set PREF for 64bit resource, so set IORESOUCE_MEM_64 > for 64bit resource during of device resource flags parsing. > Link: https://bugzilla.kernel.org/show_bug.cgi?id=96261 > Link: https://bugzilla.kernel.org/show_bug.cgi?id=96241 These patches (from the above BZ) aren't right for one thing: You shouldn't set the IORESOURCE_PREFETCH in the resource itself. This *will* break stuff. You can put the resource in a prefetchable region indeed, if you are on a PCIe-only path (though we should have some arch flag to check that the host bridge indeed doesn't do any prefetch, on powerpc we are good there). But you can't set the "prefetch" bit on the resource because that would be losing the indication that this resource has side effects. This bit is used in some cases to enable store gathering when mmap'ing via sysfs and can be used for similar uses by drivers. It's one thing to say "you can put non-prefetch BARs in prefetch windows on that path", it's another one to completely make the BAR looks like it's prefetchable when it's not. Cheers, Ben. > Signed-off-by: Yinghai Lu <yinghai@xxxxxxxxxx> > Cc: Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx> > Cc: Paul Mackerras <paulus@xxxxxxxxx> > Cc: Michael Ellerman <mpe@xxxxxxxxxxxxxx> > Cc: Gavin Shan <gwshan@xxxxxxxxxxxxxxxxxx> > Cc: Yijing Wang <wangyijing@xxxxxxxxxx> > Cc: Anton Blanchard <anton@xxxxxxxxx> > Cc: linuxppc-dev@xxxxxxxxxxxxxxxx > > --- > arch/powerpc/kernel/pci_of_scan.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > Index: linux-2.6/arch/powerpc/kernel/pci_of_scan.c > =================================================================== > --- linux-2.6.orig/arch/powerpc/kernel/pci_of_scan.c > +++ linux-2.6/arch/powerpc/kernel/pci_of_scan.c > @@ -44,8 +44,10 @@ static unsigned int pci_parse_of_flags(u > > if (addr0 & 0x02000000) { > flags = IORESOURCE_MEM | PCI_BASE_ADDRESS_SPACE_MEMORY; > - flags |= (addr0 >> 22) & PCI_BASE_ADDRESS_MEM_TYPE_64; > flags |= (addr0 >> 28) & PCI_BASE_ADDRESS_MEM_TYPE_1M; > + if (addr0 & 0x01000000) > + flags |= IORESOURCE_MEM_64 > + | PCI_BASE_ADDRESS_MEM_TYPE_64; > if (addr0 & 0x40000000) > flags |= IORESOURCE_PREFETCH > | PCI_BASE_ADDRESS_MEM_PREFETCH; -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html