[Intel-xe] [PATCH 1/1] drm/xe: Moving and renaming existing frequency sysfs attributes

Sundaresan, Sujaritha sujaritha.sundaresan at intel.com
Mon Nov 20 14:23:08 UTC 2023


On 11/20/2023 9:02 AM, Sundaresan, Sujaritha wrote:
>
> On 11/18/2023 3:03 AM, Rodrigo Vivi wrote:
>> On Wed, Nov 15, 2023 at 08:31:11AM +0530, Sujaritha Sundaresan wrote:
>>> Creating a new freq directory to move frequency sysfs attributes.
>>> Additonally, renaming the frequency sysfs to align with devfreq
>>> requirements.
>>>
>>> /device/tile<n>/gt<n>/freq
>>>             |- act_freq
>>>             |- cur_freq
>>>             |- max_freq
>>>             |- min_freq
>>>             |- rp0_freq
>>>             |- rpn_freq
>>>             |- rpe_freq
>>>
>> on top of this we should become future proof by having a possibility of
>> N freq directory for different domains/PLLs.
>>
>> /device/tile<n>/gt<n>/freq<n>
>>
>> under each freq dir a file 'name' that would contain the differentiator
>> name. probably useful already on PVC with media freq, although there
>> we could only read the act_freq.
>>
>> But this patch is great. Thanks for taking care of this!
>>
>> Reviewed-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
>
> Hi Rodrigo !
>
> Thanks for the review. Agree that it would good to have this future 
> proof.
>
> Will merge this one for now, along with the needed IGT fixes.
>
> Thanks,
>
> Suja
>
>>
>>> Signed-off-by: Sujaritha Sundaresan <sujaritha.sundaresan at intel.com>
>>> ---
>>>   drivers/gpu/drm/xe/xe_guc_pc.c | 65 
>>> ++++++++++++++++++----------------
>>>   1 file changed, 34 insertions(+), 31 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/xe/xe_guc_pc.c 
>>> b/drivers/gpu/drm/xe/xe_guc_pc.c
>>> index f4ac76d6b2dd..5d64cd041db2 100644
>>> --- a/drivers/gpu/drm/xe/xe_guc_pc.c
>>> +++ b/drivers/gpu/drm/xe/xe_guc_pc.c
>>> @@ -57,15 +57,15 @@
>>>    * Xe's GuC PC provides a sysfs API for frequency management:
>>>    *
>>>    * device/gt#/freq_* *read-only* files:
>>> - * - freq_act: The actual resolved frequency decided by PCODE.
>>> - * - freq_cur: The current one requested by GuC PC to the Hardware.
>>> - * - freq_rpn: The Render Performance (RP) N level, which is the 
>>> minimal one.
>>> - * - freq_rpe: The Render Performance (RP) E level, which is the 
>>> efficient one.
>>> - * - freq_rp0: The Render Performance (RP) 0 level, which is the 
>>> maximum one.
>>> + * - act_freq: The actual resolved frequency decided by PCODE.
>>> + * - cur_freq: The current one requested by GuC PC to the Hardware.
>>> + * - rpn_freq: The Render Performance (RP) N level, which is the 
>>> minimal one.
>>> + * - rpe_freq: The Render Performance (RP) E level, which is the 
>>> efficient one.
>>> + * - rp0_freq: The Render Performance (RP) 0 level, which is the 
>>> maximum one.
>>>    *
>>>    * device/gt#/freq_* *read-write* files:
>>> - * - freq_min: GuC PC min request.
>>> - * - freq_max: GuC PC max request.
>>> + * - min_freq: GuC PC min request.
>>> + * - max_freq: GuC PC max request.
>>>    *             If max <= min, then freq_min becomes a fixed 
>>> frequency request.
>>>    *
>>>    * Render-C States:
>>> @@ -385,7 +385,7 @@ static void pc_update_rp_values(struct xe_guc_pc 
>>> *pc)
>>>       pc->rpn_freq = min(pc->rpn_freq, pc->rpe_freq);
>>>   }
>>>   -static ssize_t freq_act_show(struct device *dev,
>>> +static ssize_t act_freq_show(struct device *dev,
>>>                    struct device_attribute *attr, char *buf)
>>>   {
>>>       struct kobject *kobj = &dev->kobj;
>>> @@ -410,9 +410,9 @@ static ssize_t freq_act_show(struct device *dev,
>>>       xe_device_mem_access_put(gt_to_xe(gt));
>>>       return ret;
>>>   }
>>> -static DEVICE_ATTR_RO(freq_act);
>>> +static DEVICE_ATTR_RO(act_freq);
>>>   -static ssize_t freq_cur_show(struct device *dev,
>>> +static ssize_t cur_freq_show(struct device *dev,
>>>                    struct device_attribute *attr, char *buf)
>>>   {
>>>       struct kobject *kobj = &dev->kobj;
>>> @@ -439,18 +439,18 @@ static ssize_t freq_cur_show(struct device *dev,
>>>       xe_device_mem_access_put(gt_to_xe(gt));
>>>       return ret;
>>>   }
>>> -static DEVICE_ATTR_RO(freq_cur);
>>> +static DEVICE_ATTR_RO(cur_freq);
>>>   -static ssize_t freq_rp0_show(struct device *dev,
>>> +static ssize_t rp0_freq_show(struct device *dev,
>>>                    struct device_attribute *attr, char *buf)
>>>   {
>>>       struct xe_guc_pc *pc = dev_to_pc(dev);
>>>         return sysfs_emit(buf, "%d\n", pc->rp0_freq);
>>>   }
>>> -static DEVICE_ATTR_RO(freq_rp0);
>>> +static DEVICE_ATTR_RO(rp0_freq);
>>>   -static ssize_t freq_rpe_show(struct device *dev,
>>> +static ssize_t rpe_freq_show(struct device *dev,
>>>                    struct device_attribute *attr, char *buf)
>>>   {
>>>       struct xe_guc_pc *pc = dev_to_pc(dev);
>>> @@ -462,18 +462,18 @@ static ssize_t freq_rpe_show(struct device *dev,
>>>       xe_device_mem_access_put(xe);
>>>       return sysfs_emit(buf, "%d\n", pc->rpe_freq);
>>>   }
>>> -static DEVICE_ATTR_RO(freq_rpe);
>>> +static DEVICE_ATTR_RO(rpe_freq);
>>>   -static ssize_t freq_rpn_show(struct device *dev,
>>> +static ssize_t rpn_freq_show(struct device *dev,
>>>                    struct device_attribute *attr, char *buf)
>>>   {
>>>       struct xe_guc_pc *pc = dev_to_pc(dev);
>>>         return sysfs_emit(buf, "%d\n", pc->rpn_freq);
>>>   }
>>> -static DEVICE_ATTR_RO(freq_rpn);
>>> +static DEVICE_ATTR_RO(rpn_freq);
>>>   -static ssize_t freq_min_show(struct device *dev,
>>> +static ssize_t min_freq_show(struct device *dev,
>>>                    struct device_attribute *attr, char *buf)
>>>   {
>>>       struct xe_guc_pc *pc = dev_to_pc(dev);
>>> @@ -510,7 +510,7 @@ static ssize_t freq_min_show(struct device *dev,
>>>       return ret;
>>>   }
>>>   -static ssize_t freq_min_store(struct device *dev, struct 
>>> device_attribute *attr,
>>> +static ssize_t min_freq_store(struct device *dev, struct 
>>> device_attribute *attr,
>>>                     const char *buff, size_t count)
>>>   {
>>>       struct xe_guc_pc *pc = dev_to_pc(dev);
>>> @@ -540,9 +540,9 @@ static ssize_t freq_min_store(struct device 
>>> *dev, struct device_attribute *attr,
>>>       xe_device_mem_access_put(pc_to_xe(pc));
>>>       return ret ?: count;
>>>   }
>>> -static DEVICE_ATTR_RW(freq_min);
>>> +static DEVICE_ATTR_RW(min_freq);
>>>   -static ssize_t freq_max_show(struct device *dev,
>>> +static ssize_t max_freq_show(struct device *dev,
>>>                    struct device_attribute *attr, char *buf)
>>>   {
>>>       struct xe_guc_pc *pc = dev_to_pc(dev);
>>> @@ -568,7 +568,7 @@ static ssize_t freq_max_show(struct device *dev,
>>>       return ret;
>>>   }
>>>   -static ssize_t freq_max_store(struct device *dev, struct 
>>> device_attribute *attr,
>>> +static ssize_t max_freq_store(struct device *dev, struct 
>>> device_attribute *attr,
>>>                     const char *buff, size_t count)
>>>   {
>>>       struct xe_guc_pc *pc = dev_to_pc(dev);
>>> @@ -598,7 +598,7 @@ static ssize_t freq_max_store(struct device 
>>> *dev, struct device_attribute *attr,
>>>       xe_device_mem_access_put(pc_to_xe(pc));
>>>       return ret ?: count;
>>>   }
>>> -static DEVICE_ATTR_RW(freq_max);
>>> +static DEVICE_ATTR_RW(max_freq);
>>>     /**
>>>    * xe_guc_pc_c_status - get the current GT C state
>>> @@ -664,13 +664,13 @@ u64 xe_guc_pc_mc6_residency(struct xe_guc_pc *pc)
>>>   }
>>>     static const struct attribute *pc_attrs[] = {
>>> -    &dev_attr_freq_act.attr,
>>> -    &dev_attr_freq_cur.attr,
>>> -    &dev_attr_freq_rp0.attr,
>>> -    &dev_attr_freq_rpe.attr,
>>> -    &dev_attr_freq_rpn.attr,
>>> -    &dev_attr_freq_min.attr,
>>> -    &dev_attr_freq_max.attr,
>>> +    &dev_attr_act_freq.attr,
>>> +    &dev_attr_cur_freq.attr,
>>> +    &dev_attr_rp0_freq.attr,
>>> +    &dev_attr_rpe_freq.attr,
>>> +    &dev_attr_rpn_freq.attr,
>>> +    &dev_attr_min_freq.attr,
>>> +    &dev_attr_max_freq.attr,
>>>       NULL
>>>   };
>>>   @@ -950,6 +950,7 @@ int xe_guc_pc_init(struct xe_guc_pc *pc)
>>>       struct xe_tile *tile = gt_to_tile(gt);
>>>       struct xe_device *xe = gt_to_xe(gt);
>>>       struct xe_bo *bo;
>>> +    struct kobject *kobj;
>>>       u32 size = PAGE_ALIGN(sizeof(struct slpc_shared_data));
>>>       int err;
>>>   @@ -965,7 +966,9 @@ int xe_guc_pc_init(struct xe_guc_pc *pc)
>>>         pc->bo = bo;
>>>   -    err = sysfs_create_files(gt->sysfs, pc_attrs);
>>> +    kobj = kobject_create_and_add("freq", gt->sysfs);
>>> +
>>> +    err = sysfs_create_files(kobj, pc_attrs);
>>>       if (err)
>>>           return err;
>>>   --
>>> 2.25.1
>>>
Patch is merged.

Thanks,

Suja



More information about the Intel-xe mailing list