From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Souza, Jose" Subject: Re: [PATCH] drm/i915: Fix skl+ max plane width Date: Fri, 19 Apr 2019 19:13:00 +0000 Message-ID: References: <20190418195907.23912-1-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1414950504==" Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id CB8D3892AD for ; Fri, 19 Apr 2019 19:13:02 +0000 (UTC) In-Reply-To: <20190418195907.23912-1-ville.syrjala@linux.intel.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "ville.syrjala@linux.intel.com" , "intel-gfx@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org --===============1414950504== Content-Language: en-US Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="=-klNK/WQ2wLHxq7VlN3ON" --=-klNK/WQ2wLHxq7VlN3ON Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, 2019-04-18 at 22:59 +0300, Ville Syrjala wrote: > From: Ville Syrj=C3=A4l=C3=A4 >=20 > The spec has changed since skl_max_plane_width() was written. > Now the SKL limits are lower than what they were initially, and > GLK and ICL have different limits. Update the code to match the > spec. Reviewed-by: Jos=C3=A9 Roberto de Souza >=20 > Signed-off-by: Ville Syrj=C3=A4l=C3=A4 > --- > drivers/gpu/drm/i915/intel_display.c | 73 ++++++++++++++++++------ > ---- > 1 file changed, 48 insertions(+), 25 deletions(-) >=20 > diff --git a/drivers/gpu/drm/i915/intel_display.c > b/drivers/gpu/drm/i915/intel_display.c > index 3bd40a4a6739..bedddbeead75 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -2964,41 +2964,56 @@ static int skl_max_plane_width(const struct > drm_framebuffer *fb, > switch (fb->modifier) { > case DRM_FORMAT_MOD_LINEAR: > case I915_FORMAT_MOD_X_TILED: > - switch (cpp) { > - case 8: > - return 4096; > - case 4: > - case 2: > - case 1: > - return 8192; > - default: > - MISSING_CASE(cpp); > - break; > - } > - break; > + return 4096; > case I915_FORMAT_MOD_Y_TILED_CCS: > case I915_FORMAT_MOD_Yf_TILED_CCS: > /* FIXME AUX plane? */ > case I915_FORMAT_MOD_Y_TILED: > case I915_FORMAT_MOD_Yf_TILED: > - switch (cpp) { > - case 8: > + if (cpp =3D=3D 8) > return 2048; > - case 4: > + else > return 4096; > - case 2: > - case 1: > - return 8192; > - default: > - MISSING_CASE(cpp); > - break; > - } > - break; > default: > MISSING_CASE(fb->modifier); > + return 2048; > } > +} > =20 > - return 2048; > + > +static int glk_max_plane_width(const struct drm_framebuffer *fb, > + int color_plane, > + unsigned int rotation) > +{ > + int cpp =3D fb->format->cpp[color_plane]; > + > + switch (fb->modifier) { > + case DRM_FORMAT_MOD_LINEAR: > + case I915_FORMAT_MOD_X_TILED: > + if (cpp =3D=3D 8) > + return 4096; > + else > + return 5120; > + case I915_FORMAT_MOD_Y_TILED_CCS: > + case I915_FORMAT_MOD_Yf_TILED_CCS: > + /* FIXME AUX plane? */ > + case I915_FORMAT_MOD_Y_TILED: > + case I915_FORMAT_MOD_Yf_TILED: > + if (cpp =3D=3D 8) > + return 2048; > + else > + return 5120; > + default: > + MISSING_CASE(fb->modifier); > + return 2048; > + } > +} > + > +static int icl_max_plane_width(const struct drm_framebuffer *fb, > + int color_plane, > + unsigned int rotation) > +{ > + return 5120; > } > =20 > static bool skl_check_main_ccs_coordinates(struct intel_plane_state > *plane_state, > @@ -3041,16 +3056,24 @@ static bool > skl_check_main_ccs_coordinates(struct intel_plane_state *plane_state > =20 > static int skl_check_main_surface(struct intel_plane_state > *plane_state) > { > + struct drm_i915_private *dev_priv =3D to_i915(plane_state- > >base.plane->dev); > const struct drm_framebuffer *fb =3D plane_state->base.fb; > unsigned int rotation =3D plane_state->base.rotation; > int x =3D plane_state->base.src.x1 >> 16; > int y =3D plane_state->base.src.y1 >> 16; > int w =3D drm_rect_width(&plane_state->base.src) >> 16; > int h =3D drm_rect_height(&plane_state->base.src) >> 16; > - int max_width =3D skl_max_plane_width(fb, 0, rotation); > + int max_width; > int max_height =3D 4096; > u32 alignment, offset, aux_offset =3D plane_state- > >color_plane[1].offset; > =20 > + if (INTEL_GEN(dev_priv) >=3D 11) > + max_width =3D icl_max_plane_width(fb, 0, rotation); > + else if (INTEL_GEN(dev_priv) >=3D 10 || IS_GEMINILAKE(dev_priv)) > + max_width =3D glk_max_plane_width(fb, 0, rotation); > + else > + max_width =3D skl_max_plane_width(fb, 0, rotation); > + > if (w > max_width || h > max_height) { > DRM_DEBUG_KMS("requested Y/RGB source size %dx%d too > big (limit %dx%d)\n", > w, h, max_width, max_height); --=-klNK/WQ2wLHxq7VlN3ON Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEEVNG051EijGa0MiaQVenbO/mOWkkFAly6HbsACgkQVenbO/mO WklKrwf+Ovt5nKF2L9/FW3cfXY8Jn/Aq6mMAlNtWnwpi9kOdw4W7SHQIOMbYmA/K 9dU2xOjuMaSPPHBl5FhTE+dG7gxDqPKsKyvjkNT3ZkDBUODf8l2XeL26A2mjmLZe jTi8nPPq/pvyHTU2INXYWQSdcR+Mt4BsMNR6j7H08islYaLaygJmQDyHn0BMCdBP ScsO6TkK+/2T6VerG7IY0WfLrOyDHT0PsttBltrBKtzf3xtq1JysBo6x48sLDGj3 m3DJWaKSsqZn7xrhI4HxcuuhKwKErorD8CA5Za8lep9Y/Dneb3f+H4ZkSAEe2ug9 gfDq318Eb1wX1p+arKclTzxOuSlrmA== =vmcj -----END PGP SIGNATURE----- --=-klNK/WQ2wLHxq7VlN3ON-- --===============1414950504== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4 IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4 --===============1414950504==--