2024-02-21 21:12:25

by David E. Box

[permalink] [raw]
Subject: [PATCH 1/3] platform/x86/intel/vsec: Remove nuisance message

intel_vsec_walk_header() is used to configure features from devices that
don't provide a PCI VSEC or DVSEC structure. Some of these features may
be unsupported and fail to load. Ignore them silently as we do for
unsupported features described by VSEC/DVSEC.

Signed-off-by: David E. Box <[email protected]>
---
drivers/platform/x86/intel/vsec.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/drivers/platform/x86/intel/vsec.c b/drivers/platform/x86/intel/vsec.c
index 778eb0aa3479..0fdfaf3a4f5c 100644
--- a/drivers/platform/x86/intel/vsec.c
+++ b/drivers/platform/x86/intel/vsec.c
@@ -236,10 +236,7 @@ static bool intel_vsec_walk_header(struct pci_dev *pdev,

for ( ; *header; header++) {
ret = intel_vsec_add_dev(pdev, *header, info);
- if (ret)
- dev_info(&pdev->dev, "Could not add device for VSEC id %d\n",
- (*header)->id);
- else
+ if (!ret)
have_devices = true;
}


base-commit: 841c35169323cd833294798e58b9bf63fa4fa1de
--
2.34.1



2024-02-21 22:20:53

by David E. Box

[permalink] [raw]
Subject: [PATCH 2/3] platform/x86/intel/pmc/lnl: Remove SSRAM support

A recent PMC firmware change in Lunar Lake caused the pmc_core driver to
fail to probe. This is due to a change in the GUID for PMC telemetry
coming from the SSRAM device. We are told the current update may change
again before a final release so we can't upstream a fix just yet. In the
meantime, remove SSRAM support for Lunar Lake so the driver can load and
provide some basic functionality.

Fixes: 3748dfdae2a6 ("platform/x86/intel/pmc: Add Lunar Lake M support to intel_pmc_core driver")
Signed-off-by: David E. Box <[email protected]>
---
drivers/platform/x86/intel/pmc/lnl.c | 38 +++-------------------------
1 file changed, 4 insertions(+), 34 deletions(-)

diff --git a/drivers/platform/x86/intel/pmc/lnl.c b/drivers/platform/x86/intel/pmc/lnl.c
index abad17cdd3d7..068d72504683 100644
--- a/drivers/platform/x86/intel/pmc/lnl.c
+++ b/drivers/platform/x86/intel/pmc/lnl.c
@@ -13,21 +13,6 @@

#include "core.h"

-#define SOCM_LPM_REQ_GUID 0x11594920
-
-#define PMC_DEVID_SOCM 0xa87f
-
-static const u8 LNL_LPM_REG_INDEX[] = {0, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 20};
-
-static struct pmc_info lnl_pmc_info_list[] = {
- {
- .guid = SOCM_LPM_REQ_GUID,
- .devid = PMC_DEVID_SOCM,
- .map = &lnl_socm_reg_map,
- },
- {}
-};
-
const struct pmc_bit_map lnl_ltr_show_map[] = {
{"SOUTHPORT_A", CNP_PMC_LTR_SPA},
{"SOUTHPORT_B", CNP_PMC_LTR_SPB},
@@ -490,7 +475,6 @@ const struct pmc_reg_map lnl_socm_reg_map = {
.lpm_sts = lnl_lpm_maps,
.lpm_status_offset = MTL_LPM_STATUS_OFFSET,
.lpm_live_status_offset = MTL_LPM_LIVE_STATUS_OFFSET,
- .lpm_reg_index = LNL_LPM_REG_INDEX,
};

#define LNL_NPU_PCI_DEV 0x643e
@@ -517,33 +501,19 @@ static int lnl_resume(struct pmc_dev *pmcdev)
int lnl_core_init(struct pmc_dev *pmcdev)
{
int ret;
- int func = 2;
- bool ssram_init = true;
struct pmc *pmc = pmcdev->pmcs[PMC_IDX_SOC];

lnl_d3_fixup();

pmcdev->suspend = cnl_suspend;
pmcdev->resume = lnl_resume;
- pmcdev->regmap_list = lnl_pmc_info_list;
- ret = pmc_core_ssram_init(pmcdev, func);

- /* If regbase not assigned, set map and discover using legacy method */
- if (ret) {
- ssram_init = false;
- pmc->map = &lnl_socm_reg_map;
- ret = get_primary_reg_base(pmc);
- if (ret)
- return ret;
- }
+ pmc->map = &lnl_socm_reg_map;
+ ret = get_primary_reg_base(pmc);
+ if (ret)
+ return ret;

pmc_core_get_low_power_modes(pmcdev);

- if (ssram_init) {
- ret = pmc_core_ssram_get_lpm_reqs(pmcdev);
- if (ret)
- return ret;
- }
-
return 0;
}
--
2.34.1


2024-02-22 02:19:44

by David E. Box

[permalink] [raw]
Subject: [PATCH 3/3] platform/x86/intel/pmc/arl: Put GNA device in D3

To unblock Package C state entry, put the GNA device in D3 by default if no
driver is loaded for it.

Fixes: 83f168a1a437 ("platform/x86/intel/pmc: Add Arrow Lake S support to intel_pmc_core driver")
Signed-off-by: David E. Box <[email protected]>
---
drivers/platform/x86/intel/pmc/arl.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/drivers/platform/x86/intel/pmc/arl.c b/drivers/platform/x86/intel/pmc/arl.c
index 683ae828276b..34b4cd23bfe5 100644
--- a/drivers/platform/x86/intel/pmc/arl.c
+++ b/drivers/platform/x86/intel/pmc/arl.c
@@ -673,6 +673,7 @@ static struct pmc_info arl_pmc_info_list[] = {
};

#define ARL_NPU_PCI_DEV 0xad1d
+#define ARL_GNA_PCI_DEV 0xae4c
/*
* Set power state of select devices that do not have drivers to D3
* so that they do not block Package C entry.
@@ -680,6 +681,7 @@ static struct pmc_info arl_pmc_info_list[] = {
static void arl_d3_fixup(void)
{
pmc_core_set_device_d3(ARL_NPU_PCI_DEV);
+ pmc_core_set_device_d3(ARL_GNA_PCI_DEV);
}

static int arl_resume(struct pmc_dev *pmcdev)
--
2.34.1


Subject: Re: [PATCH 1/3] platform/x86/intel/vsec: Remove nuisance message


On 2/21/24 1:12 PM, David E. Box wrote:
> intel_vsec_walk_header() is used to configure features from devices that
> don't provide a PCI VSEC or DVSEC structure. Some of these features may
> be unsupported and fail to load. Ignore them silently as we do for
> unsupported features described by VSEC/DVSEC.
>
> Signed-off-by: David E. Box <[email protected]>
> ---

Change looks fine to me.

Reviewed-by: Kuppuswamy Sathyanarayanan <[email protected]>

> drivers/platform/x86/intel/vsec.c | 5 +----
> 1 file changed, 1 insertion(+), 4 deletions(-)
>
> diff --git a/drivers/platform/x86/intel/vsec.c b/drivers/platform/x86/intel/vsec.c
> index 778eb0aa3479..0fdfaf3a4f5c 100644
> --- a/drivers/platform/x86/intel/vsec.c
> +++ b/drivers/platform/x86/intel/vsec.c
> @@ -236,10 +236,7 @@ static bool intel_vsec_walk_header(struct pci_dev *pdev,
>
> for ( ; *header; header++) {
> ret = intel_vsec_add_dev(pdev, *header, info);
> - if (ret)
> - dev_info(&pdev->dev, "Could not add device for VSEC id %d\n",
> - (*header)->id);
> - else
> + if (!ret)
> have_devices = true;
> }
>
>
> base-commit: 841c35169323cd833294798e58b9bf63fa4fa1de

--
Sathyanarayanan Kuppuswamy
Linux Kernel Developer


Subject: Re: [PATCH 2/3] platform/x86/intel/pmc/lnl: Remove SSRAM support


On 2/21/24 1:12 PM, David E. Box wrote:
> A recent PMC firmware change in Lunar Lake caused the pmc_core driver to
> fail to probe. This is due to a change in the GUID for PMC telemetry
> coming from the SSRAM device. We are told the current update may change
> again before a final release so we can't upstream a fix just yet. In the
> meantime, remove SSRAM support for Lunar Lake so the driver can load and
> provide some basic functionality.

I would remove usage of "We" and just comment that that the value
is expected to change again. So disable the support till it is finalized.

>
> Fixes: 3748dfdae2a6 ("platform/x86/intel/pmc: Add Lunar Lake M support to intel_pmc_core driver")
> Signed-off-by: David E. Box <[email protected]>
> ---

Change looks fine to me.

Reviewed-by: Kuppuswamy Sathyanarayanan <[email protected]>
> drivers/platform/x86/intel/pmc/lnl.c | 38 +++-------------------------
> 1 file changed, 4 insertions(+), 34 deletions(-)
>
> diff --git a/drivers/platform/x86/intel/pmc/lnl.c b/drivers/platform/x86/intel/pmc/lnl.c
> index abad17cdd3d7..068d72504683 100644
> --- a/drivers/platform/x86/intel/pmc/lnl.c
> +++ b/drivers/platform/x86/intel/pmc/lnl.c
> @@ -13,21 +13,6 @@
>
> #include "core.h"
>
> -#define SOCM_LPM_REQ_GUID 0x11594920
> -
> -#define PMC_DEVID_SOCM 0xa87f
> -
> -static const u8 LNL_LPM_REG_INDEX[] = {0, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 20};
> -
> -static struct pmc_info lnl_pmc_info_list[] = {
> - {
> - .guid = SOCM_LPM_REQ_GUID,
> - .devid = PMC_DEVID_SOCM,
> - .map = &lnl_socm_reg_map,
> - },
> - {}
> -};
> -
> const struct pmc_bit_map lnl_ltr_show_map[] = {
> {"SOUTHPORT_A", CNP_PMC_LTR_SPA},
> {"SOUTHPORT_B", CNP_PMC_LTR_SPB},
> @@ -490,7 +475,6 @@ const struct pmc_reg_map lnl_socm_reg_map = {
> .lpm_sts = lnl_lpm_maps,
> .lpm_status_offset = MTL_LPM_STATUS_OFFSET,
> .lpm_live_status_offset = MTL_LPM_LIVE_STATUS_OFFSET,
> - .lpm_reg_index = LNL_LPM_REG_INDEX,
> };
>
> #define LNL_NPU_PCI_DEV 0x643e
> @@ -517,33 +501,19 @@ static int lnl_resume(struct pmc_dev *pmcdev)
> int lnl_core_init(struct pmc_dev *pmcdev)
> {
> int ret;
> - int func = 2;
> - bool ssram_init = true;
> struct pmc *pmc = pmcdev->pmcs[PMC_IDX_SOC];
>
> lnl_d3_fixup();
>
> pmcdev->suspend = cnl_suspend;
> pmcdev->resume = lnl_resume;
> - pmcdev->regmap_list = lnl_pmc_info_list;
> - ret = pmc_core_ssram_init(pmcdev, func);
>
> - /* If regbase not assigned, set map and discover using legacy method */
> - if (ret) {
> - ssram_init = false;
> - pmc->map = &lnl_socm_reg_map;
> - ret = get_primary_reg_base(pmc);
> - if (ret)
> - return ret;
> - }
> + pmc->map = &lnl_socm_reg_map;
> + ret = get_primary_reg_base(pmc);
> + if (ret)
> + return ret;
>
> pmc_core_get_low_power_modes(pmcdev);
>
> - if (ssram_init) {
> - ret = pmc_core_ssram_get_lpm_reqs(pmcdev);
> - if (ret)
> - return ret;
> - }
> -
> return 0;
> }

--
Sathyanarayanan Kuppuswamy
Linux Kernel Developer


Subject: Re: [PATCH 3/3] platform/x86/intel/pmc/arl: Put GNA device in D3


On 2/21/24 1:12 PM, David E. Box wrote:
> To unblock Package C state entry, put the GNA device in D3 by default if no
> driver is loaded for it.

Can you add more details about the C state issue? If no driver is enumerated,
should it not follow the firmware default value? Why not fix this in firmware?

>
> Fixes: 83f168a1a437 ("platform/x86/intel/pmc: Add Arrow Lake S support to intel_pmc_core driver")
> Signed-off-by: David E. Box <[email protected]>
> ---
> drivers/platform/x86/intel/pmc/arl.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/platform/x86/intel/pmc/arl.c b/drivers/platform/x86/intel/pmc/arl.c
> index 683ae828276b..34b4cd23bfe5 100644
> --- a/drivers/platform/x86/intel/pmc/arl.c
> +++ b/drivers/platform/x86/intel/pmc/arl.c
> @@ -673,6 +673,7 @@ static struct pmc_info arl_pmc_info_list[] = {
> };
>
> #define ARL_NPU_PCI_DEV 0xad1d
> +#define ARL_GNA_PCI_DEV 0xae4c
> /*
> * Set power state of select devices that do not have drivers to D3
> * so that they do not block Package C entry.
> @@ -680,6 +681,7 @@ static struct pmc_info arl_pmc_info_list[] = {
> static void arl_d3_fixup(void)
> {
> pmc_core_set_device_d3(ARL_NPU_PCI_DEV);
> + pmc_core_set_device_d3(ARL_GNA_PCI_DEV);
> }
>
> static int arl_resume(struct pmc_dev *pmcdev)

--
Sathyanarayanan Kuppuswamy
Linux Kernel Developer


2024-02-26 16:29:31

by Ilpo Järvinen

[permalink] [raw]
Subject: Re: [PATCH 3/3] platform/x86/intel/pmc/arl: Put GNA device in D3

On Wed, 21 Feb 2024, David E. Box wrote:

> To unblock Package C state entry, put the GNA device in D3 by default if no

Hi David,

It would be nice if this kind of not so well-known acronyms are opened by
default in the commit message so reviewers have a chance to understand
what this is about (me included, I had to look it up).

Reviewed-by: Ilpo J?rvinen <[email protected]>

--
i.

> driver is loaded for it.
>
> Fixes: 83f168a1a437 ("platform/x86/intel/pmc: Add Arrow Lake S support to intel_pmc_core driver")
> Signed-off-by: David E. Box <[email protected]>
> ---
> drivers/platform/x86/intel/pmc/arl.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/platform/x86/intel/pmc/arl.c b/drivers/platform/x86/intel/pmc/arl.c
> index 683ae828276b..34b4cd23bfe5 100644
> --- a/drivers/platform/x86/intel/pmc/arl.c
> +++ b/drivers/platform/x86/intel/pmc/arl.c
> @@ -673,6 +673,7 @@ static struct pmc_info arl_pmc_info_list[] = {
> };
>
> #define ARL_NPU_PCI_DEV 0xad1d
> +#define ARL_GNA_PCI_DEV 0xae4c
> /*
> * Set power state of select devices that do not have drivers to D3
> * so that they do not block Package C entry.
> @@ -680,6 +681,7 @@ static struct pmc_info arl_pmc_info_list[] = {
> static void arl_d3_fixup(void)
> {
> pmc_core_set_device_d3(ARL_NPU_PCI_DEV);
> + pmc_core_set_device_d3(ARL_GNA_PCI_DEV);
> }
>
> static int arl_resume(struct pmc_dev *pmcdev)

2024-02-26 18:23:04

by Ilpo Järvinen

[permalink] [raw]
Subject: Re: [PATCH 1/3] platform/x86/intel/vsec: Remove nuisance message

On Wed, 21 Feb 2024, David E. Box wrote:

> intel_vsec_walk_header() is used to configure features from devices that
> don't provide a PCI VSEC or DVSEC structure. Some of these features may
> be unsupported and fail to load. Ignore them silently as we do for
> unsupported features described by VSEC/DVSEC.
>
> Signed-off-by: David E. Box <[email protected]>
> ---
> drivers/platform/x86/intel/vsec.c | 5 +----
> 1 file changed, 1 insertion(+), 4 deletions(-)
>
> diff --git a/drivers/platform/x86/intel/vsec.c b/drivers/platform/x86/intel/vsec.c
> index 778eb0aa3479..0fdfaf3a4f5c 100644
> --- a/drivers/platform/x86/intel/vsec.c
> +++ b/drivers/platform/x86/intel/vsec.c
> @@ -236,10 +236,7 @@ static bool intel_vsec_walk_header(struct pci_dev *pdev,
>
> for ( ; *header; header++) {
> ret = intel_vsec_add_dev(pdev, *header, info);
> - if (ret)
> - dev_info(&pdev->dev, "Could not add device for VSEC id %d\n",
> - (*header)->id);
> - else
> + if (!ret)
> have_devices = true;
> }

Reviewed-by: Ilpo J?rvinen <[email protected]>

--
i.

2024-02-26 20:21:36

by Ilpo Järvinen

[permalink] [raw]
Subject: Re: [PATCH 2/3] platform/x86/intel/pmc/lnl: Remove SSRAM support

On Wed, 21 Feb 2024, David E. Box wrote:

> A recent PMC firmware change in Lunar Lake caused the pmc_core driver to
> fail to probe. This is due to a change in the GUID for PMC telemetry
> coming from the SSRAM device. We are told the current update may change
> again before a final release so we can't upstream a fix just yet. In the
> meantime, remove SSRAM support for Lunar Lake so the driver can load and
> provide some basic functionality.
>
> Fixes: 3748dfdae2a6 ("platform/x86/intel/pmc: Add Lunar Lake M support to intel_pmc_core driver")
> Signed-off-by: David E. Box <[email protected]>

Reviewed-by: Ilpo J?rvinen <[email protected]>

--
i.