From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rob Herring Date: Tue, 21 May 2013 17:44:30 -0500 Subject: [U-Boot] [PATCH 1/7] ahci: use ports implemented map instead of num_ports Message-ID: <1369176276-1895-1-git-send-email-robherring2@gmail.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de From: Richard Gibbs 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 --- 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