[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