Rockchip · AI & Linux Hub

Stromversorgung und Thermik

Rockchip RK3506: vollständiger Leitfaden zu System-Suspend, DTS, Aufwecken und Logs

Rockchip RK3506: vollständiger Leitfaden zu System-Suspend, DTS, Aufwecken und Logs — V1.1.0

· ArmSoM Editorial · Rockchip source documentation · 9 Min. Lesezeit

Vollständiger technischer Text aus der chinesischen Quelle V1.1.0 für RK3506 und Linux 6.1. Nur ArmSoM-Plattformreferenz: SoC, SDK/BSP, trust/ATF, Kernel, PMIC, Versorgungsbaum und Aufweckpins der konkreten Platine prüfen. Keine pauschale Unterstützung aller ArmSoM-Platinen. Kein englisches PDF und keine separaten technischen Abbildungen vorhanden; alle vier Sprachen basieren auf der chinesischen Quelle. Code, Konfiguration und Logs sind Quellbeispiele, keine ArmSoM-Hardwaretests; Suspend- oder Versorgungsbefehle wurden nicht ausgeführt.

Fehlerhafte Abschalt-, Takt- oder Aufweckeinstellungen können Resume verhindern oder Datenverlust verursachen. Beispiele vor Verwendung von einem mit der Hardware vertrauten Ingenieur prüfen lassen. Quellkommentare, Schreibweisen, Platzhalter und Unklarheiten bleiben erhalten; Konstanten werden nicht erfunden.

ArmSoM Docs · Rockchip kernel

1. System-Suspend

Linux-Suspend-Ablauf: Der allgemeine Kernel-Ablauf suspendiert Peripheriemodule und Betriebssystem; anschließend schließt RK3506-OPTEE den SoC-Suspend ab. OPTEE entspricht der Datei rk3506_tee_vx.yy.bin in rkbin. Wegen Funktionsverbesserungen und Fehlerkorrekturen empfiehlt die Quelle mindestens folgende Version:

rk3506_tee_v2.10.bin      // sdk默认
rk3506_tee_ta_v1.10.bin   // 客户有ta需求时使用

OPTEE schaltet typischerweise IP-Module, Takte und PLLs ab, versetzt DDR in Selbstauffrischung, schaltet den Systembus auf einen langsamen Takt (24M oder 32K), trennt vdd_arm/vdd_logic und konfiguriert Aufweckquellen. Produktspezifische Einstellungen werden OPTEE beim Start über DTS-Knoten übergeben. Suspend-Optionen und Verfahren sind plattformspezifisch und nicht übertragbar; dieses Dokument gilt nur für RK3506. Die Domänen VD_PMU und VD_Logic erläutert das PMU-Kapitel des TRM.

1.1 Treiberdateien

./drivers/soc/rockchip/rockchip_pm_config.c
./drivers/firmware/rockchip_sip.c
./include/dt-bindings/suspend/rockchip-rk3506.h

1.2 DTS-Knoten

rockchip_suspend: rockchip-suspend {
    compatible = "rockchip,pm-rk3506";
    status = "okay";
    // 常规配置(必要,根据实际需求配置)
    rockchip,sleep-mode-config = <
        (0
        | RKPM_ARMOFF_DDRPD
        | RKPM_24M_OSC_DIS
        | RKPM_32K_CLK
        | RKPM_32K_SRC_RC
        )
    >;
    // 唤醒源配置(必要,根据实际需求配置)
    rockchip,wakeup-config = <
        (0
        | RKPM_GPIO0_WAKEUP_EN
        )
    >;
    // 电源配置(必要,根据实际硬件设计进行配置)
    rockchip,apios-suspend = <
        (0
        | RKPM_PWREN_CORE_GPIO0A2 | RKPM_PWREN_CORE_ACT_LOW
        | RKPM_PWREN_SLEEP_GPIO0A0 | RKPM_PWREN_SLEEP_ACT_LOW
        )
    >;
    // GPIO配置(可选,根据实际需求配置。用于配置外设io状态以便降低待机功耗)
#define GPIO0_IOC_GPIO0A_PULL_REG   0xff950200
#define GPIO0_IOC_GPIO0C_PULL_REG   0xff950208
#define GPIO0A3_PULL_DOWN       0x00c00080
#define GPIO0C5_PULL_DOWN       0x0c000800
    rockchip,sleep-io-config = <
        GPIO0_IOC_GPIO0C_PULL_REG GPIO0C5_PULL_DOWN /* PWM0_CH0_CPU */
        GPIO0_IOC_GPIO0A_PULL_REG GPIO0A3_PULL_DOWN /* PWM0_CH2_LCD_BL */
    >;
    // 调试配置(可选,根据实际需求配置。用于调试分析)
    rockchip,sleep-debug-en = <
        (0
        | RKPM_DBG_TIMEOUT_S(3)
        )
    >;
};

Das Rockchip SDK liefert gewöhnlich eine allgemeine, weitgehend vollständige Referenzkonfiguration. Optionen entsprechend den tatsächlichen Produktanforderungen ergänzen oder entfernen.

2. DTS-Konfiguration

Die derzeit unterstützten Konfigurationsoptionen sind hier definiert:

./include/dt-bindings/suspend/rockchip-rk3506.h

2.1 Allgemeine Konfiguration

Konfigurationseigenschaft:

rockchip,sleep-mode-config = <...>;

Konfigurationsdefinitionen:

// ARM不断电。产品上一般不使用,仅用于排查问题。
#define RKPM_ARMPD                       BIT(0)

// ARM断电 + ddr不进入低功耗。产品上一般不使用,仅用于排查问题。
#define RKPM_ARMOFF                      BIT(1)

// ARM断电 + ddr进入低功耗。
#define RKPM_ARMOFF_DDRPD                BIT(2)

// ARM断电 + Logic断电 + ddr进入低功耗。
#define RKPM_ARMOFF_LOGOFF               BIT(3)

// 关闭24M晶振(只有切到32k时钟的情况下才允许配上)。
#define RKPM_24M_OSC_DIS                 BIT(4)

// 系统时钟切到32K。
#define RKPM_32K_CLK                     BIT(5)
// 32K系统时钟的来源(要求必须配置RKPM_32K_CLK)。分别是:
// - 外部32k晶振(需要板子支持)
// - SoC内置RC400时钟分频到32k
// - 24M晶振分频(此时不能配置RKPM_24M_OSC_DIS)
// 如果在意待机耗时的准确性,选择建议:外部32k晶振 > 24M晶振分频(此时待机不能关晶振,功耗会比选择RC时钟更大) > SoC内置RC时钟。
// 如果不在意待机耗时的准确性,选择建议:SoC内置RC时钟。
#define RKPM_32K_SRC_OSC                 BIT(6)
#define RKPM_32K_SRC_RC                  BIT(7)
#define RKPM_32K_SRC_24XIN               BIT(8)

// 使用分立电源方案且VDD_ARM使用PWM0_CH0控制PWM调压,需要配上。
#define RKPM_PWM0_CH0_REGULATOR          BIT(9)

// 不关PWM0时钟,对应cru gate1[1]。如果待机时需要pwm0上的呼吸灯继续工作,需要配上。
#define RKPM_PWM0_SRC_24M_EN             BIT(10)

// 不关PWM0时钟,对应cru gate1[0]。产品上一般不配,仅特殊需求或排查问题时使用。
#define RKPM_PWM0_SRC_PLL_EN             BIT(11)

// 不关VD_Logic域的总时钟。产品上一般不配,仅特殊需求或排查问题时使用。
#define RKPM_LOG_CLK_ALIVE               BIT(12)

// 不关PLL。产品上一般不配,仅特殊需求或排查问题时使用。
#define RKPM_GPLL_ALIVE                  BIT(13)
#define RKPM_V0PLL_ALIVE                 BIT(14)
#define RKPM_V1PLL_ALIVE                 BIT(15)
// 关闭GPIO4的输入使能。可能有一点待机功耗收益,但是无法支持GPIO4作为唤醒源。
// 客户自行验证后确认是否要用。
#define RKPM_GPIO4_IE_DIS                BIT(16)

// VD_PMU域的模块不切到低速时钟。一般是待机情况下还需要VD_PMU域的模块正常工作时需要配上。
// 例如:系统待机时MCU也还继续工作,它要控制GPIO0上的pin脚状态。
#define RKPM_PMU_BUS_CLK_HS              BIT(17)

