[PATCH 1/5] drm/i915/display: Fix the plane max height and width limits
Nautiyal, Ankit K
ankit.k.nautiyal at intel.com
Fri Oct 25 07:24:45 UTC 2024
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 at intel.com>
>> ---
>> 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
More information about the Intel-gfx
mailing list