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.

TMS320DM8168: Smartreflex with TP40400 Voltage Regulator

Part Number: TMS320DM8168
Other Parts Discussed in Thread: TPS40400, PMP

Hi,

We have a product developed around TI8168 based on DVRRDK_03.50.00.05. My question is regarding smartreflex feature. We use an I2C controlled voltage regulator TPS40400 in our system. We have an overheating issue with our boards here for which we are further doing our thermal modelling to improve heat dissipation. We found that after a while the board starts to consume more and more power. We found that the smartreflex is working and the TPS regulator is increasing the voltage in steps.

I have attached the kernel prints from the TPS40400 regulator driver highlighted here. Can you please confirm is it working in the proper way.

Below are the kernel print section when the board boots up:


Starting kernel ...

Linux version 2.6.37+ (abdul@rouf) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) ) #19 Fri Jul 27 12:56:51 CEST 2018
CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c53c7f
CPU: VIPT nonaliasing data cache, VIPT aliasing instruction cache
Machine: ud8168_dvr
vram size = 20971520 at 0x0
ti81xx_reserve: ### Reserved DDR region @8ff00000
reserved size = 20971520 at 0x0
FB: Reserving 20971520 bytes SDRAM for VRAM
Memory policy: ECC disabled, Data cache writeback
OMAP chip is TI8168 2.1
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 59648
Kernel command line: mem=256M console=ttyO2,115200n8 root=/dev/mmcblk0p2 rw rootwait ip=192.168.1.2:192.168.1.10:192.168.1.10:255.255.255.0::eth0:off vram=20M notifyk.vpssm3_sva=0xBEE00000 ddr_mem=1024M
PID hash table entries: 1024 (order: 0, 4096 bytes)
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Memory: 234MB 1MB = 235MB total
Memory: 233372k/233372k available, 28772k reserved, 0K highmem
Virtual kernel memory layout:
vector : 0xffff0000 - 0xffff1000 ( 4 kB)
fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB)
DMA : 0xffc00000 - 0xffe00000 ( 2 MB)
vmalloc : 0xd0800000 - 0xf8000000 ( 632 MB)
lowmem : 0xc0000000 - 0xd0000000 ( 256 MB)
pkmap : 0xbfe00000 - 0xc0000000 ( 2 MB)
modules : 0xbf000000 - 0xbfe00000 ( 14 MB)
.init : 0xc0008000 - 0xc0040000 ( 224 kB)
.text : 0xc0040000 - 0xc0464000 (4240 kB)
.data : 0xc0464000 - 0xc04a14c0 ( 246 kB)
SLUB: Genslabs=11, HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
NR_IRQS:375
IRQ: Found an INTC at 0xfa200000 (revision 5.0) with 128 interrupts
Total of 128 interrupts on 1 active controller
GPMC revision 6.0
Trying to install interrupt handler for IRQ368
Trying to install interrupt handler for IRQ369
Trying to install interrupt handler for IRQ370
Trying to install interrupt handler for IRQ371
Trying to install interrupt handler for IRQ372
Trying to install interrupt handler for IRQ373
Trying to install interrupt handler for IRQ374
Trying to install type control for IRQ375
Trying to set irq flags for IRQ375
OMAP clockevent source: GPTIMER1 at 27000000 Hz
Console: colour dummy device 80x30
Calibrating delay loop... 1199.30 BogoMIPS (lpj=5996544)
pid_max: default: 32768 minimum: 301
Security Framework initialized
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
devtmpfs: initialized
TI81XX: Map 0x8ff00000 to 0xfe500000 for dram barrier
TI81XX: Map 0x40300000 to 0xfe600000 for sram barrier
omap_voltage_early_init: voltage driver support not added
regulator: core version 0.5
regulator: dummy:
NET: Registered protocol family 16
omap_voltage_domain_lookup: Voltage driver init not yet happened.Faulting!
omap_voltage_add_dev: VDD specified does not exist!
OMAP GPIO hardware version 0.1
OMAP GPIO hardware version 0.1
omap_mux_init: Add partition: #1: core, flags: 0
3-wired eeprom init done. (H/W ver:1122)
_omap_mux_get_by_name: Could not find signal i2c2_scl.i2c2_scl
_omap_mux_get_by_name: Could not find signal i2c2_sda.i2c2_sda
registered ti816x_sr device
Cannot clk_get ck_32
pm_dbg_init: only OMAP3 supported
registered ti81xx_vpss device
registered ti81xx_vidout device
registered ti81xx on-chip HDMI device
registered ti81xx_fb device
bio: create slab <bio-0> at 0
SCSI subsystem initialized
omap_i2c omap_i2c.1: bus 1 rev4.0 at 100 kHz
178:tps40400_enable Read PMBUS_OPERATION: 0x0
182:tps40400_enable Set: Enable PMBUS_OPERATION: 0
84:tps40400_get_voltage Current voltage :1000000
regulator: pmbus_vr: 800 <--> 1050 mV at 1000 mV
275:tps40400_probe TPS40400 exponent:-10
288:tps40400_probe PMBUS_REVISION: 17
294:tps40400_probe VOUT_CAL_GAIN: 0
297:tps40400_probe PMBUS_VOUT_SCALE_LOOP: 0xb900
300:tps40400_probe Set PMBUS_VOUT_SCALE_LOOP: 0x0
303:tps40400_probe PMBUS_VOUT_SCALE_LOOP: 0xb933
314:tps40400_probe PMBUS_VOUT_MARGIN_HIGH: 0x547
322:tps40400_probe Read VOUT_TRIM: 0x0
333:tps40400_probe PMBUS_READ_VOUT: 0x3d0
337:tps40400_probe---> Current Output voltage[0] 953125uV
333:tps40400_probe PMBUS_READ_VOUT: 0x3c0
337:tps40400_probe---> Current Output voltage[1] 937500uV
333:tps40400_probe PMBUS_READ_VOUT: 0x3d0
337:tps40400_probe---> Current Output voltage[2] 953125uV
..
... (I removed some continuous prints here)
....
333:tps40400_probe PMBUS_READ_VOUT: 0x3d0
337:tps40400_probe---> Current Output voltage[98] 953125uV
333:tps40400_probe PMBUS_READ_VOUT: 0x3d0
337:tps40400_probe---> Current Output voltage[99] 953125uV
347:tps40400_probe Avg Current Output voltage 954687uV
357:tps40400_probe VOUT_CAL_OFFSET: 46
366:tps40400_probe PMBUS_IOUT_CAL_GAIN: 0x88d0
376:tps40400_probe IOUT_OC_FAULT_LIMIT: 0xf838
385:tps40400_probe PMBUS_IOUT_OC_WARN_LIMIT: 0xf832
regulator: tps40400 probe done.
omap_i2c omap_i2c.2: bus 2 rev4.0 at 100 kHz
Advanced Linux Sound Architecture Driver Version 1.0.23.
Switching to clocksource gp timer
NET: Registered protocol family 2
IP route cache hash table entries: 2048 (order: 1, 8192 bytes)
TCP established hash table entries: 8192 (order: 4, 65536 bytes)
TCP bind hash table entries: 8192 (order: 3, 32768 bytes)
TCP: Hash tables configured (established 8192 bind 8192)
TCP reno registered
UDP hash table entries: 256 (order: 0, 4096 bytes)
UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
NET: Registered protocol family 1
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
NetWinder Floating Point Emulator V0.97 (double precision)
PMU: registered new PMU device of type 0
omap-iommu omap-iommu.0: ducati registered
omap-iommu omap-iommu.1: sys registered
JFFS2 version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
msgmni has been set to 455
io scheduler noop registered
io scheduler deadline registered
io scheduler cfq registered (default)
Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
omap_uart.0: ttyO0 at MMIO 0x48020000 (irq = 72) is a OMAP UART0
omap_uart.1: ttyO1 at MMIO 0x48022000 (irq = 73) is a OMAP UART1
omap_uart.2: ttyO2 at MMIO 0x48024000 (irq = 74) is a OMAP UART2
console [ttyO2] enabled
brd: module loaded
loop: module loaded
ahci probe: devid name is ahci
ahci CAP register dump =0x6726ff81
Modified ahci CAP register dump =0x6f26ff81
ahci ahci.0: forcing PORTS_IMPL to 0x3
ahci: SSS flag set, parallel bus scan disabled
ahci ahci.0: AHCI 0001.0100 32 slots 2 ports 3 Gbps 0x3 impl platform mode
ahci ahci.0: flags: ncq sntf stag pm led clo only pmp pio slum part ccc
scsi0 : ahci_platform
scsi1 : ahci_platform
ata1: SATA max UDMA/133 mmio [mem 0x4a140000-0x4a150fff] port 0x100 irq 16
ata2: SATA max UDMA/133 mmio [mem 0x4a140000-0x4a150fff] port 0x180 irq 16
omap2-nand driver initializing
ONFI flash detected
ONFI param page 0 valid
NAND device: Maf ID: 0x2c, Chip ID: 0xda (Micron, NAND 256MiB 3,3V 8-bit)
erasesize: 0x20000, writesize: 2048, oobsize: 64
Creating 9 MTD partitions on "omap2-nand.0":
0x000000000000-0x000000240000 : "U-Boot"
0x000000240000-0x000000280000 : "U-Boot Env"
0x000000280000-0x000000580000 : "U-Boot Logo"
0x000000580000-0x000000a80000 : "Kernel"
0x000000a80000-0x00000b480000 : "File System"
0x00000b480000-0x00000b980000 : "Secondary Kernel"
0x00000b980000-0x00000df80000 : "Secondary File System"
0x00000df80000-0x00000e480000 : "Configuration"
0x00000e480000-0x000010000000 : "Reserved"
davinci_mdio davinci_mdio.0: davinci mdio revision 1.6
davinci_mdio davinci_mdio.0: detected phy mask ffffff7f
davinci_mdio.0: probed
davinci_mdio davinci_mdio.0: phy[7]: device 0:07, driver unknown
vcan: Virtual CAN interface driver
CAN device driver interface
mcp2515 spi1.0: probed
mice: PS/2 mouse device common for all mice
bq32k 2-0068: Oscillator Failure. Check RTC battery.
bq32k 2-0068: rtc core: registered bq32k as rtc0
omap_rtc omap_rtc: rtc core: registered omap_rtc as rtc1
i2c /dev entries driver
Linux video capture interface: v2.00
OMAP Watchdog Timer Rev 0x00: initial timeout 60 sec
notify_init : notify drivercreated for remote proc id 2 at physical Address 0xbee00000
Registered FPGA audio codec
ALSA device list:
No soundcards found.
TCP cubic registered
NET: Registered protocol family 17
can: controller area network core (rev 20090105 abi 8)
NET: Registered protocol family 29
can: raw protocol (rev 20090105)
can: broadcast manager protocol (rev 20090105 t)
VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3
omap_voltage_late_init: Voltage driver support not added
Power Management for TI81XX.
84:tps40400_get_voltage Current voltage :1000000
smartreflex smartreflex: Driver initialized


Now once the whole booting is done and the board is set to do the job after sometimes obviously because of higher temperature following prints starts to come which clears that the smartreflex feature works with the TPS40400 Regulator.

84:tps40400_get_voltage Current voltage :1000000
116:tps40400_set_voltage Smartreflex trying to set minuV:1002734, maxuV:1002734
122:tps40400_set_voltage Trim Output voltage by 2734uV
126:tps40400_set_voltage trying to Set Output voltage: 0x3
146:tps40400_set_voltage PMBUS_READ_VOUT: 0x41e
150:tps40400_set_voltage---> Current Output voltage[0] 1029296uV
146:tps40400_set_voltage PMBUS_READ_VOUT: 0x40e
150:tps40400_set_voltage---> Current Output voltage[1] 1013671uV
.
.(I removed some continuous prints here)
.
146:tps40400_set_voltage PMBUS_READ_VOUT: 0x40e
150:tps40400_set_voltage---> Current Output voltage[97] 1013671uV
146:tps40400_set_voltage PMBUS_READ_VOUT: 0x41e
150:tps40400_set_voltage---> Current Output voltage[98] 1029296uV
146:tps40400_set_voltage PMBUS_READ_VOUT: 0x40e
150:tps40400_set_voltage---> Current Output voltage[99] 1013671uV
159:tps40400_set_voltage Avg Current Output voltage 1013671uV

