Commit d9beecfc authored by Anthony Koo's avatar Anthony Koo Committed by Alex Deucher

drm/amd/display: [FW Promotion] Release 0.0.35

[Header Changes]
   - Definition for retaining ABM settings during disable
   - Addition of some new AUX interface definitions
   - Addition of some outbox definitions
Signed-off-by: default avatarAnthony Koo <Anthony.Koo@amd.com>
Acked-by: default avatarRodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent cbd975d0
...@@ -36,10 +36,10 @@ ...@@ -36,10 +36,10 @@
/* Firmware versioning. */ /* Firmware versioning. */
#ifdef DMUB_EXPOSE_VERSION #ifdef DMUB_EXPOSE_VERSION
#define DMUB_FW_VERSION_GIT_HASH 0xf547f0b9d #define DMUB_FW_VERSION_GIT_HASH 0x9cf8f05fe
#define DMUB_FW_VERSION_MAJOR 0 #define DMUB_FW_VERSION_MAJOR 0
#define DMUB_FW_VERSION_MINOR 0 #define DMUB_FW_VERSION_MINOR 0
#define DMUB_FW_VERSION_REVISION 34 #define DMUB_FW_VERSION_REVISION 35
#define DMUB_FW_VERSION_TEST 0 #define DMUB_FW_VERSION_TEST 0
#define DMUB_FW_VERSION_VBIOS 0 #define DMUB_FW_VERSION_VBIOS 0
#define DMUB_FW_VERSION_HOTFIX 0 #define DMUB_FW_VERSION_HOTFIX 0
...@@ -57,6 +57,7 @@ ...@@ -57,6 +57,7 @@
#define SET_ABM_PIPE_GRADUALLY_DISABLE 0 #define SET_ABM_PIPE_GRADUALLY_DISABLE 0
#define SET_ABM_PIPE_IMMEDIATELY_DISABLE 255 #define SET_ABM_PIPE_IMMEDIATELY_DISABLE 255
#define SET_ABM_PIPE_IMMEDIATE_KEEP_GAIN_DISABLE 254
#define SET_ABM_PIPE_NORMAL 1 #define SET_ABM_PIPE_NORMAL 1
/* Maximum number of streams on any ASIC. */ /* Maximum number of streams on any ASIC. */
...@@ -69,10 +70,6 @@ ...@@ -69,10 +70,6 @@
#define PHYSICAL_ADDRESS_LOC union large_integer #define PHYSICAL_ADDRESS_LOC union large_integer
#endif #endif
#if defined(__cplusplus)
extern "C" {
#endif
#ifndef dmub_memcpy #ifndef dmub_memcpy
#define dmub_memcpy(dest, source, bytes) memcpy((dest), (source), (bytes)) #define dmub_memcpy(dest, source, bytes) memcpy((dest), (source), (bytes))
#endif #endif
...@@ -81,6 +78,10 @@ extern "C" { ...@@ -81,6 +78,10 @@ extern "C" {
#define dmub_memset(dest, val, bytes) memset((dest), (val), (bytes)) #define dmub_memset(dest, val, bytes) memset((dest), (val), (bytes))
#endif #endif
#if defined(__cplusplus)
extern "C" {
#endif
#ifndef dmub_udelay #ifndef dmub_udelay
#define dmub_udelay(microseconds) udelay(microseconds) #define dmub_udelay(microseconds) udelay(microseconds)
#endif #endif
...@@ -299,11 +300,15 @@ enum dmub_cmd_type { ...@@ -299,11 +300,15 @@ enum dmub_cmd_type {
DMUB_CMD__PSR = 64, DMUB_CMD__PSR = 64,
DMUB_CMD__ABM = 66, DMUB_CMD__ABM = 66,
DMUB_CMD__HW_LOCK = 69, DMUB_CMD__HW_LOCK = 69,
DMUB_CMD__DP_AUX_ACCESS = 70,
DMUB_CMD__OUTBOX1_ENABLE = 71,
DMUB_CMD__VBIOS = 128, DMUB_CMD__VBIOS = 128,
}; };
enum dmub_out_cmd_type { enum dmub_out_cmd_type {
DMUB_OUT_CMD__NULL = 0, DMUB_OUT_CMD__NULL = 0,
DMUB_OUT_CMD__DP_AUX_REPLY = 1,
DMUB_OUT_CMD__DP_HPD_NOTIFY = 2,
}; };
#pragma pack(push, 1) #pragma pack(push, 1)
...@@ -461,6 +466,78 @@ struct dmub_rb_cmd_dpphy_init { ...@@ -461,6 +466,78 @@ struct dmub_rb_cmd_dpphy_init {
uint8_t reserved[60]; uint8_t reserved[60];
}; };
enum dp_aux_request_action {
DP_AUX_REQ_ACTION_I2C_WRITE = 0x00,
DP_AUX_REQ_ACTION_I2C_READ = 0x10,
DP_AUX_REQ_ACTION_I2C_STATUS_REQ = 0x20,
DP_AUX_REQ_ACTION_I2C_WRITE_MOT = 0x40,
DP_AUX_REQ_ACTION_I2C_READ_MOT = 0x50,
DP_AUX_REQ_ACTION_I2C_STATUS_REQ_MOT = 0x60,
DP_AUX_REQ_ACTION_DPCD_WRITE = 0x80,
DP_AUX_REQ_ACTION_DPCD_READ = 0x90
};
/* DP AUX command */
struct aux_transaction_parameters {
uint8_t is_i2c_over_aux;
uint8_t action;
uint8_t length;
uint8_t pad;
uint32_t address;
uint8_t data[16];
};
struct dmub_cmd_dp_aux_control_data {
uint32_t handle;
uint8_t port_index;
uint8_t sw_crc_enabled;
uint16_t timeout;
struct aux_transaction_parameters dpaux;
};
struct dmub_rb_cmd_dp_aux_access {
struct dmub_cmd_header header;
struct dmub_cmd_dp_aux_control_data aux_control;
};
struct dmub_rb_cmd_outbox1_enable {
struct dmub_cmd_header header;
uint32_t enable;
};
/* DP AUX Reply command - OutBox Cmd */
struct aux_reply_data {
uint8_t command;
uint8_t length;
uint8_t pad[2];
uint8_t data[16];
};
struct aux_reply_control_data {
uint32_t handle;
uint8_t phy_port_index;
uint8_t result;
uint16_t pad;
};
struct dmub_rb_cmd_dp_aux_reply {
struct dmub_cmd_header header;
struct aux_reply_control_data control;
struct aux_reply_data reply_data;
};
struct dp_hpd_data {
uint8_t phy_port_index;
uint8_t hpd_type;
uint8_t hpd_status;
uint8_t pad;
};
struct dmub_rb_cmd_dp_hpd_notify {
struct dmub_cmd_header header;
struct dp_hpd_data hpd_data;
};
/* /*
* Command IDs should be treated as stable ABI. * Command IDs should be treated as stable ABI.
* Do not reuse or modify IDs. * Do not reuse or modify IDs.
...@@ -690,8 +767,15 @@ union dmub_rb_cmd { ...@@ -690,8 +767,15 @@ union dmub_rb_cmd {
struct dmub_rb_cmd_abm_set_ambient_level abm_set_ambient_level; struct dmub_rb_cmd_abm_set_ambient_level abm_set_ambient_level;
struct dmub_rb_cmd_abm_set_pwm_frac abm_set_pwm_frac; struct dmub_rb_cmd_abm_set_pwm_frac abm_set_pwm_frac;
struct dmub_rb_cmd_abm_init_config abm_init_config; struct dmub_rb_cmd_abm_init_config abm_init_config;
struct dmub_rb_cmd_dp_aux_access dp_aux_access;
struct dmub_rb_cmd_outbox1_enable outbox1_enable;
}; };
union dmub_rb_out_cmd {
struct dmub_rb_cmd_common cmd_common;
struct dmub_rb_cmd_dp_aux_reply dp_aux_reply;
struct dmub_rb_cmd_dp_hpd_notify dp_hpd_notify;
};
#pragma pack(pop) #pragma pack(pop)
...@@ -764,6 +848,25 @@ static inline bool dmub_rb_push_front(struct dmub_rb *rb, ...@@ -764,6 +848,25 @@ static inline bool dmub_rb_push_front(struct dmub_rb *rb,
return true; return true;
} }
static inline bool dmub_rb_out_push_front(struct dmub_rb *rb,
const union dmub_rb_out_cmd *cmd)
{
uint8_t *dst = (uint8_t *)(rb->base_address) + rb->wrpt;
const uint8_t *src = (uint8_t *)cmd;
if (dmub_rb_full(rb))
return false;
dmub_memcpy(dst, src, DMUB_RB_CMD_SIZE);
rb->wrpt += DMUB_RB_CMD_SIZE;
if (rb->wrpt >= rb->capacity)
rb->wrpt %= rb->capacity;
return true;
}
static inline bool dmub_rb_front(struct dmub_rb *rb, static inline bool dmub_rb_front(struct dmub_rb *rb,
union dmub_rb_cmd *cmd) union dmub_rb_cmd *cmd)
{ {
...@@ -777,6 +880,23 @@ static inline bool dmub_rb_front(struct dmub_rb *rb, ...@@ -777,6 +880,23 @@ static inline bool dmub_rb_front(struct dmub_rb *rb,
return true; return true;
} }
static inline bool dmub_rb_out_front(struct dmub_rb *rb,
union dmub_rb_out_cmd *cmd)
{
const uint64_t volatile *src = (const uint64_t volatile *)(rb->base_address) + rb->rptr / sizeof(uint64_t);
uint64_t *dst = (uint64_t *)cmd;
int i;
if (dmub_rb_empty(rb))
return false;
// copying data
for (i = 0; i < DMUB_RB_CMD_SIZE / sizeof(uint64_t); i++)
*dst++ = *src++;
return true;
}
static inline bool dmub_rb_pop_front(struct dmub_rb *rb) static inline bool dmub_rb_pop_front(struct dmub_rb *rb)
{ {
if (dmub_rb_empty(rb)) if (dmub_rb_empty(rb))
......
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