ata: ahci: Loop over the actual number of ports, not the maximum
authorTuomas Tynkkynen <tuomas.tynkkynen@iki.fi>
Wed, 12 Sep 2018 22:28:54 +0000 (01:28 +0300)
committerTom Rini <trini@konsulko.com>
Wed, 26 Sep 2018 01:49:18 +0000 (21:49 -0400)
The loop in ahci_start_ports() is looping over the maximum number of
SCSI devices in the system, which can be larger than the amount of ports
a particular AHCI controller has. The extra looping isn't directly
harmful because the link_port_map bitmap won't have the bit set for a
nonexistent port, but it is wasteful. Replace the loop limit with the
port count of the AHCI controller instead.

Signed-off-by: Tuomas Tynkkynen <tuomas.tynkkynen@iki.fi>
Reviewed-by: Simon Glass <sjg@chromium.org>
drivers/ata/ahci.c

index c35912bd3341f97423d6bde0ab7ed71b95ed592b..333f0457f6fb4d9031f9782d1d138b679fb2e8fd 100644 (file)
@@ -980,7 +980,7 @@ static int ahci_start_ports(struct ahci_uc_priv *uc_priv)
 
        linkmap = uc_priv->link_port_map;
 
-       for (i = 0; i < CONFIG_SYS_SCSI_MAX_SCSI_ID; i++) {
+       for (i = 0; i < uc_priv->n_ports; i++) {
                if (((linkmap >> i) & 0x01)) {
                        if (ahci_port_start(uc_priv, (u8) i)) {
                                printf("Can not start port %d\n", i);