From: Richard Gibbs <richard.gi...@calxeda.com> The AHCI driver was incorrectly using the Capabilities register NP (number of ports) field to determine which ports to activate. This commit changes it to correctly use the PORTS_IMPL register as a port map.
Signed-off-by: Richard Gibbs <richard.gi...@calxeda.com> --- drivers/block/ahci.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/block/ahci.c b/drivers/block/ahci.c index cab7f8c..b89be06 100644 --- a/drivers/block/ahci.c +++ b/drivers/block/ahci.c @@ -136,6 +136,7 @@ static int ahci_host_init(struct ahci_probe_ent *probe_ent) u32 tmp, cap_save, cmd; int i, j; volatile u8 *port_mmio; + u32 port_map; debug("ahci_host_init: start\n"); @@ -177,6 +178,7 @@ static int ahci_host_init(struct ahci_probe_ent *probe_ent) #endif probe_ent->cap = readl(mmio + HOST_CAP); probe_ent->port_map = readl(mmio + HOST_PORTS_IMPL); + port_map = probe_ent->port_map; probe_ent->n_ports = (probe_ent->cap & 0x1f) + 1; debug("cap 0x%x port_map 0x%x n_ports %d\n", @@ -186,6 +188,8 @@ static int ahci_host_init(struct ahci_probe_ent *probe_ent) probe_ent->n_ports = CONFIG_SYS_SCSI_MAX_SCSI_ID; for (i = 0; i < probe_ent->n_ports; i++) { + if (!(port_map & (1 << i))) + continue; probe_ent->port[i].port_mmio = ahci_port_base((u32) mmio, i); port_mmio = (u8 *) probe_ent->port[i].port_mmio; ahci_setup_port(&probe_ent->port[i], (unsigned long)mmio, i); -- 1.8.1.2 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot