mirror of
https://git.codelinaro.org/clo/qsdk/oss/boot/u-boot-2016.git
synced 2026-02-22 20:24:27 +01:00
Hardware: CM-FX6 Module from Compulab
This patch fixes unwanted watchdog resets while the user enters
a command at the U-Boot prompt.
As found on the CM-FX6 board from Compulab, when having enabled the
watchdog, a missing WATCHDOG_RESET call in common/console.c causes
this and alike boards to reset when the watchdog's timeout has
elapsed while waiting at the U-Boot prompt.
Despite the user could press several keys within the watchdog
timeout limit, the while loop in cli_readline.c, line 261, does only
call WATCHDOG_RESET if first == 1, which gets set to 0 in the 1st
loop iteration. This leads to a watchdog timeout no matter if the
user presses keys or not.
Although, this affects other boards as well as it touches
common/console.c, the macro WATCHDOG_RESET expands to {} if watchdog
support isn't configured. Hence, there's no harm caused and no need to
surround it by #ifdef in this case.
* Symptom:
U-Boot resets after watchdog times out when in commandline prompt
and watchdog is enabled.
* Reasoning:
When U-Boot shows the commandline prompt, the following function
call stack is executed while waiting for a keypress:
common/main.c:
main_loop => common/cli.c: cli_loop() =>
common/cli_hush.c:
parse_file_outer => parse_stream_outer =>
parse_stream => b_getch(i) =>
i->get(i) => file_get =>
get_user_input => cmdedit_read_input =>
uboot_cli_readline =>
common/cli_readline.c:
cli_readline => cli_readline_into_buffer =>
cread_line => getcmd_getch (== getc) =>
common/console.c:
fgetc => console_tstc
common/console.c:
(with CONFIG_CONSOLE_MUX is set)
- in console_tstc line 181:
If dev->tstc(dev) returns 0, the global tstcdev variable doesn't get
set. This is the case if no character is in the serial buffer.
- in fgetc(int file), line 297:
Program flow keeps looping because tstcdev does not get set.
Therefore WATCHDOG_RESET is not called, as mx_serial_tstc from
drivers/serial/serial_mxc.c does not call it.
* Solution:
Add WATCHDOG_RESET into the loop of console_tstc.
Note: Macro expands to {} if not configured, so no #ifdef is needed.
* Comment:
Signed-off-by: Christian Storm <christian.storm@tngtech.com>
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Andreas J. Reichel <Andreas.Reichel@tngtech.com>
Acked-by: Simon Glass <sjg@chromium.org>
|
||
|---|---|---|
| .. | ||
| eeprom | ||
| init | ||
| spl | ||
| autoboot.c | ||
| bedbug.c | ||
| board_f.c | ||
| board_info.c | ||
| board_r.c | ||
| bootm.c | ||
| bootm_os.c | ||
| bootretry.c | ||
| bootstage.c | ||
| bouncebuf.c | ||
| cli.c | ||
| cli_hush.c | ||
| cli_readline.c | ||
| cli_simple.c | ||
| command.c | ||
| console.c | ||
| cros_ec.c | ||
| ddr_spd.c | ||
| dfu.c | ||
| dlmalloc.c | ||
| dlmalloc.src | ||
| edid.c | ||
| env_attr.c | ||
| env_callback.c | ||
| env_common.c | ||
| env_dataflash.c | ||
| env_eeprom.c | ||
| env_embedded.c | ||
| env_ext4.c | ||
| env_fat.c | ||
| env_flags.c | ||
| env_flash.c | ||
| env_mmc.c | ||
| env_nand.c | ||
| env_nowhere.c | ||
| env_nvram.c | ||
| env_onenand.c | ||
| env_remote.c | ||
| env_sata.c | ||
| env_sf.c | ||
| env_ubi.c | ||
| exports.c | ||
| fb_mmc.c | ||
| fb_nand.c | ||
| fdt_support.c | ||
| flash.c | ||
| hash.c | ||
| hwconfig.c | ||
| ide.c | ||
| image-android.c | ||
| image-fdt.c | ||
| image-fit.c | ||
| image-sig.c | ||
| image-sparse.c | ||
| image.c | ||
| iomux.c | ||
| iotrace.c | ||
| kallsyms.c | ||
| Kconfig | ||
| kgdb.c | ||
| kgdb_stubs.c | ||
| lcd.c | ||
| lcd_console.c | ||
| lcd_console_rotation.c | ||
| lcd_simplefb.c | ||
| lynxkdi.c | ||
| main.c | ||
| Makefile | ||
| malloc_simple.c | ||
| memsize.c | ||
| menu.c | ||
| miiphyutil.c | ||
| s_record.c | ||
| sata.c | ||
| scsi.c | ||
| splash.c | ||
| splash_source.c | ||
| stdio.c | ||
| system_map.c | ||
| update.c | ||
| usb.c | ||
| usb_hub.c | ||
| usb_kbd.c | ||
| usb_storage.c | ||
| xyzModem.c | ||