From patchwork Mon Mar 18 20:44:07 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?VmlsbGUgU3lyasOkbMOk?= X-Patchwork-Id: 13617933 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 01EF7C54E5D for ; Tue, 19 Mar 2024 09:14:55 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id D3E8C10F8E5; Tue, 19 Mar 2024 09:14:54 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="h+vMOD0Z"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.18]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1293610F8E4 for ; Tue, 19 Mar 2024 09:14:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1710839693; x=1742375693; h=resent-from:resent-date:resent-message-id:resent-to:from: to:cc:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=94HwJ5IhvcWEI2OklU8pMwEOAWDXwo0zlhICFjnGTv4=; b=h+vMOD0ZT11mlEXgHZf/YWZL76bONQMwmF4zQJ7v57oRxrXUcEqco0P3 J7tcDsSu4Pq+dDeCyD9wFUCoD2eXXDg4oG4YCJI6KwbjzrmJAoc8lS7bd yEH9qGY1URGE17p8VkLs0+b4LLTFI084G6O2JIdnWnovvJye8KC2i6Gf4 1uOg/56e0uxS4fM9eKdeLKahkgDo1ICsMfVxlD39pWlJMGyo1ft5V1i7S MYr1e8yYslKw9N4czwaB40fR4qTanJ3zY8Nt/ipYxMnHBNVmkBif8XDXj SPQ+TXeydvebS5o6fyiDi7SELyTD1NCUtgB0vtTEQApvklrvw9AfHFE8g w==; X-IronPort-AV: E=McAfee;i="6600,9927,11017"; a="5529755" X-IronPort-AV: E=Sophos;i="6.07,136,1708416000"; d="scan'208";a="5529755" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmvoesa112.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Mar 2024 02:14:53 -0700 X-ExtLoopCount2: 2 from 10.237.72.74 X-IronPort-AV: E=McAfee;i="6600,9927,11017"; a="827782084" X-IronPort-AV: E=Sophos;i="6.07,136,1708416000"; d="scan'208";a="827782084" Received: from stinkpipe.fi.intel.com (HELO stinkbox) ([10.237.72.74]) by orsmga001.jf.intel.com with SMTP; 19 Mar 2024 02:14:50 -0700 Received: by stinkbox (sSMTP sendmail emulation); Tue, 19 Mar 2024 11:14:50 +0200 Resent-From: Ville =?iso-8859-1?q?Syrj=E4l=E4?= Resent-Date: Tue, 19 Mar 2024 11:14:50 +0200 Resent-Message-ID: Resent-To: dri-devel@lists.freedesktop.org Received: from linux.intel.com [10.54.29.200] by stinkbox.stink.local with IMAP (fetchmail-6.4.37) for (single-drop); Mon, 18 Mar 2024 22:49:03 +0200 (EET) Received: from orsmga001.jf.intel.com (orsmga001.jf.intel.com [10.7.209.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by linux.intel.com (Postfix) with ESMTPS id 24071580D4E for ; Mon, 18 Mar 2024 13:44:17 -0700 (PDT) X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,11017"; a="827781923" X-IronPort-AV: E=Sophos;i="6.07,135,1708416000"; d="scan'208";a="827781923" Received: from stinkpipe.fi.intel.com (HELO stinkbox) ([10.237.72.74]) by orsmga001.jf.intel.com with SMTP; 18 Mar 2024 13:44:13 -0700 Received: by stinkbox (sSMTP sendmail emulation); Mon, 18 Mar 2024 22:44:12 +0200 From: Ville Syrjala To: intel-gfx@lists.freedesktop.org Cc: =?utf-8?q?Jonas_=C3=85dahl?= , Sameer Lattannavar , Sebastian Wick , Simon Ser , Daniel Stone , Harry Wentland , Pekka Paalanen Subject: [PATCH v3 1/2] drm: Introduce plane SIZE_HINTS property Date: Mon, 18 Mar 2024 22:44:07 +0200 Message-ID: <20240318204408.9687-2-ville.syrjala@linux.intel.com> X-Mailer: git-send-email 2.43.2 In-Reply-To: <20240318204408.9687-1-ville.syrjala@linux.intel.com> References: <20240318204408.9687-1-ville.syrjala@linux.intel.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Ville Syrjälä Add a new immutable plane property by which a plane can advertise a handful of recommended plane sizes. This would be mostly exposed by cursor planes as a slightly more capable replacement for the DRM_CAP_CURSOR_WIDTH/HEIGHT caps, which can only declare a one size fits all limit for the whole device. Currently eg. amdgpu/i915/nouveau just advertize the max cursor size via the cursor size caps. But always using the max sized cursor can waste a surprising amount of power, so a better strategy is desirable. Most other drivers don't specify any cursor size at all, in which case the ioctl code just claims that 64x64 is a great choice. Whether that is actually true is debatable. A poll of various compositor developers informs us that blindly probing with setcursor/atomic ioctl to determine suitable cursor sizes is not acceptable, thus the introduction of the new property to supplant the cursor size caps. The compositor will now be free to select a more optimal cursor size from the short list of options. Note that the reported sizes (either via the property or the caps) make no claims about things such as plane scaling. So these things should only really be consulted for simple "cursor like" use cases. Userspace consumer in the form of mutter seems ready: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3165 v2: Try to add some docs v3: Specify that value 0 is reserved for future use (basic idea from Jonas) Drop the note about typical hardware (Pekka) v4: Update the docs to indicate the list is "in order of preference" Add a a link to the mutter MR v5: Limit to cursors only for now (Simon) Cc: Jonas Ådahl Cc: Sameer Lattannavar Reviewed-by: Sebastian Wick Reviewed-by: Simon Ser Acked-by: Daniel Stone Acked-by: Harry Wentland Acked-by: Pekka Paalanen Signed-off-by: Ville Syrjälä --- drivers/gpu/drm/drm_mode_config.c | 7 ++++ drivers/gpu/drm/drm_plane.c | 56 +++++++++++++++++++++++++++++++ include/drm/drm_mode_config.h | 5 +++ include/drm/drm_plane.h | 4 +++ include/uapi/drm/drm_mode.h | 11 ++++++ 5 files changed, 83 insertions(+) diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c index 48fd2d67f352..568972258222 100644 --- a/drivers/gpu/drm/drm_mode_config.c +++ b/drivers/gpu/drm/drm_mode_config.c @@ -372,6 +372,13 @@ static int drm_mode_create_standard_properties(struct drm_device *dev) return -ENOMEM; dev->mode_config.modifiers_property = prop; + prop = drm_property_create(dev, + DRM_MODE_PROP_IMMUTABLE | DRM_MODE_PROP_BLOB, + "SIZE_HINTS", 0); + if (!prop) + return -ENOMEM; + dev->mode_config.size_hints_property = prop; + return 0; } diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c index 672c655c7a8e..eecc24c54efd 100644 --- a/drivers/gpu/drm/drm_plane.c +++ b/drivers/gpu/drm/drm_plane.c @@ -140,6 +140,25 @@ * DRM_FORMAT_MOD_LINEAR. Before linux kernel release v5.1 there have been * various bugs in this area with inconsistencies between the capability * flag and per-plane properties. + * + * SIZE_HINTS: + * Blob property which contains the set of recommended plane size + * which can used for simple "cursor like" use cases (eg. no scaling). + * Using these hints frees userspace from extensive probing of + * supported plane sizes through atomic/setcursor ioctls. + * + * The blob contains an array of struct drm_plane_size_hint, in + * order of preference. For optimal usage userspace should pick + * the first size that satisfies its own requirements. + * + * Drivers should only attach this property to planes that + * support a very limited set of sizes. + * + * Note that property value 0 (ie. no blob) is reserved for potential + * future use. Current userspace is expected to ignore the property + * if the value is 0, and fall back to some other means (eg. + * &DRM_CAP_CURSOR_WIDTH and &DRM_CAP_CURSOR_HEIGHT) to determine + * the appropriate plane size to use. */ static unsigned int drm_num_planes(struct drm_device *dev) @@ -1729,3 +1748,40 @@ int drm_plane_create_scaling_filter_property(struct drm_plane *plane, return 0; } EXPORT_SYMBOL(drm_plane_create_scaling_filter_property); + +/** + * drm_plane_add_size_hint_property - create a size hint property + * + * @plane: drm plane + * @hints: size hints + * @num_hints: number of size hints + * + * Create a size hints property for the plane. + * + * RETURNS: + * Zero for success or -errno + */ +int drm_plane_add_size_hints_property(struct drm_plane *plane, + const struct drm_plane_size_hint *hints, + int num_hints) +{ + struct drm_device *dev = plane->dev; + struct drm_mode_config *config = &dev->mode_config; + struct drm_property_blob *blob; + + /* extending to other plane types needs actual thought */ + if (drm_WARN_ON(dev, plane->type != DRM_PLANE_TYPE_CURSOR)) + return -EINVAL; + + blob = drm_property_create_blob(dev, + array_size(sizeof(hints[0]), num_hints), + hints); + if (IS_ERR(blob)) + return PTR_ERR(blob); + + drm_object_attach_property(&plane->base, config->size_hints_property, + blob->base.id); + + return 0; +} +EXPORT_SYMBOL(drm_plane_add_size_hints_property); diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h index 973119a9176b..9d8acf7a10eb 100644 --- a/include/drm/drm_mode_config.h +++ b/include/drm/drm_mode_config.h @@ -942,6 +942,11 @@ struct drm_mode_config { */ struct drm_property *modifiers_property; + /** + * @size_hints_propertty: Plane SIZE_HINTS property. + */ + struct drm_property *size_hints_property; + /* cursor size */ uint32_t cursor_width, cursor_height; diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h index 641fe298052d..ec1112208b73 100644 --- a/include/drm/drm_plane.h +++ b/include/drm/drm_plane.h @@ -32,6 +32,7 @@ #include struct drm_crtc; +struct drm_plane_size_hint; struct drm_printer; struct drm_modeset_acquire_ctx; @@ -976,5 +977,8 @@ drm_plane_get_damage_clips(const struct drm_plane_state *state); int drm_plane_create_scaling_filter_property(struct drm_plane *plane, unsigned int supported_filters); +int drm_plane_add_size_hints_property(struct drm_plane *plane, + const struct drm_plane_size_hint *hints, + int num_hints); #endif diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h index 7040e7ea80c7..1ca5c7e418fd 100644 --- a/include/uapi/drm/drm_mode.h +++ b/include/uapi/drm/drm_mode.h @@ -865,6 +865,17 @@ struct drm_color_lut { __u16 reserved; }; +/** + * struct drm_plane_size_hint - Plane size hints + * + * The plane SIZE_HINTS property blob contains an + * array of struct drm_plane_size_hint. + */ +struct drm_plane_size_hint { + __u16 width; + __u16 height; +}; + /** * struct hdr_metadata_infoframe - HDR Metadata Infoframe Data. * From patchwork Mon Mar 18 20:44:08 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?VmlsbGUgU3lyasOkbMOk?= X-Patchwork-Id: 13617932 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 24677C54E60 for ; Tue, 19 Mar 2024 09:14:47 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 632AE10F8DD; Tue, 19 Mar 2024 09:14:46 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="bR5F1/qL"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.18]) by gabe.freedesktop.org (Postfix) with ESMTPS id A8BC010F8DD for ; Tue, 19 Mar 2024 09:14:44 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6600,9927,11017"; a="5529741" X-IronPort-AV: E=Sophos;i="6.07,136,1708416000"; d="scan'208";a="5529741" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmvoesa112.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Mar 2024 02:14:44 -0700 X-ExtLoopCount2: 2 from 10.237.72.74 X-IronPort-AV: E=McAfee;i="6600,9927,11017"; a="827782081" X-IronPort-AV: E=Sophos;i="6.07,136,1708416000"; d="scan'208";a="827782081" Received: from stinkpipe.fi.intel.com (HELO stinkbox) ([10.237.72.74]) by orsmga001.jf.intel.com with SMTP; 19 Mar 2024 02:14:42 -0700 Received: by stinkbox (sSMTP sendmail emulation); Tue, 19 Mar 2024 11:14:41 +0200 Resent-From: Ville =?iso-8859-1?q?Syrj=E4l=E4?= Resent-Date: Tue, 19 Mar 2024 11:14:41 +0200 Resent-Message-ID: Resent-To: dri-devel@lists.freedesktop.org Received: from linux.intel.com [10.54.29.200] by stinkbox.stink.local with IMAP (fetchmail-6.4.37) for (single-drop); Mon, 18 Mar 2024 22:49:06 +0200 (EET) Received: from orviesa003.jf.intel.com (ORVIESA003.jf.intel.com [10.64.159.143]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by linux.intel.com (Postfix) with ESMTPS id BE3C0580E3B; Mon, 18 Mar 2024 13:44:25 -0700 (PDT) X-IronPort-AV: E=Sophos;i="6.07,135,1708416000"; d="scan'208";a="18315601" Received: from fmvoesa102.fm.intel.com ([10.64.2.12]) by ORVIESA003-1.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2024 13:44:26 -0700 X-IPAS-Result: A0E6AQCypvhlmLHS/INaHQEBAQEJARIBBQUBQIFPgjkZAYE4gQmEGjyIfIhuFp8xMxoBAQEBAQEBAQEJLhMBAgQBAQMEhH+IBQImOBMBAgQBAQEBAwIBAgEBAQEBAQgBAQECAgEBAQIBAQYDAQEBAQIQAQEBAQEBAQEeGQUQDieFLz0NgjclAYEeXgcJOAEBAQEBAQEBAQEBAQEBAQEBAQEBARQCDVsBAR4BAQEDAQEBCRcECwENAQEECikBAgMBAgYBAQgXBQIeBAQCAgMBUhkFgnuCYAMFl3CbOnp/M4EBggoBAQaxIIFhCYEaLogmAYRThGR6Jw+BVUR6UIMzgVKDBjiDDoJogUFWgzuFRRCMb4tySoEJHAOBBWsbEB43ERATDQMIbh0CMToDBQMEMgoSDAsfBVQDQwZJCwMCGgUDAwSBLgUNGgIQLCYDAxJJAhAUAzgDAwYDCjEwVUEMUANkHxoYCTwLBAwaAhsUDSQjAiw+AwkKEAIWAx0WBDARCQsmAyoGNgISDAYGBl0gFgkEJQMIBAMQQgMgchEDBBoECwdSJoM/BBNEAxCBNIoig0IqgXeCRQMJAwcFLB1AAwsYDUgRLBYfFBsoHgFvB6UVKmSVdwGDIa8ENAeEFYFbBgyfOhozl1OSWy6YMah8gXsjAoFaMxojgzdSGQ+OIAwWg1iPe0E1AjkCBwEKAQEDCYVGAQGDWQGBRwEB IronPort-PHdr: A9a23:+92u/R/xxQeu+f9uWQi4ngc9DxPPW53KNwIYoqAql6hJOvz6uci4b QqPur401wCBdL6YwswHotKViZyoYXYH75eFvSJKW713fDhBt/8rmRc9CtWOE0zxIa2iRSU7G MNfSA0tpCnjYgBaF8nkelLdvGC54yIMFRXjLwp1Ifn+FpLPg8it2O2+5Znebx9LiTe/br9+M Ru7oAfMvcQKnIVuLbo8xRTOrnZUYepawn9mK0yOlBjm/Mew+5Bj8yVUu/0/8sNLTLv3caclQ 7FGFToqK2866tHluhnFVguP+2ATUn4KnRpSAgjK9w/1U5HsuSbnrOV92S2aPcrrTbAoXDmp8 qlmRAP0hCoBKjU063/chNBug61HoRKhvx1/zJDSYIGJL/p1Y6fRccoHSWZdQspdUipMCZ6+Y YQSFeoMJeZWoZfjqlUToxWwBg6iC+HhyjBHmnD40rU63uYjHwzJwQAtEc4Cv2rPrNjuKKcfU vq4wLXSwDnfbf5b3yr25ojSchAmpPGBRb1/ccvVyUkrCQzOk0ieqIz/PzOXzOsNt3KU5PdnW OKxim4nrwVxrSa1ysc3iojJnIAVxUrA9Spj24s1Idy4SEhmYd+rCpdQtieaN5doTcMmWW1np CE6yrgftJO9YSMFx4gpyQTFZPybb4iH/AjjVOCJLDl3gH9rd7Gyigu9/0Wv1ODxWdW43UpFo CdFjtTCuHEA2Rzd5MWIVvZx4lms1CiB2g3d9uxJPEQ5mKvGJpMl3rI9kIcYv0fbHiLuhUn7g rKael869uWo9ejreKvqqoKAO4Nulw3zMKYjltSiDek8LAQCRXWX9OC/2bH54EH0QbtHgucrn qXEtp3RONoWpqqkAw9OzoYs9Qy/ASqn0NUZg3YKNE5JdRSahIbzIV7OOur3DfKnjlSsjjhrw /fGM6XuAprXNXfMjq3tfbhn60FC1gU80M5Q54lXCrEdJ/LzQlX9tNvCDh82KwC0wuDnB8th1 o4GRG6CDLKVPLnMvVKI+O4jOfeAaJIJtDrnNvQo5fzjgWc8mVAHfKmp2ZUXaGq/HvRjO0iZY HzsgssfHmcOpwY+Q+LqiVKbXTFIYHayQqQ86S0lB4K9ForDQoGtgKed3CegBJFWaHpGBU6SH nj1aYqEQPQMaD6VIs95iDAEUqKhS4A52RGorwD106BnIfbM+i0EqZLj08B46/DQmB0q7zx7E 9yd032RT2Fzhm4HXSI507p6oUBnz1eD0LN4gv1EGt1S/fxJURw3NZrdz+x8FtDzVRjNftaPS Fa6XNqmBSs9Qc42w98Le0p9Acmtjgjf3yq2BL8Yj6aEBJop/aLdxXTxPMZ9ynba1KkglFQmR spPNWu7hq9w7QTTBojJk1mHmKaub6gTwCnN9GKbwWqUoE5YSBJwUbnCXX0HZEvZt9L55kLYQ 7+oCLQnMRZBycqYJaZRbt3pjFNGROrsOdjEYmKxnXuwCgiMxr+WcIXqfGAd0D3HCEcYiwAT4 WqGNQ8mCyejuW3eCiFuFUnuYk/28ul+snK6T08vzwCLc01h0LS1+h8WhfGHT/MT37QEuDouq jluHVa92c7WBMSEpwZ7YKpcZtY97E9d1W3Frwx9IoCgL6d6i14cdAR3uEXu2A9sColalcglt nMqzBZzKaKezlxBcSiV3ZTxOr3RN2nz8wqja6/Q2lHCztmW/r0D5+g/q1XmpA2pDFYt82170 9lJ1HuR/pbKAxATUZ7rTEY46Rh6p7TAbSk7+YzU02ZhMa21sj/ExtIoC/Epyhemf9dDLqyEE BX+HNEdB8ire6QXnUO0ZEcEIPxK7/xzeMenbOednqCxMetskSmlkWNfpodn3QWJ/it4T+fOm JEd3/Cf2BDAVjHggVPkvc7nyr1CfiwYS2+2yCz4A9xQYLF/ecMEB3frOcCu29hlm7bpWmVE7 xitHV4L1MKyegaVdxr6 IronPort-Data: A9a23:xhbMf64iyxc28BKbqvsBzwxRtN7BchMFZxGqfqrLsTDasY5as4F+v mROCG+AP6zbZmGgf99xbIXk8x9TuZ/QyoBkG1E6/Cw3Eysa+MHILOrCEkqhZCn6wu8v7a5EA 2fyTvGZdJhcoqr0/0/1WlTHhScijfngqp3UUbecY38ZqTdMEXtn01Q58wIAqtQAqcCjBA+Qs s/FrcTaOVu0sxZ5KWt8B5ir8XuDh9ys/mtH1rACTaoT5gOGzCBFVMh3yZyZdhMUfKEFRoZWe M6elNlVzkuBlz8xB9WslKrMc0FiatY+6iDV0hK684D76vRzjnRaPpQTbZLwWm8O49m9pO2d/ f0W3XCGYVxwYvCTwrR1vy5wSEmSNYUekFPOzOPWXca7lyUqeFO1qxli4dpf0ST1NY+bDEkXn cH0JgzhYTiN18eT4KrgZdJ8g/Q6a8bRGb8hnkFvmGSx4fYOGfgvQo3F7NVVmjkqi81CEO3de 80BLz11Y3wsYTUWYQ5RUs9k2r3x3j+mLGIwRFG9/cLb50DSyhB81P3iPsqQcNuXQ85YhW6cp 3na5CL3GBwXONGEyiaC6jSrnOCncSbTAtlLSOfprKMCbFu7+U86EBtPWl2Ao6OUo0GMeYlnE 1Ybw397xUQ13BX3EYisBnVUukWstxIVXpxVEvYo4xOEyYLQ4gCEFi4FSCJMbJots8pebTUs2 l7PhNP4GT1HtLyTVGLb97GIoDf0Mi8QRUcAbCkFCw0E4MTnqak3jxTSXpBiFrK4ipv+HjSY6 zKDqjUllfMQl9wazLen+l7GgBqop57UXkg04BnaWiSu6QYRTIyiYIqh8h7f5PZcLYCUSHGFv X4Zi46f6vwDCdeGkynlaOYEHfe36vaAOTvRh3ZrHp8853Ks/WKuecZb5zQWDERgN8cAPzzuZ k7eshFX9bdXPX23fel2ZZ68D4Ihyq2IPdHsX+rIY9wIZpF3dw+A5jpyTUqR2X391kkqjaw7f 5ycdK6ECH8RCKlliiK/W+oZ2q06xQg6xGXOVdb6yQiq1fyVY3v9YbIMKlCPaKYz4bmCqRnS7 NdUJeOOyhNCQKv/ZDXa9cgYKlViBX0yGIrx7cdXe+6KKCJiGWc8G7nQx68sf8pumKE9vuLJ9 XG0V0tvxkfXgXzBNBXMa3Z/ZbepVpF6xVo+PC8le1W13GA7aIKmxKMecYYnO7gh6OFni/VzS pEtfcSaB/NeDDjO4BwZbJ/gvMpjcgimgUSFOC/NSCQ4epd7VUrM+8T4dxfH8CgIEzrxtM0ir rnm3QTeKbIfWR5+D8GQdei00lewu1AZmeRvTw3JJMVefAPn940CAzLwivs6ZdodMxfKwjKy0 weQHAdepO/Rrotz+97M7YiWr4qvAvZhNk5bGXTLq7ewKSTeuGGkxOd9vP2gcjnXWSX64qiva ehOzO37KLsAhlkiX5dA/6hDw/Ibwvv3/JBh3gFUBTLEVXGXNJdQLSzTtSVQjZFlyrhcsAqwf 0uA/NhGJLmEUP8J9nZMfGLJiczej5kpdinu0BgjHKntCMZKEFevXkxYMl+CkiFQILZuM58i2 aEmosF+B+2DZvgCYo3uYsN8rjrkwpk8v0MP68ly7GjD11BD9726ScaAYhIaGbnWAzm2DmEkI yWPmI3JjKlGy0zJfhIbTCeUhbUN28tQ5E8SnTfuwmhlfPKY3pfbOzUMq1wKovh9lH2rLsotZ zUwaSWZ243Sol+Ee/Svr0j1R14QVUTxFr3Z01wTiGnQSUXgTXDEMGB1JOCM4k0D6GNAb1BmE EKwlg7YvcLRVJiphEMaABc9w9S6FIwZ3lOZwqiPQZ/ad6TWlBK42MdCk0JS9Uu+aS7w7WWaz dRXEBFYNfWgaXFP8vZjVeF3F904EXi5GYCLetk4lIshHGfAdTX00j+LQ31dsOsXTxAW2SdUw PCC6i6Cu9pSGcpOQv0m IronPort-HdrOrdr: A9a23:oG6kBajrij7zqcCmtH6FyNBZlXBQXk0ji2hC6mlwRA09TyX5ra qTdTogpGTJYVEqKQMdcLG7Sdq9qBbnm6KdjrNhQItKNjOLhIKXFvAv0WKP+UyYJ8S6zJ8i6U +PG5IOQOEZIzBB/IzHCSODYqAdKODuytHiuQ81p00dAD2CEpsQpjuRaTzrYnGeJjM2eabRT6 DskfavzgDIER95H6fLYQhiYwGAnay7qHvIW29IO/dN0nj1sdrH0s+DL/BYti1uJg+nho1Sk1 QtlTaZhtTHwpWGI2fnphDuBxs/oqqU9jIvPqGxtvQ= X-Talos-CUID: 9a23:1cf9amlNMNFHdnJxUxke+Nxp7JzXOXON6VLwOxSXMnZseKTSRmW1xJ1Ao8U7zg== X-Talos-MUID: 9a23:QXjVCgQwxKrQzKpbRXTTpxh6Mp5n5Z+sUm0knqck4PG8LyNJbmI= X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=McAfee;i="6600,9927,11017"; a="23142925" X-IronPort-AV: E=Sophos;i="6.07,135,1708416000"; d="scan'208";a="23142925" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from gabe.freedesktop.org ([131.252.210.177]) by mtab.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2024 13:44:24 -0700 Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id BD13C1120B2; Mon, 18 Mar 2024 20:44:23 +0000 (UTC) Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.11]) by gabe.freedesktop.org (Postfix) with ESMTPS id E317E1120B2 for ; Mon, 18 Mar 2024 20:44:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1710794662; x=1742330662; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=HZsgmxpn/d7I73aHkhjqcb9wJ8ucpOy6Wqvzh/mhEpU=; b=bR5F1/qLXL9zpkwSOT3xdUw5/V/I3RCgm/JFVDlFKrMaC80mzVOiNEXS YrEInu5lXymHB1ZoSkuc4NzRTMR+2yxgfOm2X0PXbOpUW3hDOecZQlf/t QWwp5z6nNfveAwfHj+pETexLutvXiKj+HRQxASRvaNS/YZv3xx5YjmfDM 4AfFc7+vzphebhjDFAX93gxlB/UL5LRw5Cz8VCWKwr+cwzHCi2OpGQLtT VJJBBN16cIzM6CH6umiVlLF2QUUMHQvEenTOfKMcESX92zTGQsRbEs5dh FiC0hpACSslwlqPGjcTWABAsZBjEXcSY5Yn589tgCh0aAmoAoSYoN11RB w==; X-IronPort-AV: E=McAfee;i="6600,9927,11017"; a="16273739" X-IronPort-AV: E=Sophos;i="6.07,135,1708416000"; d="scan'208";a="16273739" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmvoesa105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2024 13:44:22 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,11017"; a="827781926" X-IronPort-AV: E=Sophos;i="6.07,135,1708416000"; d="scan'208";a="827781926" Received: from stinkpipe.fi.intel.com (HELO stinkbox) ([10.237.72.74]) by orsmga001.jf.intel.com with SMTP; 18 Mar 2024 13:44:18 -0700 Received: by stinkbox (sSMTP sendmail emulation); Mon, 18 Mar 2024 22:44:17 +0200 From: Ville Syrjala To: intel-gfx@lists.freedesktop.org Cc: Simon Ser , =?utf-8?q?Jonas_=C3=85dahl?= , Daniel Stone , Sameer Lattannavar , Sebastian Wick , Harry Wentland , Pekka Paalanen Subject: [PATCH v3 2/2] drm/i915: Add SIZE_HINTS property for cursors Date: Mon, 18 Mar 2024 22:44:08 +0200 Message-ID: <20240318204408.9687-3-ville.syrjala@linux.intel.com> X-Mailer: git-send-email 2.43.2 In-Reply-To: <20240318204408.9687-1-ville.syrjala@linux.intel.com> References: <20240318204408.9687-1-ville.syrjala@linux.intel.com> MIME-Version: 1.0 X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list X-BeenThere: dri-devel@lists.freedesktop.org List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Ville Syrjälä Advertize more suitable cursor sizes via the new SIZE_HINTS plane property. We can't really enumerate all supported cursor sizes on the platforms where the cursor height can vary freely, so for simplicity we'll just expose all square+POT sizes between each platform's min and max cursor limits. Depending on the platform this will give us one of three results: - 64x64,128x128,256x256,512x512 - 64x64,128x128,256x256 - 64x64 Cc: Simon Ser Cc: Jonas Ådahl Cc: Daniel Stone Cc: Sameer Lattannavar Cc: Sebastian Wick Cc: Harry Wentland Cc: Pekka Paalanen Signed-off-by: Ville Syrjälä --- drivers/gpu/drm/i915/display/intel_cursor.c | 24 +++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c b/drivers/gpu/drm/i915/display/intel_cursor.c index f8b33999d43f..49e9b9be2235 100644 --- a/drivers/gpu/drm/i915/display/intel_cursor.c +++ b/drivers/gpu/drm/i915/display/intel_cursor.c @@ -823,6 +823,28 @@ static const struct drm_plane_funcs intel_cursor_plane_funcs = { .format_mod_supported = intel_cursor_format_mod_supported, }; +static void intel_cursor_add_size_hints_property(struct intel_plane *plane) +{ + struct drm_i915_private *i915 = to_i915(plane->base.dev); + const struct drm_mode_config *config = &i915->drm.mode_config; + struct drm_plane_size_hint hints[4]; + int size, max_size, num_hints = 0; + + max_size = min(config->cursor_width, config->cursor_height); + + /* for simplicity only enumerate the supported square+POT sizes */ + for (size = 64; size <= max_size; size *= 2) { + if (drm_WARN_ON(&i915->drm, num_hints >= ARRAY_SIZE(hints))) + break; + + hints[num_hints].width = size; + hints[num_hints].height = size; + num_hints++; + } + + drm_plane_add_size_hints_property(&plane->base, hints, num_hints); +} + struct intel_plane * intel_cursor_plane_create(struct drm_i915_private *dev_priv, enum pipe pipe) @@ -881,6 +903,8 @@ intel_cursor_plane_create(struct drm_i915_private *dev_priv, DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_180); + intel_cursor_add_size_hints_property(cursor); + zpos = DISPLAY_RUNTIME_INFO(dev_priv)->num_sprites[pipe] + 1; drm_plane_create_zpos_immutable_property(&cursor->base, zpos);