Commit 757af27b authored by Harry Wentland's avatar Harry Wentland Committed by Alex Deucher

drm/amd/display: Fix rest of pass-by-value structs in DML

Passing structs adds a lot of overhead. We don't ever want to pass
anything bigger than primitives by value.

This patch fixes these Coverity IDs:
Addresses-Coverity-ID: 1424031: ("Big parameter passed by value")
Addresses-Coverity-ID: 1424055: ("Big parameter passed by value")
Addresses-Coverity-ID: 1424072: ("Big parameter passed by value")
Addresses-Coverity-ID: 1423779: ("Big parameter passed by value")
Signed-off-by: default avatarHarry Wentland <harry.wentland@amd.com>
Cc: Nick Desaulniers <ndesaulniers@google.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: amd-gfx@lists.freedesktop.org
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Cc: Arnd Bergmann <arnd@kernel.org>
Cc: Leo Li <sunpeng.li@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: Christian König <christian.koenig@amd.com>
Cc: Xinhui Pan <Xinhui.Pan@amd.com>
Cc: Nathan Chancellor <nathan@kernel.org>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: llvm@lists.linux.dev
Acked-by: default avatarChristian König <christian.koenig@amd.com>
Build-tested-by: default avatarNathan Chancellor <nathan@kernel.org>
Reviewed-by: default avatarLeo Li <sunpeng.li@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 4768349e
...@@ -502,15 +502,15 @@ static void dcn_bw_calc_rq_dlg_ttu( ...@@ -502,15 +502,15 @@ static void dcn_bw_calc_rq_dlg_ttu(
/*todo: soc->sr_enter_plus_exit_time??*/ /*todo: soc->sr_enter_plus_exit_time??*/
dlg_sys_param.t_srx_delay_us = dc->dcn_ip->dcfclk_cstate_latency / v->dcf_clk_deep_sleep; dlg_sys_param.t_srx_delay_us = dc->dcn_ip->dcfclk_cstate_latency / v->dcf_clk_deep_sleep;
dml1_rq_dlg_get_rq_params(dml, &rq_param, input.pipe.src); dml1_rq_dlg_get_rq_params(dml, &rq_param, &input.pipe.src);
dml1_extract_rq_regs(dml, rq_regs, rq_param); dml1_extract_rq_regs(dml, rq_regs, &rq_param);
dml1_rq_dlg_get_dlg_params( dml1_rq_dlg_get_dlg_params(
dml, dml,
dlg_regs, dlg_regs,
ttu_regs, ttu_regs,
rq_param.dlg, &rq_param.dlg,
dlg_sys_param, &dlg_sys_param,
input, &input,
true, true,
true, true,
v->pte_enable == dcn_bw_yes, v->pte_enable == dcn_bw_yes,
......
...@@ -37,8 +37,8 @@ ...@@ -37,8 +37,8 @@
// //
static void dml20_rq_dlg_get_rq_params( static void dml20_rq_dlg_get_rq_params(
struct display_mode_lib *mode_lib, struct display_mode_lib *mode_lib,
display_rq_params_st * rq_param, display_rq_params_st *rq_param,
const display_pipe_source_params_st pipe_src_param); const display_pipe_source_params_st *pipe_src_param);
// Function: dml20_rq_dlg_get_dlg_params // Function: dml20_rq_dlg_get_dlg_params
// Calculate deadline related parameters // Calculate deadline related parameters
...@@ -49,8 +49,8 @@ static void dml20_rq_dlg_get_dlg_params(struct display_mode_lib *mode_lib, ...@@ -49,8 +49,8 @@ static void dml20_rq_dlg_get_dlg_params(struct display_mode_lib *mode_lib,
const unsigned int pipe_idx, const unsigned int pipe_idx,
display_dlg_regs_st *disp_dlg_regs, display_dlg_regs_st *disp_dlg_regs,
display_ttu_regs_st *disp_ttu_regs, display_ttu_regs_st *disp_ttu_regs,
const display_rq_dlg_params_st rq_dlg_param, const display_rq_dlg_params_st *rq_dlg_param,
const display_dlg_sys_params_st dlg_sys_param, const display_dlg_sys_params_st *dlg_sys_param,
const bool cstate_en, const bool cstate_en,
const bool pstate_en); const bool pstate_en);
/* /*
...@@ -188,28 +188,28 @@ static void extract_rq_sizing_regs(struct display_mode_lib *mode_lib, ...@@ -188,28 +188,28 @@ static void extract_rq_sizing_regs(struct display_mode_lib *mode_lib,
static void extract_rq_regs(struct display_mode_lib *mode_lib, static void extract_rq_regs(struct display_mode_lib *mode_lib,
display_rq_regs_st *rq_regs, display_rq_regs_st *rq_regs,
const display_rq_params_st rq_param) const display_rq_params_st *rq_param)
{ {
unsigned int detile_buf_size_in_bytes = mode_lib->ip.det_buffer_size_kbytes * 1024; unsigned int detile_buf_size_in_bytes = mode_lib->ip.det_buffer_size_kbytes * 1024;
unsigned int detile_buf_plane1_addr = 0; unsigned int detile_buf_plane1_addr = 0;
extract_rq_sizing_regs(mode_lib, &(rq_regs->rq_regs_l), &rq_param.sizing.rq_l); extract_rq_sizing_regs(mode_lib, &(rq_regs->rq_regs_l), &rq_param->sizing.rq_l);
rq_regs->rq_regs_l.pte_row_height_linear = dml_floor(dml_log2(rq_param.dlg.rq_l.dpte_row_height), rq_regs->rq_regs_l.pte_row_height_linear = dml_floor(dml_log2(rq_param->dlg.rq_l.dpte_row_height),
1) - 3; 1) - 3;
if (rq_param.yuv420) { if (rq_param->yuv420) {
extract_rq_sizing_regs(mode_lib, &(rq_regs->rq_regs_c), &rq_param.sizing.rq_c); extract_rq_sizing_regs(mode_lib, &(rq_regs->rq_regs_c), &rq_param->sizing.rq_c);
rq_regs->rq_regs_c.pte_row_height_linear = dml_floor(dml_log2(rq_param.dlg.rq_c.dpte_row_height), rq_regs->rq_regs_c.pte_row_height_linear = dml_floor(dml_log2(rq_param->dlg.rq_c.dpte_row_height),
1) - 3; 1) - 3;
} }
rq_regs->rq_regs_l.swath_height = dml_log2(rq_param.dlg.rq_l.swath_height); rq_regs->rq_regs_l.swath_height = dml_log2(rq_param->dlg.rq_l.swath_height);
rq_regs->rq_regs_c.swath_height = dml_log2(rq_param.dlg.rq_c.swath_height); rq_regs->rq_regs_c.swath_height = dml_log2(rq_param->dlg.rq_c.swath_height);
// TODO: take the max between luma, chroma chunk size? // TODO: take the max between luma, chroma chunk size?
// okay for now, as we are setting chunk_bytes to 8kb anyways // okay for now, as we are setting chunk_bytes to 8kb anyways
if (rq_param.sizing.rq_l.chunk_bytes >= 32 * 1024) { //32kb if (rq_param->sizing.rq_l.chunk_bytes >= 32 * 1024) { //32kb
rq_regs->drq_expansion_mode = 0; rq_regs->drq_expansion_mode = 0;
} else { } else {
rq_regs->drq_expansion_mode = 2; rq_regs->drq_expansion_mode = 2;
...@@ -218,9 +218,9 @@ static void extract_rq_regs(struct display_mode_lib *mode_lib, ...@@ -218,9 +218,9 @@ static void extract_rq_regs(struct display_mode_lib *mode_lib,
rq_regs->mrq_expansion_mode = 1; rq_regs->mrq_expansion_mode = 1;
rq_regs->crq_expansion_mode = 1; rq_regs->crq_expansion_mode = 1;
if (rq_param.yuv420) { if (rq_param->yuv420) {
if ((double) rq_param.misc.rq_l.stored_swath_bytes if ((double) rq_param->misc.rq_l.stored_swath_bytes
/ (double) rq_param.misc.rq_c.stored_swath_bytes <= 1.5) { / (double) rq_param->misc.rq_c.stored_swath_bytes <= 1.5) {
detile_buf_plane1_addr = (detile_buf_size_in_bytes / 2.0 / 64.0); // half to chroma detile_buf_plane1_addr = (detile_buf_size_in_bytes / 2.0 / 64.0); // half to chroma
} else { } else {
detile_buf_plane1_addr = dml_round_to_multiple((unsigned int) ((2.0 * detile_buf_size_in_bytes) / 3.0), detile_buf_plane1_addr = dml_round_to_multiple((unsigned int) ((2.0 * detile_buf_size_in_bytes) / 3.0),
...@@ -233,7 +233,7 @@ static void extract_rq_regs(struct display_mode_lib *mode_lib, ...@@ -233,7 +233,7 @@ static void extract_rq_regs(struct display_mode_lib *mode_lib,
static void handle_det_buf_split(struct display_mode_lib *mode_lib, static void handle_det_buf_split(struct display_mode_lib *mode_lib,
display_rq_params_st *rq_param, display_rq_params_st *rq_param,
const display_pipe_source_params_st pipe_src_param) const display_pipe_source_params_st *pipe_src_param)
{ {
unsigned int total_swath_bytes = 0; unsigned int total_swath_bytes = 0;
unsigned int swath_bytes_l = 0; unsigned int swath_bytes_l = 0;
...@@ -242,8 +242,8 @@ static void handle_det_buf_split(struct display_mode_lib *mode_lib, ...@@ -242,8 +242,8 @@ static void handle_det_buf_split(struct display_mode_lib *mode_lib,
unsigned int full_swath_bytes_packed_c = 0; unsigned int full_swath_bytes_packed_c = 0;
bool req128_l = false; bool req128_l = false;
bool req128_c = false; bool req128_c = false;
bool surf_linear = (pipe_src_param.sw_mode == dm_sw_linear); bool surf_linear = (pipe_src_param->sw_mode == dm_sw_linear);
bool surf_vert = (pipe_src_param.source_scan == dm_vert); bool surf_vert = (pipe_src_param->source_scan == dm_vert);
unsigned int log2_swath_height_l = 0; unsigned int log2_swath_height_l = 0;
unsigned int log2_swath_height_c = 0; unsigned int log2_swath_height_c = 0;
unsigned int detile_buf_size_in_bytes = mode_lib->ip.det_buffer_size_kbytes * 1024; unsigned int detile_buf_size_in_bytes = mode_lib->ip.det_buffer_size_kbytes * 1024;
...@@ -685,7 +685,7 @@ static void get_surf_rq_param(struct display_mode_lib *mode_lib, ...@@ -685,7 +685,7 @@ static void get_surf_rq_param(struct display_mode_lib *mode_lib,
display_data_rq_sizing_params_st *rq_sizing_param, display_data_rq_sizing_params_st *rq_sizing_param,
display_data_rq_dlg_params_st *rq_dlg_param, display_data_rq_dlg_params_st *rq_dlg_param,
display_data_rq_misc_params_st *rq_misc_param, display_data_rq_misc_params_st *rq_misc_param,
const display_pipe_source_params_st pipe_src_param, const display_pipe_source_params_st *pipe_src_param,
bool is_chroma) bool is_chroma)
{ {
bool mode_422 = false; bool mode_422 = false;
...@@ -697,15 +697,15 @@ static void get_surf_rq_param(struct display_mode_lib *mode_lib, ...@@ -697,15 +697,15 @@ static void get_surf_rq_param(struct display_mode_lib *mode_lib,
// TODO check if ppe apply for both luma and chroma in 422 case // TODO check if ppe apply for both luma and chroma in 422 case
if (is_chroma) { if (is_chroma) {
vp_width = pipe_src_param.viewport_width_c / ppe; vp_width = pipe_src_param->viewport_width_c / ppe;
vp_height = pipe_src_param.viewport_height_c; vp_height = pipe_src_param->viewport_height_c;
data_pitch = pipe_src_param.data_pitch_c; data_pitch = pipe_src_param->data_pitch_c;
meta_pitch = pipe_src_param.meta_pitch_c; meta_pitch = pipe_src_param->meta_pitch_c;
} else { } else {
vp_width = pipe_src_param.viewport_width / ppe; vp_width = pipe_src_param->viewport_width / ppe;
vp_height = pipe_src_param.viewport_height; vp_height = pipe_src_param->viewport_height;
data_pitch = pipe_src_param.data_pitch; data_pitch = pipe_src_param->data_pitch;
meta_pitch = pipe_src_param.meta_pitch; meta_pitch = pipe_src_param->meta_pitch;
} }
rq_sizing_param->chunk_bytes = 8192; rq_sizing_param->chunk_bytes = 8192;
...@@ -728,21 +728,21 @@ static void get_surf_rq_param(struct display_mode_lib *mode_lib, ...@@ -728,21 +728,21 @@ static void get_surf_rq_param(struct display_mode_lib *mode_lib,
vp_height, vp_height,
data_pitch, data_pitch,
meta_pitch, meta_pitch,
pipe_src_param.source_format, pipe_src_param->source_format,
pipe_src_param.sw_mode, pipe_src_param->sw_mode,
pipe_src_param.macro_tile_size, pipe_src_param->macro_tile_size,
pipe_src_param.source_scan, pipe_src_param->source_scan,
is_chroma); is_chroma);
} }
static void dml20_rq_dlg_get_rq_params(struct display_mode_lib *mode_lib, static void dml20_rq_dlg_get_rq_params(struct display_mode_lib *mode_lib,
display_rq_params_st *rq_param, display_rq_params_st *rq_param,
const display_pipe_source_params_st pipe_src_param) const display_pipe_source_params_st *pipe_src_param)
{ {
// get param for luma surface // get param for luma surface
rq_param->yuv420 = pipe_src_param.source_format == dm_420_8 rq_param->yuv420 = pipe_src_param->source_format == dm_420_8
|| pipe_src_param.source_format == dm_420_10; || pipe_src_param->source_format == dm_420_10;
rq_param->yuv420_10bpc = pipe_src_param.source_format == dm_420_10; rq_param->yuv420_10bpc = pipe_src_param->source_format == dm_420_10;
get_surf_rq_param(mode_lib, get_surf_rq_param(mode_lib,
&(rq_param->sizing.rq_l), &(rq_param->sizing.rq_l),
...@@ -751,7 +751,7 @@ static void dml20_rq_dlg_get_rq_params(struct display_mode_lib *mode_lib, ...@@ -751,7 +751,7 @@ static void dml20_rq_dlg_get_rq_params(struct display_mode_lib *mode_lib,
pipe_src_param, pipe_src_param,
0); 0);
if (is_dual_plane((enum source_format_class)(pipe_src_param.source_format))) { if (is_dual_plane((enum source_format_class)(pipe_src_param->source_format))) {
// get param for chroma surface // get param for chroma surface
get_surf_rq_param(mode_lib, get_surf_rq_param(mode_lib,
&(rq_param->sizing.rq_c), &(rq_param->sizing.rq_c),
...@@ -773,8 +773,8 @@ void dml20_rq_dlg_get_rq_reg(struct display_mode_lib *mode_lib, ...@@ -773,8 +773,8 @@ void dml20_rq_dlg_get_rq_reg(struct display_mode_lib *mode_lib,
display_rq_params_st rq_param = {0}; display_rq_params_st rq_param = {0};
memset(rq_regs, 0, sizeof(*rq_regs)); memset(rq_regs, 0, sizeof(*rq_regs));
dml20_rq_dlg_get_rq_params(mode_lib, &rq_param, pipe_param->src); dml20_rq_dlg_get_rq_params(mode_lib, &rq_param, &pipe_param->src);
extract_rq_regs(mode_lib, rq_regs, rq_param); extract_rq_regs(mode_lib, rq_regs, &rq_param);
print__rq_regs_st(mode_lib, rq_regs); print__rq_regs_st(mode_lib, rq_regs);
} }
...@@ -787,8 +787,8 @@ static void dml20_rq_dlg_get_dlg_params(struct display_mode_lib *mode_lib, ...@@ -787,8 +787,8 @@ static void dml20_rq_dlg_get_dlg_params(struct display_mode_lib *mode_lib,
const unsigned int pipe_idx, const unsigned int pipe_idx,
display_dlg_regs_st *disp_dlg_regs, display_dlg_regs_st *disp_dlg_regs,
display_ttu_regs_st *disp_ttu_regs, display_ttu_regs_st *disp_ttu_regs,
const display_rq_dlg_params_st rq_dlg_param, const display_rq_dlg_params_st *rq_dlg_param,
const display_dlg_sys_params_st dlg_sys_param, const display_dlg_sys_params_st *dlg_sys_param,
const bool cstate_en, const bool cstate_en,
const bool pstate_en) const bool pstate_en)
{ {
...@@ -935,7 +935,7 @@ static void dml20_rq_dlg_get_dlg_params(struct display_mode_lib *mode_lib, ...@@ -935,7 +935,7 @@ static void dml20_rq_dlg_get_dlg_params(struct display_mode_lib *mode_lib,
* (double) ref_freq_to_pix_freq); * (double) ref_freq_to_pix_freq);
ASSERT(disp_dlg_regs->refcyc_h_blank_end < (unsigned int) dml_pow(2, 13)); ASSERT(disp_dlg_regs->refcyc_h_blank_end < (unsigned int) dml_pow(2, 13));
min_dcfclk_mhz = dlg_sys_param.deepsleep_dcfclk_mhz; min_dcfclk_mhz = dlg_sys_param->deepsleep_dcfclk_mhz;
t_calc_us = get_tcalc(mode_lib, e2e_pipe_param, num_pipes); t_calc_us = get_tcalc(mode_lib, e2e_pipe_param, num_pipes);
min_ttu_vblank = get_min_ttu_vblank(mode_lib, e2e_pipe_param, num_pipes, pipe_idx); min_ttu_vblank = get_min_ttu_vblank(mode_lib, e2e_pipe_param, num_pipes, pipe_idx);
...@@ -995,20 +995,20 @@ static void dml20_rq_dlg_get_dlg_params(struct display_mode_lib *mode_lib, ...@@ -995,20 +995,20 @@ static void dml20_rq_dlg_get_dlg_params(struct display_mode_lib *mode_lib,
// vinit_bot_l = scl.vinit_bot; // vinit_bot_l = scl.vinit_bot;
// vinit_bot_c = scl.vinit_bot_c; // vinit_bot_c = scl.vinit_bot_c;
// unsigned int swath_height_l = rq_dlg_param.rq_l.swath_height; // unsigned int swath_height_l = rq_dlg_param->rq_l.swath_height;
swath_width_ub_l = rq_dlg_param.rq_l.swath_width_ub; swath_width_ub_l = rq_dlg_param->rq_l.swath_width_ub;
// unsigned int dpte_bytes_per_row_ub_l = rq_dlg_param.rq_l.dpte_bytes_per_row_ub; // unsigned int dpte_bytes_per_row_ub_l = rq_dlg_param->rq_l.dpte_bytes_per_row_ub;
dpte_groups_per_row_ub_l = rq_dlg_param.rq_l.dpte_groups_per_row_ub; dpte_groups_per_row_ub_l = rq_dlg_param->rq_l.dpte_groups_per_row_ub;
// unsigned int meta_pte_bytes_per_frame_ub_l = rq_dlg_param.rq_l.meta_pte_bytes_per_frame_ub; // unsigned int meta_pte_bytes_per_frame_ub_l = rq_dlg_param->rq_l.meta_pte_bytes_per_frame_ub;
// unsigned int meta_bytes_per_row_ub_l = rq_dlg_param.rq_l.meta_bytes_per_row_ub; // unsigned int meta_bytes_per_row_ub_l = rq_dlg_param->rq_l.meta_bytes_per_row_ub;
// unsigned int swath_height_c = rq_dlg_param.rq_c.swath_height; // unsigned int swath_height_c = rq_dlg_param->rq_c.swath_height;
swath_width_ub_c = rq_dlg_param.rq_c.swath_width_ub; swath_width_ub_c = rq_dlg_param->rq_c.swath_width_ub;
// dpte_bytes_per_row_ub_c = rq_dlg_param.rq_c.dpte_bytes_per_row_ub; // dpte_bytes_per_row_ub_c = rq_dlg_param->rq_c.dpte_bytes_per_row_ub;
dpte_groups_per_row_ub_c = rq_dlg_param.rq_c.dpte_groups_per_row_ub; dpte_groups_per_row_ub_c = rq_dlg_param->rq_c.dpte_groups_per_row_ub;
meta_chunks_per_row_ub_l = rq_dlg_param.rq_l.meta_chunks_per_row_ub; meta_chunks_per_row_ub_l = rq_dlg_param->rq_l.meta_chunks_per_row_ub;
meta_chunks_per_row_ub_c = rq_dlg_param.rq_c.meta_chunks_per_row_ub; meta_chunks_per_row_ub_c = rq_dlg_param->rq_c.meta_chunks_per_row_ub;
vupdate_offset = dst->vupdate_offset; vupdate_offset = dst->vupdate_offset;
vupdate_width = dst->vupdate_width; vupdate_width = dst->vupdate_width;
vready_offset = dst->vready_offset; vready_offset = dst->vready_offset;
...@@ -1137,16 +1137,16 @@ static void dml20_rq_dlg_get_dlg_params(struct display_mode_lib *mode_lib, ...@@ -1137,16 +1137,16 @@ static void dml20_rq_dlg_get_dlg_params(struct display_mode_lib *mode_lib,
dml_print("DML_DLG: %s: vratio_pre_c=%3.2f\n", __func__, vratio_pre_c); dml_print("DML_DLG: %s: vratio_pre_c=%3.2f\n", __func__, vratio_pre_c);
// Active // Active
req_per_swath_ub_l = rq_dlg_param.rq_l.req_per_swath_ub; req_per_swath_ub_l = rq_dlg_param->rq_l.req_per_swath_ub;
req_per_swath_ub_c = rq_dlg_param.rq_c.req_per_swath_ub; req_per_swath_ub_c = rq_dlg_param->rq_c.req_per_swath_ub;
meta_row_height_l = rq_dlg_param.rq_l.meta_row_height; meta_row_height_l = rq_dlg_param->rq_l.meta_row_height;
meta_row_height_c = rq_dlg_param.rq_c.meta_row_height; meta_row_height_c = rq_dlg_param->rq_c.meta_row_height;
swath_width_pixels_ub_l = 0; swath_width_pixels_ub_l = 0;
swath_width_pixels_ub_c = 0; swath_width_pixels_ub_c = 0;
scaler_rec_in_width_l = 0; scaler_rec_in_width_l = 0;
scaler_rec_in_width_c = 0; scaler_rec_in_width_c = 0;
dpte_row_height_l = rq_dlg_param.rq_l.dpte_row_height; dpte_row_height_l = rq_dlg_param->rq_l.dpte_row_height;
dpte_row_height_c = rq_dlg_param.rq_c.dpte_row_height; dpte_row_height_c = rq_dlg_param->rq_c.dpte_row_height;
if (mode_422) { if (mode_422) {
swath_width_pixels_ub_l = swath_width_ub_l * 2; // *2 for 2 pixel per element swath_width_pixels_ub_l = swath_width_ub_l * 2; // *2 for 2 pixel per element
...@@ -1584,15 +1584,15 @@ void dml20_rq_dlg_get_dlg_reg(struct display_mode_lib *mode_lib, ...@@ -1584,15 +1584,15 @@ void dml20_rq_dlg_get_dlg_reg(struct display_mode_lib *mode_lib,
// system parameter calculation done // system parameter calculation done
dml_print("DML_DLG: Calculation for pipe[%d] start\n\n", pipe_idx); dml_print("DML_DLG: Calculation for pipe[%d] start\n\n", pipe_idx);
dml20_rq_dlg_get_rq_params(mode_lib, &rq_param, e2e_pipe_param[pipe_idx].pipe.src); dml20_rq_dlg_get_rq_params(mode_lib, &rq_param, &e2e_pipe_param[pipe_idx].pipe.src);
dml20_rq_dlg_get_dlg_params(mode_lib, dml20_rq_dlg_get_dlg_params(mode_lib,
e2e_pipe_param, e2e_pipe_param,
num_pipes, num_pipes,
pipe_idx, pipe_idx,
dlg_regs, dlg_regs,
ttu_regs, ttu_regs,
rq_param.dlg, &rq_param.dlg,
dlg_sys_param, &dlg_sys_param,
cstate_en, cstate_en,
pstate_en); pstate_en);
dml_print("DML_DLG: Calculation for pipe[%d] end\n", pipe_idx); dml_print("DML_DLG: Calculation for pipe[%d] end\n", pipe_idx);
......
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
static void dml20v2_rq_dlg_get_rq_params( static void dml20v2_rq_dlg_get_rq_params(
struct display_mode_lib *mode_lib, struct display_mode_lib *mode_lib,
display_rq_params_st * rq_param, display_rq_params_st * rq_param,
const display_pipe_source_params_st pipe_src_param); const display_pipe_source_params_st *pipe_src_param);
// Function: dml20v2_rq_dlg_get_dlg_params // Function: dml20v2_rq_dlg_get_dlg_params
// Calculate deadline related parameters // Calculate deadline related parameters
...@@ -49,8 +49,8 @@ static void dml20v2_rq_dlg_get_dlg_params(struct display_mode_lib *mode_lib, ...@@ -49,8 +49,8 @@ static void dml20v2_rq_dlg_get_dlg_params(struct display_mode_lib *mode_lib,
const unsigned int pipe_idx, const unsigned int pipe_idx,
display_dlg_regs_st *disp_dlg_regs, display_dlg_regs_st *disp_dlg_regs,
display_ttu_regs_st *disp_ttu_regs, display_ttu_regs_st *disp_ttu_regs,
const display_rq_dlg_params_st rq_dlg_param, const display_rq_dlg_params_st *rq_dlg_param,
const display_dlg_sys_params_st dlg_sys_param, const display_dlg_sys_params_st *dlg_sys_param,
const bool cstate_en, const bool cstate_en,
const bool pstate_en); const bool pstate_en);
/* /*
...@@ -188,28 +188,28 @@ static void extract_rq_sizing_regs(struct display_mode_lib *mode_lib, ...@@ -188,28 +188,28 @@ static void extract_rq_sizing_regs(struct display_mode_lib *mode_lib,
static void extract_rq_regs(struct display_mode_lib *mode_lib, static void extract_rq_regs(struct display_mode_lib *mode_lib,
display_rq_regs_st *rq_regs, display_rq_regs_st *rq_regs,
const display_rq_params_st rq_param) const display_rq_params_st *rq_param)
{ {
unsigned int detile_buf_size_in_bytes = mode_lib->ip.det_buffer_size_kbytes * 1024; unsigned int detile_buf_size_in_bytes = mode_lib->ip.det_buffer_size_kbytes * 1024;
unsigned int detile_buf_plane1_addr = 0; unsigned int detile_buf_plane1_addr = 0;
extract_rq_sizing_regs(mode_lib, &(rq_regs->rq_regs_l), &rq_param.sizing.rq_l); extract_rq_sizing_regs(mode_lib, &(rq_regs->rq_regs_l), &rq_param->sizing.rq_l);
rq_regs->rq_regs_l.pte_row_height_linear = dml_floor(dml_log2(rq_param.dlg.rq_l.dpte_row_height), rq_regs->rq_regs_l.pte_row_height_linear = dml_floor(dml_log2(rq_param->dlg.rq_l.dpte_row_height),
1) - 3; 1) - 3;
if (rq_param.yuv420) { if (rq_param->yuv420) {
extract_rq_sizing_regs(mode_lib, &(rq_regs->rq_regs_c), &rq_param.sizing.rq_c); extract_rq_sizing_regs(mode_lib, &(rq_regs->rq_regs_c), &rq_param->sizing.rq_c);
rq_regs->rq_regs_c.pte_row_height_linear = dml_floor(dml_log2(rq_param.dlg.rq_c.dpte_row_height), rq_regs->rq_regs_c.pte_row_height_linear = dml_floor(dml_log2(rq_param->dlg.rq_c.dpte_row_height),
1) - 3; 1) - 3;
} }
rq_regs->rq_regs_l.swath_height = dml_log2(rq_param.dlg.rq_l.swath_height); rq_regs->rq_regs_l.swath_height = dml_log2(rq_param->dlg.rq_l.swath_height);
rq_regs->rq_regs_c.swath_height = dml_log2(rq_param.dlg.rq_c.swath_height); rq_regs->rq_regs_c.swath_height = dml_log2(rq_param->dlg.rq_c.swath_height);
// TODO: take the max between luma, chroma chunk size? // TODO: take the max between luma, chroma chunk size?
// okay for now, as we are setting chunk_bytes to 8kb anyways // okay for now, as we are setting chunk_bytes to 8kb anyways
if (rq_param.sizing.rq_l.chunk_bytes >= 32 * 1024) { //32kb if (rq_param->sizing.rq_l.chunk_bytes >= 32 * 1024) { //32kb
rq_regs->drq_expansion_mode = 0; rq_regs->drq_expansion_mode = 0;
} else { } else {
rq_regs->drq_expansion_mode = 2; rq_regs->drq_expansion_mode = 2;
...@@ -218,9 +218,9 @@ static void extract_rq_regs(struct display_mode_lib *mode_lib, ...@@ -218,9 +218,9 @@ static void extract_rq_regs(struct display_mode_lib *mode_lib,
rq_regs->mrq_expansion_mode = 1; rq_regs->mrq_expansion_mode = 1;
rq_regs->crq_expansion_mode = 1; rq_regs->crq_expansion_mode = 1;
if (rq_param.yuv420) { if (rq_param->yuv420) {
if ((double) rq_param.misc.rq_l.stored_swath_bytes if ((double) rq_param->misc.rq_l.stored_swath_bytes
/ (double) rq_param.misc.rq_c.stored_swath_bytes <= 1.5) { / (double) rq_param->misc.rq_c.stored_swath_bytes <= 1.5) {
detile_buf_plane1_addr = (detile_buf_size_in_bytes / 2.0 / 64.0); // half to chroma detile_buf_plane1_addr = (detile_buf_size_in_bytes / 2.0 / 64.0); // half to chroma
} else { } else {
detile_buf_plane1_addr = dml_round_to_multiple((unsigned int) ((2.0 * detile_buf_size_in_bytes) / 3.0), detile_buf_plane1_addr = dml_round_to_multiple((unsigned int) ((2.0 * detile_buf_size_in_bytes) / 3.0),
...@@ -233,7 +233,7 @@ static void extract_rq_regs(struct display_mode_lib *mode_lib, ...@@ -233,7 +233,7 @@ static void extract_rq_regs(struct display_mode_lib *mode_lib,
static void handle_det_buf_split(struct display_mode_lib *mode_lib, static void handle_det_buf_split(struct display_mode_lib *mode_lib,
display_rq_params_st *rq_param, display_rq_params_st *rq_param,
const display_pipe_source_params_st pipe_src_param) const display_pipe_source_params_st *pipe_src_param)
{ {
unsigned int total_swath_bytes = 0; unsigned int total_swath_bytes = 0;
unsigned int swath_bytes_l = 0; unsigned int swath_bytes_l = 0;
...@@ -242,8 +242,8 @@ static void handle_det_buf_split(struct display_mode_lib *mode_lib, ...@@ -242,8 +242,8 @@ static void handle_det_buf_split(struct display_mode_lib *mode_lib,
unsigned int full_swath_bytes_packed_c = 0; unsigned int full_swath_bytes_packed_c = 0;
bool req128_l = false; bool req128_l = false;
bool req128_c = false; bool req128_c = false;
bool surf_linear = (pipe_src_param.sw_mode == dm_sw_linear); bool surf_linear = (pipe_src_param->sw_mode == dm_sw_linear);
bool surf_vert = (pipe_src_param.source_scan == dm_vert); bool surf_vert = (pipe_src_param->source_scan == dm_vert);
unsigned int log2_swath_height_l = 0; unsigned int log2_swath_height_l = 0;
unsigned int log2_swath_height_c = 0; unsigned int log2_swath_height_c = 0;
unsigned int detile_buf_size_in_bytes = mode_lib->ip.det_buffer_size_kbytes * 1024; unsigned int detile_buf_size_in_bytes = mode_lib->ip.det_buffer_size_kbytes * 1024;
...@@ -685,7 +685,7 @@ static void get_surf_rq_param(struct display_mode_lib *mode_lib, ...@@ -685,7 +685,7 @@ static void get_surf_rq_param(struct display_mode_lib *mode_lib,
display_data_rq_sizing_params_st *rq_sizing_param, display_data_rq_sizing_params_st *rq_sizing_param,
display_data_rq_dlg_params_st *rq_dlg_param, display_data_rq_dlg_params_st *rq_dlg_param,
display_data_rq_misc_params_st *rq_misc_param, display_data_rq_misc_params_st *rq_misc_param,
const display_pipe_source_params_st pipe_src_param, const display_pipe_source_params_st *pipe_src_param,
bool is_chroma) bool is_chroma)
{ {
bool mode_422 = false; bool mode_422 = false;
...@@ -697,15 +697,15 @@ static void get_surf_rq_param(struct display_mode_lib *mode_lib, ...@@ -697,15 +697,15 @@ static void get_surf_rq_param(struct display_mode_lib *mode_lib,
// TODO check if ppe apply for both luma and chroma in 422 case // TODO check if ppe apply for both luma and chroma in 422 case
if (is_chroma) { if (is_chroma) {
vp_width = pipe_src_param.viewport_width_c / ppe; vp_width = pipe_src_param->viewport_width_c / ppe;
vp_height = pipe_src_param.viewport_height_c; vp_height = pipe_src_param->viewport_height_c;
data_pitch = pipe_src_param.data_pitch_c; data_pitch = pipe_src_param->data_pitch_c;
meta_pitch = pipe_src_param.meta_pitch_c; meta_pitch = pipe_src_param->meta_pitch_c;
} else { } else {
vp_width = pipe_src_param.viewport_width / ppe; vp_width = pipe_src_param->viewport_width / ppe;
vp_height = pipe_src_param.viewport_height; vp_height = pipe_src_param->viewport_height;
data_pitch = pipe_src_param.data_pitch; data_pitch = pipe_src_param->data_pitch;
meta_pitch = pipe_src_param.meta_pitch; meta_pitch = pipe_src_param->meta_pitch;
} }
rq_sizing_param->chunk_bytes = 8192; rq_sizing_param->chunk_bytes = 8192;
...@@ -728,21 +728,21 @@ static void get_surf_rq_param(struct display_mode_lib *mode_lib, ...@@ -728,21 +728,21 @@ static void get_surf_rq_param(struct display_mode_lib *mode_lib,
vp_height, vp_height,
data_pitch, data_pitch,
meta_pitch, meta_pitch,
pipe_src_param.source_format, pipe_src_param->source_format,
pipe_src_param.sw_mode, pipe_src_param->sw_mode,
pipe_src_param.macro_tile_size, pipe_src_param->macro_tile_size,
pipe_src_param.source_scan, pipe_src_param->source_scan,
is_chroma); is_chroma);
} }
static void dml20v2_rq_dlg_get_rq_params(struct display_mode_lib *mode_lib, static void dml20v2_rq_dlg_get_rq_params(struct display_mode_lib *mode_lib,
display_rq_params_st *rq_param, display_rq_params_st *rq_param,
const display_pipe_source_params_st pipe_src_param) const display_pipe_source_params_st *pipe_src_param)
{ {
// get param for luma surface // get param for luma surface
rq_param->yuv420 = pipe_src_param.source_format == dm_420_8 rq_param->yuv420 = pipe_src_param->source_format == dm_420_8
|| pipe_src_param.source_format == dm_420_10; || pipe_src_param->source_format == dm_420_10;
rq_param->yuv420_10bpc = pipe_src_param.source_format == dm_420_10; rq_param->yuv420_10bpc = pipe_src_param->source_format == dm_420_10;
get_surf_rq_param(mode_lib, get_surf_rq_param(mode_lib,
&(rq_param->sizing.rq_l), &(rq_param->sizing.rq_l),
...@@ -751,7 +751,7 @@ static void dml20v2_rq_dlg_get_rq_params(struct display_mode_lib *mode_lib, ...@@ -751,7 +751,7 @@ static void dml20v2_rq_dlg_get_rq_params(struct display_mode_lib *mode_lib,
pipe_src_param, pipe_src_param,
0); 0);
if (is_dual_plane((enum source_format_class)(pipe_src_param.source_format))) { if (is_dual_plane((enum source_format_class)(pipe_src_param->source_format))) {
// get param for chroma surface // get param for chroma surface
get_surf_rq_param(mode_lib, get_surf_rq_param(mode_lib,
&(rq_param->sizing.rq_c), &(rq_param->sizing.rq_c),
...@@ -773,8 +773,8 @@ void dml20v2_rq_dlg_get_rq_reg(struct display_mode_lib *mode_lib, ...@@ -773,8 +773,8 @@ void dml20v2_rq_dlg_get_rq_reg(struct display_mode_lib *mode_lib,
display_rq_params_st rq_param = {0}; display_rq_params_st rq_param = {0};
memset(rq_regs, 0, sizeof(*rq_regs)); memset(rq_regs, 0, sizeof(*rq_regs));
dml20v2_rq_dlg_get_rq_params(mode_lib, &rq_param, pipe_param->src); dml20v2_rq_dlg_get_rq_params(mode_lib, &rq_param, &pipe_param->src);
extract_rq_regs(mode_lib, rq_regs, rq_param); extract_rq_regs(mode_lib, rq_regs, &rq_param);
print__rq_regs_st(mode_lib, rq_regs); print__rq_regs_st(mode_lib, rq_regs);
} }
...@@ -787,8 +787,8 @@ static void dml20v2_rq_dlg_get_dlg_params(struct display_mode_lib *mode_lib, ...@@ -787,8 +787,8 @@ static void dml20v2_rq_dlg_get_dlg_params(struct display_mode_lib *mode_lib,
const unsigned int pipe_idx, const unsigned int pipe_idx,
display_dlg_regs_st *disp_dlg_regs, display_dlg_regs_st *disp_dlg_regs,
display_ttu_regs_st *disp_ttu_regs, display_ttu_regs_st *disp_ttu_regs,
const display_rq_dlg_params_st rq_dlg_param, const display_rq_dlg_params_st *rq_dlg_param,
const display_dlg_sys_params_st dlg_sys_param, const display_dlg_sys_params_st *dlg_sys_param,
const bool cstate_en, const bool cstate_en,
const bool pstate_en) const bool pstate_en)
{ {
...@@ -935,7 +935,7 @@ static void dml20v2_rq_dlg_get_dlg_params(struct display_mode_lib *mode_lib, ...@@ -935,7 +935,7 @@ static void dml20v2_rq_dlg_get_dlg_params(struct display_mode_lib *mode_lib,
* (double) ref_freq_to_pix_freq); * (double) ref_freq_to_pix_freq);
ASSERT(disp_dlg_regs->refcyc_h_blank_end < (unsigned int) dml_pow(2, 13)); ASSERT(disp_dlg_regs->refcyc_h_blank_end < (unsigned int) dml_pow(2, 13));
min_dcfclk_mhz = dlg_sys_param.deepsleep_dcfclk_mhz; min_dcfclk_mhz = dlg_sys_param->deepsleep_dcfclk_mhz;
t_calc_us = get_tcalc(mode_lib, e2e_pipe_param, num_pipes); t_calc_us = get_tcalc(mode_lib, e2e_pipe_param, num_pipes);
min_ttu_vblank = get_min_ttu_vblank(mode_lib, e2e_pipe_param, num_pipes, pipe_idx); min_ttu_vblank = get_min_ttu_vblank(mode_lib, e2e_pipe_param, num_pipes, pipe_idx);
...@@ -996,20 +996,20 @@ static void dml20v2_rq_dlg_get_dlg_params(struct display_mode_lib *mode_lib, ...@@ -996,20 +996,20 @@ static void dml20v2_rq_dlg_get_dlg_params(struct display_mode_lib *mode_lib,
// vinit_bot_l = scl.vinit_bot; // vinit_bot_l = scl.vinit_bot;
// vinit_bot_c = scl.vinit_bot_c; // vinit_bot_c = scl.vinit_bot_c;
// unsigned int swath_height_l = rq_dlg_param.rq_l.swath_height; // unsigned int swath_height_l = rq_dlg_param->rq_l.swath_height;
swath_width_ub_l = rq_dlg_param.rq_l.swath_width_ub; swath_width_ub_l = rq_dlg_param->rq_l.swath_width_ub;
// unsigned int dpte_bytes_per_row_ub_l = rq_dlg_param.rq_l.dpte_bytes_per_row_ub; // unsigned int dpte_bytes_per_row_ub_l = rq_dlg_param->rq_l.dpte_bytes_per_row_ub;
dpte_groups_per_row_ub_l = rq_dlg_param.rq_l.dpte_groups_per_row_ub; dpte_groups_per_row_ub_l = rq_dlg_param->rq_l.dpte_groups_per_row_ub;
// unsigned int meta_pte_bytes_per_frame_ub_l = rq_dlg_param.rq_l.meta_pte_bytes_per_frame_ub; // unsigned int meta_pte_bytes_per_frame_ub_l = rq_dlg_param->rq_l.meta_pte_bytes_per_frame_ub;
// unsigned int meta_bytes_per_row_ub_l = rq_dlg_param.rq_l.meta_bytes_per_row_ub; // unsigned int meta_bytes_per_row_ub_l = rq_dlg_param->rq_l.meta_bytes_per_row_ub;
// unsigned int swath_height_c = rq_dlg_param.rq_c.swath_height; // unsigned int swath_height_c = rq_dlg_param->rq_c.swath_height;
swath_width_ub_c = rq_dlg_param.rq_c.swath_width_ub; swath_width_ub_c = rq_dlg_param->rq_c.swath_width_ub;
// dpte_bytes_per_row_ub_c = rq_dlg_param.rq_c.dpte_bytes_per_row_ub; // dpte_bytes_per_row_ub_c = rq_dlg_param->rq_c.dpte_bytes_per_row_ub;
dpte_groups_per_row_ub_c = rq_dlg_param.rq_c.dpte_groups_per_row_ub; dpte_groups_per_row_ub_c = rq_dlg_param->rq_c.dpte_groups_per_row_ub;
meta_chunks_per_row_ub_l = rq_dlg_param.rq_l.meta_chunks_per_row_ub; meta_chunks_per_row_ub_l = rq_dlg_param->rq_l.meta_chunks_per_row_ub;
meta_chunks_per_row_ub_c = rq_dlg_param.rq_c.meta_chunks_per_row_ub; meta_chunks_per_row_ub_c = rq_dlg_param->rq_c.meta_chunks_per_row_ub;
vupdate_offset = dst->vupdate_offset; vupdate_offset = dst->vupdate_offset;
vupdate_width = dst->vupdate_width; vupdate_width = dst->vupdate_width;
vready_offset = dst->vready_offset; vready_offset = dst->vready_offset;
...@@ -1138,16 +1138,16 @@ static void dml20v2_rq_dlg_get_dlg_params(struct display_mode_lib *mode_lib, ...@@ -1138,16 +1138,16 @@ static void dml20v2_rq_dlg_get_dlg_params(struct display_mode_lib *mode_lib,
dml_print("DML_DLG: %s: vratio_pre_c=%3.2f\n", __func__, vratio_pre_c); dml_print("DML_DLG: %s: vratio_pre_c=%3.2f\n", __func__, vratio_pre_c);
// Active // Active
req_per_swath_ub_l = rq_dlg_param.rq_l.req_per_swath_ub; req_per_swath_ub_l = rq_dlg_param->rq_l.req_per_swath_ub;
req_per_swath_ub_c = rq_dlg_param.rq_c.req_per_swath_ub; req_per_swath_ub_c = rq_dlg_param->rq_c.req_per_swath_ub;
meta_row_height_l = rq_dlg_param.rq_l.meta_row_height; meta_row_height_l = rq_dlg_param->rq_l.meta_row_height;
meta_row_height_c = rq_dlg_param.rq_c.meta_row_height; meta_row_height_c = rq_dlg_param->rq_c.meta_row_height;
swath_width_pixels_ub_l = 0; swath_width_pixels_ub_l = 0;
swath_width_pixels_ub_c = 0; swath_width_pixels_ub_c = 0;
scaler_rec_in_width_l = 0; scaler_rec_in_width_l = 0;
scaler_rec_in_width_c = 0; scaler_rec_in_width_c = 0;
dpte_row_height_l = rq_dlg_param.rq_l.dpte_row_height; dpte_row_height_l = rq_dlg_param->rq_l.dpte_row_height;
dpte_row_height_c = rq_dlg_param.rq_c.dpte_row_height; dpte_row_height_c = rq_dlg_param->rq_c.dpte_row_height;
if (mode_422) { if (mode_422) {
swath_width_pixels_ub_l = swath_width_ub_l * 2; // *2 for 2 pixel per element swath_width_pixels_ub_l = swath_width_ub_l * 2; // *2 for 2 pixel per element
...@@ -1585,15 +1585,15 @@ void dml20v2_rq_dlg_get_dlg_reg(struct display_mode_lib *mode_lib, ...@@ -1585,15 +1585,15 @@ void dml20v2_rq_dlg_get_dlg_reg(struct display_mode_lib *mode_lib,
// system parameter calculation done // system parameter calculation done
dml_print("DML_DLG: Calculation for pipe[%d] start\n\n", pipe_idx); dml_print("DML_DLG: Calculation for pipe[%d] start\n\n", pipe_idx);
dml20v2_rq_dlg_get_rq_params(mode_lib, &rq_param, e2e_pipe_param[pipe_idx].pipe.src); dml20v2_rq_dlg_get_rq_params(mode_lib, &rq_param, &e2e_pipe_param[pipe_idx].pipe.src);
dml20v2_rq_dlg_get_dlg_params(mode_lib, dml20v2_rq_dlg_get_dlg_params(mode_lib,
e2e_pipe_param, e2e_pipe_param,
num_pipes, num_pipes,
pipe_idx, pipe_idx,
dlg_regs, dlg_regs,
ttu_regs, ttu_regs,
rq_param.dlg, &rq_param.dlg,
dlg_sys_param, &dlg_sys_param,
cstate_en, cstate_en,
pstate_en); pstate_en);
dml_print("DML_DLG: Calculation for pipe[%d] end\n", pipe_idx); dml_print("DML_DLG: Calculation for pipe[%d] end\n", pipe_idx);
......
...@@ -166,30 +166,30 @@ static void extract_rq_sizing_regs( ...@@ -166,30 +166,30 @@ static void extract_rq_sizing_regs(
static void extract_rq_regs( static void extract_rq_regs(
struct display_mode_lib *mode_lib, struct display_mode_lib *mode_lib,
display_rq_regs_st *rq_regs, display_rq_regs_st *rq_regs,
const display_rq_params_st rq_param) const display_rq_params_st *rq_param)
{ {
unsigned int detile_buf_size_in_bytes = mode_lib->ip.det_buffer_size_kbytes * 1024; unsigned int detile_buf_size_in_bytes = mode_lib->ip.det_buffer_size_kbytes * 1024;
unsigned int detile_buf_plane1_addr = 0; unsigned int detile_buf_plane1_addr = 0;
extract_rq_sizing_regs(mode_lib, &(rq_regs->rq_regs_l), &rq_param.sizing.rq_l); extract_rq_sizing_regs(mode_lib, &(rq_regs->rq_regs_l), &rq_param->sizing.rq_l);
rq_regs->rq_regs_l.pte_row_height_linear = dml_floor( rq_regs->rq_regs_l.pte_row_height_linear = dml_floor(
dml_log2(rq_param.dlg.rq_l.dpte_row_height), dml_log2(rq_param->dlg.rq_l.dpte_row_height),
1) - 3; 1) - 3;
if (rq_param.yuv420) { if (rq_param->yuv420) {
extract_rq_sizing_regs(mode_lib, &(rq_regs->rq_regs_c), &rq_param.sizing.rq_c); extract_rq_sizing_regs(mode_lib, &(rq_regs->rq_regs_c), &rq_param->sizing.rq_c);
rq_regs->rq_regs_c.pte_row_height_linear = dml_floor( rq_regs->rq_regs_c.pte_row_height_linear = dml_floor(
dml_log2(rq_param.dlg.rq_c.dpte_row_height), dml_log2(rq_param->dlg.rq_c.dpte_row_height),
1) - 3; 1) - 3;
} }
rq_regs->rq_regs_l.swath_height = dml_log2(rq_param.dlg.rq_l.swath_height); rq_regs->rq_regs_l.swath_height = dml_log2(rq_param->dlg.rq_l.swath_height);
rq_regs->rq_regs_c.swath_height = dml_log2(rq_param.dlg.rq_c.swath_height); rq_regs->rq_regs_c.swath_height = dml_log2(rq_param->dlg.rq_c.swath_height);
// FIXME: take the max between luma, chroma chunk size? // FIXME: take the max between luma, chroma chunk size?
// okay for now, as we are setting chunk_bytes to 8kb anyways // okay for now, as we are setting chunk_bytes to 8kb anyways
if (rq_param.sizing.rq_l.chunk_bytes >= 32 * 1024) { //32kb if (rq_param->sizing.rq_l.chunk_bytes >= 32 * 1024) { //32kb
rq_regs->drq_expansion_mode = 0; rq_regs->drq_expansion_mode = 0;
} else { } else {
rq_regs->drq_expansion_mode = 2; rq_regs->drq_expansion_mode = 2;
...@@ -198,9 +198,9 @@ static void extract_rq_regs( ...@@ -198,9 +198,9 @@ static void extract_rq_regs(
rq_regs->mrq_expansion_mode = 1; rq_regs->mrq_expansion_mode = 1;
rq_regs->crq_expansion_mode = 1; rq_regs->crq_expansion_mode = 1;
if (rq_param.yuv420) { if (rq_param->yuv420) {
if ((double) rq_param.misc.rq_l.stored_swath_bytes if ((double) rq_param->misc.rq_l.stored_swath_bytes
/ (double) rq_param.misc.rq_c.stored_swath_bytes <= 1.5) { / (double) rq_param->misc.rq_c.stored_swath_bytes <= 1.5) {
detile_buf_plane1_addr = (detile_buf_size_in_bytes / 2.0 / 64.0); // half to chroma detile_buf_plane1_addr = (detile_buf_size_in_bytes / 2.0 / 64.0); // half to chroma
} else { } else {
detile_buf_plane1_addr = dml_round_to_multiple( detile_buf_plane1_addr = dml_round_to_multiple(
...@@ -215,7 +215,7 @@ static void extract_rq_regs( ...@@ -215,7 +215,7 @@ static void extract_rq_regs(
static void handle_det_buf_split( static void handle_det_buf_split(
struct display_mode_lib *mode_lib, struct display_mode_lib *mode_lib,
display_rq_params_st *rq_param, display_rq_params_st *rq_param,
const display_pipe_source_params_st pipe_src_param) const display_pipe_source_params_st *pipe_src_param)
{ {
unsigned int total_swath_bytes = 0; unsigned int total_swath_bytes = 0;
unsigned int swath_bytes_l = 0; unsigned int swath_bytes_l = 0;
...@@ -224,8 +224,8 @@ static void handle_det_buf_split( ...@@ -224,8 +224,8 @@ static void handle_det_buf_split(
unsigned int full_swath_bytes_packed_c = 0; unsigned int full_swath_bytes_packed_c = 0;
bool req128_l = false; bool req128_l = false;
bool req128_c = false; bool req128_c = false;
bool surf_linear = (pipe_src_param.sw_mode == dm_sw_linear); bool surf_linear = (pipe_src_param->sw_mode == dm_sw_linear);
bool surf_vert = (pipe_src_param.source_scan == dm_vert); bool surf_vert = (pipe_src_param->source_scan == dm_vert);
unsigned int log2_swath_height_l = 0; unsigned int log2_swath_height_l = 0;
unsigned int log2_swath_height_c = 0; unsigned int log2_swath_height_c = 0;
unsigned int detile_buf_size_in_bytes = mode_lib->ip.det_buffer_size_kbytes * 1024; unsigned int detile_buf_size_in_bytes = mode_lib->ip.det_buffer_size_kbytes * 1024;
...@@ -806,7 +806,7 @@ static void dml_rq_dlg_get_rq_params( ...@@ -806,7 +806,7 @@ static void dml_rq_dlg_get_rq_params(
} }
// calculate how to split the det buffer space between luma and chroma // calculate how to split the det buffer space between luma and chroma
handle_det_buf_split(mode_lib, rq_param, pipe_param->src); handle_det_buf_split(mode_lib, rq_param, &pipe_param->src);
print__rq_params_st(mode_lib, rq_param); print__rq_params_st(mode_lib, rq_param);
} }
...@@ -819,7 +819,7 @@ void dml21_rq_dlg_get_rq_reg( ...@@ -819,7 +819,7 @@ void dml21_rq_dlg_get_rq_reg(
memset(rq_regs, 0, sizeof(*rq_regs)); memset(rq_regs, 0, sizeof(*rq_regs));
dml_rq_dlg_get_rq_params(mode_lib, &rq_param, pipe_param); dml_rq_dlg_get_rq_params(mode_lib, &rq_param, pipe_param);
extract_rq_regs(mode_lib, rq_regs, rq_param); extract_rq_regs(mode_lib, rq_regs, &rq_param);
print__rq_regs_st(mode_lib, rq_regs); print__rq_regs_st(mode_lib, rq_regs);
} }
...@@ -833,8 +833,8 @@ static void dml_rq_dlg_get_dlg_params( ...@@ -833,8 +833,8 @@ static void dml_rq_dlg_get_dlg_params(
const unsigned int pipe_idx, const unsigned int pipe_idx,
display_dlg_regs_st *disp_dlg_regs, display_dlg_regs_st *disp_dlg_regs,
display_ttu_regs_st *disp_ttu_regs, display_ttu_regs_st *disp_ttu_regs,
const display_rq_dlg_params_st rq_dlg_param, const display_rq_dlg_params_st *rq_dlg_param,
const display_dlg_sys_params_st dlg_sys_param, const display_dlg_sys_params_st *dlg_sys_param,
const bool cstate_en, const bool cstate_en,
const bool pstate_en) const bool pstate_en)
{ {
...@@ -981,7 +981,7 @@ static void dml_rq_dlg_get_dlg_params( ...@@ -981,7 +981,7 @@ static void dml_rq_dlg_get_dlg_params(
* (double) ref_freq_to_pix_freq); * (double) ref_freq_to_pix_freq);
ASSERT(disp_dlg_regs->refcyc_h_blank_end < (unsigned int)dml_pow(2, 13)); ASSERT(disp_dlg_regs->refcyc_h_blank_end < (unsigned int)dml_pow(2, 13));
min_dcfclk_mhz = dlg_sys_param.deepsleep_dcfclk_mhz; min_dcfclk_mhz = dlg_sys_param->deepsleep_dcfclk_mhz;
t_calc_us = get_tcalc(mode_lib, e2e_pipe_param, num_pipes); t_calc_us = get_tcalc(mode_lib, e2e_pipe_param, num_pipes);
min_ttu_vblank = get_min_ttu_vblank(mode_lib, e2e_pipe_param, num_pipes, pipe_idx); min_ttu_vblank = get_min_ttu_vblank(mode_lib, e2e_pipe_param, num_pipes, pipe_idx);
...@@ -1042,13 +1042,13 @@ static void dml_rq_dlg_get_dlg_params( ...@@ -1042,13 +1042,13 @@ static void dml_rq_dlg_get_dlg_params(
scl_enable = scl->scl_enable; scl_enable = scl->scl_enable;
line_time_in_us = (htotal / pclk_freq_in_mhz); line_time_in_us = (htotal / pclk_freq_in_mhz);
swath_width_ub_l = rq_dlg_param.rq_l.swath_width_ub; swath_width_ub_l = rq_dlg_param->rq_l.swath_width_ub;
dpte_groups_per_row_ub_l = rq_dlg_param.rq_l.dpte_groups_per_row_ub; dpte_groups_per_row_ub_l = rq_dlg_param->rq_l.dpte_groups_per_row_ub;
swath_width_ub_c = rq_dlg_param.rq_c.swath_width_ub; swath_width_ub_c = rq_dlg_param->rq_c.swath_width_ub;
dpte_groups_per_row_ub_c = rq_dlg_param.rq_c.dpte_groups_per_row_ub; dpte_groups_per_row_ub_c = rq_dlg_param->rq_c.dpte_groups_per_row_ub;
meta_chunks_per_row_ub_l = rq_dlg_param.rq_l.meta_chunks_per_row_ub; meta_chunks_per_row_ub_l = rq_dlg_param->rq_l.meta_chunks_per_row_ub;
meta_chunks_per_row_ub_c = rq_dlg_param.rq_c.meta_chunks_per_row_ub; meta_chunks_per_row_ub_c = rq_dlg_param->rq_c.meta_chunks_per_row_ub;
vupdate_offset = dst->vupdate_offset; vupdate_offset = dst->vupdate_offset;
vupdate_width = dst->vupdate_width; vupdate_width = dst->vupdate_width;
vready_offset = dst->vready_offset; vready_offset = dst->vready_offset;
...@@ -1189,16 +1189,16 @@ static void dml_rq_dlg_get_dlg_params( ...@@ -1189,16 +1189,16 @@ static void dml_rq_dlg_get_dlg_params(
dml_print("DML_DLG: %s: vratio_pre_c=%3.2f\n", __func__, vratio_pre_c); dml_print("DML_DLG: %s: vratio_pre_c=%3.2f\n", __func__, vratio_pre_c);
// Active // Active
req_per_swath_ub_l = rq_dlg_param.rq_l.req_per_swath_ub; req_per_swath_ub_l = rq_dlg_param->rq_l.req_per_swath_ub;
req_per_swath_ub_c = rq_dlg_param.rq_c.req_per_swath_ub; req_per_swath_ub_c = rq_dlg_param->rq_c.req_per_swath_ub;
meta_row_height_l = rq_dlg_param.rq_l.meta_row_height; meta_row_height_l = rq_dlg_param->rq_l.meta_row_height;
meta_row_height_c = rq_dlg_param.rq_c.meta_row_height; meta_row_height_c = rq_dlg_param->rq_c.meta_row_height;
swath_width_pixels_ub_l = 0; swath_width_pixels_ub_l = 0;
swath_width_pixels_ub_c = 0; swath_width_pixels_ub_c = 0;
scaler_rec_in_width_l = 0; scaler_rec_in_width_l = 0;
scaler_rec_in_width_c = 0; scaler_rec_in_width_c = 0;
dpte_row_height_l = rq_dlg_param.rq_l.dpte_row_height; dpte_row_height_l = rq_dlg_param->rq_l.dpte_row_height;
dpte_row_height_c = rq_dlg_param.rq_c.dpte_row_height; dpte_row_height_c = rq_dlg_param->rq_c.dpte_row_height;
if (mode_422) { if (mode_422) {
swath_width_pixels_ub_l = swath_width_ub_l * 2; // *2 for 2 pixel per element swath_width_pixels_ub_l = swath_width_ub_l * 2; // *2 for 2 pixel per element
...@@ -1704,8 +1704,8 @@ void dml21_rq_dlg_get_dlg_reg( ...@@ -1704,8 +1704,8 @@ void dml21_rq_dlg_get_dlg_reg(
pipe_idx, pipe_idx,
dlg_regs, dlg_regs,
ttu_regs, ttu_regs,
rq_param.dlg, &rq_param.dlg,
dlg_sys_param, &dlg_sys_param,
cstate_en, cstate_en,
pstate_en); pstate_en);
dml_print("DML_DLG: Calculation for pipe[%d] end\n", pipe_idx); dml_print("DML_DLG: Calculation for pipe[%d] end\n", pipe_idx);
......
...@@ -113,28 +113,28 @@ static void extract_rq_sizing_regs(struct display_mode_lib *mode_lib, ...@@ -113,28 +113,28 @@ static void extract_rq_sizing_regs(struct display_mode_lib *mode_lib,
static void extract_rq_regs(struct display_mode_lib *mode_lib, static void extract_rq_regs(struct display_mode_lib *mode_lib,
display_rq_regs_st *rq_regs, display_rq_regs_st *rq_regs,
const display_rq_params_st rq_param) const display_rq_params_st *rq_param)
{ {
unsigned int detile_buf_size_in_bytes = mode_lib->ip.det_buffer_size_kbytes * 1024; unsigned int detile_buf_size_in_bytes = mode_lib->ip.det_buffer_size_kbytes * 1024;
unsigned int detile_buf_plane1_addr = 0; unsigned int detile_buf_plane1_addr = 0;
extract_rq_sizing_regs(mode_lib, &(rq_regs->rq_regs_l), &rq_param.sizing.rq_l); extract_rq_sizing_regs(mode_lib, &(rq_regs->rq_regs_l), &rq_param->sizing.rq_l);
rq_regs->rq_regs_l.pte_row_height_linear = dml_floor(dml_log2(rq_param.dlg.rq_l.dpte_row_height), rq_regs->rq_regs_l.pte_row_height_linear = dml_floor(dml_log2(rq_param->dlg.rq_l.dpte_row_height),
1) - 3; 1) - 3;
if (rq_param.yuv420) { if (rq_param->yuv420) {
extract_rq_sizing_regs(mode_lib, &(rq_regs->rq_regs_c), &rq_param.sizing.rq_c); extract_rq_sizing_regs(mode_lib, &(rq_regs->rq_regs_c), &rq_param->sizing.rq_c);
rq_regs->rq_regs_c.pte_row_height_linear = dml_floor(dml_log2(rq_param.dlg.rq_c.dpte_row_height), rq_regs->rq_regs_c.pte_row_height_linear = dml_floor(dml_log2(rq_param->dlg.rq_c.dpte_row_height),
1) - 3; 1) - 3;
} }
rq_regs->rq_regs_l.swath_height = dml_log2(rq_param.dlg.rq_l.swath_height); rq_regs->rq_regs_l.swath_height = dml_log2(rq_param->dlg.rq_l.swath_height);
rq_regs->rq_regs_c.swath_height = dml_log2(rq_param.dlg.rq_c.swath_height); rq_regs->rq_regs_c.swath_height = dml_log2(rq_param->dlg.rq_c.swath_height);
// FIXME: take the max between luma, chroma chunk size? // FIXME: take the max between luma, chroma chunk size?
// okay for now, as we are setting chunk_bytes to 8kb anyways // okay for now, as we are setting chunk_bytes to 8kb anyways
if (rq_param.sizing.rq_l.chunk_bytes >= 32 * 1024 || (rq_param.yuv420 && rq_param.sizing.rq_c.chunk_bytes >= 32 * 1024)) { //32kb if (rq_param->sizing.rq_l.chunk_bytes >= 32 * 1024 || (rq_param->yuv420 && rq_param->sizing.rq_c.chunk_bytes >= 32 * 1024)) { //32kb
rq_regs->drq_expansion_mode = 0; rq_regs->drq_expansion_mode = 0;
} else { } else {
rq_regs->drq_expansion_mode = 2; rq_regs->drq_expansion_mode = 2;
...@@ -143,9 +143,9 @@ static void extract_rq_regs(struct display_mode_lib *mode_lib, ...@@ -143,9 +143,9 @@ static void extract_rq_regs(struct display_mode_lib *mode_lib,
rq_regs->mrq_expansion_mode = 1; rq_regs->mrq_expansion_mode = 1;
rq_regs->crq_expansion_mode = 1; rq_regs->crq_expansion_mode = 1;
if (rq_param.yuv420) { if (rq_param->yuv420) {
if ((double)rq_param.misc.rq_l.stored_swath_bytes if ((double)rq_param->misc.rq_l.stored_swath_bytes
/ (double)rq_param.misc.rq_c.stored_swath_bytes <= 1.5) { / (double)rq_param->misc.rq_c.stored_swath_bytes <= 1.5) {
detile_buf_plane1_addr = (detile_buf_size_in_bytes / 2.0 / 64.0); // half to chroma detile_buf_plane1_addr = (detile_buf_size_in_bytes / 2.0 / 64.0); // half to chroma
} else { } else {
detile_buf_plane1_addr = dml_round_to_multiple((unsigned int)((2.0 * detile_buf_size_in_bytes) / 3.0), detile_buf_plane1_addr = dml_round_to_multiple((unsigned int)((2.0 * detile_buf_size_in_bytes) / 3.0),
...@@ -158,7 +158,7 @@ static void extract_rq_regs(struct display_mode_lib *mode_lib, ...@@ -158,7 +158,7 @@ static void extract_rq_regs(struct display_mode_lib *mode_lib,
static void handle_det_buf_split(struct display_mode_lib *mode_lib, static void handle_det_buf_split(struct display_mode_lib *mode_lib,
display_rq_params_st *rq_param, display_rq_params_st *rq_param,
const display_pipe_source_params_st pipe_src_param) const display_pipe_source_params_st *pipe_src_param)
{ {
unsigned int total_swath_bytes = 0; unsigned int total_swath_bytes = 0;
unsigned int swath_bytes_l = 0; unsigned int swath_bytes_l = 0;
...@@ -167,8 +167,8 @@ static void handle_det_buf_split(struct display_mode_lib *mode_lib, ...@@ -167,8 +167,8 @@ static void handle_det_buf_split(struct display_mode_lib *mode_lib,
unsigned int full_swath_bytes_packed_c = 0; unsigned int full_swath_bytes_packed_c = 0;
bool req128_l = false; bool req128_l = false;
bool req128_c = false; bool req128_c = false;
bool surf_linear = (pipe_src_param.sw_mode == dm_sw_linear); bool surf_linear = (pipe_src_param->sw_mode == dm_sw_linear);
bool surf_vert = (pipe_src_param.source_scan == dm_vert); bool surf_vert = (pipe_src_param->source_scan == dm_vert);
unsigned int log2_swath_height_l = 0; unsigned int log2_swath_height_l = 0;
unsigned int log2_swath_height_c = 0; unsigned int log2_swath_height_c = 0;
unsigned int detile_buf_size_in_bytes = mode_lib->ip.det_buffer_size_kbytes * 1024; unsigned int detile_buf_size_in_bytes = mode_lib->ip.det_buffer_size_kbytes * 1024;
...@@ -871,7 +871,7 @@ static void dml_rq_dlg_get_rq_params(struct display_mode_lib *mode_lib, ...@@ -871,7 +871,7 @@ static void dml_rq_dlg_get_rq_params(struct display_mode_lib *mode_lib,
} }
// calculate how to split the det buffer space between luma and chroma // calculate how to split the det buffer space between luma and chroma
handle_det_buf_split(mode_lib, rq_param, pipe_param->src); handle_det_buf_split(mode_lib, rq_param, &pipe_param->src);
print__rq_params_st(mode_lib, rq_param); print__rq_params_st(mode_lib, rq_param);
} }
...@@ -883,7 +883,7 @@ void dml30_rq_dlg_get_rq_reg(struct display_mode_lib *mode_lib, ...@@ -883,7 +883,7 @@ void dml30_rq_dlg_get_rq_reg(struct display_mode_lib *mode_lib,
memset(rq_regs, 0, sizeof(*rq_regs)); memset(rq_regs, 0, sizeof(*rq_regs));
dml_rq_dlg_get_rq_params(mode_lib, &rq_param, pipe_param); dml_rq_dlg_get_rq_params(mode_lib, &rq_param, pipe_param);
extract_rq_regs(mode_lib, rq_regs, rq_param); extract_rq_regs(mode_lib, rq_regs, &rq_param);
print__rq_regs_st(mode_lib, rq_regs); print__rq_regs_st(mode_lib, rq_regs);
} }
......
...@@ -196,26 +196,26 @@ static void extract_rq_sizing_regs(struct display_mode_lib *mode_lib, display_da ...@@ -196,26 +196,26 @@ static void extract_rq_sizing_regs(struct display_mode_lib *mode_lib, display_da
rq_regs->mpte_group_size = dml_log2(rq_sizing->mpte_group_bytes) - 6; rq_regs->mpte_group_size = dml_log2(rq_sizing->mpte_group_bytes) - 6;
} }
static void extract_rq_regs(struct display_mode_lib *mode_lib, display_rq_regs_st *rq_regs, const display_rq_params_st rq_param) static void extract_rq_regs(struct display_mode_lib *mode_lib, display_rq_regs_st *rq_regs, const display_rq_params_st *rq_param)
{ {
unsigned int detile_buf_size_in_bytes = mode_lib->ip.det_buffer_size_kbytes * 1024; unsigned int detile_buf_size_in_bytes = mode_lib->ip.det_buffer_size_kbytes * 1024;
unsigned int detile_buf_plane1_addr = 0; unsigned int detile_buf_plane1_addr = 0;
extract_rq_sizing_regs(mode_lib, &(rq_regs->rq_regs_l), &rq_param.sizing.rq_l); extract_rq_sizing_regs(mode_lib, &(rq_regs->rq_regs_l), &rq_param->sizing.rq_l);
rq_regs->rq_regs_l.pte_row_height_linear = dml_floor(dml_log2(rq_param.dlg.rq_l.dpte_row_height), 1) - 3; rq_regs->rq_regs_l.pte_row_height_linear = dml_floor(dml_log2(rq_param->dlg.rq_l.dpte_row_height), 1) - 3;
if (rq_param.yuv420) { if (rq_param->yuv420) {
extract_rq_sizing_regs(mode_lib, &(rq_regs->rq_regs_c), &rq_param.sizing.rq_c); extract_rq_sizing_regs(mode_lib, &(rq_regs->rq_regs_c), &rq_param->sizing.rq_c);
rq_regs->rq_regs_c.pte_row_height_linear = dml_floor(dml_log2(rq_param.dlg.rq_c.dpte_row_height), 1) - 3; rq_regs->rq_regs_c.pte_row_height_linear = dml_floor(dml_log2(rq_param->dlg.rq_c.dpte_row_height), 1) - 3;
} }
rq_regs->rq_regs_l.swath_height = dml_log2(rq_param.dlg.rq_l.swath_height); rq_regs->rq_regs_l.swath_height = dml_log2(rq_param->dlg.rq_l.swath_height);
rq_regs->rq_regs_c.swath_height = dml_log2(rq_param.dlg.rq_c.swath_height); rq_regs->rq_regs_c.swath_height = dml_log2(rq_param->dlg.rq_c.swath_height);
// FIXME: take the max between luma, chroma chunk size? // FIXME: take the max between luma, chroma chunk size?
// okay for now, as we are setting chunk_bytes to 8kb anyways // okay for now, as we are setting chunk_bytes to 8kb anyways
if (rq_param.sizing.rq_l.chunk_bytes >= 32 * 1024 || (rq_param.yuv420 && rq_param.sizing.rq_c.chunk_bytes >= 32 * 1024)) { //32kb if (rq_param->sizing.rq_l.chunk_bytes >= 32 * 1024 || (rq_param->yuv420 && rq_param->sizing.rq_c.chunk_bytes >= 32 * 1024)) { //32kb
rq_regs->drq_expansion_mode = 0; rq_regs->drq_expansion_mode = 0;
} else { } else {
rq_regs->drq_expansion_mode = 2; rq_regs->drq_expansion_mode = 2;
...@@ -225,8 +225,8 @@ static void extract_rq_regs(struct display_mode_lib *mode_lib, display_rq_regs_s ...@@ -225,8 +225,8 @@ static void extract_rq_regs(struct display_mode_lib *mode_lib, display_rq_regs_s
rq_regs->crq_expansion_mode = 1; rq_regs->crq_expansion_mode = 1;
// Note: detile_buf_plane1_addr is in unit of 1KB // Note: detile_buf_plane1_addr is in unit of 1KB
if (rq_param.yuv420) { if (rq_param->yuv420) {
if ((double) rq_param.misc.rq_l.stored_swath_bytes / (double) rq_param.misc.rq_c.stored_swath_bytes <= 1.5) { if ((double) rq_param->misc.rq_l.stored_swath_bytes / (double) rq_param->misc.rq_c.stored_swath_bytes <= 1.5) {
detile_buf_plane1_addr = (detile_buf_size_in_bytes / 2.0 / 1024.0); // half to chroma detile_buf_plane1_addr = (detile_buf_size_in_bytes / 2.0 / 1024.0); // half to chroma
#ifdef __DML_RQ_DLG_CALC_DEBUG__ #ifdef __DML_RQ_DLG_CALC_DEBUG__
dml_print("DML_DLG: %s: detile_buf_plane1_addr = %0d (1/2 to chroma)\n", __func__, detile_buf_plane1_addr); dml_print("DML_DLG: %s: detile_buf_plane1_addr = %0d (1/2 to chroma)\n", __func__, detile_buf_plane1_addr);
...@@ -244,14 +244,14 @@ static void extract_rq_regs(struct display_mode_lib *mode_lib, display_rq_regs_s ...@@ -244,14 +244,14 @@ static void extract_rq_regs(struct display_mode_lib *mode_lib, display_rq_regs_s
dml_print("DML_DLG: %s: detile_buf_size_in_bytes = %0d\n", __func__, detile_buf_size_in_bytes); dml_print("DML_DLG: %s: detile_buf_size_in_bytes = %0d\n", __func__, detile_buf_size_in_bytes);
dml_print("DML_DLG: %s: detile_buf_plane1_addr = %0d\n", __func__, detile_buf_plane1_addr); dml_print("DML_DLG: %s: detile_buf_plane1_addr = %0d\n", __func__, detile_buf_plane1_addr);
dml_print("DML_DLG: %s: plane1_base_address = %0d\n", __func__, rq_regs->plane1_base_address); dml_print("DML_DLG: %s: plane1_base_address = %0d\n", __func__, rq_regs->plane1_base_address);
dml_print("DML_DLG: %s: rq_l.stored_swath_bytes = %0d\n", __func__, rq_param.misc.rq_l.stored_swath_bytes); dml_print("DML_DLG: %s: rq_l.stored_swath_bytes = %0d\n", __func__, rq_param->misc.rq_l.stored_swath_bytes);
dml_print("DML_DLG: %s: rq_c.stored_swath_bytes = %0d\n", __func__, rq_param.misc.rq_c.stored_swath_bytes); dml_print("DML_DLG: %s: rq_c.stored_swath_bytes = %0d\n", __func__, rq_param->misc.rq_c.stored_swath_bytes);
dml_print("DML_DLG: %s: rq_l.swath_height = %0d\n", __func__, rq_param.dlg.rq_l.swath_height); dml_print("DML_DLG: %s: rq_l.swath_height = %0d\n", __func__, rq_param->dlg.rq_l.swath_height);
dml_print("DML_DLG: %s: rq_c.swath_height = %0d\n", __func__, rq_param.dlg.rq_c.swath_height); dml_print("DML_DLG: %s: rq_c.swath_height = %0d\n", __func__, rq_param->dlg.rq_c.swath_height);
#endif #endif
} }
static void handle_det_buf_split(struct display_mode_lib *mode_lib, display_rq_params_st *rq_param, const display_pipe_source_params_st pipe_src_param) static void handle_det_buf_split(struct display_mode_lib *mode_lib, display_rq_params_st *rq_param, const display_pipe_source_params_st *pipe_src_param)
{ {
unsigned int total_swath_bytes = 0; unsigned int total_swath_bytes = 0;
unsigned int swath_bytes_l = 0; unsigned int swath_bytes_l = 0;
...@@ -260,8 +260,8 @@ static void handle_det_buf_split(struct display_mode_lib *mode_lib, display_rq_p ...@@ -260,8 +260,8 @@ static void handle_det_buf_split(struct display_mode_lib *mode_lib, display_rq_p
unsigned int full_swath_bytes_packed_c = 0; unsigned int full_swath_bytes_packed_c = 0;
bool req128_l = 0; bool req128_l = 0;
bool req128_c = 0; bool req128_c = 0;
bool surf_linear = (pipe_src_param.sw_mode == dm_sw_linear); bool surf_linear = (pipe_src_param->sw_mode == dm_sw_linear);
bool surf_vert = (pipe_src_param.source_scan == dm_vert); bool surf_vert = (pipe_src_param->source_scan == dm_vert);
unsigned int log2_swath_height_l = 0; unsigned int log2_swath_height_l = 0;
unsigned int log2_swath_height_c = 0; unsigned int log2_swath_height_c = 0;
unsigned int detile_buf_size_in_bytes = mode_lib->ip.det_buffer_size_kbytes * 1024; unsigned int detile_buf_size_in_bytes = mode_lib->ip.det_buffer_size_kbytes * 1024;
...@@ -849,7 +849,7 @@ static void dml_rq_dlg_get_rq_params(struct display_mode_lib *mode_lib, display_ ...@@ -849,7 +849,7 @@ static void dml_rq_dlg_get_rq_params(struct display_mode_lib *mode_lib, display_
} }
// calculate how to split the det buffer space between luma and chroma // calculate how to split the det buffer space between luma and chroma
handle_det_buf_split(mode_lib, rq_param, pipe_param->src); handle_det_buf_split(mode_lib, rq_param, &pipe_param->src);
print__rq_params_st(mode_lib, rq_param); print__rq_params_st(mode_lib, rq_param);
} }
...@@ -859,7 +859,7 @@ void dml31_rq_dlg_get_rq_reg(struct display_mode_lib *mode_lib, display_rq_regs_ ...@@ -859,7 +859,7 @@ void dml31_rq_dlg_get_rq_reg(struct display_mode_lib *mode_lib, display_rq_regs_
memset(rq_regs, 0, sizeof(*rq_regs)); memset(rq_regs, 0, sizeof(*rq_regs));
dml_rq_dlg_get_rq_params(mode_lib, &rq_param, pipe_param); dml_rq_dlg_get_rq_params(mode_lib, &rq_param, pipe_param);
extract_rq_regs(mode_lib, rq_regs, rq_param); extract_rq_regs(mode_lib, rq_regs, &rq_param);
print__rq_regs_st(mode_lib, rq_regs); print__rq_regs_st(mode_lib, rq_regs);
} }
...@@ -943,8 +943,8 @@ static void dml_rq_dlg_get_dlg_params( ...@@ -943,8 +943,8 @@ static void dml_rq_dlg_get_dlg_params(
const unsigned int pipe_idx, const unsigned int pipe_idx,
display_dlg_regs_st *disp_dlg_regs, display_dlg_regs_st *disp_dlg_regs,
display_ttu_regs_st *disp_ttu_regs, display_ttu_regs_st *disp_ttu_regs,
const display_rq_dlg_params_st rq_dlg_param, const display_rq_dlg_params_st *rq_dlg_param,
const display_dlg_sys_params_st dlg_sys_param, const display_dlg_sys_params_st *dlg_sys_param,
const bool cstate_en, const bool cstate_en,
const bool pstate_en, const bool pstate_en,
const bool vm_en, const bool vm_en,
...@@ -1112,13 +1112,13 @@ static void dml_rq_dlg_get_dlg_params( ...@@ -1112,13 +1112,13 @@ static void dml_rq_dlg_get_dlg_params(
vratio_c = scl->vscl_ratio_c; vratio_c = scl->vscl_ratio_c;
scl_enable = scl->scl_enable; scl_enable = scl->scl_enable;
swath_width_ub_l = rq_dlg_param.rq_l.swath_width_ub; swath_width_ub_l = rq_dlg_param->rq_l.swath_width_ub;
dpte_groups_per_row_ub_l = rq_dlg_param.rq_l.dpte_groups_per_row_ub; dpte_groups_per_row_ub_l = rq_dlg_param->rq_l.dpte_groups_per_row_ub;
swath_width_ub_c = rq_dlg_param.rq_c.swath_width_ub; swath_width_ub_c = rq_dlg_param->rq_c.swath_width_ub;
dpte_groups_per_row_ub_c = rq_dlg_param.rq_c.dpte_groups_per_row_ub; dpte_groups_per_row_ub_c = rq_dlg_param->rq_c.dpte_groups_per_row_ub;
meta_chunks_per_row_ub_l = rq_dlg_param.rq_l.meta_chunks_per_row_ub; meta_chunks_per_row_ub_l = rq_dlg_param->rq_l.meta_chunks_per_row_ub;
meta_chunks_per_row_ub_c = rq_dlg_param.rq_c.meta_chunks_per_row_ub; meta_chunks_per_row_ub_c = rq_dlg_param->rq_c.meta_chunks_per_row_ub;
vupdate_offset = dst->vupdate_offset; vupdate_offset = dst->vupdate_offset;
vupdate_width = dst->vupdate_width; vupdate_width = dst->vupdate_width;
vready_offset = dst->vready_offset; vready_offset = dst->vready_offset;
...@@ -1239,16 +1239,16 @@ static void dml_rq_dlg_get_dlg_params( ...@@ -1239,16 +1239,16 @@ static void dml_rq_dlg_get_dlg_params(
dml_print("DML_DLG: %s: vratio_pre_c = %3.2f\n", __func__, vratio_pre_c); dml_print("DML_DLG: %s: vratio_pre_c = %3.2f\n", __func__, vratio_pre_c);
// Active // Active
req_per_swath_ub_l = rq_dlg_param.rq_l.req_per_swath_ub; req_per_swath_ub_l = rq_dlg_param->rq_l.req_per_swath_ub;
req_per_swath_ub_c = rq_dlg_param.rq_c.req_per_swath_ub; req_per_swath_ub_c = rq_dlg_param->rq_c.req_per_swath_ub;
meta_row_height_l = rq_dlg_param.rq_l.meta_row_height; meta_row_height_l = rq_dlg_param->rq_l.meta_row_height;
meta_row_height_c = rq_dlg_param.rq_c.meta_row_height; meta_row_height_c = rq_dlg_param->rq_c.meta_row_height;
swath_width_pixels_ub_l = 0; swath_width_pixels_ub_l = 0;
swath_width_pixels_ub_c = 0; swath_width_pixels_ub_c = 0;
scaler_rec_in_width_l = 0; scaler_rec_in_width_l = 0;
scaler_rec_in_width_c = 0; scaler_rec_in_width_c = 0;
dpte_row_height_l = rq_dlg_param.rq_l.dpte_row_height; dpte_row_height_l = rq_dlg_param->rq_l.dpte_row_height;
dpte_row_height_c = rq_dlg_param.rq_c.dpte_row_height; dpte_row_height_c = rq_dlg_param->rq_c.dpte_row_height;
if (mode_422) { if (mode_422) {
swath_width_pixels_ub_l = swath_width_ub_l * 2; // *2 for 2 pixel per element swath_width_pixels_ub_l = swath_width_ub_l * 2; // *2 for 2 pixel per element
...@@ -1712,8 +1712,8 @@ void dml31_rq_dlg_get_dlg_reg( ...@@ -1712,8 +1712,8 @@ void dml31_rq_dlg_get_dlg_reg(
pipe_idx, pipe_idx,
dlg_regs, dlg_regs,
ttu_regs, ttu_regs,
rq_param.dlg, &rq_param.dlg,
dlg_sys_param, &dlg_sys_param,
cstate_en, cstate_en,
pstate_en, pstate_en,
vm_en, vm_en,
......
...@@ -231,22 +231,22 @@ static void extract_rq_sizing_regs( ...@@ -231,22 +231,22 @@ static void extract_rq_sizing_regs(
void dml1_extract_rq_regs( void dml1_extract_rq_regs(
struct display_mode_lib *mode_lib, struct display_mode_lib *mode_lib,
struct _vcs_dpi_display_rq_regs_st *rq_regs, struct _vcs_dpi_display_rq_regs_st *rq_regs,
const struct _vcs_dpi_display_rq_params_st rq_param) const struct _vcs_dpi_display_rq_params_st *rq_param)
{ {
unsigned int detile_buf_size_in_bytes = mode_lib->ip.det_buffer_size_kbytes * 1024; unsigned int detile_buf_size_in_bytes = mode_lib->ip.det_buffer_size_kbytes * 1024;
unsigned int detile_buf_plane1_addr = 0; unsigned int detile_buf_plane1_addr = 0;
extract_rq_sizing_regs(mode_lib, &(rq_regs->rq_regs_l), &rq_param.sizing.rq_l); extract_rq_sizing_regs(mode_lib, &(rq_regs->rq_regs_l), &rq_param->sizing.rq_l);
if (rq_param.yuv420) if (rq_param->yuv420)
extract_rq_sizing_regs(mode_lib, &(rq_regs->rq_regs_c), &rq_param.sizing.rq_c); extract_rq_sizing_regs(mode_lib, &(rq_regs->rq_regs_c), &rq_param->sizing.rq_c);
rq_regs->rq_regs_l.swath_height = dml_log2(rq_param.dlg.rq_l.swath_height); rq_regs->rq_regs_l.swath_height = dml_log2(rq_param->dlg.rq_l.swath_height);
rq_regs->rq_regs_c.swath_height = dml_log2(rq_param.dlg.rq_c.swath_height); rq_regs->rq_regs_c.swath_height = dml_log2(rq_param->dlg.rq_c.swath_height);
/* TODO: take the max between luma, chroma chunk size? /* TODO: take the max between luma, chroma chunk size?
* okay for now, as we are setting chunk_bytes to 8kb anyways * okay for now, as we are setting chunk_bytes to 8kb anyways
*/ */
if (rq_param.sizing.rq_l.chunk_bytes >= 32 * 1024) { /*32kb */ if (rq_param->sizing.rq_l.chunk_bytes >= 32 * 1024) { /*32kb */
rq_regs->drq_expansion_mode = 0; rq_regs->drq_expansion_mode = 0;
} else { } else {
rq_regs->drq_expansion_mode = 2; rq_regs->drq_expansion_mode = 2;
...@@ -255,9 +255,9 @@ void dml1_extract_rq_regs( ...@@ -255,9 +255,9 @@ void dml1_extract_rq_regs(
rq_regs->mrq_expansion_mode = 1; rq_regs->mrq_expansion_mode = 1;
rq_regs->crq_expansion_mode = 1; rq_regs->crq_expansion_mode = 1;
if (rq_param.yuv420) { if (rq_param->yuv420) {
if ((double) rq_param.misc.rq_l.stored_swath_bytes if ((double) rq_param->misc.rq_l.stored_swath_bytes
/ (double) rq_param.misc.rq_c.stored_swath_bytes <= 1.5) { / (double) rq_param->misc.rq_c.stored_swath_bytes <= 1.5) {
detile_buf_plane1_addr = (detile_buf_size_in_bytes / 2.0 / 64.0); /* half to chroma */ detile_buf_plane1_addr = (detile_buf_size_in_bytes / 2.0 / 64.0); /* half to chroma */
} else { } else {
detile_buf_plane1_addr = dml_round_to_multiple( detile_buf_plane1_addr = dml_round_to_multiple(
...@@ -272,7 +272,7 @@ void dml1_extract_rq_regs( ...@@ -272,7 +272,7 @@ void dml1_extract_rq_regs(
static void handle_det_buf_split( static void handle_det_buf_split(
struct display_mode_lib *mode_lib, struct display_mode_lib *mode_lib,
struct _vcs_dpi_display_rq_params_st *rq_param, struct _vcs_dpi_display_rq_params_st *rq_param,
const struct _vcs_dpi_display_pipe_source_params_st pipe_src_param) const struct _vcs_dpi_display_pipe_source_params_st *pipe_src_param)
{ {
unsigned int total_swath_bytes = 0; unsigned int total_swath_bytes = 0;
unsigned int swath_bytes_l = 0; unsigned int swath_bytes_l = 0;
...@@ -281,8 +281,8 @@ static void handle_det_buf_split( ...@@ -281,8 +281,8 @@ static void handle_det_buf_split(
unsigned int full_swath_bytes_packed_c = 0; unsigned int full_swath_bytes_packed_c = 0;
bool req128_l = 0; bool req128_l = 0;
bool req128_c = 0; bool req128_c = 0;
bool surf_linear = (pipe_src_param.sw_mode == dm_sw_linear); bool surf_linear = (pipe_src_param->sw_mode == dm_sw_linear);
bool surf_vert = (pipe_src_param.source_scan == dm_vert); bool surf_vert = (pipe_src_param->source_scan == dm_vert);
unsigned int log2_swath_height_l = 0; unsigned int log2_swath_height_l = 0;
unsigned int log2_swath_height_c = 0; unsigned int log2_swath_height_c = 0;
unsigned int detile_buf_size_in_bytes = mode_lib->ip.det_buffer_size_kbytes * 1024; unsigned int detile_buf_size_in_bytes = mode_lib->ip.det_buffer_size_kbytes * 1024;
...@@ -556,7 +556,7 @@ static void get_surf_rq_param( ...@@ -556,7 +556,7 @@ static void get_surf_rq_param(
struct _vcs_dpi_display_data_rq_sizing_params_st *rq_sizing_param, struct _vcs_dpi_display_data_rq_sizing_params_st *rq_sizing_param,
struct _vcs_dpi_display_data_rq_dlg_params_st *rq_dlg_param, struct _vcs_dpi_display_data_rq_dlg_params_st *rq_dlg_param,
struct _vcs_dpi_display_data_rq_misc_params_st *rq_misc_param, struct _vcs_dpi_display_data_rq_misc_params_st *rq_misc_param,
const struct _vcs_dpi_display_pipe_source_params_st pipe_src_param, const struct _vcs_dpi_display_pipe_source_params_st *pipe_src_param,
bool is_chroma) bool is_chroma)
{ {
bool mode_422 = 0; bool mode_422 = 0;
...@@ -622,15 +622,15 @@ static void get_surf_rq_param( ...@@ -622,15 +622,15 @@ static void get_surf_rq_param(
/* TODO check if ppe apply for both luma and chroma in 422 case */ /* TODO check if ppe apply for both luma and chroma in 422 case */
if (is_chroma) { if (is_chroma) {
vp_width = pipe_src_param.viewport_width_c / ppe; vp_width = pipe_src_param->viewport_width_c / ppe;
vp_height = pipe_src_param.viewport_height_c; vp_height = pipe_src_param->viewport_height_c;
data_pitch = pipe_src_param.data_pitch_c; data_pitch = pipe_src_param->data_pitch_c;
meta_pitch = pipe_src_param.meta_pitch_c; meta_pitch = pipe_src_param->meta_pitch_c;
} else { } else {
vp_width = pipe_src_param.viewport_width / ppe; vp_width = pipe_src_param->viewport_width / ppe;
vp_height = pipe_src_param.viewport_height; vp_height = pipe_src_param->viewport_height;
data_pitch = pipe_src_param.data_pitch; data_pitch = pipe_src_param->data_pitch;
meta_pitch = pipe_src_param.meta_pitch; meta_pitch = pipe_src_param->meta_pitch;
} }
rq_sizing_param->chunk_bytes = 8192; rq_sizing_param->chunk_bytes = 8192;
...@@ -645,11 +645,11 @@ static void get_surf_rq_param( ...@@ -645,11 +645,11 @@ static void get_surf_rq_param(
rq_sizing_param->mpte_group_bytes = 2048; rq_sizing_param->mpte_group_bytes = 2048;
surf_linear = (pipe_src_param.sw_mode == dm_sw_linear); surf_linear = (pipe_src_param->sw_mode == dm_sw_linear);
surf_vert = (pipe_src_param.source_scan == dm_vert); surf_vert = (pipe_src_param->source_scan == dm_vert);
bytes_per_element = get_bytes_per_element( bytes_per_element = get_bytes_per_element(
(enum source_format_class) pipe_src_param.source_format, (enum source_format_class) pipe_src_param->source_format,
is_chroma); is_chroma);
log2_bytes_per_element = dml_log2(bytes_per_element); log2_bytes_per_element = dml_log2(bytes_per_element);
blk256_width = 0; blk256_width = 0;
...@@ -671,7 +671,7 @@ static void get_surf_rq_param( ...@@ -671,7 +671,7 @@ static void get_surf_rq_param(
log2_blk256_height = dml_log2((double) blk256_height); log2_blk256_height = dml_log2((double) blk256_height);
blk_bytes = blk_bytes =
surf_linear ? 256 : get_blk_size_bytes( surf_linear ? 256 : get_blk_size_bytes(
(enum source_macro_tile_size) pipe_src_param.macro_tile_size); (enum source_macro_tile_size) pipe_src_param->macro_tile_size);
log2_blk_bytes = dml_log2((double) blk_bytes); log2_blk_bytes = dml_log2((double) blk_bytes);
log2_blk_height = 0; log2_blk_height = 0;
log2_blk_width = 0; log2_blk_width = 0;
...@@ -682,7 +682,7 @@ static void get_surf_rq_param( ...@@ -682,7 +682,7 @@ static void get_surf_rq_param(
* "/2" is like square root * "/2" is like square root
* blk is vertical biased * blk is vertical biased
*/ */
if (pipe_src_param.sw_mode != dm_sw_linear) if (pipe_src_param->sw_mode != dm_sw_linear)
log2_blk_height = log2_blk256_height log2_blk_height = log2_blk256_height
+ dml_ceil((double) (log2_blk_bytes - 8) / 2.0, 1); + dml_ceil((double) (log2_blk_bytes - 8) / 2.0, 1);
else else
...@@ -930,10 +930,10 @@ static void get_surf_rq_param( ...@@ -930,10 +930,10 @@ static void get_surf_rq_param(
&func_meta_row_height, &func_meta_row_height,
vp_width, vp_width,
data_pitch, data_pitch,
pipe_src_param.source_format, pipe_src_param->source_format,
pipe_src_param.sw_mode, pipe_src_param->sw_mode,
pipe_src_param.macro_tile_size, pipe_src_param->macro_tile_size,
pipe_src_param.source_scan, pipe_src_param->source_scan,
is_chroma); is_chroma);
/* Just a check to make sure this function and the new one give the same /* Just a check to make sure this function and the new one give the same
...@@ -960,12 +960,12 @@ static void get_surf_rq_param( ...@@ -960,12 +960,12 @@ static void get_surf_rq_param(
void dml1_rq_dlg_get_rq_params( void dml1_rq_dlg_get_rq_params(
struct display_mode_lib *mode_lib, struct display_mode_lib *mode_lib,
struct _vcs_dpi_display_rq_params_st *rq_param, struct _vcs_dpi_display_rq_params_st *rq_param,
const struct _vcs_dpi_display_pipe_source_params_st pipe_src_param) const struct _vcs_dpi_display_pipe_source_params_st *pipe_src_param)
{ {
/* get param for luma surface */ /* get param for luma surface */
rq_param->yuv420 = pipe_src_param.source_format == dm_420_8 rq_param->yuv420 = pipe_src_param->source_format == dm_420_8
|| pipe_src_param.source_format == dm_420_10; || pipe_src_param->source_format == dm_420_10;
rq_param->yuv420_10bpc = pipe_src_param.source_format == dm_420_10; rq_param->yuv420_10bpc = pipe_src_param->source_format == dm_420_10;
get_surf_rq_param( get_surf_rq_param(
mode_lib, mode_lib,
...@@ -975,7 +975,7 @@ void dml1_rq_dlg_get_rq_params( ...@@ -975,7 +975,7 @@ void dml1_rq_dlg_get_rq_params(
pipe_src_param, pipe_src_param,
0); 0);
if (is_dual_plane((enum source_format_class) pipe_src_param.source_format)) { if (is_dual_plane((enum source_format_class) pipe_src_param->source_format)) {
/* get param for chroma surface */ /* get param for chroma surface */
get_surf_rq_param( get_surf_rq_param(
mode_lib, mode_lib,
...@@ -998,26 +998,26 @@ void dml1_rq_dlg_get_dlg_params( ...@@ -998,26 +998,26 @@ void dml1_rq_dlg_get_dlg_params(
struct display_mode_lib *mode_lib, struct display_mode_lib *mode_lib,
struct _vcs_dpi_display_dlg_regs_st *disp_dlg_regs, struct _vcs_dpi_display_dlg_regs_st *disp_dlg_regs,
struct _vcs_dpi_display_ttu_regs_st *disp_ttu_regs, struct _vcs_dpi_display_ttu_regs_st *disp_ttu_regs,
const struct _vcs_dpi_display_rq_dlg_params_st rq_dlg_param, const struct _vcs_dpi_display_rq_dlg_params_st *rq_dlg_param,
const struct _vcs_dpi_display_dlg_sys_params_st dlg_sys_param, const struct _vcs_dpi_display_dlg_sys_params_st *dlg_sys_param,
const struct _vcs_dpi_display_e2e_pipe_params_st e2e_pipe_param, const struct _vcs_dpi_display_e2e_pipe_params_st *e2e_pipe_param,
const bool cstate_en, const bool cstate_en,
const bool pstate_en, const bool pstate_en,
const bool vm_en, const bool vm_en,
const bool iflip_en) const bool iflip_en)
{ {
/* Timing */ /* Timing */
unsigned int htotal = e2e_pipe_param.pipe.dest.htotal; unsigned int htotal = e2e_pipe_param->pipe.dest.htotal;
unsigned int hblank_end = e2e_pipe_param.pipe.dest.hblank_end; unsigned int hblank_end = e2e_pipe_param->pipe.dest.hblank_end;
unsigned int vblank_start = e2e_pipe_param.pipe.dest.vblank_start; unsigned int vblank_start = e2e_pipe_param->pipe.dest.vblank_start;
unsigned int vblank_end = e2e_pipe_param.pipe.dest.vblank_end; unsigned int vblank_end = e2e_pipe_param->pipe.dest.vblank_end;
bool interlaced = e2e_pipe_param.pipe.dest.interlaced; bool interlaced = e2e_pipe_param->pipe.dest.interlaced;
unsigned int min_vblank = mode_lib->ip.min_vblank_lines; unsigned int min_vblank = mode_lib->ip.min_vblank_lines;
double pclk_freq_in_mhz = e2e_pipe_param.pipe.dest.pixel_rate_mhz; double pclk_freq_in_mhz = e2e_pipe_param->pipe.dest.pixel_rate_mhz;
double refclk_freq_in_mhz = e2e_pipe_param.clks_cfg.refclk_mhz; double refclk_freq_in_mhz = e2e_pipe_param->clks_cfg.refclk_mhz;
double dppclk_freq_in_mhz = e2e_pipe_param.clks_cfg.dppclk_mhz; double dppclk_freq_in_mhz = e2e_pipe_param->clks_cfg.dppclk_mhz;
double dispclk_freq_in_mhz = e2e_pipe_param.clks_cfg.dispclk_mhz; double dispclk_freq_in_mhz = e2e_pipe_param->clks_cfg.dispclk_mhz;
double ref_freq_to_pix_freq; double ref_freq_to_pix_freq;
double prefetch_xy_calc_in_dcfclk; double prefetch_xy_calc_in_dcfclk;
...@@ -1160,13 +1160,13 @@ void dml1_rq_dlg_get_dlg_params( ...@@ -1160,13 +1160,13 @@ void dml1_rq_dlg_get_dlg_params(
disp_dlg_regs->dlg_vblank_end = interlaced ? (vblank_end / 2) : vblank_end; /* 15 bits */ disp_dlg_regs->dlg_vblank_end = interlaced ? (vblank_end / 2) : vblank_end; /* 15 bits */
prefetch_xy_calc_in_dcfclk = 24.0; /* TODO: ip_param */ prefetch_xy_calc_in_dcfclk = 24.0; /* TODO: ip_param */
min_dcfclk_mhz = dlg_sys_param.deepsleep_dcfclk_mhz; min_dcfclk_mhz = dlg_sys_param->deepsleep_dcfclk_mhz;
t_calc_us = prefetch_xy_calc_in_dcfclk / min_dcfclk_mhz; t_calc_us = prefetch_xy_calc_in_dcfclk / min_dcfclk_mhz;
min_ttu_vblank = dlg_sys_param.t_urg_wm_us; min_ttu_vblank = dlg_sys_param->t_urg_wm_us;
if (cstate_en) if (cstate_en)
min_ttu_vblank = dml_max(dlg_sys_param.t_sr_wm_us, min_ttu_vblank); min_ttu_vblank = dml_max(dlg_sys_param->t_sr_wm_us, min_ttu_vblank);
if (pstate_en) if (pstate_en)
min_ttu_vblank = dml_max(dlg_sys_param.t_mclk_wm_us, min_ttu_vblank); min_ttu_vblank = dml_max(dlg_sys_param->t_mclk_wm_us, min_ttu_vblank);
min_ttu_vblank = min_ttu_vblank + t_calc_us; min_ttu_vblank = min_ttu_vblank + t_calc_us;
min_dst_y_ttu_vblank = min_ttu_vblank * pclk_freq_in_mhz / (double) htotal; min_dst_y_ttu_vblank = min_ttu_vblank * pclk_freq_in_mhz / (double) htotal;
...@@ -1197,59 +1197,59 @@ void dml1_rq_dlg_get_dlg_params( ...@@ -1197,59 +1197,59 @@ void dml1_rq_dlg_get_dlg_params(
/* ------------------------- */ /* ------------------------- */
/* Prefetch Calc */ /* Prefetch Calc */
/* Source */ /* Source */
dcc_en = e2e_pipe_param.pipe.src.dcc; dcc_en = e2e_pipe_param->pipe.src.dcc;
dual_plane = is_dual_plane( dual_plane = is_dual_plane(
(enum source_format_class) e2e_pipe_param.pipe.src.source_format); (enum source_format_class) e2e_pipe_param->pipe.src.source_format);
mode_422 = 0; /* TODO */ mode_422 = 0; /* TODO */
access_dir = (e2e_pipe_param.pipe.src.source_scan == dm_vert); /* vp access direction: horizontal or vertical accessed */ access_dir = (e2e_pipe_param->pipe.src.source_scan == dm_vert); /* vp access direction: horizontal or vertical accessed */
bytes_per_element_l = get_bytes_per_element( bytes_per_element_l = get_bytes_per_element(
(enum source_format_class) e2e_pipe_param.pipe.src.source_format, (enum source_format_class) e2e_pipe_param->pipe.src.source_format,
0); 0);
bytes_per_element_c = get_bytes_per_element( bytes_per_element_c = get_bytes_per_element(
(enum source_format_class) e2e_pipe_param.pipe.src.source_format, (enum source_format_class) e2e_pipe_param->pipe.src.source_format,
1); 1);
vp_height_l = e2e_pipe_param.pipe.src.viewport_height; vp_height_l = e2e_pipe_param->pipe.src.viewport_height;
vp_width_l = e2e_pipe_param.pipe.src.viewport_width; vp_width_l = e2e_pipe_param->pipe.src.viewport_width;
vp_height_c = e2e_pipe_param.pipe.src.viewport_height_c; vp_height_c = e2e_pipe_param->pipe.src.viewport_height_c;
vp_width_c = e2e_pipe_param.pipe.src.viewport_width_c; vp_width_c = e2e_pipe_param->pipe.src.viewport_width_c;
/* Scaling */ /* Scaling */
htaps_l = e2e_pipe_param.pipe.scale_taps.htaps; htaps_l = e2e_pipe_param->pipe.scale_taps.htaps;
htaps_c = e2e_pipe_param.pipe.scale_taps.htaps_c; htaps_c = e2e_pipe_param->pipe.scale_taps.htaps_c;
hratios_l = e2e_pipe_param.pipe.scale_ratio_depth.hscl_ratio; hratios_l = e2e_pipe_param->pipe.scale_ratio_depth.hscl_ratio;
hratios_c = e2e_pipe_param.pipe.scale_ratio_depth.hscl_ratio_c; hratios_c = e2e_pipe_param->pipe.scale_ratio_depth.hscl_ratio_c;
vratio_l = e2e_pipe_param.pipe.scale_ratio_depth.vscl_ratio; vratio_l = e2e_pipe_param->pipe.scale_ratio_depth.vscl_ratio;
vratio_c = e2e_pipe_param.pipe.scale_ratio_depth.vscl_ratio_c; vratio_c = e2e_pipe_param->pipe.scale_ratio_depth.vscl_ratio_c;
line_time_in_us = (htotal / pclk_freq_in_mhz); line_time_in_us = (htotal / pclk_freq_in_mhz);
vinit_l = e2e_pipe_param.pipe.scale_ratio_depth.vinit; vinit_l = e2e_pipe_param->pipe.scale_ratio_depth.vinit;
vinit_c = e2e_pipe_param.pipe.scale_ratio_depth.vinit_c; vinit_c = e2e_pipe_param->pipe.scale_ratio_depth.vinit_c;
vinit_bot_l = e2e_pipe_param.pipe.scale_ratio_depth.vinit_bot; vinit_bot_l = e2e_pipe_param->pipe.scale_ratio_depth.vinit_bot;
vinit_bot_c = e2e_pipe_param.pipe.scale_ratio_depth.vinit_bot_c; vinit_bot_c = e2e_pipe_param->pipe.scale_ratio_depth.vinit_bot_c;
swath_height_l = rq_dlg_param.rq_l.swath_height; swath_height_l = rq_dlg_param->rq_l.swath_height;
swath_width_ub_l = rq_dlg_param.rq_l.swath_width_ub; swath_width_ub_l = rq_dlg_param->rq_l.swath_width_ub;
dpte_bytes_per_row_ub_l = rq_dlg_param.rq_l.dpte_bytes_per_row_ub; dpte_bytes_per_row_ub_l = rq_dlg_param->rq_l.dpte_bytes_per_row_ub;
dpte_groups_per_row_ub_l = rq_dlg_param.rq_l.dpte_groups_per_row_ub; dpte_groups_per_row_ub_l = rq_dlg_param->rq_l.dpte_groups_per_row_ub;
meta_pte_bytes_per_frame_ub_l = rq_dlg_param.rq_l.meta_pte_bytes_per_frame_ub; meta_pte_bytes_per_frame_ub_l = rq_dlg_param->rq_l.meta_pte_bytes_per_frame_ub;
meta_bytes_per_row_ub_l = rq_dlg_param.rq_l.meta_bytes_per_row_ub; meta_bytes_per_row_ub_l = rq_dlg_param->rq_l.meta_bytes_per_row_ub;
swath_height_c = rq_dlg_param.rq_c.swath_height; swath_height_c = rq_dlg_param->rq_c.swath_height;
swath_width_ub_c = rq_dlg_param.rq_c.swath_width_ub; swath_width_ub_c = rq_dlg_param->rq_c.swath_width_ub;
dpte_bytes_per_row_ub_c = rq_dlg_param.rq_c.dpte_bytes_per_row_ub; dpte_bytes_per_row_ub_c = rq_dlg_param->rq_c.dpte_bytes_per_row_ub;
dpte_groups_per_row_ub_c = rq_dlg_param.rq_c.dpte_groups_per_row_ub; dpte_groups_per_row_ub_c = rq_dlg_param->rq_c.dpte_groups_per_row_ub;
meta_chunks_per_row_ub_l = rq_dlg_param.rq_l.meta_chunks_per_row_ub; meta_chunks_per_row_ub_l = rq_dlg_param->rq_l.meta_chunks_per_row_ub;
vupdate_offset = e2e_pipe_param.pipe.dest.vupdate_offset; vupdate_offset = e2e_pipe_param->pipe.dest.vupdate_offset;
vupdate_width = e2e_pipe_param.pipe.dest.vupdate_width; vupdate_width = e2e_pipe_param->pipe.dest.vupdate_width;
vready_offset = e2e_pipe_param.pipe.dest.vready_offset; vready_offset = e2e_pipe_param->pipe.dest.vready_offset;
dppclk_delay_subtotal = mode_lib->ip.dppclk_delay_subtotal; dppclk_delay_subtotal = mode_lib->ip.dppclk_delay_subtotal;
dispclk_delay_subtotal = mode_lib->ip.dispclk_delay_subtotal; dispclk_delay_subtotal = mode_lib->ip.dispclk_delay_subtotal;
pixel_rate_delay_subtotal = dppclk_delay_subtotal * pclk_freq_in_mhz / dppclk_freq_in_mhz pixel_rate_delay_subtotal = dppclk_delay_subtotal * pclk_freq_in_mhz / dppclk_freq_in_mhz
+ dispclk_delay_subtotal * pclk_freq_in_mhz / dispclk_freq_in_mhz; + dispclk_delay_subtotal * pclk_freq_in_mhz / dispclk_freq_in_mhz;
vstartup_start = e2e_pipe_param.pipe.dest.vstartup_start; vstartup_start = e2e_pipe_param->pipe.dest.vstartup_start;
if (interlaced) if (interlaced)
vstartup_start = vstartup_start / 2; vstartup_start = vstartup_start / 2;
...@@ -1276,13 +1276,13 @@ void dml1_rq_dlg_get_dlg_params( ...@@ -1276,13 +1276,13 @@ void dml1_rq_dlg_get_dlg_params(
dst_x_after_scaler = 0; dst_x_after_scaler = 0;
dst_y_after_scaler = 0; dst_y_after_scaler = 0;
if (e2e_pipe_param.pipe.src.is_hsplit) if (e2e_pipe_param->pipe.src.is_hsplit)
dst_x_after_scaler = pixel_rate_delay_subtotal dst_x_after_scaler = pixel_rate_delay_subtotal
+ e2e_pipe_param.pipe.dest.recout_width; + e2e_pipe_param->pipe.dest.recout_width;
else else
dst_x_after_scaler = pixel_rate_delay_subtotal; dst_x_after_scaler = pixel_rate_delay_subtotal;
if (e2e_pipe_param.dout.output_format == dm_420) if (e2e_pipe_param->dout.output_format == dm_420)
dst_y_after_scaler = 1; dst_y_after_scaler = 1;
else else
dst_y_after_scaler = 0; dst_y_after_scaler = 0;
...@@ -1334,7 +1334,7 @@ void dml1_rq_dlg_get_dlg_params( ...@@ -1334,7 +1334,7 @@ void dml1_rq_dlg_get_dlg_params(
DTRACE( DTRACE(
"DLG: %s: t_srx_delay_us = %3.2f", "DLG: %s: t_srx_delay_us = %3.2f",
__func__, __func__,
(double) dlg_sys_param.t_srx_delay_us); (double) dlg_sys_param->t_srx_delay_us);
DTRACE("DLG: %s: line_time_in_us = %3.2f", __func__, (double) line_time_in_us); DTRACE("DLG: %s: line_time_in_us = %3.2f", __func__, (double) line_time_in_us);
DTRACE("DLG: %s: vupdate_offset = %d", __func__, vupdate_offset); DTRACE("DLG: %s: vupdate_offset = %d", __func__, vupdate_offset);
DTRACE("DLG: %s: vupdate_width = %d", __func__, vupdate_width); DTRACE("DLG: %s: vupdate_width = %d", __func__, vupdate_width);
...@@ -1408,12 +1408,12 @@ void dml1_rq_dlg_get_dlg_params( ...@@ -1408,12 +1408,12 @@ void dml1_rq_dlg_get_dlg_params(
DTRACE("DLG: %s: dpte_row_bytes = %d", __func__, dpte_row_bytes); DTRACE("DLG: %s: dpte_row_bytes = %d", __func__, dpte_row_bytes);
prefetch_bw = (vm_bytes + 2 * dpte_row_bytes + 2 * meta_row_bytes + sw_bytes) / t_pre_us; prefetch_bw = (vm_bytes + 2 * dpte_row_bytes + 2 * meta_row_bytes + sw_bytes) / t_pre_us;
flip_bw = ((vm_bytes + dpte_row_bytes + meta_row_bytes) * dlg_sys_param.total_flip_bw) flip_bw = ((vm_bytes + dpte_row_bytes + meta_row_bytes) * dlg_sys_param->total_flip_bw)
/ (double) dlg_sys_param.total_flip_bytes; / (double) dlg_sys_param->total_flip_bytes;
t_vm_us = line_time_in_us / 4.0; t_vm_us = line_time_in_us / 4.0;
if (vm_en && dcc_en) { if (vm_en && dcc_en) {
t_vm_us = dml_max( t_vm_us = dml_max(
dlg_sys_param.t_extra_us, dlg_sys_param->t_extra_us,
dml_max((double) vm_bytes / prefetch_bw, t_vm_us)); dml_max((double) vm_bytes / prefetch_bw, t_vm_us));
if (iflip_en && !dual_plane) { if (iflip_en && !dual_plane) {
...@@ -1423,12 +1423,12 @@ void dml1_rq_dlg_get_dlg_params( ...@@ -1423,12 +1423,12 @@ void dml1_rq_dlg_get_dlg_params(
} }
} }
t_r0_us = dml_max(dlg_sys_param.t_extra_us - t_vm_us, line_time_in_us - t_vm_us); t_r0_us = dml_max(dlg_sys_param->t_extra_us - t_vm_us, line_time_in_us - t_vm_us);
if (vm_en || dcc_en) { if (vm_en || dcc_en) {
t_r0_us = dml_max( t_r0_us = dml_max(
(double) (dpte_row_bytes + meta_row_bytes) / prefetch_bw, (double) (dpte_row_bytes + meta_row_bytes) / prefetch_bw,
dlg_sys_param.t_extra_us); dlg_sys_param->t_extra_us);
t_r0_us = dml_max((double) (line_time_in_us - t_vm_us), t_r0_us); t_r0_us = dml_max((double) (line_time_in_us - t_vm_us), t_r0_us);
if (iflip_en && !dual_plane) { if (iflip_en && !dual_plane) {
...@@ -1550,15 +1550,15 @@ void dml1_rq_dlg_get_dlg_params( ...@@ -1550,15 +1550,15 @@ void dml1_rq_dlg_get_dlg_params(
disp_dlg_regs->refcyc_per_meta_chunk_vblank_l;/* dcc for 4:2:0 is not supported in dcn1.0. assigned to be the same as _l for now */ disp_dlg_regs->refcyc_per_meta_chunk_vblank_l;/* dcc for 4:2:0 is not supported in dcn1.0. assigned to be the same as _l for now */
/* Active */ /* Active */
req_per_swath_ub_l = rq_dlg_param.rq_l.req_per_swath_ub; req_per_swath_ub_l = rq_dlg_param->rq_l.req_per_swath_ub;
req_per_swath_ub_c = rq_dlg_param.rq_c.req_per_swath_ub; req_per_swath_ub_c = rq_dlg_param->rq_c.req_per_swath_ub;
meta_row_height_l = rq_dlg_param.rq_l.meta_row_height; meta_row_height_l = rq_dlg_param->rq_l.meta_row_height;
swath_width_pixels_ub_l = 0; swath_width_pixels_ub_l = 0;
swath_width_pixels_ub_c = 0; swath_width_pixels_ub_c = 0;
scaler_rec_in_width_l = 0; scaler_rec_in_width_l = 0;
scaler_rec_in_width_c = 0; scaler_rec_in_width_c = 0;
dpte_row_height_l = rq_dlg_param.rq_l.dpte_row_height; dpte_row_height_l = rq_dlg_param->rq_l.dpte_row_height;
dpte_row_height_c = rq_dlg_param.rq_c.dpte_row_height; dpte_row_height_c = rq_dlg_param->rq_c.dpte_row_height;
disp_dlg_regs->dst_y_per_pte_row_nom_l = (unsigned int) ((double) dpte_row_height_l disp_dlg_regs->dst_y_per_pte_row_nom_l = (unsigned int) ((double) dpte_row_height_l
/ (double) vratio_l * dml_pow(2, 2)); / (double) vratio_l * dml_pow(2, 2));
...@@ -1650,14 +1650,14 @@ void dml1_rq_dlg_get_dlg_params( ...@@ -1650,14 +1650,14 @@ void dml1_rq_dlg_get_dlg_params(
refcyc_per_req_delivery_cur0 = 0.; refcyc_per_req_delivery_cur0 = 0.;
full_recout_width = 0; full_recout_width = 0;
if (e2e_pipe_param.pipe.src.is_hsplit) { if (e2e_pipe_param->pipe.src.is_hsplit) {
if (e2e_pipe_param.pipe.dest.full_recout_width == 0) { if (e2e_pipe_param->pipe.dest.full_recout_width == 0) {
DTRACE("DLG: %s: Warningfull_recout_width not set in hsplit mode", __func__); DTRACE("DLG: %s: Warningfull_recout_width not set in hsplit mode", __func__);
full_recout_width = e2e_pipe_param.pipe.dest.recout_width * 2; /* assume half split for dcn1 */ full_recout_width = e2e_pipe_param->pipe.dest.recout_width * 2; /* assume half split for dcn1 */
} else } else
full_recout_width = e2e_pipe_param.pipe.dest.full_recout_width; full_recout_width = e2e_pipe_param->pipe.dest.full_recout_width;
} else } else
full_recout_width = e2e_pipe_param.pipe.dest.recout_width; full_recout_width = e2e_pipe_param->pipe.dest.recout_width;
refcyc_per_line_delivery_pre_l = get_refcyc_per_delivery( refcyc_per_line_delivery_pre_l = get_refcyc_per_delivery(
mode_lib, mode_lib,
...@@ -1824,9 +1824,9 @@ void dml1_rq_dlg_get_dlg_params( ...@@ -1824,9 +1824,9 @@ void dml1_rq_dlg_get_dlg_params(
} }
/* TTU - Cursor */ /* TTU - Cursor */
hratios_cur0 = e2e_pipe_param.pipe.scale_ratio_depth.hscl_ratio; hratios_cur0 = e2e_pipe_param->pipe.scale_ratio_depth.hscl_ratio;
cur0_src_width = e2e_pipe_param.pipe.src.cur0_src_width; /* cursor source width */ cur0_src_width = e2e_pipe_param->pipe.src.cur0_src_width; /* cursor source width */
cur0_bpp = (enum cursor_bpp) e2e_pipe_param.pipe.src.cur0_bpp; cur0_bpp = (enum cursor_bpp) e2e_pipe_param->pipe.src.cur0_bpp;
cur0_req_size = 0; cur0_req_size = 0;
cur0_req_width = 0; cur0_req_width = 0;
cur0_width_ub = 0.0; cur0_width_ub = 0.0;
......
...@@ -33,7 +33,7 @@ struct display_mode_lib; ...@@ -33,7 +33,7 @@ struct display_mode_lib;
void dml1_extract_rq_regs( void dml1_extract_rq_regs(
struct display_mode_lib *mode_lib, struct display_mode_lib *mode_lib,
struct _vcs_dpi_display_rq_regs_st *rq_regs, struct _vcs_dpi_display_rq_regs_st *rq_regs,
const struct _vcs_dpi_display_rq_params_st rq_param); const struct _vcs_dpi_display_rq_params_st *rq_param);
/* Function: dml_rq_dlg_get_rq_params /* Function: dml_rq_dlg_get_rq_params
* Calculate requestor related parameters that register definition agnostic * Calculate requestor related parameters that register definition agnostic
* (i.e. this layer does try to separate real values from register definition) * (i.e. this layer does try to separate real values from register definition)
...@@ -45,7 +45,7 @@ void dml1_extract_rq_regs( ...@@ -45,7 +45,7 @@ void dml1_extract_rq_regs(
void dml1_rq_dlg_get_rq_params( void dml1_rq_dlg_get_rq_params(
struct display_mode_lib *mode_lib, struct display_mode_lib *mode_lib,
struct _vcs_dpi_display_rq_params_st *rq_param, struct _vcs_dpi_display_rq_params_st *rq_param,
const struct _vcs_dpi_display_pipe_source_params_st pipe_src_param); const struct _vcs_dpi_display_pipe_source_params_st *pipe_src_param);
/* Function: dml_rq_dlg_get_dlg_params /* Function: dml_rq_dlg_get_dlg_params
...@@ -55,9 +55,9 @@ void dml1_rq_dlg_get_dlg_params( ...@@ -55,9 +55,9 @@ void dml1_rq_dlg_get_dlg_params(
struct display_mode_lib *mode_lib, struct display_mode_lib *mode_lib,
struct _vcs_dpi_display_dlg_regs_st *dlg_regs, struct _vcs_dpi_display_dlg_regs_st *dlg_regs,
struct _vcs_dpi_display_ttu_regs_st *ttu_regs, struct _vcs_dpi_display_ttu_regs_st *ttu_regs,
const struct _vcs_dpi_display_rq_dlg_params_st rq_dlg_param, const struct _vcs_dpi_display_rq_dlg_params_st *rq_dlg_param,
const struct _vcs_dpi_display_dlg_sys_params_st dlg_sys_param, const struct _vcs_dpi_display_dlg_sys_params_st *dlg_sys_param,
const struct _vcs_dpi_display_e2e_pipe_params_st e2e_pipe_param, const struct _vcs_dpi_display_e2e_pipe_params_st *e2e_pipe_param,
const bool cstate_en, const bool cstate_en,
const bool pstate_en, const bool pstate_en,
const bool vm_en, const bool vm_en,
......
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