|
@@ -62,6 +62,7 @@ static int psp_sw_init(void *handle)
|
|
|
psp->cmd_submit = psp_v3_1_cmd_submit;
|
|
|
psp->compare_sram_data = psp_v3_1_compare_sram_data;
|
|
|
psp->smu_reload_quirk = psp_v3_1_smu_reload_quirk;
|
|
|
+ psp->mode1_reset = psp_v3_1_mode1_reset;
|
|
|
break;
|
|
|
case CHIP_RAVEN:
|
|
|
psp->init_microcode = psp_v10_0_init_microcode;
|
|
@@ -72,6 +73,7 @@ static int psp_sw_init(void *handle)
|
|
|
psp->ring_destroy = psp_v10_0_ring_destroy;
|
|
|
psp->cmd_submit = psp_v10_0_cmd_submit;
|
|
|
psp->compare_sram_data = psp_v10_0_compare_sram_data;
|
|
|
+ psp->mode1_reset = psp_v10_0_mode1_reset;
|
|
|
break;
|
|
|
default:
|
|
|
return -EINVAL;
|
|
@@ -497,6 +499,22 @@ failed:
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+static bool psp_check_reset(void* handle)
|
|
|
+{
|
|
|
+ struct amdgpu_device *adev = (struct amdgpu_device *)handle;
|
|
|
+
|
|
|
+ if (adev->flags & AMD_IS_APU)
|
|
|
+ return true;
|
|
|
+
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+static int psp_reset(void* handle)
|
|
|
+{
|
|
|
+ struct amdgpu_device *adev = (struct amdgpu_device *)handle;
|
|
|
+ return psp_mode1_reset(&adev->psp);
|
|
|
+}
|
|
|
+
|
|
|
static bool psp_check_fw_loading_status(struct amdgpu_device *adev,
|
|
|
enum AMDGPU_UCODE_ID ucode_type)
|
|
|
{
|
|
@@ -540,8 +558,9 @@ const struct amd_ip_funcs psp_ip_funcs = {
|
|
|
.suspend = psp_suspend,
|
|
|
.resume = psp_resume,
|
|
|
.is_idle = NULL,
|
|
|
+ .check_soft_reset = psp_check_reset,
|
|
|
.wait_for_idle = NULL,
|
|
|
- .soft_reset = NULL,
|
|
|
+ .soft_reset = psp_reset,
|
|
|
.set_clockgating_state = psp_set_clockgating_state,
|
|
|
.set_powergating_state = psp_set_powergating_state,
|
|
|
};
|