diff mbox series

platform/x86: thinkpad_acpi: Remove AMT enablement

Message ID 20230112204501.487920-1-mpearson-lenovo@squebb.ca (mailing list archive)
State Superseded, archived
Headers show
Series platform/x86: thinkpad_acpi: Remove AMT enablement | expand

Commit Message

Mark Pearson Jan. 12, 2023, 8:45 p.m. UTC
Recently AMT mode was enabled (somewhat unexpectedly) on the Lenovo
Z13 platform. The FW is advertising it is available and the driver tries
to use it - unfortunately it reports the profile mode incorrectly.

Note, there is also some extra work needed to enable the dynamic aspect
of AMT support that I will be following up with; but more testing is
needed first. This patch just fixes things so the profiles are reported
correctly.

Signed-off-by: Mark Pearson <mpearson-lenovo@squebb.ca>
---
 drivers/platform/x86/thinkpad_acpi.c | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

Comments

Mario Limonciello Jan. 12, 2023, 8:49 p.m. UTC | #1
[Public]



> -----Original Message-----
> From: Mark Pearson <mpearson-lenovo@squebb.ca>
> Sent: Thursday, January 12, 2023 14:45
> To: mpearson-lenovo@squebb.ca
> Cc: hdegoede@redhat.com; Limonciello, Mario
> <Mario.Limonciello@amd.com>; markgross@kernel.org; platform-driver-
> x86@vger.kernel.org
> Subject: [PATCH] platform/x86: thinkpad_acpi: Remove AMT enablement
> 

This title really isn't accurate is it?  AMT is still there, it's really more of a bug
fix for reporting the right profiles when AMT is active (which should be balanced).

> Recently AMT mode was enabled (somewhat unexpectedly) on the Lenovo
> Z13 platform. The FW is advertising it is available and the driver tries
> to use it - unfortunately it reports the profile mode incorrectly.
> 
> Note, there is also some extra work needed to enable the dynamic aspect
> of AMT support that I will be following up with; but more testing is
> needed first. This patch just fixes things so the profiles are reported
> correctly.
> 
> Signed-off-by: Mark Pearson <mpearson-lenovo@squebb.ca>

With the title fixed.

Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>

Suggest this to Cc to 6.1-stable as well as it's fixing a power profile reporting bug.

