ionic: refill lif identity after fw_up
authorShannon Nelson <snelson@pensando.io>
Thu, 1 Oct 2020 16:22:44 +0000 (09:22 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 2 Oct 2020 23:30:01 +0000 (16:30 -0700)
After we do a fw upgrade and refill the ionic->ident.dev, we
also need to update the other identity info.  Since the lif
identity needs to be updated each time the ionic identity is
refreshed, we can pull it into ionic_identify().

The debugfs entry is moved so that it doesn't cause an
error message when the data is refreshed after the fw upgrade.

Signed-off-by: Shannon Nelson <snelson@pensando.io>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/pensando/ionic/ionic_bus_pci.c
drivers/net/ethernet/pensando/ionic/ionic_lif.c
drivers/net/ethernet/pensando/ionic/ionic_main.c

index 2749ce009ebc1192502f5a329e02b12104cd4ca6..b0d8499d373bd49db56fdcdf12dfa6029ee36151 100644 (file)
@@ -266,6 +266,7 @@ static int ionic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
                dev_err(dev, "Cannot identify device: %d, aborting\n", err);
                goto err_out_teardown;
        }
+       ionic_debugfs_add_ident(ionic);
 
        err = ionic_init(ionic);
        if (err) {
@@ -286,14 +287,7 @@ static int ionic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
                goto err_out_reset;
        }
 
-       /* Configure LIFs */
-       err = ionic_lif_identify(ionic, IONIC_LIF_TYPE_CLASSIC,
-                                &ionic->ident.lif);
-       if (err) {
-               dev_err(dev, "Cannot identify LIFs: %d, aborting\n", err);
-               goto err_out_port_reset;
-       }
-
+       /* Allocate and init the LIF */
        err = ionic_lif_size(ionic);
        if (err) {
                dev_err(dev, "Cannot size LIF: %d, aborting\n", err);
index 2b6cd60095b1baa16153a84ddb9a0b98ba9e6e29..fcf5b00d1c331ec6f7d42507c4db65e222774ecd 100644 (file)
@@ -2556,7 +2556,15 @@ static void ionic_lif_handle_fw_up(struct ionic_lif *lif)
        dev_info(ionic->dev, "FW Up: restarting LIFs\n");
 
        ionic_init_devinfo(ionic);
-       ionic_port_init(ionic);
+       err = ionic_identify(ionic);
+       if (err)
+               goto err_out;
+       err = ionic_port_identify(ionic);
+       if (err)
+               goto err_out;
+       err = ionic_port_init(ionic);
+       if (err)
+               goto err_out;
        err = ionic_qcqs_alloc(lif);
        if (err)
                goto err_out;
index c7a67c5cda4238ce21db474e34d065d9e9e8962c..c21195be59e18d00c3faaea820a9590b8e11ac30 100644 (file)
@@ -429,17 +429,23 @@ int ionic_identify(struct ionic *ionic)
                sz = min(sizeof(ident->dev), sizeof(idev->dev_cmd_regs->data));
                memcpy_fromio(&ident->dev, &idev->dev_cmd_regs->data, sz);
        }
-
        mutex_unlock(&ionic->dev_cmd_lock);
 
-       if (err)
-               goto err_out_unmap;
+       if (err) {
+               dev_err(ionic->dev, "Cannot identify ionic: %dn", err);
+               goto err_out;
+       }
 
-       ionic_debugfs_add_ident(ionic);
+       err = ionic_lif_identify(ionic, IONIC_LIF_TYPE_CLASSIC,
+                                &ionic->ident.lif);
+       if (err) {
+               dev_err(ionic->dev, "Cannot identify LIFs: %d\n", err);
+               goto err_out;
+       }
 
        return 0;
 
-err_out_unmap:
+err_out:
        return err;
 }