From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id B26E710E19F for ; Wed, 5 Jul 2023 13:14:17 +0000 (UTC) From: Himal Prasad Ghimiray To: igt-dev@lists.freedesktop.org Date: Wed, 5 Jul 2023 18:48:50 +0530 Message-Id: <20230705131853.545449-2-himal.prasad.ghimiray@intel.com> In-Reply-To: <20230705131853.545449-1-himal.prasad.ghimiray@intel.com> References: <20230705131853.545449-1-himal.prasad.ghimiray@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [igt-dev] [PATCH i-g-t v6 1/4] lib/igt_sysfs: Add support to query number of tiles List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Upadhyay Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" List-ID: With tile and GT seperation in KMD, we need to know number of tiles supported by platform. We will need to access tile associated properties from IGT. Hence adding iterator for all supported tiles. v2: - Calculate number of tiles once within iterator. (Rahul) - Use snprintf instead of sprintf. v3: - Remove unrequired for_each_sysfs_tile_dirfd (Ashutosh) Reviewed-by: Upadhyay Cc: Ashutosh Dixit Cc: Aravind Iddamsetty Cc: Upadhyay Cc: Janga Rahul Kumar Signed-off-by: Himal Prasad Ghimiray --- lib/igt_sysfs.c | 30 ++++++++++++++++++++++++++++++ lib/igt_sysfs.h | 7 +++++++ 2 files changed, 37 insertions(+) diff --git a/lib/igt_sysfs.c b/lib/igt_sysfs.c index 0876f4c6b..2ea9eb1b9 100644 --- a/lib/igt_sysfs.c +++ b/lib/igt_sysfs.c @@ -287,6 +287,36 @@ int igt_sysfs_get_num_gt(int device) return num_gts; } +/** + * igt_sysfs_get_num_tiles: + * @device: fd of the device + * + * Reads number of tiles sysfs entries. + * Asserts for at least one tile entry. + * + * Returns: Number of tiles. + */ +int igt_sysfs_get_num_tiles(int device) +{ + int num_tiles; + char sysfs[48]; + char tiledir[96]; + + num_tiles = 0; + if (!igt_sysfs_path(device, sysfs, sizeof(sysfs))) + return -1; + + do { + igt_assert(snprintf(tiledir, sizeof(tiledir), "%s/device/tile%d", + sysfs, num_tiles) < sizeof(tiledir)); + num_tiles++; + } while (!access(tiledir, F_OK)); + + num_tiles--; + igt_assert_f(num_tiles > 0, "No tiles sysfs entry is found."); + return num_tiles; +} + /** * igt_sysfs_write: * @dir: directory for the device from igt_sysfs_open() diff --git a/lib/igt_sysfs.h b/lib/igt_sysfs.h index 5635fc690..c31765542 100644 --- a/lib/igt_sysfs.h +++ b/lib/igt_sysfs.h @@ -73,6 +73,12 @@ #define igt_sysfs_rps_set_boolean(dir, id, value) \ igt_sysfs_set_boolean(dir, igt_sysfs_dir_id_to_name(dir, id), value) +#define xe_for_each_tile(xe__, tile__, tile_cnt__) \ + for (tile__ = 0, tile_cnt__ = igt_sysfs_get_num_tiles(xe__); \ + tile__ < tile_cnt__; \ + ++tile__) + + enum i915_attr_id { RPS_ACT_FREQ_MHZ, RPS_CUR_FREQ_MHZ, @@ -97,6 +103,7 @@ int igt_sysfs_open(int device); char *igt_sysfs_gt_path(int device, int gt, char *path, int pathlen); int igt_sysfs_gt_open(int device, int gt); int igt_sysfs_get_num_gt(int device); +int igt_sysfs_get_num_tiles(int device); bool igt_sysfs_has_attr(int dir, const char *attr); const char *igt_sysfs_dir_id_to_name(int dir, enum i915_attr_id id); const char *igt_sysfs_path_id_to_name(const char *path, enum i915_attr_id id); -- 2.25.1