[Public] > -----Original Message----- > From: Mark Pearson <mpearson-lenovo@xxxxxxxxx> > Sent: Tuesday, January 24, 2023 09:36 > To: mpearson-lenovo@xxxxxxxxx > Cc: hdegoede@xxxxxxxxxx; markgross@xxxxxxxxxx; Limonciello, Mario > <Mario.Limonciello@xxxxxxx>; platform-driver-x86@xxxxxxxxxxxxxxx; > stable@xxxxxxxxxxxxxxx > Subject: [PATCH] platform/x86: thinkpad_acpi: Fix profile modes on Intel > platforms > > My last commit to fix profile mode displays on AMD platforms caused > an issue on Intel platforms - sorry! > > In it I was reading the current functional mode (MMC, PSC, AMT) from > the BIOS but didn't account for the fact that on some of our Intel > platforms I use a different API which returns just the profile and not > the functional mode. > > This commit fixes it so that on Intel platforms it knows the functional > mode is always MMC. > > I also fixed a potential problem that a platform may try to set the mode > for both MMC and PSC - which was incorrect. > > Tested on X1 Carbon 9 (Intel) and Z13 (AMD). > > Link: https://bugzilla.kernel.org/show_bug.cgi?id=216963 > Fixes: fde5f74ccfc7 ("platform/x86: thinkpad_acpi: Fix profile mode display in > AMT mode") In order for this to go to stable, it needs this tag in the commit message and not just CC stable in the git send-email command. (no need to respin for this reason, patchwork or b4 should pick it up when Hans grabs it) Cc: stable@xxxxxxxxxxxxxxx > > Signed-off-by: Mark Pearson <mpearson-lenovo@xxxxxxxxx> Reviewed-by: Mario Limonciello <mario.limonciello@xxxxxxx> > --- > drivers/platform/x86/thinkpad_acpi.c | 11 ++++++----- > 1 file changed, 6 insertions(+), 5 deletions(-) > > diff --git a/drivers/platform/x86/thinkpad_acpi.c > b/drivers/platform/x86/thinkpad_acpi.c > index a95946800ae9..6668d472df39 100644 > --- a/drivers/platform/x86/thinkpad_acpi.c > +++ b/drivers/platform/x86/thinkpad_acpi.c > @@ -10496,8 +10496,7 @@ static int dytc_profile_set(struct > platform_profile_handler *pprof, > if (err) > goto unlock; > } > - } > - if (dytc_capabilities & BIT(DYTC_FC_PSC)) { > + } else if (dytc_capabilities & BIT(DYTC_FC_PSC)) { > err = > dytc_command(DYTC_SET_COMMAND(DYTC_FUNCTION_PSC, perfmode, > 1), &output); > if (err) > goto unlock; > @@ -10525,14 +10524,16 @@ static void dytc_profile_refresh(void) > err = dytc_command(DYTC_CMD_MMC_GET, > &output); > else > err = dytc_cql_command(DYTC_CMD_GET, &output); > - } else if (dytc_capabilities & BIT(DYTC_FC_PSC)) > + funcmode = DYTC_FUNCTION_MMC; > + } else if (dytc_capabilities & BIT(DYTC_FC_PSC)) { > err = dytc_command(DYTC_CMD_GET, &output); > - > + /*Check if we are PSC mode, or have AMT enabled */ > + funcmode = (output >> DYTC_GET_FUNCTION_BIT) & 0xF; > + } > mutex_unlock(&dytc_mutex); > if (err) > return; > > - funcmode = (output >> DYTC_GET_FUNCTION_BIT) & 0xF; > perfmode = (output >> DYTC_GET_MODE_BIT) & 0xF; > convert_dytc_to_profile(funcmode, perfmode, &profile); > if (profile != dytc_current_profile) { > -- > 2.38.1