1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24#include <common.h>
25#include <watchdog.h>
26#include <command.h>
27#include <malloc.h>
28#include <stdio_dev.h>
29#ifdef CONFIG_8xx
30#include <mpc8xx.h>
31#endif
32#ifdef CONFIG_5xx
33#include <mpc5xx.h>
34#endif
35#ifdef CONFIG_MPC5xxx
36#include <mpc5xxx.h>
37#endif
38#if defined(CONFIG_CMD_IDE)
39#include <ide.h>
40#endif
41#if defined(CONFIG_CMD_SCSI)
42#include <scsi.h>
43#endif
44#if defined(CONFIG_CMD_KGDB)
45#include <kgdb.h>
46#endif
47#ifdef CONFIG_STATUS_LED
48#include <status_led.h>
49#endif
50#include <net.h>
51#ifdef CONFIG_GENERIC_MMC
52#include <mmc.h>
53#endif
54#include <serial.h>
55#ifdef CONFIG_SYS_ALLOC_DPRAM
56#if !defined(CONFIG_CPM2)
57#include <commproc.h>
58#endif
59#endif
60#include <version.h>
61#if defined(CONFIG_BAB7xx)
62#include <w83c553f.h>
63#endif
64#include <dtt.h>
65#if defined(CONFIG_POST)
66#include <post.h>
67#endif
68#if defined(CONFIG_LOGBUFFER)
69#include <logbuff.h>
70#endif
71#if defined(CONFIG_SYS_INIT_RAM_LOCK) && defined(CONFIG_E500)
72#include <asm/cache.h>
73#endif
74#ifdef CONFIG_PS2KBD
75#include <keyboard.h>
76#endif
77
78#ifdef CONFIG_ADDR_MAP
79#include <asm/mmu.h>
80#endif
81
82#ifdef CONFIG_MP
83#include <asm/mp.h>
84#endif
85
86#ifdef CONFIG_BITBANGMII
87#include <miiphy.h>
88#endif
89
90#ifdef CONFIG_SYS_UPDATE_FLASH_SIZE
91extern int update_flash_size(int flash_size);
92#endif
93
94#if defined(CONFIG_SC3)
95extern void sc3_read_eeprom(void);
96#endif
97
98#if defined(CONFIG_CMD_DOC)
99void doc_init(void);
100#endif
101#if defined(CONFIG_HARD_I2C) || \
102 defined(CONFIG_SOFT_I2C)
103#include <i2c.h>
104#endif
105#include <spi.h>
106#include <nand.h>
107
108static char *failed = "*** failed ***\n";
109
110#if defined(CONFIG_OXC) || defined(CONFIG_RMU)
111extern flash_info_t flash_info[];
112#endif
113
114#if defined(CONFIG_START_IDE)
115extern int board_start_ide(void);
116#endif
117#include <environment.h>
118
119DECLARE_GLOBAL_DATA_PTR;
120
121#if !defined(CONFIG_SYS_MEM_TOP_HIDE)
122#define CONFIG_SYS_MEM_TOP_HIDE 0
123#endif
124
125extern ulong __init_end;
126extern ulong __bss_end__;
127ulong monitor_flash_len;
128
129#if defined(CONFIG_CMD_BEDBUG)
130#include <bedbug/type.h>
131#endif
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149typedef int (init_fnc_t)(void);
150
151
152
153
154
155
156
157
158static int init_baudrate(void)
159{
160 gd->baudrate = getenv_ulong("baudrate", 10, CONFIG_BAUDRATE);
161 return 0;
162}
163
164
165
166void __board_add_ram_info(int use_default)
167{
168
169}
170
171void board_add_ram_info(int)
172 __attribute__ ((weak, alias("__board_add_ram_info")));
173
174int __board_flash_wp_on(void)
175{
176
177
178
179
180
181 return 0;
182}
183
184int board_flash_wp_on(void)
185 __attribute__ ((weak, alias("__board_flash_wp_on")));
186
187void __cpu_secondary_init_r(void)
188{
189}
190
191void cpu_secondary_init_r(void)
192 __attribute__ ((weak, alias("__cpu_secondary_init_r")));
193
194static int init_func_ram(void)
195{
196#ifdef CONFIG_BOARD_TYPES
197 int board_type = gd->board_type;
198#else
199 int board_type = 0;
200#endif
201 puts("DRAM: ");
202
203 gd->ram_size = initdram(board_type);
204
205 if (gd->ram_size > 0) {
206 print_size(gd->ram_size, "");
207 board_add_ram_info(0);
208 putc('\n');
209 return 0;
210 }
211 puts(failed);
212 return 1;
213}
214
215
216
217#if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C)
218static int init_func_i2c(void)
219{
220 puts("I2C: ");
221 i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
222 puts("ready\n");
223 return 0;
224}
225#endif
226
227#if defined(CONFIG_HARD_SPI)
228static int init_func_spi(void)
229{
230 puts("SPI: ");
231 spi_init();
232 puts("ready\n");
233 return 0;
234}
235#endif
236
237
238
239#if defined(CONFIG_WATCHDOG)
240static int init_func_watchdog_init(void)
241{
242 puts(" Watchdog enabled\n");
243 WATCHDOG_RESET();
244 return 0;
245}
246
247#define INIT_FUNC_WATCHDOG_INIT init_func_watchdog_init,
248
249static int init_func_watchdog_reset(void)
250{
251 WATCHDOG_RESET();
252 return 0;
253}
254
255#define INIT_FUNC_WATCHDOG_RESET init_func_watchdog_reset,
256#else
257#define INIT_FUNC_WATCHDOG_INIT
258#define INIT_FUNC_WATCHDOG_RESET
259#endif
260
261
262
263
264
265init_fnc_t *init_sequence[] = {
266#if defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx)
267 probecpu,
268#endif
269#if defined(CONFIG_BOARD_EARLY_INIT_F)
270 board_early_init_f,
271#endif
272#if !defined(CONFIG_8xx_CPUCLK_DEFAULT)
273 get_clocks,
274#if defined(CONFIG_TQM8xxL) && !defined(CONFIG_TQM866M) \
275 && !defined(CONFIG_TQM885D)
276 adjust_sdram_tbs_8xx,
277#endif
278 init_timebase,
279#endif
280#ifdef CONFIG_SYS_ALLOC_DPRAM
281#if !defined(CONFIG_CPM2)
282 dpram_init,
283#endif
284#endif
285#if defined(CONFIG_BOARD_POSTCLK_INIT)
286 board_postclk_init,
287#endif
288 env_init,
289#if defined(CONFIG_8xx_CPUCLK_DEFAULT)
290
291 get_clocks_866,
292
293 sdram_adjust_866,
294 init_timebase,
295#endif
296 init_baudrate,
297 serial_init,
298 console_init_f,
299 display_options,
300#if defined(CONFIG_8260)
301 prt_8260_rsr,
302 prt_8260_clks,
303#endif
304#if defined(CONFIG_MPC83xx)
305 prt_83xx_rsr,
306#endif
307 checkcpu,
308#if defined(CONFIG_MPC5xxx)
309 prt_mpc5xxx_clks,
310#endif
311#if defined(CONFIG_MPC8220)
312 prt_mpc8220_clks,
313#endif
314 checkboard,
315 INIT_FUNC_WATCHDOG_INIT
316#if defined(CONFIG_MISC_INIT_F)
317 misc_init_f,
318#endif
319 INIT_FUNC_WATCHDOG_RESET
320#if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C)
321 init_func_i2c,
322#endif
323#if defined(CONFIG_HARD_SPI)
324 init_func_spi,
325#endif
326#ifdef CONFIG_POST
327 post_init_f,
328#endif
329 INIT_FUNC_WATCHDOG_RESET init_func_ram,
330#if defined(CONFIG_SYS_DRAM_TEST)
331 testdram,
332#endif
333 INIT_FUNC_WATCHDOG_RESET
334 NULL,
335};
336
337ulong get_effective_memsize(void)
338{
339#ifndef CONFIG_VERY_BIG_RAM
340 return gd->ram_size;
341#else
342
343 return ((gd->ram_size > CONFIG_MAX_MEM_MAPPED) ?
344 CONFIG_MAX_MEM_MAPPED : gd->ram_size);
345#endif
346}
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361#ifdef CONFIG_LOGBUFFER
362unsigned long logbuffer_base(void)
363{
364 return CONFIG_SYS_SDRAM_BASE + get_effective_memsize() - LOGBUFF_LEN;
365}
366#endif
367
368void board_init_f(ulong bootflag)
369{
370 bd_t *bd;
371 ulong len, addr, addr_sp;
372 ulong *s;
373 gd_t *id;
374 init_fnc_t **init_fnc_ptr;
375
376#ifdef CONFIG_PRAM
377 ulong reg;
378#endif
379
380
381 gd = (gd_t *) (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_GBL_DATA_OFFSET);
382
383 __asm__ __volatile__("":::"memory");
384
385#if !defined(CONFIG_CPM2) && !defined(CONFIG_MPC512X) && \
386 !defined(CONFIG_MPC83xx) && !defined(CONFIG_MPC85xx) && \
387 !defined(CONFIG_MPC86xx)
388
389 memset((void *) gd, 0, sizeof(gd_t));
390#endif
391
392 for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr)
393 if ((*init_fnc_ptr) () != 0)
394 hang();
395
396#ifdef CONFIG_POST
397 post_bootmode_init();
398 post_run(NULL, POST_ROM | post_bootmode_get(0));
399#endif
400
401 WATCHDOG_RESET();
402
403
404
405
406
407
408
409
410
411
412
413
414
415 len = (ulong)&__bss_end__ - CONFIG_SYS_MONITOR_BASE;
416
417
418
419
420
421
422
423
424
425
426
427 gd->ram_size -= CONFIG_SYS_MEM_TOP_HIDE;
428
429 addr = CONFIG_SYS_SDRAM_BASE + get_effective_memsize();
430
431#if defined(CONFIG_MP) && (defined(CONFIG_MPC86xx) || defined(CONFIG_E500))
432
433
434
435
436 if (addr > determine_mp_bootpg()) {
437 addr = determine_mp_bootpg();
438 debug("Reserving MP boot page to %08lx\n", addr);
439 }
440#endif
441
442#ifdef CONFIG_LOGBUFFER
443#ifndef CONFIG_ALT_LB_ADDR
444
445 addr -= (LOGBUFF_RESERVE);
446 debug("Reserving %dk for kernel logbuffer at %08lx\n", LOGBUFF_LEN,
447 addr);
448#endif
449#endif
450
451#ifdef CONFIG_PRAM
452
453
454
455 reg = getenv_ulong("pram", 10, CONFIG_PRAM);
456 addr -= (reg << 10);
457 debug("Reserving %ldk for protected RAM at %08lx\n", reg, addr);
458#endif
459
460
461 addr &= ~(4096 - 1);
462 debug("Top of RAM usable for U-Boot at: %08lx\n", addr);
463
464#ifdef CONFIG_LCD
465#ifdef CONFIG_FB_ADDR
466 gd->fb_base = CONFIG_FB_ADDR;
467#else
468
469 addr = lcd_setmem(addr);
470 gd->fb_base = addr;
471#endif
472#endif
473
474#if defined(CONFIG_VIDEO) && defined(CONFIG_8xx)
475
476 addr = video_setmem(addr);
477 gd->fb_base = addr;
478#endif
479
480
481
482
483
484 addr -= len;
485 addr &= ~(4096 - 1);
486#ifdef CONFIG_E500
487
488 addr &= ~(65536 - 1);
489#endif
490
491 debug("Reserving %ldk for U-Boot at: %08lx\n", len >> 10, addr);
492
493
494
495
496 addr_sp = addr - TOTAL_MALLOC_LEN;
497 debug("Reserving %dk for malloc() at: %08lx\n",
498 TOTAL_MALLOC_LEN >> 10, addr_sp);
499
500
501
502
503
504 addr_sp -= sizeof(bd_t);
505 bd = (bd_t *) addr_sp;
506 memset(bd, 0, sizeof(bd_t));
507 gd->bd = bd;
508 debug("Reserving %zu Bytes for Board Info at: %08lx\n",
509 sizeof(bd_t), addr_sp);
510 addr_sp -= sizeof(gd_t);
511 id = (gd_t *) addr_sp;
512 debug("Reserving %zu Bytes for Global Data at: %08lx\n",
513 sizeof(gd_t), addr_sp);
514
515
516
517
518
519
520
521 addr_sp -= 16;
522 addr_sp &= ~0xF;
523 s = (ulong *) addr_sp;
524 *s-- = 0;
525 *s-- = 0;
526 addr_sp = (ulong) s;
527 debug("Stack Pointer at: %08lx\n", addr_sp);
528
529
530
531
532
533 bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;
534 bd->bi_memsize = gd->ram_size;
535
536#ifdef CONFIG_SYS_SRAM_BASE
537 bd->bi_sramstart = CONFIG_SYS_SRAM_BASE;
538 bd->bi_sramsize = CONFIG_SYS_SRAM_SIZE;
539#endif
540
541#if defined(CONFIG_8xx) || defined(CONFIG_8260) || defined(CONFIG_5xx) || \
542 defined(CONFIG_E500) || defined(CONFIG_MPC86xx)
543 bd->bi_immr_base = CONFIG_SYS_IMMR;
544#endif
545#if defined(CONFIG_MPC5xxx)
546 bd->bi_mbar_base = CONFIG_SYS_MBAR;
547#endif
548#if defined(CONFIG_MPC83xx)
549 bd->bi_immrbar = CONFIG_SYS_IMMR;
550#endif
551#if defined(CONFIG_MPC8220)
552 bd->bi_mbar_base = CONFIG_SYS_MBAR;
553 bd->bi_inpfreq = gd->inp_clk;
554 bd->bi_pcifreq = gd->pci_clk;
555 bd->bi_vcofreq = gd->vco_clk;
556 bd->bi_pevfreq = gd->pev_clk;
557 bd->bi_flbfreq = gd->flb_clk;
558
559
560 {
561 u32 *sram = (u32 *) CONFIG_SYS_SRAM_BASE;
562
563 *sram++ = gd->ram_size;
564 *sram++ = gd->bus_clk;
565 *sram++ = gd->inp_clk;
566 *sram++ = gd->cpu_clk;
567 *sram++ = gd->vco_clk;
568 *sram++ = gd->flb_clk;
569 *sram++ = 0xb8c3ba11;
570 }
571#endif
572
573 WATCHDOG_RESET();
574 bd->bi_intfreq = gd->cpu_clk;
575 bd->bi_busfreq = gd->bus_clk;
576#if defined(CONFIG_CPM2)
577 bd->bi_cpmfreq = gd->cpm_clk;
578 bd->bi_brgfreq = gd->brg_clk;
579 bd->bi_sccfreq = gd->scc_clk;
580 bd->bi_vco = gd->vco_out;
581#endif
582#if defined(CONFIG_MPC512X)
583 bd->bi_ipsfreq = gd->ips_clk;
584#endif
585#if defined(CONFIG_MPC5xxx)
586 bd->bi_ipbfreq = gd->ipb_clk;
587 bd->bi_pcifreq = gd->pci_clk;
588#endif
589 bd->bi_baudrate = gd->baudrate;
590
591#ifdef CONFIG_SYS_EXTBDINFO
592 strncpy((char *) bd->bi_s_version, "1.2", sizeof(bd->bi_s_version));
593 strncpy((char *) bd->bi_r_version, U_BOOT_VERSION,
594 sizeof(bd->bi_r_version));
595
596 bd->bi_procfreq = gd->cpu_clk;
597 bd->bi_plb_busfreq = gd->bus_clk;
598#if defined(CONFIG_405GP) || defined(CONFIG_405EP) || \
599 defined(CONFIG_440EP) || defined(CONFIG_440GR) || \
600 defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
601 bd->bi_pci_busfreq = get_PCI_freq();
602 bd->bi_opbfreq = get_OPB_freq();
603#elif defined(CONFIG_XILINX_405)
604 bd->bi_pci_busfreq = get_PCI_freq();
605#endif
606#endif
607
608 debug("New Stack Pointer is: %08lx\n", addr_sp);
609
610 WATCHDOG_RESET();
611
612 gd->relocaddr = addr;
613
614 memcpy(id, (void *) gd, sizeof(gd_t));
615
616 relocate_code(addr_sp, id, addr);
617
618
619}
620
621
622
623
624
625
626
627void board_init_r(gd_t *id, ulong dest_addr)
628{
629 bd_t *bd;
630 ulong malloc_start;
631
632#ifndef CONFIG_SYS_NO_FLASH
633 ulong flash_size;
634#endif
635
636 gd = id;
637 bd = gd->bd;
638
639 gd->flags |= GD_FLG_RELOC;
640
641
642 malloc_start = dest_addr - TOTAL_MALLOC_LEN;
643
644#if defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx)
645
646
647
648
649 gd->cpu += dest_addr - CONFIG_SYS_MONITOR_BASE;
650#endif
651
652#ifdef CONFIG_SYS_EXTRA_ENV_RELOC
653
654
655
656
657
658
659
660 gd->env_addr += dest_addr - CONFIG_SYS_MONITOR_BASE;
661#endif
662
663#ifdef CONFIG_SERIAL_MULTI
664 serial_initialize();
665#endif
666
667 debug("Now running in RAM - U-Boot at: %08lx\n", dest_addr);
668
669 WATCHDOG_RESET();
670
671
672
673
674 trap_init(dest_addr);
675
676#ifdef CONFIG_ADDR_MAP
677 init_addr_map();
678#endif
679
680#if defined(CONFIG_BOARD_EARLY_INIT_R)
681 board_early_init_r();
682#endif
683
684 monitor_flash_len = (ulong)&__init_end - dest_addr;
685
686 WATCHDOG_RESET();
687
688#ifdef CONFIG_LOGBUFFER
689 logbuff_init_ptrs();
690#endif
691#ifdef CONFIG_POST
692 post_output_backlog();
693#endif
694
695 WATCHDOG_RESET();
696
697#if defined(CONFIG_SYS_DELAYED_ICACHE)
698 icache_enable();
699#endif
700
701#if defined(CONFIG_SYS_INIT_RAM_LOCK) && defined(CONFIG_E500)
702 unlock_ram_in_cache();
703#endif
704
705#if defined(CONFIG_PCI) && defined(CONFIG_SYS_EARLY_PCI_INIT)
706
707
708
709
710 pci_init();
711#endif
712#if defined(CONFIG_WINBOND_83C553)
713
714
715
716 initialise_w83c553f();
717#endif
718
719 asm("sync ; isync");
720
721 mem_malloc_init(malloc_start, TOTAL_MALLOC_LEN);
722
723#if !defined(CONFIG_SYS_NO_FLASH)
724 puts("Flash: ");
725
726 if (board_flash_wp_on()) {
727 printf("Uninitialized - Write Protect On\n");
728
729 flash_size = 0;
730 } else if ((flash_size = flash_init()) > 0) {
731#ifdef CONFIG_SYS_FLASH_CHECKSUM
732 char *s;
733
734 print_size(flash_size, "");
735
736
737
738
739
740 s = getenv("flashchecksum");
741 if (s && (*s == 'y')) {
742 printf(" CRC: %08X",
743 crc32(0,
744 (const unsigned char *)
745 CONFIG_SYS_FLASH_BASE, flash_size)
746 );
747 }
748 putc('\n');
749#else
750 print_size(flash_size, "\n");
751#endif
752 } else {
753 puts(failed);
754 hang();
755 }
756
757
758 bd->bi_flashstart = CONFIG_SYS_FLASH_BASE;
759
760 bd->bi_flashsize = flash_size;
761
762#if defined(CONFIG_SYS_UPDATE_FLASH_SIZE)
763
764 update_flash_size(flash_size);
765#endif
766
767
768#if defined(CONFIG_OXC) || defined(CONFIG_RMU)
769
770 bd->bi_flashoffset = CONFIG_SYS_TEXT_BASE + flash_size;
771#elif CONFIG_SYS_MONITOR_BASE == CONFIG_SYS_FLASH_BASE
772 bd->bi_flashoffset = monitor_flash_len;
773#endif
774#endif
775
776 WATCHDOG_RESET();
777
778
779 cpu_init_r();
780
781 WATCHDOG_RESET();
782
783#ifdef CONFIG_SPI
784#if !defined(CONFIG_ENV_IS_IN_EEPROM)
785 spi_init_f();
786#endif
787 spi_init_r();
788#endif
789
790#if defined(CONFIG_CMD_NAND)
791 WATCHDOG_RESET();
792 puts("NAND: ");
793 nand_init();
794#endif
795
796#ifdef CONFIG_GENERIC_MMC
797
798
799
800
801
802 WATCHDOG_RESET();
803 puts("MMC: ");
804 mmc_initialize(bd);
805#endif
806
807
808 env_relocate();
809
810
811
812
813
814
815
816 cpu_secondary_init_r();
817
818
819
820
821
822
823
824
825
826#if defined(CONFIG_SYS_EXTBDINFO)
827#if defined(CONFIG_405GP) || defined(CONFIG_405EP)
828#if defined(CONFIG_I2CFAST)
829
830
831
832
833 {
834 char *s = getenv("i2cfast");
835
836 if (s && ((*s == 'y') || (*s == 'Y'))) {
837 bd->bi_iic_fast[0] = 1;
838 bd->bi_iic_fast[1] = 1;
839 }
840 }
841#endif
842#endif
843#endif
844
845#if defined(CONFIG_SC3)
846 sc3_read_eeprom();
847#endif
848
849#if defined(CONFIG_ID_EEPROM) || defined(CONFIG_SYS_I2C_MAC_OFFSET)
850 mac_read_from_eeprom();
851#endif
852
853#ifdef CONFIG_HERMES
854 if ((gd->board_type >> 16) == 2)
855 bd->bi_ethspeed = gd->board_type & 0xFFFF;
856 else
857 bd->bi_ethspeed = 0xFFFF;
858#endif
859
860#ifdef CONFIG_CMD_NET
861
862 eth_getenv_enetaddr("ethaddr", bd->bi_enetaddr);
863#ifdef CONFIG_HAS_ETH1
864 eth_getenv_enetaddr("eth1addr", bd->bi_enet1addr);
865#endif
866#ifdef CONFIG_HAS_ETH2
867 eth_getenv_enetaddr("eth2addr", bd->bi_enet2addr);
868#endif
869#ifdef CONFIG_HAS_ETH3
870 eth_getenv_enetaddr("eth3addr", bd->bi_enet3addr);
871#endif
872#ifdef CONFIG_HAS_ETH4
873 eth_getenv_enetaddr("eth4addr", bd->bi_enet4addr);
874#endif
875#ifdef CONFIG_HAS_ETH5
876 eth_getenv_enetaddr("eth5addr", bd->bi_enet5addr);
877#endif
878#endif
879
880
881 bd->bi_ip_addr = getenv_IPaddr("ipaddr");
882
883 WATCHDOG_RESET();
884
885#if defined(CONFIG_PCI) && !defined(CONFIG_SYS_EARLY_PCI_INIT)
886
887
888
889 pci_init();
890#endif
891
892
893
894 stdio_init();
895
896
897 jumptable_init();
898
899#if defined(CONFIG_API)
900
901 api_init();
902#endif
903
904
905 console_init_r();
906
907#if defined(CONFIG_MISC_INIT_R)
908
909 misc_init_r();
910#endif
911
912#ifdef CONFIG_HERMES
913 if (bd->bi_ethspeed != 0xFFFF)
914 hermes_start_lxt980((int) bd->bi_ethspeed);
915#endif
916
917#if defined(CONFIG_CMD_KGDB)
918 WATCHDOG_RESET();
919 puts("KGDB: ");
920 kgdb_init();
921#endif
922
923 debug("U-Boot relocated to %08lx\n", dest_addr);
924
925
926
927
928 interrupt_init();
929
930#if defined(CONFIG_STATUS_LED) && defined(STATUS_LED_BOOT)
931 status_led_set(STATUS_LED_BOOT, STATUS_LED_BLINKING);
932#endif
933
934 udelay(20);
935
936
937 load_addr = getenv_ulong("loadaddr", 16, load_addr);
938#if defined(CONFIG_CMD_NET)
939 {
940 char *s = getenv("bootfile");
941
942 if (s != NULL)
943 copy_filename(BootFile, s, sizeof(BootFile));
944 }
945#endif
946
947 WATCHDOG_RESET();
948
949#if defined(CONFIG_CMD_SCSI)
950 WATCHDOG_RESET();
951 puts("SCSI: ");
952 scsi_init();
953#endif
954
955#if defined(CONFIG_CMD_DOC)
956 WATCHDOG_RESET();
957 puts("DOC: ");
958 doc_init();
959#endif
960
961#ifdef CONFIG_BITBANGMII
962 bb_miiphy_init();
963#endif
964#if defined(CONFIG_CMD_NET)
965 WATCHDOG_RESET();
966 puts("Net: ");
967 eth_initialize(bd);
968#endif
969
970#if defined(CONFIG_CMD_NET) && defined(CONFIG_RESET_PHY_R)
971 WATCHDOG_RESET();
972 debug("Reset Ethernet PHY\n");
973 reset_phy();
974#endif
975
976#ifdef CONFIG_POST
977 post_run(NULL, POST_RAM | post_bootmode_get(0));
978#endif
979
980#if defined(CONFIG_CMD_PCMCIA) \
981 && !defined(CONFIG_CMD_IDE)
982 WATCHDOG_RESET();
983 puts("PCMCIA:");
984 pcmcia_init();
985#endif
986
987#if defined(CONFIG_CMD_IDE)
988 WATCHDOG_RESET();
989#ifdef CONFIG_IDE_8xx_PCCARD
990 puts("PCMCIA:");
991#else
992 puts("IDE: ");
993#endif
994#if defined(CONFIG_START_IDE)
995 if (board_start_ide())
996 ide_init();
997#else
998 ide_init();
999#endif
1000#endif
1001
1002#ifdef CONFIG_LAST_STAGE_INIT
1003 WATCHDOG_RESET();
1004
1005
1006
1007
1008
1009 last_stage_init();
1010#endif
1011
1012#if defined(CONFIG_CMD_BEDBUG)
1013 WATCHDOG_RESET();
1014 bedbug_init();
1015#endif
1016
1017#if defined(CONFIG_PRAM) || defined(CONFIG_LOGBUFFER)
1018
1019
1020
1021
1022 {
1023 ulong pram = 0;
1024 char memsz[32];
1025
1026#ifdef CONFIG_PRAM
1027 pram = getenv_ulong("pram", 10, CONFIG_PRAM);
1028#endif
1029#ifdef CONFIG_LOGBUFFER
1030#ifndef CONFIG_ALT_LB_ADDR
1031
1032 pram += (LOGBUFF_LEN + LOGBUFF_OVERHEAD) / 1024;
1033#endif
1034#endif
1035 sprintf(memsz, "%ldk", (bd->bi_memsize / 1024) - pram);
1036 setenv("mem", memsz);
1037 }
1038#endif
1039
1040#ifdef CONFIG_PS2KBD
1041 puts("PS/2: ");
1042 kbd_init();
1043#endif
1044
1045#ifdef CONFIG_MODEM_SUPPORT
1046 {
1047 extern int do_mdm_init;
1048
1049 do_mdm_init = gd->do_mdm_init;
1050 }
1051#endif
1052
1053
1054
1055
1056 for (;;) {
1057 WATCHDOG_RESET();
1058 main_loop();
1059 }
1060
1061
1062}
1063
1064void hang(void)
1065{
1066 puts("### ERROR ### Please RESET the board ###\n");
1067 bootstage_error(BOOTSTAGE_ID_NEED_RESET);
1068 for (;;)
1069 ;
1070}
1071
1072
1073#if 0
1074
1075
1076
1077
1078
1079#undef XTRN_DECLARE_GLOBAL_DATA_PTR
1080#define XTRN_DECLARE_GLOBAL_DATA_PTR
1081DECLARE_GLOBAL_DATA_PTR =
1082 (gd_t *) (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_GBL_DATA_OFFSET);
1083#endif
1084
1085
1086