drm/amd/display: Add DCN3.1 DML calculation support
DML (Display mode library) is used for calculating watermarks, bandwidth and for validating display configurations. Acked-by: Huang Rui <ray.huang@amd.com> Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
ba5a537181
commit
74458c081f
@ -3070,6 +3070,18 @@ static void dcn20_calculate_wm(
|
||||
context->bw_ctx.bw.dcn.watermarks.a.frac_urg_bw_flip = get_fraction_of_urgent_bandwidth_imm_flip(&context->bw_ctx.dml, pipes, pipe_cnt) * 1000;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN3_1)
|
||||
static bool is_dtbclk_required(struct dc *dc, struct dc_state *context)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < dc->res_pool->pipe_count; i++) {
|
||||
if (!context->res_ctx.pipe_ctx[i].stream)
|
||||
continue;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
void dcn20_calculate_dlg_params(
|
||||
struct dc *dc, struct dc_state *context,
|
||||
display_e2e_pipe_params_st *pipes,
|
||||
@ -3077,6 +3089,9 @@ void dcn20_calculate_dlg_params(
|
||||
int vlevel)
|
||||
{
|
||||
int i, pipe_idx;
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN3_1)
|
||||
int plane_count;
|
||||
#endif
|
||||
|
||||
/* Writeback MCIF_WB arbitration parameters */
|
||||
dc->res_pool->funcs->set_mcif_arb_params(dc, context, pipes, pipe_cnt);
|
||||
@ -3091,6 +3106,21 @@ void dcn20_calculate_dlg_params(
|
||||
context->bw_ctx.dml.vba.DRAMClockChangeSupport[vlevel][context->bw_ctx.dml.vba.maxMpcComb]
|
||||
!= dm_dram_clock_change_unsupported;
|
||||
context->bw_ctx.bw.dcn.clk.dppclk_khz = 0;
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN3_1)
|
||||
context->bw_ctx.bw.dcn.clk.z9_support = (context->bw_ctx.dml.vba.StutterPeriod > 5000.0) ?
|
||||
DCN_Z9_SUPPORT_ALLOW : DCN_Z9_SUPPORT_DISALLOW;
|
||||
|
||||
plane_count = 0;
|
||||
for (i = 0; i < dc->res_pool->pipe_count; i++) {
|
||||
if (context->res_ctx.pipe_ctx[i].plane_state)
|
||||
plane_count++;
|
||||
}
|
||||
|
||||
if (plane_count == 0)
|
||||
context->bw_ctx.bw.dcn.clk.z9_support = DCN_Z9_SUPPORT_ALLOW;
|
||||
|
||||
context->bw_ctx.bw.dcn.clk.dtbclk_en = is_dtbclk_required(dc, context);
|
||||
#endif
|
||||
|
||||
if (context->bw_ctx.bw.dcn.clk.dispclk_khz < dc->debug.min_disp_clk_khz)
|
||||
context->bw_ctx.bw.dcn.clk.dispclk_khz = dc->debug.min_disp_clk_khz;
|
||||
@ -3102,6 +3132,10 @@ void dcn20_calculate_dlg_params(
|
||||
pipes[pipe_idx].pipe.dest.vupdate_offset = get_vupdate_offset(&context->bw_ctx.dml, pipes, pipe_cnt, pipe_idx);
|
||||
pipes[pipe_idx].pipe.dest.vupdate_width = get_vupdate_width(&context->bw_ctx.dml, pipes, pipe_cnt, pipe_idx);
|
||||
pipes[pipe_idx].pipe.dest.vready_offset = get_vready_offset(&context->bw_ctx.dml, pipes, pipe_cnt, pipe_idx);
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN3_1)
|
||||
context->res_ctx.pipe_ctx[i].det_buffer_size_kb = context->bw_ctx.dml.ip.det_buffer_size_kbytes;
|
||||
context->res_ctx.pipe_ctx[i].unbounded_req = pipes[pipe_idx].pipe.src.unbounded_req_mode;
|
||||
#endif
|
||||
if (context->bw_ctx.bw.dcn.clk.dppclk_khz < pipes[pipe_idx].clks_cfg.dppclk_mhz * 1000)
|
||||
context->bw_ctx.bw.dcn.clk.dppclk_khz = pipes[pipe_idx].clks_cfg.dppclk_mhz * 1000;
|
||||
context->res_ctx.pipe_ctx[i].plane_res.bw.dppclk_khz =
|
||||
@ -3115,6 +3149,11 @@ void dcn20_calculate_dlg_params(
|
||||
context->bw_ctx.bw.dcn.clk.max_supported_dppclk_khz = context->bw_ctx.dml.soc.clock_limits[vlevel].dppclk_mhz * 1000;
|
||||
context->bw_ctx.bw.dcn.clk.max_supported_dispclk_khz = context->bw_ctx.dml.soc.clock_limits[vlevel].dispclk_mhz * 1000;
|
||||
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN3_1)
|
||||
context->bw_ctx.bw.dcn.compbuf_size_kb = context->bw_ctx.dml.ip.config_return_buffer_size_in_kbytes
|
||||
- context->bw_ctx.dml.ip.det_buffer_size_kbytes * pipe_idx;
|
||||
#endif
|
||||
|
||||
for (i = 0, pipe_idx = 0; i < dc->res_pool->pipe_count; i++) {
|
||||
bool cstate_en = context->bw_ctx.dml.vba.PrefetchMode[vlevel][context->bw_ctx.dml.vba.maxMpcComb] != 2;
|
||||
|
||||
|
@ -62,6 +62,10 @@ CFLAGS_$(AMDDALPATH)/dc/dml/dcn21/display_mode_vba_21.o := $(dml_ccflags)
|
||||
CFLAGS_$(AMDDALPATH)/dc/dml/dcn21/display_rq_dlg_calc_21.o := $(dml_ccflags)
|
||||
CFLAGS_$(AMDDALPATH)/dc/dml/dcn30/display_mode_vba_30.o := $(dml_ccflags) -Wframe-larger-than=2048
|
||||
CFLAGS_$(AMDDALPATH)/dc/dml/dcn30/display_rq_dlg_calc_30.o := $(dml_ccflags)
|
||||
ifdef CONFIG_DRM_AMD_DC_DCN3_1
|
||||
CFLAGS_$(AMDDALPATH)/dc/dml/dcn31/display_mode_vba_31.o := $(dml_ccflags) -Wframe-larger-than=2048
|
||||
CFLAGS_$(AMDDALPATH)/dc/dml/dcn31/display_rq_dlg_calc_31.o := $(dml_ccflags)
|
||||
endif
|
||||
CFLAGS_$(AMDDALPATH)/dc/dml/display_mode_lib.o := $(dml_ccflags)
|
||||
CFLAGS_REMOVE_$(AMDDALPATH)/dc/dml/display_mode_vba.o := $(dml_rcflags)
|
||||
CFLAGS_REMOVE_$(AMDDALPATH)/dc/dml/dcn20/display_mode_vba_20.o := $(dml_rcflags)
|
||||
@ -72,6 +76,10 @@ CFLAGS_REMOVE_$(AMDDALPATH)/dc/dml/dcn21/display_mode_vba_21.o := $(dml_rcflags)
|
||||
CFLAGS_REMOVE_$(AMDDALPATH)/dc/dml/dcn21/display_rq_dlg_calc_21.o := $(dml_rcflags)
|
||||
CFLAGS_REMOVE_$(AMDDALPATH)/dc/dml/dcn30/display_mode_vba_30.o := $(dml_rcflags)
|
||||
CFLAGS_REMOVE_$(AMDDALPATH)/dc/dml/dcn30/display_rq_dlg_calc_30.o := $(dml_rcflags)
|
||||
ifdef CONFIG_DRM_AMD_DC_DCN3_1
|
||||
CFLAGS_REMOVE_$(AMDDALPATH)/dc/dml/dcn31/display_mode_vba_31.o := $(dml_rcflags)
|
||||
CFLAGS_REMOVE_$(AMDDALPATH)/dc/dml/dcn31/display_rq_dlg_calc_31.o := $(dml_rcflags)
|
||||
endif
|
||||
CFLAGS_REMOVE_$(AMDDALPATH)/dc/dml/display_mode_lib.o := $(dml_rcflags)
|
||||
endif
|
||||
CFLAGS_$(AMDDALPATH)/dc/dml/dml1_display_rq_dlg_calc.o := $(dml_ccflags)
|
||||
@ -86,6 +94,9 @@ DML += display_mode_vba.o dcn20/display_rq_dlg_calc_20.o dcn20/display_mode_vba_
|
||||
DML += dcn20/display_rq_dlg_calc_20v2.o dcn20/display_mode_vba_20v2.o
|
||||
DML += dcn21/display_rq_dlg_calc_21.o dcn21/display_mode_vba_21.o
|
||||
DML += dcn30/display_mode_vba_30.o dcn30/display_rq_dlg_calc_30.o
|
||||
ifdef CONFIG_DRM_AMD_DC_DCN3_1
|
||||
DML += dcn31/display_mode_vba_31.o dcn31/display_rq_dlg_calc_31.o
|
||||
endif
|
||||
endif
|
||||
|
||||
AMD_DAL_DML = $(addprefix $(AMDDALPATH)/dc/dml/,$(DML))
|
||||
|
7506
drivers/gpu/drm/amd/display/dc/dml/dcn31/display_mode_vba_31.c
Normal file
7506
drivers/gpu/drm/amd/display/dc/dml/dcn31/display_mode_vba_31.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright 2017 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: AMD
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __DML31_DISPLAY_MODE_VBA_H__
|
||||
#define __DML31_DISPLAY_MODE_VBA_H__
|
||||
|
||||
void dml31_recalculate(struct display_mode_lib *mode_lib);
|
||||
void dml31_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib);
|
||||
double dml31_CalculateWriteBackDISPCLK(
|
||||
enum source_format_class WritebackPixelFormat,
|
||||
double PixelClock,
|
||||
double WritebackHRatio,
|
||||
double WritebackVRatio,
|
||||
unsigned int WritebackHTaps,
|
||||
unsigned int WritebackVTaps,
|
||||
long WritebackSourceWidth,
|
||||
long WritebackDestinationWidth,
|
||||
unsigned int HTotal,
|
||||
unsigned int WritebackLineBufferSize);
|
||||
|
||||
#endif /* __DML31_DISPLAY_MODE_VBA_H__ */
|
1727
drivers/gpu/drm/amd/display/dc/dml/dcn31/display_rq_dlg_calc_31.c
Normal file
1727
drivers/gpu/drm/amd/display/dc/dml/dcn31/display_rq_dlg_calc_31.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,69 @@
|
||||
/*
|
||||
* Copyright 2017 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: AMD
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __DML31_DISPLAY_RQ_DLG_CALC_H__
|
||||
#define __DML31_DISPLAY_RQ_DLG_CALC_H__
|
||||
|
||||
#include "../display_rq_dlg_helpers.h"
|
||||
|
||||
struct display_mode_lib;
|
||||
|
||||
// Function: dml_rq_dlg_get_rq_reg
|
||||
// Main entry point for test to get the register values out of this DML class.
|
||||
// This function calls <get_rq_param> and <extract_rq_regs> fucntions to calculate
|
||||
// and then populate the rq_regs struct
|
||||
// Input:
|
||||
// pipe_param - pipe source configuration (e.g. vp, pitch, scaling, dest, etc.)
|
||||
// Output:
|
||||
// rq_regs - struct that holds all the RQ registers field value.
|
||||
// See also: <display_rq_regs_st>
|
||||
void dml31_rq_dlg_get_rq_reg(struct display_mode_lib *mode_lib,
|
||||
display_rq_regs_st *rq_regs,
|
||||
const display_pipe_params_st pipe_param);
|
||||
|
||||
// Function: dml_rq_dlg_get_dlg_reg
|
||||
// Calculate and return DLG and TTU register struct given the system setting
|
||||
// Output:
|
||||
// dlg_regs - output DLG register struct
|
||||
// ttu_regs - output DLG TTU register struct
|
||||
// Input:
|
||||
// e2e_pipe_param - "compacted" array of e2e pipe param struct
|
||||
// num_pipes - num of active "pipe" or "route"
|
||||
// pipe_idx - index that identifies the e2e_pipe_param that corresponding to this dlg
|
||||
// cstate - 0: when calculate min_ttu_vblank it is assumed cstate is not required. 1: Normal mode, cstate is considered.
|
||||
// Added for legacy or unrealistic timing tests.
|
||||
void dml31_rq_dlg_get_dlg_reg(struct display_mode_lib *mode_lib,
|
||||
display_dlg_regs_st *dlg_regs,
|
||||
display_ttu_regs_st *ttu_regs,
|
||||
display_e2e_pipe_params_st *e2e_pipe_param,
|
||||
const unsigned int num_pipes,
|
||||
const unsigned int pipe_idx,
|
||||
const bool cstate_en,
|
||||
const bool pstate_en,
|
||||
const bool vm_en,
|
||||
const bool ignore_viewport_pos,
|
||||
const bool immediate_flip_support);
|
||||
|
||||
#endif
|
@ -34,6 +34,10 @@
|
||||
#include "dcn30/display_mode_vba_30.h"
|
||||
#include "dcn30/display_rq_dlg_calc_30.h"
|
||||
#include "dml_logger.h"
|
||||
#ifdef CONFIG_DRM_AMD_DC_DCN3_1
|
||||
#include "dcn31/display_mode_vba_31.h"
|
||||
#include "dcn31/display_rq_dlg_calc_31.h"
|
||||
#endif
|
||||
|
||||
const struct dml_funcs dml20_funcs = {
|
||||
.validate = dml20_ModeSupportAndSystemConfigurationFull,
|
||||
@ -62,6 +66,14 @@ const struct dml_funcs dml30_funcs = {
|
||||
.rq_dlg_get_dlg_reg = dml30_rq_dlg_get_dlg_reg,
|
||||
.rq_dlg_get_rq_reg = dml30_rq_dlg_get_rq_reg
|
||||
};
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN3_1)
|
||||
const struct dml_funcs dml31_funcs = {
|
||||
.validate = dml31_ModeSupportAndSystemConfigurationFull,
|
||||
.recalculate = dml31_recalculate,
|
||||
.rq_dlg_get_dlg_reg = dml31_rq_dlg_get_dlg_reg,
|
||||
.rq_dlg_get_rq_reg = dml31_rq_dlg_get_rq_reg
|
||||
};
|
||||
#endif
|
||||
|
||||
void dml_init_instance(struct display_mode_lib *lib,
|
||||
const struct _vcs_dpi_soc_bounding_box_st *soc_bb,
|
||||
@ -84,7 +96,13 @@ void dml_init_instance(struct display_mode_lib *lib,
|
||||
case DML_PROJECT_DCN30:
|
||||
lib->funcs = dml30_funcs;
|
||||
break;
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN3_1)
|
||||
case DML_PROJECT_DCN31:
|
||||
case DML_PROJECT_DCN31_FPGA:
|
||||
lib->funcs = dml31_funcs;
|
||||
break;
|
||||
|
||||
#endif
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -38,6 +38,10 @@ enum dml_project {
|
||||
DML_PROJECT_NAVI10v2,
|
||||
DML_PROJECT_DCN21,
|
||||
DML_PROJECT_DCN30,
|
||||
#ifdef CONFIG_DRM_AMD_DC_DCN3_1
|
||||
DML_PROJECT_DCN31,
|
||||
DML_PROJECT_DCN31_FPGA,
|
||||
#endif
|
||||
};
|
||||
|
||||
struct display_mode_lib;
|
||||
|
@ -74,6 +74,10 @@ struct _vcs_dpi_soc_bounding_box_st {
|
||||
unsigned int num_states;
|
||||
double sr_exit_time_us;
|
||||
double sr_enter_plus_exit_time_us;
|
||||
#ifdef CONFIG_DRM_AMD_DC_DCN3_1
|
||||
double sr_exit_z8_time_us;
|
||||
double sr_enter_plus_exit_z8_time_us;
|
||||
#endif
|
||||
double urgent_latency_us;
|
||||
double urgent_latency_pixel_data_only_us;
|
||||
double urgent_latency_pixel_mixed_with_vm_data_us;
|
||||
@ -209,6 +213,14 @@ struct _vcs_dpi_ip_params_st {
|
||||
unsigned int is_line_buffer_bpp_fixed;
|
||||
unsigned int line_buffer_fixed_bpp;
|
||||
unsigned int dcc_supported;
|
||||
#ifdef CONFIG_DRM_AMD_DC_DCN3_1
|
||||
unsigned int config_return_buffer_size_in_kbytes;
|
||||
unsigned int compressed_buffer_segment_size_in_kbytes;
|
||||
unsigned int meta_fifo_size_in_kentries;
|
||||
unsigned int zero_size_buffer_entries;
|
||||
unsigned int compbuf_reserved_space_64b;
|
||||
unsigned int compbuf_reserved_space_zs;
|
||||
#endif
|
||||
|
||||
unsigned int IsLineBufferBppFixed;
|
||||
unsigned int LineBufferFixedBpp;
|
||||
|
@ -89,6 +89,12 @@ dml_get_attr_func(wm_memory_trip, mode_lib->vba.UrgentLatency);
|
||||
dml_get_attr_func(wm_writeback_urgent, mode_lib->vba.WritebackUrgentWatermark);
|
||||
dml_get_attr_func(wm_stutter_exit, mode_lib->vba.StutterExitWatermark);
|
||||
dml_get_attr_func(wm_stutter_enter_exit, mode_lib->vba.StutterEnterPlusExitWatermark);
|
||||
#ifdef CONFIG_DRM_AMD_DC_DCN3_1
|
||||
dml_get_attr_func(wm_z8_stutter_exit, mode_lib->vba.Z8StutterExitWatermark);
|
||||
dml_get_attr_func(wm_z8_stutter_enter_exit, mode_lib->vba.Z8StutterEnterPlusExitWatermark);
|
||||
dml_get_attr_func(stutter_efficiency_z8, mode_lib->vba.Z8StutterEfficiency);
|
||||
dml_get_attr_func(stutter_num_bursts_z8, mode_lib->vba.Z8NumberOfStutterBurstsPerFrame);
|
||||
#endif
|
||||
dml_get_attr_func(wm_dram_clock_change, mode_lib->vba.DRAMClockChangeWatermark);
|
||||
dml_get_attr_func(wm_writeback_dram_clock_change, mode_lib->vba.WritebackDRAMClockChangeWatermark);
|
||||
dml_get_attr_func(stutter_efficiency, mode_lib->vba.StutterEfficiency);
|
||||
@ -158,6 +164,10 @@ dml_get_pipe_attr_func(vstartup, mode_lib->vba.VStartup);
|
||||
dml_get_pipe_attr_func(vupdate_offset, mode_lib->vba.VUpdateOffsetPix);
|
||||
dml_get_pipe_attr_func(vupdate_width, mode_lib->vba.VUpdateWidthPix);
|
||||
dml_get_pipe_attr_func(vready_offset, mode_lib->vba.VReadyOffsetPix);
|
||||
#ifdef CONFIG_DRM_AMD_DC_DCN3_1
|
||||
dml_get_pipe_attr_func(vready_at_or_after_vsync, mode_lib->vba.VREADY_AT_OR_AFTER_VSYNC);
|
||||
dml_get_pipe_attr_func(min_dst_y_next_start, mode_lib->vba.MIN_DST_Y_NEXT_START);
|
||||
#endif
|
||||
|
||||
double get_total_immediate_flip_bytes(
|
||||
struct display_mode_lib *mode_lib,
|
||||
@ -226,6 +236,16 @@ static void fetch_socbb_params(struct display_mode_lib *mode_lib)
|
||||
mode_lib->vba.WritebackLatency = soc->writeback_latency_us;
|
||||
mode_lib->vba.SRExitTime = soc->sr_exit_time_us;
|
||||
mode_lib->vba.SREnterPlusExitTime = soc->sr_enter_plus_exit_time_us;
|
||||
#ifdef CONFIG_DRM_AMD_DC_DCN3_1
|
||||
mode_lib->vba.PercentOfIdealFabricAndSDPPortBWReceivedAfterUrgLatency = soc->pct_ideal_sdp_bw_after_urgent;
|
||||
mode_lib->vba.PercentOfIdealDRAMBWReceivedAfterUrgLatencyPixelMixedWithVMData = soc->pct_ideal_dram_sdp_bw_after_urgent_pixel_and_vm;
|
||||
mode_lib->vba.PercentOfIdealDRAMBWReceivedAfterUrgLatencyPixelDataOnly = soc->pct_ideal_dram_sdp_bw_after_urgent_pixel_only;
|
||||
mode_lib->vba.PercentOfIdealDRAMBWReceivedAfterUrgLatencyVMDataOnly = soc->pct_ideal_dram_sdp_bw_after_urgent_vm_only;
|
||||
mode_lib->vba.MaxAveragePercentOfIdealFabricAndSDPPortBWDisplayCanUseInNormalSystemOperation =
|
||||
soc->max_avg_sdp_bw_use_normal_percent;
|
||||
mode_lib->vba.SRExitZ8Time = soc->sr_exit_z8_time_us;
|
||||
mode_lib->vba.SREnterPlusExitZ8Time = soc->sr_enter_plus_exit_z8_time_us;
|
||||
#endif
|
||||
mode_lib->vba.DRAMClockChangeLatency = soc->dram_clock_change_latency_us;
|
||||
mode_lib->vba.DummyPStateCheck = soc->dram_clock_change_latency_us == soc->dummy_pstate_latency_us;
|
||||
mode_lib->vba.DRAMClockChangeSupportsVActive = !soc->disable_dram_clock_change_vactive_support ||
|
||||
@ -300,6 +320,16 @@ static void fetch_ip_params(struct display_mode_lib *mode_lib)
|
||||
mode_lib->vba.MaxPSCLToLBThroughput = ip->max_pscl_lb_bw_pix_per_clk;
|
||||
mode_lib->vba.ROBBufferSizeInKByte = ip->rob_buffer_size_kbytes;
|
||||
mode_lib->vba.DETBufferSizeInKByte[0] = ip->det_buffer_size_kbytes;
|
||||
#ifdef CONFIG_DRM_AMD_DC_DCN3_1
|
||||
mode_lib->vba.ConfigReturnBufferSizeInKByte = ip->config_return_buffer_size_in_kbytes;
|
||||
mode_lib->vba.CompressedBufferSegmentSizeInkByte = ip->compressed_buffer_segment_size_in_kbytes;
|
||||
mode_lib->vba.MetaFIFOSizeInKEntries = ip->meta_fifo_size_in_kentries;
|
||||
mode_lib->vba.ZeroSizeBufferEntries = ip->zero_size_buffer_entries;
|
||||
mode_lib->vba.COMPBUF_RESERVED_SPACE_64B = ip->compbuf_reserved_space_64b;
|
||||
mode_lib->vba.COMPBUF_RESERVED_SPACE_ZS = ip->compbuf_reserved_space_zs;
|
||||
mode_lib->vba.MaximumDSCBitsPerComponent = ip->maximum_dsc_bits_per_component;
|
||||
mode_lib->vba.DSC422NativeSupport = ip->dsc422_native_support;
|
||||
#endif
|
||||
|
||||
mode_lib->vba.PixelChunkSizeInKByte = ip->pixel_chunk_size_kbytes;
|
||||
mode_lib->vba.MetaChunkSize = ip->meta_chunk_size_kbytes;
|
||||
@ -429,6 +459,11 @@ static void fetch_pipe_params(struct display_mode_lib *mode_lib)
|
||||
mode_lib->vba.VTAPsChroma[mode_lib->vba.NumberOfActivePlanes] = taps->vtaps_c;
|
||||
mode_lib->vba.HTotal[mode_lib->vba.NumberOfActivePlanes] = dst->htotal;
|
||||
mode_lib->vba.VTotal[mode_lib->vba.NumberOfActivePlanes] = dst->vtotal;
|
||||
#ifdef CONFIG_DRM_AMD_DC_DCN3_1
|
||||
mode_lib->vba.VFrontPorch[mode_lib->vba.NumberOfActivePlanes] = dst->vfront_porch;
|
||||
mode_lib->vba.DCCFractionOfZeroSizeRequestsLuma[mode_lib->vba.NumberOfActivePlanes] = src->dcc_fraction_of_zs_req_luma;
|
||||
mode_lib->vba.DCCFractionOfZeroSizeRequestsChroma[mode_lib->vba.NumberOfActivePlanes] = src->dcc_fraction_of_zs_req_chroma;
|
||||
#endif
|
||||
mode_lib->vba.DCCEnable[mode_lib->vba.NumberOfActivePlanes] =
|
||||
src->dcc_use_global ?
|
||||
ip->dcc_supported : src->dcc && ip->dcc_supported;
|
||||
@ -675,6 +710,13 @@ static void fetch_pipe_params(struct display_mode_lib *mode_lib)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DRM_AMD_DC_DCN3_1
|
||||
mode_lib->vba.UseUnboundedRequesting = dm_unbounded_requesting;
|
||||
for (k = 0; k < mode_lib->vba.cache_num_pipes; ++k) {
|
||||
if (pipes[k].pipe.src.unbounded_req_mode == 0)
|
||||
mode_lib->vba.UseUnboundedRequesting = dm_unbounded_requesting_disable;
|
||||
}
|
||||
#endif
|
||||
// TODO: ODMCombineEnabled => 2 * DPPPerPlane...actually maybe not since all pipes are specified
|
||||
// Do we want the dscclk to automatically be halved? Guess not since the value is specified
|
||||
mode_lib->vba.SynchronizedVBlank = pipes[0].pipe.dest.synchronized_vblank_all_planes;
|
||||
|
@ -39,6 +39,12 @@ dml_get_attr_decl(wm_memory_trip);
|
||||
dml_get_attr_decl(wm_writeback_urgent);
|
||||
dml_get_attr_decl(wm_stutter_exit);
|
||||
dml_get_attr_decl(wm_stutter_enter_exit);
|
||||
#ifdef CONFIG_DRM_AMD_DC_DCN3_1
|
||||
dml_get_attr_decl(wm_z8_stutter_exit);
|
||||
dml_get_attr_decl(wm_z8_stutter_enter_exit);
|
||||
dml_get_attr_decl(stutter_efficiency_z8);
|
||||
dml_get_attr_decl(stutter_num_bursts_z8);
|
||||
#endif
|
||||
dml_get_attr_decl(wm_dram_clock_change);
|
||||
dml_get_attr_decl(wm_writeback_dram_clock_change);
|
||||
dml_get_attr_decl(stutter_efficiency_no_vblank);
|
||||
@ -102,6 +108,10 @@ dml_get_pipe_attr_decl(vstartup);
|
||||
dml_get_pipe_attr_decl(vupdate_offset);
|
||||
dml_get_pipe_attr_decl(vupdate_width);
|
||||
dml_get_pipe_attr_decl(vready_offset);
|
||||
#ifdef CONFIG_DRM_AMD_DC_DCN3_1
|
||||
dml_get_pipe_attr_decl(vready_at_or_after_vsync);
|
||||
dml_get_pipe_attr_decl(min_dst_y_next_start);
|
||||
#endif
|
||||
|
||||
double get_total_immediate_flip_bytes(
|
||||
struct display_mode_lib *mode_lib,
|
||||
@ -923,6 +933,48 @@ struct vba_vars_st {
|
||||
bool ClampMinDCFCLK;
|
||||
bool AllowDramClockChangeOneDisplayVactive;
|
||||
|
||||
#ifdef CONFIG_DRM_AMD_DC_DCN3_1
|
||||
double MaxAveragePercentOfIdealFabricAndSDPPortBWDisplayCanUseInNormalSystemOperation;
|
||||
double PercentOfIdealFabricAndSDPPortBWReceivedAfterUrgLatency;
|
||||
double PercentOfIdealDRAMBWReceivedAfterUrgLatencyPixelMixedWithVMData;
|
||||
double PercentOfIdealDRAMBWReceivedAfterUrgLatencyVMDataOnly;
|
||||
double PercentOfIdealDRAMBWReceivedAfterUrgLatencyPixelDataOnly;
|
||||
double SRExitZ8Time;
|
||||
double SREnterPlusExitZ8Time;
|
||||
double Z8StutterExitWatermark;
|
||||
double Z8StutterEnterPlusExitWatermark;
|
||||
double Z8StutterEfficiencyNotIncludingVBlank;
|
||||
double Z8StutterEfficiency;
|
||||
double DCCFractionOfZeroSizeRequestsLuma[DC__NUM_DPP__MAX];
|
||||
double DCCFractionOfZeroSizeRequestsChroma[DC__NUM_DPP__MAX];
|
||||
double UrgBurstFactorCursor[DC__NUM_DPP__MAX];
|
||||
double UrgBurstFactorLuma[DC__NUM_DPP__MAX];
|
||||
double UrgBurstFactorChroma[DC__NUM_DPP__MAX];
|
||||
double UrgBurstFactorCursorPre[DC__NUM_DPP__MAX];
|
||||
double UrgBurstFactorLumaPre[DC__NUM_DPP__MAX];
|
||||
double UrgBurstFactorChromaPre[DC__NUM_DPP__MAX];
|
||||
bool NotUrgentLatencyHidingPre[DC__NUM_DPP__MAX];
|
||||
bool LinkCapacitySupport[DC__NUM_DPP__MAX];
|
||||
bool VREADY_AT_OR_AFTER_VSYNC[DC__NUM_DPP__MAX];
|
||||
unsigned int MIN_DST_Y_NEXT_START[DC__NUM_DPP__MAX];
|
||||
unsigned int VFrontPorch[DC__NUM_DPP__MAX];
|
||||
int ConfigReturnBufferSizeInKByte;
|
||||
enum unbounded_requesting_policy UseUnboundedRequesting;
|
||||
int CompressedBufferSegmentSizeInkByte;
|
||||
int CompressedBufferSizeInkByte;
|
||||
int MetaFIFOSizeInKEntries;
|
||||
int ZeroSizeBufferEntries;
|
||||
int COMPBUF_RESERVED_SPACE_64B;
|
||||
int COMPBUF_RESERVED_SPACE_ZS;
|
||||
bool UnboundedRequestEnabled;
|
||||
bool DSC422NativeSupport;
|
||||
bool NoEnoughUrgentLatencyHiding;
|
||||
bool NoEnoughUrgentLatencyHidingPre;
|
||||
int NumberOfStutterBurstsPerFrame;
|
||||
int Z8NumberOfStutterBurstsPerFrame;
|
||||
unsigned int MaximumDSCBitsPerComponent;
|
||||
unsigned int NotEnoughUrgentLatencyHidingA[DC__VOLTAGE_STATES][2];
|
||||
#endif
|
||||
};
|
||||
|
||||
bool CalculateMinAndMaxPrefetchMode(
|
||||
|
Loading…
x
Reference in New Issue
Block a user