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.

Linux/AM4376: TPS65218 DCDC3 issue

Part Number: AM4376
Other Parts Discussed in Thread: TPS65218,

Tool/software: Linux

Hi Sir 

we used AM4376 with TPS65218 for development. (SDK 04.01.00.06.)

After executing power-off, we found DCDC3, 1.35V for DDR always is on, while other powers(VDD_MPU, 3.3V, VDD_CORE, VLS1 and VCC_1P8V) are off.

In tps65218-regulator.c

static int tps65218_pmic_set_suspend_disable(struct regulator_dev *dev)
{
struct tps65218 *tps = rdev_get_drvdata(dev);
unsigned int rid = rdev_get_id(dev);

if (rid < TPS65218_DCDC_1 || rid > TPS65218_LDO_1)
return -EINVAL;

/*
* Certain revisions of TPS65218 will need to have DCDC3 regulator
* enabled always, otherwise an immediate system reboot will occur
* during poweroff.
*/
if (rid == TPS65218_DCDC_3 && tps->rev == TPS65218_REV_2_1)
return 0;

if (!tps->strobes[rid]) {
if (rid == TPS65218_DCDC_3)
tps->strobes[rid] = 3;
else
return -EINVAL;
}

return tps65218_set_bits(tps, dev->desc->bypass_reg,
dev->desc->bypass_mask,
tps->strobes[rid], TPS65218_PROTECT_L1);
}

In DTS, 

&i2c0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&i2c0_pins>;
clock-frequency = <400000>;

tps65218: tps65218@24 {
reg = <0x24>;
compatible = "ti,tps65218";
interrupts = <GIC_SPI 7 IRQ_TYPE_NONE>; /* NMIn */
interrupt-controller;
#interrupt-cells = <2>;

dcdc1: regulator-dcdc1 {
regulator-name = "vdd_core";
regulator-min-microvolt = <912000>;
regulator-max-microvolt = <1144000>;
regulator-boot-on;
regulator-always-on;
};

dcdc2: regulator-dcdc2 {
regulator-name = "vdd_mpu";
regulator-min-microvolt = <912000>;
regulator-max-microvolt = <1378000>;
regulator-boot-on;
regulator-always-on;
};

dcdc3: regulator-dcdc3 {
regulator-name = "vdcdc3";
regulator-boot-on;
regulator-always-on;
regulator-state-mem {
regulator-on-in-suspend;
};
regulator-state-disk {
regulator-off-in-suspend;
};
};

 

Please advise and thanks for your help.

 

BR

Yimin

  • The PMIC experts have been notified. They will respond here.
  • Hi Sir

    the PMIC is TPS65218B1RSLR

    FYR

    BR
    Yimin
  • No offense, , but I cannot tell from reading this code what it might be telling the PMIC to do.

    It appears to be a low-power mode issue, where the Linux code wants to keep the DDR alive, so it would make sense that DCDC3 stays enabled if it has been told to do so by the processor.

    In order to save power when DCDC3 continues running, Load Switch 1 (LS1) should be turned off at this time, which will remove power from the VDDS_DDR rail of the processor.

    Can you summarize the meaning of this code and determine if this is a possibility?

  • Yimin,

    Based on this comment and code:

    yimin bai34 said:
    /*
    * Certain revisions of TPS65218 will need to have DCDC3 regulator
    * enabled always, otherwise an immediate system reboot will occur
    * during poweroff.
    */
    if (rid == TPS65218_DCDC_3 && tps->rev == TPS65218_REV_2_1)
    return 0;

    I'd say this feature has been disabled due to the stated reason. If you are sure this is not an issue with your board, you could simply remove this code. I would be very cautious though, based on the comment.

    Maybe the PMIC experts on this thread can expand on some reasons for this...

  • Ron,

    There are no limitations of the DCDC3 converter and it is not unique when compared to DCDC1 or DCDC2.

    The DCDC3 converter powers DDR, and the PMIC will not cause the system re-boot.

    It is my understanding that when DDR must be kept alive at all times, powering down DCDC3 will trigger the processor to initiate a re-boot.
    The PMIC only initiates reboots when output voltages are out of regulation (below VPG, above VOV).

    I hope someone more familiar with the processor will be able to explain the use cases when DDR must remain on at all times.
  • When the AM3 or AM4 processor enters suspend mode there are two types: suspend to RAM or suspend to disk. When using the suspend to RAM option, the SoC DDR rail can be turned off but the power to the DDR chips must stay on. This is why DCDC3 passes through a load-switch LS1 before reaching the SoC DDR rail, but the DDR chips are powered directly before the load-switch. 

    dcdc3: regulator-dcdc3 {
    regulator-name = "vdcdc3";
    regulator-boot-on;
    regulator-always-on;
    regulator-state-mem {
    regulator-on-in-suspend;
    };
    regulator-state-disk {
    regulator-off-in-suspend;
    };
    };

    The behavior Yimin describes should not be occuring during a normal shutdown request though. The code in tps65218-regulator.c might be removing DCDC3 from the power sequence due to a previous suspend request and not adding it back in the sequence for a shutdown request. 

    Yimin,

    If suspend is not being used, I would either remove the code in regulator.c or change the device tree property "regulator-on-in-suspend" to "regulator-off-in-suspend". Let us know if that helps. 

  • Hi Sir

    We did some experiment as below by using latest SDK v4.3

    In GP-EVM 1.2 with TPS65218A1
    we execute poweroff command and the DCDC3 is off

    In our board with TPS65218B1
    a. we execute poweroff command and the DCDC3 is on.
    b. we do two experiments to remove the code in regulator.c or change the device tree property
    "regulator-on-in-suspend" to "regulator-off-in-suspend".
    system will do reboot.

    please advise why the bevior is different and how to turn off DCDC3 after executing power-off

    BR
    Yimin
  • Hi Sir

    Could you comment about our experiment in TPS65218A1 and TPS65218B1 for DCDC3 on/off issue in power off status?

    In GP-EVM 1.2 with TPS65218A1

    we execute poweroff command and the DCDC3 is off

    In our board with TPS65218B1

    a. we execute poweroff command and the DCDC3 is on.

    b. we do two experiments to remove the code in regulator.c or change the device tree property

    "regulator-on-in-suspend" to "regulator-off-in-suspend". system will do reboot.

    Does it have any side effect to keep DCDC3 on while executing power off command ?

    BR

    Yimin

  • Hi Yimin,

    I was wrong about my device tree suggestion. To turn off the DCDC3 regulator on all PMIC versions, you only need to remove this line in the PMIC driver and nothing else.

    if (rid == TPS65218_DCDC_3 && tps->rev == TPS65218_REV_2_1)
    return 0;

    However, from the software team internal testing, boards with the B1 PMIC will auto-reboot when told to shut down. If we keep DCDC3 on, then this fixes the problem. If your testing reflects the same behavior then it may be necessary to keep DCDC3 on to prevent the auto-reboot issue.