Commit Graph

7 Commits

Author SHA1 Message Date
Chen Yu 1089fe3845 Intel: intel_idle: Customize IceLake server support
commit a472ad2bcea479ba068880125d7273fc95c14b70 upstream

Backport summary: Backport to 4.19.57 for customize ICX intel_idle support

On ICX platform, the C1E auto-promotion is enabled by default.
As a result, the CPU might fall into C1E more offen than previous
platforms. Besides, the C1E is not exposed to sysfs on ICX, which
is inconsistent with previous server platforms.

So disable C1E auto-promotion and expose C1E as a separate idle
state, so the C1E and C6 can be disabled via sysfs when necessary.

Beside C1 and C1E, the exit latency of C6 was measured
by a dedicated tool. However the exit latency(41us) exposed
by _CST is much smaller than the one we measured(128us). This
is probably due to the _CST uses the exit latency when woken
up from PC0+C6, rather than PC6+C6 when C6 was measured. Choose
the latter as we need the longest latency in theory.

Reported-by: kernel test robot <lkp@intel.com>
Tested-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Acked-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Reviewed-by: Zhang Rui <rui.zhang@intel.com>
Signed-off-by: Chen Yu <yu.c.chen@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: yingbao jia <yingbao.jia@intel.com>
2021-04-25 14:31:16 +08:00
Rafael J. Wysocki 477f166f11 Intel: intel_idle: Use ACPI _CST on server systems
commit e6d4f08a677654385869ba0c39d7c9ceec47e5c5 upstream

Backport summary: Backport to 5.4.49 for ICX intel_idle support

In many cases, especially on server systems, it is desirable to avoid
enabling C-states that have been disabled in the platform firmware
(BIOS) setup, except for C1E.

As a rule, the C-states disabled this way are not listed by ACPI
_CST, so if that is used by intel_idle along with the specific
table of C-states that it has for the given processor, the C-states
disabled through the platform firmware will not be enabled by default
by intel_idle.

Accordingly, set the use_acpi flag (introduced previously) in all
server processor profiles defined in intel_idle (so as to make it use
ACPI _CST to decide which C-states to enable by default) and set
the CPUIDLE_FLAG_ALWAYS_ENABLE flag (also introduced previously)
for C1E in all C-states tables in intel_idle that contain C1 too
(so that C1E is enabled regardless of whether or not it is listed
by ACPI _CST).

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: yjia <yingbao.jia@intel.com>
2021-04-25 14:31:12 +08:00
Rafael J. Wysocki a5346c0128 Intel: intel_idle: Add module parameter to prevent ACPI _CST from being used
commit 4ec32d9e8e5b6d6eb491eeee3938665d8a2388fa upstream

Backport summary: Backport to 5.4.49 for ICX intel_idle support

Add a new module parameter called "no_acpi" to the intel_idle driver
to allow the driver to be prevented from using ACPI _CST via kernel
command line.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: yjia <yingbao.jia@intel.com>
2021-04-25 14:31:12 +08:00
Rafael J. Wysocki 7afae7d3ec Intel: intel_idle: Allow ACPI _CST to be used for selected known processors
commit bff8e60a86f4960133f90ad9add9adeb082b8154 upstream

Backport summary: Backport to 5.4.49 for ICX intel_idle support

Update the intel_idle driver to get the C-states information from ACPI
_CST in some cases in which the processor is known to the driver, as long as
that information is available and the new use_acpi flag is set in the
profile of the processor in question.

In the cases when there is a specific table of C-states for the given
processor in the driver, that table is used as the primary source of
information on the available C-states, but if ACPI _CST is present,
the C-states that are not listed by it will not be enabled by default
(they still can be enabled later by user space via sysfs, though).

The new CPUIDLE_FLAG_ALWAYS_ENABLE flag can be used for marking
C-states that should be enabled by default even if they are not
listed by ACPI _CST.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: yjia <yingbao.jia@intel.com>
2021-04-25 14:31:12 +08:00
Rafael J. Wysocki 489253b0ba Intel: intel_idle: Use ACPI _CST for processor models without C-state tables
commit 18734958e9bfbc055805d110a38dc76307eba742 upstream

Backport summary: Backport to 5.4.49 for ICX intel_idle support

Modify the intel_idle driver to get the C-states information from ACPI
_CST if the processor model is not recognized by it.

The processor is still required to support MWAIT and the information
from ACPI _CST will only be used if all of the C-states listed by
_CST are of the ACPI_CSTATE_FFH type (which means that they are
expected to be entered via MWAIT).

Moreover, the driver assumes that the _CST information is the same
for all CPUs in the system, so it is sufficient to evaluate _CST for
one of them and extract the common list of C-states from there.
Also _CST is evaluated once at the system initialization time and
the driver does not respond to _CST change notifications (that can
be changed in the future).

The main functional difference between intel_idle with this change
and the ACPI processor driver is that the former sets the target
residency to be equal to the exit latency (provided by _CST) for
C1-type C-states and to 3 times the exit latency value for the other
C-state types, whereas the latter obtains the target residency by
multiplying the exit latency by the same number (2 by default) for
all C-state types.  Therefore it is expected that in general using
the former instead of the latter on the same system will lead to
improved energy-efficiency.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: yjia <yingbao.jia@intel.com>
2021-04-25 14:31:12 +08:00
Rafael J. Wysocki 222c40a220 Intel: intel_idle: Refactor intel_idle_cpuidle_driver_init()
commit 9f3d6daf61e5156139cd05643f7f1c2a9b7b49b0 upstream

Backport summary: Backport to 5.4.49 for ICX intel_idle support

Move the C-state verification and checks from
intel_idle_cpuidle_driver_init() to a separate function,
intel_idle_verify_cstate(), and make the former call it after
checking the CPUIDLE_FLAG_UNUSABLE state flag.

Also combine the drv->states[] updates with the incrementation of
drv->state_count.

No intentional functional impact.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: yjia <yingbao.jia@intel.com>
2021-04-25 14:31:12 +08:00
Kaixu Xia 590eaf1fec Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces.
Signed-off-by: Kaixu Xia <kaixuxia@tencent.com>
2021-03-16 11:01:34 +08:00