📄 board.c
字号:
bd->bi_iic_fast[1] = 0; } }#else bd->bi_iic_fast[0] = 0; bd->bi_iic_fast[1] = 0;#endif /* CONFIG_I2CFAST */#endif /* CONFIG_405GP, CONFIG_405EP */#endif /* CFG_EXTBDINFO */#if defined(CONFIG_SC3) sc3_read_eeprom();#endif#if defined (CFG_ID_EEPROM) || defined (CFG_I2C_MAC_OFFSET) mac_read_from_eeprom();#endif s = getenv ("ethaddr");#if defined (CONFIG_MBX) || \ defined (CONFIG_RPXCLASSIC) || \ defined(CONFIG_IAD210) || \ defined(CONFIG_V38B) if (s == NULL) board_get_enetaddr (bd->bi_enetaddr); else#endif for (i = 0; i < 6; ++i) { bd->bi_enetaddr[i] = s ? simple_strtoul (s, &e, 16) : 0; if (s) s = (*e) ? e + 1 : e; }#ifdef CONFIG_HERMES if ((gd->board_type >> 16) == 2) bd->bi_ethspeed = gd->board_type & 0xFFFF; else bd->bi_ethspeed = 0xFFFF;#endif#ifdef CONFIG_NX823 load_sernum_ethaddr ();#endif#ifdef CONFIG_HAS_ETH1 /* handle the 2nd ethernet address */ s = getenv ("eth1addr"); for (i = 0; i < 6; ++i) { bd->bi_enet1addr[i] = s ? simple_strtoul (s, &e, 16) : 0; if (s) s = (*e) ? e + 1 : e; }#endif#ifdef CONFIG_HAS_ETH2 /* handle the 3rd ethernet address */ s = getenv ("eth2addr");#if defined(CONFIG_XPEDITE1K) || defined(CONFIG_METROBOX) || defined(CONFIG_KAREF) if (s == NULL) board_get_enetaddr(bd->bi_enet2addr); else#endif for (i = 0; i < 6; ++i) { bd->bi_enet2addr[i] = s ? simple_strtoul (s, &e, 16) : 0; if (s) s = (*e) ? e + 1 : e; }#endif#ifdef CONFIG_HAS_ETH3 /* handle 4th ethernet address */ s = getenv("eth3addr");#if defined(CONFIG_XPEDITE1K) || defined(CONFIG_METROBOX) || defined(CONFIG_KAREF) if (s == NULL) board_get_enetaddr(bd->bi_enet3addr); else#endif for (i = 0; i < 6; ++i) { bd->bi_enet3addr[i] = s ? simple_strtoul (s, &e, 16) : 0; if (s) s = (*e) ? e + 1 : e; }#endif#if defined(CONFIG_TQM8xxL) || defined(CONFIG_TQM8260) || \ defined(CONFIG_TQM8272) || \ defined(CONFIG_CCM) || defined(CONFIG_KUP4K) || \ defined(CONFIG_KUP4X) || defined(CONFIG_PCS440EP) load_sernum_ethaddr ();#endif /* IP Address */ bd->bi_ip_addr = getenv_IPaddr ("ipaddr"); WATCHDOG_RESET ();#if defined(CONFIG_PCI) && !defined(CONFIG_BAB7xx) && !defined(CONFIG_CPC45) /* * Do pci configuration */ pci_init ();#endif/** leave this here (after malloc(), environment and PCI are working) **/ /* Initialize devices */ devices_init (); /* Initialize the jump table for applications */ jumptable_init ();#if defined(CONFIG_API) /* Initialize API */ api_init ();#endif /* Initialize the console (after the relocation and devices init) */ console_init_r ();#if defined(CONFIG_CCM) || \ defined(CONFIG_COGENT) || \ defined(CONFIG_CPCI405) || \ defined(CONFIG_EVB64260) || \ defined(CONFIG_KUP4K) || \ defined(CONFIG_KUP4X) || \ defined(CONFIG_LWMON) || \ defined(CONFIG_PCU_E) || \ defined(CONFIG_SC3) || \ defined(CONFIG_W7O) || \ defined(CONFIG_MISC_INIT_R) /* miscellaneous platform dependent initialisations */ misc_init_r ();#endif#ifdef CONFIG_HERMES if (bd->bi_ethspeed != 0xFFFF) hermes_start_lxt980 ((int) bd->bi_ethspeed);#endif#if defined(CONFIG_CMD_KGDB) WATCHDOG_RESET (); puts ("KGDB: "); kgdb_init ();#endif debug ("U-Boot relocated to %08lx\n", dest_addr); /* * Enable Interrupts */ interrupt_init (); /* Must happen after interrupts are initialized since * an irq handler gets installed */#ifdef CONFIG_SERIAL_SOFTWARE_FIFO serial_buffered_init();#endif#if defined(CONFIG_STATUS_LED) && defined(STATUS_LED_BOOT) status_led_set (STATUS_LED_BOOT, STATUS_LED_BLINKING);#endif udelay (20); set_timer (0); /* Initialize from environment */ if ((s = getenv ("loadaddr")) != NULL) { load_addr = simple_strtoul (s, NULL, 16); }#if defined(CONFIG_CMD_NET) if ((s = getenv ("bootfile")) != NULL) { copy_filename (BootFile, s, sizeof (BootFile)); }#endif WATCHDOG_RESET ();#if defined(CONFIG_CMD_SCSI) WATCHDOG_RESET (); puts ("SCSI: "); scsi_init ();#endif#if defined(CONFIG_CMD_DOC) WATCHDOG_RESET (); puts ("DOC: "); doc_init ();#endif#if defined(CONFIG_CMD_NET)#if defined(CONFIG_NET_MULTI) WATCHDOG_RESET (); puts ("Net: ");#endif eth_initialize (bd);#endif#if defined(CONFIG_CMD_NET) && ( \ defined(CONFIG_CCM) || \ defined(CONFIG_ELPT860) || \ defined(CONFIG_EP8260) || \ defined(CONFIG_IP860) || \ defined(CONFIG_IVML24) || \ defined(CONFIG_IVMS8) || \ defined(CONFIG_MPC8260ADS) || \ defined(CONFIG_MPC8266ADS) || \ defined(CONFIG_MPC8560ADS) || \ defined(CONFIG_PCU_E) || \ defined(CONFIG_RPXSUPER) || \ defined(CONFIG_STXGP3) || \ defined(CONFIG_SPD823TS) || \ defined(CONFIG_RESET_PHY_R) ) WATCHDOG_RESET (); debug ("Reset Ethernet PHY\n"); reset_phy ();#endif#ifdef CONFIG_POST post_run (NULL, POST_RAM | post_bootmode_get(0));#endif#if defined(CONFIG_CMD_PCMCIA) \ && !defined(CONFIG_CMD_IDE) WATCHDOG_RESET (); puts ("PCMCIA:"); pcmcia_init ();#endif#if defined(CONFIG_CMD_IDE) WATCHDOG_RESET ();# ifdef CONFIG_IDE_8xx_PCCARD puts ("PCMCIA:");# else puts ("IDE: ");#endif#if defined(CONFIG_START_IDE) if (board_start_ide()) ide_init ();#else ide_init ();#endif#endif#if defined(CONFIG_CMD_SATA) puts ("SATA: "); sata_initialize ();#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#if defined(CONFIG_CMD_BEDBUG) WATCHDOG_RESET (); bedbug_init ();#endif#if defined(CONFIG_PRAM) || defined(CONFIG_LOGBUFFER) /* * Export available size of memory for Linux, * taking into account the protected RAM at top of memory */ { ulong pram; uchar memsz[32];#ifdef CONFIG_PRAM char *s; if ((s = getenv ("pram")) != NULL) { pram = simple_strtoul (s, NULL, 10); } else { pram = CONFIG_PRAM; }#else pram=0;#endif#ifdef CONFIG_LOGBUFFER#ifndef CONFIG_ALT_LB_ADDR /* Also take the logbuffer into account (pram is in kB) */ pram += (LOGBUFF_LEN+LOGBUFF_OVERHEAD)/1024;#endif#endif sprintf ((char *)memsz, "%ldk", (bd->bi_memsize / 1024) - pram); setenv ("mem", (char *)memsz); }#endif#ifdef CONFIG_PS2KBD puts ("PS/2: "); kbd_init();#endif#ifdef CONFIG_MODEM_SUPPORT { extern int do_mdm_init; do_mdm_init = gd->do_mdm_init; }#endif /* Initialization complete - start the monitor */ /* main_loop() can return to retry autoboot, if so just run it again. */ for (;;) { WATCHDOG_RESET (); main_loop (); } /* NOTREACHED - no way out of command loop except booting */}void hang (void){ puts ("### ERROR ### Please RESET the board ###\n"); show_boot_progress(-30); for (;;);}#ifdef CONFIG_MODEM_SUPPORT/* called from main loop (common/main.c) *//* 'inline' - We have to do it fast */static inline void mdm_readline(char *buf, int bufsiz){ char c; char *p; int n; n = 0; p = buf; for(;;) { c = serial_getc(); /* dbg("(%c)", c); */ switch(c) { case '\r': break; case '\n': *p = '\0'; return; default: if(n++ > bufsiz) { *p = '\0'; return; /* sanity check */ } *p = c; p++; break; } }}extern void dbg(const char *fmt, ...);int mdm_init (void){ char env_str[16]; char *init_str; int i; extern char console_buffer[]; extern void enable_putc(void); extern int hwflow_onoff(int); enable_putc(); /* enable serial_putc() */#ifdef CONFIG_HWFLOW init_str = getenv("mdm_flow_control"); if (init_str && (strcmp(init_str, "rts/cts") == 0)) hwflow_onoff (1); else hwflow_onoff(-1);#endif for (i = 1;;i++) { sprintf(env_str, "mdm_init%d", i); if ((init_str = getenv(env_str)) != NULL) { serial_puts(init_str); serial_puts("\n"); for(;;) { mdm_readline(console_buffer, CFG_CBSIZE); dbg("ini%d: [%s]", i, console_buffer); if ((strcmp(console_buffer, "OK") == 0) || (strcmp(console_buffer, "ERROR") == 0)) { dbg("ini%d: cmd done", i); break; } else /* in case we are originating call ... */ if (strncmp(console_buffer, "CONNECT", 7) == 0) { dbg("ini%d: connect", i); return 0; } } } else break; /* no init string - stop modem init */ udelay(100000); } udelay(100000); /* final stage - wait for connect */ for(;i > 1;) { /* if 'i' > 1 - wait for connection message from modem */ mdm_readline(console_buffer, CFG_CBSIZE); dbg("ini_f: [%s]", console_buffer); if (strncmp(console_buffer, "CONNECT", 7) == 0) { dbg("ini_f: connected"); return 0; } } return 0;}#endif#if 0 /* We could use plain global data, but the resulting code is bigger *//* * Pointer to initial global data area * * Here we initialize it. */#undef XTRN_DECLARE_GLOBAL_DATA_PTR#define XTRN_DECLARE_GLOBAL_DATA_PTR /* empty = allocate here */DECLARE_GLOBAL_DATA_PTR = (gd_t *) (CFG_INIT_RAM_ADDR + CFG_GBL_DATA_OFFSET);#endif /* 0 *//************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -