summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/display
diff options
context:
space:
mode:
authorNicholas Kazlauskas <nicholas.kazlauskas@amd.com>2020-05-07 13:09:18 -0400
committerAlex Deucher <alexander.deucher@amd.com>2020-05-28 14:00:48 -0400
commit455802c72faf7524e05295bde564728f10e94d1c (patch)
treeb35388fad19e8dec760e9fe126f7d26d51184d71 /drivers/gpu/drm/amd/display
parent2847642a1875bae10aa80e81dd23652acc78ccb2 (diff)
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: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/display')
-rw-r--r--drivers/gpu/drm/amd/display/dmub/dmub_srv.h11
-rw-r--r--drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c1
2 files changed, 12 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/display/dmub/dmub_srv.h b/drivers/gpu/drm/amd/display/dmub/dmub_srv.h
index 26d94eb5ab58..73b5d500ccf6 100644
--- a/drivers/gpu/drm/amd/display/dmub/dmub_srv.h
+++ b/drivers/gpu/drm/amd/display/dmub/dmub_srv.h
@@ -280,6 +280,7 @@ struct dmub_srv_hw_funcs {
* @hw_funcs: optional overrides for hw funcs
* @user_ctx: context data for callback funcs
* @asic: driver supplied asic
+ * @fw_version: the current firmware version, if any
* @is_virtual: false for hw support only
*/
struct dmub_srv_create_params {
@@ -287,6 +288,7 @@ struct dmub_srv_create_params {
struct dmub_srv_hw_funcs *hw_funcs;
void *user_ctx;
enum dmub_asic asic;
+ uint32_t fw_version;
bool is_virtual;
};
@@ -310,12 +312,14 @@ struct dmub_srv_hw_params {
* struct dmub_srv - software state for dmcub
* @asic: dmub asic identifier
* @user_ctx: user provided context for the dmub_srv
+ * @fw_version: the current firmware version, if any
* @is_virtual: false if hardware support only
* @fw_state: dmub firmware state pointer
*/
struct dmub_srv {
enum dmub_asic asic;
void *user_ctx;
+ uint32_t fw_version;
bool is_virtual;
struct dmub_fb scratch_mem_fb;
volatile const struct dmub_fw_state *fw_state;
@@ -336,6 +340,13 @@ struct dmub_srv {
};
/**
+ * 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: the dmub service
* @params: creation parameters for the service
diff --git a/drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c b/drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c
index 3cfbc27f3eab..3559093027ee 100644
--- a/drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c
+++ b/drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c
@@ -172,6 +172,7 @@ enum dmub_status dmub_srv_create(struct dmub_srv *dmub,
dmub->funcs = params->funcs;
dmub->user_ctx = params->user_ctx;
dmub->asic = params->asic;
+ dmub->fw_version = params->fw_version;
dmub->is_virtual = params->is_virtual;
/* Setup asic dependent hardware funcs. */