mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 02:15:45 +01:00 
			
		
		
		
	x86: Split init functions out of board.c
This patch moves towards reducing board.c to simply a set of init cores for the three initialisation phases (Flash, Flash/RAM, and RAM), a set of three init function arrays and a init function array processing function
This commit is contained in:
		
							
								
								
									
										39
									
								
								arch/x86/include/asm/init_helpers.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								arch/x86/include/asm/init_helpers.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | |||||||
|  | /* | ||||||
|  |  * (C) Copyright 2011 | ||||||
|  |  * Graeme Russ, <graeme.russ@gmail.com> | ||||||
|  |  * | ||||||
|  |  * See file CREDITS for list of people who contributed to this | ||||||
|  |  * project. | ||||||
|  |  * | ||||||
|  |  * This program is free software; you can redistribute it and/or | ||||||
|  |  * modify it under the terms of the GNU General Public License as | ||||||
|  |  * published by the Free Software Foundation; either version 2 of | ||||||
|  |  * the License, or (at your option) any later version. | ||||||
|  |  * | ||||||
|  |  * This program is distributed in the hope that it will be useful, | ||||||
|  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |  * GNU General Public License for more details. | ||||||
|  |  * | ||||||
|  |  * You should have received a copy of the GNU General Public License | ||||||
|  |  * along with this program; if not, write to the Free Software | ||||||
|  |  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, | ||||||
|  |  * MA 02111-1307 USA | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #ifndef _INIT_HELPERS_H_ | ||||||
|  | #define _INIT_HELPERS_H_ | ||||||
|  |  | ||||||
|  | int display_banner(void); | ||||||
|  | int display_dram_config(void); | ||||||
|  | int init_baudrate_f(void); | ||||||
|  |  | ||||||
|  | int mem_malloc_init_r(void); | ||||||
|  | int init_bd_struct_r(void); | ||||||
|  | int flash_init_r(void); | ||||||
|  | int init_ip_address_r(void); | ||||||
|  | int status_led_set_r(void); | ||||||
|  | int set_bootfile_r(void); | ||||||
|  | int set_load_addr_r(void); | ||||||
|  |  | ||||||
|  | #endif	/* !_INIT_HELPERS_H_ */ | ||||||
							
								
								
									
										42
									
								
								arch/x86/include/asm/init_wrappers.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								arch/x86/include/asm/init_wrappers.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | |||||||