// 仅在RK801电源方案上才配置。
#define RKPM_PWM0_CH0_CORE_PWREN         BIT(18)

RK3506 unterstützt zwei Suspend-Modi: ARM-Abschaltung und ARM+LOGIC-Abschaltung.

2.2 Versorgungskonfiguration

Konfigurationseigenschaft:

rockchip,apios-suspend = <...>;

Konfigurationsdefinitionen:

// PWRCTRL_SLEEP脚关电源时的极性
#define RKPM_PWREN_SLEEP_ACT_LOW         PIN0(PWREN_ACT_LOW_MASK)
#define RKPM_PWREN_SLEEP_ACT_HIGH        PIN0(PWREN_ACT_HIGH_MASK)
// PWRCTRL_SLEEP脚定义
#define RKPM_PWREN_SLEEP_GPIO0A0         PIN0(0)
#define RKPM_PWREN_SLEEP_GPIO0A1         PIN0(1)
#define RKPM_PWREN_SLEEP_GPIO0A2         PIN0(2)
#define RKPM_PWREN_SLEEP_GPIO0A3         PIN0(3)
#define RKPM_PWREN_SLEEP_GPIO0A4         PIN0(4)
#define RKPM_PWREN_SLEEP_GPIO0A5         PIN0(5)
#define RKPM_PWREN_SLEEP_GPIO0A6         PIN0(6)
#define RKPM_PWREN_SLEEP_GPIO0A7         PIN0(7)
#define RKPM_PWREN_SLEEP_GPIO0B0         PIN0(8)
#define RKPM_PWREN_SLEEP_GPIO0B1         PIN0(9)
#define RKPM_PWREN_SLEEP_GPIO0B2         PIN0(10)
#define RKPM_PWREN_SLEEP_GPIO0B3         PIN0(11)
#define RKPM_PWREN_SLEEP_GPIO0B4         PIN0(12)
#define RKPM_PWREN_SLEEP_GPIO0B5         PIN0(13)
#define RKPM_PWREN_SLEEP_GPIO0B6         PIN0(14)
#define RKPM_PWREN_SLEEP_GPIO0B7         PIN0(15)
#define RKPM_PWREN_SLEEP_GPIO0C0         PIN0(16)
#define RKPM_PWREN_SLEEP_GPIO0C1         PIN0(17)
#define RKPM_PWREN_SLEEP_GPIO0C2         PIN0(18)
#define RKPM_PWREN_SLEEP_GPIO0C3         PIN0(19)
#define RKPM_PWREN_SLEEP_GPIO0C4         PIN0(20)
#define RKPM_PWREN_SLEEP_GPIO0C5         PIN0(21)
#define RKPM_PWREN_SLEEP_GPIO0C6         PIN0(22)
#define RKPM_PWREN_SLEEP_GPIO0C7         PIN0(23)
#define RKPM_PWREN_SLEEP_GPIO1B1         PIN0(24)
#define RKPM_PWREN_SLEEP_GPIO1B2         PIN0(25)
#define RKPM_PWREN_SLEEP_GPIO1B3         PIN0(26)
#define RKPM_PWREN_SLEEP_GPIO1C2         PIN0(27)
#define RKPM_PWREN_SLEEP_GPIO1C3         PIN0(28)
#define RKPM_PWREN_SLEEP_GPIO1D1         PIN0(29)
#define RKPM_PWREN_SLEEP_GPIO1D2         PIN0(30)
#define RKPM_PWREN_SLEEP_GPIO1D3         PIN0(31)

