1d2eae43bSAndreas Bießmann /* 2d2eae43bSAndreas Bießmann * (C) Copyright 2013 3*09c2b8f3SAndreas Bießmann * Andreas Bießmann <andreas@biessmann.org> 4d2eae43bSAndreas Bießmann * 5d2eae43bSAndreas Bießmann * This file consolidates all the different hang() functions implemented in 6d2eae43bSAndreas Bießmann * u-boot. 7d2eae43bSAndreas Bießmann * 81a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 9d2eae43bSAndreas Bießmann */ 10d2eae43bSAndreas Bießmann 11d2eae43bSAndreas Bießmann #include <common.h> 12d2eae43bSAndreas Bießmann #include <bootstage.h> 13d2eae43bSAndreas Bießmann 14d2eae43bSAndreas Bießmann /** 15d2eae43bSAndreas Bießmann * hang - stop processing by staying in an endless loop 16d2eae43bSAndreas Bießmann * 17d2eae43bSAndreas Bießmann * The purpose of this function is to stop further execution of code cause 18d2eae43bSAndreas Bießmann * something went completely wrong. To catch this and give some feedback to 19d2eae43bSAndreas Bießmann * the user one needs to catch the bootstage_error (see show_boot_progress()) 20d2eae43bSAndreas Bießmann * in the board code. 21d2eae43bSAndreas Bießmann */ 22d2eae43bSAndreas Bießmann void hang(void) 23d2eae43bSAndreas Bießmann { 24d2eae43bSAndreas Bießmann #if !defined(CONFIG_SPL_BUILD) || (defined(CONFIG_SPL_LIBCOMMON_SUPPORT) && \ 25d2eae43bSAndreas Bießmann defined(CONFIG_SPL_SERIAL_SUPPORT)) 26d2eae43bSAndreas Bießmann puts("### ERROR ### Please RESET the board ###\n"); 27d2eae43bSAndreas Bießmann #endif 28d2eae43bSAndreas Bießmann bootstage_error(BOOTSTAGE_ID_NEED_RESET); 29d2eae43bSAndreas Bießmann for (;;) 30d2eae43bSAndreas Bießmann ; 31d2eae43bSAndreas Bießmann } 32