[PATCH v1 0/2] colibri_imx6: fix linker issue when enabling watchdog

Building colibri_imx6 target with watchdog enabled fails. The first patch in this series fixes the problem, the second one adds a new defconfig with watchdog enabled.
Best Regards,
Andreas Aegerter (2): colibri_imx6: fix linker issue enabling watchdog colibri_imx6: add default config with watchdog enabled
board/toradex/colibri_imx6/MAINTAINERS | 4 + board/toradex/colibri_imx6/colibri_imx6.c | 4 +- configs/colibri_imx6_wdg_defconfig | 124 ++++++++++++++++++++++ 3 files changed, 130 insertions(+), 2 deletions(-) create mode 100644 configs/colibri_imx6_wdg_defconfig

Using colibri_imx6_defconfig with additionally CONFIG_WATCHDOG, CONFIG_WDT and CONFIG_IMX_WATCHDOG enabled results in a linker error.
arm-linux-gnueabihf-ld.bfd: arch/arm/lib/reset.o: in function `do_reset': /home/aegerter-1/u-boot/arch/arm/lib/reset.c:42: undefined reference to `reset_cpu'
Define reset_cpu() also outside of SPL.
Signed-off-by: Andreas Aegerter andreas.aegerter@mt.com --- board/toradex/colibri_imx6/colibri_imx6.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/board/toradex/colibri_imx6/colibri_imx6.c b/board/toradex/colibri_imx6/colibri_imx6.c index 65e0e9a156..dcae1c7280 100644 --- a/board/toradex/colibri_imx6/colibri_imx6.c +++ b/board/toradex/colibri_imx6/colibri_imx6.c @@ -1116,12 +1116,12 @@ int board_fit_config_name_match(const char *name) } #endif
+#endif /* CONFIG_SPL_BUILD */ + void reset_cpu(void) { }
-#endif /* CONFIG_SPL_BUILD */ - static struct mxc_serial_plat mxc_serial_plat = { .reg = (struct mxc_uart *)UART1_BASE, .use_dte = true,

