This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Power Domain Power-Down in 8168 - PRCM DM8168



Need help in performing power domain shutdown in the DM8168.  Currently would like to power down the all of the followiing power domains ACTIVE, SGX. HDVICP2-0, HDVICP2-1, and HDVICP2-2 domains.  For example the ACTIVE Power Domain inlcudes the DSP/GEM/C674xP Subsystem and the Display Subsystem/HDDSS.

 Per page 1791 (18.6.3.1) of the SPRUGX8A it is understood that the following three registers must  be touched for each Power Domain:

    PRCM.CM_Power domain>_<module>_CLKCTRL[x] MODULEMODE=0    (DISABLED)

    PRCM.CM_<Clock domain>_CLKSTCTRL[x] CLKTRCTRL=1   (SW_SLEEP)

    MMR(PWRSTCTRL: OFF) inside PRCM.PM_<Power domain>_PWRSTCTRL[POWERSTATE]=0   (OFF)

1) Are there any additional steps (register writes) that need to be performed to internally switch off these particular power domains?

2) 18.6.3.1 states that "Power-down sequence defined here assumes that IP with STANDBY interface is already in SMART-STANDBY mode and STANDBY is already asserted by the IP. 

  2a) What is the IP?

  2b) Which of these Power Domains have a STANDBY interface?  

  2c)  For each of the  power domains of interest, what specific registers set SMART-STANDBY and how is STANDBY asserted by the IP?

3) Shouold the register writes to shutdown a particular power domain all be perfromed before the stepas are performed for a different power domain?

4) After doing the three prescribed register writes how come there is no reduction in current draw on the core voltage (1V) supply?

Thank You

________________________

Reference Info

 

Seven power doamins are listred in SPRUGX8A page 1790

  Always-on   (Host Arm Subsystem; OCM Ram; peripheral interfaces)

  Default  (DDR3; interface;, USB)

  Active   (DSP/GEM/C674xP Subsystem, Display Subsystem/HDDSS)

  HDVICP2-0   (HD VIDEO Coprocessor System )

  HDVICP2-1   (HD VIDEO Coprocessor System )

  HDVICP2-2   (HD VIDEO Coprocessor System )

  SGX     (2D/3D Graphics Acclerator Subsystem, includes PowerVR)

