mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 02:15:45 +01:00 
			
		
		
		
	Blackfin: add os log functions
Part of the mini Blackfin ABI with operating systems is that they can use 0x4f0-0x4f8 to pass log buffers to/from bootloaders. So add support to U-Boot for reading the log buffer. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
		| @@ -17,7 +17,7 @@ EXTRA    := | |||||||
| CEXTRA   := initcode.o | CEXTRA   := initcode.o | ||||||
| SEXTRA   := start.o | SEXTRA   := start.o | ||||||
| SOBJS    := interrupt.o cache.o | SOBJS    := interrupt.o cache.o | ||||||
| COBJS-y  := cpu.o traps.o interrupts.o reset.o serial.o watchdog.o | COBJS-y  := cpu.o traps.o interrupts.o os_log.o reset.o serial.o watchdog.o | ||||||
| COBJS-$(CONFIG_JTAG_CONSOLE) += jtag-console.o | COBJS-$(CONFIG_JTAG_CONSOLE) += jtag-console.o | ||||||
|  |  | ||||||
| ifeq ($(CONFIG_BFIN_BOOT_MODE),BFIN_BOOT_BYPASS) | ifeq ($(CONFIG_BFIN_BOOT_MODE),BFIN_BOOT_BYPASS) | ||||||
|   | |||||||
							
								
								
									
										30
									
								
								cpu/blackfin/os_log.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								cpu/blackfin/os_log.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | |||||||
|  | /* | ||||||
|  |  * functions for handling OS log buffer | ||||||
|  |  * | ||||||
|  |  * Copyright (c) 2009 Analog Devices Inc. | ||||||
|  |  * | ||||||
|  |  * Licensed under the 2-clause BSD. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #include <common.h> | ||||||
|  |  | ||||||
|  | #define OS_LOG_MAGIC       0xDEADBEEF | ||||||
|  | #define OS_LOG_MAGIC_ADDR  ((unsigned long *)0x4f0) | ||||||
|  | #define OS_LOG_PTR_ADDR    ((char **)0x4f4) | ||||||
|  |  | ||||||
|  | bool bfin_os_log_check(void) | ||||||
|  | { | ||||||
|  | 	if (*OS_LOG_MAGIC_ADDR != OS_LOG_MAGIC) | ||||||
|  | 		return false; | ||||||
|  | 	*OS_LOG_MAGIC_ADDR = 0; | ||||||
|  | 	return true; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void bfin_os_log_dump(void) | ||||||
|  | { | ||||||
|  | 	char *log = *OS_LOG_PTR_ADDR; | ||||||
|  | 	while (*log) { | ||||||
|  | 		puts(log); | ||||||
|  | 		log += strlen(log) + 1; | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @@ -61,6 +61,9 @@ extern u_long get_sclk(void); | |||||||
|  |  | ||||||
| # define bfin_revid() (*pCHIPID >> 28) | # define bfin_revid() (*pCHIPID >> 28) | ||||||
|  |  | ||||||
|  | extern bool bfin_os_log_check(void); | ||||||
|  | extern void bfin_os_log_dump(void); | ||||||
|  |  | ||||||
| extern void blackfin_icache_flush_range(const void *, const void *); | extern void blackfin_icache_flush_range(const void *, const void *); | ||||||
| extern void blackfin_dcache_flush_range(const void *, const void *); | extern void blackfin_dcache_flush_range(const void *, const void *); | ||||||
| extern void blackfin_icache_dcache_flush_range(const void *, const void *); | extern void blackfin_icache_dcache_flush_range(const void *, const void *); | ||||||
|   | |||||||
| @@ -384,6 +384,12 @@ void board_init_r(gd_t * id, ulong dest_addr) | |||||||
| 		post_run(NULL, POST_RAM | post_bootmode_get(0)); | 		post_run(NULL, POST_RAM | post_bootmode_get(0)); | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | 	if (bfin_os_log_check()) { | ||||||
|  | 		puts("\nLog buffer from operating system:\n"); | ||||||
|  | 		bfin_os_log_dump(); | ||||||
|  | 		puts("\n"); | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	/* main_loop() can return to retry autoboot, if so just run it again. */ | 	/* main_loop() can return to retry autoboot, if so just run it again. */ | ||||||
| 	for (;;) | 	for (;;) | ||||||
| 		main_loop(); | 		main_loop(); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user