Rockchip · AI & Linux Hub

Питание и охлаждение

Rockchip RK3399: полное руководство по приостановке, DTS, пробуждению и журналам

Rockchip RK3399: полное руководство по приостановке, DTS, пробуждению и журналам — V1.0.0

· ArmSoM Editorial · Rockchip source documentation · 5 мин чтения

Полный технический текст китайского оригинала V1.0.0: RK3399, Linux 4.4 / 4.19. Только платформенный справочник ArmSoM: сверяйте SoC конкретной платы, SDK/BSP, trust/ATF, ядро, PMIC, питание и выводы пробуждения. Поддержка всех плат ArmSoM не заявляется. Английского PDF и отдельных технических рисунков нет; четыре языка основаны на китайском оригинале. Код, настройки и журналы — примеры источника, не аппаратные испытания ArmSoM; команды сна и управления питанием не выполнялись.

Ошибочные настройки отключения питания, тактирования или пробуждения могут препятствовать пробуждению или вызвать потерю данных. Примеры должен проверить инженер, знакомый с аппаратурой. Комментарии кода, написание, заполнители и неоднозначности источника сохранены; константы не выдумываются.

ArmSoM Docs · Rockchip kernel

1. Приостановка системы

На платформах SoC с trust приостановка системы реализована в trust. Реализация различается между платформами, поэтому их параметры и методы нельзя переносить друг на друга; это руководство относится только к RK3399. Типичные операции: отключение доменов питания, тактирования и PLL, перевод DDR в саморегенерацию, переключение системной шины на низкочастотный источник (24M или 32K), перевод PMIC в спящий режим и настройка источников пробуждения. Для удовлетворения требований конкретного изделия параметры передаются trust через узлы DTS при загрузке.

1.1 Файлы драйверов

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

1.2 Узел DTS

rockchip_suspend: rockchip-suspend {
    compatible = "rockchip,pm-rk3399";
    status = "okay";
    // 常规配置
    rockchip,sleep-mode-config = <
        (0
        | RKPM_SLP_ARMPD
        | RKPM_SLP_PERILPPD
        | RKPM_SLP_DDR_RET
        | RKPM_SLP_CENTER_PD
        )
    >;
    // 唤醒源配置
    rockchip,wakeup-config = <
        (0
        | RKPM_GPIO_WKUP_EN
        )
    >;
    // 电源配置
    rockchip,pwm-regulator-config = <
        (0
        | PWM2_REGULATOR_EN
        )
    >;
    // 对应APIO断电
    rockchip,apios-suspend = <
        (0
        | RKPM_APIOxxx
        )
    >;
    // 休眠控制GPIO的电平,关断对应供电
    rockchip,power-ctrl =
                <&gpioX RK_PXX GPIO_ACTIVE_HIGH>;
};

2. Настройка DTS

Поддерживаемые параметры конфигурации определены в:

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

2.1 Основная настройка

Свойство конфигурации:

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

Определения конфигурации:

// 休眠 CPU 处在 WFI 状态,只有调试时⽤到
#define RKPM_SLP_WFI                            (1 << 0)
// 休眠 cpu_pd power down
#define RKPM_SLP_ARMPD                          (1 << 1)
// 休眠perilp_pd power down
#define RKPM_SLP_PERILPPD                       (1 << 2)
// 休眠 ddr 进⼊⾃刷新且处在 retention 状态
#define RKPM_SLP_DDR_RET                        (1 << 3)
// 休眠 PLL power down
#define RKPM_SLP_PLLPD                          (1 << 4)
// 休眠 OSC disable,系统时钟切到 32K
#define RKPM_SLP_OSC_DIS                        (1 << 5)
// 休眠 center_pd power down
#define RKPM_SLP_CENTER_PD                      (1 << 6)
// 休眠 AP_OFF 会被拉⾼,⽤于控制 PMIC 或者其他分⽴电源进⼊休眠态
#define RKPM_SLP_AP_PWROFF                      (1 << 7)

2.2 Настройка питания

Свойство конфигурации:

rockchip,pwm-regulator-config = <...>;

Определения конфигурации:

// 使⽤ pwm-regulator
#define PWM0_REGULATOR_EN                       (1 << 0)
#define PWM1_REGULATOR_EN                       (1 << 1)
#define PWM2_REGULATOR_EN                       (1 << 2)
#define PWM3A_REGULATOR_EN                      (1 << 3)
#define PWM3B_REGULATOR_EN                      (1 << 4)

Питание: необходимость pwm-regulator определяется схемой внешних цепей. Настройка должна соответствовать аппаратуре.

2.3 Настройка пробуждения

Свойство конфигурации:

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

Определения конфигурации:

