From: Hans de Goede <hdegoede@redhat.com>
To: Mark Pearson <markpearson@lenovo.com>
Cc: mgross@linux.intel.com, platform-driver-x86@vger.kernel.org
Subject: Re: [PATCH] platform/x86: thinkpad_acpi: Correct thermal sensor allocation
Date: Tue, 13 Apr 2021 08:28:57 +0200 [thread overview]
Message-ID: <1f0e16b9-ab78-881b-1918-7b8cf61bc546@redhat.com> (raw)
In-Reply-To: <20210407212015.298222-1-markpearson@lenovo.com>
Hi,
On 4/7/21 11:20 PM, Mark Pearson wrote:
> On recent Thinkpad platforms it was reported that temp sensor 11 was
> always incorrectly displaying 66C. It turns out the reason for this is
> that this location in EC RAM is not a temperature sensor but is the
> power supply ID (offset 0xC2).
>
> Based on feedback from the Lenovo firmware team the EC RAM version can
> be determined and for the current version (3) only the 0x78 to 0x7F
> range is used for temp sensors. I don't have any details for earlier
> versions so I have left the implementation unaltered there.
>
> Note - in this block only 0x78 and 0x79 are officially designated (CPU &
> GPU sensors). The use of the other locations in the block will vary from
> platform to platform; but the existing logic to detect a sensor presence
> holds.
>
> Signed-off-by: Mark Pearson <markpearson@lenovo.com>
I've merged this, note I've added one small fixup to initialize ver to
0 when it is declared, also see a remark inline below.
Thank you for your patch, I've applied this patch to my review-hans
branch:
https://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86.git/log/?h=review-hans
Note it will show up in my review-hans branch once I've pushed my
local branch there, which might take a while.
Once I've run some tests on this branch the patches there will be
added to the platform-drivers-x86/for-next branch and eventually
will be included in the pdx86 pull-request to Linus for the next
merge-window.
> ---
> drivers/platform/x86/thinkpad_acpi.c | 31 ++++++++++++++++++++--------
> 1 file changed, 22 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
> index 07de21941..8fbe4d3d9 100644
> --- a/drivers/platform/x86/thinkpad_acpi.c
> +++ b/drivers/platform/x86/thinkpad_acpi.c
> @@ -6260,6 +6260,7 @@ enum thermal_access_mode {
> enum { /* TPACPI_THERMAL_TPEC_* */
> TP_EC_THERMAL_TMP0 = 0x78, /* ACPI EC regs TMP 0..7 */
> TP_EC_THERMAL_TMP8 = 0xC0, /* ACPI EC regs TMP 8..15 */
> + TP_EC_FUNCREV = 0xEF, /* ACPI EC Functional revision */
> TP_EC_THERMAL_TMP_NA = -128, /* ACPI EC sensor not available */
>
> TPACPI_THERMAL_SENSOR_NA = -128000, /* Sensor not available */
> @@ -6458,7 +6459,7 @@ static const struct attribute_group thermal_temp_input8_group = {
>
> static int __init thermal_init(struct ibm_init_struct *iibm)
> {
> - u8 t, ta1, ta2;
> + u8 t, ta1, ta2, ver;
> int i;
> int acpi_tmp7;
> int res;
> @@ -6473,7 +6474,14 @@ static int __init thermal_init(struct ibm_init_struct *iibm)
> * 0x78-0x7F, 0xC0-0xC7. Registers return 0x00 for
> * non-implemented, thermal sensors return 0x80 when
> * not available
> + * The above rule is unfortunately flawed. This has been seen with
> + * 0xC2 (power supply ID) causing thermal control problems.
> + * The EC version can be determined by offset 0xEF and at least for
> + * version 3 the Lenovo firmware team confirmed that registers 0xC0-0xC7
> + * are not thermal registers.
> */
> + if (!acpi_ec_read(TP_EC_FUNCREV, &ver))
> + pr_warn("Thinkpad ACPI EC unable to access EC version\n");
So what happens with ver in case the pr_warn here triggers?
As said above I've added a small change to initialize ver to 0 when declared,
so that we keep the old behavior when this pr_warn triggers.
>
> ta1 = ta2 = 0;
> for (i = 0; i < 8; i++) {
> @@ -6483,11 +6491,13 @@ static int __init thermal_init(struct ibm_init_struct *iibm)
> ta1 = 0;
> break;
> }
> - if (acpi_ec_read(TP_EC_THERMAL_TMP8 + i, &t)) {
> - ta2 |= t;
> - } else {
> - ta1 = 0;
> - break;
> + if (ver < 3) {
> + if (acpi_ec_read(TP_EC_THERMAL_TMP8 + i, &t)) {
> + ta2 |= t;
> + } else {
> + ta1 = 0;
> + break;
> + }
> }
> }
> if (ta1 == 0) {
> @@ -6500,9 +6510,12 @@ static int __init thermal_init(struct ibm_init_struct *iibm)
> thermal_read_mode = TPACPI_THERMAL_NONE;
> }
> } else {
> - thermal_read_mode =
> - (ta2 != 0) ?
> - TPACPI_THERMAL_TPEC_16 : TPACPI_THERMAL_TPEC_8;
> + if (ver >= 3)
> + thermal_read_mode = TPACPI_THERMAL_TPEC_8;
> + else
> + thermal_read_mode =
> + (ta2 != 0) ?
> + TPACPI_THERMAL_TPEC_16 : TPACPI_THERMAL_TPEC_8;
> }
> } else if (acpi_tmp7) {
> if (tpacpi_is_ibm() &&
>
Regards,
Hans
next prev parent reply other threads:[~2021-04-13 6:29 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-07 21:20 [PATCH] platform/x86: thinkpad_acpi: Correct thermal sensor allocation Mark Pearson
2021-04-13 6:28 ` Hans de Goede [this message]
2021-04-13 11:30 ` [External] " Mark Pearson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1f0e16b9-ab78-881b-1918-7b8cf61bc546@redhat.com \
--to=hdegoede@redhat.com \
--cc=markpearson@lenovo.com \
--cc=mgross@linux.intel.com \
--cc=platform-driver-x86@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).