soc: fsl: qbman: Ensure device cleanup is run for kexec
authorRoy Pledge <roy.pledge@nxp.com>
Tue, 3 Nov 2020 20:05:55 +0000 (15:05 -0500)
committerLi Yang <leoyang.li@nxp.com>
Tue, 6 Apr 2021 16:22:39 +0000 (11:22 -0500)
Make sure that the QBMan device cleanup routines are executed
when the device was previously initialized. This is needed for
kexec since the device will keep it's state from the previous
kernel that was executing.

Signed-off-by: Roy Pledge <roy.pledge@nxp.com>
Signed-off-by: Li Yang <leoyang.li@nxp.com>
drivers/soc/fsl/qbman/bman_portal.c
drivers/soc/fsl/qbman/qman_portal.c

index 923c44063a9a57b3c02b2d0415b01fd54a788e4d..acda8a5637c52066891aa3ab1f480a397cc8372a 100644 (file)
@@ -160,7 +160,7 @@ static int bman_portal_probe(struct platform_device *pdev)
                __bman_portals_probed = 1;
                /* unassigned portal, skip init */
                spin_unlock(&bman_lock);
-               return 0;
+               goto check_cleanup;
        }
 
        cpumask_set_cpu(cpu, &portal_cpus);
@@ -176,6 +176,7 @@ static int bman_portal_probe(struct platform_device *pdev)
        if (!cpu_online(cpu))
                bman_offline_cpu(cpu);
 
+check_cleanup:
        if (__bman_portals_probed == 1 && bman_requires_cleanup()) {
                /*
                 * BMan wasn't reset prior to boot (Kexec for example)
index 5685b67068931a825a6df70449af295da332df16..4274bd1b0f997f70e7940f3df57242f592453d7c 100644 (file)
@@ -302,7 +302,7 @@ static int qman_portal_probe(struct platform_device *pdev)
                __qman_portals_probed = 1;
                /* unassigned portal, skip init */
                spin_unlock(&qman_lock);
-               return 0;
+               goto check_cleanup;
        }
 
        cpumask_set_cpu(cpu, &portal_cpus);
@@ -323,6 +323,7 @@ static int qman_portal_probe(struct platform_device *pdev)
        if (!cpu_online(cpu))
                qman_offline_cpu(cpu);
 
+check_cleanup:
        if (__qman_portals_probed == 1 && qman_requires_cleanup()) {
                /*
                 * QMan wasn't reset prior to boot (Kexec for example)