• Tejun Heo's avatar
    ahci: reimplement port_map handling · 7a234aff
    Tejun Heo authored
    Reimplement port_map handling such that
    1. Non-zero PORTS_IMPL value is always examined and used if consistent
       with cap.n_ports.
    2. When PI and cat.n_ports are inconsistent, honor cap.n_ports and
       force port_map to be ((1 << cap.n_ports) - 1).
    3. There were two separate places dealing with port_map.  Unify them
       to one.
    As all newer ahci chips seem to get PI correct and older ones usually
    have zero PI.  Controllers with holes in PI are very unlikely to screw
    up PI, so #2 makes more sense than following inconsistent PI.
    Without this change, not setting ATA_FLAG_HONOR_PI when it's needed
    results in weird detection failure.  This changed logic should be able
    to handle all known cases correctly automatically.
    Verified on ICH6 (reports 0 PI), ICH8 (with holes in port_map), ICH9,
    JMB360 and JMB363.
    Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
    Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
ahci.c 50.6 KB