[U-Boot] [PATCH v3] MX28: Check if we are using a valid VBUS for power initialization
Marek Vasut
marex at denx.de
Sun Aug 5 00:49:04 CEST 2012
Dear Otavio Salvador,
> Signed-off-by: Otavio Salvador <otavio at ossystems.com.br>
> ---
> Changes in v2:
> - add comments
> - fix when we have vbus OR vdd5v
> - improve patch short description
>
> Changes in v3:
> - change short-description prefix
>
> arch/arm/cpu/arm926ejs/mx28/spl_power_init.c | 26
> +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7
> deletions(-)
>
> diff --git a/arch/arm/cpu/arm926ejs/mx28/spl_power_init.c
> b/arch/arm/cpu/arm926ejs/mx28/spl_power_init.c index 4b09b0c..fdf810c
> 100644
> --- a/arch/arm/cpu/arm926ejs/mx28/spl_power_init.c
> +++ b/arch/arm/cpu/arm926ejs/mx28/spl_power_init.c
> @@ -564,6 +564,15 @@ void mx28_batt_boot(void)
> 0x8 << POWER_5VCTRL_CHARGE_4P2_ILIMIT_OFFSET);
> }
>
> +static int mx28_valid_vbus(void)
> +{
> + struct mx28_power_regs *power_regs =
> + (struct mx28_power_regs *)MXS_POWER_BASE;
> +
> + /* iMX23 uses POWER_STS_VBUSVALID_STATUS at same offset */
> + return readl(&power_regs->hw_power_sts) & POWER_STS_VBUSVALID0_STATUS;
> +}
> +
> void mx28_handle_5v_conflict(void)
> {
> struct mx28_power_regs *power_regs =
> @@ -577,14 +586,19 @@ void mx28_handle_5v_conflict(void)
> tmp = readl(&power_regs->hw_power_sts);
>
> if (tmp & POWER_STS_VDDIO_BO) {
> + /*
> + * VDDIO has a brownout, then the VDD5V_GT_VDDIO becomes
> + * unreliable
> + */
These should go into separate patch.
> mx28_powerdown();
> break;
> }
>
> - if (tmp & POWER_STS_VDD5V_GT_VDDIO) {
> + if (mx28_valid_vbus() || (tmp & POWER_STS_VDD5V_GT_VDDIO)) {
And if VDD5V_GT_VDDIO isn't true, this will crash.
> mx28_boot_valid_5v();
> break;
> } else {
> + /* Neither 5v sees 5v so we power down */
> mx28_powerdown();
> break;
> }
> @@ -601,17 +615,15 @@ void mx28_5v_boot(void)
> struct mx28_power_regs *power_regs =
> (struct mx28_power_regs *)MXS_POWER_BASE;
>
> - /*
> - * NOTE: In original IMX-Bootlets, this also checks for VBUSVALID,
> - * but their implementation always returns 1 so we omit it here.
> - */
> - if (readl(&power_regs->hw_power_sts) & POWER_STS_VDD5V_GT_VDDIO) {
> + if (mx28_valid_vbus() &&
And again ... you unconditionally add something that will break other boards
that aren't supplied from 5V. This part isn't present in mx28 bootlets if I'm
right, yes?
> + (readl(&power_regs->hw_power_sts) & POWER_STS_VDD5V_GT_VDDIO)) {
> mx28_boot_valid_5v();
> return;
> }
>
> early_delay(1000);
> - if (readl(&power_regs->hw_power_sts) & POWER_STS_VDD5V_GT_VDDIO) {
> + if (mx28_valid_vbus() &&
> + (readl(&power_regs->hw_power_sts) & POWER_STS_VDD5V_GT_VDDIO)) {
> mx28_boot_valid_5v();
> return;
> }
Best regards,
Marek Vasut
More information about the U-Boot
mailing list