> ---
>  drivers/platform/x86/thinkpad_acpi.c | 23 +++++++++++++++++------
>  1 file changed, 17 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/platform/x86/thinkpad_acpi.c
> b/drivers/platform/x86/thinkpad_acpi.c
> index 1195293b22fd..a95946800ae9 100644
> --- a/drivers/platform/x86/thinkpad_acpi.c
> +++ b/drivers/platform/x86/thinkpad_acpi.c
> @@ -10311,9 +10311,11 @@ static DEFINE_MUTEX(dytc_mutex);
>  static int dytc_capabilities;
>  static bool dytc_mmc_get_available;
> 
> -static int convert_dytc_to_profile(int dytcmode, enum
> platform_profile_option *profile)
> +static int convert_dytc_to_profile(int funcmode, int dytcmode,
> +		enum platform_profile_option *profile)
>  {
> -	if (dytc_capabilities & BIT(DYTC_FC_MMC)) {
> +	switch (funcmode) {
> +	case DYTC_FUNCTION_MMC:
>  		switch (dytcmode) {
>  		case DYTC_MODE_MMC_LOWPOWER:
>  			*profile = PLATFORM_PROFILE_LOW_POWER;
> @@ -10329,8 +10331,7 @@ static int convert_dytc_to_profile(int dytcmode,
> enum platform_profile_option *p
>  			return -EINVAL;
>  		}
>  		return 0;
> -	}
> -	if (dytc_capabilities & BIT(DYTC_FC_PSC)) {
> +	case DYTC_FUNCTION_PSC:
>  		switch (dytcmode) {
>  		case DYTC_MODE_PSC_LOWPOWER:
>  			*profile = PLATFORM_PROFILE_LOW_POWER;
> @@ -10344,6 +10345,14 @@ static int convert_dytc_to_profile(int dytcmode,
> enum platform_profile_option *p
>  		default: /* Unknown mode */
>  			return -EINVAL;
>  		}
> +		return 0;
> +	case DYTC_FUNCTION_AMT:
> +		/* For now return balanced. It's the closest we have to 'auto'
> */
> +		*profile =  PLATFORM_PROFILE_BALANCED;
> +		return 0;
> +	default:
> +		/* Unknown function */
> +		return -EOPNOTSUPP;
>  	}
>  	return 0;
>  }
> @@ -10492,6 +10501,7 @@ static int dytc_profile_set(struct
> platform_profile_handler *pprof,
>  		err =
> dytc_command(DYTC_SET_COMMAND(DYTC_FUNCTION_PSC, perfmode,
> 1), &output);
>  		if (err)
>  			goto unlock;
> +
>  		/* system supports AMT, activate it when on balanced */
>  		if (dytc_capabilities & BIT(DYTC_FC_AMT))
>  			dytc_control_amt(profile ==
> PLATFORM_PROFILE_BALANCED);
> @@ -10507,7 +10517,7 @@ static void dytc_profile_refresh(void)
>  {
>  	enum platform_profile_option profile;
>  	int output, err = 0;
> -	int perfmode;
> +	int perfmode, funcmode;
> 
>  	mutex_lock(&dytc_mutex);
>  	if (dytc_capabilities & BIT(DYTC_FC_MMC)) {
> @@ -10522,8 +10532,9 @@ static void dytc_profile_refresh(void)
>  	if (err)
>  		return;
> 
> +	funcmode = (output >> DYTC_GET_FUNCTION_BIT) & 0xF;
>  	perfmode = (output >> DYTC_GET_MODE_BIT) & 0xF;
> -	convert_dytc_to_profile(perfmode, &profile);
> +	convert_dytc_to_profile(funcmode, perfmode, &profile);
>  	if (profile != dytc_current_profile) {
>  		dytc_current_profile = profile;
>  		platform_profile_notify();
> --
> 2.39.0
Mario Limonciello Jan. 12, 2023, 9:11 p.m. UTC | #2
On 1/12/2023 15:06, Mark Pearson wrote:
> On Thu, Jan 12, 2023, at 3:49 PM, Limonciello, Mario wrote:
>> [Public]
>>
>>
>>
>> > -----Original Message-----
>> > From: Mark Pearson <mpearson-lenovo@squebb.ca 
>> <mailto:mpearson-lenovo@squebb.ca>>
>> > Sent: Thursday, January 12, 2023 14:45
>> > To: mpearson-lenovo@squebb.ca <mailto:mpearson-lenovo@squebb.ca>
>> > Cc: hdegoede@redhat.com <mailto:hdegoede@redhat.com>; Limonciello, Mario
>> > <Mario.Limonciello@amd.com <mailto:Mario.Limonciello@amd.com>>; 
>> markgross@kernel.org <mailto:markgross@kernel.org>; platform-driver-
>> > x86@vger.kernel.org <mailto:x86@vger.kernel.org>
>> > Subject: [PATCH] platform/x86: thinkpad_acpi: Remove AMT enablement
>> >
>>
>> This title really isn't accurate is it?  AMT is still there, it's 
>> really more of a bug
>> fix for reporting the right profiles when AMT is active (which should 
>> be balanced).
> Shoot my bad. I did two versions of the patch - one to remove the 
> feature, and one to fix it.
> I did some testing and the results from the fix version were better so I 
> updated my commit message....and missed the title. I'm an idiot.
> 
> I assume I should resend the patch with the correct title?

Probably best to do.

> 
>> > Recently AMT mode was enabled (somewhat unexpectedly) on the Lenovo
>> > Z13 platform. The FW is advertising it is available and the driver tries
>> > to use it - unfortunately it reports the profile mode incorrectly.
>> >
>> > Note, there is also some extra work needed to enable the dynamic aspect
>> > of AMT support that I will be following up with; but more testing is
>> > needed first. This patch just fixes things so the profiles are reported
>> > correctly.
>> >
>> > Signed-off-by: Mark Pearson <mpearson-lenovo@squebb.ca 
>> <mailto:mpearson-lenovo@squebb.ca>>
>>
>> With the title fixed.
>>
>> Reviewed-by: Mario Limonciello <mario.limonciello@amd.com 
>> <mailto:mario.limonciello@amd.com>>
>>
>> Suggest this to Cc to 6.1-stable as well as it's fixing a power 
>> profile reporting bug.
> Ah - I was going to propose it to stable once it was reviewed and 
> accepted. Is it normal to do that on the first pass?
> 
> Mark

You can do it both ways.
https://www.kernel.org/doc/html/next/process/stable-kernel-rules.html

I was suggesting method 1 since this is a bug fix.

When you submit V2, some other things you should add (besides my tag and 
fix the title):

Reported-by: <person's email if you have one>
Link: <URL where people reported this broken>
Fixes: 46dcbc61b739b ("platform/x86: thinkpad-acpi: Add support for 
automatic mode transitions")
diff mbox series

Patch

diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index 1195293b22fd..a95946800ae9 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -10311,9 +10311,11 @@  static DEFINE_MUTEX(dytc_mutex);
 static int dytc_capabilities;
 static bool dytc_mmc_get_available;
 
-static int convert_dytc_to_profile(int dytcmode, enum platform_profile_option *profile)
+static int convert_dytc_to_profile(int funcmode, int dytcmode,
+		enum platform_profile_option *profile)
 {
-	if (dytc_capabilities & BIT(DYTC_FC_MMC)) {
+	switch (funcmode) {
+	case DYTC_FUNCTION_MMC:
 		switch (dytcmode) {
 		case DYTC_MODE_MMC_LOWPOWER:
 			*profile = PLATFORM_PROFILE_LOW_POWER;
@@ -10329,8 +10331,7 @@  static int convert_dytc_to_profile(int dytcmode, enum platform_profile_option *p
 			return -EINVAL;
 		}
 		return 0;
-	}
-	if (dytc_capabilities & BIT(DYTC_FC_PSC)) {
+	case DYTC_FUNCTION_PSC:
 		switch (dytcmode) {
 		case DYTC_MODE_PSC_LOWPOWER:
 			*profile = PLATFORM_PROFILE_LOW_POWER;
@@ -10344,6 +10345,14 @@  static int convert_dytc_to_profile(int dytcmode, enum platform_profile_option *p
 		default: /* Unknown mode */
 			return -EINVAL;
 		}
+		return 0;
+	case DYTC_FUNCTION_AMT:
+		/* For now return balanced. It's the closest we have to 'auto' */
+		*profile =  PLATFORM_PROFILE_BALANCED;
+		return 0;
+	default:
+		/* Unknown function */
+		return -EOPNOTSUPP;
 	}
 	return 0;
 }
@@ -10492,6 +10501,7 @@  static int dytc_profile_set(struct platform_profile_handler *pprof,
 		err = dytc_command(DYTC_SET_COMMAND(DYTC_FUNCTION_PSC, perfmode, 1), &output);
 		if (err)
 			goto unlock;
+
 		/* system supports AMT, activate it when on balanced */
 		if (dytc_capabilities & BIT(DYTC_FC_AMT))
 			dytc_control_amt(profile == PLATFORM_PROFILE_BALANCED);
@@ -10507,7 +10517,7 @@  static void dytc_profile_refresh(void)
 {
 	enum platform_profile_option profile;
 	int output, err = 0;
-	int perfmode;
+	int perfmode, funcmode;
 
 	mutex_lock(&dytc_mutex);
 	if (dytc_capabilities & BIT(DYTC_FC_MMC)) {
@@ -10522,8 +10532,9 @@  static void dytc_profile_refresh(void)
 	if (err)
 		return;
 
+	funcmode = (output >> DYTC_GET_FUNCTION_BIT) & 0xF;
 	perfmode = (output >> DYTC_GET_MODE_BIT) & 0xF;
-	convert_dytc_to_profile(perfmode, &profile);
+	convert_dytc_to_profile(funcmode, perfmode, &profile);
 	if (profile != dytc_current_profile) {
 		dytc_current_profile = profile;
 		platform_profile_notify();