From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Wozniak Date: Wed, 08 Jun 2005 10:29:44 -0400 Subject: [U-Boot-Users] Custom Board configuration In-Reply-To: <20050608130217.543E6C1512@atlas.denx.de> References: <20050608130217.543E6C1512@atlas.denx.de> Message-ID: <42A700D8.2060102@mc.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Wolfgang Denk wrote: > In message <000101c56c28$4af32eb0$f201a8c0@SN7606> you wrote: > >>need a minimal configuration for booting with u-boot. Is there anywhere a >>guide or some information what i have to do?! > > > I recommend you start with the README, probably section "Porting > Guide" or so... cute porting guide - read it anyway. Here's how I approached our port of a custom PPC440gx board. - first of all, try to understand the general initialization of U-Boot - get and install PPC4xx compiler and tools - setup/use ctags or cscope with a compatible editor - find and choose an existing U-Boot port that resembles your target - if target has a JTAG interface, acquire a JTAG debugger - modify the memory settings of the baseline port you've chosen - I used OCOTEA port - edit the config file for your target (OCOTEA.h). see the README for additional entries - adjust Makefile to pickup your compiler properly - build it: make mrproper make OCOTEA_config make dep make - if build works, verify the .map output fits your target memory layout - install u-boot.bin and single step via JTAG, see how far you get - get GDB/DDD hooked up to your BDM JTAG pod - convert/copy the OCOTEA build target to your own; create a board/your_target directory and include/configs/YOUR_TARGET.h - rebuild as before but with YOUR_TARGET_config - replace/remove any OCOTEA specific (FPGA) init functions - get the console I/O, RTC... working - turn on DEBUG statements to see what is running - get the rest of the U-Boot commands working thru a combination of JTAG and printfs - document the initialization that you see happening - see my attached logfile. it has lot of extra info that may not apply to your target. I'm not responsible for any inaccuracies ;) - don't forget to dig thru the READMEs and source code. It is helpful to some degree. > Best regards, > > Wolfgang Denk > ================================================================================= # logfile general boot sequence for PPC440GX target # # 2005-03-28 Andrew Wozniak, initial draft _start_440() cpu/ppc4xx/start.S _start_440 ...Initialize debug registers ...CCR0 init ...Setup interrupt vectors at 0x0000_0000 ...config cache regions ...clear and setup TLBs ...SDRAM fast refresh ...jump to _start ...setup ISRAM ...setup stack within ISRAM ...ready to run "C" level init code ...jump to board_init_f jump to "C" level code board_init_f() lib_ppc/board.c init_sequence[] board_early_init_f() board/ocotea/ocotea.c ...init OCOTEA FPGA network ops ...setup CSO for Flash setup Flash chip select ...setup UIC setup interrupt controller get_clocks, get CPU clock info from GD init_timebase, env_init, validate CRC, point to env space or hard coded dflt init_baudrate, serial_init, console_init_f, display_options, display U-Boot name and version info checkcpu, update CPU rev info checkboard, display CPU clock details get_sys_info(&sysinfo) printf(...) init_func_i2c, init_func_ram, init_dram() fixed_sdram() ocotea.c - memory controller setup/timimg end of init[] ...init gd (global data) values ...allocate stack memory ...reserve memory for data, BSS ...reserve memory for malloc ...allocate/copy global data structure ...setup stack ...save board info structure ...run optional post relocate_code() cpu/ppc4xx/start.S ...copy self to RAM board_init_r() lib_ppc/board.c trap_init() setup trap handlers cpu/ppc4xx/start.S flash_init() setup structures, protect monitor & envars cpu_init_r() initialize high-level parts of CPU; time base and timers env_relocate() s = get_env("ethaddr") MAC address ( lib_ppc/board.c) getenv_IPaddr ("ipaddr") pci_init() devices_init() console_init_r() misc_init_r() platform specific reset_phy () interrupt_init() Enable Interrupts lib_ppc/interrupts.c interrupt_init_cpu() cpu/ppc4xx/interrupts.c eth_initialize() net/eth.c ppc_440x_eth_initialize() cpu/ppc4xx/440gx_enet.c ppc_440x_eth_init() also read SROM for MAC values compare SROM and envar MAC values print if diff for (;;) main_loop() u-boot monitor common/main.c ... ... getenv ("bootdelay") run_command(getenv ("bootcmd")) for(;;) readline() run_command()