Commit 6eef3746 authored by Alvin Lee's avatar Alvin Lee Committed by Alex Deucher

drm/amd/display: Add debug option for allocating extra way for cursor

[Why and How]
- Add a debug option for allocating extra way for cursor
- Remove usage of cache_cursor_addr since it's not gaurenteed
  to be populated
- Include cursor size in MALL calculation if it exceeds the
  DCN cursor buffer size (and don't need extra way for cursor)
Reviewed-by: default avatarAurabindo Pillai <Aurabindo.Pillai@amd.com>
Acked-by: default avatarWayne Lin <wayne.lin@amd.com>
Signed-off-by: default avatarAlvin Lee <Alvin.Lee2@amd.com>
Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 6349c738
...@@ -832,6 +832,7 @@ struct dc_debug_options { ...@@ -832,6 +832,7 @@ struct dc_debug_options {
bool force_subvp_mclk_switch; bool force_subvp_mclk_switch;
bool allow_sw_cursor_fallback; bool allow_sw_cursor_fallback;
unsigned int force_subvp_num_ways; unsigned int force_subvp_num_ways;
bool alloc_extra_way_for_cursor;
bool force_usr_allow; bool force_usr_allow;
/* uses value at boot and disables switch */ /* uses value at boot and disables switch */
bool disable_dtb_ref_clk_switch; bool disable_dtb_ref_clk_switch;
......
...@@ -304,7 +304,8 @@ static uint32_t dcn32_calculate_cab_allocation(struct dc *dc, struct dc_state *c ...@@ -304,7 +304,8 @@ static uint32_t dcn32_calculate_cab_allocation(struct dc *dc, struct dc_state *c
* using the max for calculation * using the max for calculation
*/ */
if (hubp->curs_attr.width > 0) { if (hubp->curs_attr.width > 0) {
cursor_size = hubp->curs_attr.width * hubp->curs_attr.height; // Round cursor width to next multiple of 64
cursor_size = (((hubp->curs_attr.width + 63) / 64) * 64) * hubp->curs_attr.height;
break; break;
} }
} }
...@@ -325,7 +326,8 @@ static uint32_t dcn32_calculate_cab_allocation(struct dc *dc, struct dc_state *c ...@@ -325,7 +326,8 @@ static uint32_t dcn32_calculate_cab_allocation(struct dc *dc, struct dc_state *c
break; break;
} }
if (stream->cursor_position.enable && plane->address.grph.cursor_cache_addr.quad_part) { if (stream->cursor_position.enable && !dc->debug.alloc_extra_way_for_cursor &&
cursor_size > 16384) {
cache_lines_used += dcn32_cache_lines_for_surface(dc, cursor_size, cache_lines_used += dcn32_cache_lines_for_surface(dc, cursor_size,
plane->address.grph.cursor_cache_addr.quad_part); plane->address.grph.cursor_cache_addr.quad_part);
} }
...@@ -345,8 +347,8 @@ static uint32_t dcn32_calculate_cab_allocation(struct dc *dc, struct dc_state *c ...@@ -345,8 +347,8 @@ static uint32_t dcn32_calculate_cab_allocation(struct dc *dc, struct dc_state *c
plane = ctx->stream_status[i].plane_states[j]; plane = ctx->stream_status[i].plane_states[j];
if (stream->cursor_position.enable && plane && if (stream->cursor_position.enable && plane &&
!plane->address.grph.cursor_cache_addr.quad_part && dc->debug.alloc_extra_way_for_cursor &&
cursor_size > 16384) { cursor_size > 16384) {
/* Cursor caching is not supported since it won't be on the same line. /* Cursor caching is not supported since it won't be on the same line.
* So we need an extra line to accommodate it. With large cursors and a single 4k monitor * So we need an extra line to accommodate it. With large cursors and a single 4k monitor
* this case triggers corruption. If we're at the edge, then dont trigger display refresh * this case triggers corruption. If we're at the edge, then dont trigger display refresh
......
...@@ -720,6 +720,7 @@ static const struct dc_debug_options debug_defaults_drv = { ...@@ -720,6 +720,7 @@ static const struct dc_debug_options debug_defaults_drv = {
.enable_single_display_2to1_odm_policy = true, .enable_single_display_2to1_odm_policy = true,
.enable_dp_dig_pixel_rate_div_policy = 1, .enable_dp_dig_pixel_rate_div_policy = 1,
.allow_sw_cursor_fallback = false, .allow_sw_cursor_fallback = false,
.alloc_extra_way_for_cursor = true,
}; };
static const struct dc_debug_options debug_defaults_diags = { static const struct dc_debug_options debug_defaults_diags = {
......
...@@ -720,6 +720,7 @@ static const struct dc_debug_options debug_defaults_drv = { ...@@ -720,6 +720,7 @@ static const struct dc_debug_options debug_defaults_drv = {
.enable_single_display_2to1_odm_policy = true, .enable_single_display_2to1_odm_policy = true,
.enable_dp_dig_pixel_rate_div_policy = 1, .enable_dp_dig_pixel_rate_div_policy = 1,
.allow_sw_cursor_fallback = false, .allow_sw_cursor_fallback = false,
.alloc_extra_way_for_cursor = true,
}; };
static const struct dc_debug_options debug_defaults_diags = { static const struct dc_debug_options debug_defaults_diags = {
......
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