mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-29 01:51:39 +00:00
drm/amdgpu: split psp asd function
Rework in order to properly support suspend. Signed-off-by: Huang Rui <ray.huang@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
2b0c3aee21
commit
f5cfef98f7
2 changed files with 26 additions and 24 deletions
|
@ -206,48 +206,43 @@ static void psp_prep_asd_cmd_buf(struct psp_gfx_cmd_resp *cmd,
|
||||||
cmd->cmd.cmd_load_ta.cmd_buf_len = shared_size;
|
cmd->cmd.cmd_load_ta.cmd_buf_len = shared_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int psp_asd_init(struct psp_context *psp)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Allocate 16k memory aligned to 4k from Frame Buffer (local
|
||||||
|
* physical) for shared ASD <-> Driver
|
||||||
|
*/
|
||||||
|
ret = amdgpu_bo_create_kernel(psp->adev, PSP_ASD_SHARED_MEM_SIZE,
|
||||||
|
PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM,
|
||||||
|
&psp->asd_shared_bo,
|
||||||
|
&psp->asd_shared_mc_addr,
|
||||||
|
&psp->asd_shared_buf);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static int psp_asd_load(struct psp_context *psp)
|
static int psp_asd_load(struct psp_context *psp)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct amdgpu_bo *asd_shared_bo;
|
|
||||||
uint64_t asd_shared_mc_addr;
|
|
||||||
void *asd_shared_buf;
|
|
||||||
struct psp_gfx_cmd_resp *cmd;
|
struct psp_gfx_cmd_resp *cmd;
|
||||||
|
|
||||||
cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);
|
cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);
|
||||||
if (!cmd)
|
if (!cmd)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
/*
|
|
||||||
* Allocate 16k memory aligned to 4k from Frame Buffer (local
|
|
||||||
* physical) for shared ASD <-> Driver
|
|
||||||
*/
|
|
||||||
ret = amdgpu_bo_create_kernel(psp->adev, PSP_ASD_SHARED_MEM_SIZE, PAGE_SIZE,
|
|
||||||
AMDGPU_GEM_DOMAIN_VRAM,
|
|
||||||
&asd_shared_bo, &asd_shared_mc_addr, &asd_shared_buf);
|
|
||||||
if (ret)
|
|
||||||
goto failed;
|
|
||||||
|
|
||||||
memset(psp->fw_pri_buf, 0, PSP_1_MEG);
|
memset(psp->fw_pri_buf, 0, PSP_1_MEG);
|
||||||
memcpy(psp->fw_pri_buf, psp->asd_start_addr, psp->asd_ucode_size);
|
memcpy(psp->fw_pri_buf, psp->asd_start_addr, psp->asd_ucode_size);
|
||||||
|
|
||||||
psp_prep_asd_cmd_buf(cmd, psp->fw_pri_mc_addr, asd_shared_mc_addr,
|
psp_prep_asd_cmd_buf(cmd, psp->fw_pri_mc_addr, psp->asd_shared_mc_addr,
|
||||||
psp->asd_ucode_size, PSP_ASD_SHARED_MEM_SIZE);
|
psp->asd_ucode_size, PSP_ASD_SHARED_MEM_SIZE);
|
||||||
|
|
||||||
ret = psp_cmd_submit_buf(psp, NULL, cmd,
|
ret = psp_cmd_submit_buf(psp, NULL, cmd,
|
||||||
psp->fence_buf_mc_addr, 2);
|
psp->fence_buf_mc_addr, 2);
|
||||||
if (ret)
|
|
||||||
goto failed_mem;
|
|
||||||
|
|
||||||
amdgpu_bo_free_kernel(&asd_shared_bo, &asd_shared_mc_addr, &asd_shared_buf);
|
|
||||||
kfree(cmd);
|
kfree(cmd);
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
failed_mem:
|
|
||||||
amdgpu_bo_free_kernel(&asd_shared_bo, &asd_shared_mc_addr, &asd_shared_buf);
|
|
||||||
failed:
|
|
||||||
kfree(cmd);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -301,6 +296,10 @@ static int psp_load_fw(struct amdgpu_device *adev)
|
||||||
if (ret)
|
if (ret)
|
||||||
goto failed_mem;
|
goto failed_mem;
|
||||||
|
|
||||||
|
ret = psp_asd_init(psp);
|
||||||
|
if (ret)
|
||||||
|
goto failed_mem;
|
||||||
|
|
||||||
ret = psp_asd_load(psp);
|
ret = psp_asd_load(psp);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto failed_mem;
|
goto failed_mem;
|
||||||
|
|
|
@ -90,12 +90,15 @@ struct psp_context
|
||||||
uint64_t tmr_mc_addr;
|
uint64_t tmr_mc_addr;
|
||||||
void *tmr_buf;
|
void *tmr_buf;
|
||||||
|
|
||||||
/* asd firmware */
|
/* asd firmware and buffer */
|
||||||
const struct firmware *asd_fw;
|
const struct firmware *asd_fw;
|
||||||
uint32_t asd_fw_version;
|
uint32_t asd_fw_version;
|
||||||
uint32_t asd_feature_version;
|
uint32_t asd_feature_version;
|
||||||
uint32_t asd_ucode_size;
|
uint32_t asd_ucode_size;
|
||||||
uint8_t *asd_start_addr;
|
uint8_t *asd_start_addr;
|
||||||
|
struct amdgpu_bo *asd_shared_bo;
|
||||||
|
uint64_t asd_shared_mc_addr;
|
||||||
|
void *asd_shared_buf;
|
||||||
|
|
||||||
/* fence buffer */
|
/* fence buffer */
|
||||||
struct amdgpu_bo *fence_buf_bo;
|
struct amdgpu_bo *fence_buf_bo;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue