$Id: README,v 1.9 2000/09/24 23:07:21 linde Exp $ ******* Welcome to the UTC Bootloader project (TIARA). This entire effort is released under the GPL. As the source forge summary says: Talkware TIARA, an Openbios/GRUB/PFORTH composite, BIOS replacement. Boots an unmodifed linux kernel from an IDE drive or ethernet, using only 128kb of flash. Works with INTEL/AMD K6/2-450, SiS 530/5595 and 8139 enet. VGA & Serial console supported. TIARA owes a great deal to the OpenBios, GRUB, and Netboot projects. Honorable mention also goes to "Two Kernel Monte" and the Etherboot projects. Without their code and/or knowledge we would have had to suffer much more than we have. TIARA picks up where OpenBIOS left off. We are not attempting to create an entire BIOS, at least for now. We have created a bios level loader that can boot Linux directly from disk, ethernet, and eventually from floppy. **** **** Special NOTE **** *** This code has been tested quite extensivly on a SiS530 based design. It work and we are happy. :) This being said we are now moving on to a SiS630 based design and will no longer be mainting the 530 code. We will try to maintain a functional 530 port but who knows... **** **** *** New Fixes: Grub is more flexiable and now works with 2.4.x kernels It will reboot without a disk check. No longer leaves the part mounted r/w netboot is more flexable and works all the time that we can tell. lots of code has been moved into forth reboot works without a memory loss or leak usb works correctly printer port works correctly. floppy works better. IDE is faster and works better it remembers disk boot params in nvram between reboots. TONS of other little fixes. ********* ********* ********* NOTE: If you are playing with a bios level code setup and you do not have an ICE system you are either insane or working on it. Again, beware this is VERY early (read ugly) code and is not meant to be used for anything of value, yet. Maybe some day :) ****************************************** At present the only arch that is supported is: SIS530/5595/6802 with RTL8139 Ethernet Additional Ethernet devices are pretty easy to add in that we patched the GRUB/netboot,disk core code into the TIARA code base. Tiara is designed to work on our own custom motherboard. This is our harware configuration/chips (others may or may not work): Amd K6-II/450 CPU 2.2v core Sis530 North Bridge MC80364k Cache Chip 32mb SDRAM memory SiS5595 South bridge SiS6801 Super I/O RTL8139B Ethernet ESS Solo-1 (es1938s) Sound chip XG571C clock chip R6763-11 rockwell VOIP Compression R6764-61 Rockwell DataPump V.90 L2800 Rockwell Controller But, Tiara also seems runs on an OTS Jet-way J-530CF (approx $80 US). The J-530CF is a SIS530/5595/6801 setup and there are many out there using std socket-7 mb's, but we make no claims. We even used a OTS PCI 8139a card for ethernet and it worked. Tiara is a composite of: openbios -- mostly for the build structure. grub/netboot -- for the stage2 image loading core, basically fsys_e2fs, fsys_tftp, and netboot drivers. pforth -- the boot command line interpreter, has links to status and diagnostics, the grub loading routines, and the boot linux routines. The boot process described (in a nutshell): =========================================== processor reset: jump to reset vector. reset vector: jump to boot16. boot16: set hugemode, do board specific (SIS530/chipset.inc): memory sizing, cache sizing, cache test jump to boot32. boot32: gunzip firmware image, jump to firmware: firmware: firmware/main/head.S->firmware/main/main.c: clear bss chipset_c_init: firmware/init/chipset.c fake_pnp: firmware/init/pci.c /* pci regs < 0x40 */ /* pci regs >= 0x40 */ /* 530 North bridge */ initregs hostbridge initregs vga /* 5595 south bridge */ initregs ide initregs isa initregs pmu /* superio */ init_6801 init_acpi traps_init dma_init timer_init console_init video_init (vga) serial_init calibrate_delay (bogomips) nvram_init keyboard_init call forth forth: load dictionary auto_init if boot.mode != diag loop for 3 seconds if key == escape goto diag endloop boot the selected nvram bootmode endif diag: do forth interp Booting 4th functions: ====================== boot.help -- displays all booting functions with explanations. nvram.help -- displays all nvram type functions with explanations. /* * below are the C/4th primitive functions that the booting 4th * routines call. */ linux.init ( -- ) Linked to C boot_init. Initialize the setup area to sane defaults. We have defined a series of overlay structures for this (see firmware/init/system.h for the curious). linux.init.cmdline ( Cstring ) link to C function init_command_line that takes a null termed string. Copies in command line args specified in str. linux.boot ( image_addr, length, boot_addr -- ) link to C function boot_linux with same args. image_addr and length are are location and length of loaded kernel. boot_addr is the address that the kernel signature should be located at before jumping. This is necessary because different kernels can have different sized areas before the signature. /* These are linked to C load_image and load_initrd which are in * firmware/init/grub/boot.c and call the grub functions * grub_open/grub_read/grub_close, and both take as their first * args, the grubby style args: "(hd0,0)/filename" or (nd)/filename. * load_initrd reads the specified file to loadaddr, and moves it * to a 4k boundary from end of memory. Note they require null termed * strings. */ grub.bootp.init ( -- <0 on error ) \ initialize ethernet grub.load.image ( cstr_filename load_addr length -- rlength ) grub.load.initrd ( cstr_filename eom loadaddr -- rlength ) Note: planning to do some 4th hacking? Remember that those 4th strings are not null termed! In compiled colon defs, we suggest a trick something like this: s" /vmlinux " \ note extra space at end. 1 - 2dup + 0 swap c! \ stick null char in that space. Known Deficiences: ================== Much of the code is still in C and should probably be moved over to fourth. Decide how much, and then move it. Likely candidates are most of the initializing function calls that are in main/main.c Due to a flaw in the openbios makefiles, it does not stop on an error when a previous compile produced a .a or .o file. Redesign the build process and heirarchy to be more port friendly. This could include replacing nasm with gas. Does not do proper pci enumeration. Currently hardwires values from arrays into known pci device config registers (see firmware/init/pci.c and firmware/init/chipset.c). Configuring devices means editing these arrays to reflect your hardware configuration. Anyone got a pci type1 enumerator? (note that this problem should not effect etherboot). Actually the pci enumerator should probably be in 4th. Cache and memory testing has problems. The biggest is that it needs to write into memory range 640K-1M if the test size is larger than 512K. This is bad, as that is where the legacy hardware cruft is- writting random values there would be bad(tm). The solution would be to turn off the legacy support just long enough to test the memory and cache. Since part of that "legacy cruft" is the BIOS Image at 0xF0000, the memory code will have to be ported to 32bit and run out of the image at 0xFFF80000. Known Bugs: =========== In the BIOS, PIC is not forwarding interrupts over 7, since mouse IRQ is 12, this is not passed on. Mostly this is not a problem as linux seems to bring up the pic okay, however, sometimes, when a mouse event happens during kbd diagnostics it can lock out the keyboard. Audio is not configured yet. Would like to do, but no time or need things: ============================================= Investigate using a trimmed down version of Gforth instead of Pforth. Gforth is more current, but bigger. It also required more work to embed, which we didn't have (4th wise, we barely make it to the 3rd grade). Get a copy of the ieee openfirmware spec and rewrite everyything that touches pci. Think about alternative boot languages. Just how mini can we get a perl? How slight can we get a lisp? Credits ======= Anyone who thinks initializing a pentium class MB is easy had better think again. The following effort has the following talkware people to thank for its initial functional codebase: The Tiara Team: --------------- Larry Linde Randy Viosca Eric EstaBrooks Brian Hurt Dave Weightman email: tiara@talkware.net Code web site: http://www.talkware.net/GPL/TIARA