Hi,
I was trying to fix the Compaq Alphaserver DS10 target for LinuxBIOS.
While doing this, I moved the linuxbios table handling to from the
i386 directories to src/boot/
I attached a patch, and it doesn't break the other targets, plus it
builds nicely on Alpha again. But I haven't dared testing yet, as
none of the three DS10s I have here comes with a socketed flash and
unlike most other alphas there does not seem to be a built in FSB
(or does anyone know of one? Help on this is greatly appreciated)
I think the one or the other edge needs a bit of fiddling, but I hope
it's ok as a rough path. Eric, can you look into it and point me to
the (hopefully not too) many mistakes I made?
Stefan
--
The x86 isn't all that complex - it just doesn't make a lot of
sense. -- Mike Johnson, Leader of 80x86 Design at AMD
Microprocessor Report (1994)
diff --exclude='Entries*' -urN freebios/src/arch/alpha/boot/boot.c
../freebios/src/arch/alpha/boot/boot.c
--- freebios/src/arch/alpha/boot/boot.c Fri Mar 23 19:41:27 2001
+++ ../freebios/src/arch/alpha/boot/boot.c Fri Apr 26 18:37:25 2002
@@ -1,4 +1,4 @@
-#include <boot/uniform_boot.h>
+// #include <boot/uniform_boot.h>
#include <boot/elf.h>
#include <arch/boot/hwrpb.h>
@@ -127,7 +127,7 @@
},
};
-
+#ifdef OLD_DS10
static struct {
struct uniform_boot_header header;
struct {
@@ -152,7 +152,7 @@
},
.command_line = HWRPB_COMMAND_LINE,
};
-
+#endif
static unsigned long hwrpb_compute_checksum(struct hwrpb_struct *hwrpb)
{
unsigned long sum = 0, *l;
@@ -162,7 +162,7 @@
}
-
+#ifdef OLD_DS10
void *get_ube_pointer(unsigned long totalram)
{
/* Set the amount of RAM I have */
@@ -175,7 +175,16 @@
uniform_boot_compute_header_checksum(&ube_all.header);
return &ube_all;
}
-
+#else
+void prepare_hwrpb(unsigned long totalram)
+{
+ /* Set the amount of RAM I have */
+ boot_data.mem_cluster[1].numpages = (totalram >> 3) -
+ boot_data.mem_cluster[1].start_pfn;
+ boot_data.hwrpb.chksum = 0;
+ boot_data.hwrpb.chksum = hwrpb_compute_checksum(&boot_data.hwrpb);
+}
+#endif
int elf_check_arch(Elf_ehdr *ehdr)
{
@@ -186,12 +195,12 @@
);
}
-void jmp_to_elf_entry(void *entry, void *ptr)
+void jmp_to_elf_entry(void *entry, unsigned long ptr)
{
void (*kernel_entry)(void *ptr);
kernel_entry = entry;
/* Jump to kernel */
- kernel_entry(ptr);
+ kernel_entry((void *)ptr);
}
diff --exclude='Entries*' -urN freebios/src/arch/alpha/config/ldscript.base
../freebios/src/arch/alpha/config/ldscript.base
--- freebios/src/arch/alpha/config/ldscript.base Sat Apr 14 00:04:20 2001
+++ ../freebios/src/arch/alpha/config/ldscript.base Fri Apr 26 18:26:40 2002
@@ -19,7 +19,21 @@
*(.rodata);
_erodata = .;
} : kernel
+/* streams starts here */
+ _ltext = LOADADDR(.text);
+ _eltext = LOADADDR(.text) + SIZEOF(.text);
+ .rodata . : AT(_eltext){
+ _rodata = .;
+ . = ALIGN(4);
+ streams = . ;
+ *(.rodata.streams)
+ estreams = .;
+ *(.rodata)
+ *(.rodata.*)
+ _erodata = .;
+ }
+/* streams ends here */
. = _RAMBASE;
/* Global data */
.data : {
@@ -66,6 +80,12 @@
_estack = .;
}
+ /* The ram segment
+ * This is all address of the memory resident copy of linuxBIOS.
+ */
+ _ram_seg = _text;
+ _eram_seg = _eheap;
+
/DISCARD/ : {
/* Comment sections */
*(.mdebug)
diff --exclude='Entries*' -urN freebios/src/arch/alpha/config/make.base
../freebios/src/arch/alpha/config/make.base
--- freebios/src/arch/alpha/config/make.base Sat Nov 3 03:11:48 2001
+++ ../freebios/src/arch/alpha/config/make.base Fri Apr 26 17:36:07 2002
@@ -4,10 +4,15 @@
option USE_DEFAULT_LAYOUT=1
ldscript arch/alpha/config/ldscript.base USE_DEFAULT_LAYOUT
+option MAX_CPUS=1
+
makedefine LINK = ld -T ldscript.ld -o $@ crt0.o linuxbios.a
makerule all : linuxbios.rom ;
makerule linuxbios.rom: linuxbios.strip makerom ; ./makerom -l0x310000 -i7 -v
linuxbios.strip -o linuxbios.rom
+dir /src/cpu/ev6
+dir /src/config
+dir /src/boot
#makerule makerom: $(TOP)/util/makerom/makerom.c $(TOP)/util/makerom/compress.c ;
$(CC) -o makerom $(TOP)/util/makerom/makerom.c $(TOP)/util/makerom/compress.c
diff --exclude='Entries*' -urN freebios/src/arch/alpha/include/arch/smp/smp.h
../freebios/src/arch/alpha/include/arch/smp/smp.h
--- freebios/src/arch/alpha/include/arch/smp/smp.h Thu Jan 1 01:00:00 1970
+++ ../freebios/src/arch/alpha/include/arch/smp/smp.h Fri Apr 26 17:41:36 2002
@@ -0,0 +1,2 @@
+#define CPU_ENABLED 1 /* Processor is available */
+#define CPU_BOOTPROCESSOR 2 /* Processor is the BP */
diff --exclude='Entries*' -urN freebios/src/arch/alpha/lib/Config
../freebios/src/arch/alpha/lib/Config
--- freebios/src/arch/alpha/lib/Config Fri Mar 23 19:41:27 2001
+++ ../freebios/src/arch/alpha/lib/Config Fri Apr 26 16:25:47 2002
@@ -1,6 +1,7 @@
object hardwaremain.o
makedefine OBJECTS+= __divqu.o __remqu.o __divlu.o __remlu.o
+makedefine OBJECTS-1+= __divqu.o __remqu.o __divlu.o __remlu.o
makerule __divqu.o: $(TOP)/src/arch/alpha/lib/divide.S; $(CC) $(CFLAGS) -DDIV -c -o
__divqu.o $<
makerule __remqu.o: $(TOP)/src/arch/alpha/lib/divide.S; $(CC) $(CFLAGS) -DREM -c -o
__remqu.o $<
diff --exclude='Entries*' -urN freebios/src/arch/alpha/lib/hardwaremain.c
../freebios/src/arch/alpha/lib/hardwaremain.c
--- freebios/src/arch/alpha/lib/hardwaremain.c Wed Aug 8 04:45:08 2001
+++ ../freebios/src/arch/alpha/lib/hardwaremain.c Fri Apr 26 18:39:50 2002
@@ -2,17 +2,79 @@
#include <boot/elf.h>
#include <printk.h>
#include <subr.h>
+#include <boot/linuxbios_table.h>
+#include <arch/smp/smp.h>
+
+#define LINUXBIOS
+
+static unsigned long processor_map[MAX_CPUS];
+void early_mainboard_init(void);
+
+void write_tables(unsigned long totalram)
+{
+ unsigned long low_table_start, low_table_end;
+ unsigned long rom_table_start, rom_table_end;
+
+ rom_table_start = 0xf0000;
+ rom_table_end = 0xf0000;
+ /* Start low addr at 16 bytes instead of 0 because of a buglet
+ * in the generic linux bunzip code, as it tests for the a20 line.
+ */
+ low_table_start = 0;
+ low_table_end = 16;
+
+#ifdef ALPHA_SMP
+ /* copy the smp block to address 0 */
+ post_code(0x96);
+ /* The smp table must be in 0-1K, 639K-640K, or 960K-1M */
+ low_table_end = write_smp_table(low_table_end, processor_map);
+
+ /* Don't write anything in the traditional x86 BIOS data segment */
+ if (low_table_end < 0x500) {
+ low_table_end = 0x500;
+ }
+#endif
+ /* The linuxbios table must be in 0-4K or 960K-1M */
+ write_linuxbios_table(
+ processor_map, totalram,
+ low_table_start, low_table_end,
+ rom_table_start, rom_table_end);
+}
+
void hardwaremain(unsigned long signature, unsigned long memsize,
unsigned long cpu_speed)
{
+ extern void linuxbiosmain(unsigned long membase, unsigned long totalram);
+ void prepare_hwrpb(unsigned long totalram);
+
early_mainboard_init();
displayinit();
printk_info("\n\nsignature=0x%016lx memsize=0x%016lx cpu_speed=0x%016lx\n",
signature, memsize, cpu_speed);
+#ifdef OLD_DS10
elfboot(memsize >> 10 /* In kilobytes */);
printk_err("\n after elfboot\n");
+#else
+ processor_map[0] = CPU_ENABLED;
+
+ /* Set up hwrpb */
+ prepare_hwrpb(memsize);
+
+ /* Now that we have collected all of our information
+ * write our configuration tables.
+ */
+ write_tables(memsize);
+
+
+#ifdef LINUXBIOS
+ printk_info("Jumping to linuxbiosmain()...\n");
+ // we could go to argc, argv, for main but it seems like overkill.
+ post_code(0xed);
+ linuxbiosmain(0, memsize);
+#endif /* LINUXBIOS */
+#endif
}
void fatal_error(unsigned long exception_handler, unsigned long exception_at,
diff --exclude='Entries*' -urN freebios/src/arch/i386/boot/Config
../freebios/src/arch/i386/boot/Config
--- freebios/src/arch/i386/boot/Config Tue Jan 8 08:04:34 2002
+++ ../freebios/src/arch/i386/boot/Config Fri Apr 26 16:44:35 2002
@@ -1,2 +1 @@
object boot.o
-object linuxbios_table.o
diff --exclude='Entries*' -urN freebios/src/arch/i386/boot/linuxbios_table.c
../freebios/src/arch/i386/boot/linuxbios_table.c
--- freebios/src/arch/i386/boot/linuxbios_table.c Tue Jan 29 21:28:20 2002
+++ ../freebios/src/arch/i386/boot/linuxbios_table.c Fri Apr 26 16:43:14 2002
@@ -1,183 +0,0 @@
-#include <ip_checksum.h>
-#include <boot/linuxbios_tables.h>
-#include <boot/linuxbios_table.h>
-#include <printk.h>
-#include <string.h>
-
-struct lb_header *lb_table_init(unsigned long addr)
-{
- struct lb_header *header;
-
- /* 16 byte align the address */
- addr += 15;
- addr &= ~15;
-
- header = (void *)addr;
- header->signature[0] = 'L';
- header->signature[1] = 'B';
- header->signature[2] = 'I';
- header->signature[3] = 'O';
- header->header_bytes = sizeof(*header);
- header->header_checksum = 0;
- header->table_bytes = 0;
- header->table_checksum = 0;
- header->table_entries = 0;
- return header;
-}
-
-struct lb_record *lb_first_record(struct lb_header *header)
-{
- struct lb_record *rec;
- rec = (void *)(((char *)header) + sizeof(*header));
- return rec;
-}
-
-struct lb_record *lb_last_record(struct lb_header *header)
-{
- struct lb_record *rec;
- rec = (void *)(((char *)header) + sizeof(*header) + header->table_bytes);
- return rec;
-}
-
-struct lb_record *lb_next_record(struct lb_record *rec)
-{
- rec = (void *)(((char *)rec) + rec->size);
- return rec;
-}
-
-struct lb_record *lb_new_record(struct lb_header *header)
-{
- struct lb_record *rec;
- rec = lb_last_record(header);
- if (header->table_entries) {
- header->table_bytes += rec->size;
- }
- rec = lb_last_record(header);
- header->table_entries++;
- rec->tag = LB_TAG_UNUSED;
- rec->size = sizeof(*rec);
- return rec;
-}
-
-
-struct lb_memory *lb_memory(struct lb_header *header)
-{
- struct lb_record *rec;
- struct lb_memory *mem;
- rec = lb_new_record(header);
- mem = (struct lb_memory *)rec;
- mem->tag = LB_TAG_MEMORY;
- mem->size = sizeof(*mem);
- return mem;
-}
-
-/* Some version of gcc have problems with 64 bit types so
- * take an unsigned long instead of a uint64_t for now.
- */
-void lb_memory_range(struct lb_memory *mem,
- uint32_t type, unsigned long start, unsigned long size)
-{
- int entries;
- entries = (mem->size - sizeof(*mem))/sizeof(mem->map[0]);
- mem->map[entries].start = start;
- mem->map[entries].size = size;
- mem->map[entries].type = type;
- mem->size += sizeof(mem->map[0]);
-}
-
-static void lb_reserve_table_memory(struct lb_header *head)
-{
- struct lb_record *last_rec;
- struct lb_memory *mem;
- uint64_t start;
- uint64_t end;
- int i, entries;
-
- last_rec = lb_last_record(head);
- mem = get_lb_mem();
- start = (unsigned long)head;
- end = (unsigned long)last_rec;
- entries = (mem->size - sizeof(*mem))/sizeof(mem->map[0]);
- /* Resize the right two memory areas so this table is in
- * a reserved area of memory. Everything has been carefully
- * setup so that is all we need to do.
- */
- for(i = 0; i < entries; i++ ) {
- uint64_t map_start = mem->map[i].start;
- uint64_t map_end = map_start + mem->map[i].size;
- /* Does this area need to be expanded? */
- if (map_end == start) {
- mem->map[i].size = end - map_start;
- }
- /* Does this area need to be contracted? */
- else if (map_start == start) {
- mem->map[i].start = end;
- mem->map[i].size = map_end - end;
- }
- }
-}
-
-unsigned long lb_table_fini(struct lb_header *head)
-{
- struct lb_record *rec, *first_rec;
- rec = lb_last_record(head);
- if (head->table_entries) {
- head->table_bytes += rec->size;
- }
- lb_reserve_table_memory(head);
- first_rec = lb_first_record(head);
- head->table_checksum = compute_ip_checksum(first_rec, head->table_bytes);
- head->header_checksum = 0;
- head->header_checksum = compute_ip_checksum(head, sizeof(*head));
- printk_debug("Wrote linuxbios table at: %p - %p\n",
- head, rec);
- return (unsigned long)rec;
-}
-
-
-/* Routines to extract part so the linuxBIOS table or
- * information from the linuxBIOS table after we have written it.
- * Currently get_lb_mem relies on a global we can change the
- * implementaiton.
- */
-static struct lb_memory *mem_ranges = 0;
-struct lb_memory *get_lb_mem(void)
-{
- return mem_ranges;
-}
-
-unsigned long write_linuxbios_table(
- unsigned long *processor_map,
- unsigned long totalram,
- unsigned long low_table_start, unsigned long low_table_end,
- unsigned long rom_table_start, unsigned long rom_table_end)
-{
- struct lb_header *head;
- struct lb_memory *mem;
- struct lb_record *rec_dest, *rec_src;
-
- head = lb_table_init(low_table_end);
- low_table_end = (unsigned long)head;
-#if HAVE_OPTION_TABLE == 1
- /* Write the option config table... */
- rec_dest = lb_new_record(head);
- rec_src = (struct lb_record *)&option_table;
- memcpy(rec_dest, rec_src, rec_src->size);
-#endif
- mem = lb_memory(head);
- mem_ranges = mem;
- /* Reserve our tables in low memory */
- lb_memory_range(mem, LB_MEM_RESERVED, low_table_start, low_table_end -
low_table_start);
- lb_memory_range(mem, LB_MEM_RAM, low_table_end, 640*1024 - low_table_end);
- /* Reserve the whole dos BIOS reserved area, we can probably do
- * better but it isn't too important right now
- */
- lb_memory_range(mem, LB_MEM_RESERVED, 0x000a0000, 0x00060000);
- /* Now show all of memory */
- lb_memory_range(mem, LB_MEM_RAM, 0x00100000, (totalram - 1024) << 10);
-
- low_table_end = lb_table_fini(head);
-
- /* Remember where my valid memory ranges are */
- return low_table_end;
-}
Binary files freebios/src/arch/i386/config/.ldscript.base.swp and
../freebios/src/arch/i386/config/.ldscript.base.swp differ
diff --exclude='Entries*' -urN freebios/src/arch/i386/config/make.base
../freebios/src/arch/i386/config/make.base
--- freebios/src/arch/i386/config/make.base Wed Jan 16 06:54:19 2002
+++ ../freebios/src/arch/i386/config/make.base Fri Apr 26 17:12:27 2002
@@ -21,6 +21,9 @@
dir /src/config
+# We need linuxbios table
+dir /src/boot
+
makerule all : romimage ;
makerule floppy : all ; mcopy -o romimage a:
makerule romimage : linuxbios.rom payload.block ; cat payload.block linuxbios.rom >
romimage
diff --exclude='Entries*' -urN freebios/src/boot/Config ../freebios/src/boot/Config
--- freebios/src/boot/Config Tue Jan 8 08:04:35 2002
+++ ../freebios/src/boot/Config Fri Apr 26 17:22:43 2002
@@ -0,0 +1,2 @@
+object linuxbios_table.o
+
diff --exclude='Entries*' -urN freebios/src/boot/linuxbios_table.c
../freebios/src/boot/linuxbios_table.c
--- freebios/src/boot/linuxbios_table.c Thu Jan 1 01:00:00 1970
+++ ../freebios/src/boot/linuxbios_table.c Tue Jan 29 21:28:20 2002
@@ -0,0 +1,183 @@
+#include <ip_checksum.h>
+#include <boot/linuxbios_tables.h>
+#include <boot/linuxbios_table.h>
+#include <printk.h>
+#include <string.h>
+
+struct lb_header *lb_table_init(unsigned long addr)
+{
+ struct lb_header *header;
+
+ /* 16 byte align the address */
+ addr += 15;
+ addr &= ~15;
+
+ header = (void *)addr;
+ header->signature[0] = 'L';
+ header->signature[1] = 'B';
+ header->signature[2] = 'I';
+ header->signature[3] = 'O';
+ header->header_bytes = sizeof(*header);
+ header->header_checksum = 0;
+ header->table_bytes = 0;
+ header->table_checksum = 0;
+ header->table_entries = 0;
+ return header;
+}
+
+struct lb_record *lb_first_record(struct lb_header *header)
+{
+ struct lb_record *rec;
+ rec = (void *)(((char *)header) + sizeof(*header));
+ return rec;
+}
+
+struct lb_record *lb_last_record(struct lb_header *header)
+{
+ struct lb_record *rec;
+ rec = (void *)(((char *)header) + sizeof(*header) + header->table_bytes);
+ return rec;
+}
+
+struct lb_record *lb_next_record(struct lb_record *rec)
+{
+ rec = (void *)(((char *)rec) + rec->size);
+ return rec;
+}
+
+struct lb_record *lb_new_record(struct lb_header *header)
+{
+ struct lb_record *rec;
+ rec = lb_last_record(header);
+ if (header->table_entries) {
+ header->table_bytes += rec->size;
+ }
+ rec = lb_last_record(header);
+ header->table_entries++;
+ rec->tag = LB_TAG_UNUSED;
+ rec->size = sizeof(*rec);
+ return rec;
+}
+
+
+struct lb_memory *lb_memory(struct lb_header *header)
+{
+ struct lb_record *rec;
+ struct lb_memory *mem;
+ rec = lb_new_record(header);
+ mem = (struct lb_memory *)rec;
+ mem->tag = LB_TAG_MEMORY;
+ mem->size = sizeof(*mem);
+ return mem;
+}
+
+/* Some version of gcc have problems with 64 bit types so
+ * take an unsigned long instead of a uint64_t for now.
+ */
+void lb_memory_range(struct lb_memory *mem,
+ uint32_t type, unsigned long start, unsigned long size)
+{
+ int entries;
+ entries = (mem->size - sizeof(*mem))/sizeof(mem->map[0]);
+ mem->map[entries].start = start;
+ mem->map[entries].size = size;
+ mem->map[entries].type = type;
+ mem->size += sizeof(mem->map[0]);
+}
+
+static void lb_reserve_table_memory(struct lb_header *head)
+{
+ struct lb_record *last_rec;
+ struct lb_memory *mem;
+ uint64_t start;
+ uint64_t end;
+ int i, entries;
+
+ last_rec = lb_last_record(head);
+ mem = get_lb_mem();
+ start = (unsigned long)head;
+ end = (unsigned long)last_rec;
+ entries = (mem->size - sizeof(*mem))/sizeof(mem->map[0]);
+ /* Resize the right two memory areas so this table is in
+ * a reserved area of memory. Everything has been carefully
+ * setup so that is all we need to do.
+ */
+ for(i = 0; i < entries; i++ ) {
+ uint64_t map_start = mem->map[i].start;
+ uint64_t map_end = map_start + mem->map[i].size;
+ /* Does this area need to be expanded? */
+ if (map_end == start) {
+ mem->map[i].size = end - map_start;
+ }
+ /* Does this area need to be contracted? */
+ else if (map_start == start) {
+ mem->map[i].start = end;
+ mem->map[i].size = map_end - end;
+ }
+ }
+}
+
+unsigned long lb_table_fini(struct lb_header *head)
+{
+ struct lb_record *rec, *first_rec;
+ rec = lb_last_record(head);
+ if (head->table_entries) {
+ head->table_bytes += rec->size;
+ }
+ lb_reserve_table_memory(head);
+ first_rec = lb_first_record(head);
+ head->table_checksum = compute_ip_checksum(first_rec, head->table_bytes);
+ head->header_checksum = 0;
+ head->header_checksum = compute_ip_checksum(head, sizeof(*head));
+ printk_debug("Wrote linuxbios table at: %p - %p\n",
+ head, rec);
+ return (unsigned long)rec;
+}
+
+
+/* Routines to extract part so the linuxBIOS table or
+ * information from the linuxBIOS table after we have written it.
+ * Currently get_lb_mem relies on a global we can change the
+ * implementaiton.
+ */
+static struct lb_memory *mem_ranges = 0;
+struct lb_memory *get_lb_mem(void)
+{
+ return mem_ranges;
+}
+
+unsigned long write_linuxbios_table(
+ unsigned long *processor_map,
+ unsigned long totalram,
+ unsigned long low_table_start, unsigned long low_table_end,
+ unsigned long rom_table_start, unsigned long rom_table_end)
+{
+ struct lb_header *head;
+ struct lb_memory *mem;
+ struct lb_record *rec_dest, *rec_src;
+
+ head = lb_table_init(low_table_end);
+ low_table_end = (unsigned long)head;
+#if HAVE_OPTION_TABLE == 1
+ /* Write the option config table... */
+ rec_dest = lb_new_record(head);
+ rec_src = (struct lb_record *)&option_table;
+ memcpy(rec_dest, rec_src, rec_src->size);
+#endif
+ mem = lb_memory(head);
+ mem_ranges = mem;
+ /* Reserve our tables in low memory */
+ lb_memory_range(mem, LB_MEM_RESERVED, low_table_start, low_table_end -
+low_table_start);
+ lb_memory_range(mem, LB_MEM_RAM, low_table_end, 640*1024 - low_table_end);
+ /* Reserve the whole dos BIOS reserved area, we can probably do
+ * better but it isn't too important right now
+ */
+ lb_memory_range(mem, LB_MEM_RESERVED, 0x000a0000, 0x00060000);
+ /* Now show all of memory */
+ lb_memory_range(mem, LB_MEM_RAM, 0x00100000, (totalram - 1024) << 10);
+
+ low_table_end = lb_table_fini(head);
+
+ /* Remember where my valid memory ranges are */
+ return low_table_end;
+}
diff --exclude='Entries*' -urN freebios/src/lib/Config ../freebios/src/lib/Config
--- freebios/src/lib/Config Tue Jan 22 18:51:31 2002
+++ ../freebios/src/lib/Config Fri Apr 26 16:57:24 2002
@@ -16,4 +16,4 @@
object floppy_subr.o
object delay.o
object fallback_boot.o HAVE_FALLBACK_BOOT
-object compute_ip_checksum.o
\ No newline at end of file
+object compute_ip_checksum.o
diff --exclude='Entries*' -urN freebios/src/mainboard/compaq/ds10/config.example
../freebios/src/mainboard/compaq/ds10/config.example
--- freebios/src/mainboard/compaq/ds10/config.example Thu Jan 1 01:00:00 1970
+++ ../freebios/src/mainboard/compaq/ds10/config.example Fri Apr 26 17:58:43
+2002
@@ -0,0 +1,27 @@
+# This will make a target directory of ./ds10
+# Note that this is RELATIVE TO WHERE YOU ARE WHEN YOU RUN THE
+# CONFIG TOOL. Make it absolute if you like
+target ds10
+
+mainboard compaq/ds10
+
+# Enable Serial Console for debugging
+# It will come up at 115200,8n1
+option SERIAL_CONSOLE=1
+
+# Enable SROM_CONSOLE
+# This uses the SROM serial debug port at 9600 baud
+option SROM_CONSOLE
+
+#option USE_CACHE_RAM=0
+option USE_ELF_BOOT=1
+option USE_TSUNAMI_TIGBUS_ROM=1
+option TIG_KERNEL_START=0x20000
+
+# Path to your kernel (vmlinux)
+# NOTE; you need a path to your test12 kernel here.
+#linux ~/projects/linux/linux-2.4.0-test9.eb5.4
+
+# Kernel command line parameters
+commandline console=ttyS0,115200 root=/dev/nfs alpha_mv=Webbrick
+ip=192.168.0.252:192.168.0.253::255.255.255.0:ds10:eth0:off
+nfsroot=/mnt/hdb/images/alpha-nfs-boot
+