// PWRCTRL_CORE脚关电源时的极性
#define RKPM_PWREN_CORE_ACT_LOW          PIN8(PWREN_ACT_LOW_MASK)
#define RKPM_PWREN_CORE_ACT_HIGH         PIN8(PWREN_ACT_HIGH_MASK)
// PWRCTRL_CORE脚定义
#define RKPM_PWREN_CORE_GPIO0A0          PIN8(0)
#define RKPM_PWREN_CORE_GPIO0A1          PIN8(1)
#define RKPM_PWREN_CORE_GPIO0A2          PIN8(2)
#define RKPM_PWREN_CORE_GPIO0A3          PIN8(3)
#define RKPM_PWREN_CORE_GPIO0A4          PIN8(4)
#define RKPM_PWREN_CORE_GPIO0A5          PIN8(5)
#define RKPM_PWREN_CORE_GPIO0A6          PIN8(6)
#define RKPM_PWREN_CORE_GPIO0A7          PIN8(7)
#define RKPM_PWREN_CORE_GPIO0B0          PIN8(8)
#define RKPM_PWREN_CORE_GPIO0B1          PIN8(9)
#define RKPM_PWREN_CORE_GPIO0B2          PIN8(10)
#define RKPM_PWREN_CORE_GPIO0B3          PIN8(11)
#define RKPM_PWREN_CORE_GPIO0B4          PIN8(12)
#define RKPM_PWREN_CORE_GPIO0B5          PIN8(13)
#define RKPM_PWREN_CORE_GPIO0B6          PIN8(14)
#define RKPM_PWREN_CORE_GPIO0B7          PIN8(15)
#define RKPM_PWREN_CORE_GPIO0C0          PIN8(16)
#define RKPM_PWREN_CORE_GPIO0C1          PIN8(17)
#define RKPM_PWREN_CORE_GPIO0C2          PIN8(18)
#define RKPM_PWREN_CORE_GPIO0C3          PIN8(19)
#define RKPM_PWREN_CORE_GPIO0C4          PIN8(20)
#define RKPM_PWREN_CORE_GPIO0C5          PIN8(21)
#define RKPM_PWREN_CORE_GPIO0C6          PIN8(22)
#define RKPM_PWREN_CORE_GPIO0C7          PIN8(23)
#define RKPM_PWREN_CORE_GPIO1B1          PIN8(24)
#define RKPM_PWREN_CORE_GPIO1B2          PIN8(25)
#define RKPM_PWREN_CORE_GPIO1B3          PIN8(26)
#define RKPM_PWREN_CORE_GPIO1C2          PIN8(27)
#define RKPM_PWREN_CORE_GPIO1C3          PIN8(28)
#define RKPM_PWREN_CORE_GPIO1D1          PIN8(29)
#define RKPM_PWREN_CORE_GPIO1D2          PIN8(30)
#define RKPM_PWREN_CORE_GPIO1D3          PIN8(31)

Die RK3506-Hardware unterstützt einen oder zwei pwrctrl-Pins zur Steuerung des Suspend-Zustands von vdd_core, vdd_logic und anderen Versorgungen. Entsprechend der tatsächlichen Schaltung und den Suspend-Anforderungen konfigurieren. Beispiel aus arch/arm/boot/dts/rk3502-evb1-v10.dtsi:

rockchip,sleep-mode-config = <
        (0
        | RKPM_ARMOFF_DDRPD
        | RKPM_24M_OSC_DIS
        | RKPM_32K_CLK
        | RKPM_32K_SRC_RC
        | RKPM_PWM0_CH0_REGULATOR
        )
    >;

// - pwrctrl_core(gpio0_a2), 拉低时关vdd_core。
// - pwrctrl_sleep(gpio0_a0), 拉低时关vdd_logic和其它电源。
// - 注意:虽然这里两个pwrctrl脚都配置了,但RKPM_ARMOFF_DDRPD待机模式下只拉pwrctrl_core,只有RKPM_ARMOFF_LOGOFF模式下才会拉两个pwrctrl脚。
rockchip,apios-suspend = <
    (0
    | RKPM_PWREN_CORE_GPIO0A2 | RKPM_PWREN_CORE_ACT_LOW
    | RKPM_PWREN_SLEEP_GPIO0A0 | RKPM_PWREN_SLEEP_ACT_LOW
    )
>;

2.3 Aufweckquellenkonfiguration

Konfigurationseigenschaft:

rockchip,wakeup-config = <...>;

Konfigurationsdefinitionen:

// 暂不支持。有需求请提Redmine。
#define RKPM_ARM_WAKEUP_EN               BIT(0)
#define RKPM_M0_WAKEUP_EN                BIT(1)
#define RKPM_HPTIMER_WAKEUP_EN           BIT(2)

// 已支持。
#define RKPM_GPIO0_WAKEUP_EN             BIT(3)
#define RKPM_GPIO1_SHADOW_WAKEUP_EN      BIT(4)
#define RKPM_GPIO2_WAKEUP_EN             BIT(5)
#define RKPM_GPIO3_WAKEUP_EN             BIT(6)
#define RKPM_GPIO4_WAKEUP_EN             BIT(7)

