* [PATCH 1/2] platform/x86/intel/pmc: Add resume_fixup callback
@ 2023-06-02 23:21 David E. Box
2023-06-02 23:21 ` [PATCH 2/2] platform/x86/intel/pmc/mtl: Put devices in D3 during resume David E. Box
0 siblings, 1 reply; 4+ messages in thread
From: David E. Box @ 2023-06-02 23:21 UTC (permalink / raw)
To: irenic.rajneesh, david.e.box, hdegoede, markgross, ilpo.jarvinen
Cc: platform-driver-x86, linux-kernel
Add a resume_fixup callback to perform platform specific fixups during
resume from suspend.
Signed-off-by: David E. Box <david.e.box@linux.intel.com>
---
drivers/platform/x86/intel/pmc/core.c | 3 +++
drivers/platform/x86/intel/pmc/core.h | 2 ++
2 files changed, 5 insertions(+)
diff --git a/drivers/platform/x86/intel/pmc/core.c b/drivers/platform/x86/intel/pmc/core.c
index da6e7206d38b..0fcd1cb7264b 100644
--- a/drivers/platform/x86/intel/pmc/core.c
+++ b/drivers/platform/x86/intel/pmc/core.c
@@ -1229,6 +1229,9 @@ static __maybe_unused int pmc_core_resume(struct device *dev)
const struct pmc_bit_map **maps = pmcdev->map->lpm_sts;
int offset = pmcdev->map->lpm_status_offset;
+ if (pmcdev->resume_fixup)
+ pmcdev->resume_fixup();
+
/* Check if the syspend used S0ix */
if (pm_suspend_via_firmware())
return 0;
diff --git a/drivers/platform/x86/intel/pmc/core.h b/drivers/platform/x86/intel/pmc/core.h
index 9ca9b9746719..b58458d00bd3 100644
--- a/drivers/platform/x86/intel/pmc/core.h
+++ b/drivers/platform/x86/intel/pmc/core.h
@@ -327,6 +327,7 @@ struct pmc_reg_map {
* @lpm_en_modes: Array of enabled modes from lowest to highest priority
* @lpm_req_regs: List of substate requirements
* @core_configure: Function pointer to configure the platform
+ * @resume_fixup: Function to perform fixups during resume
*
* pmc_dev contains info about power management controller device.
*/
@@ -345,6 +346,7 @@ struct pmc_dev {
int lpm_en_modes[LPM_MAX_NUM_MODES];
u32 *lpm_req_regs;
void (*core_configure)(struct pmc_dev *pmcdev);
+ void (*resume_fixup)(void);
};
extern const struct pmc_bit_map msr_map[];
--
2.34.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] platform/x86/intel/pmc/mtl: Put devices in D3 during resume
2023-06-02 23:21 [PATCH 1/2] platform/x86/intel/pmc: Add resume_fixup callback David E. Box
@ 2023-06-02 23:21 ` David E. Box
2023-06-05 11:59 ` Ilpo Järvinen
0 siblings, 1 reply; 4+ messages in thread
From: David E. Box @ 2023-06-02 23:21 UTC (permalink / raw)
To: irenic.rajneesh, david.e.box, hdegoede, markgross, ilpo.jarvinen
Cc: platform-driver-x86, linux-kernel
An earlier commit placed some driverless devices in D3 during boot so that
they don't block package cstate entry. Also place these devices in D3 after
resume from suspend.
Fixes: 336ba968d3e3 ("platform/x86/intel/pmc/mtl: Put GNA/IPU/VPU devices in D3")
Signed-off-by: David E. Box <david.e.box@linux.intel.com>
---
drivers/platform/x86/intel/pmc/mtl.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/drivers/platform/x86/intel/pmc/mtl.c b/drivers/platform/x86/intel/pmc/mtl.c
index e8cc156412ce..d87c4597c6d4 100644
--- a/drivers/platform/x86/intel/pmc/mtl.c
+++ b/drivers/platform/x86/intel/pmc/mtl.c
@@ -68,11 +68,8 @@ static void mtl_set_device_d3(unsigned int device)
}
}
-void mtl_core_init(struct pmc_dev *pmcdev)
+static void mtl_fixup(void)
{
- pmcdev->map = &mtl_reg_map;
- pmcdev->core_configure = mtl_core_configure;
-
/*
* Set power state of select devices that do not have drivers to D3
* so that they do not block Package C entry.
@@ -81,3 +78,13 @@ void mtl_core_init(struct pmc_dev *pmcdev)
mtl_set_device_d3(MTL_IPU_PCI_DEV);
mtl_set_device_d3(MTL_VPU_PCI_DEV);
}
+
+void mtl_core_init(struct pmc_dev *pmcdev)
+{
+ pmcdev->map = &mtl_reg_map;
+ pmcdev->core_configure = mtl_core_configure;
+
+ mtl_fixup();
+
+ pmcdev->resume_fixup = mtl_fixup;
+}
--
2.34.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 2/2] platform/x86/intel/pmc/mtl: Put devices in D3 during resume
2023-06-02 23:21 ` [PATCH 2/2] platform/x86/intel/pmc/mtl: Put devices in D3 during resume David E. Box
@ 2023-06-05 11:59 ` Ilpo Järvinen
2023-06-05 14:52 ` David E. Box
0 siblings, 1 reply; 4+ messages in thread
From: Ilpo Järvinen @ 2023-06-05 11:59 UTC (permalink / raw)
To: David E. Box
Cc: irenic.rajneesh, hdegoede, markgross, platform-driver-x86, LKML
On Fri, 2 Jun 2023, David E. Box wrote:
> An earlier commit placed some driverless devices in D3 during boot so that
> they don't block package cstate entry. Also place these devices in D3 after
> resume from suspend.
>
> Fixes: 336ba968d3e3 ("platform/x86/intel/pmc/mtl: Put GNA/IPU/VPU devices in D3")
> Signed-off-by: David E. Box <david.e.box@linux.intel.com>
> ---
> drivers/platform/x86/intel/pmc/mtl.c | 15 +++++++++++----
> 1 file changed, 11 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/platform/x86/intel/pmc/mtl.c b/drivers/platform/x86/intel/pmc/mtl.c
> index e8cc156412ce..d87c4597c6d4 100644
> --- a/drivers/platform/x86/intel/pmc/mtl.c
> +++ b/drivers/platform/x86/intel/pmc/mtl.c
> @@ -68,11 +68,8 @@ static void mtl_set_device_d3(unsigned int device)
> }
> }
>
> -void mtl_core_init(struct pmc_dev *pmcdev)
> +static void mtl_fixup(void)
> {
> - pmcdev->map = &mtl_reg_map;
> - pmcdev->core_configure = mtl_core_configure;
> -
> /*
> * Set power state of select devices that do not have drivers to D3
> * so that they do not block Package C entry.
> @@ -81,3 +78,13 @@ void mtl_core_init(struct pmc_dev *pmcdev)
> mtl_set_device_d3(MTL_IPU_PCI_DEV);
> mtl_set_device_d3(MTL_VPU_PCI_DEV);
I'd prefer the function be called something related to d3 / power state /
or some along those lines rather than something obscure such as
mtl_fixup(). And you can move the comment to be a function comment now.
> }
> +
> +void mtl_core_init(struct pmc_dev *pmcdev)
> +{
> + pmcdev->map = &mtl_reg_map;
> + pmcdev->core_configure = mtl_core_configure;
> +
> + mtl_fixup();
> +
> + pmcdev->resume_fixup = mtl_fixup;
I'm a bit on the edge here whether this is a good approach in long-term or
if it would be better to just provide a way for the platform file to
replace entire .resume() (for this task it's obviously enough but it
feels a bit hacky to hook into one fixed place on resume path).
static __maybe_unused int pmc_core_resume(struct device *dev)
{
if (pmcdev->resume)
return pmcdev->resume();
else
return pmc_core_resume_common();
}
where pmc_core_resume_common() contains the current pmc_core_resume()
contents.
mtl_resume() would just call the d3 func and the common resume functions.
--
i.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 2/2] platform/x86/intel/pmc/mtl: Put devices in D3 during resume
2023-06-05 11:59 ` Ilpo Järvinen
@ 2023-06-05 14:52 ` David E. Box
0 siblings, 0 replies; 4+ messages in thread
From: David E. Box @ 2023-06-05 14:52 UTC (permalink / raw)
To: Ilpo Järvinen
Cc: irenic.rajneesh, hdegoede, markgross, platform-driver-x86, LKML
On Mon, 2023-06-05 at 14:59 +0300, Ilpo Järvinen wrote:
> On Fri, 2 Jun 2023, David E. Box wrote:
>
> > An earlier commit placed some driverless devices in D3 during boot so that
> > they don't block package cstate entry. Also place these devices in D3 after
> > resume from suspend.
> >
> > Fixes: 336ba968d3e3 ("platform/x86/intel/pmc/mtl: Put GNA/IPU/VPU devices in
> > D3")
> > Signed-off-by: David E. Box <david.e.box@linux.intel.com>
> > ---
> > drivers/platform/x86/intel/pmc/mtl.c | 15 +++++++++++----
> > 1 file changed, 11 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/platform/x86/intel/pmc/mtl.c
> > b/drivers/platform/x86/intel/pmc/mtl.c
> > index e8cc156412ce..d87c4597c6d4 100644
> > --- a/drivers/platform/x86/intel/pmc/mtl.c
> > +++ b/drivers/platform/x86/intel/pmc/mtl.c
> > @@ -68,11 +68,8 @@ static void mtl_set_device_d3(unsigned int device)
> > }
> > }
> >
> > -void mtl_core_init(struct pmc_dev *pmcdev)
> > +static void mtl_fixup(void)
> > {
> > - pmcdev->map = &mtl_reg_map;
> > - pmcdev->core_configure = mtl_core_configure;
> > -
> > /*
> > * Set power state of select devices that do not have drivers to D3
> > * so that they do not block Package C entry.
> > @@ -81,3 +78,13 @@ void mtl_core_init(struct pmc_dev *pmcdev)
> > mtl_set_device_d3(MTL_IPU_PCI_DEV);
> > mtl_set_device_d3(MTL_VPU_PCI_DEV);
>
> I'd prefer the function be called something related to d3 / power state /
> or some along those lines rather than something obscure such as
> mtl_fixup(). And you can move the comment to be a function comment now.
Okay.
>
> > }
> > +
> > +void mtl_core_init(struct pmc_dev *pmcdev)
> > +{
> > + pmcdev->map = &mtl_reg_map;
> > + pmcdev->core_configure = mtl_core_configure;
> > +
> > + mtl_fixup();
> > +
> > + pmcdev->resume_fixup = mtl_fixup;
>
> I'm a bit on the edge here whether this is a good approach in long-term or
> if it would be better to just provide a way for the platform file to
> replace entire .resume() (for this task it's obviously enough but it
> feels a bit hacky to hook into one fixed place on resume path).
>
> static __maybe_unused int pmc_core_resume(struct device *dev)
> {
> if (pmcdev->resume)
> return pmcdev->resume();
> else
> return pmc_core_resume_common();
> }
>
> where pmc_core_resume_common() contains the current pmc_core_resume()
> contents.
>
> mtl_resume() would just call the d3 func and the common resume functions.
Yeah, makes sense. There are several conditional tasks in the current resume
code, so trying to have a fixed place in there to call a platform specific
workaround may not be possible if we need to use this again for a different
reason.
David
>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-06-05 14:52 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-06-02 23:21 [PATCH 1/2] platform/x86/intel/pmc: Add resume_fixup callback David E. Box
2023-06-02 23:21 ` [PATCH 2/2] platform/x86/intel/pmc/mtl: Put devices in D3 during resume David E. Box
2023-06-05 11:59 ` Ilpo Järvinen
2023-06-05 14:52 ` David E. Box
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox