| .. | .. |
|---|
| 63 | 63 | if (v->interlace_output[k] == 1.0) { |
|---|
| 64 | 64 | v->v_ratio[k] = 2.0 * v->v_ratio[k]; |
|---|
| 65 | 65 | } |
|---|
| 66 | | - if ((v->underscan_output[k] == 1.0)) { |
|---|
| 66 | + if (v->underscan_output[k] == 1.0) { |
|---|
| 67 | 67 | v->h_ratio[k] = v->h_ratio[k] * v->under_scan_factor; |
|---|
| 68 | 68 | v->v_ratio[k] = v->v_ratio[k] * v->under_scan_factor; |
|---|
| 69 | 69 | } |
|---|
| .. | .. |
|---|
| 797 | 797 | else { |
|---|
| 798 | 798 | v->maximum_vstartup = v->v_sync_plus_back_porch[k] - 1.0; |
|---|
| 799 | 799 | } |
|---|
| 800 | | - v->line_times_for_prefetch[k] = v->maximum_vstartup - v->urgent_latency / (v->htotal[k] / v->pixel_clock[k]) - (v->time_calc + v->time_setup) / (v->htotal[k] / v->pixel_clock[k]) - (v->dst_y_after_scaler + v->dst_x_after_scaler / v->htotal[k]); |
|---|
| 801 | | - v->line_times_for_prefetch[k] =dcn_bw_floor2(4.0 * (v->line_times_for_prefetch[k] + 0.125), 1.0) / 4; |
|---|
| 802 | | - v->prefetch_bw[k] = (v->meta_pte_bytes_per_frame[k] + 2.0 * v->meta_row_bytes[k] + 2.0 * v->dpte_bytes_per_row[k] + v->prefetch_lines_y[k] * v->swath_width_yper_state[i][j][k] *dcn_bw_ceil2(v->byte_per_pixel_in_dety[k], 1.0) + v->prefetch_lines_c[k] * v->swath_width_yper_state[i][j][k] / 2.0 *dcn_bw_ceil2(v->byte_per_pixel_in_detc[k], 2.0)) / (v->line_times_for_prefetch[k] * v->htotal[k] / v->pixel_clock[k]); |
|---|
| 800 | + |
|---|
| 801 | + do { |
|---|
| 802 | + v->line_times_for_prefetch[k] = v->maximum_vstartup - v->urgent_latency / (v->htotal[k] / v->pixel_clock[k]) - (v->time_calc + v->time_setup) / (v->htotal[k] / v->pixel_clock[k]) - (v->dst_y_after_scaler + v->dst_x_after_scaler / v->htotal[k]); |
|---|
| 803 | + v->line_times_for_prefetch[k] =dcn_bw_floor2(4.0 * (v->line_times_for_prefetch[k] + 0.125), 1.0) / 4; |
|---|
| 804 | + v->prefetch_bw[k] = (v->meta_pte_bytes_per_frame[k] + 2.0 * v->meta_row_bytes[k] + 2.0 * v->dpte_bytes_per_row[k] + v->prefetch_lines_y[k] * v->swath_width_yper_state[i][j][k] *dcn_bw_ceil2(v->byte_per_pixel_in_dety[k], 1.0) + v->prefetch_lines_c[k] * v->swath_width_yper_state[i][j][k] / 2.0 *dcn_bw_ceil2(v->byte_per_pixel_in_detc[k], 2.0)) / (v->line_times_for_prefetch[k] * v->htotal[k] / v->pixel_clock[k]); |
|---|
| 805 | + |
|---|
| 806 | + if (v->pte_enable == dcn_bw_yes && v->dcc_enable[k] == dcn_bw_yes) { |
|---|
| 807 | + v->time_for_meta_pte_without_immediate_flip = dcn_bw_max3( |
|---|
| 808 | + v->meta_pte_bytes_frame[k] / v->prefetch_bw[k], |
|---|
| 809 | + v->extra_latency, |
|---|
| 810 | + v->htotal[k] / v->pixel_clock[k] / 4.0); |
|---|
| 811 | + } else { |
|---|
| 812 | + v->time_for_meta_pte_without_immediate_flip = v->htotal[k] / v->pixel_clock[k] / 4.0; |
|---|
| 813 | + } |
|---|
| 814 | + |
|---|
| 815 | + if (v->pte_enable == dcn_bw_yes || v->dcc_enable[k] == dcn_bw_yes) { |
|---|
| 816 | + v->time_for_meta_and_dpte_row_without_immediate_flip = dcn_bw_max3(( |
|---|
| 817 | + v->meta_row_bytes[k] + v->dpte_bytes_per_row[k]) / v->prefetch_bw[k], |
|---|
| 818 | + v->htotal[k] / v->pixel_clock[k] - v->time_for_meta_pte_without_immediate_flip, |
|---|
| 819 | + v->extra_latency); |
|---|
| 820 | + } else { |
|---|
| 821 | + v->time_for_meta_and_dpte_row_without_immediate_flip = dcn_bw_max2( |
|---|
| 822 | + v->htotal[k] / v->pixel_clock[k] - v->time_for_meta_pte_without_immediate_flip, |
|---|
| 823 | + v->extra_latency - v->time_for_meta_pte_with_immediate_flip); |
|---|
| 824 | + } |
|---|
| 825 | + |
|---|
| 826 | + v->lines_for_meta_pte_without_immediate_flip[k] =dcn_bw_floor2(4.0 * (v->time_for_meta_pte_without_immediate_flip / (v->htotal[k] / v->pixel_clock[k]) + 0.125), 1.0) / 4; |
|---|
| 827 | + v->lines_for_meta_and_dpte_row_without_immediate_flip[k] =dcn_bw_floor2(4.0 * (v->time_for_meta_and_dpte_row_without_immediate_flip / (v->htotal[k] / v->pixel_clock[k]) + 0.125), 1.0) / 4; |
|---|
| 828 | + v->maximum_vstartup = v->maximum_vstartup - 1; |
|---|
| 829 | + |
|---|
| 830 | + if (v->lines_for_meta_pte_without_immediate_flip[k] < 32.0 && v->lines_for_meta_and_dpte_row_without_immediate_flip[k] < 16.0) |
|---|
| 831 | + break; |
|---|
| 832 | + |
|---|
| 833 | + } while(1); |
|---|
| 803 | 834 | } |
|---|
| 804 | 835 | v->bw_available_for_immediate_flip = v->return_bw_per_state[i]; |
|---|
| 805 | 836 | for (k = 0; k <= v->number_of_active_planes - 1; k++) { |
|---|
| .. | .. |
|---|
| 814 | 845 | for (k = 0; k <= v->number_of_active_planes - 1; k++) { |
|---|
| 815 | 846 | if (v->pte_enable == dcn_bw_yes && v->dcc_enable[k] == dcn_bw_yes) { |
|---|
| 816 | 847 | v->time_for_meta_pte_with_immediate_flip =dcn_bw_max5(v->meta_pte_bytes_per_frame[k] / v->prefetch_bw[k], v->meta_pte_bytes_per_frame[k] * v->total_immediate_flip_bytes[k] / (v->bw_available_for_immediate_flip * (v->meta_pte_bytes_per_frame[k] + v->meta_row_bytes[k] + v->dpte_bytes_per_row[k])), v->extra_latency, v->urgent_latency, v->htotal[k] / v->pixel_clock[k] / 4.0); |
|---|
| 817 | | - v->time_for_meta_pte_without_immediate_flip =dcn_bw_max3(v->meta_pte_bytes_per_frame[k] / v->prefetch_bw[k], v->extra_latency, v->htotal[k] / v->pixel_clock[k] / 4.0); |
|---|
| 818 | 848 | } |
|---|
| 819 | 849 | else { |
|---|
| 820 | 850 | v->time_for_meta_pte_with_immediate_flip = v->htotal[k] / v->pixel_clock[k] / 4.0; |
|---|
| 821 | | - v->time_for_meta_pte_without_immediate_flip = v->htotal[k] / v->pixel_clock[k] / 4.0; |
|---|
| 822 | 851 | } |
|---|
| 823 | 852 | if (v->pte_enable == dcn_bw_yes || v->dcc_enable[k] == dcn_bw_yes) { |
|---|
| 824 | 853 | v->time_for_meta_and_dpte_row_with_immediate_flip =dcn_bw_max5((v->meta_row_bytes[k] + v->dpte_bytes_per_row[k]) / v->prefetch_bw[k], (v->meta_row_bytes[k] + v->dpte_bytes_per_row[k]) * v->total_immediate_flip_bytes[k] / (v->bw_available_for_immediate_flip * (v->meta_pte_bytes_per_frame[k] + v->meta_row_bytes[k] + v->dpte_bytes_per_row[k])), v->htotal[k] / v->pixel_clock[k] - v->time_for_meta_pte_with_immediate_flip, v->extra_latency, 2.0 * v->urgent_latency); |
|---|
| 825 | | - v->time_for_meta_and_dpte_row_without_immediate_flip =dcn_bw_max3((v->meta_row_bytes[k] + v->dpte_bytes_per_row[k]) / v->prefetch_bw[k], v->htotal[k] / v->pixel_clock[k] - v->time_for_meta_pte_without_immediate_flip, v->extra_latency); |
|---|
| 826 | 854 | } |
|---|
| 827 | 855 | else { |
|---|
| 828 | 856 | v->time_for_meta_and_dpte_row_with_immediate_flip =dcn_bw_max2(v->htotal[k] / v->pixel_clock[k] - v->time_for_meta_pte_with_immediate_flip, v->extra_latency - v->time_for_meta_pte_with_immediate_flip); |
|---|
| 829 | | - v->time_for_meta_and_dpte_row_without_immediate_flip =dcn_bw_max2(v->htotal[k] / v->pixel_clock[k] - v->time_for_meta_pte_without_immediate_flip, v->extra_latency - v->time_for_meta_pte_without_immediate_flip); |
|---|
| 830 | 857 | } |
|---|
| 831 | 858 | v->lines_for_meta_pte_with_immediate_flip[k] =dcn_bw_floor2(4.0 * (v->time_for_meta_pte_with_immediate_flip / (v->htotal[k] / v->pixel_clock[k]) + 0.125), 1.0) / 4; |
|---|
| 832 | | - v->lines_for_meta_pte_without_immediate_flip[k] =dcn_bw_floor2(4.0 * (v->time_for_meta_pte_without_immediate_flip / (v->htotal[k] / v->pixel_clock[k]) + 0.125), 1.0) / 4; |
|---|
| 833 | 859 | v->lines_for_meta_and_dpte_row_with_immediate_flip[k] =dcn_bw_floor2(4.0 * (v->time_for_meta_and_dpte_row_with_immediate_flip / (v->htotal[k] / v->pixel_clock[k]) + 0.125), 1.0) / 4; |
|---|
| 834 | | - v->lines_for_meta_and_dpte_row_without_immediate_flip[k] =dcn_bw_floor2(4.0 * (v->time_for_meta_and_dpte_row_without_immediate_flip / (v->htotal[k] / v->pixel_clock[k]) + 0.125), 1.0) / 4; |
|---|
| 835 | 860 | v->line_times_to_request_prefetch_pixel_data_with_immediate_flip = v->line_times_for_prefetch[k] - v->lines_for_meta_pte_with_immediate_flip[k] - v->lines_for_meta_and_dpte_row_with_immediate_flip[k]; |
|---|
| 836 | 861 | v->line_times_to_request_prefetch_pixel_data_without_immediate_flip = v->line_times_for_prefetch[k] - v->lines_for_meta_pte_without_immediate_flip[k] - v->lines_for_meta_and_dpte_row_without_immediate_flip[k]; |
|---|
| 837 | 862 | if (v->line_times_to_request_prefetch_pixel_data_with_immediate_flip > 0.0) { |
|---|
| .. | .. |
|---|
| 1625 | 1650 | else { |
|---|
| 1626 | 1651 | v->dsty_after_scaler = 0.0; |
|---|
| 1627 | 1652 | } |
|---|
| 1628 | | - v->v_update_offset_pix =dcn_bw_ceil2(v->htotal[k] / 4.0, 1.0); |
|---|
| 1653 | + v->v_update_offset_pix[k] = dcn_bw_ceil2(v->htotal[k] / 4.0, 1.0); |
|---|
| 1629 | 1654 | v->total_repeater_delay_time = v->max_inter_dcn_tile_repeaters * (2.0 / v->dppclk + 3.0 / v->dispclk); |
|---|
| 1630 | | - v->v_update_width_pix = (14.0 / v->dcf_clk_deep_sleep + 12.0 / v->dppclk + v->total_repeater_delay_time) * v->pixel_clock[k]; |
|---|
| 1631 | | - v->v_ready_offset_pix =dcn_bw_max2(150.0 / v->dppclk, v->total_repeater_delay_time + 20.0 / v->dcf_clk_deep_sleep + 10.0 / v->dppclk) * v->pixel_clock[k]; |
|---|
| 1632 | | - v->t_setup = (v->v_update_offset_pix + v->v_update_width_pix + v->v_ready_offset_pix) / v->pixel_clock[k]; |
|---|
| 1655 | + v->v_update_width_pix[k] = (14.0 / v->dcf_clk_deep_sleep + 12.0 / v->dppclk + v->total_repeater_delay_time) * v->pixel_clock[k]; |
|---|
| 1656 | + v->v_ready_offset_pix[k] = dcn_bw_max2(150.0 / v->dppclk, v->total_repeater_delay_time + 20.0 / v->dcf_clk_deep_sleep + 10.0 / v->dppclk) * v->pixel_clock[k]; |
|---|
| 1657 | + v->t_setup = (v->v_update_offset_pix[k] + v->v_update_width_pix[k] + v->v_ready_offset_pix[k]) / v->pixel_clock[k]; |
|---|
| 1633 | 1658 | v->v_startup[k] =dcn_bw_min2(v->v_startup_lines, v->max_vstartup_lines[k]); |
|---|
| 1634 | 1659 | if (v->prefetch_mode == 0.0) { |
|---|
| 1635 | 1660 | v->t_wait =dcn_bw_max3(v->dram_clock_change_latency + v->urgent_latency, v->sr_enter_plus_exit_time, v->urgent_latency); |
|---|