Home / readme / 0.4.0
Name Modified Size InfoDownloads / Week
Parent folder
tiara.README 2000-09-24 9.0 kB
Totals: 1 Item   9.0 kB 0
$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


Source: tiara.README, updated 2000-09-24