Commit 212cc241 authored by Rajneesh Bhardwaj's avatar Rajneesh Bhardwaj Committed by Alex Deucher
Browse files

drm/amdgpu: Add PSP interface for NPS switch



Implement PSP ring command interface for memory partitioning on the fly
on the supported asics.

Signed-off-by: default avatarRajneesh Bhardwaj <rajneesh.bhardwaj@amd.com>
Reviewed-by: default avatarFeifei Xu <Feifei.Xu@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 82e2ccaa
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -1045,6 +1045,31 @@ static int psp_rl_load(struct amdgpu_device *adev)
	return ret;
}

int psp_memory_partition(struct psp_context *psp, int mode)
{
	struct psp_gfx_cmd_resp *cmd;
	int ret;

	if (amdgpu_sriov_vf(psp->adev))
		return 0;

	cmd = acquire_psp_cmd_buf(psp);

	cmd->cmd_id = GFX_CMD_ID_FB_NPS_MODE;
	cmd->cmd.cmd_memory_part.mode = mode;

	dev_info(psp->adev->dev,
		 "Requesting %d memory partition change through PSP", mode);
	ret = psp_cmd_submit_buf(psp, NULL, cmd, psp->fence_buf_mc_addr);
	if (ret)
		dev_err(psp->adev->dev,
			"PSP request failed to change to NPS%d mode\n", mode);

	release_psp_cmd_buf(psp);

	return ret;
}

int psp_spatial_partition(struct psp_context *psp, int mode)
{
	struct psp_gfx_cmd_resp *cmd;
+1 −0
Original line number Diff line number Diff line
@@ -553,6 +553,7 @@ int psp_load_fw_list(struct psp_context *psp,
void psp_copy_fw(struct psp_context *psp, uint8_t *start_addr, uint32_t bin_size);

int psp_spatial_partition(struct psp_context *psp, int mode);
int psp_memory_partition(struct psp_context *psp, int mode);

int is_psp_fw_valid(struct psp_bin_desc bin);

+11 −3
Original line number Diff line number Diff line
@@ -105,6 +105,8 @@ enum psp_gfx_cmd_id
    GFX_CMD_ID_SRIOV_SPATIAL_PART = 0x00000027,   /* Configure spatial partitioning mode */
    /*IDs of performance monitoring/profiling*/
    GFX_CMD_ID_CONFIG_SQ_PERFMON  = 0x00000046,   /* Config CGTT_SQ_CLK_CTRL */
    /* Dynamic memory partitioninig (NPS mode change)*/
    GFX_CMD_ID_FB_NPS_MODE         = 0x00000048,  /* Configure memory partitioning mode */
};

/* PSP boot config sub-commands */
@@ -362,6 +364,11 @@ struct psp_gfx_cmd_config_sq_perfmon {
	uint8_t         reserved[5];
};

struct psp_gfx_cmd_fb_memory_part {
	uint32_t mode; /* requested NPS mode */
	uint32_t resvd;
};

/* All GFX ring buffer commands. */
union psp_gfx_commands
{
@@ -377,6 +384,7 @@ union psp_gfx_commands
    struct psp_gfx_cmd_boot_cfg         boot_cfg;
    struct psp_gfx_cmd_sriov_spatial_part cmd_spatial_part;
    struct psp_gfx_cmd_config_sq_perfmon config_sq_perfmon;
    struct psp_gfx_cmd_fb_memory_part cmd_memory_part;
};

struct psp_gfx_uresp_reserved