Commit dbc43d5f authored by Hugo Hu's avatar Hugo Hu Committed by Alex Deucher

drm/amd/display: treat memory as a single-channel for asymmetric memory

[Why]
1. Driver use umachannelnumber to calculate watermarks for stutter.
In asymmetric memory config, the actual bandwidth is less than
dual-channel. The bandwidth should be the same as single-channel.
2. We found single rank dimm need additional delay time for stutter.

[How]
Get information from each DIMM. Treat memory config as a single-channel
for asymmetric memory in bandwidth calculating. Add additional delay
time for single rank dimm.
Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: default avatarHugo Hu <hugo.hu@amd.com>
Reviewed-by: default avatarTony Cheng <Tony.Cheng@amd.com>
Acked-by: default avatarRodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent c8392927
...@@ -761,6 +761,43 @@ static struct wm_table ddr4_wm_table_rn = { ...@@ -761,6 +761,43 @@ static struct wm_table ddr4_wm_table_rn = {
} }
}; };
static struct wm_table ddr4_1R_wm_table_rn = {
.entries = {
{
.wm_inst = WM_A,
.wm_type = WM_TYPE_PSTATE_CHG,
.pstate_latency_us = 11.72,
.sr_exit_time_us = 13.90,
.sr_enter_plus_exit_time_us = 14.80,
.valid = true,
},
{
.wm_inst = WM_B,
.wm_type = WM_TYPE_PSTATE_CHG,
.pstate_latency_us = 11.72,
.sr_exit_time_us = 13.90,
.sr_enter_plus_exit_time_us = 14.80,
.valid = true,
},
{
.wm_inst = WM_C,
.wm_type = WM_TYPE_PSTATE_CHG,
.pstate_latency_us = 11.72,
.sr_exit_time_us = 13.90,
.sr_enter_plus_exit_time_us = 14.80,
.valid = true,
},
{
.wm_inst = WM_D,
.wm_type = WM_TYPE_PSTATE_CHG,
.pstate_latency_us = 11.72,
.sr_exit_time_us = 13.90,
.sr_enter_plus_exit_time_us = 14.80,
.valid = true,
},
}
};
static struct wm_table lpddr4_wm_table_rn = { static struct wm_table lpddr4_wm_table_rn = {
.entries = { .entries = {
{ {
...@@ -932,8 +969,12 @@ void rn_clk_mgr_construct( ...@@ -932,8 +969,12 @@ void rn_clk_mgr_construct(
} else { } else {
if (is_green_sardine) if (is_green_sardine)
rn_bw_params.wm_table = ddr4_wm_table_gs; rn_bw_params.wm_table = ddr4_wm_table_gs;
else else {
rn_bw_params.wm_table = ddr4_wm_table_rn; if (ctx->dc->config.is_single_rank_dimm)
rn_bw_params.wm_table = ddr4_1R_wm_table_rn;
else
rn_bw_params.wm_table = ddr4_wm_table_rn;
}
} }
/* Saved clocks configured at boot for debug purposes */ /* Saved clocks configured at boot for debug purposes */
rn_dump_clk_registers(&clk_mgr->base.boot_snapshot, &clk_mgr->base, &log_info); rn_dump_clk_registers(&clk_mgr->base.boot_snapshot, &clk_mgr->base, &log_info);
...@@ -951,6 +992,9 @@ void rn_clk_mgr_construct( ...@@ -951,6 +992,9 @@ void rn_clk_mgr_construct(
if (status == PP_SMU_RESULT_OK && if (status == PP_SMU_RESULT_OK &&
ctx->dc_bios && ctx->dc_bios->integrated_info) { ctx->dc_bios && ctx->dc_bios->integrated_info) {
rn_clk_mgr_helper_populate_bw_params (clk_mgr->base.bw_params, &clock_table, ctx->dc_bios->integrated_info); rn_clk_mgr_helper_populate_bw_params (clk_mgr->base.bw_params, &clock_table, ctx->dc_bios->integrated_info);
/* treat memory config as single channel if memory is asymmetrics. */
if (ctx->dc->config.is_asymmetric_memory)
clk_mgr->base.bw_params->num_channels = 1;
} }
} }
......
...@@ -307,6 +307,8 @@ struct dc_config { ...@@ -307,6 +307,8 @@ struct dc_config {
#endif #endif
uint64_t vblank_alignment_dto_params; uint64_t vblank_alignment_dto_params;
uint8_t vblank_alignment_max_frame_time_diff; uint8_t vblank_alignment_max_frame_time_diff;
bool is_asymmetric_memory;
bool is_single_rank_dimm;
}; };
enum visual_confirm { enum visual_confirm {
......
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