After a while again the voltage increases one step further and following are the prints:

84:tps40400_get_voltage Current voltage :1002734
116:tps40400_set_voltage Smartreflex trying to set minuV:1008202, maxuV:1008202
122:tps40400_set_voltage Trim Output voltage by 8202uV
126:tps40400_set_voltage trying to Set Output voltage: 0x8
146:tps40400_set_voltage PMBUS_READ_VOUT: 0x41e
150:tps40400_set_voltage---> Current Output voltage[0] 1029296uV
146:tps40400_set_voltage PMBUS_READ_VOUT: 0x42e
150:tps40400_set_voltage---> Current Output voltage[1] 1044921uV
.
.(I removed some continuous prints here)
.
146:tps40400_set_voltage PMBUS_READ_VOUT: 0x40e
150:tps40400_set_voltage---> Current Output voltage[97] 1013671uV
146:tps40400_set_voltage PMBUS_READ_VOUT: 0x40e
150:tps40400_set_voltage---> Current Output voltage[98] 1013671uV
146:tps40400_set_voltage PMBUS_READ_VOUT: 0x40e
150:tps40400_set_voltage---> Current Output voltage[99] 1013671uV
159:tps40400_set_voltage Avg Current Output voltage 1018202uV

This will continue further..

What i want to clear is whether this is the proper way smartreflex is supposed to work?
It looks like the power consumption is gradually increasing in contrary to what TI tells that smartreflex considerably reduces it. I doubt this is going to further increase the SoC temperature. But i found that disabling the smartreflex is something not adviced by TI as well.

Can you please help on this? This is kind of critical issue for us.