// 暂不支持。有需求请提Redmine。
#define RKPM_PWM0_WAKEUP_EN              BIT(8)
#define RKPM_PWM1_WAKEUP_EN              BIT(9)
#define RKPM_PWM2_WAKEUP_EN              BIT(10)

// 已支持。UART作为唤醒源的配置注意点:
// - 待机模式选择:vdd_logic不断电、时钟不要切到32k。
// - 内核uart节点:增加"wakeup-source;"属性。
// - uart时钟源应该是24M晶振、保证待机前uart时钟没有关闭。
#define RKPM_UART0_WAKEUP_EN             BIT(11)
#define RKPM_UART1_WAKEUP_EN             BIT(12)
#define RKPM_UART2_WAKEUP_EN             BIT(13)
#define RKPM_UART3_WAKEUP_EN             BIT(14)
#define RKPM_UART4_WAKEUP_EN             BIT(15)
#define RKPM_UART5_WAKEUP_EN             BIT(16)
// 已支持。(待机时系统时钟可以切到32K模式)
#define RKPM_USB0_DET_WAKEUP_EN          BIT(17)
#define RKPM_USB1_DET_WAKEUP_EN          BIT(18)

// 暂不支持。有需求请提Redmine。
#define RKPM_MAC0_WAKEUP_EN              BIT(19)
#define RKPM_MAC1_WAKEUP_EN              BIT(20)
#define RKPM_TIMER0_WAKEUP_EN            BIT(21)
#define RKPM_TIMER1_WAKEUP_EN            BIT(22)
#define RKPM_CAN0_WAKEUP_EN              BIT(23)
#define RKPM_CAN1_WAKEUP_EN              BIT(24)
#define RKPM_TOUCH_KEY_WAKEUP_EN         BIT(25)
#define RKPM_SARADC_WAKUP_EN             BIT(26)
#define RKPM_ALARM_WAKEUP_EN             BIT(27)
#define RKPM_SECOND_CATCH_WAKEUP_EN      BIT(28)

// 已支持。
#define RKPM_PMU_TIMEOUT_EN              BIT(29)

Aufweckhinweis: Bei abgeschaltetem ARM+LOGIC werden nur Modulinterrupts der Domäne VD_PMU unterstützt, vor allem GPIO0 und GPIO1_Shadow. Für USB-Aufwecken muss das Kernel-Repository folgenden Patch enthalten:

commit 8e6926b1d4ae8ace396f5bd59e3e7801ca2ee98f
Author: Jianwei Zheng <jianwei.zheng@rock-chips.com>
Date:   Fri Nov 15 16:37:45 2024 +0800

    phy: rockchip: inno-usb2: support usb wakeup for rk3506

    1. Support linestate filter time control register for OTG0 and OTG1.
    2. Disable disconnect rise and disconnect fall irq. Because these
    two interrupts will be triggered immediately after the system goes
    into sleep mode, causing the system to be unable to sleep.

    Change-Id: Ia6c1e58ef926f86dee6df0013aafe9bfe4586b52
    Signed-off-by: Jianwei Zheng <jianwei.zheng@rock-chips.com>

2.4 GPIO-Konfiguration

Konfigurationseigenschaft:

rockchip,sleep-io-config = <...>;

Diese Eigenschaft optimiert die Standby-Leistungsaufnahme. Ungeeignete GPIO-Zustände (Eingang, Ausgang, Pull-up oder Pull-down) erhöhen sie und erschweren die strengen Produktanforderungen. Wenn der Treiber den Suspend-Zustand eines GPIO nicht zweckmäßig setzen kann, lässt er sich hier konfigurieren. Die Einstellungen greifen in der letzten Suspend-Phase; beim Aufwecken werden die vorherigen Registerzustände wiederhergestellt. Nach Bedarf passend zur Schaltung konfigurieren.

Die Konfiguration verwendet bis zu 16 Paare aus „Registeradresse Konfigurationswert“. Zulässig sind nur GPIO_SWPORT_DR und GPIO_SWPORT_DDR des GPIO-Controllers sowie sämtliche IOC-Register. Ungültige Paare erzeugen “(invalid)” im Suspend-Protokoll und werden ignoriert. Bei mehr als 16 Paaren erscheint “(overflow)”; die Konfiguration wird ignoriert.