This config is based on colibri_imx6_defconfig and enables additionally the watchdog. The intend of the new config is that distros can use this in the future and the behaviour will not be changed for current users.
However I am not sure if it would be OK, to just enable the watchdog in the existing colibri_imx6_defconfig. Any suggestions?
Signed-off-by: Andreas Aegerter andreas.aegerter@mt.com --- board/toradex/colibri_imx6/MAINTAINERS | 4 + configs/colibri_imx6_wdg_defconfig | 124 +++++++++++++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 configs/colibri_imx6_wdg_defconfig
diff --git a/board/toradex/colibri_imx6/MAINTAINERS b/board/toradex/colibri_imx6/MAINTAINERS index f7a5ad59f8..631d819f0b 100644 --- a/board/toradex/colibri_imx6/MAINTAINERS +++ b/board/toradex/colibri_imx6/MAINTAINERS @@ -9,3 +9,7 @@ F: configs/colibri_imx6_defconfig F: arch/arm/dts/imx6dl-colibri-eval-v3.dts F: arch/arm/dts/imx6dl-colibri-eval-v3-u-boot.dtsi F: arch/arm/dts/imx6qdl-colibri.dtsi + +M: Andreas Aegerter andreas.aegerter@mt.com +S: Maintained +F: configs/colibri_imx6_wdg_defconfig diff --git a/configs/colibri_imx6_wdg_defconfig b/configs/colibri_imx6_wdg_defconfig new file mode 100644 index 0000000000..3ba6e2ea8a --- /dev/null +++ b/configs/colibri_imx6_wdg_defconfig @@ -0,0 +1,124 @@ +CONFIG_ARM=y +CONFIG_ARCH_MX6=y +CONFIG_TEXT_BASE=0x17800000 +CONFIG_SYS_MALLOC_LEN=0x2000000 +CONFIG_SPL_GPIO=y +CONFIG_SPL_LIBCOMMON_SUPPORT=y +CONFIG_SPL_LIBGENERIC_SUPPORT=y +CONFIG_NR_DRAM_BANKS=1 +CONFIG_ENV_SIZE=0x2000 +CONFIG_ENV_OFFSET=0xFFFFDE00 +CONFIG_MX6DL=y +CONFIG_MX6_DDRCAL=y +CONFIG_TARGET_COLIBRI_IMX6=y +CONFIG_SYS_I2C_MXC_I2C1=y +CONFIG_SYS_I2C_MXC_I2C2=y +CONFIG_SYS_I2C_MXC_I2C3=y +CONFIG_DM_GPIO=y +CONFIG_DEFAULT_DEVICE_TREE="imx6dl-colibri-eval-v3" +CONFIG_SPL_TEXT_BASE=0x00908000 +CONFIG_SYS_PROMPT="Colibri iMX6 # " +CONFIG_SPL_MMC=y +CONFIG_SPL_SERIAL=y +CONFIG_SPL=y +CONFIG_CMD_HDMIDETECT=y +CONFIG_SYS_LOAD_ADDR=0x14200000 +CONFIG_SYS_MEMTEST_START=0x10000000 +CONFIG_SYS_MEMTEST_END=0x10010000 +CONFIG_DISTRO_DEFAULTS=y +CONFIG_SYS_MONITOR_LEN=409600 +CONFIG_FIT=y +CONFIG_FIT_VERBOSE=y +CONFIG_BOOTDELAY=1 +CONFIG_BOOTCOMMAND="run distro_bootcmd; usb start; setenv stdout serial,vidconsole; setenv stdin serial,usbkbd" +CONFIG_USE_PREBOOT=y +CONFIG_PREBOOT="test -n ${fdtfile} || setenv fdtfile imx6dl-colibri-${fdt_board}.dtb" +CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE=y +# CONFIG_DISPLAY_BOARDINFO is not set +CONFIG_DISPLAY_BOARDINFO_LATE=y +CONFIG_BOARD_EARLY_INIT_F=y +CONFIG_MISC_INIT_R=y +CONFIG_SYS_SPL_MALLOC=y +CONFIG_SPL_DMA=y +CONFIG_SPL_I2C=y +CONFIG_SPL_USB_HOST=y +CONFIG_SPL_USB_GADGET=y +CONFIG_SPL_USB_SDP_SUPPORT=y +CONFIG_SYS_MAXARGS=48 +CONFIG_SYS_CBSIZE=1024 +CONFIG_SYS_PBSIZE=1056 +# CONFIG_CMD_ELF is not set +# CONFIG_CMD_IMI is not set +# CONFIG_CMD_XIMG is not set +CONFIG_CMD_ASKENV=y +CONFIG_CRC32_VERIFY=y +CONFIG_CMD_MEMTEST=y +CONFIG_SYS_ALT_MEMTEST=y +CONFIG_CMD_GPIO=y +CONFIG_CMD_GPT=y +CONFIG_CMD_I2C=y +# CONFIG_CMD_LOADB is not set +# CONFIG_CMD_LOADS is not set +CONFIG_CMD_MMC=y +CONFIG_CMD_USB=y +CONFIG_CMD_USB_SDP=y +CONFIG_CMD_USB_MASS_STORAGE=y +# CONFIG_CMD_NFS is not set +CONFIG_CMD_BOOTCOUNT=y +CONFIG_CMD_CACHE=y +CONFIG_CMD_TIME=y +CONFIG_CMD_UUID=y +CONFIG_CMD_PMIC=y +CONFIG_CMD_REGULATOR=y +CONFIG_OF_CONTROL=y +CONFIG_ENV_OVERWRITE=y +CONFIG_ENV_IS_IN_MMC=y +CONFIG_SYS_RELOC_GD_ENV_ADDR=y +CONFIG_SYS_MMC_ENV_PART=1 +CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y +CONFIG_VERSION_VARIABLE=y +CONFIG_IP_DEFRAG=y +CONFIG_TFTP_BLOCKSIZE=16352 +CONFIG_USE_IPADDR=y +CONFIG_IPADDR="192.168.10.2" +CONFIG_USE_NETMASK=y +CONFIG_NETMASK="255.255.255.0" +CONFIG_USE_SERVERIP=y +CONFIG_SERVERIP="192.168.10.1" +CONFIG_BOUNCE_BUFFER=y +CONFIG_BOOTCOUNT_LIMIT=y +CONFIG_BOOTCOUNT_ENV=y +CONFIG_DM_I2C=y +CONFIG_SPL_SYS_I2C_LEGACY=y +CONFIG_SYS_I2C_MXC=y +CONFIG_SYS_MXC_I2C3_SPEED=400000 +CONFIG_SUPPORT_EMMC_BOOT=y +CONFIG_FSL_USDHC=y +CONFIG_PHYLIB=y +CONFIG_PHY_MICREL=y +CONFIG_PHY_MICREL_KSZ8XXX=y +CONFIG_FEC_MXC=y +CONFIG_MII=y +CONFIG_PINCTRL=y +CONFIG_PINCTRL_IMX6=y +CONFIG_DM_PMIC=y +CONFIG_DM_PMIC_PFUZE100=y +CONFIG_DM_REGULATOR=y +CONFIG_DM_REGULATOR_PFUZE100=y +CONFIG_DM_REGULATOR_FIXED=y +CONFIG_MXC_UART=y +CONFIG_IMX_THERMAL=y +CONFIG_USB=y +CONFIG_USB_MAX_CONTROLLER_COUNT=2 +CONFIG_USB_KEYBOARD=y +CONFIG_USB_HOST_ETHER=y +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_MANUFACTURER="Toradex" +CONFIG_USB_GADGET_VENDOR_NUM=0x1b67 +CONFIG_USB_GADGET_PRODUCT_NUM=0x4000 +CONFIG_CI_UDC=y +CONFIG_USB_GADGET_DOWNLOAD=y +CONFIG_OF_LIBFDT_OVERLAY=y +CONFIG_WATCHDOG=y +CONFIG_WDT=y +#CONFIG_IMX_WATCHDOG=y

