]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
fsl-mc: Switch over to per-device platform MSI
authorMarc Zyngier <maz@kernel.org>
Tue, 24 Feb 2026 10:09:34 +0000 (10:09 +0000)
committerChristophe Leroy (CS GROUP) <chleroy@kernel.org>
Thu, 26 Feb 2026 09:48:18 +0000 (10:48 +0100)
Obtain the msi-parent irqdomain instead of the fsl_mc domain,
which magically engages the per-device infrastructure.

Additionally, simplify the overly complicated error handling.

Reviewed-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Tested-by: Ioana Ciornei <ioana.ciornei@nxp.com> # LX2160ARDB, LS2088ARDB
Tested-by: Sascha Bischoff <sascha.bischoff@arm.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Acked-by: Thomas Gleixner <tglx@kernel.org>
Link: https://lore.kernel.org/r/20260224100936.3752303-5-maz@kernel.org
Signed-off-by: Christophe Leroy (CS GROUP) <chleroy@kernel.org>
drivers/bus/fsl-mc/dprc-driver.c

index db67442addad21b218ce8d8fc91c2254899d698b..a85706826fa06f3fba811288481bef68d448ade4 100644 (file)
@@ -609,9 +609,8 @@ int dprc_setup(struct fsl_mc_device *mc_dev)
 {
        struct device *parent_dev = mc_dev->dev.parent;
        struct fsl_mc_bus *mc_bus = to_fsl_mc_bus(mc_dev);
-       struct irq_domain *mc_msi_domain;
+       struct irq_domain *mc_msi_domain = NULL;
        bool mc_io_created = false;
-       bool msi_domain_set = false;
        bool uapi_created = false;
        u16 major_ver, minor_ver;
        size_t region_size;
@@ -652,14 +651,12 @@ int dprc_setup(struct fsl_mc_device *mc_dev)
                uapi_created = true;
        }
 
-       mc_msi_domain = fsl_mc_find_msi_domain(&mc_dev->dev);
-       if (!mc_msi_domain) {
+       mc_msi_domain = fsl_mc_get_msi_parent(&mc_dev->dev);
+       if (!mc_msi_domain)
                dev_warn(&mc_dev->dev,
                         "WARNING: MC bus without interrupt support\n");
-       } else {
+       else
                dev_set_msi_domain(&mc_dev->dev, mc_msi_domain);
-               msi_domain_set = true;
-       }
 
        error = dprc_open(mc_dev->mc_io, 0, mc_dev->obj_desc.id,
                          &mc_dev->mc_handle);
@@ -699,8 +696,7 @@ error_cleanup_open:
        (void)dprc_close(mc_dev->mc_io, 0, mc_dev->mc_handle);
 
 error_cleanup_msi_domain:
-       if (msi_domain_set)
-               dev_set_msi_domain(&mc_dev->dev, NULL);
+       dev_set_msi_domain(&mc_dev->dev, NULL);
 
        if (mc_io_created) {
                fsl_destroy_mc_io(mc_dev->mc_io);