Hello,
I'm trying to implement a low power mode for when our product goes idle. I still need the CPU, serial port, USB, and ethernet connection to be active, but I am trying to shut off everything else (M3, DSP, video pipeline).
I started by killing my app, and doing:
/etc/init.d/pvr-init stop
firmware_loader 0 /usr/share/ti/rpe/dm81xx_c6xdsp_debug.xe674 stop
/etc/init.d/load-hd-firmware.sh stop
But when I unloaded the RPE DSP firmware, I got:
# firmware_loader 0 /usr/share/ti/rpe/dm81xx_c6xdsp_debug.xe674 stop
FIRMWARE: I2cInit will be done by M3
FIRMWARE: Memory map bin file not passed
Usage : firmware_loader <Processor Id> <Location of Firmware> <start|stop> [-mmap <memory_map_file>] [-i2c <0|1>]
===Mandatory arguments===
<Processor Id> 0: DSP, 1: Video-M3, 2: Vpss-M3
<Location of Firmware> firmware binary file
<start|stop> to start/stop the firmware
===Optional arguments===
-mmap input memory map bin file name
-i2c 0: i2c init not done by M3, 1(default): i2c init done by M3
FIRMWARE: isI2cInitRequiredOnM3: 1
FIRMWARE: Default memory configuration is used
Firmware LAssertion at Line no: 1799 in /home/bob/ti-ezsdk_dm814x-evm_5_05_02_00/component-sources/syslink_2_20_02_20/packages/ti/syslink/utils/hlos/knl/Linux/../../../../../../ti/syslink/ipc/hlos/knl/MessageQ.c: (MessageQ_module->heaps [heapId] != NULL) : failed
oader debugging not configured
Default FL_DEBUG: warning
Allowed FL_DEBUG levels: error, warning, info, debug, log
MemCfg: DCMM (Dynamically Configurable Memory Map) Version : 2.1.2.1
FIRMWARE: 0 stop Successful
And when I check PM_ACTIVE_PWRSTST, it seems like the ACTIVE (DSP) power domain is still on:
# devmem2 0x48180A04 # ReadPM_ACTIVE_PWRSTST
/dev/mem opened.
Memory mapped at address 0x40172000.
Value at address 0x48180A04 (0x40172a04): 0x37
So I looked at some other stuff:
# devmem2 0x48180420 # Read CM_ACTIVE_GEM_CLKCTRL
/dev/mem opened.
Memory mapped at address 0x40129000.
Value at address 0x48180420 (0x40129420): 0x50000
STBYST = 1 ("Standby: Module is in standby"), but IDLEST = 1 ("Trans: Module is performing transition: wakeup, or sleep, or
sleep abortion"). It seems like some condition is not satisfied.
# devmem2 0x48180A10 # Read RM_ACTIVE_RSTCTRL
/dev/mem opened.
Memory mapped at address 0x4015d000.
Value at address 0x48180A10 (0x4015da10): 0x3
Warm and local resets are asserted, which I guess is okay.
# devmem2 0x48180A00 # Read PM_ACTIVE_PWRSTCTRL
/dev/mem opened.
Memory mapped at address 0x40158000.
Value at address 0x48180A00 (0x40158a00): 0x30000
PowerState = 0 ("OFF"), which I guess is good. Active_MEM_ONState = 3, which I cannot tell if this is good or bad.
Other info: it seems like SGX, ISP, and DSS were turned off successfully:
# devmem2 0x48180F04 # Read PM_SGX_PWRSTST
/dev/mem opened.
Memory mapped at address 0x400df000.
Value at address 0x48180F04 (0x400dff04): 0x0
# devmem2 0x48180804 # Read PM_ISP_PWRSTST
/dev/mem opened.
Memory mapped at address 0x404e8000.
Value at address 0x48180804 (0x404e8804): 0x0
# devmem2 0x48180D04 # Read PM_DSS_PWRSTST
/dev/mem opened.
Memory mapped at address 0x401bd000.
Value at address 0x48180D04 (0x401bdd04): 0x0
However, the HDVICP did not get shut off by these actions. I was able to turn it off based on info that I found in another e2e post with Pavel Botev:
devmem2 0x48180620 w 0 #CM_IVAHD0_CLKSTCRL
devmem2 0x48180624 w 0 #CM_IVAHD0_SL2_CLKCTRL
devmem2 0x48180600 w 1 #CM_IVAHD0_CLKSTCTRL
devmem2 0x48180C10 w 7 #RM_HDVICP_RSTCTRL
devmem2 0x48180C00 w 0 #PM_IVAHD0_PWRSTCTRL
So, my questions are:
- Is there something needed before unloading the RPE DSP firmware to avoid the syslink assertion?
- Is there something else needed to turn off the ACTIVE (DSP) power domain?
- Is there a recommended way to turn off the HDVICP power domain, or should "load-hd-firmware.sh stop" have done it for me?
FYI, I am using ti-ezsdk_dm814x-evm_5_05_02_00.
Many thanks,
Dan -