[PATCH] platform/x86/intel/pmc: Disable C1 auto-demotion during suspend

David E. Box posted 1 patch 1 week ago
drivers/platform/x86/intel/pmc/arl.c |  3 +--
drivers/platform/x86/intel/pmc/cnp.c | 28 +++++++++++++++++++++++++++-
drivers/platform/x86/intel/pmc/lnl.c |  3 +--
drivers/platform/x86/intel/pmc/mtl.c |  3 +--
4 files changed, 30 insertions(+), 7 deletions(-)
[PATCH] platform/x86/intel/pmc: Disable C1 auto-demotion during suspend
Posted by David E. Box 1 week ago
On some platforms, aggressive C1 auto-demotion may lead to failure to enter
the deepest C-state during suspend-to-idle, causing high power consumption.
To prevent this, disable C1 auto-demotion during suspend and re-enable on
resume.

Signed-off-by: David E. Box <david.e.box@linux.intel.com>
---
 drivers/platform/x86/intel/pmc/arl.c |  3 +--
 drivers/platform/x86/intel/pmc/cnp.c | 28 +++++++++++++++++++++++++++-
 drivers/platform/x86/intel/pmc/lnl.c |  3 +--
 drivers/platform/x86/intel/pmc/mtl.c |  3 +--
 4 files changed, 30 insertions(+), 7 deletions(-)

diff --git a/drivers/platform/x86/intel/pmc/arl.c b/drivers/platform/x86/intel/pmc/arl.c
index e10527c4e3e0..05dec4f5019f 100644
--- a/drivers/platform/x86/intel/pmc/arl.c
+++ b/drivers/platform/x86/intel/pmc/arl.c
@@ -687,9 +687,8 @@ static void arl_d3_fixup(void)
 static int arl_resume(struct pmc_dev *pmcdev)
 {
 	arl_d3_fixup();
-	pmc_core_send_ltr_ignore(pmcdev, 3, 0);
 
-	return pmc_core_resume_common(pmcdev);
+	return cnl_resume(pmcdev);
 }
 
 int arl_core_init(struct pmc_dev *pmcdev)
diff --git a/drivers/platform/x86/intel/pmc/cnp.c b/drivers/platform/x86/intel/pmc/cnp.c
index 513c02670c5a..5b8b3ac7f061 100644
--- a/drivers/platform/x86/intel/pmc/cnp.c
+++ b/drivers/platform/x86/intel/pmc/cnp.c
@@ -7,7 +7,8 @@
  * All Rights Reserved.
  *
  */
-
+#define DEBUG
+#include <linux/suspend.h>
 #include "core.h"
 
 /* Cannon Lake: PGD PFET Enable Ack Status Register(s) bitmap */
@@ -206,8 +207,24 @@ const struct pmc_reg_map cnp_reg_map = {
 	.etr3_offset = ETR3_OFFSET,
 };
 
