drm/amd/display: align dmub cmd header to latest dmub FW to support PSR-SU
[why] PSR-SU is implemented in upstreamed dmub FW but not enabled on DM and DC. We'd add necessary and missing definitions in dmub cmd header to align w/ the up-to-date DMUB FW for PSR-SU support. [how] Add definitions and items below into dmub cmd header: - DMUB psr version enumeration for PSR-SU - dirty rectangle structure - psr debug flag of forcing full frame update - dmub command of updating dirty rectangle and cursor infor - dmub psr command type of setting sink vtotal in PSR active - dmub psr su debug flags structure - dmub cmd structure for - updating dirty rectangle - cursor infor - setting sink vtotal - dmub ringbuffer command items Signed-off-by: David Zhang <dingchen.zhang@amd.com> Acked-by: Leo Li <sunpeng.li@amd.com> Reviewed-by: Harry Wentland <harry.wentland@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
8b67e738ca
commit
83eb5385b4
@ -101,6 +101,11 @@
|
||||
/* Trace buffer offset for entry */
|
||||
#define TRACE_BUFFER_ENTRY_OFFSET 16
|
||||
|
||||
/**
|
||||
* Maximum number of dirty rects supported by FW.
|
||||
*/
|
||||
#define DMUB_MAX_DIRTY_RECTS 3
|
||||
|
||||
/**
|
||||
*
|
||||
* PSR control version legacy
|
||||
@ -165,6 +170,31 @@ union dmub_addr {
|
||||
uint64_t quad_part; /*<< 64 bit address */
|
||||
};
|
||||
|
||||
/**
|
||||
* Dirty rect definition.
|
||||
*/
|
||||
struct dmub_rect {
|
||||
/**
|
||||
* Dirty rect x offset.
|
||||
*/
|
||||
uint32_t x;
|
||||
|
||||
/**
|
||||
* Dirty rect y offset.
|
||||
*/
|
||||
uint32_t y;
|
||||
|
||||
/**
|
||||
* Dirty rect width.
|
||||
*/
|
||||
uint32_t width;
|
||||
|
||||
/**
|
||||
* Dirty rect height.
|
||||
*/
|
||||
uint32_t height;
|
||||
};
|
||||
|
||||
/**
|
||||
* Flags that can be set by driver to change some PSR behaviour.
|
||||
*/
|
||||
@ -177,6 +207,12 @@ union dmub_psr_debug_flags {
|
||||
* Enable visual confirm in FW.
|
||||
*/
|
||||
uint32_t visual_confirm : 1;
|
||||
|
||||
/**
|
||||
* Force all selective updates to bw full frame updates.
|
||||
*/
|
||||
uint32_t force_full_frame_update : 1;
|
||||
|
||||
/**
|
||||
* Use HW Lock Mgr object to do HW locking in FW.
|
||||
*/
|
||||
@ -616,6 +652,14 @@ enum dmub_cmd_type {
|
||||
* Command type used for all ABM commands.
|
||||
*/
|
||||
DMUB_CMD__ABM = 66,
|
||||
/**
|
||||
* Command type used to update dirty rects in FW.
|
||||
*/
|
||||
DMUB_CMD__UPDATE_DIRTY_RECT = 67,
|
||||
/**
|
||||
* Command type used to update cursor info in FW.
|
||||
*/
|
||||
DMUB_CMD__UPDATE_CURSOR_INFO = 68,
|
||||
/**
|
||||
* Command type used for HW locking in FW.
|
||||
*/
|
||||
@ -1439,6 +1483,10 @@ enum dmub_cmd_psr_type {
|
||||
* Forces PSR enabled until an explicit PSR disable call.
|
||||
*/
|
||||
DMUB_CMD__PSR_FORCE_STATIC = 5,
|
||||
/**
|
||||
* Set vtotal in psr active for FreeSync PSR.
|
||||
*/
|
||||
DMUB_CMD__SET_SINK_VTOTAL_IN_PSR_ACTIVE = 6,
|
||||
/**
|
||||
* Set PSR power option
|
||||
*/
|
||||
@ -1453,6 +1501,10 @@ enum psr_version {
|
||||
* PSR version 1.
|
||||
*/
|
||||
PSR_VERSION_1 = 0,
|
||||
/**
|
||||
* Freesync PSR SU.
|
||||
*/
|
||||
PSR_VERSION_SU_1 = 1,
|
||||
/**
|
||||
* PSR not supported.
|
||||
*/
|
||||
@ -1620,9 +1672,15 @@ struct dmub_cmd_psr_copy_settings_data {
|
||||
*/
|
||||
uint8_t frame_cap_ind;
|
||||
/**
|
||||
* Explicit padding to 4 byte boundary.
|
||||
* Granularity of Y offset supported by sink.
|
||||
*/
|
||||
uint8_t pad[2];
|
||||
uint8_t su_y_granularity;
|
||||
/**
|
||||
* Indicates whether sink should start capturing
|
||||
* immediately following active scan line,
|
||||
* or starting with the 2nd active scan line.
|
||||
*/
|
||||
uint8_t line_capture_indication;
|
||||
/**
|
||||
* Multi-display optimizations are implemented on certain ASICs.
|
||||
*/
|
||||
@ -1633,9 +1691,13 @@ struct dmub_cmd_psr_copy_settings_data {
|
||||
*/
|
||||
uint16_t init_sdp_deadline;
|
||||
/**
|
||||
* Explicit padding to 4 byte boundary.
|
||||
* @ rate_control_caps : Indicate FreeSync PSR Sink Capabilities
|
||||
*/
|
||||
uint16_t pad2;
|
||||
uint8_t rate_control_caps ;
|
||||
/*
|
||||
* Force PSRSU always doing full frame update
|
||||
*/
|
||||
uint8_t force_ffu_mode;
|
||||
/**
|
||||
* Length of each horizontal line in us.
|
||||
*/
|
||||
@ -1827,6 +1889,164 @@ struct dmub_rb_cmd_psr_force_static {
|
||||
struct dmub_cmd_psr_force_static_data psr_force_static_data;
|
||||
};
|
||||
|
||||
/**
|
||||
* PSR SU debug flags.
|
||||
*/
|
||||
union dmub_psr_su_debug_flags {
|
||||
/**
|
||||
* PSR SU debug flags.
|
||||
*/
|
||||
struct {
|
||||
/**
|
||||
* Update dirty rect in SW only.
|
||||
*/
|
||||
uint8_t update_dirty_rect_only : 1;
|
||||
/**
|
||||
* Reset the cursor/plane state before processing the call.
|
||||
*/
|
||||
uint8_t reset_state : 1;
|
||||
} bitfields;
|
||||
|
||||
/**
|
||||
* Union for debug flags.
|
||||
*/
|
||||
uint32_t u32All;
|
||||
};
|
||||
|
||||
/**
|
||||
* Data passed from driver to FW in a DMUB_CMD__UPDATE_DIRTY_RECT command.
|
||||
* This triggers a selective update for PSR SU.
|
||||
*/
|
||||
struct dmub_cmd_update_dirty_rect_data {
|
||||
/**
|
||||
* Dirty rects from OS.
|
||||
*/
|
||||
struct dmub_rect src_dirty_rects[DMUB_MAX_DIRTY_RECTS];
|
||||
/**
|
||||
* PSR SU debug flags.
|
||||
*/
|
||||
union dmub_psr_su_debug_flags debug_flags;
|
||||
/**
|
||||
* OTG HW instance.
|
||||
*/
|
||||
uint8_t pipe_idx;
|
||||
/**
|
||||
* Number of dirty rects.
|
||||
*/
|
||||
uint8_t dirty_rect_count;
|
||||
/**
|
||||
* PSR control version.
|
||||
*/
|
||||
uint8_t cmd_version;
|
||||
/**
|
||||
* Panel Instance.
|
||||
* Panel isntance to identify which psr_state to use
|
||||
* Currently the support is only for 0 or 1
|
||||
*/
|
||||
uint8_t panel_inst;
|
||||
};
|
||||
|
||||
/**
|
||||
* Definition of a DMUB_CMD__UPDATE_DIRTY_RECT command.
|
||||
*/
|
||||
struct dmub_rb_cmd_update_dirty_rect {
|
||||
/**
|
||||
* Command header.
|
||||
*/
|
||||
struct dmub_cmd_header header;
|
||||
/**
|
||||
* Data passed from driver to FW in a DMUB_CMD__UPDATE_DIRTY_RECT command.
|
||||
*/
|
||||
struct dmub_cmd_update_dirty_rect_data update_dirty_rect_data;
|
||||
};
|
||||
|
||||
/**
|
||||
* Data passed from driver to FW in a DMUB_CMD__UPDATE_CURSOR_INFO command.
|
||||
*/
|
||||
struct dmub_cmd_update_cursor_info_data {
|
||||
/**
|
||||
* Cursor dirty rects.
|
||||
*/
|
||||
struct dmub_rect cursor_rect;
|
||||
/**
|
||||
* PSR SU debug flags.
|
||||
*/
|
||||
union dmub_psr_su_debug_flags debug_flags;
|
||||
/**
|
||||
* Cursor enable/disable.
|
||||
*/
|
||||
uint8_t enable;
|
||||
/**
|
||||
* OTG HW instance.
|
||||
*/
|
||||
uint8_t pipe_idx;
|
||||
/**
|
||||
* PSR control version.
|
||||
*/
|
||||
uint8_t cmd_version;
|
||||
/**
|
||||
* Panel Instance.
|
||||
* Panel isntance to identify which psr_state to use
|
||||
* Currently the support is only for 0 or 1
|
||||
*/
|
||||
uint8_t panel_inst;
|
||||
};
|
||||
/**
|
||||
* Definition of a DMUB_CMD__UPDATE_CURSOR_INFO command.
|
||||
*/
|
||||
struct dmub_rb_cmd_update_cursor_info {
|
||||
/**
|
||||
* Command header.
|
||||
*/
|
||||
struct dmub_cmd_header header;
|
||||
/**
|
||||
* Data passed from driver to FW in a DMUB_CMD__UPDATE_CURSOR_INFO command.
|
||||
*/
|
||||
struct dmub_cmd_update_cursor_info_data update_cursor_info_data;
|
||||
};
|
||||
|
||||
/**
|
||||
* Data passed from driver to FW in a DMUB_CMD__SET_SINK_VTOTAL_IN_PSR_ACTIVE command.
|
||||
*/
|
||||
struct dmub_cmd_psr_set_vtotal_data {
|
||||
/**
|
||||
* 16-bit value dicated by driver that indicates the vtotal in PSR active requirement when screen idle..
|
||||
*/
|
||||
uint16_t psr_vtotal_idle;
|
||||
/**
|
||||
* PSR control version.
|
||||
*/
|
||||
uint8_t cmd_version;
|
||||
/**
|
||||
* Panel Instance.
|
||||
* Panel isntance to identify which psr_state to use
|
||||
* Currently the support is only for 0 or 1
|
||||
*/
|
||||
uint8_t panel_inst;
|
||||
/*
|
||||
* 16-bit value dicated by driver that indicates the vtotal in PSR active requirement when doing SU/FFU.
|
||||
*/
|
||||
uint16_t psr_vtotal_su;
|
||||
/**
|
||||
* Explicit padding to 4 byte boundary.
|
||||
*/
|
||||
uint8_t pad2[2];
|
||||
};
|
||||
|
||||
/**
|
||||
* Definition of a DMUB_CMD__SET_SINK_VTOTAL_IN_PSR_ACTIVE command.
|
||||
*/
|
||||
struct dmub_rb_cmd_psr_set_vtotal {
|
||||
/**
|
||||
* Command header.
|
||||
*/
|
||||
struct dmub_cmd_header header;
|
||||
/**
|
||||
* Definition of a DMUB_CMD__SET_SINK_VTOTAL_IN_PSR_ACTIVE command.
|
||||
*/
|
||||
struct dmub_cmd_psr_set_vtotal_data psr_set_vtotal_data;
|
||||
};
|
||||
|
||||
/**
|
||||
* Data passed from driver to FW in a DMUB_CMD__SET_PSR_POWER_OPT command.
|
||||
*/
|
||||
@ -1937,6 +2157,10 @@ enum hw_lock_client {
|
||||
* Driver is the client of HW Lock Manager.
|
||||
*/
|
||||
HW_LOCK_CLIENT_DRIVER = 0,
|
||||
/**
|
||||
* PSR SU is the client of HW Lock Manager.
|
||||
*/
|
||||
HW_LOCK_CLIENT_PSR_SU = 1,
|
||||
/**
|
||||
* Invalid client.
|
||||
*/
|
||||
@ -2640,7 +2864,6 @@ struct dmub_rb_cmd_get_usbc_cable_id {
|
||||
* union dmub_rb_cmd - DMUB inbox command.
|
||||
*/
|
||||
union dmub_rb_cmd {
|
||||
struct dmub_rb_cmd_lock_hw lock_hw;
|
||||
/**
|
||||
* Elements shared with all commands.
|
||||
*/
|
||||
@ -2701,6 +2924,23 @@ union dmub_rb_cmd {
|
||||
* Definition of a DMUB_CMD__PSR_FORCE_STATIC command.
|
||||
*/
|
||||
struct dmub_rb_cmd_psr_force_static psr_force_static;
|
||||
/**
|
||||
* Definition of a DMUB_CMD__UPDATE_DIRTY_RECT command.
|
||||
*/
|
||||
struct dmub_rb_cmd_update_dirty_rect update_dirty_rect;
|
||||
/**
|
||||
* Definition of a DMUB_CMD__UPDATE_CURSOR_INFO command.
|
||||
*/
|
||||
struct dmub_rb_cmd_update_cursor_info update_cursor_info;
|
||||
/**
|
||||
* Definition of a DMUB_CMD__HW_LOCK command.
|
||||
* Command is used by driver and FW.
|
||||
*/
|
||||
struct dmub_rb_cmd_lock_hw lock_hw;
|
||||
/**
|
||||
* Definition of a DMUB_CMD__SET_SINK_VTOTAL_IN_PSR_ACTIVE command.
|
||||
*/
|
||||
struct dmub_rb_cmd_psr_set_vtotal psr_set_vtotal;
|
||||
/**
|
||||
* Definition of a DMUB_CMD__SET_PSR_POWER_OPT command.
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user