|
@@ -166,11 +166,8 @@ int psp_v3_1_bootloader_load_sysdrv(struct psp_context *psp)
|
|
|
{
|
|
|
int ret;
|
|
|
uint32_t psp_gfxdrv_command_reg = 0;
|
|
|
- struct amdgpu_bo *psp_sysdrv;
|
|
|
- void *psp_sysdrv_virt = NULL;
|
|
|
- uint64_t psp_sysdrv_mem;
|
|
|
struct amdgpu_device *adev = psp->adev;
|
|
|
- uint32_t size, sol_reg;
|
|
|
+ uint32_t sol_reg;
|
|
|
|
|
|
/* Check sOS sign of life register to confirm sys driver and sOS
|
|
|
* are already been loaded.
|
|
@@ -185,27 +182,14 @@ int psp_v3_1_bootloader_load_sysdrv(struct psp_context *psp)
|
|
|
if (ret)
|
|
|
return ret;
|
|
|
|
|
|
- /*
|
|
|
- * Create a 1 meg GART memory to store the psp sys driver
|
|
|
- * binary with a 1 meg aligned address
|
|
|
- */
|
|
|
- size = (psp->sys_bin_size + (PSP_BOOTLOADER_1_MEG_ALIGNMENT - 1)) &
|
|
|
- (~(PSP_BOOTLOADER_1_MEG_ALIGNMENT - 1));
|
|
|
-
|
|
|
- ret = amdgpu_bo_create_kernel(adev, size, PSP_BOOTLOADER_1_MEG_ALIGNMENT,
|
|
|
- AMDGPU_GEM_DOMAIN_GTT,
|
|
|
- &psp_sysdrv,
|
|
|
- &psp_sysdrv_mem,
|
|
|
- &psp_sysdrv_virt);
|
|
|
- if (ret)
|
|
|
- return ret;
|
|
|
+ memset(psp->fw_pri_buf, 0, PSP_1_MEG);
|
|
|
|
|
|
/* Copy PSP System Driver binary to memory */
|
|
|
- memcpy(psp_sysdrv_virt, psp->sys_start_addr, psp->sys_bin_size);
|
|
|
+ memcpy(psp->fw_pri_buf, psp->sys_start_addr, psp->sys_bin_size);
|
|
|
|
|
|
/* Provide the sys driver to bootrom */
|
|
|
WREG32(SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_36),
|
|
|
- (uint32_t)(psp_sysdrv_mem >> 20));
|
|
|
+ (uint32_t)(psp->fw_pri_mc_addr >> 20));
|
|
|
psp_gfxdrv_command_reg = 1 << 16;
|
|
|
WREG32(SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_35),
|
|
|
psp_gfxdrv_command_reg);
|
|
@@ -216,8 +200,6 @@ int psp_v3_1_bootloader_load_sysdrv(struct psp_context *psp)
|
|
|
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_35),
|
|
|
0x80000000, 0x80000000, false);
|
|
|
|
|
|
- amdgpu_bo_free_kernel(&psp_sysdrv, &psp_sysdrv_mem, &psp_sysdrv_virt);
|
|
|
-
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
@@ -225,11 +207,8 @@ int psp_v3_1_bootloader_load_sos(struct psp_context *psp)
|
|
|
{
|
|
|
int ret;
|
|
|
unsigned int psp_gfxdrv_command_reg = 0;
|
|
|
- struct amdgpu_bo *psp_sos;
|
|
|
- void *psp_sos_virt = NULL;
|
|
|
- uint64_t psp_sos_mem;
|
|
|
struct amdgpu_device *adev = psp->adev;
|
|
|
- uint32_t size, sol_reg;
|
|
|
+ uint32_t sol_reg;
|
|
|
|
|
|
/* Check sOS sign of life register to confirm sys driver and sOS
|
|
|
* are already been loaded.
|
|
@@ -244,23 +223,14 @@ int psp_v3_1_bootloader_load_sos(struct psp_context *psp)
|
|
|
if (ret)
|
|
|
return ret;
|
|
|
|
|
|
- size = (psp->sos_bin_size + (PSP_BOOTLOADER_1_MEG_ALIGNMENT - 1)) &
|
|
|
- (~((uint64_t)PSP_BOOTLOADER_1_MEG_ALIGNMENT - 1));
|
|
|
-
|
|
|
- ret = amdgpu_bo_create_kernel(adev, size, PSP_BOOTLOADER_1_MEG_ALIGNMENT,
|
|
|
- AMDGPU_GEM_DOMAIN_GTT,
|
|
|
- &psp_sos,
|
|
|
- &psp_sos_mem,
|
|
|
- &psp_sos_virt);
|
|
|
- if (ret)
|
|
|
- return ret;
|
|
|
+ memset(psp->fw_pri_buf, 0, PSP_1_MEG);
|
|
|
|
|
|
/* Copy Secure OS binary to PSP memory */
|
|
|
- memcpy(psp_sos_virt, psp->sos_start_addr, psp->sos_bin_size);
|
|
|
+ memcpy(psp->fw_pri_buf, psp->sos_start_addr, psp->sos_bin_size);
|
|
|
|
|
|
/* Provide the PSP secure OS to bootrom */
|
|
|
WREG32(SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_36),
|
|
|
- (uint32_t)(psp_sos_mem >> 20));
|
|
|
+ (uint32_t)(psp->fw_pri_mc_addr >> 20));
|
|
|
psp_gfxdrv_command_reg = 2 << 16;
|
|
|
WREG32(SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_35),
|
|
|
psp_gfxdrv_command_reg);
|
|
@@ -273,8 +243,6 @@ int psp_v3_1_bootloader_load_sos(struct psp_context *psp)
|
|
|
0, true);
|
|
|
#endif
|
|
|
|
|
|
- amdgpu_bo_free_kernel(&psp_sos, &psp_sos_mem, &psp_sos_virt);
|
|
|
-
|
|
|
return ret;
|
|
|
}
|
|
|
|