[igt-dev] [PATCH i-g-t 2/3] lib/igt_sysfs: Add RPS sysfs helpers
Kamil Konieczny
kamil.konieczny at linux.intel.com
Thu Apr 21 15:49:37 UTC 2022
Hi Ashutosh,
On 2022-04-19 at 23:12:50 -0700, Ashutosh Dixit wrote:
> From: Umesh Nerlige Ramappa <umesh.nerlige.ramappa at intel.com>
>
> RPS sysfs files exposed by the kernel can either be in per-gt sysfs or in
> the per-device legacy sysfs. Add helpers to read/write these files in
> either of the two sets of locations.
>
> v2: Added function descriptions (Kamil)
> Separated patch from "lib/igt_sysfs: Add helpers to iterate over GTs"
>
> Cc: Kamil Konieczny <kamil.konieczny at linux.intel.com>
> Cc: Andi Shyti <andi.shyti at intel.com>
> Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> Cc: Sujaritha Sundaresan <sujaritha.sundaresan at intel.com>
> Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa at intel.com>
> Signed-off-by: Ashutosh Dixit <ashutosh.dixit at intel.com>
> ---
> lib/igt_sysfs.c | 90 +++++++++++++++++++++++++++++++++++++++++++++++++
> lib/igt_sysfs.h | 54 +++++++++++++++++++++++++++++
> 2 files changed, 144 insertions(+)
>
> diff --git a/lib/igt_sysfs.c b/lib/igt_sysfs.c
> index b167c0507039..0ac5d2a3d6e5 100644
> --- a/lib/igt_sysfs.c
> +++ b/lib/igt_sysfs.c
> @@ -54,6 +54,96 @@
> * provides basic support for like igt_sysfs_open().
> */
>
> +enum {
> + GT,
> + RPS,
> +
> + SYSFS_NUM_TYPES,
> +};
> +
> +static const char *i915_attr_name[SYSFS_NUM_TYPES][SYSFS_NUM_ATTR] = {
> + {
> + "gt_act_freq_mhz",
> + "gt_cur_freq_mhz",
> + "gt_min_freq_mhz",
> + "gt_max_freq_mhz",
> + "gt_RP0_freq_mhz",
> + "gt_RP1_freq_mhz",
> + "gt_RPn_freq_mhz",
> + "gt_idle_freq_mhz",
> + "gt_boost_freq_mhz",
> + "power/rc6_enable",
> + "power/rc6_residency_ms",
> + "power/rc6p_residency_ms",
> + "power/rc6pp_residency_ms",
> + "power/media_rc6_residency_ms",
> + },
> + {
> + "rps_act_freq_mhz",
> + "rps_cur_freq_mhz",
> + "rps_min_freq_mhz",
> + "rps_max_freq_mhz",
> + "rps_RP0_freq_mhz",
> + "rps_RP1_freq_mhz",
> + "rps_RPn_freq_mhz",
> + "rps_idle_freq_mhz",
> + "rps_boost_freq_mhz",
> + "rc6_enable",
> + "rc6_residency_ms",
> + "rc6p_residency_ms",
> + "rc6pp_residency_ms",
> + "media_rc6_residency_ms",
> + },
> +};
> +
> +/**
> + * igt_sysfs_dir_id_to_name:
> + * @dir: sysfs directory fd
> + * @id: sysfs attribute id
> + *
> + * Returns attribute name corresponding to attribute id in either the
> + * per-gt or legacy per-device sysfs
> + *
> + * Returns:
> + * Attribute name in sysfs
> + */
> +const char *igt_sysfs_dir_id_to_name(int dir, enum i915_attr_id id)
> +{
> + igt_assert(id < SYSFS_NUM_ATTR);
What about id < 0 ?
> +
> + if (igt_sysfs_has_attr(dir, i915_attr_name[GT][id]))
> + return i915_attr_name[GT][id];
> + else if (igt_sysfs_has_attr(dir, i915_attr_name[RPS][id]))
------- ^
s/else //
> + return i915_attr_name[RPS][id];
> + else
------- ^
drop this else here, checkpatch warn:
WARNING: else is not generally useful after a break or return
#102: FILE: lib/igt_sysfs.c:118:
+ return i915_attr_name[RPS][id];
+ else
> + igt_assert_f(0, "Invalid sysfs dir\n");
and align this assert.
Rest looks good, with that fixed you can add my r-b tag.
Regards,
Kamil
> +}
> +
> +/**
> + * igt_sysfs_path_id_to_name:
> + * @path: sysfs directory path
> + * @id: sysfs attribute id
> + *
> + * Returns attribute name corresponding to attribute id in either the
> + * per-gt or legacy per-device sysfs
> + *
> + * Returns:
> + * Attribute name in sysfs
> + */
> +const char *igt_sysfs_path_id_to_name(const char *path, enum i915_attr_id id)
> +{
> + int dir;
> + const char *name;
> +
> + dir = open(path, O_RDONLY);
> + igt_assert(dir);
> +
> + name = igt_sysfs_dir_id_to_name(dir, id);
> + close(dir);
> +
> + return name;
> +}
> +
> /**
> * igt_sysfs_has_attr:
> * @dir: sysfs directory fd
> diff --git a/lib/igt_sysfs.h b/lib/igt_sysfs.h
> index 33317a969619..8e39b8fa9890 100644
> --- a/lib/igt_sysfs.h
> +++ b/lib/igt_sysfs.h
> @@ -38,11 +38,65 @@
> (dirfd__ = igt_sysfs_gt_open(i915__, gt__)) != -1; \
> close(dirfd__), gt__++)
>
> +#define igt_sysfs_rps_write(dir, id, data, len) \
> + igt_sysfs_write(dir, igt_sysfs_dir_id_to_name(dir, id), data, len)
> +
> +#define igt_sysfs_rps_read(dir, id, data, len) \
> + igt_sysfs_read(dir, igt_sysfs_dir_id_to_name(dir, id), data, len)
> +
> +#define igt_sysfs_rps_set(dir, id, value) \
> + igt_sysfs_set(dir, igt_sysfs_dir_id_to_name(dir, id), value)
> +
> +#define igt_sysfs_rps_get(dir, id) \
> + igt_sysfs_get(dir, igt_sysfs_dir_id_to_name(dir, id))
> +
> +#define igt_sysfs_rps_scanf(dir, id, fmt, ...) \
> + igt_sysfs_scanf(dir, igt_sysfs_dir_id_to_name(dir, id), fmt, ##__VA_ARGS__)
> +
> +#define igt_sysfs_rps_vprintf(dir, id, fmt, ap) \
> + igt_sysfs_vprintf(dir, igt_sysfs_dir_id_to_name(id), fmt, ap)
> +
> +#define igt_sysfs_rps_printf(dir, id, fmt, ...) \
> + igt_sysfs_printf(dir, igt_sysfs_dir_id_to_name(dir, id), fmt, ##__VA_ARGS__)
> +
> +#define igt_sysfs_rps_get_u32(dir, id) \
> + igt_sysfs_get_u32(dir, igt_sysfs_dir_id_to_name(dir, id))
> +
> +#define igt_sysfs_rps_set_u32(dir, id, value) \
> + igt_sysfs_set_u32(dir, igt_sysfs_dir_id_to_name(dir, id), value)
> +
> +#define igt_sysfs_rps_get_boolean(dir, id) \
> + igt_sysfs_get_boolean(dir, igt_sysfs_dir_id_to_name(dir, id))
> +
> +#define igt_sysfs_rps_set_boolean(dir, id, value) \
> + igt_sysfs_set_boolean(dir, igt_sysfs_dir_id_to_name(dir, id), value)
> +
> +enum i915_attr_id {
> + RPS_ACT_FREQ_MHZ,
> + RPS_CUR_FREQ_MHZ,
> + RPS_MIN_FREQ_MHZ,
> + RPS_MAX_FREQ_MHZ,
> + RPS_RP0_FREQ_MHZ,
> + RPS_RP1_FREQ_MHZ,
> + RPS_RPn_FREQ_MHZ,
> + RPS_IDLE_FREQ_MHZ,
> + RPS_BOOST_FREQ_MHZ,
> + RC6_ENABLE,
> + RC6_RESIDENCY_MS,
> + RC6P_RESIDENCY_MS,
> + RC6PP_RESIDENCY_MS,
> + MEDIA_RC6_RESIDENCY_MS,
> +
> + SYSFS_NUM_ATTR,
> +};
> +
> char *igt_sysfs_path(int device, char *path, int pathlen);
> 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);
> 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);
>
> int igt_sysfs_read(int dir, const char *attr, void *data, int len);
> int igt_sysfs_write(int dir, const char *attr, const void *data, int len);
> --
> 2.34.1
>
More information about the igt-dev
mailing list