* [PATCH 0/2] drm/i915/gt: Expose per gt defaults in sysfs
@ 2022-07-19 1:07 Ashutosh Dixit
2022-07-19 1:07 ` [PATCH 1/2] drm/i915/gt: Create gt/gtN/.defaults/ for per gt sysfs defaults Ashutosh Dixit
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Ashutosh Dixit @ 2022-07-19 1:07 UTC (permalink / raw)
To: intel-gfx, dri-devel; +Cc: Tvrtko Ursulin, Andi Shyti
Create a gt/gtN/.defaults/ directory (similar to
engine/<engine-name>/.defaults/) to expose default parameter values for each
gt in sysfs. This allows userspace to restore default parameter values
after they may have changed.
Patch 1: Creates the gt/gtN/.defaults/ directory
Patch 2: Adds per-gt RPS defaults (rps_max_freq_mhz and rps_min_freq_mhz)
to gt/gtN/.defaults/
An approved Level-0/oneAPI UMD pull request which consumes the exposed
defaults can be seen here:
https://github.com/intel/compute-runtime/pull/552
The UMD pull request will be merged if/after this series is merged to i915.
Previous discussion on these patches can be seen here:
https://patchwork.freedesktop.org/patch/484238/?series=102665&rev=4
https://patchwork.freedesktop.org/patch/483988/?series=102665&rev=3
Cc: Matt Roper <matthew.d.roper@intel.com>
Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
Cc: Andi Shyti <andi.shyti@linux.intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Ashutosh Dixit (2):
drm/i915/gt: Create gt/gtN/.defaults/ for per gt sysfs defaults
drm/i915/gt: Expose per-gt RPS defaults in sysfs
drivers/gpu/drm/i915/gt/intel_gt_sysfs.c | 10 +++---
drivers/gpu/drm/i915/gt/intel_gt_sysfs.h | 6 ++++
drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.c | 34 +++++++++++++++++++++
drivers/gpu/drm/i915/gt/intel_gt_types.h | 9 ++++++
drivers/gpu/drm/i915/gt/intel_rps.c | 2 ++
drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c | 12 +++++---
6 files changed, 64 insertions(+), 9 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 1/2] drm/i915/gt: Create gt/gtN/.defaults/ for per gt sysfs defaults
2022-07-19 1:07 [PATCH 0/2] drm/i915/gt: Expose per gt defaults in sysfs Ashutosh Dixit
@ 2022-07-19 1:07 ` Ashutosh Dixit
2022-07-19 1:07 ` [PATCH 2/2] drm/i915/gt: Expose per-gt RPS defaults in sysfs Ashutosh Dixit
2022-07-19 10:19 ` [Intel-gfx] [PATCH 0/2] drm/i915/gt: Expose per gt " Rodrigo Vivi
2 siblings, 0 replies; 4+ messages in thread
From: Ashutosh Dixit @ 2022-07-19 1:07 UTC (permalink / raw)
To: intel-gfx, dri-devel; +Cc: Tvrtko Ursulin, Andi Shyti
Create a gt/gtN/.defaults/ directory (similar to
engine/<engine-name>/.defaults/) to expose default parameter values for
each gt in sysfs. This allows userspace to restore default parameter values
after they have changed. The empty 'struct gt_defaults' will be populated
by subsequent patches.
v2: Changed 'struct intel_rps_defaults rps_defaults' to
'struct gt_defaults defaults' (Andi)
Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
Cc: Andi Shyti <andi.shyti@linux.intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/i915/gt/intel_gt_sysfs.c | 5 +++++
drivers/gpu/drm/i915/gt/intel_gt_types.h | 7 +++++++
2 files changed, 12 insertions(+)
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_sysfs.c b/drivers/gpu/drm/i915/gt/intel_gt_sysfs.c
index 9e4ebf53379b..6447c0376dbd 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_sysfs.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt_sysfs.c
@@ -101,6 +101,10 @@ void intel_gt_sysfs_register(struct intel_gt *gt)
gt->i915->sysfs_gt, "gt%d", gt->info.id))
goto exit_fail;
+ gt->sysfs_defaults = kobject_create_and_add(".defaults", >->sysfs_gt);
+ if (!gt->sysfs_defaults)
+ goto exit_fail;
+
intel_gt_sysfs_pm_init(gt, >->sysfs_gt);
return;
@@ -113,5 +117,6 @@ void intel_gt_sysfs_register(struct intel_gt *gt)
void intel_gt_sysfs_unregister(struct intel_gt *gt)
{
+ kobject_put(gt->sysfs_defaults);
kobject_put(>->sysfs_gt);
}
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_types.h b/drivers/gpu/drm/i915/gt/intel_gt_types.h
index df708802889d..92839b9adb12 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_types.h
+++ b/drivers/gpu/drm/i915/gt/intel_gt_types.h
@@ -75,6 +75,9 @@ enum intel_submission_method {
INTEL_SUBMISSION_GUC,
};
+struct gt_defaults {
+};
+
struct intel_gt {
struct drm_i915_private *i915;
struct intel_uncore *uncore;
@@ -235,6 +238,10 @@ struct intel_gt {
/* gt/gtN sysfs */
struct kobject sysfs_gt;
+
+ /* sysfs defaults per gt */
+ struct gt_defaults defaults;
+ struct kobject *sysfs_defaults;
};
enum intel_gt_scratch_field {
--
2.34.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] drm/i915/gt: Expose per-gt RPS defaults in sysfs
2022-07-19 1:07 [PATCH 0/2] drm/i915/gt: Expose per gt defaults in sysfs Ashutosh Dixit
2022-07-19 1:07 ` [PATCH 1/2] drm/i915/gt: Create gt/gtN/.defaults/ for per gt sysfs defaults Ashutosh Dixit
@ 2022-07-19 1:07 ` Ashutosh Dixit
2022-07-19 10:19 ` [Intel-gfx] [PATCH 0/2] drm/i915/gt: Expose per gt " Rodrigo Vivi
2 siblings, 0 replies; 4+ messages in thread
From: Ashutosh Dixit @ 2022-07-19 1:07 UTC (permalink / raw)
To: intel-gfx, dri-devel; +Cc: Tvrtko Ursulin, Andi Shyti
Add the following sysfs files to gt/gtN/.defaults/:
* rps_min_freq_mhz
* rps_max_freq_mhz
v2: Correct gt/gtN/.defaults/* file names in commit message
v3: Remove rps_boost_freq_mhz since it is not consumed by userspace
Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
Cc: Andi Shyti <andi.shyti@linux.intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/i915/gt/intel_gt_sysfs.c | 5 ---
drivers/gpu/drm/i915/gt/intel_gt_sysfs.h | 6 ++++
drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.c | 34 +++++++++++++++++++++
drivers/gpu/drm/i915/gt/intel_gt_types.h | 2 ++
drivers/gpu/drm/i915/gt/intel_rps.c | 2 ++
drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c | 12 +++++---
6 files changed, 52 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_sysfs.c b/drivers/gpu/drm/i915/gt/intel_gt_sysfs.c
index 6447c0376dbd..d651ccd0ab20 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_sysfs.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt_sysfs.c
@@ -22,11 +22,6 @@ bool is_object_gt(struct kobject *kobj)
return !strncmp(kobj->name, "gt", 2);
}
-static struct intel_gt *kobj_to_gt(struct kobject *kobj)
-{
- return container_of(kobj, struct intel_gt, sysfs_gt);
-}
-
struct intel_gt *intel_gt_sysfs_get_drvdata(struct device *dev,
const char *name)
{
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_sysfs.h b/drivers/gpu/drm/i915/gt/intel_gt_sysfs.h
index a99aa7e8b01a..6232923a420d 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_sysfs.h
+++ b/drivers/gpu/drm/i915/gt/intel_gt_sysfs.h
@@ -10,6 +10,7 @@
#include <linux/kobject.h>
#include "i915_gem.h" /* GEM_BUG_ON() */
+#include "intel_gt_types.h"
struct intel_gt;
@@ -22,6 +23,11 @@ intel_gt_create_kobj(struct intel_gt *gt,
struct kobject *dir,
const char *name);
+static inline struct intel_gt *kobj_to_gt(struct kobject *kobj)
+{
+ return container_of(kobj, struct intel_gt, sysfs_gt);
+}
+
void intel_gt_sysfs_register(struct intel_gt *gt);
void intel_gt_sysfs_unregister(struct intel_gt *gt);
struct intel_gt *intel_gt_sysfs_get_drvdata(struct device *dev,
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.c b/drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.c
index 73a8b46e0234..e066cc33d9f2 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.c
@@ -727,6 +727,34 @@ static const struct attribute *media_perf_power_attrs[] = {
NULL
};
+static ssize_t
+default_min_freq_mhz_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
+{
+ struct intel_gt *gt = kobj_to_gt(kobj->parent);
+
+ return sysfs_emit(buf, "%u\n", gt->defaults.min_freq);
+}
+
+static struct kobj_attribute default_min_freq_mhz =
+__ATTR(rps_min_freq_mhz, 0444, default_min_freq_mhz_show, NULL);
+
+static ssize_t
+default_max_freq_mhz_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
+{
+ struct intel_gt *gt = kobj_to_gt(kobj->parent);
+
+ return sysfs_emit(buf, "%u\n", gt->defaults.max_freq);
+}
+
+static struct kobj_attribute default_max_freq_mhz =
+__ATTR(rps_max_freq_mhz, 0444, default_max_freq_mhz_show, NULL);
+
+static const struct attribute * const rps_defaults_attrs[] = {
+ &default_min_freq_mhz.attr,
+ &default_max_freq_mhz.attr,
+ NULL
+};
+
static int intel_sysfs_rps_init(struct intel_gt *gt, struct kobject *kobj,
const struct attribute * const *attrs)
{
@@ -776,4 +804,10 @@ void intel_gt_sysfs_pm_init(struct intel_gt *gt, struct kobject *kobj)
"failed to create gt%u media_perf_power_attrs sysfs (%pe)\n",
gt->info.id, ERR_PTR(ret));
}
+
+ ret = sysfs_create_files(gt->sysfs_defaults, rps_defaults_attrs);
+ if (ret)
+ drm_warn(>->i915->drm,
+ "failed to add gt%u rps defaults (%pe)\n",
+ gt->info.id, ERR_PTR(ret));
}
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_types.h b/drivers/gpu/drm/i915/gt/intel_gt_types.h
index 92839b9adb12..80f52532290e 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_types.h
+++ b/drivers/gpu/drm/i915/gt/intel_gt_types.h
@@ -76,6 +76,8 @@ enum intel_submission_method {
};
struct gt_defaults {
+ u32 min_freq;
+ u32 max_freq;
};
struct intel_gt {
diff --git a/drivers/gpu/drm/i915/gt/intel_rps.c b/drivers/gpu/drm/i915/gt/intel_rps.c
index fb3f57ee450b..c7d381ad90cf 100644
--- a/drivers/gpu/drm/i915/gt/intel_rps.c
+++ b/drivers/gpu/drm/i915/gt/intel_rps.c
@@ -1979,7 +1979,9 @@ void intel_rps_init(struct intel_rps *rps)
/* Derive initial user preferences/limits from the hardware limits */
rps->max_freq_softlimit = rps->max_freq;
+ rps_to_gt(rps)->defaults.max_freq = rps->max_freq_softlimit;
rps->min_freq_softlimit = rps->min_freq;
+ rps_to_gt(rps)->defaults.min_freq = rps->min_freq_softlimit;
/* After setting max-softlimit, find the overclock max freq */
if (GRAPHICS_VER(i915) == 6 || IS_IVYBRIDGE(i915) || IS_HASWELL(i915)) {
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c
index ec9c4ca0f615..e1fa1f32f29e 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c
@@ -575,20 +575,24 @@ static int slpc_set_softlimits(struct intel_guc_slpc *slpc)
* unless they have deviated from defaults, in which case,
* we retain the values and set min/max accordingly.
*/
- if (!slpc->max_freq_softlimit)
+ if (!slpc->max_freq_softlimit) {
slpc->max_freq_softlimit = slpc->rp0_freq;
- else if (slpc->max_freq_softlimit != slpc->rp0_freq)
+ slpc_to_gt(slpc)->defaults.max_freq = slpc->max_freq_softlimit;
+ } else if (slpc->max_freq_softlimit != slpc->rp0_freq) {
ret = intel_guc_slpc_set_max_freq(slpc,
slpc->max_freq_softlimit);
+ }
if (unlikely(ret))
return ret;
- if (!slpc->min_freq_softlimit)
+ if (!slpc->min_freq_softlimit) {
slpc->min_freq_softlimit = slpc->min_freq;
- else if (slpc->min_freq_softlimit != slpc->min_freq)
+ slpc_to_gt(slpc)->defaults.min_freq = slpc->min_freq_softlimit;
+ } else if (slpc->min_freq_softlimit != slpc->min_freq) {
return intel_guc_slpc_set_min_freq(slpc,
slpc->min_freq_softlimit);
+ }
return 0;
}
--
2.34.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Intel-gfx] [PATCH 0/2] drm/i915/gt: Expose per gt defaults in sysfs
2022-07-19 1:07 [PATCH 0/2] drm/i915/gt: Expose per gt defaults in sysfs Ashutosh Dixit
2022-07-19 1:07 ` [PATCH 1/2] drm/i915/gt: Create gt/gtN/.defaults/ for per gt sysfs defaults Ashutosh Dixit
2022-07-19 1:07 ` [PATCH 2/2] drm/i915/gt: Expose per-gt RPS defaults in sysfs Ashutosh Dixit
@ 2022-07-19 10:19 ` Rodrigo Vivi
2 siblings, 0 replies; 4+ messages in thread
From: Rodrigo Vivi @ 2022-07-19 10:19 UTC (permalink / raw)
To: Ashutosh Dixit; +Cc: intel-gfx, Andi Shyti, dri-devel
On Mon, Jul 18, 2022 at 06:07:06PM -0700, Ashutosh Dixit wrote:
> Create a gt/gtN/.defaults/ directory (similar to
> engine/<engine-name>/.defaults/) to expose default parameter values for each
> gt in sysfs. This allows userspace to restore default parameter values
> after they may have changed.
>
> Patch 1: Creates the gt/gtN/.defaults/ directory
> Patch 2: Adds per-gt RPS defaults (rps_max_freq_mhz and rps_min_freq_mhz)
> to gt/gtN/.defaults/
>
> An approved Level-0/oneAPI UMD pull request which consumes the exposed
> defaults can be seen here:
> https://github.com/intel/compute-runtime/pull/552
> The UMD pull request will be merged if/after this series is merged to i915.
Pushed to drm-intel-gt-next. Thanks for the patches.
>
> Previous discussion on these patches can be seen here:
> https://patchwork.freedesktop.org/patch/484238/?series=102665&rev=4
> https://patchwork.freedesktop.org/patch/483988/?series=102665&rev=3
>
> Cc: Matt Roper <matthew.d.roper@intel.com>
> Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
> Cc: Andi Shyti <andi.shyti@linux.intel.com>
> Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
>
> Ashutosh Dixit (2):
> drm/i915/gt: Create gt/gtN/.defaults/ for per gt sysfs defaults
> drm/i915/gt: Expose per-gt RPS defaults in sysfs
>
> drivers/gpu/drm/i915/gt/intel_gt_sysfs.c | 10 +++---
> drivers/gpu/drm/i915/gt/intel_gt_sysfs.h | 6 ++++
> drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.c | 34 +++++++++++++++++++++
> drivers/gpu/drm/i915/gt/intel_gt_types.h | 9 ++++++
> drivers/gpu/drm/i915/gt/intel_rps.c | 2 ++
> drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c | 12 +++++---
> 6 files changed, 64 insertions(+), 9 deletions(-)
>
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2022-07-19 10:19 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-07-19 1:07 [PATCH 0/2] drm/i915/gt: Expose per gt defaults in sysfs Ashutosh Dixit
2022-07-19 1:07 ` [PATCH 1/2] drm/i915/gt: Create gt/gtN/.defaults/ for per gt sysfs defaults Ashutosh Dixit
2022-07-19 1:07 ` [PATCH 2/2] drm/i915/gt: Expose per-gt RPS defaults in sysfs Ashutosh Dixit
2022-07-19 10:19 ` [Intel-gfx] [PATCH 0/2] drm/i915/gt: Expose per gt " Rodrigo Vivi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox