return 0;
 }
 
+static struct lock_class_key blk_ctrl_genpd_lock_class;
+
 static int imx93_blk_ctrl_probe(struct platform_device *pdev)
 {
        struct device *dev = &pdev->dev;
                        goto cleanup_pds;
                }
 
+               /*
+                * We use runtime PM to trigger power on/off of the upstream GPC
+                * domain, as a strict hierarchical parent/child power domain
+                * setup doesn't allow us to meet the sequencing requirements.
+                * This means we have nested locking of genpd locks, without the
+                * nesting being visible at the genpd level, so we need a
+                * separate lock class to make lockdep aware of the fact that
+                * this are separate domain locks that can be nested without a
+                * self-deadlock.
+                */
+               lockdep_set_class(&domain->genpd.mlock,
+                                 &blk_ctrl_genpd_lock_class);
+
                bc->onecell_data.domains[i] = &domain->genpd;
        }