Page 1791 of the SPRUGX8A(18.6.3.1) lists the Power-Down sequence steps with PRCM.CM and PRCM.PM regiater writes.

  • Hello,

    Grant de Goede said:
    1) Are there any additional steps (register writes) that need to be performed to internally switch off these particular power domains?

    I have checked the PRCM register map, and I do not see any additional registers writes needed. These 3 should be enough. But we have several status bitfields, in which you can check whether the "power domain shut down" operation is successful:

    PM_<Power Domain>_PWRSTST[1:0] POWERSTATEST - Identifies the current state of the power domain. It is OFF or ON.
    PM_<Power Domain>_PWRSTST[2] LOGICSTATEST - Identifies the current state of the logic area in the power domain. It is OFF or ON.
    PM_<Power Domain>_PWRSTST[5:4] MEMSTATEST - Identifies the current state of the memory area in the power domain. It is OFF or ON.

    Grant de Goede said:
      2a) What is the IP?

    IP is Intellectual Property, and has the same meaning as a module. For example, USB is IP/module, SATA is IP/module, etc.

    Grant de Goede said:
    2b) Which of these Power Domains have a STANDBY interface?

    The followings Power Domains have a STANDBY: Active (aways-on), Default, HDVICP0/1/2, SGX

    CM_DEFAULT_USB_CLKCTRL[18] STBYST - Module standby status

    CM_DEFAULT_SATA_CLKCTRL[18] STBYST - Module standby status

    CM_ACTIVE_GEM_CLKCTRL[18] STBYST

    CM_ACTIVE_HDDSS_CLKCTRL[18] STBYST

    CM_DEFAULT_CLKCTRL[18] STBYST

    CM_DEFAULT_PCI_CLKCTRL[18] STBYST

    CM_IVAHD0_IVAHD_CLKCTRL[18[ STBYST

    CM_IVAHD1_IVAHD_CLKCTRL[18[ STBYST

    CM_IVAHD2_IVAHD_CLKCTRL[18] STBYST

    CM_SGX_SGX_CLKCTRL[18] STBYST

    CM_ALWON_ETHERNET_0_CLKCTRL[18] STBYST

    CM_ALWON_ETHERNET_1_CLKCTRL[18] STBYST

    CM_ALWON_MPU_CLKCTRL[18] STBYST

    CM_ALWON_TPTC0_CLKCTRL[18] STBYST

    CM_ALWON_TPTC1_CLKCTRL[18] STBYST

    CM_ALWON_TPTC2_CLKCTRL[18] STBYST

    CM_ALWON_TPTC3_CLKCTRL[18] STBYST

    Grant de Goede said:
    2c)  For each of the  power domains of interest, what specific registers set SMART-STANDBY and how is STANDBY asserted by the IP?



    Check sections 18.1.2.1 Master Standby Protocol

    Grant de Goede said:
    3) Shouold the register writes to shutdown a particular power domain all be perfromed before the stepas are performed for a different power domain?

    If everything is done according to the guidelines described in the TRM, there should be no issues.

    Grant de Goede said:
    4) After doing the three prescribed register writes how come there is no reduction in current draw on the core voltage (1V) supply?

    If everything is done according to the guidelines described in the TRM, there should be no issues.


    Regards,

    Pavel

  • For more information, you should read:

    3.2 Power Management

    3.2.1 Power Domains

    Table 3-1. Static Power Management Features

    3.2.2 Memory Power Management

    3.2.4 Clock management

    3.2.5 Standby Mode

    3.2.6 Additional Peripheral Power management Consideration

    BR,

    Pavel

  • Hi Pavel,

    I'm working with Grant and we can't seem to get the current to go down by running the commands based on what was suggested in the TRM.  I'm running a shell script utilizing the devmem2 tool to be able to write and read those registers.

    This shell script tries to write to the CLKCTRL, CLKSTCRL and PWRSTCTRL values of 0, 1, and 0  based on the TRM.  When looking at the current consumption it does not seem to change and below are the results i get by running each one of the regions.  Something to note, the SGX region seems to do something weird since it just starts printing out things similar to kernel panics and i can't get back into the terminal.  Also for the default section some parts had to be commented out since i would lose access to the console when running them.

    When I run this for the active area i get 

    reading active pwrstst
    /dev/mem opened.
    Memory mapped at address 0x4034c000.
    Value at address 0x48180A04 (0x4034ca04): 0x37
    /dev/mem opened.
    Memory mapped at address 0x400e8000.
    Value at address 0x48180420 (0x400e8420): 0x70000
    Written 0x0; readback 0x0
    /dev/mem opened.
    Memory mapped at address 0x400ef000.
    Value at address 0x48180424 (0x400ef424): 0x2
    Written 0x0; readback 0x0
    /dev/mem opened.
    Memory mapped at address 0x400c1000.
    Value at address 0x48180400 (0x400c1400): 0x2
    Written 0x1; readback 0x1
    /dev/mem opened.
    Memory mapped at address 0x4000a000.
    Value at address 0x48180404 (0x4000a404): 0xFF02
    Written 0x1; readback 0x1
    /dev/mem opened.
    Memory mapped at address 0x40236000.
    Value at address 0x48180A00 (0x40236a00): 0x30000
    Written 0x0; readback 0x0
    reading active pwrstst
    /dev/mem opened.
    Memory mapped at address 0x400ce000.
    Value at address 0x48180A04 (0x400cea04): 0x37
    reading gem clkctrl
    /dev/mem opened.
    Memory mapped at address 0x40001000.
    Value at address 0x48180420 (0x40001420): 0x70000
    reading hdhss clkctrl
    /dev/mem opened.
    Memory mapped at address 0x40011000.
    Value at address 0x48180424 (0x40011424): 0x10000
    

    when i run this for the HD0 area i get 

    HD0
    reading HD0 pwrstst
    /dev/mem opened.
    Memory mapped at address 0x40014000.
    Value at address 0x48180C04 (0x40014c04): 0x37
    /dev/mem opened.
    Memory mapped at address 0x4000e000.
    Value at address 0x48180620 (0x4000e620): 0x2
    Written 0x0; readback 0x0
    /dev/mem opened.
    Memory mapped at address 0x40092000.
    Value at address 0x48180624 (0x40092624): 0x2
    Written 0x0; readback 0x0
    /dev/mem opened.
    Memory mapped at address 0x4008b000.
    Value at address 0x48180600 (0x4008b600): 0x102
    Written 0x1; readback 0x1
    /dev/mem opened.
    Memory mapped at address 0x40174000.
    Value at address 0x48180C00 (0x40174c00): 0x30000
    Written 0x0; readback 0x0
    reading HD0 pwrstst
    /dev/mem opened.
    Memory mapped at address 0x4003c000.
    Value at address 0x48180C04 (0x4003cc04): 0x37
    reading sl2 clkctrl
    /dev/mem opened.
    Memory mapped at address 0x4008b000.
    Value at address 0x48180624 (0x4008b624): 0x30000
    reading clkctrl
    /dev/mem opened.
    Memory mapped at address 0x400d3000.
    Value at address 0x48180620 (0x400d3620): 0x10000
    

    when i run this for the HD1 area i get 

    HD1
    reading HD1 pwrstst
    /dev/mem opened.
    Memory mapped at address 0x40082000.
    Value at address 0x48180D04 (0x40082d04): 0x37
    /dev/mem opened.
    Memory mapped at address 0x400fe000.
    Value at address 0x48180720 (0x400fe720): 0x2
    Written 0x0; readback 0x0
    /dev/mem opened.
    Memory mapped at address 0x4000e000.
    Value at address 0x48180724 (0x4000e724): 0x2
    Written 0x0; readback 0x0
    /dev/mem opened.
    Memory mapped at address 0x40091000.
    Value at address 0x48180700 (0x40091700): 0x102
    Written 0x1; readback 0x1
    /dev/mem opened.
    Memory mapped at address 0x4039d000.
    Value at address 0x48180D00 (0x4039dd00): 0x30000
    Written 0x0; readback 0x0
    reading HD1 pwrstst
    /dev/mem opened.
    Memory mapped at address 0x4005b000.
    Value at address 0x48180D04 (0x4005bd04): 0x37
    reading sl2 clkctrl
    /dev/mem opened.
    Memory mapped at address 0x40363000.
    Value at address 0x48180724 (0x40363724): 0x30000
    reading clkctrl
    /dev/mem opened.
    Memory mapped at address 0x4009c000.
    Value at address 0x48180720 (0x4009c720): 0x10000
    

    when i run this for the HD2 area i get 

    HD2
    reading HD2 pwrstst
    /dev/mem opened.
    Memory mapped at address 0x400b8000.
    Value at address 0x48180E04 (0x400b8e04): 0x37
    /dev/mem opened.
    Memory mapped at address 0x40067000.
    Value at address 0x48180820 (0x40067820): 0x2
    Written 0x0; readback 0x0
    /dev/mem opened.
    Memory mapped at address 0x40023000.
    Value at address 0x48180824 (0x40023824): 0x2
    Written 0x0; readback 0x0
    /dev/mem opened.
    Memory mapped at address 0x4003e000.
    Value at address 0x48180800 (0x4003e800): 0x102
    Written 0x1; readback 0x1
    /dev/mem opened.
    Memory mapped at address 0x4002e000.
    Value at address 0x48180E00 (0x4002ee00): 0x30000
    Written 0x0; readback 0x0
    reading HD2 pwrstst
    /dev/mem opened.
    Memory mapped at address 0x400ac000.
    Value at address 0x48180E04 (0x400ace04): 0x37
    reading sl2 clkctrl
    /dev/mem opened.
    Memory mapped at address 0x400a3000.
    Value at address 0x48180824 (0x400a3824): 0x30000
    reading clkctrl
    /dev/mem opened.
    Memory mapped at address 0x40031000.
    Value at address 0x48180820 (0x40031820): 0x10000
    

    when i run this for the sgx area i get 

    SGX
    reading sgx pwrstst
    /dev/mem opened.
    Memory mapped at address 0x400ad000.
    Value at address 0x48180F04 (0x400adf04): 0x0
    /dev/mem opened.
    Memory mapped at address 0x40308000.
    Value at address 0x48180920 (0x40308920): 0x2
    Written 0x0; readback 0x0
    

    when i run this for the default area i get 

    Default
    reading default pwrstst
    /dev/mem opened.
    Memory mapped at address 0x40094000.
    Value at address 0x48180B04 (0x40094b04): 0x37
    emif 0
    emif 1
    dmm
    fw
    usb
    /dev/mem opened.
    Memory mapped at address 0x400d3000.
    Value at address 0x48180558 (0x400d3558): 0x2
    Written 0x0; readback 0x0
    sata
    /dev/mem opened.
    Memory mapped at address 0x4033f000.
    Value at address 0x48180560 (0x4033f560): 0x70000
    Written 0x0; readback 0x0
    default
    /dev/mem opened.
    Memory mapped at address 0x40063000.
    Value at address 0x48180574 (0x40063574): 0x2
    Written 0x0; readback 0x0
    pci
    /dev/mem opened.
    Memory mapped at address 0x4003e000.
    Value at address 0x48180578 (0x4003e578): 0x70000
    Written 0x0; readback 0x0
    /dev/mem opened.
    Memory mapped at address 0x40055000.
    Value at address 0x48180510 (0x40055510): 0x2
    Written 0x1; readback 0x1
    /dev/mem opened.
    Memory mapped at address 0x400f4000.
    Value at address 0x48180B00 (0x400f4b00): 0x30000
    Written 0x0; readback 0x0
    reading default pwrstst
    /dev/mem opened.
    Memory mapped at address 0x40037000.
    Value at address 0x48180B04 (0x40037b04): 0x37
    emif 0
    /dev/mem opened.
    Memory mapped at address 0x40006000.
    Value at address 0x48180520 (0x40006520): 0x2
    emif 1
    /dev/mem opened.
    Memory mapped at address 0x40069000.
    Value at address 0x48180524 (0x40069524): 0x2
    dmm
    /dev/mem opened.
    Memory mapped at address 0x4004c000.
    Value at address 0x48180528 (0x4004c528): 0x2
    fw
    /dev/mem opened.
    Memory mapped at address 0x40051000.
    Value at address 0x4818052C (0x4005152c): 0x2
    usb
    /dev/mem opened.
    Memory mapped at address 0x4002b000.
    Value at address 0x48180558 (0x4002b558): 0x10000
    sata
    /dev/mem opened.
    Memory mapped at address 0x403ed000.
    Value at address 0x48180560 (0x403ed560): 0x70000
    default
    /dev/mem opened.
    Memory mapped at address 0x4000a000.
    Value at address 0x48180574 (0x4000a574): 0x10000
    pci
    /dev/mem opened.
    Memory mapped at address 0x400ef000.
    Value at address 0x48180578 (0x400ef578): 0x70000
    

    Can you take a look at this and let us know if we are doing them correctly and if something is missing?

    Thanks,

    Rodrigo

  • For some reason the shell script got removed from my post.  Here it is 

    if [ $# -eq 1 ]	
    	then
    	if [ $1 = 'active' ]
    		then
    			echo "reading active pwrstst"
    			devmem2 0x48180A04
    			devmem2 0x48180420 w 0 #CM_ACTIVE_GEM_CLKCTRL
    			devmem2 0x48180424 w 0 #CM_ACTIVE_HDDSS_CLKCTRL
    			devmem2 0x48180400 w 1 #CM_GEM_CLKSTCTRL
    			devmem2 0x48180404 w 1 #CM_HDDSS_CLKSTCRL
    			devmem2 0x48180A00 w 0 #PM_ACTIVE_PWRSTCTRL
    			echo "reading active pwrstst"
    			devmem2 0x48180A04
    			echo "reading gem clkctrl"
    			devmem2 0x48180420
    			echo "reading hdhss clkctrl"
    			devmem2 0x48180424
    		elif [ $1 = 'default' ]
    		then
    			echo "Default"
    			echo "reading default pwrstst"
    			devmem2 0x48180B04
    			echo "emif 0"
    #			devmem2 0x48180520 w 0
    			echo "emif 1"
    #			devmem2 0x48180524 w 0
    			echo "dmm"
    #			devmem2 0x48180528 w 0
    			echo "fw"
    #			devmem2 0x4818052C w 0
    			echo "usb"
    			devmem2 0x48180558 w 0
    			echo "sata"
    			devmem2 0x48180560 w 0
    			echo "default"
    			devmem2 0x48180574 w 0
    			echo "pci"
    			devmem2 0x48180578 w 0
    #			devmem2 0x48180504 w 1
    #			devmem2 0x48180508 w 1
    			devmem2 0x48180510 w 1
    #			devmem2 0x48180514 w 1
    			devmem2 0x48180B00 w 0
    			echo "reading default pwrstst"
    			devmem2 0x48180B04
    			echo "emif 0"
    			devmem2 0x48180520
    			echo "emif 1"
    			devmem2 0x48180524
    			echo "dmm"
    			devmem2 0x48180528
    			echo "fw"
    			devmem2 0x4818052C
    			echo "usb"
    			devmem2 0x48180558
    			echo "sata"
    			devmem2 0x48180560
    			echo "default"
    			devmem2 0x48180574
    			echo "pci"
    			devmem2 0x48180578
    		elif [ $1 = 'HD0' ]
    		then
    			echo "HD0"
    			echo "reading HD0 pwrstst"
    			devmem2 0x48180C04
    			devmem2 0x48180620 w 0 #CM_IVAHD0_CLKSTCRL
    			devmem2 0x48180624 w 0 #CM_IVAHD0_SL2_CLKCTRL
    			devmem2 0x48180600 w 1 #CM_IVAHD0_CLKSTCTRL
    			devmem2 0x48180C00 w 0 #PM_IVAHD0_PWRSTCTRL`
    			echo "reading HD0 pwrstst"
    			devmem2 0x48180C04
    			echo "reading sl2 clkctrl"
    			devmem2 0x48180624
    			echo "reading clkctrl"
    			devmem2 0x48180620
    		elif [ $1 = 'HD1' ]
    		then
    			echo "HD1"
    			echo "reading HD1 pwrstst"
    			devmem2 0x48180D04
    			devmem2 0x48180720 w 0 #CM_IVAHD1_CLKSTCRL
    			devmem2 0x48180724 w 0 #CM_IVAHD1_SL2_CLKCTRL
    			devmem2 0x48180700 w 1 #CM_IVAHD1_CLKSTCTRL
    			devmem2 0x48180D00 w 0 #PM_IVAHD1_PWRSTCTRL`
    			echo "reading HD1 pwrstst"
    			devmem2 0x48180D04
    			echo "reading sl2 clkctrl"
    			devmem2 0x48180724
    			echo "reading clkctrl"
    			devmem2 0x48180720
    		elif [ $1 = 'HD2' ]
    		then
    			echo "HD2"
    			echo "reading HD2 pwrstst"
    			devmem2 0x48180E04
    			devmem2 0x48180820 w 0 #CM_IVAHD2_CLKSTCRL
    			devmem2 0x48180824 w 0 #CM_IVAHD2_SL2_CLKCTRL
    			devmem2 0x48180800 w 1 #CM_IVAHD2_CLKSTCTRL
    			devmem2 0x48180E00 w 0 #PM_IVAHD2_PWRSTCTRL`
    			echo "reading HD2 pwrstst"
    			devmem2 0x48180E04
    			echo "reading sl2 clkctrl"
    			devmem2 0x48180824
    			echo "reading clkctrl"
    			devmem2 0x48180820
    		elif [ $1 = 'SGX' ]
    		then
    			echo "SGX"
    			echo "reading sgx pwrstst"
    			devmem2 0x48180F04
    			devmem2 0x48180920 w 0 #CM_SGX_CLKSTCRL
    			devmem2 0x48180900 w 1 #CM_SGX_CLKSTCTRL
    			devmem2 0x48180F00 w 0 #PM_SGX_PWRSTCTRL`
    			echo "reading sgx pwrstst"
    			devmem2 0x48180F04
    	fi
    fi
    

    Rodrigo

  • Rodrigo,

    Let us start with the SGX power domain. You can turn it off using the pvr-init script:

    root@dm816x-evm:~# /etc/init.d/pvr-init stop 

    Or with these commands:

    root@dm816x-evm:~# rmmod bufferclass_ti
    root@dm816x-evm:~# rmmod omaplfb 2>/dev/null
    root@dm816x-evm:~# rmmod pvrsrvkm 2>/dev/null

    Then these registers (CM_SGX_CLKSTCTRL, CM_SGX_SGX_CLKCTRL, PM_SGX_PWRSTST) should have new values, corresponding to SGX clock and power domain OFF.

    Does this work for you?

    Regards,

    Pavel

  • Hi Pavel,

    In looking at your response i noticed that we don't have the pvr-init file as well as the bufferclass_ti and omaplfb module.  I did try the other command pvrsrvkm but it didn't make a difference.  Below are the registers for the sgx and they don't change at all.

    CM_SGX_SGX_CLKTCRL was 0x2 <- Module is explicitly enabled

    CM_SGX_CLKSTCRTL was 0x102 <- that the SGX_GCLK is active and the SW_WKUP:start a software forced wake-up transition on the domain.

    PM_SGX_PWRSTST was 0x37 <- PowerState on

    These are the modules we do have

    / # lsmod

    Module Size Used by
    pvrsrvkm 153615 4
    ipv6 209855 10
    ti81xxvo 21318 0
    ti81xxfb 21979 1
    vpss 75057 2 ti81xxvo,ti81xxfb
    syslink 1129709 17

    Let me know if you have any other suggestions or comments.

    Thanks for your help,

    Rodrigo

  • Rodrigo,

    What is your SDK? My SDK is EZSDK 5.05.02.00 with psp 04.04.00.01.

    This is what I have before and after the "pvr-init stop' command execution regarding register PM_SGX_PWRSTST (address 0x48180F10):

    dm816x-evm login: root
    root@dm816x-evm:~# lsmod
    Module                  Size  Used by
    bufferclass_ti          4950  0
    omaplfb                10794  0
    pvrsrvkm              155594  2 bufferclass_ti,omaplfb
    ti81xxhdmi             17685  0
    ti81xxfb               21979  3
    vpss                   75009  3 omaplfb,ti81xxhdmi,ti81xxfb
    syslink              1130681  0
    ipv6                  209855  12
    root@dm816x-evm:~# ./readmem 0x48180F10
    0x00000037
    root@dm816x-evm:~# /etc/init.d/pvr-init stop
    Stopping PVR
    root@dm816x-evm:~# ./readmem 0x48180F10
    0x00000000
    root@dm816x-evm:~#

    The same with the other method:

    dm816x-evm login: root
    root@dm816x-evm:~# lsmod
    Module                  Size  Used by
    bufferclass_ti          4950  0
    omaplfb                10794  0
    pvrsrvkm              155594  2 bufferclass_ti,omaplfb
    ti81xxhdmi             17685  0
    ti81xxfb               21979  3
    vpss                   75009  3 omaplfb,ti81xxhdmi,ti81xxfb
    syslink              1130681  0
    ipv6                  209855  12
    root@dm816x-evm:~# ./readmem 0x48180F10
    0x00000037
    root@dm816x-evm:~# rmmod bufferclass_ti
    root@dm816x-evm:~# rmmod omaplfb 2>/dev/null
    root@dm816x-evm:~# rmmod pvrsrvkm 2>/dev/null
    root@dm816x-evm:~# lsmod
    Module                  Size  Used by
    ti81xxhdmi             17685  0
    ti81xxfb               21979  2
    vpss                   75009  2 ti81xxhdmi,ti81xxfb
    syslink              1130681  0
    ipv6                  209855  12
    root@dm816x-evm:~# ./readmem 0x48180F10
    0x00000000
    root@dm816x-evm:~#

    Regards,

    Pavel

  • Pavel,

    Sorry about that, i thought we had mentioned the PSP and EZSDK we are utilizing.  We are using ezsdk-5_05_01_04 and psp04.04.00.01.

    I actually tried this again and it seemed to work, i had forgotten to kill my application so the pvrsrvkm module wasn't being removed.

    / # lsmod
    Module Size Used by
    omaplfb 10742 0
    pvrsrvkm 153615 1 omaplfb
    ipv6 209855 10
    ti81xxvo 21318 0
    ti81xxfb 21979 1
    vpss 75057 3 omaplfb,ti81xxvo,ti81xxfb
    syslink 1129709 17
    / # devmem2 0x48180F10
    /dev/mem opened.
    Memory mapped at address 0x40193000.
    Value at address 0x48180F10 (0x40193f10): 0x37
    / # rmmod omaplfb 2>/dev/null
    / # rmmod pvrsrvkm 2>/dev/null
    / # lsmod
    Module Size Used by
    ipv6 209855 10
    ti81xxvo 21318 0
    ti81xxfb 21979 0
    vpss 75057 2 ti81xxvo,ti81xxfb
    syslink 1129709 17
    / # devmem2 0x48180F10
    /dev/mem opened.
    Memory mapped at address 0x40132000.
    Value at address 0x48180F10 (0x40132f10): 0x0

    Doing this reduced the current draw a little bit but we still need to get it down a lot more.  Can you help with the other regions as well?

    Thanks,

    Rodrigo

  • Rodrigo,

    Let us continue with the HDVICP0 (IVAHD0) power domain. This is how I turn it off:

    dm816x-evm login: root
    root@dm816x-evm:~# ./readmem 0x48180620
    0x00000002
    root@dm816x-evm:~# ./readmem 0x48180620 0x00000000
    root@dm816x-evm:~# ./readmem 0x48180620           
    0x00010000
    root@dm816x-evm:~# ./readmem 0x48180624
    0x00000002
    root@dm816x-evm:~# ./readmem 0x48180624 0x00000000
    root@dm816x-evm:~# ./readmem 0x48180624           
    0x00030000
    root@dm816x-evm:~# ./readmem 0x48180600
    0x00000102
    root@dm816x-evm:~# ./readmem 0x48180600 0x00000001
    root@dm816x-evm:~# ./readmem 0x48180600           
    0x00000101
    root@dm816x-evm:~# ./readmem 0x48180C10
    0x00000000
    root@dm816x-evm:~# ./readmem 0x48180C10 0x00000007
    root@dm816x-evm:~# ./readmem 0x48180C10           
    0x00000007
    root@dm816x-evm:~# ./readmem 0x48180C00
    0x00030000
    root@dm816x-evm:~# ./readmem 0x48180C04
    0x00000000
    root@dm816x-evm:~#

    We have one additional step, for the software reset (0x48180C10 0x00000007) .

    Should be the same with HDVICP1/2 power domains.

    Does it work for you?

    Best Regards,

    Pavel

  • Hi Pavel,

    For starters I really appreciate your help.

    I looked at your message and so far i'm able to successfully shut down HD0, HD1, HD2 and SGX.

    Based on what you noted about the additional step to write a 7 to that register I began looking at active and i'm not able to kill it completely.  Below are my results 

    / # ./shutDown.sh active
    reading active pwrstst
    /dev/mem opened.
    Memory mapped at address 0x40393000.
    Value at address 0x48180A04 (0x40393a04): 0x37
    /dev/mem opened.
    Memory mapped at address 0x4010a000.
    Value at address 0x48180420 (0x4010a420): 0x70000
    Written 0x0; readback 0x0
    /dev/mem opened.
    Memory mapped at address 0x401b0000.
    Value at address 0x48180424 (0x401b0424): 0x2
    Written 0x0; readback 0x0
    /dev/mem opened.
    Memory mapped at address 0x401ae000.
    Value at address 0x48180400 (0x401ae400): 0x2
    Written 0x1; readback 0x1
    /dev/mem opened.
    Memory mapped at address 0x4023f000.
    Value at address 0x48180404 (0x4023f404): 0xFF02
    Written 0x1; readback 0x1
    /dev/mem opened.
    Memory mapped at address 0x40282000.
    Value at address 0x48180A10 (0x40282a10): 0x3
    Written 0x7; readback 0x7
    reading active pwrstst
    /dev/mem opened.
    Memory mapped at address 0x40085000.
    Value at address 0x48180A04 (0x40085a04): 0x37

    Anything i'm forgetting for this region?

    Lastly i'm not sure if shutting down the active region will reduce the current enough so i was hoping to shut down all if not part of the default region and haven't been able to accomplish that eitther, below is what i've done so far.  Some regions like emif 0, emif 1, dmm ,fw when trying to kill them i lose command line access so i've not done anything with them and maybe you know of how this can be improved.  Note the steps below seem to lower the current a little bit, so maybe i am doing something right?

    / # ./shutDown.sh default
    Default
    reading default pwrstst
    /dev/mem opened.
    Memory mapped at address 0x4016c000.
    Value at address 0x48180B04 (0x4016cb04): 0x37
    emif 0
    emif 1
    dmm
    fw
    usb
    /dev/mem opened.
    Memory mapped at address 0x40148000.
    Value at address 0x48180558 (0x40148558): 0x2
    Written 0x0; readback 0x0
    sata
    /dev/mem opened.
    Memory mapped at address 0x400fc000.
    Value at address 0x48180560 (0x400fc560): 0x70000
    Written 0x0; readback 0x0
    default
    /dev/mem opened.
    Memory mapped at address 0x40275000.
    Value at address 0x48180574 (0x40275574): 0x2
    Written 0x0; readback 0x0
    pci
    /dev/mem opened.
    Memory mapped at address 0x40149000.
    Value at address 0x48180578 (0x40149578): 0x70000
    Written 0x0; readback 0x0
    /dev/mem opened.
    Memory mapped at address 0x402f4000.
    Value at address 0x48180510 (0x402f4510): 0x2
    Written 0x1; readback 0x1
    /dev/mem opened.
    Memory mapped at address 0x400d3000.
    Value at address 0x48180B10 (0x400d3b10): 0x83
    Written 0x7; readback 0x7
    reading default pwrstst
    /dev/mem opened.
    Memory mapped at address 0x400de000.
    Value at address 0x48180B04 (0x400deb04): 0x37

    Again Thanks for you help,

    Regards,

    Rodrigo

  • Rodrigo,

    I tried with the ACTIVE domain, but still with no success. I noticed we have two more registers in the DM816x datasheet than what we have in DM816x TRM:

    CM_HDMI_CLKCTRL (address 0x48180408) and CM_ACTIVE_HDMI_CLKCTRL (address 0x48180428). I tried with modify these two also, CM_HDMI_CLKSTCTRL = 0x1 and CM_ACTIVE_HDMI_CLKCTRL = 0x0, but stil can not turn the ACTIVE power domain to OFF. I will check with the PSP team if we need to do something else.

    Meanwhile you can check the following resources regarding power management in DM816x device:

    http://processors.wiki.ti.com/index.php/TI81XX_PSP_User_Guide#Power_Management

    http://processors.wiki.ti.com/index.php/DM816x_C6A816x_AM389x_Power_Estimation

    Check also if you will reduce the power consumption after these:

    target # /etc/init.d/pvr-init stop
    target # /etc/init.d/matrix-gui-e stop
    target # /etc/init.d/load-hd-firmware.sh stop

    Regards,

    Pavel

  • Hi Pavel,

    I did notice those as well, tried adding them but they didn't seem to make a difference.

    Thanks for the info, i will investigate these links further and hopefully find something we might have missed.

    Unfortunately I don't have any of those 3 scripts you suggested so i wasn't able to reduce any current that way.  I did try going through all the init.d scripts and stopping them didn't change the current draw.

    Let me know if you find a way to turn off those other regions, I will try some more things on my end and will update you if i find something.

    Thanks for all your help.

    Regards,

    Rodrigo

  • Rodrigo,

    These 3 scripts should be there for EZSDK 5.05.01.04. This is what I have:

    dm816x-evm login: root
    root@dm816x-evm:~# cd /etc/init.d/
    root@dm816x-evm:/etc/init.d# ls
    alignment.sh          matrix-gui-e          sendsigs
    alsa-state            modutils.sh           single
    banner                mountall.sh           sysfs.sh
    bootmisc.sh           mountnfs.sh           syslog
    checkroot             networking            syslog.busybox
    dbus-1                populate-volatile.sh  telnetd
    devpts.sh             psplash               thttpd
    finish.sh             pvr-init              udev
    functions             ramdisk               udev-cache
    gplv3-notice          rc                    umountfs
    halt                  rcS                   umountnfs.sh
    hostname.sh           reboot                urandom
    hwclock.sh            rmnologin
    load-hd-firmware.sh   save-rtc.sh
    root@dm816x-evm:/etc/init.d#

    Could you please provide me the content of your /etc/init.d/ folder and full log of the boot process?

    Regards,

    Pavel

  • Hi Pavel,

    My init.d doesn't have a lot of those scripts.  I e-mailed you the boot log and the contents of that folder.  Let me know if you need anything else.

    Rodrigo

  • Rodrigo,

    Rodrigo Rengifo said:
    We are using ezsdk-5_05_01_04 and psp04.04.00.01.

    You stated that you are using EZSDK 5.05.01.04, but looking at your log file, it seems to me that you are using the Z3-DM8168 board with the corresponding Z3 SDK ( z3-netra-RPS). And that is the reason we have different scripts in the /etc/init.d/ folder.

    For Z3 SDK support, check here: http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/717/p/248816/872431.aspx#872431

    Regards,

    Pavel

  • HI Pavel,

    Thanks for your response.  Sorry i didn't mention that we were using the z3 board.  We did speak with them and they pointed us to ti to be able to figure out how to turn off those regions.  

    Thanks for all your help,

    Rodrigo

  • Hello Pavel,

    Thanks for this discussion you entertained on the DM8168 power domain shut down.

    I have a question related to this: Even though my customer will shut down a number of power domain that he is not using, he still needs to apply power to the corresponding power rails, right? That is, you must (electrically) connect all the power domains on the chip anyway?

    Please let me know.

    Best regards

    Seb

  • Hi Seb,

    Electrons4me said:
    Even though my customer will shut down a number of power domain that he is not using, he still needs to apply power to the corresponding power rails, right? That is, you must (electrically) connect all the power domains on the chip anyway?

    Yes, I think the above is correct.

    Please refer to the DM816x TRM for more information, chapter 3 Power Management and chapter 18 PRCM.

    Also, we currently discuss low power modes in the below thread, which might be in help:

    http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/716/p/256582/937019.aspx

    Best regards,
    Pavel

  • Hi Pavel,

    Thanks for pointing me to the answer. It can be found here: DM816x TRM 3.2.1

    Cheers

    Seb