[PATCH v3 07/13] drm/xe/configfs: Allow to enable PSMI

Riana Tauro riana.tauro at intel.com
Wed Aug 13 17:38:35 UTC 2025


Hi Lucas

On 8/13/2025 4:53 PM, Lucas De Marchi wrote:
> On Wed, Aug 13, 2025 at 12:28:07PM +0530, Riana Tauro wrote:
>>
>>
>> On 8/8/2025 10:59 PM, Lucas De Marchi wrote:
>>> Now that additional WAs are in place and it's possible to allocate
>>> buffers through debugfs, add the configfs attribute to turn PSMI on.
>>>
>>> Cc: Matt Roper <matthew.d.roper at intel.com>
>>> Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>
>>> Cc: John Harrison <John.C.Harrison at Intel.com>
>>> Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
>>> ---
>>>  drivers/gpu/drm/xe/xe_configfs.c | 66 ++++++++++++++++++++++++++++++ 
>>> +++++++---
>>>  drivers/gpu/drm/xe/xe_configfs.h |  2 +-
>>>  2 files changed, 63 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/ 
>>> xe_configfs.c
>>> index 17b1d6ae1ff6a..8cf6b1375b7d4 100644
>>> --- a/drivers/gpu/drm/xe/xe_configfs.c
>>> +++ b/drivers/gpu/drm/xe/xe_configfs.c
>>> @@ -77,6 +77,16 @@
>>>   * available for migrations, but it's disabled. This is intended for 
>>> debugging
>>>   * purposes only.
>>>   *
>>> + * PSMI
>>> + * ----
>>> + *
>>> + * Enable extra debugging capabilities to trace engine execution. 
>>> Only useful
>>> + * during early platform enabling and requiring additional hardware 
>>> connected.
>>
>> %s/requiring/requires
>>
>>> + * Once it's enabled, additionals WAs are added and runtime 
>>> configuration is
>>> + * done via debugfs. Example to enable it::
>>> + *
>>> + *    # echo 1 > /sys/kernel/config/xe/0000:03:00.0/enable_psmi
>>> + *
>>>   * Remove devices
>>>   * ==============
>>>   *
>>> @@ -89,8 +99,9 @@ struct xe_config_group_device {
>>>      struct config_group group;
>>>      struct xe_config_device {
>>> -        bool survivability_mode;
>>>          u64 engines_allowed;
>>> +        bool survivability_mode;
>>> +        bool enable_psmi;
>>>      } config;
>>>      /* protects attributes */
>>> @@ -98,8 +109,9 @@ struct xe_config_group_device {
>>>  };
>>>  static const struct xe_config_device device_defaults = {
>>> -    .survivability_mode = false,
>>>      .engines_allowed = U64_MAX,
>>> +    .survivability_mode = false,
>>> +    .enable_psmi = false,
>>>  };
>>>  static void set_device_defaults(struct xe_config_device *config)
>>> @@ -243,12 +255,38 @@ static ssize_t engines_allowed_store(struct 
>>> config_item *item, const char *page,
>>>      return len;
>>>  }
>>> -CONFIGFS_ATTR(, survivability_mode);
>>> +static ssize_t enable_psmi_show(struct config_item *item, char *page)
>>> +{
>>> +    struct xe_config_group_device *dev = 
>>> to_xe_config_group_device(item);
>>
>> To have consistency with other functions, we can use
>>
>> struct xe_config_device *dev = to_xe_config_device(item);
> 
> The struct and function got renamed a week or so ago. I think you don't
> have this commit in the codebase you are looking at:
> 

I do have that commit. It was again changed in

3c643f621621 ("drm/xe/configfs: Reintroduce struct xe_config_device")

It is trivial so not necessary and works fine.

Thanks
Riana

> 88df7939d728 ("drm/xe/configfs: Rename struct xe_config_device")
> 
> thanks
> Lucas De Marchi
> 
>>
>>> +
>>> +    return sprintf(page, "%d\n", dev->config.enable_psmi);
>>> +}
>>> +
>>> +static ssize_t enable_psmi_store(struct config_item *item, const 
>>> char *page, size_t len)
>>> +{
>>> +    struct xe_config_group_device *dev = 
>>> to_xe_config_group_device(item);
>>> +    bool val;
>>> +    int ret;
>>> +
>>> +    ret = kstrtobool(page, &val);
>>> +    if (ret)
>>> +        return ret;
>>> +
>>> +    mutex_lock(&dev->lock);
>>> +    dev->config.enable_psmi = val;
>>> +    mutex_unlock(&dev->lock);
>>> +
>>> +    return len;
>>> +}
>>> +
>>>  CONFIGFS_ATTR(, engines_allowed);
>>> +CONFIGFS_ATTR(, survivability_mode);
>>> +CONFIGFS_ATTR(, enable_psmi);
>>
>> alphabetical?
>>
>> Thanks
>> Riana
>>
>>>  static struct configfs_attribute *xe_config_device_attrs[] = {
>>> -    &attr_survivability_mode,
>>>      &attr_engines_allowed,
>>> +    &attr_survivability_mode,
>>> +    &attr_enable_psmi,
>>>      NULL,
>>>  };
>>> @@ -443,6 +481,26 @@ u64 xe_configfs_get_engines_allowed(struct 
>>> pci_dev *pdev)
>>>      return engines_allowed;
>>>  }
>>> +/**
>>> + * xe_configfs_get_psmi_enabled - get configfs enable_psmi setting
>>> + * @pdev: pci device
>>> + *
>>> + * Return: enable_psmi setting in configfs
>>> + */
>>> +bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev)
>>> +{
>>> +    struct xe_config_group_device *dev = 
>>> find_xe_config_group_device(pdev);
>>> +    bool ret;
>>> +
>>> +    if (!dev)
>>> +        return false;
>>> +
>>> +    ret = dev->config.enable_psmi;
>>> +    config_item_put(&dev->group.cg_item);
>>> +
>>> +    return ret;
>>> +}
>>> +
>>>  int __init xe_configfs_init(void)
>>>  {
>>>      int ret;
>>> diff --git a/drivers/gpu/drm/xe/xe_configfs.h b/drivers/gpu/drm/xe/ 
>>> xe_configfs.h
>>> index c14588b86e833..603dd7796c8b2 100644
>>> --- a/drivers/gpu/drm/xe/xe_configfs.h
>>> +++ b/drivers/gpu/drm/xe/xe_configfs.h
>>> @@ -16,7 +16,7 @@ void xe_configfs_exit(void);
>>>  bool xe_configfs_get_survivability_mode(struct pci_dev *pdev);
>>>  void xe_configfs_clear_survivability_mode(struct pci_dev *pdev);
>>>  u64 xe_configfs_get_engines_allowed(struct pci_dev *pdev);
>>> -static inline bool xe_configfs_get_psmi_enabled(struct pci_dev 
>>> *pdev) { return false; }
>>> +bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev);
>>>  #else
>>>  static inline int xe_configfs_init(void) { return 0; }
>>>  static inline void xe_configfs_exit(void) { }
>>>
>>



More information about the Intel-xe mailing list