Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6f2b1fcc authored by Huang Rui's avatar Huang Rui Committed by Alex Deucher
Browse files

drm/amdgpu: split psp tmr init function



Rework in order to properly support suspend.

Signed-off-by: default avatarHuang Rui <ray.huang@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 6524e494
Loading
Loading
Loading
Loading
+17 −10
Original line number Diff line number Diff line
@@ -152,11 +152,6 @@ static void psp_prep_tmr_cmd_buf(struct psp_gfx_cmd_resp *cmd,
static int psp_tmr_init(struct psp_context *psp)
{
	int ret;
	struct psp_gfx_cmd_resp *cmd;

	cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);
	if (!cmd)
		return -ENOMEM;

	/*
	 * Allocate 3M memory aligned to 1M from Frame Buffer (local
@@ -168,22 +163,30 @@ static int psp_tmr_init(struct psp_context *psp)
	ret = amdgpu_bo_create_kernel(psp->adev, 0x300000, 0x100000,
				      AMDGPU_GEM_DOMAIN_VRAM,
				      &psp->tmr_bo, &psp->tmr_mc_addr, &psp->tmr_buf);
	if (ret)
		goto failed;

	return ret;
}

static int psp_tmr_load(struct psp_context *psp)
{
	int ret;
	struct psp_gfx_cmd_resp *cmd;

	cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);
	if (!cmd)
		return -ENOMEM;

	psp_prep_tmr_cmd_buf(cmd, psp->tmr_mc_addr, 0x300000);

	ret = psp_cmd_submit_buf(psp, NULL, cmd,
				 psp->fence_buf_mc_addr, 1);
	if (ret)
		goto failed_mem;
		goto failed;

	kfree(cmd);

	return 0;

failed_mem:
	amdgpu_bo_free_kernel(&psp->tmr_bo, &psp->tmr_mc_addr, &psp->tmr_buf);
failed:
	kfree(cmd);
	return ret;
@@ -298,6 +301,10 @@ static int psp_load_fw(struct amdgpu_device *adev)
	if (ret)
		goto failed_mem;

	ret = psp_tmr_load(psp);
	if (ret)
		goto failed_mem;

	ret = psp_asd_load(psp);
	if (ret)
		goto failed_mem;