Skip to main content

CPUFREQ

Introduction to the functions and usage of CPUFREQ.

Module Introduction

The CPUFREQ subsystem is responsible for adjusting the CPU frequency and voltage at runtime, aiming to minimize CPU power consumption while meeting performance requirements.

Function Introduction

  1. cpufreq core is the core module of the cpufreq framework, mainly implementing three types of functions:
    1.1 Abstracts the common logic interface for frequency and voltage scaling
    1.2 Provides a unified interface to user space via sysfs, and notifies other drivers of frequency changes via notifier 1.3 Provides a driver framework for CPU frequency and voltage control
  2. cpufreq governor is responsible for various frequency and voltage scaling policies
  3. cpufreq driver implements platform-specific frequency and voltage scaling mechanisms
  4. cpufreq stats is responsible for frequency information and statistics of each frequency point, providing cpufreq-related statistics for each CPU

Source Code Structure Introduction

The CPU frequency scaling platform driver directory is as follows:

drivers/cpufreq/
├── cpufreq.c
├── cpufreq_conservative.c
├── cpufreq-dt.c
├── cpufreq-dt.h
├── cpufreq-dt-platdev.c
├── cpufreq_governor_attr_set.c
├── cpufreq_governor.c
├── cpufreq_governor.h
├── cpufreq_ondemand.c
├── cpufreq_ondemand.h
├── cpufreq_performance.c
├── cpufreq_powersave.c
├── cpufreq_stats.c
├── cpufreq_userspace.c
├── freq_table.c
├── spacemit-cpufreq.c --> platform driver

Key Features

Features

FeatureDescription
Supports dynamic frequency and voltage scaling
Supports frequency boost up to 1.8GHz

Performance Parameters

Supported Frequency LevelsCorresponding Voltage
1600000000HZ1.05V
1228800000HZ0.95V
1000000000HZ0.95V
819000000HZ0.95V
614400000HZ0.95V

Test method

1. Change the policy to userspace mode
echo userspace > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor

2. View the list of supported frequencies
cat /sys/devices/system/cpu/cpufreq/policy0/scaling_available_frequencies
614400 819000 1000000 1228800 1600000

3. Set the CPU frequency
echo 1228800 > /sys/devices/system/cpu/cpufreq/policy0/scaling_setspeed

4. Check if the frequency is set successfully
cat /sys/devices/system/cpu/cpufreq/policy0/scaling_cur_freq

Configuration Introduction

Mainly includes driver enable configuration and dts configuration

CONFIG Configuration

CPUFREQ configuration is as follows:

CONFIG_SPACEMIT_K1X_CPUFREQ:

This adds the CPUFreq driver support for Freescale QorIQ SoCs
which are capable of changing the CPU's frequency dynamically.

Symbol: SPACEMIT_K1X_CPUFREQ [=y]
Type : tristate
Defined at drivers/cpufreq/Kconfig:315
Prompt: CPU frequency scaling driver for Spacemit K1X
Depends on: CPU_FREQ [=y] && OF [=y] && COMMON_CLK [=y]
Location:
-> CPU Power Management
-> CPU Frequency scaling
-> CPU Frequency scaling (CPU_FREQ [=y])
-> CPU frequency scaling driver for Spacemit K1X (SPACEMIT_K1X_CPUFREQ [=y])
Selects: CPUFREQ_DT [=y] && CPUFREQ_DT_PLATDEV [=y]

dts Configuration

Due to the large size of the dts configuration, please refer to the file:
arch/riscv/boot/dts/spacemit/k1-x_opp_table.dtsi

Debug Introduction

sysfs

The following directory contains all sysfs nodes related to CPUFREQ
/sys/devices/system/cpu/cpufreq/policy0/
affected_cpus
related_cpus
View supported policies
scaling_governor

Node for boost support
boost

View supported frequency points
scaling_available_frequencies

View the maximum frequency supported by software
scaling_max_freq

View the current frequency of the CPU
cpuinfo_cur_freq

View supported policies
scaling_available_governors

View the minimum frequency supported by software
scaling_min_freq

Maximum frequency supported by CPU hardware
cpuinfo_max_freq

Frequencies supported by the CPU in boost mode
scaling_boost_frequencies

Interface for setting CPU frequency in userspace mode
scaling_setspeed

Minimum frequency supported by CPU hardware
cpuinfo_min_freq

View the current frequency of the CPU
scaling_cur_freq
cpuinfo_transition_latency

Name of the current CPU frequency scaling driver
scaling_driver

Test Introduction

To test frequency and voltage scaling, you can loop through the test methods described above to verify the correctness of setting different frequencies.

FAQ