Skip to content

Commit 8abadab

Browse files
John Clementsalexdeucher
authored andcommitted
drm/amdgpu: Consolidated PSP13 BL FW loading
Remove duplicate code Signed-off-by: John Clements <[email protected]> Reviewed-by: Hawking Zhang <[email protected]>. Signed-off-by: Alex Deucher <[email protected]>
1 parent 6ff34fd commit 8abadab

File tree

1 file changed

+11
-35
lines changed

1 file changed

+11
-35
lines changed

drivers/gpu/drm/amd/amdgpu/psp_v13_0.c

Lines changed: 11 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,9 @@ static int psp_v13_0_wait_for_bootloader(struct psp_context *psp)
117117
return ret;
118118
}
119119

120-
static int psp_v13_0_bootloader_load_kdb(struct psp_context *psp)
120+
static int psp_v13_0_bootloader_load_component(struct psp_context *psp,
121+
struct psp_bin_desc *bin_desc,
122+
enum psp_bootloader_cmd bl_cmd)
121123
{
122124
int ret;
123125
uint32_t psp_gfxdrv_command_reg = 0;
@@ -136,12 +138,12 @@ static int psp_v13_0_bootloader_load_kdb(struct psp_context *psp)
136138
memset(psp->fw_pri_buf, 0, PSP_1_MEG);
137139

138140
/* Copy PSP KDB binary to memory */
139-
memcpy(psp->fw_pri_buf, psp->kdb.start_addr, psp->kdb.size_bytes);
141+
memcpy(psp->fw_pri_buf, bin_desc->start_addr, bin_desc->size_bytes);
140142

141143
/* Provide the PSP KDB to bootloader */
142144
WREG32_SOC15(MP0, 0, regMP0_SMN_C2PMSG_36,
143145
(uint32_t)(psp->fw_pri_mc_addr >> 20));
144-
psp_gfxdrv_command_reg = PSP_BL__LOAD_KEY_DATABASE;
146+
psp_gfxdrv_command_reg = bl_cmd;
145147
WREG32_SOC15(MP0, 0, regMP0_SMN_C2PMSG_35,
146148
psp_gfxdrv_command_reg);
147149

@@ -150,40 +152,14 @@ static int psp_v13_0_bootloader_load_kdb(struct psp_context *psp)
150152
return ret;
151153
}
152154

153-
static int psp_v13_0_bootloader_load_sysdrv(struct psp_context *psp)
155+
static int psp_v13_0_bootloader_load_kdb(struct psp_context *psp)
154156
{
155-
int ret;
156-
uint32_t psp_gfxdrv_command_reg = 0;
157-
struct amdgpu_device *adev = psp->adev;
158-
159-
/* Check sOS sign of life register to confirm sys driver and sOS
160-
* are already been loaded.
161-
*/
162-
if (psp_v13_0_is_sos_alive(psp))
163-
return 0;
164-
165-
ret = psp_v13_0_wait_for_bootloader(psp);
166-
if (ret)
167-
return ret;
168-
169-
memset(psp->fw_pri_buf, 0, PSP_1_MEG);
170-
171-
/* Copy PSP System Driver binary to memory */
172-
memcpy(psp->fw_pri_buf, psp->sys.start_addr, psp->sys.size_bytes);
173-
174-
/* Provide the sys driver to bootloader */
175-
WREG32_SOC15(MP0, 0, regMP0_SMN_C2PMSG_36,
176-
(uint32_t)(psp->fw_pri_mc_addr >> 20));
177-
psp_gfxdrv_command_reg = PSP_BL__LOAD_SYSDRV;
178-
WREG32_SOC15(MP0, 0, regMP0_SMN_C2PMSG_35,
179-
psp_gfxdrv_command_reg);
180-
181-
/* there might be handshake issue with hardware which needs delay */
182-
mdelay(20);
183-
184-
ret = psp_v13_0_wait_for_bootloader(psp);
157+
return psp_v13_0_bootloader_load_component(psp, &psp->kdb, PSP_BL__LOAD_KEY_DATABASE);
158+
}
185159

186-
return ret;
160+
static int psp_v13_0_bootloader_load_sysdrv(struct psp_context *psp)
161+
{
162+
return psp_v13_0_bootloader_load_component(psp, &psp->sys, PSP_BL__LOAD_SYSDRV);
187163
}
188164

189165
static int psp_v13_0_bootloader_load_sos(struct psp_context *psp)

0 commit comments

Comments
 (0)