Due to an influx of spam, we have had to impose restrictions on new accounts. Please see this wiki page for instructions on how to get full permissions. Sorry for the inconvenience.
Admin message
The migration is almost done, at least the rest should happen in the background. There are still a few technical difference between the old cluster and the new ones, and they are summarized in this issue. Please pay attention to the TL:DR at the end of the comment.
Something went wrong while setting issue due date.
Screen is corrupted because of incorrect calculation of first_line_bpg_offset for DSC 1.1 (2nd report)
Continue #9102 (closed). The syndrome does still happen. The change below can solve it. The reason is because MIPI DSI 1.2 supports DSC 1.1, https://vesa.org/vesa-display-compression-codecs/. In the original condition, the calculation is wrong. Please check it.
diff --git a/drivers/gpu/drm/i915/display/intel_vdsc.c b/drivers/gpu/drm/i915/display/intel_vdsc.cindex 6e7151346382..9f1c339986d4 100644--- a/drivers/gpu/drm/i915/display/intel_vdsc.c+++ b/drivers/gpu/drm/i915/display/intel_vdsc.c@@ -320,7 +320,7 @@ int intel_dsc_compute_params(struct intel_crtc_state *pipe_config) * upto uncompressed bpp-1, hence add calculations for all the rc * parameters */- if (DISPLAY_VER(dev_priv) >= 13) {+ if ((DISPLAY_VER(dev_priv) >= 13) && (vdsc_cfg->dsc_version_minor == 2)) { calculate_rc_params(vdsc_cfg); } else { if ((compressed_bpp == 8 ||
Edited
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Child items
0
Show closed items
GraphQL error: The resource that you are attempting to access does not exist or you don't have permission to perform this action
No child items are currently open.
Linked items
0
Link issues together to show that they're related.
Learn more.
Please provide separate dmesg logs for the failing condition and the one in which it works well the patch provided causes a regression on machines with DSC 1.1 which were passing previously leads me to believe this is not the correct solution. Will have to investigate this further.
I need separate dmesg logs for when it works and when it doesn't which will help me compare as to what is going wrong.
Also we don't send a new patch for small condition changes but we revise the previous one. Also currently as mentioned in comments the condition itself seems to be wrong.
This is about the commit "db514cac" for clarifying the rc parameters calculation for DSC 1.1.
If slice_height is 40, the rc parameter first_line_bpg_offset derived from the commit will be 15 for 8bpp/8bpc, which is not equal to the value shown in Table E-5, DSC 1.1. So, the commit message "...The calculations used here are from VESA C model for DSC 1.1" does not seem quite right.
Shall bpp and bpc be considered in the function calculate_rc_params() in order to be compatible with DSC 1.1?
Maybe the different value has no impact on eDP but it does cause this issue found on a MIPI DSI panel. Can we make further changes and adapt to DSI panel, for example, adapting the rc parameters in gen11_dsi_dsc_compute_config()?
I am guessing there maybe some restrictions for DSI panel we are missing the problem is that we need to find which is the exact parameter that ends up causing this issue, next would be the finding the documentation thats asks us to apply these restrictions. Currently creating a patch for dsi to log the dsc params which we do for eDp and DP but for some reason didn't see it in the dmesg logs which were provided makes me believe the code for that does not exist yet
@gyu3 are you using the latest upstream kernel to test this since i see that the prints should have shown up with the rest of the crtc_state_dump but dont make me think an older kernel may have been used.
Can you check if you have the following commit 1de99ff7
Saw quite a lot of difference but also anomalies in the print between the working case and non working case like dsc minor version being 0.0 or the rc buf threshold and other calculations being totally different from the working case
Maybe we could ignore the part of dsc-cfg, in which version is 0.0 and focus on the other part with version 1.1. It is observed the version number is changed to 1.1 after the log message.
"drm_trace_printf: 0000:00:02.0 [drm:gen11_dsi_initial_fastset_check] Forcing full modeset due to DSC being enabled".
As the following, if comparing the two dsc-cfg configurations for the working and not working cases correspondingly, all the differences will be the values for "bits" and "dec" for rc-model, "first" and "non-first" for line-bpg-offsets, "increment" for initial-scale, rc-min-qp with the levels 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, and 13, rc-max-qp with the levels 0, 3, 5, 6, 11, 12, 14, and rc-bpg-offset with level 11.
According to the log messages, the working case has the values which are equal to the ones (At 8bpp/8bpc) in Table E-5, DSC 1.1, in terms of first_line_bpg_offset and MinQp and MaxQp of rc_range_parameters[0:14].
@surajk8 could you take a look about the finding and share your thoughts?
This basically boils down to individual DSI panel vendors hardcoding values in the VBT for DSC 1.1 because of which they are completely ignoring the params sent by Source. The driver is in accordance to VESA DSC Model. More info in the below HSD
16011641294
I have sent a patch that fixes this and hopefully does not cause a regression elsewhere
Noted, thank you.
Could you share the specification where the calculation is defined and can derive the parameters for the failing case? Maybe DSI panel vendor should be aware of it.
@surajk8 I have no questions about calculate_rc_params but don't know why to have "DISPLAY_VER(dev_priv) >= 13". According your comments, it only need to check the dsc version of sink to solve this issue, doesn't it?
Quote from https://lore.kernel.org/all/MW4PR11MB6761EF8A44F8A1F488FEF93DE3CC2@MW4PR11MB6761.namprd11.prod.outlook.com/:> > - if (DISPLAY_VER(dev_priv) >= 13) {> > + if (DISPLAY_VER(dev_priv) >= 13 &&> > Please change to "if (DISPLAY_VER(dev_priv) >= 14 &&" because MTL > begins to support DSC 1.2a according bspec 49259.As mentioned in the gitlab issue calculate_rc_params works for both DSC 1.1 and 1.2a because of whichDISPLAY_VER>=13 works check commit message db514cac.The reason we saw the issue in DSI panels was individual DSI panel vendors hardcoding DSC params and not the driver Miscalculating them which would also explain why it worked for all other panels in platforms >=13.So won't be changing the display_ver() check.Regards,Suraj Kandpal
DISPLAY_VER() check already existed and wasn't something that was added to solve this issue.
This check was previously added because that is when our platform/source side got the capability to handle values that are calculated rather than using the static config tables. Also the capability to handle fractional bits is when display_ver() >= 13