if (ret)
                goto err1;
 
+       if (hwmgr->hwmgr_func->request_firmware) {
+               ret = hwmgr->hwmgr_func->request_firmware(hwmgr);
+               if (ret)
+                       goto err2;
+       }
+
        pr_info("amdgpu: powerplay initialized\n");
 
        return 0;
+err2:
+       if (hwmgr->hwmgr_func->backend_fini)
+               hwmgr->hwmgr_func->backend_fini(hwmgr);
 err1:
        if (hwmgr->pptable_func->pptable_fini)
                hwmgr->pptable_func->pptable_fini(hwmgr);
 
        PP_CHECK_HW(hwmgr);
 
+       if (hwmgr->hwmgr_func->release_firmware)
+                ret = hwmgr->hwmgr_func->release_firmware(hwmgr);
+
        if (hwmgr->hwmgr_func->backend_fini != NULL)
                ret = hwmgr->hwmgr_func->backend_fini(hwmgr);
 
 
        int (*get_mclk_od)(struct pp_hwmgr *hwmgr);
        int (*set_mclk_od)(struct pp_hwmgr *hwmgr, uint32_t value);
        int (*read_sensor)(struct pp_hwmgr *hwmgr, int idx, int32_t *value);
+       int (*request_firmware)(struct pp_hwmgr *hwmgr);
+       int (*release_firmware)(struct pp_hwmgr *hwmgr);
 };
 
 struct pp_table_func {