Commit 1178ac68 authored by Ian Chen's avatar Ian Chen Committed by Alex Deucher

drm/amd/display: Refactor edp ILR caps codes

We split out ILR config from "global" to "per-panel" config settings.
Reviewed-by: default avatarAnthony Koo <Anthony.Koo@amd.com>
Acked-by: default avatarHamza Mahfooz <hamza.mahfooz@amd.com>
Signed-off-by: default avatarIan Chen <ian.chen@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 7aeb2e47
...@@ -1307,7 +1307,10 @@ static bool detect_link_and_local_sink(struct dc_link *link, ...@@ -1307,7 +1307,10 @@ static bool detect_link_and_local_sink(struct dc_link *link,
} }
if (link->connector_signal == SIGNAL_TYPE_EDP) { if (link->connector_signal == SIGNAL_TYPE_EDP) {
// Init dc_panel_config /* Init dc_panel_config by HW config */
if (dc_ctx->dc->res_pool->funcs->get_panel_config_defaults)
dc_ctx->dc->res_pool->funcs->get_panel_config_defaults(&link->panel_config);
/* Pickup base DM settings */
dm_helpers_init_panel_settings(dc_ctx, &link->panel_config, sink); dm_helpers_init_panel_settings(dc_ctx, &link->panel_config, sink);
// Override dc_panel_config if system has specific settings // Override dc_panel_config if system has specific settings
dm_helpers_override_panel_settings(dc_ctx, &link->panel_config); dm_helpers_override_panel_settings(dc_ctx, &link->panel_config);
......
...@@ -5795,7 +5795,7 @@ void detect_edp_sink_caps(struct dc_link *link) ...@@ -5795,7 +5795,7 @@ void detect_edp_sink_caps(struct dc_link *link)
* Per VESA eDP spec, "The DPCD revision for eDP v1.4 is 13h" * Per VESA eDP spec, "The DPCD revision for eDP v1.4 is 13h"
*/ */
if (link->dpcd_caps.dpcd_rev.raw >= DPCD_REV_13 && if (link->dpcd_caps.dpcd_rev.raw >= DPCD_REV_13 &&
(link->dc->debug.optimize_edp_link_rate || (link->panel_config.ilr.optimize_edp_link_rate ||
link->reported_link_cap.link_rate == LINK_RATE_UNKNOWN)) { link->reported_link_cap.link_rate == LINK_RATE_UNKNOWN)) {
// Read DPCD 00010h - 0001Fh 16 bytes at one shot // Read DPCD 00010h - 0001Fh 16 bytes at one shot
core_link_read_dpcd(link, DP_SUPPORTED_LINK_RATES, core_link_read_dpcd(link, DP_SUPPORTED_LINK_RATES,
...@@ -6744,7 +6744,7 @@ bool is_edp_ilr_optimization_required(struct dc_link *link, struct dc_crtc_timin ...@@ -6744,7 +6744,7 @@ bool is_edp_ilr_optimization_required(struct dc_link *link, struct dc_crtc_timin
ASSERT(link || crtc_timing); // invalid input ASSERT(link || crtc_timing); // invalid input
if (link->dpcd_caps.edp_supported_link_rates_count == 0 || if (link->dpcd_caps.edp_supported_link_rates_count == 0 ||
!link->dc->debug.optimize_edp_link_rate) !link->panel_config.ilr.optimize_edp_link_rate)
return false; return false;
......
...@@ -821,7 +821,6 @@ struct dc_debug_options { ...@@ -821,7 +821,6 @@ struct dc_debug_options {
/* Enable dmub aux for legacy ddc */ /* Enable dmub aux for legacy ddc */
bool enable_dmub_aux_for_legacy_ddc; bool enable_dmub_aux_for_legacy_ddc;
bool disable_fams; bool disable_fams;
bool optimize_edp_link_rate; /* eDP ILR */
/* FEC/PSR1 sequence enable delay in 100us */ /* FEC/PSR1 sequence enable delay in 100us */
uint8_t fec_enable_delay_in100us; uint8_t fec_enable_delay_in100us;
bool enable_driver_sequence_debug; bool enable_driver_sequence_debug;
......
...@@ -138,6 +138,10 @@ struct dc_panel_config { ...@@ -138,6 +138,10 @@ struct dc_panel_config {
bool disable_dsc_edp; bool disable_dsc_edp;
unsigned int force_dsc_edp_policy; unsigned int force_dsc_edp_policy;
} dsc; } dsc;
/* eDP ILR */
struct ilr {
bool optimize_edp_link_rate; /* eDP ILR */
} ilr;
}; };
/* /*
* A link contains one or more sinks and their connected status. * A link contains one or more sinks and their connected status.
......
...@@ -657,7 +657,6 @@ static const struct dc_debug_options debug_defaults_drv = { ...@@ -657,7 +657,6 @@ static const struct dc_debug_options debug_defaults_drv = {
.usbc_combo_phy_reset_wa = true, .usbc_combo_phy_reset_wa = true,
.dmub_command_table = true, .dmub_command_table = true,
.use_max_lb = true, .use_max_lb = true,
.optimize_edp_link_rate = true
}; };
static const struct dc_debug_options debug_defaults_diags = { static const struct dc_debug_options debug_defaults_diags = {
...@@ -677,6 +676,12 @@ static const struct dc_debug_options debug_defaults_diags = { ...@@ -677,6 +676,12 @@ static const struct dc_debug_options debug_defaults_diags = {
.use_max_lb = true .use_max_lb = true
}; };
static const struct dc_panel_config panel_config_defaults = {
.ilr = {
.optimize_edp_link_rate = true,
},
};
enum dcn20_clk_src_array_id { enum dcn20_clk_src_array_id {
DCN20_CLK_SRC_PLL0, DCN20_CLK_SRC_PLL0,
DCN20_CLK_SRC_PLL1, DCN20_CLK_SRC_PLL1,
...@@ -1367,6 +1372,11 @@ static struct panel_cntl *dcn21_panel_cntl_create(const struct panel_cntl_init_d ...@@ -1367,6 +1372,11 @@ static struct panel_cntl *dcn21_panel_cntl_create(const struct panel_cntl_init_d
return &panel_cntl->base; return &panel_cntl->base;
} }
static void dcn21_get_panel_config_defaults(struct dc_panel_config *panel_config)
{
*panel_config = panel_config_defaults;
}
#define CTX ctx #define CTX ctx
#define REG(reg_name) \ #define REG(reg_name) \
...@@ -1408,6 +1418,7 @@ static const struct resource_funcs dcn21_res_pool_funcs = { ...@@ -1408,6 +1418,7 @@ static const struct resource_funcs dcn21_res_pool_funcs = {
.set_mcif_arb_params = dcn20_set_mcif_arb_params, .set_mcif_arb_params = dcn20_set_mcif_arb_params,
.find_first_free_match_stream_enc_for_link = dcn10_find_first_free_match_stream_enc_for_link, .find_first_free_match_stream_enc_for_link = dcn10_find_first_free_match_stream_enc_for_link,
.update_bw_bounding_box = dcn21_update_bw_bounding_box, .update_bw_bounding_box = dcn21_update_bw_bounding_box,
.get_panel_config_defaults = dcn21_get_panel_config_defaults,
}; };
static bool dcn21_resource_construct( static bool dcn21_resource_construct(
......
...@@ -888,7 +888,6 @@ static const struct dc_debug_options debug_defaults_drv = { ...@@ -888,7 +888,6 @@ static const struct dc_debug_options debug_defaults_drv = {
} }
}, },
.disable_z10 = true, .disable_z10 = true,
.optimize_edp_link_rate = true,
.enable_z9_disable_interface = true, /* Allow support for the PMFW interface for disable Z9*/ .enable_z9_disable_interface = true, /* Allow support for the PMFW interface for disable Z9*/
.dml_hostvm_override = DML_HOSTVM_OVERRIDE_FALSE, .dml_hostvm_override = DML_HOSTVM_OVERRIDE_FALSE,
}; };
...@@ -911,6 +910,12 @@ static const struct dc_debug_options debug_defaults_diags = { ...@@ -911,6 +910,12 @@ static const struct dc_debug_options debug_defaults_diags = {
.use_max_lb = true .use_max_lb = true
}; };
static const struct dc_panel_config panel_config_defaults = {
.ilr = {
.optimize_edp_link_rate = true,
},
};
static void dcn31_dpp_destroy(struct dpp **dpp) static void dcn31_dpp_destroy(struct dpp **dpp)
{ {
kfree(TO_DCN20_DPP(*dpp)); kfree(TO_DCN20_DPP(*dpp));
...@@ -1803,6 +1808,11 @@ bool dcn31_validate_bandwidth(struct dc *dc, ...@@ -1803,6 +1808,11 @@ bool dcn31_validate_bandwidth(struct dc *dc,
return out; return out;
} }
static void dcn31_get_panel_config_defaults(struct dc_panel_config *panel_config)
{
*panel_config = panel_config_defaults;
}
static struct dc_cap_funcs cap_funcs = { static struct dc_cap_funcs cap_funcs = {
.get_dcc_compression_cap = dcn20_get_dcc_compression_cap .get_dcc_compression_cap = dcn20_get_dcc_compression_cap
}; };
...@@ -1829,6 +1839,7 @@ static struct resource_funcs dcn31_res_pool_funcs = { ...@@ -1829,6 +1839,7 @@ static struct resource_funcs dcn31_res_pool_funcs = {
.release_post_bldn_3dlut = dcn30_release_post_bldn_3dlut, .release_post_bldn_3dlut = dcn30_release_post_bldn_3dlut,
.update_bw_bounding_box = dcn31_update_bw_bounding_box, .update_bw_bounding_box = dcn31_update_bw_bounding_box,
.patch_unknown_plane_state = dcn20_patch_unknown_plane_state, .patch_unknown_plane_state = dcn20_patch_unknown_plane_state,
.get_panel_config_defaults = dcn31_get_panel_config_defaults,
}; };
static struct clock_source *dcn30_clock_source_create( static struct clock_source *dcn30_clock_source_create(
......
...@@ -914,7 +914,6 @@ static const struct dc_debug_options debug_defaults_drv = { ...@@ -914,7 +914,6 @@ static const struct dc_debug_options debug_defaults_drv = {
.afmt = true, .afmt = true,
} }
}, },
.optimize_edp_link_rate = true,
.seamless_boot_odm_combine = true .seamless_boot_odm_combine = true
}; };
...@@ -936,6 +935,12 @@ static const struct dc_debug_options debug_defaults_diags = { ...@@ -936,6 +935,12 @@ static const struct dc_debug_options debug_defaults_diags = {
.use_max_lb = true .use_max_lb = true
}; };
static const struct dc_panel_config panel_config_defaults = {
.ilr = {
.optimize_edp_link_rate = true,
},
};
static void dcn31_dpp_destroy(struct dpp **dpp) static void dcn31_dpp_destroy(struct dpp **dpp)
{ {
kfree(TO_DCN20_DPP(*dpp)); kfree(TO_DCN20_DPP(*dpp));
...@@ -1675,6 +1680,11 @@ static void dcn314_update_bw_bounding_box(struct dc *dc, struct clk_bw_params *b ...@@ -1675,6 +1680,11 @@ static void dcn314_update_bw_bounding_box(struct dc *dc, struct clk_bw_params *b
DC_FP_END(); DC_FP_END();
} }
static void dcn314_get_panel_config_defaults(struct dc_panel_config *panel_config)
{
*panel_config = panel_config_defaults;
}
static struct resource_funcs dcn314_res_pool_funcs = { static struct resource_funcs dcn314_res_pool_funcs = {
.destroy = dcn314_destroy_resource_pool, .destroy = dcn314_destroy_resource_pool,
.link_enc_create = dcn31_link_encoder_create, .link_enc_create = dcn31_link_encoder_create,
...@@ -1697,6 +1707,7 @@ static struct resource_funcs dcn314_res_pool_funcs = { ...@@ -1697,6 +1707,7 @@ static struct resource_funcs dcn314_res_pool_funcs = {
.release_post_bldn_3dlut = dcn30_release_post_bldn_3dlut, .release_post_bldn_3dlut = dcn30_release_post_bldn_3dlut,
.update_bw_bounding_box = dcn314_update_bw_bounding_box, .update_bw_bounding_box = dcn314_update_bw_bounding_box,
.patch_unknown_plane_state = dcn20_patch_unknown_plane_state, .patch_unknown_plane_state = dcn20_patch_unknown_plane_state,
.get_panel_config_defaults = dcn314_get_panel_config_defaults,
}; };
static struct clock_source *dcn30_clock_source_create( static struct clock_source *dcn30_clock_source_create(
......
...@@ -885,7 +885,6 @@ static const struct dc_debug_options debug_defaults_drv = { ...@@ -885,7 +885,6 @@ static const struct dc_debug_options debug_defaults_drv = {
.afmt = true, .afmt = true,
} }
}, },
.optimize_edp_link_rate = true,
.psr_power_use_phy_fsm = 0, .psr_power_use_phy_fsm = 0,
}; };
...@@ -907,6 +906,12 @@ static const struct dc_debug_options debug_defaults_diags = { ...@@ -907,6 +906,12 @@ static const struct dc_debug_options debug_defaults_diags = {
.use_max_lb = true .use_max_lb = true
}; };
static const struct dc_panel_config panel_config_defaults = {
.ilr = {
.optimize_edp_link_rate = true,
},
};
static void dcn31_dpp_destroy(struct dpp **dpp) static void dcn31_dpp_destroy(struct dpp **dpp)
{ {
kfree(TO_DCN20_DPP(*dpp)); kfree(TO_DCN20_DPP(*dpp));
...@@ -1708,6 +1713,11 @@ static int dcn315_populate_dml_pipes_from_context( ...@@ -1708,6 +1713,11 @@ static int dcn315_populate_dml_pipes_from_context(
return pipe_cnt; return pipe_cnt;
} }
static void dcn315_get_panel_config_defaults(struct dc_panel_config *panel_config)
{
*panel_config = panel_config_defaults;
}
static struct dc_cap_funcs cap_funcs = { static struct dc_cap_funcs cap_funcs = {
.get_dcc_compression_cap = dcn20_get_dcc_compression_cap .get_dcc_compression_cap = dcn20_get_dcc_compression_cap
}; };
...@@ -1734,6 +1744,7 @@ static struct resource_funcs dcn315_res_pool_funcs = { ...@@ -1734,6 +1744,7 @@ static struct resource_funcs dcn315_res_pool_funcs = {
.release_post_bldn_3dlut = dcn30_release_post_bldn_3dlut, .release_post_bldn_3dlut = dcn30_release_post_bldn_3dlut,
.update_bw_bounding_box = dcn315_update_bw_bounding_box, .update_bw_bounding_box = dcn315_update_bw_bounding_box,
.patch_unknown_plane_state = dcn20_patch_unknown_plane_state, .patch_unknown_plane_state = dcn20_patch_unknown_plane_state,
.get_panel_config_defaults = dcn315_get_panel_config_defaults,
}; };
static bool dcn315_resource_construct( static bool dcn315_resource_construct(
......
...@@ -885,7 +885,6 @@ static const struct dc_debug_options debug_defaults_drv = { ...@@ -885,7 +885,6 @@ static const struct dc_debug_options debug_defaults_drv = {
.afmt = true, .afmt = true,
} }
}, },
.optimize_edp_link_rate = true,
}; };
static const struct dc_debug_options debug_defaults_diags = { static const struct dc_debug_options debug_defaults_diags = {
...@@ -906,6 +905,12 @@ static const struct dc_debug_options debug_defaults_diags = { ...@@ -906,6 +905,12 @@ static const struct dc_debug_options debug_defaults_diags = {
.use_max_lb = true .use_max_lb = true
}; };
static const struct dc_panel_config panel_config_defaults = {
.ilr = {
.optimize_edp_link_rate = true,
},
};
static void dcn31_dpp_destroy(struct dpp **dpp) static void dcn31_dpp_destroy(struct dpp **dpp)
{ {
kfree(TO_DCN20_DPP(*dpp)); kfree(TO_DCN20_DPP(*dpp));
...@@ -1710,6 +1715,11 @@ static int dcn316_populate_dml_pipes_from_context( ...@@ -1710,6 +1715,11 @@ static int dcn316_populate_dml_pipes_from_context(
return pipe_cnt; return pipe_cnt;
} }
static void dcn316_get_panel_config_defaults(struct dc_panel_config *panel_config)
{
*panel_config = panel_config_defaults;
}
static struct dc_cap_funcs cap_funcs = { static struct dc_cap_funcs cap_funcs = {
.get_dcc_compression_cap = dcn20_get_dcc_compression_cap .get_dcc_compression_cap = dcn20_get_dcc_compression_cap
}; };
...@@ -1736,6 +1746,7 @@ static struct resource_funcs dcn316_res_pool_funcs = { ...@@ -1736,6 +1746,7 @@ static struct resource_funcs dcn316_res_pool_funcs = {
.release_post_bldn_3dlut = dcn30_release_post_bldn_3dlut, .release_post_bldn_3dlut = dcn30_release_post_bldn_3dlut,
.update_bw_bounding_box = dcn316_update_bw_bounding_box, .update_bw_bounding_box = dcn316_update_bw_bounding_box,
.patch_unknown_plane_state = dcn20_patch_unknown_plane_state, .patch_unknown_plane_state = dcn20_patch_unknown_plane_state,
.get_panel_config_defaults = dcn316_get_panel_config_defaults,
}; };
static bool dcn316_resource_construct( static bool dcn316_resource_construct(
......
...@@ -232,6 +232,7 @@ struct resource_funcs { ...@@ -232,6 +232,7 @@ struct resource_funcs {
unsigned int index); unsigned int index);
bool (*remove_phantom_pipes)(struct dc *dc, struct dc_state *context); bool (*remove_phantom_pipes)(struct dc *dc, struct dc_state *context);
void (*get_panel_config_defaults)(struct dc_panel_config *panel_config);
}; };
struct audio_support{ struct audio_support{
......
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