Loading msm/vidc/msm_vidc_bus_iris2.c +47 −89 Original line number Diff line number Diff line Loading @@ -71,7 +71,7 @@ static unsigned long __calculate_decoder(struct vidc_bus_vote_data *d) lcu_size = d->lcu_size; dpb_bpp = d->num_formats >= 1 ? __bpp(d->color_formats[0]) : INT_MAX; dpb_bpp = __bpp(d->color_formats[0]); unified_dpb_opb = d->num_formats == 1; Loading @@ -81,25 +81,12 @@ static unsigned long __calculate_decoder(struct vidc_bus_vote_data *d) opb_compression_enabled = d->num_formats >= 2 && __ubwc(d->color_formats[1]); /* * convert q16 number into integer and fractional part upto 2 places. * ex : 105752 / 65536 = 1.61; 1.61 in q16 = 105752; * integer part = 105752 / 65536 = 1; * reminder = 105752 - 1 * 65536 = 40216; * fractional part = 40216 * 100 / 65536 = 61; * now converto to fp(1, 61, 100) for below code. */ integer_part = d->compression_ratio >> 16; frac_part = ((d->compression_ratio - (integer_part << 16)) * 100) >> 16; integer_part = Q16_INT(d->compression_ratio); frac_part = Q16_FRAC(d->compression_ratio); dpb_read_compression_factor = FP(integer_part, frac_part, 100); integer_part = d->complexity_factor >> 16; frac_part = ((d->complexity_factor - (integer_part << 16)) * 100) >> 16; integer_part = Q16_INT(d->complexity_factor); frac_part = Q16_FRAC(d->complexity_factor); motion_vector_complexity = FP(integer_part, frac_part, 100); dpb_write_compression_factor = dpb_read_compression_factor; Loading @@ -122,7 +109,7 @@ static unsigned long __calculate_decoder(struct vidc_bus_vote_data *d) lcu_per_frame = DIV_ROUND_UP(width, lcu_size) * DIV_ROUND_UP(height, lcu_size); bitrate = (d->bitrate + 1000000 - 1) / 1000000; bitrate = DIV_ROUND_UP(d->bitrate, 1000000); bins_to_bit_factor = FP_INT(4); Loading @@ -148,12 +135,15 @@ static unsigned long __calculate_decoder(struct vidc_bus_vote_data *d) collocated_bytes_per_lcu * fps), FP_INT(bps(1))); ddr.collocated_write = ddr.collocated_read; y_bw_no_ubwc_8bpp = fp_div(fp_mult( FP_INT((int)(width * height)), FP_INT((int)fps)), y_bw_no_ubwc_8bpp = fp_div(FP_INT(width * height * fps), FP_INT(1000 * 1000)); y_bw_no_ubwc_10bpp = fp_div(fp_mult(y_bw_no_ubwc_8bpp, FP_INT(256)), if (dpb_bpp != 8) { y_bw_no_ubwc_10bpp = fp_div(fp_mult(y_bw_no_ubwc_8bpp, FP_INT(256)), FP_INT(192)); y_bw_10bpp_p010 = y_bw_no_ubwc_8bpp * 2; } ddr.dpb_read = dpb_bpp == 8 ? y_bw_no_ubwc_8bpp : y_bw_no_ubwc_10bpp; ddr.dpb_read = fp_div(fp_mult(ddr.dpb_read, Loading Loading @@ -182,8 +172,9 @@ static unsigned long __calculate_decoder(struct vidc_bus_vote_data *d) ddr.opb_write = fp_div(fp_mult(dpb_factor, ddr.opb_write), fp_mult(dpb_opb_scaling_ratio, opb_write_compression_factor)); ddr.line_buffer_read = FP_INT(tnbr_per_lcu * lcu_per_frame * fps / bps(1)); ddr.line_buffer_read = fp_div(FP_INT(tnbr_per_lcu * lcu_per_frame * fps), FP_INT(bps(1))); ddr.line_buffer_write = ddr.line_buffer_read; if (llc_top_line_buf_enabled) { llc.line_buffer_read = ddr.line_buffer_read; Loading Loading @@ -288,14 +279,15 @@ static unsigned long __calculate_encoder(struct vidc_bus_vote_data *d) llc_top_line_buf_enabled = false, llc_vpss_rot_line_buf_enabled = false; fp_t bins_to_bit_factor, dpb_compression_factor, unsigned int bins_to_bit_factor; fp_t dpb_compression_factor, original_compression_factor, original_compression_factor_y, y_bw_no_ubwc_8bpp, y_bw_no_ubwc_10bpp, y_bw_10bpp_p010, input_compression_factor, downscaling_ratio, ref_y_read_bw_factor, ref_cbcr_read_bw_factor, recon_write_bw_factor, mese_read_factor, recon_write_bw_factor, total_ref_read_crcb, qsmmu_bw_overhead_factor; fp_t integer_part, frac_part; Loading @@ -307,7 +299,6 @@ static unsigned long __calculate_encoder(struct vidc_bus_vote_data *d) ref_read_y, ref_read_crcb, ref_write, ref_write_overlap, orig_read, line_buffer_read, line_buffer_write, mese_read, mese_write, total; } ddr = {0}; Loading @@ -331,31 +322,33 @@ static unsigned long __calculate_encoder(struct vidc_bus_vote_data *d) downscaling_ratio = fp_div(FP_INT(d->input_width * d->input_height), FP_INT(d->output_width * d->output_height)); downscaling_ratio = max(downscaling_ratio, FP_ONE); bitrate = d->bitrate > 0 ? d->bitrate / 1000000 : bitrate = d->bitrate > 0 ? DIV_ROUND_UP(d->bitrate, 1000000) : __lut(width, height, fps)->bitrate; lcu_size = d->lcu_size; lcu_per_frame = DIV_ROUND_UP(width, lcu_size) * DIV_ROUND_UP(height, lcu_size); tnbr_per_lcu = 16; y_bw_no_ubwc_8bpp = fp_div(fp_mult( FP_INT((int)(width * height)), FP_INT(fps)), dpb_bpp = __bpp(d->color_formats[0]); y_bw_no_ubwc_8bpp = fp_div(FP_INT(width * height * fps), FP_INT(1000 * 1000)); if (dpb_bpp != 8) { y_bw_no_ubwc_10bpp = fp_div(fp_mult(y_bw_no_ubwc_8bpp, FP_INT(256)), FP_INT(192)); y_bw_10bpp_p010 = y_bw_no_ubwc_8bpp * 2; } b_frames_enabled = d->b_frames_enabled; original_color_format = d->num_formats >= 1 ? d->color_formats[0] : HAL_UNUSED_COLOR; dpb_bpp = d->num_formats >= 1 ? __bpp(d->color_formats[0]) : INT_MAX; original_compression_enabled = __ubwc(original_color_format); work_mode_1 = d->work_mode == HFI_WORKMODE_1; low_power = d->power_mode == VIDC_POWER_LOW; bins_to_bit_factor = FP_INT(4); bins_to_bit_factor = 4; if (d->use_sys_cache) { llc_ref_chroma_cache_enabled = true; Loading @@ -363,25 +356,12 @@ static unsigned long __calculate_encoder(struct vidc_bus_vote_data *d) llc_vpss_rot_line_buf_enabled = true; } /* * Convert Q16 number into Integer and Fractional part upto 2 places. * Ex : 105752 / 65536 = 1.61; 1.61 in Q16 = 105752; * Integer part = 105752 / 65536 = 1; * Reminder = 105752 - 1 * 65536 = 40216; * Fractional part = 40216 * 100 / 65536 = 61; * Now converto to FP(1, 61, 100) for below code. */ integer_part = d->compression_ratio >> 16; frac_part = ((d->compression_ratio - (integer_part * 65536)) * 100) >> 16; integer_part = Q16_INT(d->compression_ratio); frac_part = Q16_FRAC(d->compression_ratio); dpb_compression_factor = FP(integer_part, frac_part, 100); integer_part = d->input_cr >> 16; frac_part = ((d->input_cr - (integer_part * 65536)) * 100) >> 16; integer_part = Q16_INT(d->input_cr); frac_part = Q16_FRAC(d->input_cr); input_compression_factor = FP(integer_part, frac_part, 100); original_compression_factor = original_compression_factor_y = Loading @@ -400,13 +380,7 @@ static unsigned long __calculate_encoder(struct vidc_bus_vote_data *d) input_compression_factor; } mese_read_factor = fp_div(FP_INT((width * height * fps)/4), original_compression_factor_y); mese_read_factor = fp_div(fp_mult(mese_read_factor, FP(2, 53, 100)), FP_INT(1000 * 1000)); ddr.vsp_read = fp_div(fp_mult(FP_INT(bitrate), bins_to_bit_factor), FP_INT(8)); ddr.vsp_read = fp_div(FP_INT(bitrate * bins_to_bit_factor), FP_INT(8)); ddr.vsp_write = ddr.vsp_read + fp_div(FP_INT(bitrate), FP_INT(8)); collocated_bytes_per_lcu = lcu_size == 16 ? 16 : Loading @@ -417,22 +391,21 @@ static unsigned long __calculate_encoder(struct vidc_bus_vote_data *d) ddr.collocated_write = ddr.collocated_read; ddr.ref_read_y = ddr.ref_read_crcb = dpb_bpp == 8 ? ddr.ref_read_y = dpb_bpp == 8 ? y_bw_no_ubwc_8bpp : y_bw_no_ubwc_10bpp; if (b_frames_enabled) ddr.ref_read_y = ddr.ref_read_y * 2; ddr.ref_read_y = fp_div(ddr.ref_read_y, dpb_compression_factor); ddr.ref_read_crcb = ddr.ref_read_y; if (width != vertical_tile_width) { ddr.ref_read_y = fp_mult(ddr.ref_read_y, ref_y_read_bw_factor); } ddr.ref_read_y = fp_div(ddr.ref_read_y, dpb_compression_factor); if (b_frames_enabled) ddr.ref_read_y = fp_mult(ddr.ref_read_y, FP_INT(2)); ddr.ref_read_crcb = fp_mult(ddr.ref_read_crcb, FP(0, 50, 100)); ddr.ref_read_crcb = fp_div(ddr.ref_read_crcb, dpb_compression_factor); if (b_frames_enabled) ddr.ref_read_crcb = fp_mult(ddr.ref_read_crcb, FP_INT(2)); if (llc_ref_chroma_cache_enabled) { total_ref_read_crcb = ddr.ref_read_crcb; Loading @@ -457,8 +430,9 @@ static unsigned long __calculate_encoder(struct vidc_bus_vote_data *d) if (rotation == 90 || rotation == 270) ddr.orig_read *= lcu_size == 32 ? (dpb_bpp == 8 ? 1 : 3) : 2; ddr.line_buffer_read = FP_INT(tnbr_per_lcu * lcu_per_frame * fps / bps(1)); ddr.line_buffer_read = fp_div(FP_INT(tnbr_per_lcu * lcu_per_frame * fps), FP_INT(bps(1))); ddr.line_buffer_write = ddr.line_buffer_read; if (llc_top_line_buf_enabled) { Loading @@ -466,24 +440,12 @@ static unsigned long __calculate_encoder(struct vidc_bus_vote_data *d) ddr.line_buffer_read = ddr.line_buffer_write = FP_ZERO; } ddr.mese_read = dpb_bpp == 8 ? y_bw_no_ubwc_8bpp : y_bw_no_ubwc_10bpp; ddr.mese_read = fp_div(fp_mult(ddr.mese_read, FP(1, 37, 100)), original_compression_factor_y) + mese_read_factor; ddr.mese_write = FP_INT((width * height)/512) + fp_div(FP_INT((width * height)/4), original_compression_factor_y) + FP_INT((width * height)/128); ddr.mese_write = fp_div(fp_mult(ddr.mese_write, FP_INT(fps)), FP_INT(1000 * 1000)); ddr.total = ddr.vsp_read + ddr.vsp_write + ddr.collocated_read + ddr.collocated_write + ddr.ref_read_y + ddr.ref_read_crcb + ddr.ref_write + ddr.ref_write_overlap + ddr.orig_read + ddr.line_buffer_read + ddr.line_buffer_write + ddr.mese_read + ddr.mese_write; ddr.line_buffer_read + ddr.line_buffer_write; qsmmu_bw_overhead_factor = FP(1, 3, 100); ddr.total = fp_mult(ddr.total, qsmmu_bw_overhead_factor); Loading Loading @@ -519,13 +481,11 @@ static unsigned long __calculate_encoder(struct vidc_bus_vote_data *d) {"DERIVED PARAMETERS", "", DUMP_HEADER_MAGIC}, {"lcu size", "%d", lcu_size}, {"bitrate (Mbit/sec)", "%lu", bitrate}, {"bins to bit factor", DUMP_FP_FMT, bins_to_bit_factor}, {"bins to bit factor", "%u", bins_to_bit_factor}, {"original compression factor", DUMP_FP_FMT, original_compression_factor}, {"original compression factor y", DUMP_FP_FMT, original_compression_factor_y}, {"mese read factor", DUMP_FP_FMT, mese_read_factor}, {"qsmmu_bw_overhead_factor", DUMP_FP_FMT, qsmmu_bw_overhead_factor}, {"bw for NV12 8bpc)", DUMP_FP_FMT, y_bw_no_ubwc_8bpp}, Loading @@ -543,8 +503,6 @@ static unsigned long __calculate_encoder(struct vidc_bus_vote_data *d) {"original read", DUMP_FP_FMT, ddr.orig_read}, {"line buffer read", DUMP_FP_FMT, ddr.line_buffer_read}, {"line buffer write", DUMP_FP_FMT, ddr.line_buffer_write}, {"mese read", DUMP_FP_FMT, ddr.mese_read}, {"mese write", DUMP_FP_FMT, ddr.mese_write}, {"INTERMEDIATE LLC B/W", "", DUMP_HEADER_MAGIC}, {"llc ref read crcb", DUMP_FP_FMT, llc.ref_read_crcb}, {"llc line buffer", DUMP_FP_FMT, llc.line_buffer}, Loading msm/vidc/msm_vidc_internal.h +11 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,17 @@ (((c) && (c)->core_ops && (c)->core_ops->op) ? \ ((c)->core_ops->op(__VA_ARGS__)) : 0) /* * Convert Q16 number into Integer and Fractional part upto 2 places. * Ex : 105752 / 65536 = 1.61; 1.61 in Q16 = 105752; * Integer part = 105752 / 65536 = 1; * Reminder = 105752 * 0xFFFF = 40216; Last 16 bits. * Fractional part = 40216 * 100 / 65536 = 61; * Now convert to FP(1, 61, 100). */ #define Q16_INT(q) ((q) >> 16) #define Q16_FRAC(q) ((((q) & 0xFFFF) * 100) >> 16) struct msm_vidc_inst; enum vidc_ports { Loading Loading
msm/vidc/msm_vidc_bus_iris2.c +47 −89 Original line number Diff line number Diff line Loading @@ -71,7 +71,7 @@ static unsigned long __calculate_decoder(struct vidc_bus_vote_data *d) lcu_size = d->lcu_size; dpb_bpp = d->num_formats >= 1 ? __bpp(d->color_formats[0]) : INT_MAX; dpb_bpp = __bpp(d->color_formats[0]); unified_dpb_opb = d->num_formats == 1; Loading @@ -81,25 +81,12 @@ static unsigned long __calculate_decoder(struct vidc_bus_vote_data *d) opb_compression_enabled = d->num_formats >= 2 && __ubwc(d->color_formats[1]); /* * convert q16 number into integer and fractional part upto 2 places. * ex : 105752 / 65536 = 1.61; 1.61 in q16 = 105752; * integer part = 105752 / 65536 = 1; * reminder = 105752 - 1 * 65536 = 40216; * fractional part = 40216 * 100 / 65536 = 61; * now converto to fp(1, 61, 100) for below code. */ integer_part = d->compression_ratio >> 16; frac_part = ((d->compression_ratio - (integer_part << 16)) * 100) >> 16; integer_part = Q16_INT(d->compression_ratio); frac_part = Q16_FRAC(d->compression_ratio); dpb_read_compression_factor = FP(integer_part, frac_part, 100); integer_part = d->complexity_factor >> 16; frac_part = ((d->complexity_factor - (integer_part << 16)) * 100) >> 16; integer_part = Q16_INT(d->complexity_factor); frac_part = Q16_FRAC(d->complexity_factor); motion_vector_complexity = FP(integer_part, frac_part, 100); dpb_write_compression_factor = dpb_read_compression_factor; Loading @@ -122,7 +109,7 @@ static unsigned long __calculate_decoder(struct vidc_bus_vote_data *d) lcu_per_frame = DIV_ROUND_UP(width, lcu_size) * DIV_ROUND_UP(height, lcu_size); bitrate = (d->bitrate + 1000000 - 1) / 1000000; bitrate = DIV_ROUND_UP(d->bitrate, 1000000); bins_to_bit_factor = FP_INT(4); Loading @@ -148,12 +135,15 @@ static unsigned long __calculate_decoder(struct vidc_bus_vote_data *d) collocated_bytes_per_lcu * fps), FP_INT(bps(1))); ddr.collocated_write = ddr.collocated_read; y_bw_no_ubwc_8bpp = fp_div(fp_mult( FP_INT((int)(width * height)), FP_INT((int)fps)), y_bw_no_ubwc_8bpp = fp_div(FP_INT(width * height * fps), FP_INT(1000 * 1000)); y_bw_no_ubwc_10bpp = fp_div(fp_mult(y_bw_no_ubwc_8bpp, FP_INT(256)), if (dpb_bpp != 8) { y_bw_no_ubwc_10bpp = fp_div(fp_mult(y_bw_no_ubwc_8bpp, FP_INT(256)), FP_INT(192)); y_bw_10bpp_p010 = y_bw_no_ubwc_8bpp * 2; } ddr.dpb_read = dpb_bpp == 8 ? y_bw_no_ubwc_8bpp : y_bw_no_ubwc_10bpp; ddr.dpb_read = fp_div(fp_mult(ddr.dpb_read, Loading Loading @@ -182,8 +172,9 @@ static unsigned long __calculate_decoder(struct vidc_bus_vote_data *d) ddr.opb_write = fp_div(fp_mult(dpb_factor, ddr.opb_write), fp_mult(dpb_opb_scaling_ratio, opb_write_compression_factor)); ddr.line_buffer_read = FP_INT(tnbr_per_lcu * lcu_per_frame * fps / bps(1)); ddr.line_buffer_read = fp_div(FP_INT(tnbr_per_lcu * lcu_per_frame * fps), FP_INT(bps(1))); ddr.line_buffer_write = ddr.line_buffer_read; if (llc_top_line_buf_enabled) { llc.line_buffer_read = ddr.line_buffer_read; Loading Loading @@ -288,14 +279,15 @@ static unsigned long __calculate_encoder(struct vidc_bus_vote_data *d) llc_top_line_buf_enabled = false, llc_vpss_rot_line_buf_enabled = false; fp_t bins_to_bit_factor, dpb_compression_factor, unsigned int bins_to_bit_factor; fp_t dpb_compression_factor, original_compression_factor, original_compression_factor_y, y_bw_no_ubwc_8bpp, y_bw_no_ubwc_10bpp, y_bw_10bpp_p010, input_compression_factor, downscaling_ratio, ref_y_read_bw_factor, ref_cbcr_read_bw_factor, recon_write_bw_factor, mese_read_factor, recon_write_bw_factor, total_ref_read_crcb, qsmmu_bw_overhead_factor; fp_t integer_part, frac_part; Loading @@ -307,7 +299,6 @@ static unsigned long __calculate_encoder(struct vidc_bus_vote_data *d) ref_read_y, ref_read_crcb, ref_write, ref_write_overlap, orig_read, line_buffer_read, line_buffer_write, mese_read, mese_write, total; } ddr = {0}; Loading @@ -331,31 +322,33 @@ static unsigned long __calculate_encoder(struct vidc_bus_vote_data *d) downscaling_ratio = fp_div(FP_INT(d->input_width * d->input_height), FP_INT(d->output_width * d->output_height)); downscaling_ratio = max(downscaling_ratio, FP_ONE); bitrate = d->bitrate > 0 ? d->bitrate / 1000000 : bitrate = d->bitrate > 0 ? DIV_ROUND_UP(d->bitrate, 1000000) : __lut(width, height, fps)->bitrate; lcu_size = d->lcu_size; lcu_per_frame = DIV_ROUND_UP(width, lcu_size) * DIV_ROUND_UP(height, lcu_size); tnbr_per_lcu = 16; y_bw_no_ubwc_8bpp = fp_div(fp_mult( FP_INT((int)(width * height)), FP_INT(fps)), dpb_bpp = __bpp(d->color_formats[0]); y_bw_no_ubwc_8bpp = fp_div(FP_INT(width * height * fps), FP_INT(1000 * 1000)); if (dpb_bpp != 8) { y_bw_no_ubwc_10bpp = fp_div(fp_mult(y_bw_no_ubwc_8bpp, FP_INT(256)), FP_INT(192)); y_bw_10bpp_p010 = y_bw_no_ubwc_8bpp * 2; } b_frames_enabled = d->b_frames_enabled; original_color_format = d->num_formats >= 1 ? d->color_formats[0] : HAL_UNUSED_COLOR; dpb_bpp = d->num_formats >= 1 ? __bpp(d->color_formats[0]) : INT_MAX; original_compression_enabled = __ubwc(original_color_format); work_mode_1 = d->work_mode == HFI_WORKMODE_1; low_power = d->power_mode == VIDC_POWER_LOW; bins_to_bit_factor = FP_INT(4); bins_to_bit_factor = 4; if (d->use_sys_cache) { llc_ref_chroma_cache_enabled = true; Loading @@ -363,25 +356,12 @@ static unsigned long __calculate_encoder(struct vidc_bus_vote_data *d) llc_vpss_rot_line_buf_enabled = true; } /* * Convert Q16 number into Integer and Fractional part upto 2 places. * Ex : 105752 / 65536 = 1.61; 1.61 in Q16 = 105752; * Integer part = 105752 / 65536 = 1; * Reminder = 105752 - 1 * 65536 = 40216; * Fractional part = 40216 * 100 / 65536 = 61; * Now converto to FP(1, 61, 100) for below code. */ integer_part = d->compression_ratio >> 16; frac_part = ((d->compression_ratio - (integer_part * 65536)) * 100) >> 16; integer_part = Q16_INT(d->compression_ratio); frac_part = Q16_FRAC(d->compression_ratio); dpb_compression_factor = FP(integer_part, frac_part, 100); integer_part = d->input_cr >> 16; frac_part = ((d->input_cr - (integer_part * 65536)) * 100) >> 16; integer_part = Q16_INT(d->input_cr); frac_part = Q16_FRAC(d->input_cr); input_compression_factor = FP(integer_part, frac_part, 100); original_compression_factor = original_compression_factor_y = Loading @@ -400,13 +380,7 @@ static unsigned long __calculate_encoder(struct vidc_bus_vote_data *d) input_compression_factor; } mese_read_factor = fp_div(FP_INT((width * height * fps)/4), original_compression_factor_y); mese_read_factor = fp_div(fp_mult(mese_read_factor, FP(2, 53, 100)), FP_INT(1000 * 1000)); ddr.vsp_read = fp_div(fp_mult(FP_INT(bitrate), bins_to_bit_factor), FP_INT(8)); ddr.vsp_read = fp_div(FP_INT(bitrate * bins_to_bit_factor), FP_INT(8)); ddr.vsp_write = ddr.vsp_read + fp_div(FP_INT(bitrate), FP_INT(8)); collocated_bytes_per_lcu = lcu_size == 16 ? 16 : Loading @@ -417,22 +391,21 @@ static unsigned long __calculate_encoder(struct vidc_bus_vote_data *d) ddr.collocated_write = ddr.collocated_read; ddr.ref_read_y = ddr.ref_read_crcb = dpb_bpp == 8 ? ddr.ref_read_y = dpb_bpp == 8 ? y_bw_no_ubwc_8bpp : y_bw_no_ubwc_10bpp; if (b_frames_enabled) ddr.ref_read_y = ddr.ref_read_y * 2; ddr.ref_read_y = fp_div(ddr.ref_read_y, dpb_compression_factor); ddr.ref_read_crcb = ddr.ref_read_y; if (width != vertical_tile_width) { ddr.ref_read_y = fp_mult(ddr.ref_read_y, ref_y_read_bw_factor); } ddr.ref_read_y = fp_div(ddr.ref_read_y, dpb_compression_factor); if (b_frames_enabled) ddr.ref_read_y = fp_mult(ddr.ref_read_y, FP_INT(2)); ddr.ref_read_crcb = fp_mult(ddr.ref_read_crcb, FP(0, 50, 100)); ddr.ref_read_crcb = fp_div(ddr.ref_read_crcb, dpb_compression_factor); if (b_frames_enabled) ddr.ref_read_crcb = fp_mult(ddr.ref_read_crcb, FP_INT(2)); if (llc_ref_chroma_cache_enabled) { total_ref_read_crcb = ddr.ref_read_crcb; Loading @@ -457,8 +430,9 @@ static unsigned long __calculate_encoder(struct vidc_bus_vote_data *d) if (rotation == 90 || rotation == 270) ddr.orig_read *= lcu_size == 32 ? (dpb_bpp == 8 ? 1 : 3) : 2; ddr.line_buffer_read = FP_INT(tnbr_per_lcu * lcu_per_frame * fps / bps(1)); ddr.line_buffer_read = fp_div(FP_INT(tnbr_per_lcu * lcu_per_frame * fps), FP_INT(bps(1))); ddr.line_buffer_write = ddr.line_buffer_read; if (llc_top_line_buf_enabled) { Loading @@ -466,24 +440,12 @@ static unsigned long __calculate_encoder(struct vidc_bus_vote_data *d) ddr.line_buffer_read = ddr.line_buffer_write = FP_ZERO; } ddr.mese_read = dpb_bpp == 8 ? y_bw_no_ubwc_8bpp : y_bw_no_ubwc_10bpp; ddr.mese_read = fp_div(fp_mult(ddr.mese_read, FP(1, 37, 100)), original_compression_factor_y) + mese_read_factor; ddr.mese_write = FP_INT((width * height)/512) + fp_div(FP_INT((width * height)/4), original_compression_factor_y) + FP_INT((width * height)/128); ddr.mese_write = fp_div(fp_mult(ddr.mese_write, FP_INT(fps)), FP_INT(1000 * 1000)); ddr.total = ddr.vsp_read + ddr.vsp_write + ddr.collocated_read + ddr.collocated_write + ddr.ref_read_y + ddr.ref_read_crcb + ddr.ref_write + ddr.ref_write_overlap + ddr.orig_read + ddr.line_buffer_read + ddr.line_buffer_write + ddr.mese_read + ddr.mese_write; ddr.line_buffer_read + ddr.line_buffer_write; qsmmu_bw_overhead_factor = FP(1, 3, 100); ddr.total = fp_mult(ddr.total, qsmmu_bw_overhead_factor); Loading Loading @@ -519,13 +481,11 @@ static unsigned long __calculate_encoder(struct vidc_bus_vote_data *d) {"DERIVED PARAMETERS", "", DUMP_HEADER_MAGIC}, {"lcu size", "%d", lcu_size}, {"bitrate (Mbit/sec)", "%lu", bitrate}, {"bins to bit factor", DUMP_FP_FMT, bins_to_bit_factor}, {"bins to bit factor", "%u", bins_to_bit_factor}, {"original compression factor", DUMP_FP_FMT, original_compression_factor}, {"original compression factor y", DUMP_FP_FMT, original_compression_factor_y}, {"mese read factor", DUMP_FP_FMT, mese_read_factor}, {"qsmmu_bw_overhead_factor", DUMP_FP_FMT, qsmmu_bw_overhead_factor}, {"bw for NV12 8bpc)", DUMP_FP_FMT, y_bw_no_ubwc_8bpp}, Loading @@ -543,8 +503,6 @@ static unsigned long __calculate_encoder(struct vidc_bus_vote_data *d) {"original read", DUMP_FP_FMT, ddr.orig_read}, {"line buffer read", DUMP_FP_FMT, ddr.line_buffer_read}, {"line buffer write", DUMP_FP_FMT, ddr.line_buffer_write}, {"mese read", DUMP_FP_FMT, ddr.mese_read}, {"mese write", DUMP_FP_FMT, ddr.mese_write}, {"INTERMEDIATE LLC B/W", "", DUMP_HEADER_MAGIC}, {"llc ref read crcb", DUMP_FP_FMT, llc.ref_read_crcb}, {"llc line buffer", DUMP_FP_FMT, llc.line_buffer}, Loading
msm/vidc/msm_vidc_internal.h +11 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,17 @@ (((c) && (c)->core_ops && (c)->core_ops->op) ? \ ((c)->core_ops->op(__VA_ARGS__)) : 0) /* * Convert Q16 number into Integer and Fractional part upto 2 places. * Ex : 105752 / 65536 = 1.61; 1.61 in Q16 = 105752; * Integer part = 105752 / 65536 = 1; * Reminder = 105752 * 0xFFFF = 40216; Last 16 bits. * Fractional part = 40216 * 100 / 65536 = 61; * Now convert to FP(1, 61, 100). */ #define Q16_INT(q) ((q) >> 16) #define Q16_FRAC(q) ((((q) & 0xFFFF) * 100) >> 16) struct msm_vidc_inst; enum vidc_ports { Loading