]> Git Repo - linux.git/blobdiff - drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
Merge branch 'drm-next-4.17' of git://people.freedesktop.org/~agd5f/linux into drm...
[linux.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_psp.c
index 2157d4509e841b4d37c368148882e1c87341e4b2..9a75410cd576769bfaaec77adf61f8c02de765d9 100644 (file)
@@ -51,29 +51,10 @@ static int psp_sw_init(void *handle)
 
        switch (adev->asic_type) {
        case CHIP_VEGA10:
-               psp->init_microcode = psp_v3_1_init_microcode;
-               psp->bootloader_load_sysdrv = psp_v3_1_bootloader_load_sysdrv;
-               psp->bootloader_load_sos = psp_v3_1_bootloader_load_sos;
-               psp->prep_cmd_buf = psp_v3_1_prep_cmd_buf;
-               psp->ring_init = psp_v3_1_ring_init;
-               psp->ring_create = psp_v3_1_ring_create;
-               psp->ring_stop = psp_v3_1_ring_stop;
-               psp->ring_destroy = psp_v3_1_ring_destroy;
-               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;
+               psp_v3_1_set_psp_funcs(psp);
                break;
        case CHIP_RAVEN:
-               psp->init_microcode = psp_v10_0_init_microcode;
-               psp->prep_cmd_buf = psp_v10_0_prep_cmd_buf;
-               psp->ring_init = psp_v10_0_ring_init;
-               psp->ring_create = psp_v10_0_ring_create;
-               psp->ring_stop = psp_v10_0_ring_stop;
-               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;
+               psp_v10_0_set_psp_funcs(psp);
                break;
        default:
                return -EINVAL;
@@ -81,6 +62,9 @@ static int psp_sw_init(void *handle)
 
        psp->adev = adev;
 
+       if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP)
+               return 0;
+
        ret = psp_init_microcode(psp);
        if (ret) {
                DRM_ERROR("Failed to load psp firmware!\n");
@@ -94,6 +78,9 @@ static int psp_sw_fini(void *handle)
 {
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 
+       if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP)
+               return 0;
+
        release_firmware(adev->psp.sos_fw);
        adev->psp.sos_fw = NULL;
        release_firmware(adev->psp.asd_fw);
@@ -472,6 +459,9 @@ static int psp_suspend(void *handle)
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
        struct psp_context *psp = &adev->psp;
 
+       if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP)
+               return 0;
+
        ret = psp_ring_stop(psp, PSP_RING_TYPE__KM);
        if (ret) {
                DRM_ERROR("PSP ring stop failed\n");
@@ -512,19 +502,8 @@ failed:
        return ret;
 }
 
-static bool psp_check_reset(void* handle)
+int psp_gpu_reset(struct amdgpu_device *adev)
 {
-       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);
 }
 
@@ -571,9 +550,9 @@ const struct amd_ip_funcs psp_ip_funcs = {
        .suspend = psp_suspend,
        .resume = psp_resume,
        .is_idle = NULL,
-       .check_soft_reset = psp_check_reset,
+       .check_soft_reset = NULL,
        .wait_for_idle = NULL,
-       .soft_reset = psp_reset,
+       .soft_reset = NULL,
        .set_clockgating_state = psp_set_clockgating_state,
        .set_powergating_state = psp_set_powergating_state,
 };
This page took 0.032088 seconds and 4 git commands to generate.