2.5 Power Management
2.5.1 Low Level Power Management (PM)
2.5.1.1 Introduction
여기에 있는 정보는 저전력 모드를 컨트롤하는 저수준의 Power Management (PM) 드라이버에 대해 설명한다.
다음은 각 i.MX 제품군에서 지원되는 전원 관리를 처리하는 방식의 차이점을 설명한다.
Table 10. Power Management Modes
i.MX Family | Supported Low Power Modes |
---|---|
i.MX 6 | RUN, WAIT, STOP, DORMANT |
i.MX 7 | RUN, WAIT, STOP, DORMANT, LPSR |
i.MX 8M | RUN, IDLE, SUSPEND, SNVS |
i.MX 8, i.MX 8X | 없음 - System Controller에서 처리함 |
i.MX 8ULP | ACTIVE, SLEEP, Power Down, Deep Power Down |
아래 테이블에는 다양한 저전력 모드에 대한 자세한 클럭 정보가 나열되어 있다.
Table 11. Low Power Modes
Mode | Core | Modules | PLL | CKIH/FPM | CKIL |
---|---|---|---|---|---|
RUN | Active | Active, Idle or Disable | On | On | On |
WAIT | Disable | Active, Idle or Disable | On | On | On |
STOP | Disable | Disable | Off | On | On |
LPSR | Power off | Disable | Off | Off | On |
DORMANT | Power off | Disable | Off | Off | On |
SNVS | Power off | Disable | Off | Off | On |
저전력 모드에 대한 자세한 내용은 SoC와 관련된 Applications Processor Reference Manual를 참조한다.
2.5.1.2 Software Operation
i.MX 6과 i.MX 7 전원 관리 드라이버는 저전력 모드를 아래와 같이 커널 전원 관리 상태에 매핑한다:
- Standby(대기, 준비)는 STOP 모드에 매핑되어, 상당한 절전 기능을 제공한다. Arm 코어를 제외하고, 시스템의 모든 블록은 여전히 전원이 켜져있는 저전력 상태로 전환되고, 메모리는 컨텐츠를 유지하기 위해 자체 리프레시 모드로 전환된다.
- Mem(RAM을 일시중단)는 DORMANT 모드에 매핑되어, 가장 큰 절전 기능을 제공한다. 컨탠츠를 유지하기 위해 자체 리프레시 모드로 전환되는 메모리를 제외하고, 시스템의 모든 불록은 저전력 상태로 전환된다. DTB ocrams 노드에 "fsl,enable-lpsr"이 정의되어 있으면, mem은 DORMANT 대신 LPSR 모드로 매핑되고, LPSR, SNVS와 DRAM 전원 도메인을 제외한 시스템의 모든 블록은 전원 차단 상태로 전환된다.
- 시스템 idle 상태는 WAIT 모드로 매핑된다.
- 커널이 standby/mem 모드로 진입하기 전, Arm Cortex-M4 프로세서가 Arm Cortex-A 프로세서와 함께 활성 상태이고 Arm Cortex-M4 프로세서가 저전력 idle 모드에 있지 않은 경우, Arm Cortex-M4 프로세서가 계속 실행될 수 있도록 하기 위해 STOP 모드 대신 WAIT 모드로 진입하려고 Arm Cortex-A 프로세서는 SoC를 트리거한다.
i.MX 6과 i.MX 7 전원 관리 드라이버는 다음 단계를 수행하여 저전력 모드에 진입하거나 탈출한다:
- 깊은 절전(deep sleep) 모드 요청을 발행하도록 Cortex-A 플랫폼은 허용한다.
- STOP이나 DORMANT 모드인 경우:
- 저전력 컨트롤 레지스터를 설정하기 위해, i.MX 6 CCM_CLPCR나 i.MX 7 GPC_LPCR_A7_BSC와 GPC_SLPCR 레지스터를 프로그램한다.
- DORMANT 모드의 경우, pdn_req가 어설션될 때 CPU 전원을 끄도록 요청한다.
- pdn_req가 어설션될 때, 내장 메모리 주변 디바이스 전원을 끄로록 요청한다.
- wakeup 인터럽트의 마스크를 해제하도록 GPC 마스크 레지스터를 프로그램한다.
- wait 모드에 대한 WFI 보류 명령을 실행하기 위해 cpu_do_idle를 호출한다.
- IRAM에서 imx6_suspend나 imx7_suspend를 실행한다.
- DORMANT 모드에서는 Arm 컨텍스트를 저장하고 DDR PAD의 드라이브 강도를 "low"로 변경하여 DDR PAD의 전력 누출을 최소화한다. stop 모드에 대한 WFI 보류 명령을 실행한다.
- wakeup 인터럽트를 생성하고 저전력 모드를 탈출한다. DORMANT 모드에서는 Arm 코어와 DDR 드라이브 강도를 복원한다.
DORMANT 모드에서, i.MX 6과 i.MX 7은 PMIC에 PMIC_STBY_REQ 핀을 어설트하고 전압 변경을 요청할 수 있다. U-Boot나 Machine-Specific Layer(MSL)은 i.MX 6과 i.MX 7 데이타 시트에 따라 STOP 모드에서 일반적으로 standby 전압을 설정한다.
i.MX 8M 제품군에서 전원 관리 드라이버는 다음 모드를 사용한다.
- RUN Mode: 이 모드에서는 Quad-A53 CPU 코어가 활성화되고 실행한다. 일정 부분 절전(power saving)을 위해 차단할 수 있다.
- IDLE Mode: 실행중인 스레드가 없고 모든 고속 디바이스가 활성화되지 않은 경우, 이 모드는 CPU가 자동으로 진입하는 모드로 정의되어 있다.
- SUSPEND Mode: 이 모드는 모든 클럭이 꺼져있고 불필요한 전원 공급이 모두 꺼져 있는 최대 절전 모드로 정의된다. Cortex-A53 CPU 플랫폼은 전원이 완전 차단된다. 전원을 끌 수 있는 모든 내부 디지털 로직과 아날로그 회로가 꺼진다.
- SNVS Mode: 이 모드는 RTC 모드라고 한다. 이 모드에서는 RTC와 SNVS 로직을 활성 상태로 유지하기 위해 SNVS 도메인의 전원만 켜진 상태로 유지한다.
i.MX 8과 i.MX 8X:
- 저전력 모드 관리는 전용 하드웨어 블록에 의해 컨트롤되지 않는다.
- 모든 저전력 모드는 소프트웨어 방식을 사용하여 시스템 컨트롤러 펌웨어(SCFW)에 구현되어 있다.
- SCFW는 시스템이 일시 중단되면 클러스터/CPU 의 전원을 끈다.
i.MX 8ULP:
- uPower는 전원 모드 전환, 전원 스위치와 mem ON/OFF를 컨트롤하는 역할을 한다.
- 자세한 전원 모드 설명은 SoC와 관련된 Applications Processor Reference Manual을 참조한다.
2.5.1.3 Source Code Structure
아래 테이블은 Power Management 드라이버 소스 파일을 보여준다.
Table 12. Power Management Driver Files
File | Description |
---|---|
|
i.MX 6 QuadPlus/Quad/Dual/Solo 전원 관리 작업 지원 |
|
i.MX 6 SLL 전원 관리 작업 지원 |
|
i.MX 6 UltraLite 전원 관리 작업 지원 |
|
i.MX 6 ULL 전원 관리 작업 지원 |
|
i.MX 6 SoloX 전원 관리 작업 지원 |
|
i.MX 7Dual 전원 관리 작업 지원 |
|
i.MX 7ULP 전원 관리 작업 지원 |
|
i.MX 8M 전원 관리 작업 지원 |
|
i.MX 8ULP 시스템 레벨 전압과 주파수 스케일링 지원 |
github.com/nxp-imx/imx-atf에 있는 Arm Trusted 펌웨어 | 전원 관리 작업을 위해 Arm trusted 펌웨어를 사용하는 i.MX 8, 8X, 8M, 8ULP와 i.MX 93을 지원 |
2.5.1.4 Menu Configuration Options
메뉴 구성에서 CONFIG_PM을 활성화한다. CONFIG_PM은 전원 관리에 대한 지원을 빌드한다. menuconfig에서 기본적으로 이 옵션은 Y이다. 이 옵션은 다음에서 사용할 수 있다:
Power management options > Power Management support
메뉴 구성에서 CONFIG_SUSPEND를 활성화한다. CONFIG_SUSPEND는 일시 중단에 대한 지원을 빌드한다. menuconfig에서 이 옵션은 다음에서 사용할 수있다:
Power management options > Suspend to RAM and standby
2.5.1.5 Programming Interface
소스 코드 구조 테이블에 표시된 대로 각 SoC에 대한 cpu_idle을 찾고 lpm을 검색한다. 이는 저전력 모드를 위한 API가 될 것이다. 이는 시스템을 WAIT와 STOP 모드로 전환하는 데 필요한 모든 단계를 구현한다.
2.5.2 PMIC PF Regulator
2.5.2.1 Introduction
PF100/200/3000은 PMIC 칩이다.
PF200/PF3000은 동일한 PF100 드라이버를 공유하기 때문에 거의 변경이 없는 PF100 기반이다. PF100 레귤레이터 드라이버는 전원 공급 레귤레이터의 저수준 컨트롤, 전압 레벨 선택, 레귤레이터 활성화/비활성화를 제공한다. 이 디바이스 드라이버는 PF100 하드웨어 컨트롤 레지스터에 액세스하기 위해 PF100 레귤레이터 드라이버를 사용하도록 한다. PF100 레귤레이터 드라이버는 레귤레이터 코어 드라이버를 기반으로 하며 커널 I2C 버스에 연결되어 있다.
PF8100/8200 PMIC는 i.MX 8과 i.MX 8X 제품용으로 디자인되었으며, 시스템 레벨의 디바이스이기 때문에 시스템 컨트롤 펌웨어(SCFW)에 의해 컨트롤된다. SCFW는 "SC_R_BOARD_R0"과 같은 Linux 터치용 특정 전원 리소스를 생성한다.
2.5.2.2 Hardware Operation
PMIC PF 레귤레이터는 애플리케이션 프로세서와 주변 디바이스에 레퍼런스와 공급 전압을 제공한다.
4개의 buck(스텝 다운) 컨버터(최대 6개의 독립 출력)와 1개의 boost(스텝 업) 컨버터가 포함되어 있다. buck 컨버터는 프로세서 코어와 메모리 같은 다른 저전압 회로에 전원을 공급한다. 동적 전압 스케일링은 프로세서 코어와/나 다른 회로에 대한 컨트롤된 공급 레일 조정을 가능하게 한다.
선형 레귤레이터는 배터리나 스위처에서 직접 공급되며, I/O와 주변 디바이스, 오디오, 카메라, BT, WLAN 등을 위한 공급 장치를 포함한다. 명명 규칙은 일반적이거나 가능한 사용 사례 애플리케이션을 암시하지만, 스위처와 레귤레이터는 지정된 기능의 가이드 라인 내에서 다른 시스템 전원 요구 사항에 활용될 수 있다.
PF100의 유일한 파워-온 이벤트는 PWRON이 HI이고, PF100의 유일한 파워-오프 이벤트는 PWRON이 LO이다. i.MX 6의 SNVS 블록에서 컨트롤되는 i.MX 6의 PMIC_ON_REQ 핀은 PF100의 PWRON 핀과 연결하여 PF100 on/off를 컨트롤하여 시스템을 파워-오프할 수 있다.
2.5.2.3 Software Operation
PMIC PF 레귤레이터 클라이언트 드라이버는 PMIC 하드웨어 컨트롤 레지스터를 재구성하여 작업을 수행한다.
일부 PMIC 전원 관리 작업은 시스템 디자인과 구성에 따라 다르다. 예를 들어, 시스템이 PMIC 이외의 전원 소스로 전원을 공급받는 경우 PMIC 전압 레귤레이터를 끄거나 조정해도 아무런 효과가 없다. 반대로 시스템이 PMIC에 의해 전원이 공급되는 경우, 전원 관리 드라이버와 레귤레이터 클라이언트 드라이버를 사용하는 모든 변경 사항은 전체 시스템의 작동이나 안정성에 영향을 줄 수 있다.
2.5.2.4 Driver Features
PMIC PF 레귤레이터 드라이버는 레귤레이터 코어 드라이버를 기반으로 한다. PMIC 컴포넌트의 레귤레이터 컨트롤를 위해 다음 서비스를 제공한다:
- 모든 전압 레귤레이터의 스위치 ON/OFF
- 모든 전압 레귤레이터의 값 설정
- 모든 전압 레귤레이터의 현재 값 가져오기
2.5.2.5 Regulator APIs
레귤레이터 전원 아키텍처는 Linux 커널 내에서 전압과 전류 레귤레이터에 대한 일반적인 인터페이스를 제공하도록 디자인되어 있다.
클라이언트나 컨슈머 드라이버에 전압과 전류 컨트롤을 제공하고 sysfs 인터페이스로 사용자 공간 애플리케이션에 상태 정보를 제공하기 위한 것이다. 그 의도는 시스템이 레귤레이터 출력을 동적으로 컨트롤하여 전력을 절약하고 배터리 수명을 연장할 수 있도록 하는 것이다. 이는 전압 레귤레이터(전압 출력을 컨트롤할 수 있는 경우)와 전류 싱크(전류 출력을 컨트롤할 수 있는 경우)에 모두 적용된다.
자세한 내용은 opensource.wolfsonmicro.com/node/15(링크 깨짐)를 참조한다.
이 프레임워크에서 대부분 전원 작업은 다음의 통합된 API 호출로 수행할 수 있다:
- regulator_get는 레귤레이터에 대한 레퍼런스를 조회하고 얻기 위한 통합된 API 호출이다:
struct regulator *regulator_get(struct device *dev, const char *id);
- regulator_put는 레귤레이터 소스를 해제하기 위한 통합된 API 호출이다:
void regulator_put(struct regulator *regulator, struct device *dev);
- regulator_enable은 레귤레이터 출력을 활성화하기 위한 통합된 API 호출이다:
int regulator_enable(struct regulator *regulator);
- regulator_disable은 레귤레이터 출력을 비활성화하기 위한 통합된 API 호출이다:
int regulator_disable(struct regulator *regulator);
- regulator_is_enabled는 활성화된 레귤레이터 출력이다:
int regulator_is_enabled(struct regulator *regulator);
- regulator_set_voltage은 레귤레이터 출력 전압을 설정하기 위한 통합된 API 호출이다:
int regulator_set_voltage(struct regulator *regulator, int uV);
- regulator_get_voltage은 레귤레이터 출력 전압을 가져오기 위한 통합된 API 호출이다:
int regulator_get_voltage(struct regulator *regulator);
다음 Linux 커널 내부의 레귤레이터 코어 소스 코드에서 더 많은 API와 세부 정보를 찾을 수 있다.
drivers/regulator/core.c
2.5.2.6 Driver Architecture
다음 Figure는 PMIC PF 레귤레이터 드라이버의 기본 아키텍처를 보여준다.
2.5.2.7 Driver Interface Details
PFUZE100 레귤레이터에 대한 액세스는 레귤레이터 코어 드라이버의 API로 제공된다.
PFUZE100 레귤레이터 드라이버는 다음 레귤레이터 컨트롤을 제공한다:
- 일반 모드(최대 6개의 독립 레일)의 4개의 buck 스위치 레귤레이터: SW1AB, SW1C, SW2, SW3A, SW3B, SW4
- 특정 레지스터(PFUZE100_SWxSTANDBY)로 미리 buck 스위치를 standby 상태로 프로그래밍 가능
- 6개의 선형 레귤레이터: VGEN1, VGEN2, VGEN3, VGEN4, VGEN5, VGEN6
- i.MX 프로세서에서 VSNVS 지원을 위한 1개의 LDO/Switch 공급 장치
- DDR Memory 레퍼런스 전압에 대해 1개의 Low 전류, 높은 정확성, 전압 레퍼런스
- USB OTG를 지원하는 1개의 Boost 레귤레이터
- PFUZE100의 대부분의 전원 레일은 하드웨어 디자인에 따라 올바르게 프로그램되어 있다. 따라서 PFUZE100 레귤레이터를 사용하는 커널을 찾을 수 없다. PFUZE100 레귤레이터 드라이버는 기본 PFUZE100 값이 사용자의 하드웨어 디자인에 맞지 않을 경우 사용자가 자유롭게 사용할 수 있도록 이러한 레귤레이터를 구현했다.
2.5.2.8 Source Code Structure
PFUZE 레귤레이터 드라이버는 drivers/regulator 디렉토리에 있다:
Table 13. PFUZE Driver Files
File | Description |
---|---|
drivers/regulator/pfuze100-regulator.c | PFUZE100 레귤레이터 클라이언트 드라이버 구현. |
drivers/regulator/pf1550.c | PFUZE1550 레귤레이터 클라이언트 드라이버 구현. |
drivers/regulator/pf1550-regulator-rpmsg.c | PFUZE1550 레귤레이터 RPMSG 코드 구현. |
PMIC와 관련된 보드 파일이 없다. 대기 전압 설정 등, 일부 PFUZE 드라이버 코드가 U-Boot로 이동되었다. 일부 코드는 DTS 파일로 구현되어 있다. Uboot 소스에서 PFUZE100을 검색하고 arch/arm/boot/dts에서 i.MX 6과 i.MX 7 및 arch/arm64/boot/dts에서 i.MX 8M에 대한 디바이스 트리 dtsi 파일에서 pfuse를 검색한다.
2.5.2.9 Menu Configuration Options
메뉴 구성에서 다음 모듈을 활성화한다:
Device Drivers > Voltage and Current regulator support > Freescale PFUZE100/200/3000 regulator driver
2.5.3 CPU Frequency Scaling (CPUFREQ)
2.5.3.1 Introduction
CPU 주파수 스케일링 디바이스 드라이버를 사용하면 CPU의 클럭 속도를 즉시 변경할 수 있다. CPU 주파수가 변경되면, 전원 공급 장치에서 필요한 전압이 DTS(디바이스 트리 스크립트)에 정의된 전압 값으로 변경된다. 클럭 속도가 감소함에 따라 CPU가 적은 전력을 사용하기 때문에, 이 방법은 전력 소비를 줄일 수 있다(따라서 배터리 전력 절약).
2.5.3.2 Software Operation
CPUFREQ 디바이스 드라이버는 CPU 주파수와 전압을 즉시 변경하도록 디자인되어 있다.
주파수가 DTS에 정의되어 있지 않으면, CPUFREQ 드라이버는 CPU 주파수를 어레이(array)에서 가장 가까우면서 더 높은 주파수로 변경한다. 전압이 레귤레이터 API를 사용하여 설정되는 동안에, 주파수는 클럭 프레임워크 API를 사용하여 처리된다. 어레이에서 CPU 주파수는 부팅시 사용되는 CPU 주파수를 기반으로 한다. 수동으로 변경할 수 없는 interactive CPU 주파수 거버너(governor)가 사용된다. CPU 주파수를 수동으로 변경하려면, 사용자 공간의 CPU 주파수 거버너를 사용할 수 있다. 기본값으로, conservative CPU 주파수 거버너가 사용된다.
드라이버에 구현된 함수에 대한 자세한 내용은 API 문서를 참조한다.
CPU 주파수를 KHz로 변경할 수 있는 값(첫 번째 열의 값은 주파수 값이다)을 보려면 다음 커맨드를 사용한다:
cat /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state
위의 커맨드를 사용하여 지정한 값으로 CPU 주파수를 변경하려면(예: 792MHz), 다음 커맨드를 사용한다:
echo 792000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
792000 주파수는 792MHz의 KHz 단위이다.
최대 주파수는 다음 커맨드를 사용하여 확인할 수 있다:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
KHz 단위로 현재 CPU 주파수를 보려면, 다음 커맨드를 사용한다:
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq
사용 가능한 거버너를 보려면, 다음 커맨드를 사용한다:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
Interactive CPU 주파수 거버너로 변경하려면, 다음 커맨드를 사용한다:
echo interactive > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
2.5.3.3 Source Code Structure
아래 테이블은 해당 디렉토리에서 사용할 수 있는 소스 파일과 헤더를 보여준다.
Table 14. CPUFREQ Driver Files
File | Description |
---|---|
drivers/cpufreq/imx6q-cpufreq.c | i.MX 6 CPUFREQ 함수 |
drivers/cpufreq/imx-cpufreq-dt.c | i.MX 7과 8 CPUFREQ 함수 |
CPU 주파수 작업 지점 설정은 i.MX 6와 i.MX7의 경우 arch/ arm/boot/dts, 그리고 i.MX 8, i.MX 8X와 i.MX 8M의 경우 arch/arm64/boot/dts에 있는 해당 SoC의 dtsi 파일을 참조한다.
2.5.3.4 Menu Configuration Options
이 모듈에 대해 해당 Linux 커널 구성이 제공되고 있다:
- CONFIG_CPU_FREQ; menuconfig에서 이 옵션은 다음 위치에 있다:
- CPU Power Management > CPU Frequency scaling
- 다음 옵션을 선택할 수 있다:
- CPU Frequency scaling : CPU 주파수 스케일링
- CPU frequency translation statistics : CPU 주파수 변환 통계
- Default CPU frequency governor (conservative)(interactive) : 기본 CPU 주파수 거버너
- Performance governor : 성능 거버너
- Powersave governor : 절전 거버너
- Userspace governor for userspace frequency scaling : 사용자 공간에서 주파수 스케일링을 위한 사용자 공간 거버너
- Interactive CPU frequency policy governor : Interactive CPU 주파수 정책 거버너
- Conservative CPU frequency governor : Conservative CPU 주파수 거버너
- Schedutil CPU frequency governor : Schedutil CPU 주파수 거버너
- CPU frequency driver for i.MX CPUs : i.MX CPU용 CPU 주파수 드라이버
2.5.4 Dynamic Bus Frequency
2.5.4.1 Introduction
전력 소비를 개선하기 위해, Bus Frequency 드라이버는 i.MX 6, i.MX 7와 i.MX 8M 제품군에 대한 다양한 시스템 주파수를 동적으로 관리한다.
주파수 변경은 상위 레이어에 투명하며 드라이버나 미들웨어의 개입이 필요하지 않다. 주변 디바이스의 활동과 CPU 로드에 따라 버스 주파수 드라이버는 24MHz와 최대 주파수 사이에서 DDR 주파수를 변경한다. 마찬가지로, AHB 주파수는 24MHz와 최대 주파수 사이에서 변경된다.
2.5.4.2 Operation
Bus Frequency 드라이버는 Linux BSP의 전원 관리 모듈의 일부분이다. 이 드라이버의 주요 용도는 주변 디바이스 활동과 CPU 로드를 기반으로 시스템 클럭(예: AHB, DDR, AXI 등)의 동작 주파수를 다양하게 조정하는 것이다.
2.5.4.3 Software Operation
버스 주파수는 작동을 위한 디바이스 드라이버의 요청과 해제에 따라 다르다. 드라이버는 버스 주파수 API를 호출하여 원하는 버스 setpoint(설정값)를 요청하거나 릴리스한다. 버스 주파수는 현재 요청 중인 주변 디바이스를 기반으로 시스템 주파수를 가장 높은 주파수 setpoint로 설정한다.
버스 주파수 드라이버를 활성화하려면, 다음 커맨드를 사용한다:
echo 1 > /sys/bus/platform/drivers/imx_busfreq/soc\:busfreq/enable
버스 주파수 드라이버를 비활성화하려면, 다음 커맨드를 사용한다:
echo 0 > /sys/bus/platform/drivers/imx_busfreq/soc\:busfreq/enable
Arm Cortex-M4 프로세서가 Arm Cortex-A 프로세서와 함께 작동하면, Arm Cortex-M4 프로세서도 작동을 위해 높은 setpoint로 버스 주파수를 요청하거나 해제할 수 있다. 이는 Arm Cortex-A 프로세서가 Arm Cortex-M4 프로세서를 고속 디바이스 중 하나로 취급한다는 것을 의미한다.
Setpoint 모드는 다음을 수행한다:
- High Frequency Setpoint 모드는 좋은 성능을 위해 더 높은 주파수를 필요로 하는 대부분의 주변 디바이스가 활성화되어 있을 때 사용된다. 예를 들어, 비디오 재생과 그래픽 처리.
- Audio Playback Setpoint 모드는 오디오 재생 모드에서 사용된다.
- Low Frequency Setpoint 모드는 시스템이 사용자 입력을 기다리는 유휴 상태일 때 사용된다(디스플레이가 꺼져 있음). i.MX 8M의 경우, 이 모드는 주변 디바이스가 고속 모드나 오디오 모드를 요청하지 않을 때 사용된다.
다음 테이블은 각 제품군에 대한 소프트웨어 setpoint를 설명한다.
Table 15. BusFrequency Set Points
SoC | Setpoints |
---|---|
i.MX 6 |
|
i.MX 7Dual |
|
i.MX 8M |
|
2.5.4.4 Source Code Structure
다음 테이블은 소스파일과 헤더의 목록이다.
Table 16. BusFrequency Driver Files
File | Description |
---|---|
arch/arm/mach-imx/busfreq-imx.c | i.MX 6과 i.MX 7 Bus Frequency 기능 |
include/linux/busfreq-imx.h | i.MX Bus Frequency API Definitions |
arch/arm/mach-imx/busfreq_ddr3.c | i.MX 6과 i.MX 7 DDR3 Bus Frequency 기능 |
arch/arm/mach-imx/busfreq_lpddr2.c | i.MX 6과 i.MX 7 LPDDR2 Bus Frequency 기능 |
arch/arm/mach-imx/lpddr2_freq_imx6.S | i.MX 6 LPDDR2 Bus Frequency 기능 |
arch/arm/mach-imx/lpddr2_freq_imx6q.S | i.MX 6 QuadPlus/Quad/Dual/Solo LPDDR2 Bus Frequency 기능 |
arch/arm/mach-imx/lpddr2_freq_imx6sll.S | i.MX 6 SLL LPDDR2 Bus Frequency 기능 |
arch/arm/mach-imx/lpddr2_freq_imx6sx.S | i.MX 6 SoloX LPDDR2 Bus Frequency 기능 |
arch/arm/mach-imx/lpddr3_freq_imx.S | i.MX 6과 i.MX 7 LPDDR3 Bus Frequency 기능 |
arch/arm/mach-imx/ddr3_freq_imx6.S | i.MX 6 Bus Frequency 기능 |
arch/arm/mach-imx/ddr3_freq_imx6sx.S | i.MX 6 SoloX Bus Frequency 기능 |
arch/arm/mach-imx/ddr3_freq_imx7d.S | i.MX 7 Dual DDR3 Bus Frequency 기능 |
drivers/soc/imx/busfreq-imx8mq.c | i.MX 8M Bus Frequency 기능 |
driver/soc/imx/imx8ulp_lpm.c | i.MX 8ULP 시스템 레벨 전압과 주파수 스케일링 |
버스 주파수 모드는 i.MX 6과 i.MX 7의 경우 arch/arm/boot/dts와 i.MX 8M의 경우 arch/arm64/boot/dts에 있는 SoC dtsi 파일에 정의되어 있다.
i.MX 8ULP에는 APD 측에 전압과 주파수 스케일링을 변경하는 간단한 인터페이스가 있다.
시스템 레벨의 전압과 주파수 스케일링을 활성화하려면, 다음 커맨드를 사용한다:
echo 1 > /sys/device/platform/imx8ulp-lpm/enable
참고
이 모드를 활성화하기 전에, FEC와 디스플레이가 꺼져 있어야 하며 시스템은 idle 상태여야 한다.
시스템 레벨의 전압과 주파수 스케일링을 비활성화하려면, 다음 커맨드를 사용한다:
echo 0 > /sys/device/platform/imx8ulp-lpm/enable
2.5.4.5 Menu Configuration Options
이 드라이버에 대한 메뉴 구성 옵션은 없다. Bus Frequency 드라이버는 버스 주파수 드라이버를 지원하는 SoC에 대해서 기본으로 포함되어 활성화되어 있다.
2.5.5 Battery Charging
2.5.5.1 Introduction
Battery Charging(배터리 충전)은 i.MX 6 SABRE SD 보드용 max8903-charger에서 지원되고 있다.
2.5.5.2 Software Operation
None.
2.5.5.3 Source Code Structure
배터리 충전 소스는 drivers/power/supply/sabresd_battery.c를 기반으로 하고 있다.
2.5.5.4 Menu Configuration Options
메뉴 구성에서 다음 모듈을 활성화한다:
Device Drivers > Power supply class support > Sabresd Board Battery DC-DC Charger for USB and Adapter Power