mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Mario Limonciello <mario.limonciello@amd.com>
To: Antheas Kapenekakis <lkml@antheas.dev>
Cc: W_Armin@gmx.de, sashal@kernel.org, Shyam-Sundar.S-k@amd.com,
	derekjohn.clark@gmail.com, denis.benato@linux.dev, i@rong.moe,
	linux-kernel@vger.kernel.org,
	platform-driver-x86@vger.kernel.org
Subject: Re: [RFC v4 0/4] platform/x86/amd: Add AMD DPTCi driver for TDP control in devices without vendor-specific controls
Date: Thu, 15 Oct 2026 10:03:35 -0500	[thread overview]
Message-ID: <f95dec8e-3735-49d9-b6d0-4c1b88f3a318@amd.com> (raw)
In-Reply-To: <CAGwozwGi_hTxRYUEfMGyT0OQtLTD1Dogp_NXXfBzRpT_hV3qFQ@mail.gmail.com>



On 10/15/26 09:55, Antheas Kapenekakis wrote:
> On Thu, 15 Oct 2026 at 16:37, Mario Limonciello
> <mario.limonciello@amd.com> wrote:
>>
>>
>>
>> On 10/15/26 04:35, Antheas Kapenekakis wrote:
>>> On Tue, 10 Mar 2026 at 08:59, Antheas Kapenekakis <lkml@antheas.dev> wrote:
>>>>
>>>> On Tue, 10 Mar 2026 at 03:43, Mario Limonciello
>>>> <mario.limonciello@amd.com> wrote:
>>>>>
>>>>>
>>>>>
>>>>> On 3/9/2026 3:51 PM, Antheas Kapenekakis wrote:
>>>>>> Many AMD-based handheld PCs (GPD, AYANEO, OneXPlayer, AOKZOE, OrangePi)
>>>>>> ship with the AGESA ALIB method at \_SB.ALIB, which accepts Function 0x0C
>>>>>> (the Dynamic Power and Thermal Configuration Interface, DPTCi). This
>>>>>> allows software to adjust APU power and thermal parameters at runtime:
>>>>>> sustained power limit (SPL/STAPM + skin), slow PPT, fast PPT, and the
>>>>>> thermal control target.
>>>>>>
>>>>>> Unlike mainstream AMD laptops, these devices do not implement vendor-
>>>>>> specific WMI or EC hooks for TDP control. The ones that do, use DPTCi
>>>>>> under the hood. For these devices, ALIB is the only viable mechanism for
>>>>>> the OS to adjust power limits, making a dedicated kernel driver the
>>>>>> correct approach rather than relying on the out-of-tree acpi_call module
>>>>>> or ryzenadj.
>>>>>>
>>>>>> The driver provides two layers of control:
>>>>>>
>>>>>>      * Platform profile integration (low-power / balanced / performance /
>>>>>>        custom), with per-device preset tunings derived from thermal envelope
>>>>>>        data. Selecting a non-custom profile applies values immediately and
>>>>>>        locks the individual tunables to read-only. The default profile is
>>>>>>        "custom", leaving the device at firmware defaults until userspace
>>>>>>        explicitly selects a profile.
>>>>>>
>>>>>>      * Four firmware-attributes tunables (ppt_pl1_spl, ppt_pl2_sppt,
>>>>>>        ppt_pl3_fppt, cpu_temp) that become writable in "custom" mode.
>>>>>>        Values are enforced against per-device limits (smin..smax), with an
>>>>>>        "expanded_limits" toggle that widens the range to the full hardware-
>>>>>>        validated envelope (min..max). A save_settings attribute controls
>>>>>>        whether writes commit immediately ("single") or are staged for an
>>>>>>        explicit bulk "save".
>>>>>>
>>>>>> On resume, the active profile or staged values are re-applied so that
>>>>>> suspend/resume cycles do not silently revert to firmware defaults unless
>>>>>> in custom and in bulk mode. In that case, defer to userspace.
>>>>>>
>>>>>> Device limits are supplied for GPD Win Mini / Win 4 / Win 5 / Win Max 2 /
>>>>>> Duo / Pocket 4, OrangePi NEO-01, AOKZOE A1/A2, OneXPlayer F1/2/X1/G1,
>>>>>> and numerous AYANEO models. The SoC table covers Ryzen 5000, 6000, 7040,
>>>>>> 8000, AI 9 HX 370, and the Ryzen AI MAX series.
>>>>>>
>>>>>> Tested on a GPD Win 5 (Ryzen AI MAX+ 395). Confirmed with ryzenadj -i
>>>>>> that committed values are applied to hardware, and that fast/slow PPT
>>>>>> limits are honoured under a full-CPU stress load.
>>>>>>
>>>>>> Responsible disclosure: The development of this driver is AI assisted.
>>>>>> This includes its writing, testing, reviewing, and readmes. The driver was
>>>>>> manually reviewed line by line, but there may still be small leftover
>>>>>> quirks. This is an RFC, not a final version. Let's push these tools to
>>>>>> their limits and see where it takes us.
>>>>>>
>>>>>
>>>>> I'll tell you where the most immediate limit is.  Humans can't review
>>>>> RFC changes that go in daily.
>>>>>
>>>>> Over my weekend I see multiple copies of the series in my inbox.  To me
>>>>> they must have obviously been garbage because you sent them so quickly
>>>>> instead of waiting for feedback.  So I'll delete those from my inbox and
>>>>> review the most recent one.
>>>>>
>>>>> That's somewhat tongue in cheek.  I know you're excited for this series,
>>>>> but please make sure you take time to gather and take feedback into
>>>>> account before posting another series.
>>>>
>>>> It's true, I've been having a bit of fun. But the series is stabilized
>>>> now, I don't plan to send another version soon unless I messed up
>>>> something.
>>>>
>>>> V3 incorporated your feedback/derek's and V4 incorporated rong's
>>>> feedback. V4 is minor, it is just nits.
>>>>
>>>>> Maybe you can pass this to a robot and it
>>>>> can give you actionable feedback, but a human sitting down and reviewing
>>>>> a patch series in a serious way takes time.
>>>>
>>>> I'm using this series as a testbed to make some tooling for this,
>>>> maybe I will post it soon.
>>>
>>> Opus 4.6 was something. Anyway. @Mario v4 of this driver as it stands
>>> is pretty good for prod. Since then, I kept adding devices and
>>> adjusting devices based on user feedback but I did not have to touch
>>> the driver otherwise. It has been tested on most APUs and around 30
>>> device models now.
>>>
>>> One thing this driver does not do is AC/DC limits and it would be good
>>> if it did. That way presets could be pushed higher for AC but that is
>>> only mildly necessary for AI Max platforms. 45W is more than enough
>>> for all of them anyway, but we could go to 55W e.g. (after that they
>>> saturate so it is unnecessary strain). But the updated limits I have
>>> are conservative enough where it is not an issue. I also found myself
>>> not using the commit option, so I think it can be removed.
>>>
>>> The only issue with this driver is that steam maxes out TDP when you
>>> disable the TDP slider and as the custom limit is generic for both
>>> AC/DC it can strain the battery. This is an architectural issue with
>>> steamos manager as before steam used the _default tdp value in AMD
>>> sysfs but dropped the notion of default when transitioning to steamos
>>> manager. But this is a downstream problem unrelated to the driver
>>> where special DC limits could help a bit.
>>>
>>> This is because I heard you might be working on something similar. So
>>> let's prevent some duplicative work. Should I repost a cleaned up V5?
>>>
>>> Best,
>>> Antheas
>> By "something similar" do you mean the AMD overclocking driver posted
>> recently [1]?
>>
>> Does that happen to work on any of this hardware?
> 
> 95F20B61-3D44-41F8-87E1-03CBF94C4E8F returns nothing on my ACPI dumps.
> There are functions which contain the e.g., 0x00020026 on a lot of
> ssdts but no WMI with the GUID that series provides.
> 
> The WMI GUID of those functions is
> ABBC0F6A-8EA1-11D1-00A0-C90629100000. If the interface is the same,
> consider adding it to that driver.

OK - It shouldn't be the same.

> 
> You may reference to check yourself [2]
> 
> Here is what my LLM told me about that GUID:
> 
> | Dump | GUID present |
> |---|---|
> | Legion Go `N3CN26WW` | No |
> | Legion Go `N3CN28WW` / `28WW-beta` | No |
> | Legion Go `N3CN29WW` and later versions here | Yes |
> | ROG Ally | No |
> | Ally X | Yes |
> | GPD Win 4 / Win Mini | No |
> | One Xplayer / F1 Pro | Yes |
> 
> So very mixed, and perhaps not an alternative to what this series
> provides to these devices. Fine by me to go through
> 
>> If it doesn't; sure please post your v5 that has incorporated feedback
>> from this thread after the merge window at the start of the next kernel
>> cycle and we can review it again.
> 
> I was specifically asking about this interface. Not in a rush, just
> bumping this a bit so it does not end up getting re-implemented. I
> might not be able to fix all of the issues but I will try the best I
> can.
> 
> It seems this interface is so universal the CPU check might be bogus,
> but I managed to collect 99% of the CPUs, I only get a straggler
> reported every month or so. So it should be ok to stay.

I'll admit this series hasn't been top of mind for me in a while.  (So I 
might have some page faults while trying to remember things about it).

Earlier in the discussion for this series that as long as this is tied 
to SMBIOS strings to *only* load on intended hardware that should be 
sufficient.  If two systems use the same SMBIOS strings between 
generations then you'll have to add CPU disambiguation.

> 
>> BTW I think this version was last posted before Sashiko started
>> reviewing patches too.  If you can; please run a local Sashiko review
>> cycle on it before posting your v5.
> 
> Sigh, if I figure out I will

No worries if you can't.  I was just looking for an opportunity for less 
back and forth in case it flags something.
> 
> [2] https://github.com/hhd-dev/hwinfo
> 
>> https://lore.kernel.org/all/20261010190543.563161-1-Shyam-sundar.S-k@amd.com/
>> [1]
>>
>>
> 


  reply	other threads:[~2026-10-15 15:04 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-09 20:51 Antheas Kapenekakis
2026-03-09 20:51 ` [RFC v4 1/4] Documentation: firmware-attributes: generalize save_settings entry Antheas Kapenekakis
2026-03-09 20:51 ` [RFC v4 2/4] platform/x86/amd: dptc: Add AMD DPTCi driver Antheas Kapenekakis
2026-03-10  4:01   ` Mario Limonciello
2026-03-10  8:02     ` Antheas Kapenekakis
2026-03-10 16:26       ` Mario Limonciello
2026-03-11 19:09         ` Antheas Kapenekakis
2026-03-12 13:24           ` Mario Limonciello
2026-03-12 13:47             ` Antheas Kapenekakis
2026-03-12 16:05               ` Mario Limonciello
2026-03-12 16:19                 ` Antheas Kapenekakis
2026-03-09 20:51 ` [RFC v4 3/4] platform/x86/amd: dptc: Add platform profile support Antheas Kapenekakis
2026-03-10  4:07   ` Mario Limonciello
2026-03-09 20:51 ` [RFC v4 4/4] platform/x86/amd: dptc: Add device entries for handheld PCs Antheas Kapenekakis
2026-03-10  4:11   ` Mario Limonciello
2026-03-10  8:13     ` Antheas Kapenekakis
2026-03-10 16:35       ` Mario Limonciello
2026-03-11 19:13         ` Antheas Kapenekakis
2026-03-12 13:26           ` Mario Limonciello
2026-03-10  2:43 ` [RFC v4 0/4] platform/x86/amd: Add AMD DPTCi driver for TDP control in devices without vendor-specific controls Mario Limonciello
2026-03-10  7:59   ` Antheas Kapenekakis
2026-10-15  9:35     ` Antheas Kapenekakis
2026-10-15 14:37       ` Mario Limonciello
2026-10-15 14:55         ` Antheas Kapenekakis
2026-10-15 15:03           ` Mario Limonciello [this message]
2026-10-15 15:13             ` Antheas Kapenekakis

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=f95dec8e-3735-49d9-b6d0-4c1b88f3a318@amd.com \
    --to=mario.limonciello@amd.com \
    --cc=Shyam-Sundar.S-k@amd.com \
    --cc=W_Armin@gmx.de \
    --cc=denis.benato@linux.dev \
    --cc=derekjohn.clark@gmail.com \
    --cc=i@rong.moe \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lkml@antheas.dev \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=sashal@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

all inboxes | Powered by JetHome®