[PATCH 6/8] drm/amdgpu: add helper function to query psp runtime db entry (v2)

Michel Dänzer michel at daenzer.net
Wed Jun 30 11:08:29 UTC 2021


On 2021-06-11 9:05 a.m., Hawking Zhang wrote:
> PSP will dump various boot up information into a
> portion of local frame buffer, called runtime database.
> The helper function is used for driver to query those
> shared information.
> 
> v2: init ret and check !ret to exit loop as soon as
> found the entry
> 
> Signed-off-by: Hawking Zhang <Hawking.Zhang at amd.com>
> Reviewed-by: John Clements <john.clements at amd.com>
> Reviewed-by: Lijo Lazar <lijo.lazar at amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 68 +++++++++++++++++++++++++
>  1 file changed, 68 insertions(+)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
> index ab4e89186186..dc786c91ec9d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
> @@ -164,6 +164,74 @@ static int psp_memory_training_init(struct psp_context *psp)
>  	return ret;
>  }
>  
> +/*
> + * Helper funciton to query psp runtime database entry
> + *
> + * @adev: amdgpu_device pointer
> + * @entry_type: the type of psp runtime database entry
> + * @db_entry: runtime database entry pointer
> + *
> + * Return false if runtime database doesn't exit or entry is invalid
> + * or true if the specific database entry is found, and copy to @db_entry
> + */
> +static bool psp_get_runtime_db_entry(struct amdgpu_device *adev,
> +				     enum psp_runtime_entry_type entry_type,
> +				     void *db_entry)
> +{
> +	uint64_t db_header_pos, db_dir_pos;
> +	struct psp_runtime_data_header db_header = {0};
> +	struct psp_runtime_data_directory db_dir = {0};
> +	bool ret = false;
> +	int i;
> +
> +	db_header_pos = adev->gmc.mc_vram_size - PSP_RUNTIME_DB_OFFSET;
> +	db_dir_pos = db_header_pos + sizeof(struct psp_runtime_data_header);
> +
> +	/* read runtime db header from vram */
> +	amdgpu_device_vram_access(adev, db_header_pos, (uint32_t *)&db_header,
> +			sizeof(struct psp_runtime_data_header), false);
> +
> +	if (db_header.cookie != PSP_RUNTIME_DB_COOKIE_ID) {
> +		/* runtime db doesn't exist, exit */
> +		dev_warn(adev->dev, "PSP runtime database doesn't exist\n");
> +		return false;
> +	}

I just noticed this message in the output of

 dmesg -l emerg,alert,crit,err,warn

I wonder if these messages really need to be printed by default at all, let alone at warning level. Do they indicate an issue which needs to be addressed?


> +	/* read runtime database entry from vram */
> +	amdgpu_device_vram_access(adev, db_dir_pos, (uint32_t *)&db_dir,
> +			sizeof(struct psp_runtime_data_directory), false);
> +
> +	if (db_dir.entry_count >= PSP_RUNTIME_DB_DIAG_ENTRY_MAX_COUNT) {
> +		/* invalid db entry count, exit */
> +		dev_warn(adev->dev, "Invalid PSP runtime database entry count\n");
> +		return false;
> +	}


-- 
Earthling Michel Dänzer               |               https://redhat.com
Libre software enthusiast             |             Mesa and X developer


More information about the amd-gfx mailing list