Commit 5324e2b2 authored by Dillon Varone's avatar Dillon Varone Committed by Alex Deucher

drm/amd/display: Add driver support for future FAMS versions

[WHY&HOW]
Changes to support future versions of FAMS.
Reviewed-by: default avatarAlvin Lee <alvin.lee2@amd.com>
Acked-by: default avatarHamza Mahfooz <hamza.mahfooz@amd.com>
Signed-off-by: default avatarDillon Varone <dillon.varone@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 19407237
...@@ -44,8 +44,6 @@ ...@@ -44,8 +44,6 @@
#include "bios_parser_common.h" #include "bios_parser_common.h"
#include "dc.h"
#define THREE_PERCENT_OF_10000 300 #define THREE_PERCENT_OF_10000 300
#define LAST_RECORD_TYPE 0xff #define LAST_RECORD_TYPE 0xff
......
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
#include "resource.h" #include "resource.h"
#include "dc_state.h" #include "dc_state.h"
#include "dc_state_priv.h" #include "dc_state_priv.h"
#include "dc_plane_priv.h"
#include "gpio_service_interface.h" #include "gpio_service_interface.h"
#include "clk_mgr.h" #include "clk_mgr.h"
...@@ -3561,6 +3562,7 @@ static void commit_planes_for_stream_fast(struct dc *dc, ...@@ -3561,6 +3562,7 @@ static void commit_planes_for_stream_fast(struct dc *dc,
int i, j; int i, j;
struct pipe_ctx *top_pipe_to_program = NULL; struct pipe_ctx *top_pipe_to_program = NULL;
struct dc_stream_status *stream_status = NULL; struct dc_stream_status *stream_status = NULL;
dc_exit_ips_for_hw_access(dc); dc_exit_ips_for_hw_access(dc);
dc_z10_restore(dc); dc_z10_restore(dc);
...@@ -3618,7 +3620,8 @@ static void commit_planes_for_stream_fast(struct dc *dc, ...@@ -3618,7 +3620,8 @@ static void commit_planes_for_stream_fast(struct dc *dc,
context->block_sequence, context->block_sequence,
&(context->block_sequence_steps), &(context->block_sequence_steps),
top_pipe_to_program, top_pipe_to_program,
stream_status); stream_status,
context);
hwss_execute_sequence(dc, hwss_execute_sequence(dc,
context->block_sequence, context->block_sequence,
context->block_sequence_steps); context->block_sequence_steps);
......
...@@ -560,7 +560,8 @@ void hwss_build_fast_sequence(struct dc *dc, ...@@ -560,7 +560,8 @@ void hwss_build_fast_sequence(struct dc *dc,
struct block_sequence block_sequence[], struct block_sequence block_sequence[],
unsigned int *num_steps, unsigned int *num_steps,
struct pipe_ctx *pipe_ctx, struct pipe_ctx *pipe_ctx,
struct dc_stream_status *stream_status) struct dc_stream_status *stream_status,
struct dc_state *context)
{ {
struct dc_plane_state *plane = pipe_ctx->plane_state; struct dc_plane_state *plane = pipe_ctx->plane_state;
struct dc_stream_state *stream = pipe_ctx->stream; struct dc_stream_state *stream = pipe_ctx->stream;
......
...@@ -915,3 +915,4 @@ struct dc_stream_state *dc_state_get_stream_from_id(const struct dc_state *state ...@@ -915,3 +915,4 @@ struct dc_stream_state *dc_state_get_stream_from_id(const struct dc_state *state
return stream; return stream;
} }
...@@ -60,6 +60,26 @@ void dc_plane_destruct(struct dc_plane_state *plane_state) ...@@ -60,6 +60,26 @@ void dc_plane_destruct(struct dc_plane_state *plane_state)
// no more pointers to free within dc_plane_state // no more pointers to free within dc_plane_state
} }
/* dc_state is passed in separately since it may differ from the current dc state accessible from plane_state e.g.
* if the driver is doing an update from an old context to a new one and the caller wants the pipe mask for the new
* context rather than the existing one
*/
uint8_t dc_plane_get_pipe_mask(struct dc_state *dc_state, const struct dc_plane_state *plane_state)
{
uint8_t pipe_mask = 0;
int i;
for (i = 0; i < plane_state->ctx->dc->res_pool->pipe_count; i++) {
struct pipe_ctx *pipe_ctx = &dc_state->res_ctx.pipe_ctx[i];
if (pipe_ctx->plane_state == plane_state && pipe_ctx->plane_res.hubp)
pipe_mask |= 1 << pipe_ctx->plane_res.hubp->inst;
}
return pipe_mask;
}
/******************************************************************************* /*******************************************************************************
* Public functions * Public functions
******************************************************************************/ ******************************************************************************/
......
...@@ -44,6 +44,8 @@ ...@@ -44,6 +44,8 @@
#include "dml2/dml2_wrapper.h" #include "dml2/dml2_wrapper.h"
#include "dmub/inc/dmub_cmd.h"
struct abm_save_restore; struct abm_save_restore;
/* forward declaration */ /* forward declaration */
...@@ -219,6 +221,7 @@ struct dc_dmub_caps { ...@@ -219,6 +221,7 @@ struct dc_dmub_caps {
bool mclk_sw; bool mclk_sw;
bool subvp_psr; bool subvp_psr;
bool gecc_enable; bool gecc_enable;
uint8_t fams_ver;
}; };
struct dc_caps { struct dc_caps {
......
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
#include "resource.h" #include "resource.h"
#include "clk_mgr.h" #include "clk_mgr.h"
#include "dc_state_priv.h" #include "dc_state_priv.h"
#include "dc_plane_priv.h"
#define CTX dc_dmub_srv->ctx #define CTX dc_dmub_srv->ctx
#define DC_LOGGER CTX->logger #define DC_LOGGER CTX->logger
...@@ -1593,3 +1594,4 @@ bool dc_wake_and_execute_gpint(const struct dc_context *ctx, enum dmub_gpint_com ...@@ -1593,3 +1594,4 @@ bool dc_wake_and_execute_gpint(const struct dc_context *ctx, enum dmub_gpint_com
return result; return result;
} }
...@@ -35,6 +35,7 @@ struct pipe_ctx; ...@@ -35,6 +35,7 @@ struct pipe_ctx;
struct dc_crtc_timing_adjust; struct dc_crtc_timing_adjust;
struct dc_crtc_timing; struct dc_crtc_timing;
struct dc_state; struct dc_state;
struct dc_surface_update;
struct dc_reg_helper_state { struct dc_reg_helper_state {
bool gather_in_progress; bool gather_in_progress;
......
...@@ -30,5 +30,6 @@ ...@@ -30,5 +30,6 @@
void dc_plane_construct(struct dc_context *ctx, struct dc_plane_state *plane_state); void dc_plane_construct(struct dc_context *ctx, struct dc_plane_state *plane_state);
void dc_plane_destruct(struct dc_plane_state *plane_state); void dc_plane_destruct(struct dc_plane_state *plane_state);
uint8_t dc_plane_get_pipe_mask(struct dc_state *dc_state, const struct dc_plane_state *plane_state);
#endif /* _DC_PLANE_PRIV_H_ */ #endif /* _DC_PLANE_PRIV_H_ */
...@@ -956,7 +956,7 @@ void dcn32_init_hw(struct dc *dc) ...@@ -956,7 +956,7 @@ void dcn32_init_hw(struct dc *dc)
dc->caps.dmub_caps.mclk_sw = dc->ctx->dmub_srv->dmub->feature_caps.fw_assisted_mclk_switch_ver; dc->caps.dmub_caps.mclk_sw = dc->ctx->dmub_srv->dmub->feature_caps.fw_assisted_mclk_switch_ver;
if (dc->ctx->dmub_srv->dmub->fw_version < if (dc->ctx->dmub_srv->dmub->fw_version <
DMUB_FW_VERSION(7, 0, 35)) { DMUB_FW_VERSION(7, 0, 35)) {
dc->debug.force_disable_subvp = true; dc->debug.force_disable_subvp = true;
dc->debug.disable_fpo_optimizations = true; dc->debug.disable_fpo_optimizations = true;
} }
......
...@@ -482,7 +482,8 @@ void hwss_build_fast_sequence(struct dc *dc, ...@@ -482,7 +482,8 @@ void hwss_build_fast_sequence(struct dc *dc,
struct block_sequence block_sequence[], struct block_sequence block_sequence[],
unsigned int *num_steps, unsigned int *num_steps,
struct pipe_ctx *pipe_ctx, struct pipe_ctx *pipe_ctx,
struct dc_stream_status *stream_status); struct dc_stream_status *stream_status,
struct dc_state *context);
void hwss_send_dmcub_cmd(union block_sequence_params *params); void hwss_send_dmcub_cmd(union block_sequence_params *params);
......
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