mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-23 05:56:14 -04:00
drm/amd/display: implement dc_mode_memclk
why: Need interface to lower clocks when in dc (power save) mode. Must be able to work with p_state unsupported cases Can cause flicker when OS notifies us of dc state change how: added dal3 interface for KMD added pathway to query smu for this softmax added blank before clock change to override underflow added logic to change clk based on pstatesupport and softmax added logic in prepare/optimize_bw to conform while changing clocks Reviewed-by: Aric Cyr <Aric.Cyr@amd.com> Acked-by: Pavle Kotarac <Pavle.Kotarac@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Martin Leung <Martin.Leung@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
committed by
Alex Deucher
parent
b477143566
commit
4866b0bfea
@@ -490,6 +490,7 @@ static struct hubp_funcs dcn30_hubp_funcs = {
|
||||
.hubp_setup_interdependent = hubp2_setup_interdependent,
|
||||
.hubp_set_vm_system_aperture_settings = hubp3_set_vm_system_aperture_settings,
|
||||
.set_blank = hubp2_set_blank,
|
||||
.set_blank_regs = hubp2_set_blank_regs,
|
||||
.dcc_control = hubp3_dcc_control,
|
||||
.mem_program_viewport = min_set_viewport,
|
||||
.set_cursor_attributes = hubp2_cursor_set_attributes,
|
||||
|
||||
@@ -344,6 +344,17 @@ void dcn30_enable_writeback(
|
||||
dwb->funcs->enable(dwb, &wb_info->dwb_params);
|
||||
}
|
||||
|
||||
void dcn30_prepare_bandwidth(struct dc *dc,
|
||||
struct dc_state *context)
|
||||
{
|
||||
if (dc->clk_mgr->dc_mode_softmax_enabled)
|
||||
if (dc->clk_mgr->clks.dramclk_khz <= dc->clk_mgr->bw_params->dc_mode_softmax_memclk * 1000 &&
|
||||
context->bw_ctx.bw.dcn.clk.dramclk_khz > dc->clk_mgr->bw_params->dc_mode_softmax_memclk * 1000)
|
||||
dc->clk_mgr->funcs->set_max_memclk(dc->clk_mgr, dc->clk_mgr->bw_params->clk_table.entries[dc->clk_mgr->bw_params->clk_table.num_entries - 1].memclk_mhz);
|
||||
|
||||
dcn20_prepare_bandwidth(dc, context);
|
||||
}
|
||||
|
||||
void dcn30_disable_writeback(
|
||||
struct dc *dc,
|
||||
unsigned int dwb_pipe_inst)
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
#define __DC_HWSS_DCN30_H__
|
||||
|
||||
#include "hw_sequencer_private.h"
|
||||
|
||||
#include "dcn20/dcn20_hwseq.h"
|
||||
struct dc;
|
||||
|
||||
void dcn30_init_hw(struct dc *dc);
|
||||
@@ -47,6 +47,9 @@ void dcn30_disable_writeback(
|
||||
struct dc *dc,
|
||||
unsigned int dwb_pipe_inst);
|
||||
|
||||
void dcn30_prepare_bandwidth(struct dc *dc,
|
||||
struct dc_state *context);
|
||||
|
||||
bool dcn30_mmhubbub_warmup(
|
||||
struct dc *dc,
|
||||
unsigned int num_dwb,
|
||||
|
||||
@@ -55,6 +55,7 @@ static const struct hw_sequencer_funcs dcn30_funcs = {
|
||||
.enable_audio_stream = dce110_enable_audio_stream,
|
||||
.disable_audio_stream = dce110_disable_audio_stream,
|
||||
.disable_plane = dcn20_disable_plane,
|
||||
.disable_pixel_data = dcn20_disable_pixel_data,
|
||||
.pipe_control_lock = dcn20_pipe_control_lock,
|
||||
.interdependent_update_lock = dcn10_lock_all_pipes,
|
||||
.cursor_lock = dcn10_cursor_lock,
|
||||
|
||||
Reference in New Issue
Block a user