diff --recursive -u ./clean/linux-4.9.80/drivers/ata/libahci.c linux-4.9.80/drivers/ata/libahci.c --- ./clean/linux-4.9.80/drivers/ata/libahci.c 2018-02-03 11:05:43.000000000 -0500 +++ linux-4.9.80/drivers/ata/libahci.c 2018-02-07 18:02:32.526535910 -0500 @@ -537,8 +537,12 @@ } /* fabricate port_map from cap.nr_ports for < AHCI 1.3 */ - if (!port_map && vers < 0x10300) { - port_map = (1 << ahci_nr_ports(cap)) - 1; + if (!port_map) { // && vers < 0x10300) { + printk("%s: saved_port=%02x\n", __func__, hpriv->saved_port_map); + writel(0x1, mmio + HOST_PORTS_IMPL); + port_map = readl(mmio + HOST_PORTS_IMPL); + + //port_map = (1 << ahci_nr_ports(cap)) - 1; dev_warn(dev, "forcing PORTS_IMPL to 0x%x\n", port_map); /* write the fixed up value to the PI register */