[Uboot-stm32] [PATCH 12/16] board: stm32mp1: add timeout for I/O compensation ready
Patrice CHOTARD
patrice.chotard at st.com
Wed Apr 1 10:07:05 CEST 2020
Hi Patrick
On 3/31/20 6:04 PM, Patrick Delaunay wrote:
> This patch avoids infinite loop when I/O compensation failed,
> it adds a 1s timeout to detect error.
>
> Signed-off-by: Patrick Delaunay <patrick.delaunay at st.com>
> ---
>
> board/st/stm32mp1/stm32mp1.c | 16 ++++++++++++----
> 1 file changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/board/st/stm32mp1/stm32mp1.c b/board/st/stm32mp1/stm32mp1.c
> index fff4cef2c2..75aac6d66c 100644
> --- a/board/st/stm32mp1/stm32mp1.c
> +++ b/board/st/stm32mp1/stm32mp1.c
> @@ -35,6 +35,7 @@
> #include <asm/arch/sys_proto.h>
> #include <jffs2/load_kernel.h>
> #include <linux/err.h>
> +#include <linux/iopoll.h>
> #include <power/regulator.h>
> #include <usb/dwc2_udc.h>
>
> @@ -473,10 +474,10 @@ static void sysconf_init(void)
> struct udevice *pwr_dev;
> struct udevice *pwr_reg;
> struct udevice *dev;
> - int ret;
> u32 otp = 0;
> #endif
> - u32 bootr;
> + int ret;
> + u32 bootr, val;
>
> syscfg = (u8 *)syscon_get_first_range(STM32MP_SYSCON_SYSCFG);
>
> @@ -553,8 +554,15 @@ static void sysconf_init(void)
> */
> writel(SYSCFG_CMPENSETR_MPU_EN, syscfg + SYSCFG_CMPENSETR);
>
> - while (!(readl(syscfg + SYSCFG_CMPCR) & SYSCFG_CMPCR_READY))
> - ;
> + /* poll until ready (1s timeout) */
> + ret = readl_poll_timeout(syscfg + SYSCFG_CMPCR, val,
> + val & SYSCFG_CMPCR_READY,
> + 1000000);
> + if (ret) {
> + pr_err("SYSCFG: I/O compensation failed, timeout.\n");
> + led_error_blink(10);
> + }
> +
> clrbits_le32(syscfg + SYSCFG_CMPCR, SYSCFG_CMPCR_SW_CTRL);
> #endif
> }
Reviewed-by: Patrice Chotard <patrice.chotard at st.com>
Thanks
More information about the U-Boot
mailing list