Home | History | Annotate | Download | only in acpi
History log of /src/sys/arch/arm/acpi/cpu_acpi.c
RevisionDateAuthorComments
 1.18  30-Jan-2025  jmcneill arm: acpi: Early return when a CPU is not configured
 1.17  30-Dec-2024  jmcneill arm64: Enable support for low power idle CPU states on ACPI platforms.

The ACPI CPU driver parses the _LPI package on each CPU and builds a
table of supported low power states. A custom cpu_idle() implementation
is registered that uses the time previously spent idle to select an
entry method for low power on the next idle entry.

A boot option, "nolpi", can be used to ignore _LPI and use the normal
WFI idle method.

This decreases the battery discharge rate on my Snapdragon X1E laptop from
~17W to ~10W when idle.
 1.16  30-Jun-2024  jmcneill aarch64: Add NUMA awareness for ACPI systems with SRAT tables.

On an Ampere Altra w/ hemisphere mode enabled:

[ 1.0000000] cpu0: package 16, core 0, smt 0, numa 0
[...]
[ 1.0000000] cpu32: package 22, core 0, smt 0, numa 1

[ 1.000004] SRAT: 2 NUMA nodes
[ 1.000004] SRAT: node 0 memory range 0 (0x88300000 - 0x88400000 flags 1)
[ 1.000004] SRAT: node 0 memory range 1 (0x90000000 - 0x100000000 flags 1)
[ 1.000004] SRAT: node 0 memory range 2 (0x80000000000 - 0x80080000000 flags 1)
[ 1.000004] SRAT: node 0 memory range 3 (0x80100000000 - 0x81000000000 flags 1)
[ 1.000004] SRAT: node 1 memory range 0 (0xc0000000000 - 0xc1000000000 flags 1)
 1.15  09-May-2024  pho branches: 1.15.2;
kern/58195: arm: Support drvctl -d and -r for cpufeaturebus

This is required for detaching and re-attaching the vmt(4) driver on aarch64.
 1.14  16-May-2022  jmcneill tprof: armv8: Only attach to known PMU types.
 1.13  25-Nov-2021  skrll Improve error handling.

Hypervisors can return a PMCR.N of 0.
 1.12  24-Nov-2021  jmcneill arm64: acpi: Set capacity_dmips_mhz for CPUs

The GICC structure describes a relative power efficiency for each
processor. Use this value as-is for the capacity_dmips_mhz value of a
cpu. This makes the assumption that "more efficient" means "slower".
 1.11  17-Oct-2021  jmcneill Fix primary CPU detection in cpu_acpi_tprof_intr_establish
 1.10  23-Jan-2021  jmcneill fit in 80 columns
 1.9  03-Dec-2020  skrll Provide and use a sev() macro for the sev instruction.

While here use the correct barrier to ensure completion of memory accesses
before a couple of the sev() calls.
 1.8  15-Feb-2020  skrll branches: 1.8.6;
Various updates and improvements to cpu start up on arm/aarch64

- start sharing more code around the AP startup messaging.
- call arm_cpu_topology_set early so that ci_core_id is available for
drivers, e.g. bcm2835_intr.c
- both arm and aarch64 now have
- a static cpu_info_store array
- the same arm_cpu_{hatched,mbox}
 1.7  19-Oct-2019  jmcneill branches: 1.7.2;
Increase aarch64 MAXCPUS to 256.
 1.6  23-May-2019  ryo branches: 1.6.2; 1.6.4;
fix build without options MULTIPROCESSOR
 1.5  05-Dec-2018  jmcneill Add CPU performance counter support
 1.4  19-Oct-2018  jmcneill branches: 1.4.2;
Store the ACPI Processor UID in struct cpu_info
 1.3  18-Oct-2018  skrll Provide generic start code that assumes the MMU is off and caches are
disabled as per the linux booting protocol for ARMv6 and ARMv7 boards.
u-boot image type should be changed to 'linux' for correct behaviour.

The new start code builds a minimal "bootstrap" L1PT with cached access
disabled and uses the same table for all processors. AP startup is
performed in less steps and more code is written in C.

The bootstrap tables and stack are placed into an (orphaned) section
"_init_memory" which is given to uvm when it is no longer used.

Various kernels have been converted to use this code and tested. Some
boards were provided by TNF. Thanks!

The GENERIC kernel now boots on boards using the TEGRA, SUNXI and EXYNOS
kernels. The GENERIC kernel will also work on RPI2 using u-boot.

Thanks to martin@ and aymeric@ for testing on parallella and nanosoc
respectively
 1.2  16-Oct-2018  jmcneill Only attach to usable processors
 1.1  12-Oct-2018  jmcneill Add ACPI platform glue and basic device drivers (CPU, GIC, Generic Timer,
SBSA UART).
 1.4.2.3  26-Dec-2018  pgoyette Sync with HEAD, resolve a few conflicts
 1.4.2.2  20-Oct-2018  pgoyette Sync with head
 1.4.2.1  19-Oct-2018  pgoyette file cpu_acpi.c was added on branch pgoyette-compat on 2018-10-20 06:58:24 +0000
 1.6.4.1  23-Oct-2019  martin Pull up following revision(s) (requested by jmcneill in ticket #359):

sys/arch/aarch64/aarch64/locore.S: revision 1.42
sys/arch/aarch64/aarch64/locore.S: revision 1.43
sys/arch/aarch64/aarch64/locore.S: revision 1.44
sys/arch/arm/fdt/cpu_fdt.c: revision 1.28
sys/arch/aarch64/include/cpu.h: revision 1.14
sys/arch/aarch64/include/param.h: revision 1.12
sys/arch/arm/arm32/cpu.c: revision 1.133
sys/arch/arm/arm32/cpu.c: revision 1.134
sys/arch/arm/include/cpu.h: revision 1.101
sys/arch/arm/acpi/cpu_acpi.c: revision 1.7
sys/arch/aarch64/aarch64/cpu.c: revision 1.23
sys/arch/aarch64/aarch64/cpu.c: revision 1.24
sys/arch/aarch64/aarch64/cpu.c: revision 1.25

Increase aarch64 MAXCPUS to 256.

-

Invalidate dcache before polling AP hatched status

-

Avoid overlap between BP and last AP stack. AP stacks are now in order of
increasing address order.

Spotted by and idea from mlelstv.

-

Use separate cacheline aligned arrays for mbox and hatched as before.

-

cpu_hatched_p only for MULTIPROCESSOR
 1.6.2.4  13-Apr-2020  martin Mostly merge changes from HEAD upto 20200411
 1.6.2.3  08-Apr-2020  martin Merge changes from current as of 20200406
 1.6.2.2  10-Jun-2019  christos Sync with HEAD
 1.6.2.1  23-May-2019  christos file cpu_acpi.c was added on branch phil-wifi on 2019-06-10 22:05:50 +0000
 1.7.2.1  29-Feb-2020  ad Sync with head.
 1.8.6.2  03-Apr-2021  thorpej Sync with HEAD.
 1.8.6.1  14-Dec-2020  thorpej Sync w/ HEAD.
 1.15.2.1  01-Jul-2024  perseant Sync with HEAD.

RSS XML Feed