> -----Original Message-----
> From: Vivi, Rodrigo <rodrigo.v...@intel.com>
> Sent: Friday, July 21, 2023 2:34 AM
> To: intel-gfx@lists.freedesktop.org
> Cc: Vivi, Rodrigo <rodrigo.v...@intel.com>; Gupta, Anshuman
> <anshuman.gu...@intel.com>
> Subject: [PATCH 2/4] drm/xe: Move d3cold_allowed decision all together.
>
> And let's use the VRAM threshold to keep d3cold temporarily disabled.
>
> With this we have the ability to run D3Cold experiments just by touching the
> vram_d3cold_threshold sysfs entry.
>
> Cc: Anshuman Gupta <anshuman.gu...@intel.com>
> Signed-off-by: Rodrigo Vivi <rodrigo.v...@intel.com>
LGTM,
Reviewed-by: Anshuman Gupta <anshuman.gu...@intel.com>
> ---
> drivers/gpu/drm/xe/xe_pci.c | 15 +--------------
> drivers/gpu/drm/xe/xe_pm.c | 5 +++++ drivers/gpu/drm/xe/xe_pm.h | 7
> ++++++-
> 3 files changed, 12 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
> index 0c4051f4f746..06759afb4224 100644
> --- a/drivers/gpu/drm/xe/xe_pci.c
> +++ b/drivers/gpu/drm/xe/xe_pci.c
> @@ -834,20 +834,7 @@ static int xe_pci_runtime_idle(struct device *dev)
> struct pci_dev *pdev = to_pci_dev(dev);
> struct xe_device *xe = pdev_to_xe_device(pdev);
>
> - if (!xe->d3cold.capable) {
> - xe->d3cold.allowed = false;
> - } else {
> - xe_pm_d3cold_allowed_toggle(xe);
> -
> - /*
> - * TODO: d3cold should be allowed (true) if
> - * (IS_DGFX(xe) && !xe_device_mem_access_ongoing(xe))
> - * but maybe include some other conditions. So, before
> - * we can re-enable the D3cold, we need to:
> - * 1. rewrite the VRAM save / restore to avoid buffer object
> locks
> - */
> - xe->d3cold.allowed = false;
> - }
> + xe_pm_d3cold_allowed_toggle(xe);
>
> return 0;
> }
> diff --git a/drivers/gpu/drm/xe/xe_pm.c b/drivers/gpu/drm/xe/xe_pm.c
> index 17a69b7af155..a6459df2599e 100644
> --- a/drivers/gpu/drm/xe/xe_pm.c
> +++ b/drivers/gpu/drm/xe/xe_pm.c
> @@ -326,6 +326,11 @@ void xe_pm_d3cold_allowed_toggle(struct
> xe_device *xe)
> u64 vram_used;
> int i;
>
> + if (!xe->d3cold.capable) {
> + xe->d3cold.allowed = false;
> + return;
> + }
> +
> for (i = XE_PL_VRAM0; i <= XE_PL_VRAM1; ++i) {
> man = ttm_manager_type(&xe->ttm, i);
> if (man) {
> diff --git a/drivers/gpu/drm/xe/xe_pm.h b/drivers/gpu/drm/xe/xe_pm.h
> index 08a633ce5145..6b9031f7af24 100644
> --- a/drivers/gpu/drm/xe/xe_pm.h
> +++ b/drivers/gpu/drm/xe/xe_pm.h
> @@ -8,7 +8,12 @@
>
> #include <linux/pm_runtime.h>
>
> -#define DEFAULT_VRAM_THRESHOLD 300 /* in MB */
> +/*
> + * TODO: Threshold = 0 will block D3Cold.
> + * Before we can move this to a higher value (like 300), we need to:
> + * 1. rewrite the VRAM save / restore to avoid buffer object locks
> + */
> +#define DEFAULT_VRAM_THRESHOLD 0 /* in MB */
>
> struct xe_device;
>
> --
> 2.41.0