Commit 455802c7 authored by Nicholas Kazlauskas's avatar Nicholas Kazlauskas Committed by Alex Deucher

drm/amd/display: Add DMUB firmware version helpers in DMUB service

[Why]
In order to switch over the inbox from region4 to cw4 we need to know if
the firmware is capable of properly invalidating the cache before
reading the commands.

Easiest way is to just check the firmware version, but we don't have the
helper macros or a way for the dmub_srv to know what version it is.

[How]
Add a new fw_version field to the creation parameters that driver can
optional pass in. Assumes a version of 0x00000000 is invalid.
Signed-off-by: default avatarNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Reviewed-by: default avatarTony Cheng <Tony.Cheng@amd.com>
Acked-by: default avatarRodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 2847642a
...@@ -280,6 +280,7 @@ struct dmub_srv_hw_funcs { ...@@ -280,6 +280,7 @@ struct dmub_srv_hw_funcs {
* @hw_funcs: optional overrides for hw funcs * @hw_funcs: optional overrides for hw funcs
* @user_ctx: context data for callback funcs * @user_ctx: context data for callback funcs
* @asic: driver supplied asic * @asic: driver supplied asic
* @fw_version: the current firmware version, if any
* @is_virtual: false for hw support only * @is_virtual: false for hw support only
*/ */
struct dmub_srv_create_params { struct dmub_srv_create_params {
...@@ -287,6 +288,7 @@ struct dmub_srv_create_params { ...@@ -287,6 +288,7 @@ struct dmub_srv_create_params {
struct dmub_srv_hw_funcs *hw_funcs; struct dmub_srv_hw_funcs *hw_funcs;
void *user_ctx; void *user_ctx;
enum dmub_asic asic; enum dmub_asic asic;
uint32_t fw_version;
bool is_virtual; bool is_virtual;
}; };
...@@ -310,12 +312,14 @@ struct dmub_srv_hw_params { ...@@ -310,12 +312,14 @@ struct dmub_srv_hw_params {
* struct dmub_srv - software state for dmcub * struct dmub_srv - software state for dmcub
* @asic: dmub asic identifier * @asic: dmub asic identifier
* @user_ctx: user provided context for the dmub_srv * @user_ctx: user provided context for the dmub_srv
* @fw_version: the current firmware version, if any
* @is_virtual: false if hardware support only * @is_virtual: false if hardware support only
* @fw_state: dmub firmware state pointer * @fw_state: dmub firmware state pointer
*/ */
struct dmub_srv { struct dmub_srv {
enum dmub_asic asic; enum dmub_asic asic;
void *user_ctx; void *user_ctx;
uint32_t fw_version;
bool is_virtual; bool is_virtual;
struct dmub_fb scratch_mem_fb; struct dmub_fb scratch_mem_fb;
volatile const struct dmub_fw_state *fw_state; volatile const struct dmub_fw_state *fw_state;
...@@ -335,6 +339,13 @@ struct dmub_srv { ...@@ -335,6 +339,13 @@ struct dmub_srv {
uint32_t psp_version; uint32_t psp_version;
}; };
/**
* DMUB firmware version helper macro - useful for checking if the version
* of a firmware to know if feature or functionality is supported or present.
*/
#define DMUB_FW_VERSION(major, minor, revision) \
((((major) & 0xFF) << 24) | (((minor) & 0xFF) << 16) | ((revision) & 0xFFFF))
/** /**
* dmub_srv_create() - creates the DMUB service. * dmub_srv_create() - creates the DMUB service.
* @dmub: the dmub service * @dmub: the dmub service
......
...@@ -172,6 +172,7 @@ enum dmub_status dmub_srv_create(struct dmub_srv *dmub, ...@@ -172,6 +172,7 @@ enum dmub_status dmub_srv_create(struct dmub_srv *dmub,
dmub->funcs = params->funcs; dmub->funcs = params->funcs;
dmub->user_ctx = params->user_ctx; dmub->user_ctx = params->user_ctx;
dmub->asic = params->asic; dmub->asic = params->asic;
dmub->fw_version = params->fw_version;
dmub->is_virtual = params->is_virtual; dmub->is_virtual = params->is_virtual;
/* Setup asic dependent hardware funcs. */ /* Setup asic dependent hardware funcs. */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment