ACPI: processor idle: Fix up C-state latency if not ordered
authorMario Limonciello <mario.limonciello@amd.com>
Wed, 12 May 2021 22:15:14 +0000 (17:15 -0500)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 17 May 2021 15:05:30 +0000 (17:05 +0200)
commit65ea8f2c6e230bdf71fed0137cf9e9d1b307db32
treeaed14846338ad4ffcc7e88133adfbbca528a74cf
parentd07f6ca923ea0927a1024dfccafc5b53b61cfecc
ACPI: processor idle: Fix up C-state latency if not ordered

Generally, the C-state latency is provided by the _CST method or
FADT, but some OEM platforms using AMD Picasso, Renoir, Van Gogh,
and Cezanne set the C2 latency greater than C3's which causes the
C2 state to be skipped.

That will block the core entering PC6, which prevents S0ix working
properly on Linux systems.

In other operating systems, the latency values are not validated and
this does not cause problems by skipping states.

To avoid this issue on Linux, detect when latencies are not an
arithmetic progression and sort them.

Link: https://gitlab.freedesktop.org/agd5f/linux/-/commit/026d186e4592c1ee9c1cb44295912d0294508725
Link: https://gitlab.freedesktop.org/drm/amd/-/issues/1230#note_712174
Suggested-by: Prike Liang <Prike.Liang@amd.com>
Suggested-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
[ rjw: Subject and changelog edits ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/processor_idle.c