diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h index ce4654550416..129209686848 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h | |||
@@ -33,6 +33,8 @@ | |||
33 | #define PSP_ASD_SHARED_MEM_SIZE 0x4000 | 33 | #define PSP_ASD_SHARED_MEM_SIZE 0x4000 |
34 | #define PSP_1_MEG 0x100000 | 34 | #define PSP_1_MEG 0x100000 |
35 | 35 | ||
36 | struct psp_context; | ||
37 | |||
36 | enum psp_ring_type | 38 | enum psp_ring_type |
37 | { | 39 | { |
38 | PSP_RING_TYPE__INVALID = 0, | 40 | PSP_RING_TYPE__INVALID = 0, |
@@ -53,12 +55,8 @@ struct psp_ring | |||
53 | uint32_t ring_size; | 55 | uint32_t ring_size; |
54 | }; | 56 | }; |
55 | 57 | ||
56 | struct psp_context | 58 | struct psp_funcs |
57 | { | 59 | { |
58 | struct amdgpu_device *adev; | ||
59 | struct psp_ring km_ring; | ||
60 | struct psp_gfx_cmd_resp *cmd; | ||
61 | |||
62 | int (*init_microcode)(struct psp_context *psp); | 60 | int (*init_microcode)(struct psp_context *psp); |
63 | int (*bootloader_load_sysdrv)(struct psp_context *psp); | 61 | int (*bootloader_load_sysdrv)(struct psp_context *psp); |
64 | int (*bootloader_load_sos)(struct psp_context *psp); | 62 | int (*bootloader_load_sos)(struct psp_context *psp); |
@@ -77,6 +75,15 @@ struct psp_context | |||
77 | enum AMDGPU_UCODE_ID ucode_type); | 75 | enum AMDGPU_UCODE_ID ucode_type); |
78 | bool (*smu_reload_quirk)(struct psp_context *psp); | 76 | bool (*smu_reload_quirk)(struct psp_context *psp); |
79 | int (*mode1_reset)(struct psp_context *psp); | 77 | int (*mode1_reset)(struct psp_context *psp); |
78 | }; | ||
79 | |||
80 | struct psp_context | ||
81 | { | ||
82 | struct amdgpu_device *adev; | ||
83 | struct psp_ring km_ring; | ||
84 | struct psp_gfx_cmd_resp *cmd; | ||
85 | |||
86 | const struct psp_funcs *funcs; | ||
80 | 87 | ||
81 | /* fence buffer */ | 88 | /* fence buffer */ |
82 | struct amdgpu_bo *fw_pri_bo; | 89 | struct amdgpu_bo *fw_pri_bo; |
@@ -123,25 +130,25 @@ struct amdgpu_psp_funcs { | |||
123 | enum AMDGPU_UCODE_ID); | 130 | enum AMDGPU_UCODE_ID); |
124 | }; | 131 | }; |
125 | 132 | ||
126 | #define psp_prep_cmd_buf(ucode, type) (psp)->prep_cmd_buf((ucode), (type)) | 133 | #define psp_prep_cmd_buf(ucode, type) (psp)->funcs->prep_cmd_buf((ucode), (type)) |
127 | #define psp_ring_init(psp, type) (psp)->ring_init((psp), (type)) | 134 | #define psp_ring_init(psp, type) (psp)->funcs->ring_init((psp), (type)) |
128 | #define psp_ring_create(psp, type) (psp)->ring_create((psp), (type)) | 135 | #define psp_ring_create(psp, type) (psp)->funcs->ring_create((psp), (type)) |
129 | #define psp_ring_stop(psp, type) (psp)->ring_stop((psp), (type)) | 136 | #define psp_ring_stop(psp, type) (psp)->funcs->ring_stop((psp), (type)) |
130 | #define psp_ring_destroy(psp, type) ((psp)->ring_destroy((psp), (type))) | 137 | #define psp_ring_destroy(psp, type) ((psp)->funcs->ring_destroy((psp), (type))) |
131 | #define psp_cmd_submit(psp, ucode, cmd_mc, fence_mc, index) \ | 138 | #define psp_cmd_submit(psp, ucode, cmd_mc, fence_mc, index) \ |
132 | (psp)->cmd_submit((psp), (ucode), (cmd_mc), (fence_mc), (index)) | 139 | (psp)->funcs->cmd_submit((psp), (ucode), (cmd_mc), (fence_mc), (index)) |
133 | #define psp_compare_sram_data(psp, ucode, type) \ | 140 | #define psp_compare_sram_data(psp, ucode, type) \ |
134 | (psp)->compare_sram_data((psp), (ucode), (type)) | 141 | (psp)->funcs->compare_sram_data((psp), (ucode), (type)) |
135 | #define psp_init_microcode(psp) \ | 142 | #define psp_init_microcode(psp) \ |
136 | ((psp)->init_microcode ? (psp)->init_microcode((psp)) : 0) | 143 | ((psp)->funcs->init_microcode ? (psp)->funcs->init_microcode((psp)) : 0) |
137 | #define psp_bootloader_load_sysdrv(psp) \ | 144 | #define psp_bootloader_load_sysdrv(psp) \ |
138 | ((psp)->bootloader_load_sysdrv ? (psp)->bootloader_load_sysdrv((psp)) : 0) | 145 | ((psp)->funcs->bootloader_load_sysdrv ? (psp)->funcs->bootloader_load_sysdrv((psp)) : 0) |
139 | #define psp_bootloader_load_sos(psp) \ | 146 | #define psp_bootloader_load_sos(psp) \ |
140 | ((psp)->bootloader_load_sos ? (psp)->bootloader_load_sos((psp)) : 0) | 147 | ((psp)->funcs->bootloader_load_sos ? (psp)->funcs->bootloader_load_sos((psp)) : 0) |
141 | #define psp_smu_reload_quirk(psp) \ | 148 | #define psp_smu_reload_quirk(psp) \ |
142 | ((psp)->smu_reload_quirk ? (psp)->smu_reload_quirk((psp)) : false) | 149 | ((psp)->funcs->smu_reload_quirk ? (psp)->funcs->smu_reload_quirk((psp)) : false) |
143 | #define psp_mode1_reset(psp) \ | 150 | #define psp_mode1_reset(psp) \ |
144 | ((psp)->mode1_reset ? (psp)->mode1_reset((psp)) : false) | 151 | ((psp)->funcs->mode1_reset ? (psp)->funcs->mode1_reset((psp)) : false) |
145 | 152 | ||
146 | extern const struct amd_ip_funcs psp_ip_funcs; | 153 | extern const struct amd_ip_funcs psp_ip_funcs; |
147 | 154 | ||
@@ -151,4 +158,6 @@ extern int psp_wait_for(struct psp_context *psp, uint32_t reg_index, | |||
151 | 158 | ||
152 | extern const struct amdgpu_ip_block_version psp_v10_0_ip_block; | 159 | extern const struct amdgpu_ip_block_version psp_v10_0_ip_block; |
153 | 160 | ||
161 | int psp_gpu_reset(struct amdgpu_device *adev); | ||
162 | |||
154 | #endif | 163 | #endif |