2.5 Debug-Konfiguration

Konfigurationseigenschaft:

rockchip,sleep-debug-en = <...>;

Nicht im Produktbetrieb verwenden, nur zur Fehlersuche. Konfigurationsdefinitionen:

// 待机时使能所有的时钟。
#define RKPM_DBG_CLK_UNGATE              BIT(0)

// 待机时保持所有PLL都常开。
#define RKPM_DBG_PLLS_ALIVE              BIT(1)

// 忽略。
#define RKPM_DBG_PMU_SOUT                BIT(2)

// 执行SoC待机流程之前打印寄存器值。
#define RKPM_DBG_REG1                    BIT(3)

// 执行SoC待机流程之后打印寄存器值。
#define RKPM_DBG_REG2                    BIT(4)

// 忽略。
#define RKPM_DBG_DEEP_JTAG               BIT(5)
#define RKPM_DBG_JTAG                    BIT(6)

// PMU内部的timer超时后自动唤醒(单位:秒),一般仅用于开发阶段测试休眠唤醒使用。
#define RKPM_DBG_TIMEOUT_S(i)            (((i) & 0xf) << 7)

// 执行SoC待机流程之前就让CPU进入低功耗。
// 用于测试中断无法唤醒系统的情况,目的是确认中断失效是否是因为SoC待机流程配置引起。
#define RKPM_DBG_DUMMY_WFI               BIT(11)

// 在SoC待机流程的起始和结束位置插入两个5s的delay。用于确认某些异常是否因SoC待机流程引起。
#define RKPM_DBG_DUMMY_DELAY1            BIT(12)
#define RKPM_DBG_DUMMY_DELAY2            BIT(13)

// 类同 RKPM_DBG_REG1/2,打印出更多外设模块的寄存器值。
#define RKPM_DBG_PERI_REG                BIT(14)

RKPM_DBG_REG1 gibt Registerzustände aus, nachdem der Kernel den gesamten SUSPEND-Ablauf abgeschlossen hat.

RKPM_DBG_REG2 gibt Registerzustände vor dem letzten OPTEE-Schlafschritt aus. Für die Analyse der IO-Leistungsaufnahme im Suspend ist diese Option maßgeblich.

2.6 LOGIC-Abschaltkonfiguration

Für die Standby-Szenarien der meisten Produkte verwendet das veröffentlichte SDK standardmäßig ARM-Abschaltung. Nachfolgend die ARM+LOGIC-Abschaltkonfigurationen der Referenzplatinen. RK3506G-EVB1:

diff --git a/arch/arm/boot/dts/rk3502-evb1-v10.dtsi b/arch/arm/boot/dts/rk3502-evb1-v10.dtsi
index 852840cc78c..69124f89661 100644
--- a/arch/arm/boot/dts/rk3502-evb1-v10.dtsi
+++ b/arch/arm/boot/dts/rk3502-evb1-v10.dtsi
@@ -396,7 +396,7 @@
 &rockchip_suspend {
        rockchip,sleep-mode-config = <
                (0
-               | RKPM_ARMOFF_DDRPD
+               | RKPM_ARMOFF_LOGOFF
                | RKPM_24M_OSC_DIS
                | RKPM_32K_CLK
                | RKPM_32K_SRC_RC

RK3506G-DEMO-Platine (RK801):

diff --git a/arch/arm/boot/dts/rk3506-rk801.dtsi b/arch/arm/boot/dts/rk3506-rk801.dtsi
index a0c0778a214..5028e00031b 100644
--- a/arch/arm/boot/dts/rk3506-rk801.dtsi
+++ b/arch/arm/boot/dts/rk3506-rk801.dtsi
@@ -104,7 +104,7 @@
                                regulator-boot-on;
                                regulator-always-on;
                                regulator-state-mem {
-                                       regulator-on-in-suspend;
+                                       regulator-off-in-suspend;
                                        regulator-suspend-microvolt = <1800000>;
                                };
                        };
@@ -114,7 +114,7 @@
                                regulator-boot-on;
                                regulator-always-on;
                                regulator-state-mem {
-                                       regulator-on-in-suspend;
+                                       regulator-off-in-suspend;
                                };
                        };
                };
