static int zynqmp_gpd_attach_dev(struct generic_pm_domain *domain,
                                 struct device *dev)
 {
+       struct device_link *link;
        int ret;
        struct zynqmp_pm_domain *pd;
 
        pd = container_of(domain, struct zynqmp_pm_domain, gpd);
 
+       link = device_link_add(dev, &domain->dev, DL_FLAG_SYNC_STATE_ONLY);
+       if (!link)
+               dev_dbg(&domain->dev, "failed to create device link for %s\n",
+                       dev_name(dev));
+
        /* If this is not the first device to attach there is nothing to do */
        if (domain->device_count)
                return 0;
        return 0;
 }
 
+static void zynqmp_gpd_sync_state(struct device *dev)
+{
+       int ret;
+
+       ret = zynqmp_pm_init_finalize();
+       if (ret)
+               dev_warn(dev, "failed to release power management to firmware\n");
+}
+
 static struct platform_driver zynqmp_power_domain_driver = {
        .driver = {
                .name = "zynqmp_power_controller",
+               .sync_state = zynqmp_gpd_sync_state,
        },
        .probe = zynqmp_gpd_probe,
        .remove = zynqmp_gpd_remove,