Message ID | 20230329-rfc-msm-dsc-helper-v2-5-3c13ced536b2@quicinc.com |
---|---|
State | New |
Headers | show |
Series | Introduce MSM-specific DSC helpers | expand |
On 31/03/2023 21:49, Jessica Zhang wrote: > Use MSM and DRM DSC helper methods to configure DSC for DSI. > > Changes in V2: > - *_calculate_initial_scale_value --> *_set_initial_scale_value > - Split pkt_per_line and eol_byte_num changes to a separate patch > - Moved pclk_per_line calculation to hdisplay adjustment in `if (dsc)` > block of dsi_update_dsc_timing() > > Signed-off-by: Jessica Zhang <quic_jesszhan@quicinc.com> > --- > drivers/gpu/drm/msm/dsi/dsi_host.c | 11 ++++++++--- > 1 file changed, 8 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c b/drivers/gpu/drm/msm/dsi/dsi_host.c > index 74d38f90398a..b7ab81737473 100644 > --- a/drivers/gpu/drm/msm/dsi/dsi_host.c > +++ b/drivers/gpu/drm/msm/dsi/dsi_host.c > @@ -28,6 +28,7 @@ > #include "dsi.xml.h" > #include "sfpb.xml.h" > #include "dsi_cfg.h" > +#include "msm_dsc_helper.h" > #include "msm_kms.h" > #include "msm_gem.h" > #include "phy/dsi_phy.h" > @@ -848,7 +849,7 @@ static void dsi_update_dsc_timing(struct msm_dsi_host *msm_host, bool is_cmd_mod > /* first calculate dsc parameters and then program > * compress mode registers > */ > - slice_per_intf = DIV_ROUND_UP(hdisplay, dsc->slice_width); > + slice_per_intf = msm_dsc_get_slice_per_intf(dsc, hdisplay); > > /* > * If slice_count is greater than slice_per_intf > @@ -951,7 +952,11 @@ static void dsi_timing_setup(struct msm_dsi_host *msm_host, bool is_bonded_dsi) > * pulse width same > */ > h_total -= hdisplay; > - hdisplay /= 3; > + if (msm_host->mode_flags & MIPI_DSI_MODE_VIDEO) > + hdisplay = msm_dsc_get_uncompressed_pclk_per_line(dsc, hdisplay, > + dsi_get_bpp(msm_host->format)) / 3; > + else > + hdisplay /= 3; > h_total += hdisplay; > ha_end = ha_start + hdisplay; This chunk changes the calculated value (two other are mere updates to use new functions). Please move it to a separate patch, add proper description/justification and possibly a Fixes tag, if the original code was incorrect. > } > @@ -1759,7 +1764,7 @@ static int dsi_populate_dsc_params(struct msm_dsi_host *msm_host, struct drm_dsc > return ret; > } > > - dsc->initial_scale_value = 32; > + drm_dsc_set_initial_scale_value(dsc); > dsc->line_buf_depth = dsc->bits_per_component + 1; > > return drm_dsc_compute_rc_parameters(dsc); >
On 4/2/2023 4:29 AM, Dmitry Baryshkov wrote: > On 31/03/2023 21:49, Jessica Zhang wrote: >> Use MSM and DRM DSC helper methods to configure DSC for DSI. >> >> Changes in V2: >> - *_calculate_initial_scale_value --> *_set_initial_scale_value >> - Split pkt_per_line and eol_byte_num changes to a separate patch >> - Moved pclk_per_line calculation to hdisplay adjustment in `if (dsc)` >> block of dsi_update_dsc_timing() >> >> Signed-off-by: Jessica Zhang <quic_jesszhan@quicinc.com> >> --- >> drivers/gpu/drm/msm/dsi/dsi_host.c | 11 ++++++++--- >> 1 file changed, 8 insertions(+), 3 deletions(-) >> >> diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c >> b/drivers/gpu/drm/msm/dsi/dsi_host.c >> index 74d38f90398a..b7ab81737473 100644 >> --- a/drivers/gpu/drm/msm/dsi/dsi_host.c >> +++ b/drivers/gpu/drm/msm/dsi/dsi_host.c >> @@ -28,6 +28,7 @@ >> #include "dsi.xml.h" >> #include "sfpb.xml.h" >> #include "dsi_cfg.h" >> +#include "msm_dsc_helper.h" >> #include "msm_kms.h" >> #include "msm_gem.h" >> #include "phy/dsi_phy.h" >> @@ -848,7 +849,7 @@ static void dsi_update_dsc_timing(struct >> msm_dsi_host *msm_host, bool is_cmd_mod >> /* first calculate dsc parameters and then program >> * compress mode registers >> */ >> - slice_per_intf = DIV_ROUND_UP(hdisplay, dsc->slice_width); >> + slice_per_intf = msm_dsc_get_slice_per_intf(dsc, hdisplay); >> /* >> * If slice_count is greater than slice_per_intf >> @@ -951,7 +952,11 @@ static void dsi_timing_setup(struct msm_dsi_host >> *msm_host, bool is_bonded_dsi) >> * pulse width same >> */ >> h_total -= hdisplay; >> - hdisplay /= 3; >> + if (msm_host->mode_flags & MIPI_DSI_MODE_VIDEO) >> + hdisplay = msm_dsc_get_uncompressed_pclk_per_line(dsc, >> hdisplay, >> + dsi_get_bpp(msm_host->format)) / 3; >> + else >> + hdisplay /= 3; >> h_total += hdisplay; >> ha_end = ha_start + hdisplay; > > This chunk changes the calculated value (two other are mere updates to > use new functions). Please move it to a separate patch, add proper > description/justification and possibly a Fixes tag, if the original code > was incorrect. Hi Dmitry, Acked. Thanks, Jessica Zhang > >> } >> @@ -1759,7 +1764,7 @@ static int dsi_populate_dsc_params(struct >> msm_dsi_host *msm_host, struct drm_dsc >> return ret; >> } >> - dsc->initial_scale_value = 32; >> + drm_dsc_set_initial_scale_value(dsc); >> dsc->line_buf_depth = dsc->bits_per_component + 1; >> return drm_dsc_compute_rc_parameters(dsc); >> > > -- > With best wishes > Dmitry >
diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c b/drivers/gpu/drm/msm/dsi/dsi_host.c index 74d38f90398a..b7ab81737473 100644 --- a/drivers/gpu/drm/msm/dsi/dsi_host.c +++ b/drivers/gpu/drm/msm/dsi/dsi_host.c @@ -28,6 +28,7 @@ #include "dsi.xml.h" #include "sfpb.xml.h" #include "dsi_cfg.h" +#include "msm_dsc_helper.h" #include "msm_kms.h" #include "msm_gem.h" #include "phy/dsi_phy.h" @@ -848,7 +849,7 @@ static void dsi_update_dsc_timing(struct msm_dsi_host *msm_host, bool is_cmd_mod /* first calculate dsc parameters and then program * compress mode registers */ - slice_per_intf = DIV_ROUND_UP(hdisplay, dsc->slice_width); + slice_per_intf = msm_dsc_get_slice_per_intf(dsc, hdisplay); /* * If slice_count is greater than slice_per_intf @@ -951,7 +952,11 @@ static void dsi_timing_setup(struct msm_dsi_host *msm_host, bool is_bonded_dsi) * pulse width same */ h_total -= hdisplay; - hdisplay /= 3; + if (msm_host->mode_flags & MIPI_DSI_MODE_VIDEO) + hdisplay = msm_dsc_get_uncompressed_pclk_per_line(dsc, hdisplay, + dsi_get_bpp(msm_host->format)) / 3; + else + hdisplay /= 3; h_total += hdisplay; ha_end = ha_start + hdisplay; } @@ -1759,7 +1764,7 @@ static int dsi_populate_dsc_params(struct msm_dsi_host *msm_host, struct drm_dsc return ret; } - dsc->initial_scale_value = 32; + drm_dsc_set_initial_scale_value(dsc); dsc->line_buf_depth = dsc->bits_per_component + 1; return drm_dsc_compute_rc_parameters(dsc);
Use MSM and DRM DSC helper methods to configure DSC for DSI. Changes in V2: - *_calculate_initial_scale_value --> *_set_initial_scale_value - Split pkt_per_line and eol_byte_num changes to a separate patch - Moved pclk_per_line calculation to hdisplay adjustment in `if (dsc)` block of dsi_update_dsc_timing() Signed-off-by: Jessica Zhang <quic_jesszhan@quicinc.com> --- drivers/gpu/drm/msm/dsi/dsi_host.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-)