|  | /* | ||||||
|  |  * (C) Copyright 2011 | ||||||
|  |  * Graeme Russ, <graeme.russ@gmail.com> | ||||||
|  |  * | ||||||
|  |  * See file CREDITS for list of people who contributed to this | ||||||
|  |  * project. | ||||||
|  |  * | ||||||
|  |  * This program is free software; you can redistribute it and/or | ||||||
|  |  * modify it under the terms of the GNU General Public License as | ||||||
|  |  * published by the Free Software Foundation; either version 2 of | ||||||
|  |  * the License, or (at your option) any later version. | ||||||
|  |  * | ||||||
|  |  * This program is distributed in the hope that it will be useful, | ||||||
|  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |  * GNU General Public License for more details. | ||||||
|  |  * | ||||||
|  |  * You should have received a copy of the GNU General Public License | ||||||
|  |  * along with this program; if not, write to the Free Software | ||||||
|  |  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, | ||||||
|  |  * MA 02111-1307 USA | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #ifndef _INIT_WRAPPERS_H_ | ||||||
|  | #define _INIT_WRAPPERS_H_ | ||||||
|  |  | ||||||
|  | int serial_initialize_r(void); | ||||||
|  | int env_relocate_r(void); | ||||||
|  | int pci_init_r(void); | ||||||
|  | int jumptable_init_r(void); | ||||||
|  | int pcmcia_init_r(void); | ||||||
|  | int kgdb_init_r(void); | ||||||
|  | int enable_interrupts_r(void); | ||||||
|  | int eth_initialize_r(void); | ||||||
|  | int reset_phy_r(void); | ||||||
|  | int ide_init_r(void); | ||||||
|  | int scsi_init_r(void); | ||||||
|  | int doc_init_r(void); | ||||||
|  | int bb_miiphy_init_r(void); | ||||||
|  | int post_run_r(void); | ||||||
|  |  | ||||||
|  | #endif	/* !_INIT_WRAPPERS_H_ */ | ||||||
| @@ -34,6 +34,8 @@ COBJS-y	+= board.o | |||||||
| COBJS-y	+= bootm.o | COBJS-y	+= bootm.o | ||||||
| COBJS-y	+= cmd_boot.o | COBJS-y	+= cmd_boot.o | ||||||
| COBJS-y	+= gcc.o | COBJS-y	+= gcc.o | ||||||
|  | COBJS-y	+= init_helpers.o | ||||||
|  | COBJS-y	+= init_wrappers.o | ||||||
| COBJS-y	+= interrupts.o | COBJS-y	+= interrupts.o | ||||||
| COBJS-$(CONFIG_SYS_PCAT_INTERRUPTS) += pcat_interrupts.o | COBJS-$(CONFIG_SYS_PCAT_INTERRUPTS) += pcat_interrupts.o | ||||||
| COBJS-$(CONFIG_SYS_GENERIC_TIMER) += pcat_timer.o | COBJS-$(CONFIG_SYS_GENERIC_TIMER) += pcat_timer.o | ||||||
|   | |||||||
| @@ -33,62 +33,12 @@ | |||||||
|  |  | ||||||
| #include <common.h> | #include <common.h> | ||||||
| #include <watchdog.h> | #include <watchdog.h> | ||||||
| #include <command.h> |  | ||||||
| #include <stdio_dev.h> | #include <stdio_dev.h> | ||||||
| #include <version.h> |  | ||||||
| #include <malloc.h> |  | ||||||
| #include <net.h> |  | ||||||
| #include <ide.h> |  | ||||||
| #include <serial.h> |  | ||||||
| #include <asm/u-boot-x86.h> | #include <asm/u-boot-x86.h> | ||||||
| #include <asm/processor.h> | #include <asm/processor.h> | ||||||
|  |  | ||||||
| #ifdef CONFIG_BITBANGMII | #include <asm/init_helpers.h> | ||||||
| #include <miiphy.h> | #include <asm/init_wrappers.h> | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /************************************************************************ |  | ||||||
|  * Init Utilities							* |  | ||||||
|  ************************************************************************ |  | ||||||
|  * Some of this code should be moved into the core functions, |  | ||||||
|  * or dropped completely, |  | ||||||
|  * but let's get it working (again) first... |  | ||||||
|  */ |  | ||||||
| static int init_baudrate(void) |  | ||||||
| { |  | ||||||
| 	gd->baudrate = getenv_ulong("baudrate", 10, CONFIG_BAUDRATE); |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static int display_banner(void) |  | ||||||
| { |  | ||||||
|  |  | ||||||
| 	printf("\n\n%s\n\n", version_string); |  | ||||||
|  |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static int display_dram_config(void) |  | ||||||
| { |  | ||||||
| 	int i; |  | ||||||
|  |  | ||||||
| 	puts("DRAM Configuration:\n"); |  | ||||||
|  |  | ||||||
| 	for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) { |  | ||||||
| 		printf("Bank #%d: %08lx ", i, gd->bd->bi_dram[i].start); |  | ||||||
| 		print_size(gd->bd->bi_dram[i].size, "\n"); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| #ifndef CONFIG_SYS_NO_FLASH |  | ||||||
| static void display_flash_config(ulong size) |  | ||||||
| { |  | ||||||
| 	puts("Flash: "); |  | ||||||
| 	print_size(size, "\n"); |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * Breath some life into the board... |  * Breath some life into the board... | ||||||
| @@ -122,7 +72,7 @@ init_fnc_t *init_sequence_f[] = { | |||||||
| 	cpu_init_f, | 	cpu_init_f, | ||||||
| 	board_early_init_f, | 	board_early_init_f, | ||||||
| 	env_init, | 	env_init, | ||||||
| 	init_baudrate, | 	init_baudrate_f, | ||||||
| 	serial_init, | 	serial_init, | ||||||
| 	console_init_f, | 	console_init_f, | ||||||
| 	dram_init_f, | 	dram_init_f, | ||||||
| @@ -132,17 +82,81 @@ init_fnc_t *init_sequence_f[] = { | |||||||
| }; | }; | ||||||
|  |  | ||||||
| init_fnc_t *init_sequence_r[] = { | init_fnc_t *init_sequence_r[] = { | ||||||
| 	cpu_init_r,		/* basic cpu dependent setup */ | 	init_bd_struct_r, | ||||||
| 	board_early_init_r,	/* basic board dependent setup */ | 	mem_malloc_init_r, | ||||||
| 	dram_init,		/* configure available RAM banks */ | 	cpu_init_r, | ||||||
| 	interrupt_init,		/* set up exceptions */ | 	board_early_init_r, | ||||||
|  | 	dram_init, | ||||||
|  | 	interrupt_init, | ||||||
| 	timer_init, | 	timer_init, | ||||||
| 	display_banner, | 	display_banner, | ||||||
| 	display_dram_config, | 	display_dram_config, | ||||||
|  | #ifdef CONFIG_SERIAL_MULTI | ||||||
|  | 	serial_initialize_r, | ||||||
|  | #endif | ||||||
|  | #ifndef CONFIG_SYS_NO_FLASH | ||||||
|  | 	flash_init_r, | ||||||
|  | #endif | ||||||
|  | 	env_relocate_r, | ||||||
|  | #ifdef CONFIG_CMD_NET | ||||||
|  | 	init_ip_address_r, | ||||||
|  | #endif | ||||||
|  | #ifdef CONFIG_PCI | ||||||
|  | 	pci_init_r, | ||||||
|  | #endif | ||||||
|  | 	stdio_init, | ||||||
|  | 	jumptable_init_r, | ||||||
|  | 	console_init_r, | ||||||
|  | #ifdef CONFIG_MISC_INIT_R | ||||||
|  | 	misc_init_r, | ||||||
|  | #endif | ||||||
|  | #if defined(CONFIG_CMD_PCMCIA) && !defined(CONFIG_CMD_IDE) | ||||||
|  | 	pci_init_r, | ||||||
|  | #endif | ||||||
|  | #if defined(CONFIG_CMD_KGDB) | ||||||
|  | 	kgdb_init_r, | ||||||
|  | #endif | ||||||
|  | 	enable_interrupts_r, | ||||||
|  | #ifdef CONFIG_STATUS_LED | ||||||
|  | 	status_led_set_r, | ||||||
|  | #endif | ||||||
|  | 	set_load_addr_r, | ||||||
|  | #if defined(CONFIG_CMD_NET) | ||||||
|  | 	set_bootfile_r, | ||||||
|  | #endif | ||||||
|  | #if defined(CONFIG_CMD_IDE) | ||||||
|  | 	ide_init_r, | ||||||
|  | #endif | ||||||
|  | #if defined(CONFIG_CMD_SCSI) | ||||||
|  | 	scsi_init_r, | ||||||
|  | #endif | ||||||
|  | #if defined(CONFIG_CMD_DOC) | ||||||
|  | 	doc_init_r, | ||||||
|  | #endif | ||||||
|  | #ifdef CONFIG_BITBANGMII | ||||||
|  | 	bb_miiphy_init_r, | ||||||
|  | #endif | ||||||
|  | #if defined(CONFIG_CMD_NET) | ||||||
|  | 	eth_initialize_r, | ||||||
|  | #ifdef CONFIG_RESET_PHY_R | ||||||
|  | 	reset_phy_r, | ||||||
|  | #endif | ||||||
|  | #endif | ||||||
|  | #ifdef CONFIG_LAST_STAGE_INIT | ||||||
|  | 	last_stage_init, | ||||||
|  | #endif | ||||||
| 	NULL, | 	NULL, | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | static void do_init_loop(init_fnc_t **init_fnc_ptr) | ||||||
|  | { | ||||||
|  | 	for (; *init_fnc_ptr; ++init_fnc_ptr) { | ||||||
|  | 		WATCHDOG_RESET(); | ||||||
|  | 		if ((*init_fnc_ptr)() != 0) | ||||||
|  | 			hang(); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
| static int calculate_relocation_address(void) | static int calculate_relocation_address(void) | ||||||
| { | { | ||||||
| 	ulong text_start = (ulong)&__text_start; | 	ulong text_start = (ulong)&__text_start; | ||||||
| @@ -179,17 +193,12 @@ static int calculate_relocation_address(void) | |||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| /* Load U-Boot into RAM, initialize BSS, perform relocation adjustments */ | /* Perform all steps necessary to get RAM initialised ready for relocation */ | ||||||
| void board_init_f(ulong boot_flags) | void board_init_f(ulong boot_flags) | ||||||
| { | { | ||||||
| 	init_fnc_t **init_fnc_ptr; |  | ||||||
|  |  | ||||||
| 	gd->flags = boot_flags; | 	gd->flags = boot_flags; | ||||||
|  |  | ||||||
| 	for (init_fnc_ptr = init_sequence_f; *init_fnc_ptr; ++init_fnc_ptr) { | 	do_init_loop(init_sequence_f); | ||||||
| 		if ((*init_fnc_ptr)() != 0) |  | ||||||
| 			hang(); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	/* | 	/* | ||||||
| 	 * SDRAM is now initialised, U-Boot has been copied into SDRAM, | 	 * SDRAM is now initialised, U-Boot has been copied into SDRAM, | ||||||
| @@ -247,166 +256,12 @@ static int copy_gd_to_ram(void) | |||||||
|  |  | ||||||
| void board_init_r(gd_t *id, ulong dest_addr) | void board_init_r(gd_t *id, ulong dest_addr) | ||||||
| { | { | ||||||
| #if defined(CONFIG_CMD_NET) | 	gd->flags |= GD_FLG_RELOC; | ||||||
| 	char *s; |  | ||||||
| #endif |  | ||||||
| #ifndef CONFIG_SYS_NO_FLASH |  | ||||||
| 	ulong size; |  | ||||||
| #endif |  | ||||||
| 	static bd_t bd_data; |  | ||||||
| 	init_fnc_t **init_fnc_ptr; |  | ||||||
|  |  | ||||||
| 	show_boot_progress(0x21); |  | ||||||
|  |  | ||||||
| 	/* compiler optimization barrier needed for GCC >= 3.4 */ | 	/* compiler optimization barrier needed for GCC >= 3.4 */ | ||||||
| 	__asm__ __volatile__("" : : : "memory"); | 	__asm__ __volatile__("" : : : "memory"); | ||||||
|  |  | ||||||
| 	gd->flags |= GD_FLG_RELOC; | 	do_init_loop(init_sequence_r); | ||||||
|  |  | ||||||
| 	gd->bd = &bd_data; |  | ||||||
| 	memset(gd->bd, 0, sizeof(bd_t)); |  | ||||||
| 	show_boot_progress(0x22); |  | ||||||
|  |  | ||||||
| 	gd->baudrate =  CONFIG_BAUDRATE; |  | ||||||
|  |  | ||||||
| 	mem_malloc_init((((ulong)dest_addr - CONFIG_SYS_MALLOC_LEN)+3)&~3, |  | ||||||
| 			CONFIG_SYS_MALLOC_LEN); |  | ||||||
|  |  | ||||||
| 	for (init_fnc_ptr = init_sequence_r; *init_fnc_ptr; ++init_fnc_ptr) { |  | ||||||
| 		if ((*init_fnc_ptr)() != 0) |  | ||||||
| 			hang(); |  | ||||||
| 	} |  | ||||||
| 	show_boot_progress(0x23); |  | ||||||
|  |  | ||||||
| #ifdef CONFIG_SERIAL_MULTI |  | ||||||
| 	serial_initialize(); |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #ifndef CONFIG_SYS_NO_FLASH |  | ||||||
| 	/* configure available FLASH banks */ |  | ||||||
| 	size = flash_init(); |  | ||||||
| 	display_flash_config(size); |  | ||||||
| 	show_boot_progress(0x24); |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| 	show_boot_progress(0x25); |  | ||||||
|  |  | ||||||
| 	/* initialize environment */ |  | ||||||
| 	env_relocate(); |  | ||||||
| 	show_boot_progress(0x26); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef CONFIG_CMD_NET |  | ||||||
| 	/* IP Address */ |  | ||||||
| 	bd_data.bi_ip_addr = getenv_IPaddr("ipaddr"); |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #if defined(CONFIG_PCI) |  | ||||||
| 	/* |  | ||||||
| 	 * Do pci configuration |  | ||||||
| 	 */ |  | ||||||
| 	pci_init(); |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| 	show_boot_progress(0x27); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 	stdio_init(); |  | ||||||
|  |  | ||||||
| 	jumptable_init(); |  | ||||||
|  |  | ||||||
| 	/* Initialize the console (after the relocation and devices init) */ |  | ||||||
| 	console_init_r(); |  | ||||||
|  |  | ||||||
| #ifdef CONFIG_MISC_INIT_R |  | ||||||
| 	/* miscellaneous platform dependent initialisations */ |  | ||||||
| 	misc_init_r(); |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #if defined(CONFIG_CMD_PCMCIA) && !defined(CONFIG_CMD_IDE) |  | ||||||
| 	WATCHDOG_RESET(); |  | ||||||
| 	puts("PCMCIA:"); |  | ||||||
| 	pcmcia_init(); |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #if defined(CONFIG_CMD_KGDB) |  | ||||||
| 	WATCHDOG_RESET(); |  | ||||||
| 	puts("KGDB:  "); |  | ||||||
| 	kgdb_init(); |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| 	/* enable exceptions */ |  | ||||||
| 	enable_interrupts(); |  | ||||||
| 	show_boot_progress(0x28); |  | ||||||
|  |  | ||||||
| #ifdef CONFIG_STATUS_LED |  | ||||||
| 	status_led_set(STATUS_LED_BOOT, STATUS_LED_BLINKING); |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| 	udelay(20); |  | ||||||
|  |  | ||||||
| 	/* Initialize from environment */ |  | ||||||
| 	load_addr = getenv_ulong("loadaddr", 16, load_addr); |  | ||||||
| #if defined(CONFIG_CMD_NET) |  | ||||||
| 	s = getenv("bootfile"); |  | ||||||
|  |  | ||||||
| 	if (s != NULL) |  | ||||||
| 		copy_filename(BootFile, s, sizeof(BootFile)); |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| 	WATCHDOG_RESET(); |  | ||||||
|  |  | ||||||
| #if defined(CONFIG_CMD_IDE) |  | ||||||
| 	WATCHDOG_RESET(); |  | ||||||
| 	puts("IDE:   "); |  | ||||||
| 	ide_init(); |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #if defined(CONFIG_CMD_SCSI) |  | ||||||
| 	WATCHDOG_RESET(); |  | ||||||
| 	puts("SCSI:  "); |  | ||||||
| 	scsi_init(); |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #if defined(CONFIG_CMD_DOC) |  | ||||||
| 	WATCHDOG_RESET(); |  | ||||||
| 	puts("DOC:   "); |  | ||||||
| 	doc_init(); |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #ifdef CONFIG_BITBANGMII |  | ||||||
| 	bb_miiphy_init(); |  | ||||||
| #endif |  | ||||||
| #if defined(CONFIG_CMD_NET) |  | ||||||
| 	WATCHDOG_RESET(); |  | ||||||
| 	puts("Net:   "); |  | ||||||
| 	eth_initialize(gd->bd); |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #if (defined(CONFIG_CMD_NET)) && (0) |  | ||||||
| 	WATCHDOG_RESET(); |  | ||||||
| # ifdef DEBUG |  | ||||||
| 	puts("Reset Ethernet PHY\n"); |  | ||||||
| # endif |  | ||||||
| 	reset_phy(); |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #ifdef CONFIG_LAST_STAGE_INIT |  | ||||||
| 	WATCHDOG_RESET(); |  | ||||||
| 	/* |  | ||||||
| 	 * Some parts can be only initialized if all others (like |  | ||||||
| 	 * Interrupts) are up and running (i.e. the PC-style ISA |  | ||||||
| 	 * keyboard). |  | ||||||
| 	 */ |  | ||||||
| 	last_stage_init(); |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef CONFIG_POST |  | ||||||
| 	post_run(NULL, POST_RAM | post_bootmode_get(0)); |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| 	show_boot_progress(0x29); |  | ||||||
|  |  | ||||||
| 	/* 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 (;;) | ||||||
|   | |||||||
							
								
								
									
										142
									
								
								arch/x86/lib/init_helpers.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								arch/x86/lib/init_helpers.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,142 @@ | |||||||
|  | /* | ||||||
|  |  * (C) Copyright 2011 | ||||||
|  |  * Graeme Russ, <graeme.russ@gmail.com> | ||||||
|  |  * | ||||||
|  |  * See file CREDITS for list of people who contributed to this | ||||||
|  |  * project. | ||||||
|  |  * | ||||||
|  |  * This program is free software; you can redistribute it and/or | ||||||
|  |  * modify it under the terms of the GNU General Public License as | ||||||
|  |  * published by the Free Software Foundation; either version 2 of | ||||||
|  |  * the License, or (at your option) any later version. | ||||||
|  |  * | ||||||
|  |  * This program is distributed in the hope that it will be useful, | ||||||
|  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |  * GNU General Public License for more details. | ||||||
|  |  * | ||||||
|  |  * You should have received a copy of the GNU General Public License | ||||||
|  |  * along with this program; if not, write to the Free Software | ||||||
|  |  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, | ||||||
|  |  * MA 02111-1307 USA | ||||||
|  |  */ | ||||||
|  | #include <common.h> | ||||||
|  | #include <command.h> | ||||||
|  | #include <stdio_dev.h> | ||||||
|  | #include <version.h> | ||||||
|  | #include <malloc.h> | ||||||
|  | #include <net.h> | ||||||
|  | #include <ide.h> | ||||||
|  | #include <serial.h> | ||||||
|  | #include <status_led.h> | ||||||
|  | #include <asm/u-boot-x86.h> | ||||||
|  |  | ||||||
|  | #include <asm/init_helpers.h> | ||||||
|  |  | ||||||
|  | DECLARE_GLOBAL_DATA_PTR; | ||||||
|  |  | ||||||
|  | /************************************************************************ | ||||||
|  |  * Init Utilities							* | ||||||
|  |  ************************************************************************ | ||||||
|  |  * Some of this code should be moved into the core functions, | ||||||
|  |  * or dropped completely, | ||||||
|  |  * but let's get it working (again) first... | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | int display_banner(void) | ||||||
|  | { | ||||||
|  | 	printf("\n\n%s\n\n", version_string); | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int display_dram_config(void) | ||||||
|  | { | ||||||
|  | 	int i; | ||||||
|  |  | ||||||
|  | 	puts("DRAM Configuration:\n"); | ||||||
|  |  | ||||||
|  | 	for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) { | ||||||
|  | 		printf("Bank #%d: %08lx ", i, gd->bd->bi_dram[i].start); | ||||||
|  | 		print_size(gd->bd->bi_dram[i].size, "\n"); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int init_baudrate_f(void) | ||||||
|  | { | ||||||
|  | 	gd->baudrate = getenv_ulong("baudrate", 10, CONFIG_BAUDRATE); | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int mem_malloc_init_r(void) | ||||||
|  | { | ||||||
|  | 	mem_malloc_init(((gd->relocaddr - CONFIG_SYS_MALLOC_LEN)+3)&~3, | ||||||
|  | 			CONFIG_SYS_MALLOC_LEN); | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | bd_t bd_data; | ||||||
|  |  | ||||||
|  | int init_bd_struct_r(void) | ||||||
|  | { | ||||||
|  | 	gd->bd = &bd_data; | ||||||
|  | 	memset(gd->bd, 0, sizeof(bd_t)); | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #ifndef CONFIG_SYS_NO_FLASH | ||||||
|  | int flash_init_r(void) | ||||||
|  | { | ||||||
|  | 	ulong size; | ||||||
|  |  | ||||||
|  | 	puts("Flash: "); | ||||||
|  |  | ||||||
|  | 	/* configure available FLASH banks */ | ||||||
|  | 	size = flash_init(); | ||||||
|  |  | ||||||
|  | 	print_size(size, "\n"); | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | int init_ip_address_r(void) | ||||||
|  | { | ||||||
|  | 	/* IP Address */ | ||||||
|  | 	bd_data.bi_ip_addr = getenv_IPaddr("ipaddr"); | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #ifdef CONFIG_STATUS_LED | ||||||
|  | int status_led_set_r(void) | ||||||
|  | { | ||||||
|  | 	status_led_set(STATUS_LED_BOOT, STATUS_LED_BLINKING); | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | int set_bootfile_r(void) | ||||||
|  | { | ||||||
|  | 	char *s; | ||||||
|  |  | ||||||
|  | 	s = getenv("bootfile"); | ||||||
|  |  | ||||||
|  | 	if (s != NULL) | ||||||
|  | 		copy_filename(BootFile, s, sizeof(BootFile)); | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int set_load_addr_r(void) | ||||||
|  | { | ||||||
|  | 	/* Initialize from environment */ | ||||||
|  | 	load_addr = getenv_ulong("loadaddr", 16, load_addr); | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
							
								
								
									
										137
									
								
								arch/x86/lib/init_wrappers.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										137
									
								
								arch/x86/lib/init_wrappers.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,137 @@ | |||||||
|  | /* | ||||||
|  |  * (C) Copyright 2011 | ||||||
|  |  * Graeme Russ, <graeme.russ@gmail.com> | ||||||
|  |  * | ||||||
|  |  * See file CREDITS for list of people who contributed to this | ||||||
|  |  * project. | ||||||
|  |  * | ||||||
|  |  * This program is free software; you can redistribute it and/or | ||||||
|  |  * modify it under the terms of the GNU General Public License as | ||||||
|  |  * published by the Free Software Foundation; either version 2 of | ||||||
|  |  * the License, or (at your option) any later version. | ||||||
|  |  * | ||||||
|  |  * This program is distributed in the hope that it will be useful, | ||||||
|  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |  * GNU General Public License for more details. | ||||||
|  |  * | ||||||
|  |  * You should have received a copy of the GNU General Public License | ||||||
|  |  * along with this program; if not, write to the Free Software | ||||||
|  |  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, | ||||||
|  |  * MA 02111-1307 USA | ||||||
|  |  */ | ||||||
|  | #include <common.h> | ||||||
|  | #include <serial.h> | ||||||
|  | #include <kgdb.h> | ||||||
|  | #include <scsi.h> | ||||||
|  | #include <post.h> | ||||||
|  | #include <miiphy.h> | ||||||
|  |  | ||||||
|  | #include <asm/init_wrappers.h> | ||||||
|  |  | ||||||
|  | int serial_initialize_r(void) | ||||||
|  | { | ||||||
|  | 	serial_initialize(); | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int env_relocate_r(void) | ||||||
|  | { | ||||||
|  | 	/* initialize environment */ | ||||||
|  | 	env_relocate(); | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | int pci_init_r(void) | ||||||
|  | { | ||||||
|  | 	/* Do pci configuration */ | ||||||
|  | 	pci_init(); | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int jumptable_init_r(void) | ||||||
|  | { | ||||||
|  | 	jumptable_init(); | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int pcmcia_init_r(void) | ||||||
|  | { | ||||||
|  | 	puts("PCMCIA:"); | ||||||
|  | 	pcmcia_init(); | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int kgdb_init_r(void) | ||||||
|  | { | ||||||
|  | 	puts("KGDB:  "); | ||||||
|  | 	kgdb_init(); | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int enable_interrupts_r(void) | ||||||
|  | { | ||||||
|  | 	/* enable exceptions */ | ||||||
|  | 	enable_interrupts(); | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int eth_initialize_r(void) | ||||||
|  | { | ||||||
|  | 	puts("Net:   "); | ||||||
|  | 	eth_initialize(gd->bd); | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int reset_phy_r(void) | ||||||
|  | { | ||||||
|  | #ifdef DEBUG | ||||||
|  | 	puts("Reset Ethernet PHY\n"); | ||||||
|  | #endif | ||||||
|  | 	reset_phy(); | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int ide_init_r(void) | ||||||
|  | { | ||||||
|  | 	puts("IDE:   "); | ||||||
|  | 	ide_init(); | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int scsi_init_r(void) | ||||||
|  | { | ||||||
|  | 	puts("SCSI:  "); | ||||||
|  | 	scsi_init(); | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #ifdef CONFIG_BITBANGMII | ||||||
|  | int bb_miiphy_init_r(void) | ||||||
|  | { | ||||||
|  | 	bb_miiphy_init(); | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #ifdef CONFIG_POST | ||||||
|  | int post_run_r(void) | ||||||
|  | { | ||||||
|  | 	post_run(NULL, POST_RAM | post_bootmode_get(0)); | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | #endif | ||||||
		Reference in New Issue
	
	Block a user