fsi: core: Disable link when slave init fails
authorEddie James <eajames@linux.ibm.com>
Tue, 9 Jun 2020 21:39:28 +0000 (16:39 -0500)
committerJoel Stanley <joel@jms.id.au>
Thu, 10 Sep 2020 02:52:48 +0000 (12:22 +0930)
In the case that links don't have slaves or fail to be accessed, the
master should disable the link during the scan since it won't be using
the slave.

Signed-off-by: Eddie James <eajames@linux.ibm.com>
Signed-off-by: Joel Stanley <joel@jms.id.au>
drivers/fsi/fsi-core.c

index 0743bba..c9c3842 100644 (file)
@@ -1154,6 +1154,14 @@ static int fsi_master_write(struct fsi_master *master, int link,
        return rc;
 }
 
+static int fsi_master_link_disable(struct fsi_master *master, int link)
+{
+       if (master->link_enable)
+               return master->link_enable(master, link, false);
+
+       return 0;
+}
+
 static int fsi_master_link_enable(struct fsi_master *master, int link)
 {
        if (master->link_enable)
@@ -1192,12 +1200,15 @@ static int fsi_master_scan(struct fsi_master *master)
                }
                rc = fsi_master_break(master, link);
                if (rc) {
+                       fsi_master_link_disable(master, link);
                        dev_dbg(&master->dev,
                                "break to link %d failed: %d\n", link, rc);
                        continue;
                }
 
-               fsi_slave_init(master, link, 0);
+               rc = fsi_slave_init(master, link, 0);
+               if (rc)
+                       fsi_master_link_disable(master, link);
        }
 
        return 0;