[U-Boot] [PATCH 07/12] imx:mx6 Support LDO bypass

Tim Harvey tharvey at gateworks.com
Tue Feb 10 15:50:54 CET 2015


On Tue, Feb 10, 2015 at 3:23 AM, Stefano Babic <sbabic at denx.de> wrote:
>
> Ok - with this explanation, I would try to understand how the changes
> can be split. If the feature/change works for several boards, it makes
> sense to have it common and general. If it is only for one board, must
> flow into the board directory.

It should be common as there are several boards which use PMIC's and can use it.

>
> It looks like that ldo-bypass is strictly dependent on the board.
> Firstly, it must have PMIC, and not all boards have it. Your last sentence:

Any board that has a PMIC capable of regulating VDD_ARM_IN and
VDD_SOC_IN to the setpoints from the IMX6 datasheet can operate in LDO
bypass mode, unless operating at 1.2GHz in which case the datasheet
states that the LDO must be used (not bypassed) to avoid ripple
sensitivity issues.

>
>> In ldo-bypass mode, we need trigger WDOG_B pin to reset pmic in
>> ldo-bypass mode. So add set_wdog_reset to do this work.
>
> This looks to me as an item very bound to the board. Could it be
> possible to use another pin (I do not know the schematics, I remember
> that such as reset pin was fix on previous i.MX) ? If answer is yes, can
> these changes be used by other board or are they only for sabresd ?
>

agreed - this is a board-specific pinmux

>
>> Signed-off-by: Peng Fan <Peng.Fan at freescale.com>
>> Signed-off-by: Robin Gong <b38343 at freescale.com>
>> Signed-off-by: Nitin Garg <nitin.garg at freescale.com>
>> ---
>>  arch/arm/cpu/armv7/mx6/soc.c              | 141 ++++++++++++++++++++++++++++++
>>  arch/arm/include/asm/arch-mx6/sys_proto.h |   9 ++
>>  2 files changed, 150 insertions(+)
>>
>> diff --git a/arch/arm/cpu/armv7/mx6/soc.c b/arch/arm/cpu/armv7/mx6/soc.c
>> index 5f5f497..5d02755 100644
>> --- a/arch/arm/cpu/armv7/mx6/soc.c
>> +++ b/arch/arm/cpu/armv7/mx6/soc.c
>> @@ -18,6 +18,7 @@
>>  #include <asm/arch/sys_proto.h>
>>  #include <asm/imx-common/boot_mode.h>
>>  #include <asm/imx-common/dma.h>
>> +#include <libfdt.h>
>>  #include <stdbool.h>
>>  #include <asm/arch/mxc_hdmi.h>
>>  #include <asm/arch/crm_regs.h>
>> @@ -429,6 +430,146 @@ void s_init(void)
>>       writel(mask528, &anatop->pfd_528_clr);
>>  }
>>
>> +#ifdef CONFIG_LDO_BYPASS_CHECK
>> +DECLARE_GLOBAL_DATA_PTR;
>> +static int ldo_bypass;
>
> mmmhh....global to the module ?
>
>> +
>> +int check_ldo_bypass(void)
>> +{
>> +     const int *ldo_mode;
>> +     int node;
>> +
>> +     /* get the right fdt_blob from the global working_fdt */
>> +     gd->fdt_blob = working_fdt;
>> +     /* Get the node from FDT for anatop ldo-bypass */
>> +     node = fdt_node_offset_by_compatible(gd->fdt_blob, -1,
>> +             "fsl,imx6q-gpc");
>> +     if (node < 0) {
>> +             printf("No gpc device node %d, force to ldo-enable.\n", node);
>> +             return 0;
>> +     }
>> +     ldo_mode = fdt_getprop(gd->fdt_blob, node, "fsl,ldo-bypass", NULL);
>
> I am quite lost. I have searched in kernel (current TOT), and I have not
> found such property. Can you help me to understand ?

Right - you won't find it because its a Freescale vendor kernel
implementation only. A hack if you ask me to avoid having to doing
ldo-byapss the right way.

Here are the threads that I know of regarding ldo-bypass in the
kernel, where it needs to be:

https://lkml.org/lkml/2014/12/18/255
https://lkml.org/lkml/2014/10/31/3

Peng,

I think what you are trying to do here is to put the anatop regulators
in bypass mode so that the Freescale vendor kernel leaves them
bypassed (which is what the 3.10.x based vendor kernels supporting
device-tree at http://git.freescale.com/git/cgit.cgi/imx/linux-2.6-imx.git
do). This is what the Freescale vendor U-Boot does and so they have
created a horrible dependence between kernel and bootloader.

Instead you may be interested in what I did for our BSP's that use the
Freescale vendor kernel. Instead of touching U-Boot, I look for the
fsl,ldo-bypass node in the kernel and enable it just like their
bootloader would have:
https://github.com/Gateworks/linux-imx6/commit/a1af6ac6f00b4da7c8a5656e8ff093d4ab5cadee

That said, I would love to see some help getting IMX6 ldo-bypass
support upstream. All of our boards have an external PMIC and are
capable of bypass mode. Bypassing the LDO on such boards really helps
reduce overall board power consumption as well as move heat from the
CPU to the PMIC.

Tim


More information about the U-Boot mailing list