• B
    PCI: treat mem BAR type "11" (reserved) as 32-bit, not 64-bit, BAR · 8d6a6a47
    Bjorn Helgaas 提交于
    This fixes a minor regression where broken PCI devices that use the
    reserved "11" memory BAR type worked before e354597c but not after.
    
    The low four bits of a memory BAR are "PTT0" where P=1 for prefetchable
    BARs, and TT is as follows:
    
      00  32-bit BAR, anywhere in lower 4GB
      01  anywhere below 1MB (reserved as of PCI 2.2)
      10  64-bit BAR
      11  reserved
    
    Prior to e354597c, we treated "0100" as a 64-bit BAR and all others,
    including prefetchable 64-bit BARs ("1100") as 32-bit BARs.  The e354597c
    fix, which appeared in 2.6.28, treats "x1x0" as 64-bit BARs, so the
    reserved "x110" types are treated as 64-bit instead of 32-bit.
    
    This patch returns to treating the reserved "11" type as a 32-bit BAR and
    adds a warning if we see it.
    
    It also logs a note if we see a 1M BAR.  This is not a warning, because
    such hardware conforms to pre-PCI 2.2 spec, but I think it's worth noting
    because Linux ignores the 1M restriction if it ever has to assign the BAR.
    
    CC: Peter Chubb <peterc@gelato.unsw.edu.au>
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=35952Reported-by: NJan Zwiegers <jan@radicalsystems.co.za>
    Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
    Signed-off-by: NJesse Barnes <jbarnes@virtuousgeek.org>
    8d6a6a47
probe.c 38.2 KB