• Tejun Heo's avatar
    ahci: fix CAP.NP and PI handling · 837f5f8f
    Tejun Heo authored
    AHCI uses CAP.NP to indicate the number of ports and PI to tell which
    ports are enabled.  The only requirement is that the number of ports
    indicated by CAP.NP should equal or be higher than the number of
    enabled ports in PI.
    CAP.NP and PI carry duplicate information and there have been some
    interesting cases.  Some early AHCI controllers didn't set PI at all
    and just implement from port 0 to CAP.NP.  An ICH8 board which wired
    four out of six available ports had 3 (4 ports) for CAP.NP and 0x33
    for PI.  While ESB2 has less bits set in PI than the value in CAP.NP.
    Till now, ahci driver assumed that PI is invalid if it doesn't match
    CAP.NP exactly.  This violates AHCI standard and the driver ends up
    accessing unmimplemented ports on ESB2.
    This patch updates CAP.NP and PI handling such that PI can have less
    number of bits set than indicated in CAP.NP and the highest port is
    determined as the maximum port of what CAP.NP and PI indicate.
    Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
    Cc: Jan Beulich <jbeulich@novell.com>
    Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
ahci.c 62.6 KB