diff --git a/arch/arm/boot/dts/rk3506g-demo-display-control.dts b/arch/arm/boot/dts/rk3506g-demo-display-control.dts
index 59f8ade8a32..f982c38bd89 100644
--- a/arch/arm/boot/dts/rk3506g-demo-display-control.dts
+++ b/arch/arm/boot/dts/rk3506g-demo-display-control.dts
@@ -580,7 +580,7 @@
 &rockchip_suspend {
        rockchip,sleep-mode-config = <
                (0
-               | RKPM_ARMOFF_DDRPD
+               | RKPM_ARMOFF_LOGOFF
                | RKPM_24M_OSC_DIS
                | RKPM_32K_CLK
                | RKPM_32K_SRC_RC

3. Protokollmeldungen

Nachfolgend werden Suspend- und Resume-Meldungen erläutert. Einige Ausgaben sind für Anmerkungen zeilenweise getrennt; verschiedene Stromsparmodi erzeugen unterschiedliche Meldungen. Maßgeblich ist die tatsächliche Ausgabe. RK3506-Suspend-Protokoll:

// 版本信息。其中:"fwver: v1.10"是固件版本号;"-gxxxxx"是固件编译点的commit号。
3.13.0-885-gf24e46b4e16 #chenjh (gcc version 10.2.1 20201103 (GNU Toolchain for
the A-profile Architecture 10.2-2020.11 (arm-10.16))) #4 Fri Oct 18 17:07:30 CST
2024 arm, fwver: v1.10
// 配置信息。这些值对应了内核dts中rockchip_suspend节点的配置值,其中"cnt"表示当前第几次进入待机。
gcfg: cnt=2 global=0x000002b8, pwren=0x0000c2c0, wakeup=0x20000008,
dbg=0x00000180, idle: 0, 0, 0
// rc时钟信息,可以不关心。
rc400: hz=362900, div=6170/65319
// 待机配置的展开信息。对应内核dts中rockchip_suspend节点的配置内容,此处展开为字符串方便阅读。
suspend-mode: armoff_logoff, 24m_osc_dis, 32k_clk, 32k_src_rc, pwm0_ch0_regulator
debug-mode: timeout_3s
pwren-core: gpio0_a2 (act:low)
pwren-sleep: gpio0_a0 (act:low)
wakeup-en: gpio0_int, pmu_timeout_int
// 'sleep-io-config'的配置:
//  - 如果键值对非法,则有类似显示:"ff950210 0c000800(invalid)"。
//  - 如果键值对超出16组,则有类似显示:"ff950210 0c000800(overflow)"。
sleep-io:
  ff950208 0c000800
  ff950200 00c00080
// 0123... 表示待机过程中的软件步骤。打印完"wfi"表示整个SoC完全进入低功耗待机,等待外部中断唤醒系统。
0123g4567|wfi

RK3506-Resume-Protokoll (nur ARM abgeschaltet):

// |654... 表示唤醒后软件步骤。注意:如果是Logic断电唤醒,则在这段信息之前还会有一段DDR bin的打印。
|6543g210
// 唤醒源和中断号。
wakeup-pmu: gpio0_int
wakeup-gpio: gpio0_c1
wakeup-irq: 32
// 系统待机累计时长(本轮待机时长)
Wfi-total: 3.441s (this: 1.420s)

RK3506-Resume-Protokoll (ARM+LOGIC abgeschaltet):

// 唤醒后先是一段ddr打印
DDR c7d3dcd3f0 typ 24/10/11-16:20:18,fwver: v1.02
tREFI:4x, sr_idle:93, pd_idle:13
ES
get rd_skew=0x2a, wr_skew=0x2a
PHY drv:clk:60,ca:160,DQ:80,odt:480
vrefinner:50%, vrefout:50%
dram drv:40,odt:0
sr_dq:0, sr_ca:0, sr_clk:0
rg:0x19-0x0-0x2, 0xd-0x0-0x2,status:a007
DDR3, 750MHz
BW=16 Col=10 Bk=8 CS0 Row=13 CS=1 Size=128MB
jump 0x68f4
// 唤醒流程代码的打印
|6543g210
wakeup-pmu: pmu_timeout_int

Wfi-total: 1394.184s (this: 4.979s)

Dieses Thema entdecken → · Lernpfade →