char **proxy_clk_names;
        char **reset_clk_names;
        char **active_clk_names;
+       char **active_pd_names;
        char **proxy_pd_names;
        int version;
        bool need_mem_protection;
        struct clk *active_clks[8];
        struct clk *reset_clks[4];
        struct clk *proxy_clks[4];
+       struct device *active_pds[1];
        struct device *proxy_pds[3];
        int active_clk_count;
        int reset_clk_count;
        int proxy_clk_count;
+       int active_pd_count;
        int proxy_pd_count;
 
        struct reg_info active_regs[1];
 
        qcom_q6v5_prepare(&qproc->q6v5);
 
+       ret = q6v5_pds_enable(qproc, qproc->active_pds, qproc->active_pd_count);
+       if (ret < 0) {
+               dev_err(qproc->dev, "failed to enable active power domains\n");
+               goto disable_irqs;
+       }
+
        ret = q6v5_pds_enable(qproc, qproc->proxy_pds, qproc->proxy_pd_count);
        if (ret < 0) {
                dev_err(qproc->dev, "failed to enable proxy power domains\n");
-               goto disable_irqs;
+               goto disable_active_pds;
        }
 
        ret = q6v5_regulator_enable(qproc, qproc->proxy_regs,
                               qproc->proxy_reg_count);
 disable_proxy_pds:
        q6v5_pds_disable(qproc, qproc->proxy_pds, qproc->proxy_pd_count);
+disable_active_pds:
+       q6v5_pds_disable(qproc, qproc->active_pds, qproc->active_pd_count);
 disable_irqs:
        qcom_q6v5_unprepare(&qproc->q6v5);
 
                         qproc->active_clk_count);
        q6v5_regulator_disable(qproc, qproc->active_regs,
                               qproc->active_reg_count);
+       q6v5_pds_disable(qproc, qproc->active_pds, qproc->active_pd_count);
 
        /* In case of failure or coredump scenario where reclaiming MBA memory
         * could not happen reclaim it here.
        }
        qproc->active_reg_count = ret;
 
+       ret = q6v5_pds_attach(&pdev->dev, qproc->active_pds,
+                             desc->active_pd_names);
+       if (ret < 0) {
+               dev_err(&pdev->dev, "Failed to attach active power domains\n");
+               goto free_rproc;
+       }
+       qproc->active_pd_count = ret;
+
        ret = q6v5_pds_attach(&pdev->dev, qproc->proxy_pds,
                              desc->proxy_pd_names);
        if (ret < 0) {
                dev_err(&pdev->dev, "Failed to init power domains\n");
-               goto free_rproc;
+               goto detach_active_pds;
        }
        qproc->proxy_pd_count = ret;
 
 
 detach_proxy_pds:
        q6v5_pds_detach(qproc, qproc->proxy_pds, qproc->proxy_pd_count);
+detach_active_pds:
+       q6v5_pds_detach(qproc, qproc->active_pds, qproc->active_pd_count);
 free_rproc:
        rproc_free(rproc);
 
        qcom_remove_smd_subdev(qproc->rproc, &qproc->smd_subdev);
        qcom_remove_ssr_subdev(qproc->rproc, &qproc->ssr_subdev);
 
+       q6v5_pds_detach(qproc, qproc->active_pds, qproc->active_pd_count);
        q6v5_pds_detach(qproc, qproc->proxy_pds, qproc->proxy_pd_count);
 
        rproc_free(qproc->rproc);
                        "mnoc_axi",
                        NULL
        },
+       .active_pd_names = (char*[]){
+                       "load_state",
+                       NULL
+       },
        .proxy_pd_names = (char*[]){
                        "cx",
                        "mx",