From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?B?QW5kcmVhcyBCaWXDn21hbm4=?= Date: Tue, 16 Apr 2013 15:32:30 +0200 Subject: [U-Boot] [PATCH] make hang() a weak function In-Reply-To: <20130416130515.04A83200568@gemini.denx.de> References: <1366107249-24547-1-git-send-email-andreas.devel@googlemail.com> <20130416133621.40db0a42@lilith> <516D39CF.9020907@gmail.com> <20130416122229.BB9E0200568@gemini.denx.de> <516D4B00.9030102@gmail.com> <20130416130515.04A83200568@gemini.denx.de> Message-ID: <516D52EE.1040402@gmail.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Dear Wolfgang, On 04/16/2013 03:05 PM, Wolfgang Denk wrote: > Dear Andreas, > > In message <516D4B00.9030102@gmail.com> you wrote: >> >>> So it is dead code in mainline, and we will not add it. >> >> Well, I don't think it is dead code cause the hang() is called in some ways. >> This patch opens just the possibility to specialize the hang() by for >> example a specific board. Maybe this could also be used for specific >> hang() for different arches when we get closer to the common board files. > > I think it is dead code, and not needed nor useful in mainline. I > cannot even see how it would be useful for you. hang() is defined to > "hang" the CPU, i. e. to make sure the system will remain in the > current state. To me this naturally translates into an infinite loop, > the implementation of which is completely hardware and architecture > independent. Yes it is independent (or should at least). But there are still slightly different versions: ---8<--- arch/blackfin/lib/board.c:void hang(void) arch/blackfin/lib/board.c-{ arch/blackfin/lib/board.c-#ifdef CONFIG_STATUS_LED arch/blackfin/lib/board.c- status_led_set(STATUS_LED_BOOT, STATUS_LED_OFF); arch/blackfin/lib/board.c- status_led_set(STATUS_LED_CRASH, STATUS_LED_BLINKING); --->8--- ---8<--- arch/arm/lib/board.c:void __hang(void) arch/arm/lib/board.c-{ arch/arm/lib/board.c- puts("### ERROR ### Please RESET the board ###\n"); arch/arm/lib/board.c- for (;;); arch/arm/lib/board.c-} --->8--- ---8<--- arch/powerpc/lib/board.c:void __hang(void) arch/powerpc/lib/board.c-{ arch/powerpc/lib/board.c- puts("### ERROR ### Please RESET the board ###\n"); arch/powerpc/lib/board.c- bootstage_error(BOOTSTAGE_ID_NEED_RESET); arch/powerpc/lib/board.c- for (;;) --->8--- > Note that hang() is not supposed to do anything else, it just hangs > the system. If you have a debugger attached, you will be able to do a > simple stack backtrace and see exactly where you are hanging, and why. Well, for this specific board I plan to panic() on wrong hardware detection (which will in turn call hang()). My requirements say that I have to visualize this state then, I thought it would be a good idea to blink some lights in the endless loop in hang() for this specific board. > If you think you need to have specialized code, you are doing > something wrong. Really? How would you solve this requirement? Best regards Andreas Bie?mann