// ⽀持所有的中断唤醒
#define RKPM_CLUSTER_L_WKUP_EN                  (1 << 0)
// ⽀持所有被指定到⼤核的中断唤醒
#define RKPM_CLUSTER_B_WKUPB_EN                 (1 << 1)
// ⽀持 GPIO 唤醒
#define RKPM_GPIO_WKUP_EN                       (1 << 2)
// ⽀持 SDIO 唤醒
#define RKPM_SDIO_WKUP_EN                       (1 << 3)
// ⽀持 SDMMC 唤醒
#define RKPM_SDMMC_WKUP_EN                      (1 << 4)
// ⽀持 TIMER 唤醒
#define RKPM_TIMER_WKUP_EN                      (1 << 6)
// ⽀持插拔 USB 唤醒
#define RKPM_USB_WKUP_EN                        (1 << 7)
// ⽀持 SOFTWARE 唤醒
#define RKPM_SFT_WKUP_EN                        (1 << 8)
// ⽀持 WDT 唤醒
#define RKPM_WDT_M0_WKUP_EN                     (1 << 9)
// ⽀持 TIMEOUT 唤醒,⼀般⽤于调试
#define RKPM_TIME_OUT_WKUP_EN                   (1 << 10)
// ⽀持 PWM 唤醒
#define RKPM_PWM_WKUP_EN                        (1 << 11)
// ⽀持 PCIE 唤醒
#define RKPM_PCIE_WKUP_EN                       (1 << 13)
// ⽀持 USB 协议唤醒
#define RKPM_USB_LINESTATE_WKUP_EN              (1 << 14)

Пробуждение: прерывание, не зарегистрированное в GIC через enable_irq_wake() на этапе ядра, не может пробудить систему.

2.4 Настройка отладки

Свойство конфигурации:

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

Отладка: значение 1 включает вывод сообщений. При засыпании и пробуждении выводятся журналы соответствующих операций ATF.

2.5 Отключение питания APIO

Свойство конфигурации:

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

Определения конфигурации:

/* APIO 电压域 */
#define RKPM_APIO0_SUSPEND                      (1 << 0)
#define RKPM_APIO1_SUSPEND                      (1 << 1)
#define RKPM_APIO2_SUSPEND                      (1 << 2)
#define RKPM_APIO3_SUSPEND                      (1 << 3)
#define RKPM_APIO4_SUSPEND                      (1 << 4)
#define RKPM_APIO5_SUSPEND                      (1 << 5)

APIO: домены APIO выводов GPIO RK3399 разделены на APIO1–APIO5. Если схема аппаратуры это поддерживает, питание APIO можно отключать независимо при засыпании.

2.6 Управление питанием через GPIO

Свойство конфигурации:

rockchip,power-ctrl = <...>

Пример конфигурации:

// 休眠将GPIO1_C1拉⾼,控制外部电源断电
rockchip,power-ctrl = <&gpio1 RK_PC1 GPIO_ACTIVE_HIGH>,

3. Сообщения журнала

Ниже объясняются сообщения trust при засыпании и пробуждении системы. Для удобства пояснений часть вывода разбита на строки. Разные режимы энергосбережения также дают разные сообщения; ориентируйтесь на фактический вывод.

RK3399: журнал засыпания системы:

// 休眠模式
INFO:    sleep mode config[0xde]:
INFO:           AP_PWROFF
INFO:           SLP_ARMPD
INFO:           SLP_PLLPD
INFO:           DDR_RET
INFO:           SLP_CENTER_PD
// ⽀持的唤醒源
INFO:    wakeup source config[0x804]:
INFO:           GPIO interrupt can wakeup system
INFO:           PWM interrupt can wakeup system
// 休眠需要控制的pwm regulator
INFO:    PWM CONFIG[0x4]:
INFO:           PWM: PWM2D_REGULATOR_EN
// 休眠需要控制的APIO
INFO:    APIOS info[0x0]:
INFO:           not config
// 通过GPIO控制的电源
INFO:    GPIO POWER INFO:
INFO:           GPIO1_C1
INFO:           GPIO1_B6
// 休眠模式寄存器的值
INFO:    PMU_MODE_CONG: 0x1466bf51

RK3399: журнал пробуждения системы:

// 唤醒打印
INFO:    RK3399 the wake up information:
INFO:    wake up status: 0x4
INFO:           GPIO interrupt wakeup
INFO:           GPIO0: 0x0
INFO:           GPIO1: 0x200000
INFO:           GPIO2: 0x0
INFO:           GPIO3: 0x0
INFO:           GPIO4: 0x0
// 唤醒源
GPIO interrupt wakeup
gpio1_c5中断唤醒系统

Другие статьи по теме → · Учебные маршруты →