On 10/25/2024 11:51 AM, Ville Syrjälä wrote:
On Fri, Oct 25, 2024 at 11:31:32AM +0530, Suraj Kandpal wrote:
Fix the plane max height and width limits taking into account the
joined pipe limits too.
Bspec: 28692, 49199, 68858
Fixes: 63dc014e37b9 ("drm/i915/dp: Allow big joiner modes in intel_dp_mode_valid(), v3.")
Signed-off-by: Suraj Kandpal <suraj.kandpal@xxxxxxxxx>
---
drivers/gpu/drm/i915/display/intel_display.c | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index ef1436146325..fc578af4f394 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -8450,9 +8450,22 @@ intel_mode_valid_max_plane_size(struct drm_i915_private *dev_priv,
* plane so let's not advertize modes that are
* too big for that.
*/
- if (DISPLAY_VER(dev_priv) >= 11) {
- plane_width_max = 5120 * num_joined_pipes;
- plane_height_max = 4320;
+ if (DISPLAY_VER(dev_priv) >= 20) {
+ if (num_joined_pipes > 1) {
+ plane_width_max = 8192;
+ plane_height_max = 4800;
+ } else {
+ plane_width_max = 5120;
+ plane_height_max = 4096;
The joiner operates on horizontal lines. Why would the
vertical resolution change here?
And this is breaking ultrajoiner now.
Yeah this will complicate function to check whether go to ultrajoiner or
bigjoiner.
Perhaps need to have separate function for max_joined_plane_width() and
max_unjoined_plane_width();
And the func intel_dp_needs_joiner() will change to something like:
bool intel_dp_needs_joiner(struct intel_dp *intel_dp,
struct intel_connector *connector,
int hdisplay, int clock,
int num_joined_pipes)
{
struct drm_i915_private *i915 = dp_to_i915(intel_dp);
if (!intel_dp_has_joiner(intel_dp))
return false;
if (hdisplay > max_joined_plane_width())
return false;
if (num_joined_pipes == 2)
return clock > i915->display.cdclk.max_dotclk_freq ||
hdisplay > max_unjoined_plane_width();
if (num_joined_pipes == 4)
return clock > 2 * i915->display.cdclk.max_dotclk_freq;
return false;
}
Regards,
Ankit
Frankly I have a hard time believing that there are any extra
limits on plane size imposed by the hardware for joined pipes.
If there is some kind of maximum width limit then it must be
coming from the joiner itself (eg. max line buffer width) and
not from the planes. So I think this is the wrong place to
handle that.
+ }
+ } else if (DISPLAY_VER(dev_priv) >= 11) {
+ if (num_joined_pipes > 1) {
+ plane_width_max = 7680;
+ plane_height_max = 4320;
+ } else {
+ plane_width_max = 5120;
+ plane_height_max = 4096;
+ }
} else {
plane_width_max = 5120;
plane_height_max = 4096;
--
2.34.1