On Fri, Mar 10, 2023 at 02:43:33PM +0100, Andreas Aegerter wrote:
This config is based on colibri_imx6_defconfig and enables additionally the watchdog. The intend of the new config is that distros can use this in the future and the behaviour will not be changed for current users.
IMO in general is a bad idea to duplicate a defconfig for the same board, you just duplicate the maintenance effort.
However I am not sure if it would be OK, to just enable the watchdog in the existing colibri_imx6_defconfig. Any suggestions?
I wonder what would be the implication of enabling it by default on the general defconfig.
What about using a debugger or kgdb from Linux? What is the watchdog timeout once you enable it? Can we be sure that the OS will be able to start in time to refresh the watchdog?
Francesco

Francesco Dolcini wrote:
On Fri, Mar 10, 2023 at 02:43:33PM +0100, Andreas Aegerter wrote:
This config is based on colibri_imx6_defconfig and enables additionally the watchdog. The intend of the new config is that distros can use this in the future and the behaviour will not be changed for
current users. IMO in general is a bad idea to duplicate a defconfig for the same board, you just duplicate the maintenance effort.
However I am not sure if it would be OK, to just enable the watchdog in the existing colibri_imx6_defconfig. Any suggestions?
I wonder what would be the implication of enabling it by default on the general defconfig.
One implication of this is that if the kernel does not support the watchdog and therefore does not reset it regularly, the system will reboot every 128 seconds. That's the main reason why I propose creating a new defconfig.
What about using a debugger or kgdb from Linux? What is the watchdog timeout once you enable it? Can we be sure that the OS will be able to start in time to refresh the watchdog?
Timeout is 128 seconds (default value if CONFIG_WATCHDOG_TIMEOUT_MSECS is not set). This should be enough to boot an embedded device. For debugger I recommend to use an u-boot image where the watchdog is not enabled.
Francesco
Andreas
participants (3)
-
Aegerter Andreas LCPF-CH
-
Andreas Aegerter
-
Francesco Dolcini