Suspend/Resume †OMAP3530 は Suspend/Resume に対応しています。 # echo mem > /sys/power/state 以下のようなメッセージをシリアルコンソールに出力してスリープ状態にはいります。 [ 132.186309] PM: Syncing filesystems ... done. [ 132.400665] Freezing user space processes ... (elapsed 0.01 seconds) done. [ 132.424591] Freezing remaining freezable tasks ... (elapsed 0.02 seconds) done. [ 132.455871] Suspending console(s) (use no_console_suspend to debug) シリアルコンソールからのキー入力、あるいは [ 132.464385] phy0 -> rt2x00lib_suspend: Notice - Going to sleep. [ 132.648376] PM: suspend of devices complete after 185.180 msecs [ 132.649017] PM: late suspend of devices complete after 0.610 msecs [ 132.649902] PM: noirq suspend of devices complete after 0.854 msecs [ 132.650177] Successfully put all powerdomains to target state [ 132.651367] PM: noirq resume of devices complete after 0.915 msecs [ 132.651916] PM: early resume of devices complete after 0.396 msecs [ 133.305328] PM: resume of devices complete after 653.289 msecs [ 133.357299] Restarting tasks ... [ 133.361206] usb 1-2: USB disconnect, device number 2 [ 133.366424] usb 1-2.2: USB disconnect, device number 3 done. [ 133.386016] usb 1-2.3: USB disconnect, device number 4 [ 133.391784] asix 1-2.3:1.0 eth0: unregister 'asix' usb-ehci-omap.0-2.3, ASIX AX88772 USB 2.0 Ethernet Resume 後に表示されるメッセージですが、"Successfully put.." の5行目までは no_console_suspend †上記の設定で Suspend にはいる際のメッセージに Suspending console(s) (use no_console_suspend to debug) とあるように、Suspend/Resume 自体のデバッグをしたい場合には console=ttyO2,115200n8 mpurate=auto buddy=none vram=12M dvimode=640x480MR-16@60 defaultdisplay=dvi loadaddr=0x80200000 mmcroot=/dev/mmcblk0p2 rw mmcrootfstype=ext3 rootwait mmcargs=setenv bootargs console=${console} ${optargs} mpurate=${mpurate} buddy=${buddy} camera=${camera} vram=${vram} omapfb.mode=dvi:${dvimode} omapdss.def_disp=${defaultdisplay} root=${mmcroot} rootfstype=${mmcrootfstype} no_console_suspend mmcboot=echo Booting from mmc (uEnv.txt configuration) ...; run mmcargs; bootm ${loadaddr} loaduimagefat=fatload mmc ${mmcdev} ${loadaddr} uImage uenvcmd=run loaduimagefat; run mmcboot mmcargs の最後に no_console_suspend を追加しています。 # echo mem > /sys/power/state [ 119.239715] PM: Syncing filesystems ... done. [ 119.283752] Freezing user space processes ... (elapsed 0.02 seconds) done. [ 119.314239] Freezing remaining freezable tasks ... (elapsed 0.02 seconds) done. [ 119.347229] phy0 -> rt2x00lib_suspend: Notice - Going to sleep. [ 119.537750] PM: suspend of devices complete after 191.711 msecs [ 119.544555] PM: late suspend of devices complete after 0.610 msecs [ 119.552093] PM: noirq suspend of devices complete after 0.854 msecs コンソールはスリープしないため、no_console_suspend を設定していなかったときは [ 119.559051] Powerdomain (per_pwrdm) didn't enter target state 1 [ 119.559051] Powerdomain (core_pwrdm) didn't enter target state 1 [ 119.559051] Could not enter target state in pm_suspend [ 119.560211] PM: noirq resume of devices complete after 0.854 msecs [ 119.567443] PM: early resume of devices complete after 0.427 msecs [ 120.226074] PM: resume of devices complete after 651.977 msecs [ 120.233032] Restarting tasks ... [ 120.236968] usb 1-2: USB disconnect, device number 2 [ 120.242340] usb 1-2.2: USB disconnect, device number 3 done. [ 120.271697] usb 1-2.3: USB disconnect, device number 4 [ 120.277496] asix 1-2.3:1.0 eth0: unregister 'asix' usb-ehci-omap.0-2.3, ASIX AX88772 USB 2.0 Ethernet no_console_suspend が設定されていると per_pwrdm、core_pwrdm はスリープ状態にははいらず、 debugfs †OMAP3530 のパワーマネージメントに関する情報は debugfs から得られます。 # mount -t debugfs debugfs /debug パワーマネージメントに関係する情報は pm_debug/ 以下に表示されます。 # cat /debug/pm_debug/ /debug/pm_debug/cam_pwrdm/ /debug/pm_debug/mpu_pwrdm/ /debug/pm_debug/core_pwrdm/ /debug/pm_debug/neon_pwrdm/ /debug/pm_debug/count /debug/pm_debug/per_pwrdm/ /debug/pm_debug/dss_pwrdm/ /debug/pm_debug/sgx_pwrdm/ /debug/pm_debug/emu_pwrdm/ /debug/pm_debug/time /debug/pm_debug/enable_off_mode /debug/pm_debug/usbhost_pwrdm/ /debug/pm_debug/iva2_pwrdm/ /debug/pm_debug/wkup_pwrdm/ 末尾が _pwrdm になっているディレクトリはパワードメインごとの設定・情報です。 # cat /debug/pm_debug/count usbhost_pwrdm (ON),OFF:0,RET:0,INA:0,ON:1,RET-LOGIC-OFF:0,RET-MEMBANK1-OFF:0 sgx_pwrdm (OFF),OFF:1,RET:0,INA:0,ON:1,RET-LOGIC-OFF:0,RET-MEMBANK1-OFF:0 core_pwrdm (ON),OFF:0,RET:0,INA:0,ON:1,RET-LOGIC-OFF:0,RET-MEMBANK1-OFF:0,RET-MEMBANK2-OFF:0 per_pwrdm (ON),OFF:0,RET:0,INA:0,ON:1,RET-LOGIC-OFF:0,RET-MEMBANK1-OFF:0 dss_pwrdm (ON),OFF:0,RET:130993,INA:0,ON:130994,RET-LOGIC-OFF:0,RET-MEMBANK1-OFF:0 cam_pwrdm (RET),OFF:0,RET:1,INA:0,ON:1,RET-LOGIC-OFF:0,RET-MEMBANK1-OFF:0 neon_pwrdm (ON),OFF:0,RET:149943,INA:3926,ON:153870,RET-LOGIC-OFF:0 mpu_pwrdm (ON),OFF:0,RET:149943,INA:3926,ON:153870,RET-LOGIC-OFF:0,RET-MEMBANK1-OFF:0 iva2_pwrdm (RET),OFF:0,RET:1,INA:0,ON:1,RET-LOGIC-OFF:0,RET-MEMBANK1-OFF:0,RET-MEMBANK2-OFF:0,RET-MEMBANK3-OFF:0,RET-MEMBANK4-OFF:0 usbhost_clkdm->usbhost_pwrdm (3) sgx_clkdm->sgx_pwrdm (0) per_clkdm->per_pwrdm (20) cam_clkdm->cam_pwrdm (0) dss_clkdm->dss_pwrdm (1) core_l4_clkdm->core_pwrdm (25) core_l3_clkdm->core_pwrdm (5) d2d_clkdm->core_pwrdm (0) iva2_clkdm->iva2_pwrdm (0) neon_clkdm->neon_pwrdm (0) mpu_clkdm->mpu_pwrdm (0) prm_clkdm->wkup_pwrdm (0) cm_clkdm->core_pwrdm (0) time はパワードメインのモード毎の滞在時間を表示します。 # cat /debug/pm_debug/time usbhost_pwrdm (ON),OFF:0,RET:0,INA:0,ON:3059305603026 sgx_pwrdm (OFF),OFF:3055783935546,RET:0,INA:0,ON:3521697998 core_pwrdm (ON),OFF:0,RET:0,INA:0,ON:3059305633544 per_pwrdm (ON),OFF:0,RET:0,INA:0,ON:3059305541992 dss_pwrdm (ON),OFF:0,RET:2148355531323,INA:0,ON:910950041186 cam_pwrdm (RET),OFF:0,RET:3055757873534,INA:0,ON:3547698975 neon_pwrdm (ON),OFF:0,RET:3033790375457,INA:481475839,ON:25033721213 mpu_pwrdm (ON),OFF:0,RET:3033876709697,INA:482116696,ON:24946746116 iva2_pwrdm (RET),OFF:0,RET:3055783935546,INA:0,ON:3521606445 enable_off_mode は OFF モードの設定です。 # echo 1 > enable_off_mode で OFF モードを有効にすると Suspend 時にはより深いスリープ状態になり、より電力消費を抑えます。
wakeup_timer †linux-omap ブランチ 2.6系のパワーマネージメントには、 # echo 5 > /sys/kernel/debug/pm_debug/wakeup_timer_seconds # echo -n “mem” > /sys/power/state 指定した時間(上記例では 5秒)後に Resume するというものです。 |