@@ -117,7 +117,9 @@ static int psp_v13_0_wait_for_bootloader(struct psp_context *psp)
117
117
return ret ;
118
118
}
119
119
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 )
121
123
{
122
124
int ret ;
123
125
uint32_t psp_gfxdrv_command_reg = 0 ;
@@ -136,12 +138,12 @@ static int psp_v13_0_bootloader_load_kdb(struct psp_context *psp)
136
138
memset (psp -> fw_pri_buf , 0 , PSP_1_MEG );
137
139
138
140
/* 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 );
140
142
141
143
/* Provide the PSP KDB to bootloader */
142
144
WREG32_SOC15 (MP0 , 0 , regMP0_SMN_C2PMSG_36 ,
143
145
(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 ;
145
147
WREG32_SOC15 (MP0 , 0 , regMP0_SMN_C2PMSG_35 ,
146
148
psp_gfxdrv_command_reg );
147
149
@@ -150,40 +152,14 @@ static int psp_v13_0_bootloader_load_kdb(struct psp_context *psp)
150
152
return ret ;
151
153
}
152
154
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 )
154
156
{
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
+ }
185
159
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 );
187
163
}
188
164
189
165
static int psp_v13_0_bootloader_load_sos (struct psp_context * psp )
0 commit comments