1d2eae43bSAndreas Bießmann /* 2d2eae43bSAndreas Bießmann * (C) Copyright 2013 309c2b8f3SAndreas 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 14*e663d2b5SJason Zhu #ifdef CONFIG_SPL_BUILD spl_hang_reset(void)15*e663d2b5SJason Zhu__weak void spl_hang_reset(void) {} 16*e663d2b5SJason Zhu #endif 17d2eae43bSAndreas Bießmann /** 18d2eae43bSAndreas Bießmann * hang - stop processing by staying in an endless loop 19d2eae43bSAndreas Bießmann * 20d2eae43bSAndreas Bießmann * The purpose of this function is to stop further execution of code cause 21d2eae43bSAndreas Bießmann * something went completely wrong. To catch this and give some feedback to 22d2eae43bSAndreas Bießmann * the user one needs to catch the bootstage_error (see show_boot_progress()) 23d2eae43bSAndreas Bießmann * in the board code. 24d2eae43bSAndreas Bießmann */ hang(void)25d2eae43bSAndreas Bießmannvoid hang(void) 26d2eae43bSAndreas Bießmann { 27d2eae43bSAndreas Bießmann #if !defined(CONFIG_SPL_BUILD) || (defined(CONFIG_SPL_LIBCOMMON_SUPPORT) && \ 28d2eae43bSAndreas Bießmann defined(CONFIG_SPL_SERIAL_SUPPORT)) 29d2eae43bSAndreas Bießmann puts("### ERROR ### Please RESET the board ###\n"); 30d2eae43bSAndreas Bießmann #endif 31d2eae43bSAndreas Bießmann bootstage_error(BOOTSTAGE_ID_NEED_RESET); 32*e663d2b5SJason Zhu #ifdef CONFIG_SPL_BUILD 33*e663d2b5SJason Zhu spl_hang_reset(); 34*e663d2b5SJason Zhu #endif 35d2eae43bSAndreas Bießmann for (;;) 36d2eae43bSAndreas Bießmann ; 37d2eae43bSAndreas Bießmann } 38