Lines Matching full:dsc

36 static int dsi_populate_dsc_params(struct drm_dsc_config *dsc);
163 struct drm_dsc_config *dsc; member
844 struct drm_dsc_config *dsc = msm_host->dsc; in dsi_update_dsc_timing() local
851 /* first calculate dsc parameters and then program in dsi_update_dsc_timing()
855 slice_per_intf = DIV_ROUND_UP(intf_width, dsc->slice_width); in dsi_update_dsc_timing()
861 if (slice_per_intf > dsc->slice_count) in dsi_update_dsc_timing()
862 dsc->slice_count = 1; in dsi_update_dsc_timing()
864 slice_per_intf = DIV_ROUND_UP(hdisplay, dsc->slice_width); in dsi_update_dsc_timing()
865 bytes_in_slice = DIV_ROUND_UP(dsc->slice_width * dsc->bits_per_pixel, 8); in dsi_update_dsc_timing()
867 dsc->slice_chunk_size = bytes_in_slice; in dsi_update_dsc_timing()
872 pkt_per_line = slice_per_intf / dsc->slice_count; in dsi_update_dsc_timing()
936 if (msm_host->dsc) { in dsi_timing_setup()
937 struct drm_dsc_config *dsc = msm_host->dsc; in dsi_timing_setup() local
939 /* update dsc params with timing params */ in dsi_timing_setup()
940 if (!dsc || !mode->hdisplay || !mode->vdisplay) { in dsi_timing_setup()
946 dsc->pic_width = mode->hdisplay; in dsi_timing_setup()
947 dsc->pic_height = mode->vdisplay; in dsi_timing_setup()
948 DBG("Mode %dx%d\n", dsc->pic_width, dsc->pic_height); in dsi_timing_setup()
950 /* we do the calculations for dsc parameters here so that in dsi_timing_setup()
953 dsi_populate_dsc_params(dsc); in dsi_timing_setup()
965 if (msm_host->dsc) in dsi_timing_setup()
986 if (msm_host->dsc) in dsi_timing_setup()
990 if (!msm_host->dsc) in dsi_timing_setup()
1606 if (dsi->dsc) in dsi_host_attach()
1607 msm_host->dsc = dsi->dsc; in dsi_host_attach()
1757 static int dsi_populate_dsc_params(struct drm_dsc_config *dsc) in dsi_populate_dsc_params() argument
1770 dsc->rc_model_size = 8192; in dsi_populate_dsc_params()
1771 dsc->first_line_bpg_offset = 12; in dsi_populate_dsc_params()
1772 dsc->rc_edge_factor = 6; in dsi_populate_dsc_params()
1773 dsc->rc_tgt_offset_high = 3; in dsi_populate_dsc_params()
1774 dsc->rc_tgt_offset_low = 3; in dsi_populate_dsc_params()
1775 dsc->simple_422 = 0; in dsi_populate_dsc_params()
1776 dsc->convert_rgb = 1; in dsi_populate_dsc_params()
1777 dsc->vbr_enable = 0; in dsi_populate_dsc_params()
1781 dsc->rc_buf_thresh[i] = dsi_dsc_rc_buf_thresh[i]; in dsi_populate_dsc_params()
1784 dsc->rc_range_params[i].range_min_qp = min_qp[i]; in dsi_populate_dsc_params()
1785 dsc->rc_range_params[i].range_max_qp = max_qp[i]; in dsi_populate_dsc_params()
1786 dsc->rc_range_params[i].range_bpg_offset = bpg_offset[i]; in dsi_populate_dsc_params()
1789 dsc->initial_offset = 6144; /* Not bpp 12 */ in dsi_populate_dsc_params()
1790 if (dsc->bits_per_pixel != 8) in dsi_populate_dsc_params()
1791 dsc->initial_offset = 2048; /* bpp = 12 */ in dsi_populate_dsc_params()
1794 if (dsc->bits_per_component == 12) in dsi_populate_dsc_params()
1797 dsc->initial_xmit_delay = 512; in dsi_populate_dsc_params()
1798 dsc->initial_scale_value = 32; in dsi_populate_dsc_params()
1799 dsc->first_line_bpg_offset = 12; in dsi_populate_dsc_params()
1800 dsc->line_buf_depth = dsc->bits_per_component + 1; in dsi_populate_dsc_params()
1803 dsc->flatness_min_qp = 3; in dsi_populate_dsc_params()
1804 dsc->flatness_max_qp = 12; in dsi_populate_dsc_params()
1805 dsc->rc_quant_incr_limit0 = 11; in dsi_populate_dsc_params()
1806 dsc->rc_quant_incr_limit1 = 11; in dsi_populate_dsc_params()
1807 dsc->mux_word_size = DSC_MUX_WORD_SIZE_8_10_BPC; in dsi_populate_dsc_params()
1812 groups_per_line = DIV_ROUND_UP(dsc->slice_width, 3); in dsi_populate_dsc_params()
1813 dsc->slice_chunk_size = dsc->slice_width * dsc->bits_per_pixel / 8; in dsi_populate_dsc_params()
1814 if ((dsc->slice_width * dsc->bits_per_pixel) % 8) in dsi_populate_dsc_params()
1815 dsc->slice_chunk_size++; in dsi_populate_dsc_params()
1818 min_rate_buffer_size = dsc->rc_model_size - dsc->initial_offset + in dsi_populate_dsc_params()
1819 dsc->initial_xmit_delay * dsc->bits_per_pixel + in dsi_populate_dsc_params()
1820 groups_per_line * dsc->first_line_bpg_offset; in dsi_populate_dsc_params()
1822 hrd_delay = DIV_ROUND_UP(min_rate_buffer_size, dsc->bits_per_pixel); in dsi_populate_dsc_params()
1824 dsc->initial_dec_delay = hrd_delay - dsc->initial_xmit_delay; in dsi_populate_dsc_params()
1826 dsc->initial_scale_value = 8 * dsc->rc_model_size / in dsi_populate_dsc_params()
1827 (dsc->rc_model_size - dsc->initial_offset); in dsi_populate_dsc_params()
1829 slice_bits = 8 * dsc->slice_chunk_size * dsc->slice_height; in dsi_populate_dsc_params()
1831 groups_total = groups_per_line * dsc->slice_height; in dsi_populate_dsc_params()
1833 data = dsc->first_line_bpg_offset * 2048; in dsi_populate_dsc_params()
1835 dsc->nfl_bpg_offset = DIV_ROUND_UP(data, (dsc->slice_height - 1)); in dsi_populate_dsc_params()
1837 pre_num_extra_mux_bits = 3 * (mux_words_size + (4 * dsc->bits_per_component + 4) - 2); in dsi_populate_dsc_params()
1842 data = 2048 * (dsc->rc_model_size - dsc->initial_offset + num_extra_mux_bits); in dsi_populate_dsc_params()
1843 dsc->slice_bpg_offset = DIV_ROUND_UP(data, groups_total); in dsi_populate_dsc_params()
1846 data = dsc->bits_per_pixel * 16; in dsi_populate_dsc_params()
1852 data = (dsc->initial_xmit_delay * target_bpp_x16) / 16; in dsi_populate_dsc_params()
1853 final_value = dsc->rc_model_size - data + num_extra_mux_bits; in dsi_populate_dsc_params()
1854 dsc->final_offset = final_value; in dsi_populate_dsc_params()
1856 final_scale = 8 * dsc->rc_model_size / (dsc->rc_model_size - final_value); in dsi_populate_dsc_params()
1858 data = (final_scale - 9) * (dsc->nfl_bpg_offset + dsc->slice_bpg_offset); in dsi_populate_dsc_params()
1859 dsc->scale_increment_interval = (2048 * dsc->final_offset) / data; in dsi_populate_dsc_params()
1861 dsc->scale_decrement_interval = groups_per_line / (dsc->initial_scale_value - 8); in dsi_populate_dsc_params()
2553 struct drm_dsc_config *dsc = msm_host->dsc; in msm_dsi_host_check_dsc() local
2557 if (!msm_host->dsc) in msm_dsi_host_check_dsc()
2560 if (pic_width % dsc->slice_width) { in msm_dsi_host_check_dsc()
2562 pic_width, dsc->slice_width); in msm_dsi_host_check_dsc()
2566 if (pic_height % dsc->slice_height) { in msm_dsi_host_check_dsc()
2568 pic_height, dsc->slice_height); in msm_dsi_host_check_dsc()
2657 return msm_host->dsc; in msm_dsi_host_get_dsc_config()