+
+static DEFINE_PER_CPU(u64, pkg_cst_config);
+
 void cnl_suspend(struct pmc_dev *pmcdev)
 {
+	if (!pm_suspend_via_firmware()) {
+		u64 val;
+		int cpunum;
+
+		for_each_online_cpu(cpunum) {
+			rdmsrl_on_cpu(cpunum, MSR_PKG_CST_CONFIG_CONTROL, &val);
+			per_cpu(pkg_cst_config, cpunum) = val;
+			val &= ~NHM_C1_AUTO_DEMOTE;
+			wrmsrl_on_cpu(cpunum, MSR_PKG_CST_CONFIG_CONTROL, val);
+			pr_debug("%s: cpu:%d cst %llx\n", __func__, cpunum, val);
+		}
+	}
+
 	/*
 	 * Due to a hardware limitation, the GBE LTR blocks PC10
 	 * when a cable is attached. To unblock PC10 during suspend,
@@ -220,6 +237,15 @@ int cnl_resume(struct pmc_dev *pmcdev)
 {
 	pmc_core_send_ltr_ignore(pmcdev, 3, 0);
 
+	if (!pm_suspend_via_firmware()) {
+		int cpunum;
+
+		for_each_online_cpu(cpunum) {
+			pr_debug("%s: cpu:%d cst %llx\n", __func__, cpunum, per_cpu(pkg_cst_config, cpunum));
+			wrmsrl_on_cpu(cpunum, MSR_PKG_CST_CONFIG_CONTROL, per_cpu(pkg_cst_config, cpunum));
+		}
+	}
+
 	return pmc_core_resume_common(pmcdev);
 }
 
diff --git a/drivers/platform/x86/intel/pmc/lnl.c b/drivers/platform/x86/intel/pmc/lnl.c
index e7a8077d1a3e..be029f12cdf4 100644
--- a/drivers/platform/x86/intel/pmc/lnl.c
+++ b/drivers/platform/x86/intel/pmc/lnl.c
@@ -546,9 +546,8 @@ static void lnl_d3_fixup(void)
 static int lnl_resume(struct pmc_dev *pmcdev)
 {
 	lnl_d3_fixup();
-	pmc_core_send_ltr_ignore(pmcdev, 3, 0);
 
-	return pmc_core_resume_common(pmcdev);
+	return cnl_resume(pmcdev);
 }
 
 int lnl_core_init(struct pmc_dev *pmcdev)
diff --git a/drivers/platform/x86/intel/pmc/mtl.c b/drivers/platform/x86/intel/pmc/mtl.c
index 91f2fa728f5c..fc6a89b8979f 100644
--- a/drivers/platform/x86/intel/pmc/mtl.c
+++ b/drivers/platform/x86/intel/pmc/mtl.c
@@ -988,9 +988,8 @@ static void mtl_d3_fixup(void)
 static int mtl_resume(struct pmc_dev *pmcdev)
 {
 	mtl_d3_fixup();
-	pmc_core_send_ltr_ignore(pmcdev, 3, 0);
 
-	return pmc_core_resume_common(pmcdev);
+	return cnl_resume(pmcdev);
 }
 
 int mtl_core_init(struct pmc_dev *pmcdev)
-- 
2.43.0
Re: [PATCH] platform/x86/intel/pmc: Disable C1 auto-demotion during suspend
Posted by Ilpo Järvinen 1 week ago
On Tue, 1 Oct 2024, David E. Box wrote:

> On some platforms, aggressive C1 auto-demotion may lead to failure to enter
> the deepest C-state during suspend-to-idle, causing high power consumption.
> To prevent this, disable C1 auto-demotion during suspend and re-enable on
> resume.
> 
> Signed-off-by: David E. Box <david.e.box@linux.intel.com>
> ---
>  drivers/platform/x86/intel/pmc/arl.c |  3 +--
>  drivers/platform/x86/intel/pmc/cnp.c | 28 +++++++++++++++++++++++++++-
>  drivers/platform/x86/intel/pmc/lnl.c |  3 +--
>  drivers/platform/x86/intel/pmc/mtl.c |  3 +--
>  4 files changed, 30 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/platform/x86/intel/pmc/arl.c b/drivers/platform/x86/intel/pmc/arl.c
> index e10527c4e3e0..05dec4f5019f 100644
> --- a/drivers/platform/x86/intel/pmc/arl.c
> +++ b/drivers/platform/x86/intel/pmc/arl.c
> @@ -687,9 +687,8 @@ static void arl_d3_fixup(void)
>  static int arl_resume(struct pmc_dev *pmcdev)
>  {
>  	arl_d3_fixup();
> -	pmc_core_send_ltr_ignore(pmcdev, 3, 0);
>  
> -	return pmc_core_resume_common(pmcdev);
> +	return cnl_resume(pmcdev);
>  }
>  
>  int arl_core_init(struct pmc_dev *pmcdev)
> diff --git a/drivers/platform/x86/intel/pmc/cnp.c b/drivers/platform/x86/intel/pmc/cnp.c
> index 513c02670c5a..5b8b3ac7f061 100644
> --- a/drivers/platform/x86/intel/pmc/cnp.c
> +++ b/drivers/platform/x86/intel/pmc/cnp.c
> @@ -7,7 +7,8 @@
>   * All Rights Reserved.
>   *
>   */
> -
> +#define DEBUG

Debug leftover.

> +#include <linux/suspend.h>
>  #include "core.h"
>  
>  /* Cannon Lake: PGD PFET Enable Ack Status Register(s) bitmap */
> @@ -206,8 +207,24 @@ const struct pmc_reg_map cnp_reg_map = {
>  	.etr3_offset = ETR3_OFFSET,
>  };
>  
> +

Extra newline.

> +static DEFINE_PER_CPU(u64, pkg_cst_config);
> +
>  void cnl_suspend(struct pmc_dev *pmcdev)
>  {
> +	if (!pm_suspend_via_firmware()) {
> +		u64 val;
> +		int cpunum;
> +
> +		for_each_online_cpu(cpunum) {
> +			rdmsrl_on_cpu(cpunum, MSR_PKG_CST_CONFIG_CONTROL, &val);
> +			per_cpu(pkg_cst_config, cpunum) = val;

I'm not sure about this. It feels abuse of per cpu stuff as here a single 
thread is just recording something for every CPU (not the CPUs 
themselves).

(But my thinking of what's the purpose of per cpu stuff might be 
incomplete so I'm open to changing my mind about this if proven 
otherwise.)

Any thoughts about this Hans? Or Andy?

> +			val &= ~NHM_C1_AUTO_DEMOTE;
> +			wrmsrl_on_cpu(cpunum, MSR_PKG_CST_CONFIG_CONTROL, val);
> +			pr_debug("%s: cpu:%d cst %llx\n", __func__, cpunum, val);
> +		}
> +	}
> +
>  	/*
>  	 * Due to a hardware limitation, the GBE LTR blocks PC10
>  	 * when a cable is attached. To unblock PC10 during suspend,
> @@ -220,6 +237,15 @@ int cnl_resume(struct pmc_dev *pmcdev)
>  {
>  	pmc_core_send_ltr_ignore(pmcdev, 3, 0);
>  
> +	if (!pm_suspend_via_firmware()) {
> +		int cpunum;
> +
> +		for_each_online_cpu(cpunum) {
> +			pr_debug("%s: cpu:%d cst %llx\n", __func__, cpunum, per_cpu(pkg_cst_config, cpunum));
> +			wrmsrl_on_cpu(cpunum, MSR_PKG_CST_CONFIG_CONTROL, per_cpu(pkg_cst_config, cpunum));

Is the set of onlined CPUs iterated by the suspend and resume handlers 
guaranteed to be the same?

-- 
 i.

> +		}
> +	}
> +
>  	return pmc_core_resume_common(pmcdev);
>  }
>  
> diff --git a/drivers/platform/x86/intel/pmc/lnl.c b/drivers/platform/x86/intel/pmc/lnl.c
> index e7a8077d1a3e..be029f12cdf4 100644
> --- a/drivers/platform/x86/intel/pmc/lnl.c
> +++ b/drivers/platform/x86/intel/pmc/lnl.c
> @@ -546,9 +546,8 @@ static void lnl_d3_fixup(void)
>  static int lnl_resume(struct pmc_dev *pmcdev)
>  {
>  	lnl_d3_fixup();
> -	pmc_core_send_ltr_ignore(pmcdev, 3, 0);
>  
> -	return pmc_core_resume_common(pmcdev);
> +	return cnl_resume(pmcdev);
>  }
>  
>  int lnl_core_init(struct pmc_dev *pmcdev)
> diff --git a/drivers/platform/x86/intel/pmc/mtl.c b/drivers/platform/x86/intel/pmc/mtl.c
> index 91f2fa728f5c..fc6a89b8979f 100644
> --- a/drivers/platform/x86/intel/pmc/mtl.c
> +++ b/drivers/platform/x86/intel/pmc/mtl.c
> @@ -988,9 +988,8 @@ static void mtl_d3_fixup(void)
>  static int mtl_resume(struct pmc_dev *pmcdev)
>  {
>  	mtl_d3_fixup();
> -	pmc_core_send_ltr_ignore(pmcdev, 3, 0);
>  
> -	return pmc_core_resume_common(pmcdev);
> +	return cnl_resume(pmcdev);
>  }
>  
>  int mtl_core_init(struct pmc_dev *pmcdev)
>
Re: [PATCH] platform/x86/intel/pmc: Disable C1 auto-demotion during suspend
Posted by Ilpo Järvinen 5 days, 22 hours ago
On Wed, 2 Oct 2024, Ilpo Järvinen wrote:

> On Tue, 1 Oct 2024, David E. Box wrote:
> 
> > On some platforms, aggressive C1 auto-demotion may lead to failure to enter
> > the deepest C-state during suspend-to-idle, causing high power consumption.
> > To prevent this, disable C1 auto-demotion during suspend and re-enable on
> > resume.
> > 
> > Signed-off-by: David E. Box <david.e.box@linux.intel.com>
> > ---

> > @@ -220,6 +237,15 @@ int cnl_resume(struct pmc_dev *pmcdev)
> >  {
> >  	pmc_core_send_ltr_ignore(pmcdev, 3, 0);
> >  
> > +	if (!pm_suspend_via_firmware()) {
> > +		int cpunum;
> > +
> > +		for_each_online_cpu(cpunum) {
> > +			pr_debug("%s: cpu:%d cst %llx\n", __func__, cpunum, per_cpu(pkg_cst_config, cpunum));
> > +			wrmsrl_on_cpu(cpunum, MSR_PKG_CST_CONFIG_CONTROL, per_cpu(pkg_cst_config, cpunum));
> 
> Is the set of onlined CPUs iterated by the suspend and resume handlers 
> guaranteed to be the same?

I asked about this from more knowledgeable people than me and got a 
response that during suspend/resume userspace cannot offline any CPUs so 
it should be guaranteed to remain the same for resume.

-- 
 i.
Re: [PATCH] platform/x86/intel/pmc: Disable C1 auto-demotion during suspend
Posted by Mario Limonciello 1 week ago
On 10/1/2024 17:58, David E. Box wrote:
> On some platforms, aggressive C1 auto-demotion may lead to failure to enter
> the deepest C-state during suspend-to-idle, causing high power consumption.
> To prevent this, disable C1 auto-demotion during suspend and re-enable on
> resume.
> 
> Signed-off-by: David E. Box <david.e.box@linux.intel.com>
> ---
>   drivers/platform/x86/intel/pmc/arl.c |  3 +--
>   drivers/platform/x86/intel/pmc/cnp.c | 28 +++++++++++++++++++++++++++-
>   drivers/platform/x86/intel/pmc/lnl.c |  3 +--
>   drivers/platform/x86/intel/pmc/mtl.c |  3 +--
>   4 files changed, 30 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/platform/x86/intel/pmc/arl.c b/drivers/platform/x86/intel/pmc/arl.c
> index e10527c4e3e0..05dec4f5019f 100644
> --- a/drivers/platform/x86/intel/pmc/arl.c
> +++ b/drivers/platform/x86/intel/pmc/arl.c
> @@ -687,9 +687,8 @@ static void arl_d3_fixup(void)
>   static int arl_resume(struct pmc_dev *pmcdev)
>   {
>   	arl_d3_fixup();
> -	pmc_core_send_ltr_ignore(pmcdev, 3, 0);
>   
> -	return pmc_core_resume_common(pmcdev);
> +	return cnl_resume(pmcdev);
>   }
>   
>   int arl_core_init(struct pmc_dev *pmcdev)
> diff --git a/drivers/platform/x86/intel/pmc/cnp.c b/drivers/platform/x86/intel/pmc/cnp.c
> index 513c02670c5a..5b8b3ac7f061 100644
> --- a/drivers/platform/x86/intel/pmc/cnp.c
> +++ b/drivers/platform/x86/intel/pmc/cnp.c
> @@ -7,7 +7,8 @@
>    * All Rights Reserved.
>    *
>    */
> -
> +#define DEBUG

Did you mean to pull this out before submitting?

> +#include <linux/suspend.h>
>   #include "core.h"
>   
>   /* Cannon Lake: PGD PFET Enable Ack Status Register(s) bitmap */
> @@ -206,8 +207,24 @@ const struct pmc_reg_map cnp_reg_map = {
>   	.etr3_offset = ETR3_OFFSET,
>   };
>   
> +
> +static DEFINE_PER_CPU(u64, pkg_cst_config);
> +
>   void cnl_suspend(struct pmc_dev *pmcdev)
>   {
> +	if (!pm_suspend_via_firmware()) {
> +		u64 val;
> +		int cpunum;
> +
> +		for_each_online_cpu(cpunum) {
> +			rdmsrl_on_cpu(cpunum, MSR_PKG_CST_CONFIG_CONTROL, &val);
> +			per_cpu(pkg_cst_config, cpunum) = val;
> +			val &= ~NHM_C1_AUTO_DEMOTE;
> +			wrmsrl_on_cpu(cpunum, MSR_PKG_CST_CONFIG_CONTROL, val);
> +			pr_debug("%s: cpu:%d cst %llx\n", __func__, cpunum, val);
> +		}
> +	}
> +
>   	/*
>   	 * Due to a hardware limitation, the GBE LTR blocks PC10
>   	 * when a cable is attached. To unblock PC10 during suspend,
> @@ -220,6 +237,15 @@ int cnl_resume(struct pmc_dev *pmcdev)
>   {
>   	pmc_core_send_ltr_ignore(pmcdev, 3, 0);
>   
> +	if (!pm_suspend_via_firmware()) {
> +		int cpunum;
> +
> +		for_each_online_cpu(cpunum) {
> +			pr_debug("%s: cpu:%d cst %llx\n", __func__, cpunum, per_cpu(pkg_cst_config, cpunum));
> +			wrmsrl_on_cpu(cpunum, MSR_PKG_CST_CONFIG_CONTROL, per_cpu(pkg_cst_config, cpunum));
> +		}
> +	}
> +
>   	return pmc_core_resume_common(pmcdev);
>   }
>   
> diff --git a/drivers/platform/x86/intel/pmc/lnl.c b/drivers/platform/x86/intel/pmc/lnl.c
> index e7a8077d1a3e..be029f12cdf4 100644
> --- a/drivers/platform/x86/intel/pmc/lnl.c
> +++ b/drivers/platform/x86/intel/pmc/lnl.c
> @@ -546,9 +546,8 @@ static void lnl_d3_fixup(void)
>   static int lnl_resume(struct pmc_dev *pmcdev)
>   {
>   	lnl_d3_fixup();
> -	pmc_core_send_ltr_ignore(pmcdev, 3, 0);
>   
> -	return pmc_core_resume_common(pmcdev);
> +	return cnl_resume(pmcdev);
>   }
>   
>   int lnl_core_init(struct pmc_dev *pmcdev)
> diff --git a/drivers/platform/x86/intel/pmc/mtl.c b/drivers/platform/x86/intel/pmc/mtl.c
> index 91f2fa728f5c..fc6a89b8979f 100644
> --- a/drivers/platform/x86/intel/pmc/mtl.c
> +++ b/drivers/platform/x86/intel/pmc/mtl.c
> @@ -988,9 +988,8 @@ static void mtl_d3_fixup(void)
>   static int mtl_resume(struct pmc_dev *pmcdev)
>   {
>   	mtl_d3_fixup();
> -	pmc_core_send_ltr_ignore(pmcdev, 3, 0);
>   
> -	return pmc_core_resume_common(pmcdev);
> +	return cnl_resume(pmcdev);
>   }
>   
>   int mtl_core_init(struct pmc_dev *pmcdev)
Re: [PATCH] platform/x86/intel/pmc: Disable C1 auto-demotion during suspend
Posted by David E. Box 1 week ago
On Tue, 2024-10-01 at 22:11 -0500, Mario Limonciello wrote:
> On 10/1/2024 17:58, David E. Box wrote:
> > On some platforms, aggressive C1 auto-demotion may lead to failure to enter
> > the deepest C-state during suspend-to-idle, causing high power consumption.
> > To prevent this, disable C1 auto-demotion during suspend and re-enable on
> > resume.
> > 
> > Signed-off-by: David E. Box <david.e.box@linux.intel.com>
> > ---
> >   drivers/platform/x86/intel/pmc/arl.c |  3 +--
> >   drivers/platform/x86/intel/pmc/cnp.c | 28 +++++++++++++++++++++++++++-
> >   drivers/platform/x86/intel/pmc/lnl.c |  3 +--
> >   drivers/platform/x86/intel/pmc/mtl.c |  3 +--
> >   4 files changed, 30 insertions(+), 7 deletions(-)
> > 
> > diff --git a/drivers/platform/x86/intel/pmc/arl.c
> > b/drivers/platform/x86/intel/pmc/arl.c
> > index e10527c4e3e0..05dec4f5019f 100644
> > --- a/drivers/platform/x86/intel/pmc/arl.c
> > +++ b/drivers/platform/x86/intel/pmc/arl.c
> > @@ -687,9 +687,8 @@ static void arl_d3_fixup(void)
> >   static int arl_resume(struct pmc_dev *pmcdev)
> >   {
> >   	arl_d3_fixup();
> > -	pmc_core_send_ltr_ignore(pmcdev, 3, 0);
> >   
> > -	return pmc_core_resume_common(pmcdev);
> > +	return cnl_resume(pmcdev);
> >   }
> >   
> >   int arl_core_init(struct pmc_dev *pmcdev)
> > diff --git a/drivers/platform/x86/intel/pmc/cnp.c
> > b/drivers/platform/x86/intel/pmc/cnp.c
> > index 513c02670c5a..5b8b3ac7f061 100644
> > --- a/drivers/platform/x86/intel/pmc/cnp.c
> > +++ b/drivers/platform/x86/intel/pmc/cnp.c
> > @@ -7,7 +7,8 @@
> >    * All Rights Reserved.
> >    *
> >    */
> > -
> > +#define DEBUG
> 
> Did you mean to pull this out before submitting?

Yep. Thanks.

> 
> > +#include <linux/suspend.h>
> >   #include "core.h"
> >   
> >   /* Cannon Lake: PGD PFET Enable Ack Status Register(s) bitmap */
> > @@ -206,8 +207,24 @@ const struct pmc_reg_map cnp_reg_map = {
> >   	.etr3_offset = ETR3_OFFSET,
> >   };
> >   
> > +
> > +static DEFINE_PER_CPU(u64, pkg_cst_config);
> > +
> >   void cnl_suspend(struct pmc_dev *pmcdev)
> >   {
> > +	if (!pm_suspend_via_firmware()) {
> > +		u64 val;
> > +		int cpunum;
> > +
> > +		for_each_online_cpu(cpunum) {
> > +			rdmsrl_on_cpu(cpunum, MSR_PKG_CST_CONFIG_CONTROL,
> > &val);
> > +			per_cpu(pkg_cst_config, cpunum) = val;
> > +			val &= ~NHM_C1_AUTO_DEMOTE;
> > +			wrmsrl_on_cpu(cpunum, MSR_PKG_CST_CONFIG_CONTROL,
> > val);
> > +			pr_debug("%s: cpu:%d cst %llx\n", __func__, cpunum,
> > val);
> > +		}
> > +	}
> > +
> >   	/*
> >   	 * Due to a hardware limitation, the GBE LTR blocks PC10
> >   	 * when a cable is attached. To unblock PC10 during suspend,
> > @@ -220,6 +237,15 @@ int cnl_resume(struct pmc_dev *pmcdev)
> >   {
> >   	pmc_core_send_ltr_ignore(pmcdev, 3, 0);
> >   
> > +	if (!pm_suspend_via_firmware()) {
> > +		int cpunum;
> > +
> > +		for_each_online_cpu(cpunum) {
> > +			pr_debug("%s: cpu:%d cst %llx\n", __func__, cpunum,
> > per_cpu(pkg_cst_config, cpunum));
> > +			wrmsrl_on_cpu(cpunum, MSR_PKG_CST_CONFIG_CONTROL,
> > per_cpu(pkg_cst_config, cpunum));
> > +		}
> > +	}
> > +
> >   	return pmc_core_resume_common(pmcdev);
> >   }
> >   
> > diff --git a/drivers/platform/x86/intel/pmc/lnl.c
> > b/drivers/platform/x86/intel/pmc/lnl.c
> > index e7a8077d1a3e..be029f12cdf4 100644
> > --- a/drivers/platform/x86/intel/pmc/lnl.c
> > +++ b/drivers/platform/x86/intel/pmc/lnl.c
> > @@ -546,9 +546,8 @@ static void lnl_d3_fixup(void)
> >   static int lnl_resume(struct pmc_dev *pmcdev)
> >   {
> >   	lnl_d3_fixup();
> > -	pmc_core_send_ltr_ignore(pmcdev, 3, 0);
> >   
> > -	return pmc_core_resume_common(pmcdev);
> > +	return cnl_resume(pmcdev);
> >   }
> >   
> >   int lnl_core_init(struct pmc_dev *pmcdev)
> > diff --git a/drivers/platform/x86/intel/pmc/mtl.c
> > b/drivers/platform/x86/intel/pmc/mtl.c
> > index 91f2fa728f5c..fc6a89b8979f 100644
> > --- a/drivers/platform/x86/intel/pmc/mtl.c
> > +++ b/drivers/platform/x86/intel/pmc/mtl.c
> > @@ -988,9 +988,8 @@ static void mtl_d3_fixup(void)
> >   static int mtl_resume(struct pmc_dev *pmcdev)
> >   {
> >   	mtl_d3_fixup();
> > -	pmc_core_send_ltr_ignore(pmcdev, 3, 0);
> >   
> > -	return pmc_core_resume_common(pmcdev);
> > +	return cnl_resume(pmcdev);
> >   }
> >   
> >   int mtl_core_init(struct pmc_dev *pmcdev)
>