Difference between revisions of "DFI NF570 Build Tutorial"

From coreboot
Jump to: navigation, search
m (Hm, "used with permission" it seems. Still, pretty tiny and useless IMHO.)
 
(46 intermediate revisions by one user not shown)
Line 1: Line 1:
This page describes how to use coreboot on the '''[http://us.dfi.com.tw/Product/xx_product_spec_details_r_us.jsp?PRODUCT_ID=5115&CATEGORY_TYPE=INFINITY&SITE=US DFI Infinity NF570 series]''' mainboard. It is maintained by [[User:ChrisLingard|Chris Lingard]].
+
This page describes how to use coreboot on the '''[http://us.dfi.com.tw/Product/xx_product_spec_details_r_us.jsp?PRODUCT_ID=5115&CATEGORY_TYPE=INFINITY&SITE=US DFI Infinity NF570]''' series mainboard. It is maintained by [[User:ChrisLingard|Chris Lingard]].
  
= Status ==
+
Though not officially adopted by the coreboot team, I am maintaining a patch for coreboot-v2, that will add this motherboard to the options.
  
 +
This board would be too easy for any experienced corebooter; but it is an ideal entry point for someone who has never hot swapped a chip before, nor flashed a BIOS.
 +
 +
After much failure trying to get a motherboard modified with a switch and a second BIOS socket, I found one with a socketed BIOS.  It comes in three flavors:
 +
 +
NF570 SLI-M2/G, NS570-M2/G and NF550-M2/G
 +
 +
The designers have chosen an identical chip set to the Gigabyte M57SLI, so I only had to make trivial code changes for it to work to the standard shown below.  All credit to coreboot's M57SLI team.
 +
 +
The BIOS chip is bottom left, below, and slightly left of the battery.
 +
 +
 +
== Status ==
 
{{Status|
 
{{Status|
  
 
|CPU_status = OK
 
|CPU_status = OK
|CPU_comments = I'm using: CPU model AMD Athlon(tm) X2 dual core Processor 6000+
+
|CPU_comments = AMD Athlon(tm) dual core Processor 6000+
 
|CPU_L1_status = OK
 
|CPU_L1_status = OK
|CPU_L1_comments = CPU: L1 Cache 64K (64 bytes/line)
+
|CPU_L1_comments = CPU: L1 Cache 64K (each core)
 
|CPU_L2_status = OK
 
|CPU_L2_status = OK
|CPU_L2_comments = CPU: L2 1024K (64 bytes/line}
+
|CPU_L2_comments = CPU: L2 1024K (each core)
 
|CPU_L3_status = N/A
 
|CPU_L3_status = N/A
 
|CPU_multiple_status = N/A
 
|CPU_multiple_status = N/A
Line 16: Line 28:
 
|CPU_multicore_comments = Build packages that put the machine under a heavy load; gcc, linux and glibc were fine
 
|CPU_multicore_comments = Build packages that put the machine under a heavy load; gcc, linux and glibc were fine
  
RAM_DDR2_status = 4GB, ( 2 by 2GB cards), 667
+
|RAM_DDR2_status = 4GB, OK
 
+
|RAM_DDR2_status = 4GB, ( 2 by 2GB cards), 667
 
IDE_status = OK
 
IDE_status = OK
 
|IDE_comments = Tested: Filo reads (hda1)/filo/menu.lst
 
|IDE_comments = Tested: Filo reads (hda1)/filo/menu.lst
Line 27: Line 39:
 
|SATA_status = OK
 
|SATA_status = OK
 
|SATA_comments = Tested: CD/DVD RW is sata, yet to test other things
 
|SATA_comments = Tested: CD/DVD RW is sata, yet to test other things
|USB_status = Not tested yet
+
|USB_status = WIP
|USB_comments = Both ehci_hcd and ohci_hcd loded bu udev/kernel
+
|USB_comments = Both ehci_hcd and ohci_hcd loaded by udev/kernel
 
|Onboard_VGA_status = N/A
 
|Onboard_VGA_status = N/A
 
|Onboard_ethernet_status = OK
 
|Onboard_ethernet_status = OK
 
|Onboard_audio_status = OK
 
|Onboard_audio_status = OK
|Onboard_modem_status = Not plugged speakers in, but it is get another Intel HDA. So should work
+
|Onboard_modem_status = N/A
 
|Onboard_firewire_status = Untested
 
|Onboard_firewire_status = Untested
 
|Smartcard_status = N/A
 
|Smartcard_status = N/A
Line 38: Line 50:
 
|Onboard_PCMCIA_status = N/A
 
|Onboard_PCMCIA_status = N/A
  
ISA_cards_status = N/A
+
|ISA_cards_status = N/A
 
|AMR_cards_status = N/A
 
|AMR_cards_status = N/A
 
|AGP_cards_status = N/A
 
|AGP_cards_status = N/A
|PCI_cards_status = OK
+
|PCI_cards_status = WIP
 
|PCI_cards_comments = Not tested yet
 
|PCI_cards_comments = Not tested yet
|PCIE_x1_status = OK
+
|PCIE_x1_status = N/A
|PCIE_x1_comments = Not tested yet
+
|PCIE_x1_comments =  
 
|PCIE_x2_status = N/A
 
|PCIE_x2_status = N/A
 
|PCIE_x4_status = N/A
 
|PCIE_x4_status = N/A
 
|PCIE_x8_status = N/A
 
|PCIE_x8_status = N/A
 
|PCIE_x16_status = OK
 
|PCIE_x16_status = OK
|PCIE_x16_comments = Tested: PCI Express x16 VGA card. ati clone Radion card workd wonderfully
+
|PCIE_x16_comments = Tested: PCI Express x16 VGA card. ati clone Radion card works wonderfully
 
|PCIE_x32_status = N/A
 
|PCIE_x32_status = N/A
 
|HTX_status = N/A
 
|HTX_status = N/A
Line 62: Line 74:
 
|PS2_mouse_status = OK
 
|PS2_mouse_status = OK
 
|Game_port_status = Unknown
 
|Game_port_status = Unknown
|Game_port_comments = I think this is N/A
+
|Game_port_comments = I know nothing about these
 
|IR_status = N/A
 
|IR_status = N/A
 
|Speaker_status = OK
 
|Speaker_status = OK
Line 81: Line 93:
 
|LEDs_status = OK
 
|LEDs_status = OK
  
LEDs_comments = Got a stupid standby LED, yet to find how to cut power completely
+
|LEDs_comments = Got a stupid standby LED, yet to find how to cut power completely
 
|HPET_status = Unknown
 
|HPET_status = Unknown
 
|HPET_comments = Unknown
 
|HPET_comments = Unknown
Line 91: Line 103:
 
|Flashrom_status = OK
 
|Flashrom_status = OK
 
|Flashrom_comments = Works fine with coreboot and factory BIOS
 
|Flashrom_comments = Works fine with coreboot and factory BIOS
 
 
 
 
''lspci -tvnn'''
 
 
[0000:00]-+-00.0  nVidia Corporation MCP55 Memory Controller [10de:0369]
 
          +-01.0  nVidia Corporation MCP55 LPC Bridge [10de:0362]
 
          +-01.1  nVidia Corporation MCP55 SMBus [10de:0368]
 
          +-01.2  nVidia Corporation MCP55 Memory Controller [10de:036a]
 
          +-01.3  nVidia Corporation MCP55 SMU [10de:036b]
 
          +-02.0  nVidia Corporation MCP55 USB Controller [10de:036c]
 
          +-02.1  nVidia Corporation MCP55 USB Controller [10de:036d]
 
          +-04.0  nVidia Corporation MCP55 IDE [10de:036e]
 
          +-05.0  nVidia Corporation MCP55 SATA Controller [10de:037f]
 
          +-05.1  nVidia Corporation MCP55 SATA Controller [10de:037f]
 
          +-05.2  nVidia Corporation MCP55 SATA Controller [10de:037f]
 
          +-06.0-[0000:01]----07.0  VIA Technologies, Inc. VT6306 Fire II IEEE 1394 OHCI Link Layer Controller [1106:3044]
 
          +-06.1  nVidia Corporation MCP55 High Definition Audio [10de:0371]
 
          +-08.0  nVidia Corporation MCP55 Ethernet [10de:0373]
 
          +-0b.0-[0000:02]--
 
          +-0c.0-[0000:03]--
 
          +-0d.0-[0000:04]--
 
          +-0e.0-[0000:05]--
 
          +-0f.0-[0000:06]--+-00.0  ATI Technologies Inc RV630 [Radeon HD 2600XT] [1002:9588]
 
          |                \-00.1  ATI Technologies Inc RV630/M76 audio device [Radeon HD 2600 Series] [1002:aa08]
 
          +-18.0  Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] HyperTransport Technology Configuration [1022:1100]
 
          +-18.1  Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Address Map [1022:1101]
 
          +-18.2  Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] DRAM Controller [1022:1102]
 
          \-18.3  Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control [1022:1103]
 
 
 
 
  
 
|CPU_L1_status = OK
 
|CPU_L1_status = OK
|CPU_L1_comments = CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (64 bytes/line)
+
|CPU_L1_comments = CPU: L1 Cache: 64K (64 bytes/line) (each core)
 
|CPU_L2_status = OK
 
|CPU_L2_status = OK
|CPU_L2_comments = CPU: L2 Cache: 256K (64 bytes/line)
+
|CPU_L2_comments = CPU: L2 Cache: 1MB (each core)
 
|CPU_L3_status = N/A
 
|CPU_L3_status = N/A
 
|CPU_multiple_status = N/A
 
|CPU_multiple_status = N/A
Line 139: Line 118:
 
|RAM_SODIMM_status = N/A
 
|RAM_SODIMM_status = N/A
 
|RAM_DDR_status = N/A
 
|RAM_DDR_status = N/A
|RAM_DDR_comments = N/A
+
|RAM_DDR_comments =  
 
|RAM_DDR2_status = OK
 
|RAM_DDR2_status = OK
|RAM_DDR2_comments = Using  2 by 2GB 667
+
|RAM_DDR2_comments = Using  2 cards of 2GB 667
 
|RAM_DDR3_status = N/A
 
|RAM_DDR3_status = N/A
 
|RAM_dualchannel_status = Untested
 
|RAM_dualchannel_status = Untested
|RAM_ecc_status = Untested
+
|RAM_ecc_status = N/A
  
 
|IDE_status = OK
 
|IDE_status = OK
|IDE_comments = filo gets its menu from /boot/filo/menu.lst
+
|IDE_comments = My standard Seagate as system disk
 
|IDE_CF_status =  
 
|IDE_CF_status =  
 
|IDE_CF_comments =  
 
|IDE_CF_comments =  
Line 155: Line 134:
 
|SATA_status = OK
 
|SATA_status = OK
 
|SATA_comments = Tested: SATA port 1 , that is my CD/DVD RW.
 
|SATA_comments = Tested: SATA port 1 , that is my CD/DVD RW.
|USB_status = Untested
+
|USB_status = WIP
|USB_comments = Should be OK.all the right modules are loaded by udev/kernel
+
|USB_comments = Should be OK.all the right modules are loaded by kernel/udev
 +
 
 
|Onboard_VGA_status = N/A
 
|Onboard_VGA_status = N/A
 
|Onboard_ethernet_status = OK
 
|Onboard_ethernet_status = OK
Line 171: Line 151:
 
|PCI_cards_status = Untested
 
|PCI_cards_status = Untested
 
|PCI_cards_comments =  
 
|PCI_cards_comments =  
|PCIE_x1_status = OK
+
|PCIE_x1_status = Untested
 
|PCIE_x1_comments =  
 
|PCIE_x1_comments =  
|PCIE_x2_status = Untested
+
|PCIE_x2_status = N/A
 
|PCIE_x4_status = N/A
 
|PCIE_x4_status = N/A
 
|PCIE_x8_status = N/A
 
|PCIE_x8_status = N/A
Line 202: Line 182:
 
|CPUfreq_comments =  
 
|CPUfreq_comments =  
 
|Powersave_status = N/A
 
|Powersave_status = N/A
|ACPI_status = Untested
+
|ACPI_status = WIP
|ACPI_comments =  
+
|ACPI_comments = The Linux kernel does the right thing
 
|Reboot_status = OK
 
|Reboot_status = OK
|Poweroff_status = Untested
+
|Poweroff_status = OK
 
|LEDs_status = OK
 
|LEDs_status = OK
|LEDs_comments = There's a power-on LED on the board PCB, it lights up when the board is powered up.
+
|LEDs_comments =  
 
|HPET_status = Untested
 
|HPET_status = Untested
 
|HPET_comments =  
 
|HPET_comments =  
Line 216: Line 196:
 
|WakeOnMouse_status = Untested
 
|WakeOnMouse_status = Untested
 
|Flashrom_status = OK
 
|Flashrom_status = OK
|Flashrom_comments = Works fine with coreboot and with the proprietary BIOS. The board/chipset/flashrom can decode 1MB chips fine.
+
|Flashrom_comments = Works fine with coreboot and with the proprietary BIOS.
  
 
}}
 
}}
Line 222: Line 202:
 
== Hardware ==
 
== Hardware ==
  
* AMD K8
+
* AMD Athlon(tm) 64 dual core
* VIA K8T890
+
* Nvidea MCP55
* VIA VT8237R
+
* ITE IT8716F
* Winbond W83627EHF
+
* PMC Pm49FL004
  
 
'''lspci -tvnn'''
 
'''lspci -tvnn'''
  
  -[0000:00]-+-00.0  VIA Technologies, Inc. K8T890 Host Bridge [1106:0238]
+
  -[0000:00]-+-00.0  nVidia Corporation MCP55 Memory Controller [10de:0369]
            +-00.1 VIA Technologies, Inc. K8T890 Host Bridge [1106:1238]
+
          +-01.0 nVidia Corporation MCP55 LPC Bridge [10de:0362]
            +-00.2 VIA Technologies, Inc. K8T890 Host Bridge [1106:2238]
+
          +-01.1 nVidia Corporation MCP55 SMBus [10de:0368]
            +-00.3 VIA Technologies, Inc. K8T890 Host Bridge [1106:3238]
+
          +-01.2 nVidia Corporation MCP55 Memory Controller [10de:036a]
            +-00.4 VIA Technologies, Inc. K8T890 Host Bridge [1106:4238]
+
          +-01.3 nVidia Corporation MCP55 SMU [10de:036b]
            +-00.5 VIA Technologies, Inc. K8T890 I/O APIC Interrupt Controller [1106:5238]
+
          +-02.0 nVidia Corporation MCP55 USB Controller [10de:036c]
            +-00.7 VIA Technologies, Inc. K8T890 Host Bridge [1106:7238]
+
          +-02.1 nVidia Corporation MCP55 USB Controller [10de:036d]
            +-01.0-[0000:01]--
+
          +-04.0 nVidia Corporation MCP55 IDE [10de:036e]
            +-02.0-[0000:02]--
+
          +-05.0 nVidia Corporation MCP55 SATA Controller [10de:037f]
            +-03.0-[0000:03]--
+
          +-05.1 nVidia Corporation MCP55 SATA Controller [10de:037f]
            +-03.1-[0000:04]--
+
          +-05.2  nVidia Corporation MCP55 SATA Controller [10de:037f]
            +-03.2-[0000:05]----00.0 Marvell Technology Group Ltd. 88E8053 PCI-E Gigabit Ethernet Controller [11ab:4362]
+
          +-06.0-[0000:01]----07.0  VIA Technologies, Inc. VT6306 Fire II IEEE 1394 OHCI Link Layer Controller [1106:3044]
            +-03.3-[0000:06]--
+
          +-06.1  nVidia Corporation MCP55 High Definition Audio [10de:0371]
            +-07.0 Marvell Technology Group Ltd. 88W8310 and 88W8000G [Libertas] 802.11g client chipset [11ab:1fa7]
+
          +-08.0  nVidia Corporation MCP55 Ethernet [10de:0373]
            +-08.0 Texas Instruments TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link) [104c:8023]
+
          +-0b.0-[0000:02]--
            +-0f.0  VIA Technologies, Inc. VIA VT6420 SATA RAID Controller [1106:3149]
+
          +-0c.0-[0000:03]--
            +-0f.1  VIA Technologies, Inc. VT82C586A/B/VT82C686/A/B/VT823x/A/C PIPC Bus Master IDE [1106:0571]
+
          +-0d.0-[0000:04]--
            +-10.0  VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller [1106:3038]
+
          +-0e.0-[0000:05]--
            +-10.1  VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller [1106:3038]
+
          +-0f.0-[0000:06]--+-00.0 ATI Technologies Inc RV630 [Radeon HD 2600XT] [1002:9588]
            +-10.2  VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller [1106:3038]
+
          |                \-00.1 ATI Technologies Inc RV630/M76 audio device [Radeon HD 2600 Series] [1002:aa08]
            +-10.3  VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller [1106:3038]
+
          +-18.0  Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] HyperTransport Technology Configuration [1022:1100]
            +-10.4  VIA Technologies, Inc. USB 2.0 [1106:3104]
+
          +-18.1  Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Address Map [1022:1101]
            +-11.0 VIA Technologies, Inc. VT8237 ISA bridge [KT600/K8T800/K8T890 South] [1106:3227]
+
          +-18.2  Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] DRAM Controller [1022:1102]
            +-11.5 VIA Technologies, Inc. VT8233/A/8235/8237 AC97 Audio Controller [1106:3059]
+
          \-18.3  Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control [1022:1103]
            +-11.6 VIA Technologies, Inc. AC'97 Modem Controller [1106:3068]
+
 
            +-18.0  Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] HyperTransport Technology Configuration [1022:1100]
+
 
            +-18.1  Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Address Map [1022:1101]
+
 
            +-18.2  Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] DRAM Controller [1022:1102]
+
== The payload ==
            \-18.3  Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control [1022:1103]
+
 
 +
See the documentation about coreboot, and why it needs a payload.
 +
 
 +
=== filo ===
 +
 
 +
Copy your /boot/grub directory to /boot/filo.  This stops any interaction between grub and filo.  Your future BIOS will boot according to /boot/filo/menu.lst, and the hard disk will boot according to /boot/grub/menu.lst.
 +
Get and compile filo-0.5.  Here is my configuration file
 +
 
 +
<pre>
 +
 
 +
 
 +
# Do NOT add spaces or comments at the end of option lines.
 +
# It confuses some versions of make.
 +
 
 +
# Use grub instead of autoboot?
 +
USE_GRUB = 1
 +
 
 +
# Grub menu.lst path
 +
MENULST_FILE = "hda1:/filo/menu.lst"
 +
# Via Epia-MII CF boot:
 +
#MENULST_FILE = "hde1:/boot/filo/menu.lst"
 +
 
 +
# time before default menu.lst is chosen. Set to 0 to ignore
 +
MENULST_TIMEOUT = 0
 +
 
 +
# Image filename for automatic boot and optional command line parameter
 +
AUTOBOOT_FILE = "hda1:/vmlinuz root=/dev/hda3 console=tty0 console=ttyS0,115200"
 +
#AUTOBOOT_FILE = "mem@0xfff80000"
 +
#AUTOBOOT_FILE = "hde1@0"
 +
#AUTOBOOT_FILE = "uda1:/vmlinuz.elf"
 +
#AUTOBOOT_FILE = "flashb@0x00400000,0x154a00 console=tty0 console=ttyS0,115200"
 +
 
 +
# Time in second before booting AUTOBOOT_FILE
 +
AUTOBOOT_DELAY = 2
 +
 
 +
# Driver for hard disk, CompactFlash, and CD-ROM on IDE bus
 +
IDE_DISK = 1
 +
 
 +
# Add a short delay when polling status registers
 +
# (required on some broken SATA controllers)
 +
# NOTE: Slows down access significantly, so disable
 +
# whenever possible.
 +
#IDE_DISK_POLL_DELAY = 1
 +
 
 +
# SATA drives seem to have problems reporting their spinup.
 +
# This will delay FILO start by 5s so the disks have some time to settle.
 +
# (required on some broken SATA controllers)
 +
# NOTE: Slows down access significantly, so disable
 +
# whenever possible.
 +
#SLOW_SATA = 1
 +
 
 +
# Use PCMCIA compact flash on Via Epia MII10000 and MII6000E
 +
# This device is referred to as hde.
 +
#PCMCIA_CF = 1
 +
 
 +
# Driver for USB Storage
 +
#USB_DISK = 1
 +
 
 +
# Driver for NAND flash storage
 +
#FLASH_DISK = 1
 +
 
 +
# VGA text console
 +
VGA_CONSOLE = 1
 +
PC_KEYBOARD = 1
 +
 
 +
# Serial console
 +
SERIAL_CONSOLE = 1
 +
SERIAL_IOBASE = 0x3f8
 +
# if SERIAL_SPEED is commented out, the speed will not be changed.
 +
#SERIAL_SPEED = 115200
 +
 
 +
# Filesystems
 +
FSYS_EXT2FS = 1
 +
#FSYS_FAT = 1
 +
#FSYS_JFS = 1
 +
#FSYS_MINIX = 1
 +
#FSYS_REISERFS = 1
 +
#FSYS_XFS = 1
 +
FSYS_ISO9660 = 1
 +
#FSYS_CRAMFS = 1
 +
#FSYS_SQUASHFS = 1
 +
 
 +
# Support for boot disk image in bootable CD-ROM (El Torito)
 +
ELTORITO = 1
 +
 
 +
# PCI support
 +
SUPPORT_PCI = 1
 +
 
 +
# Enable this to scan PCI busses above bus 0
 +
# AMD64 based boards do need this.
 +
PCI_BRUTE_SCAN = 1
 +
 
 +
# Sound support (needs SUPPORT_PCI)
 +
#SUPPORT_SOUND = 1
 +
 
 +
# Sound drivers
 +
#VIA_SOUND = 1
 +
 
 +
# Debugging
 +
#DEBUG_ALL = 1
 +
#DEBUG_ELFBOOT = 1
 +
#DEBUG_ELFNOTE = 1
 +
#DEBUG_LINUXBIOS = 1
 +
#DEBUG_MALLOC = 1
 +
#DEBUG_MULTIBOOT = 1
 +
#DEBUG_SEGMENT = 1
 +
#DEBUG_SYS_INFO = 1
 +
#DEBUG_TIMER = 1
 +
#DEBUG_BLOCKDEV = 1
 +
#DEBUG_PCI = 1
 +
#DEBUG_VIA_SOUND = 1
 +
#DEBUG_LINUXLOAD = 1
 +
#DEBUG_IDE = 1
 +
#DEBUG_USB = 1
 +
#DEBUG_ELTORITO = 1
 +
#DEBUG_FLASH = 1
 +
#DEBUG_ARTECBOOT = 1
 +
 
 +
 
 +
# i386 options
 +
 
 +
# Loader for standard Linux kernel image, a.k.a. /vmlinuz
 +
LINUX_LOADER = 1
 +
 
 +
# Loader for Windows CE image
 +
 
 +
 
 +
# Leave disabled for now. Not supported.
 +
#WINCE_LOADER = 1
 +
 
 +
# Artecboot loader support
 +
#ARTEC_BOOT = 1
 +
 
 +
# Boot FILO from Multiboot loader (eg. GRUB)
 +
MULTIBOOT_IMAGE = 1
 +
 
 +
</pre>
 +
 
 +
The only ones that I changed are the MULTIBOOT_IMAGE-1.  This  makes filo build a bootable filo.elf
 +
 
 +
 
 +
And MENULIST_FILE = "hda1:/filo/menu.lst", you set up this file above; this is what will be used when you use coreboot.  Note that /boot is the first partition on my disk.
 +
 
 +
If boot is a directory in the root partition and suppose this is the third partition, then this would become MENULIST_FILE = "hda3:/boot/filo/menu.lst"
 +
 
 +
Build your filo.elf and copy it into /boot.  Boot it via the grub command line and make sure it works.
 +
 
 +
=== Grub2 ===
 +
 
 +
There are hints and a wiki page, but no proper documentation.
 +
 
 +
Grub2 did not work for me.  It did show a help screen, but did not boot the system,  If you embed a menu into the grub2 payload, it just reboots the machine, after showing the "Grub2 Welcome" message
 +
 
 +
Since you get the source via svn, I probably caught it on a bad day; hopefully they will get it to work soon.
 +
 
 +
 
 +
=== A Linux Payload ===
 +
 
 +
This was a lot easier than I thought it would be.  You need to buy some SST49LF160C chips, So 16 M Bits gives you 2M bytes.  There do not seem to be any bigger chips.
 +
 
 +
You need a system with a small kernel.  The first system on this machine is "Linux from Scratch", and with careful pruning I have got the kernel down to  around 1.8M bytes.
 +
 
 +
Get the program mkelfImage, and set up a command something like
 +
 
 +
<pre>
 +
 
 +
/usr/sbin/mkelfImage --append="root=/dev/hda3 "  /boot/vmlinuz-2.6.27  linux.elf
 +
 
 +
</pre>
 +
 
 +
Your kernel number and the partition may vary, of course.
 +
 
 +
Then copy the kernel.elf file into /boot, and check that it works on grub's command line
 +
 
 +
You can use this as a payload now, and change the size of BIOS chip in your build parameters from 4 M bit to 16 M bit.  Then put in a new chip and flash it.
 +
 
 +
You should build a static kexec and add that to the coreboot build, I am working on it.
 +
 
 +
But this boots my system; I have built kexec on this system,and can boot into other systems from there; though this is not a good idea unless you stop your services, unmount most partitions, and remount the rest read only.
 +
 
 +
But I still want a menu so I can choose which system I want; so I am thinking of using some sort of screen, to ask which system the booted kernel will kexec into.
 +
 
 +
 
 +
== Null Modem Cable ==
 +
 
 +
If you have two machines you can see the output from coreboot.  Get a good quality Null Modem cable and test it by running minicom on both machines.  The only change that I made was to use ttyS0, instead of minicom's default of ttyS1.
 +
 
 +
Just for information the settings are:
 +
 
 +
<pre>
 +
Serial Device        : /dev/ttyS0
 +
Lockfile Location    : /var/lock
 +
Callin Program        :
 +
Callout Program      :
 +
Bps/Par/Bits          : 115200 8N1
 +
Hardware Flow Control : No
 +
Software Flow Control : No
 +
 
 +
</pre>
 +
 
 +
 
 +
== The BIOS chip ==
 +
 
 +
This motherboard has a socketed BIOS chip, so buy half a dozen empty Pm49FL004 chips.  You will also need some sort of chip extractor tool.
 +
 
 +
Build flashrom, it is a utility program that is included in coreboot's source, and install it.
 +
 
 +
Then do something like
 +
 
 +
<pre>
 +
sudo flashrom  -V  -c Pm49FL004
 +
</pre>
 +
Your output should contain the lines
 +
<pre>
 +
Probing for PMC Pm49FL004, 512 KB: probe_jedec: id1 0x9d, id2 0x6e
 +
Found chip "PMC Pm49FL004" (512 KB) at physical address 0xfff80000.
 +
No operations were specified.
 +
</pre>
 +
You can now take a copy of the factory BIOS.  First read the factory BIOS into a file
 +
<pre>
 +
sudo flashrom  -V  -c Pm49FL004  -r -o factory
 +
</pre>
 +
And then verify it
 +
<pre>
 +
 
 +
sudo flashrom  -V  -c Pm49FL004  -v  factory
 +
</pre>
 +
You now have a verified copy of the factory BIOS, ready to reprogram new chips.
 +
.
 +
 
 +
The next step is to use that file to flash a brand new chip.  To hot swap the BIOS chip I found it best to lay the machine on its back so you can put the chip out vertically.  So gently extract the BIOS chip and put it into an anti-static bag.  Get one of your new chips and locate it very carefully into position, note the bevel on one corner.  Gentle pressure will now push the chip home.  Put the computer back onto its feet, and check that the chip is there.
 +
 
 +
<pre>
 +
 
 +
sudo flashrom  -V  -c Pm49FL004
 +
 
 +
</pre>
 +
 
 +
You should see the output
 +
 
 +
<pre>
 +
 
 +
Probing for PMC Pm49FL004, 512 KB: probe_jedec: id1 0x9d, id2 0x6e
 +
Found chip "PMC Pm49FL004" (512 KB) at physical address 0xfff80000.
 +
No operations were specified.
 +
 
 +
</pre>
 +
 
 +
You can now flash this chip with the factory BIOS. but before you can write to it you must erase it.
 +
 
 +
<pre>
 +
 
 +
sudo flashrom  -V  -c Pm49FL004  -E
 +
 
 +
sudo flashrom  -V  -c Pm49FL004  -w  factory
 +
 
 +
</pre>
 +
 
 +
And verify that it is a good copy
 +
 
 +
<pre>
 +
 
 +
sudo flashrom  -V  -c Pm49FL004  -v  factory
 +
 
 +
</pre>
 +
 
 +
You can now reboot the machine and check that it works.  You will need to interrupt the BIOS, read the optimized setting, reset the boot order, then write the settings back.
 +
 
 +
Repeat this procedure until you have two backup copies, then put those two copies away somewhere safe.  You now have an emergency recovery procedure.
 +
 
 +
You may like to repeat this so that you have a spare factory BIOS chip to keep near the machine,
 +
 
 +
== Coreboot ==
 +
 
 +
You can now build coreboot, check that the payloads are your working filo.elf, and just follow the build instructions.  Set minicom working on the second machine, you might like to capture the data into a file.  Write the coreboot image to the flash chip, after erasing first, then verify it.
 +
 
 +
<pre>
 +
sudo flashrom  -V  -c Pm49FL004  -E
 +
sudo flashrom  -V  -c Pm49FL004  -w  coreboot.rom
 +
sudo flashrom  -V  -c Pm49FL004  -v  coreboot.rom
 +
</pre>
 +
 
 +
You can now reboot, and have fun,
 +
 
 +
== Gremlins, Bugs and Gotchas ==
 +
 
 +
 
 +
=== Ethernet ===
 +
The ethernet gets changed from eth0 to eth1 by udev during the kernel start up.
 +
 
 +
=== My splash screen looks horrible ===
 +
 
 +
Splash screens get wrecked, due to lack of video driver at start up.
 +
 
  
 +
=== Invalid CMOS error ===
  
 +
You might see this error in the coreboot log, and want to correct it.
 +
<pre>
 +
PCI: 00:01.0 init
 +
set power on after power fail
 +
RTC Init
 +
Invalid CMOS LB checksum
 +
PNP: 002e.1 init
 +
</pre>
 +
Hack the program that outputs this error something like
 +
<pre>
 +
        sum = (~sum)&0x0ffff;
 +
        printk_debug("Sum is %x\n", sum);
 +
        old_sum = ((CMOS_READ(cks_loc)<<8) | CMOS_READ(cks_loc+1))&0x0ffff;
 +
        printk_debug("Read from memory %x\n", old_sum);
 +
        return sum == old_sum;
 +
</pre>
  
 +
Run this coreboot so that you see the values being used.
  
 +
Now build nvramtool from coreboot's source package, and use it to reset the CMOS value to the correct value.
  
== Building coreboot ==
+
Now you have the correct value to compare against, this fault will disapear.
  
  
 +
== Timing ==
  
 
{| border="0" style="font-size: smaller"
 
{| border="0" style="font-size: smaller"
Line 271: Line 564:
 
! align="left" | BIOS
 
! align="left" | BIOS
 
! align="left" | Power up &mdash; OS loader
 
! align="left" | Power up &mdash; OS loader
! align="left" | Linux &mdash; shell
+
! align="left" | Linux &mdash; console login
 
! align="left" | Summary
 
! align="left" | Summary
  
 
|- bgcolor="#eeeeee"
 
|- bgcolor="#eeeeee"
| Vendor BIOS (boot from SATA disk)
+
| Vendor BIOS (boot from IDE disk)
| 24s
+
| 7
| 24s
+
| 9
| 48s
+
| 16
  
 
|- bgcolor="#eeeeee"
 
|- bgcolor="#eeeeee"
| coreboot (boot from SATA disk)
+
| coreboot (boot from IDE disk)
| 9s
+
| 5
| 24s  
+
9
| 33s
+
| 14
  
 
|}
 
|}
  
 +
there is no difference in the speed that jobs run. Compiling the latest version of gcc takes about 26 minutes,  this is a ''make bootstrap'', building both a 32 bit and 64 bit compiler.
  
 
{{PD-self}}
 
{{PD-self}}

Latest revision as of 14:45, 26 September 2010

This page describes how to use coreboot on the DFI Infinity NF570 series mainboard. It is maintained by Chris Lingard.

Though not officially adopted by the coreboot team, I am maintaining a patch for coreboot-v2, that will add this motherboard to the options.

This board would be too easy for any experienced corebooter; but it is an ideal entry point for someone who has never hot swapped a chip before, nor flashed a BIOS.

After much failure trying to get a motherboard modified with a switch and a second BIOS socket, I found one with a socketed BIOS. It comes in three flavors:

NF570 SLI-M2/G, NS570-M2/G and NF550-M2/G

The designers have chosen an identical chip set to the Gigabyte M57SLI, so I only had to make trivial code changes for it to work to the standard shown below. All credit to coreboot's M57SLI team.

The BIOS chip is bottom left, below, and slightly left of the battery.


Status

Device/functionality Status Comments
CPU
CPU works OK AMD Athlon(tm) dual core Processor 6000+
L1 cache enabled OK CPU: L1 Cache: 64K (64 bytes/line) (each core)
L2 cache enabled OK CPU: L2 Cache: 1MB (each core)
L3 cache enabled N/A
Multiple CPU support N/A
Multi-core support OK Works fine, tested with prolonged builds like gcc and glibc
Hardware virtualization Untested
RAM
EDO N/A
SDRAM N/A
SO-DIMM N/A
DDR N/A
DDR2 OK Using 2 cards of 2GB 667
DDR3 N/A
Dual channel support Untested
ECC support N/A
On-board Hardware
On-board IDE 3.5" OK My standard Seagate as system disk
On-board IDE 2.5" N/A
On-board SATA OK Tested: SATA port 1 , that is my CD/DVD RW.
On-board SCSI Unknown
On-board USB WIP Should be OK.all the right modules are loaded by kernel/udev
On-board VGA N/A
On-board ethernet OK
On-board audio OK
On-board modem N/A
On-board FireWire Untested
On-board smartcard reader N/A
On-board CompactFlash N/A
On-board PCMCIA N/A
Add-on slots/cards
ISA add-on cards N/A
Audio/Modem-Riser (AMR/CNR) cards N/A
PCI add-on cards Untested
Mini-PCI add-on cards Unknown
PCI-X add-on cards Unknown
AGP graphics cards N/A
PCI Express x1 add-on cards Untested
PCI Express x2 add-on cards N/A
PCI Express x4 add-on cards N/A
PCI Express x8 add-on cards N/A
PCI Express x16 add-on cards OK Tested: Saphire ati clone radion card. Works using the radionhd X11 driver.
PCI Express x32 add-on cards N/A
HTX add-on cards N/A
Legacy / Super I/O
Floppy WIP Does not work with either the factory or coreboot BIOS
Serial port 1 (COM1) OK
Serial port 2 (COM2) N/A
Parallel port Untested
PS/2 keyboard OK
PS/2 mouse OK
Game port Untested
Infrared N/A
PC speaker OK
DiskOnChip N/A
Miscellaneous
Sensors / fan control Untested
Hardware watchdog Untested
SMBus Unknown
CAN bus N/A
CPU frequency scaling Untested
Other powersaving features N/A
ACPI WIP The Linux kernel does the right thing
Reboot OK
Poweroff OK
Suspend Unknown
Nonstandard LEDs OK
High precision event timers (HPET) Untested
Random number generator (RNG) N/A
Wake on modem ring Untested
Wake on LAN Untested
Wake on keyboard Untested
Wake on mouse Untested
Flashrom OK Works fine with coreboot and with the proprietary BIOS.

Hardware

  • AMD Athlon(tm) 64 dual core
  • Nvidea MCP55
  • ITE IT8716F
  • PMC Pm49FL004

lspci -tvnn

-[0000:00]-+-00.0  nVidia Corporation MCP55 Memory Controller [10de:0369]
          +-01.0  nVidia Corporation MCP55 LPC Bridge [10de:0362]
          +-01.1  nVidia Corporation MCP55 SMBus [10de:0368]
          +-01.2  nVidia Corporation MCP55 Memory Controller [10de:036a]
          +-01.3  nVidia Corporation MCP55 SMU [10de:036b]
          +-02.0  nVidia Corporation MCP55 USB Controller [10de:036c]
          +-02.1  nVidia Corporation MCP55 USB Controller [10de:036d]
          +-04.0  nVidia Corporation MCP55 IDE [10de:036e]
          +-05.0  nVidia Corporation MCP55 SATA Controller [10de:037f]
          +-05.1  nVidia Corporation MCP55 SATA Controller [10de:037f]
          +-05.2  nVidia Corporation MCP55 SATA Controller [10de:037f]
          +-06.0-[0000:01]----07.0  VIA Technologies, Inc. VT6306 Fire II IEEE 1394 OHCI Link Layer Controller [1106:3044]
          +-06.1  nVidia Corporation MCP55 High Definition Audio [10de:0371]
          +-08.0  nVidia Corporation MCP55 Ethernet [10de:0373]
          +-0b.0-[0000:02]--
          +-0c.0-[0000:03]--
          +-0d.0-[0000:04]--
          +-0e.0-[0000:05]--
          +-0f.0-[0000:06]--+-00.0  ATI Technologies Inc RV630 [Radeon HD 2600XT] [1002:9588]
          |                 \-00.1  ATI Technologies Inc RV630/M76 audio device [Radeon HD 2600 Series] [1002:aa08]
          +-18.0  Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] HyperTransport Technology Configuration [1022:1100]
          +-18.1  Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Address Map [1022:1101]
          +-18.2  Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] DRAM Controller [1022:1102]
          \-18.3  Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control [1022:1103]


The payload

See the documentation about coreboot, and why it needs a payload.

filo

Copy your /boot/grub directory to /boot/filo. This stops any interaction between grub and filo. Your future BIOS will boot according to /boot/filo/menu.lst, and the hard disk will boot according to /boot/grub/menu.lst. Get and compile filo-0.5. Here is my configuration file



# Do NOT add spaces or comments at the end of option lines.
# It confuses some versions of make.

# Use grub instead of autoboot?
USE_GRUB = 1

# Grub menu.lst path
MENULST_FILE = "hda1:/filo/menu.lst"
# Via Epia-MII CF boot:
#MENULST_FILE = "hde1:/boot/filo/menu.lst"

# time before default menu.lst is chosen. Set to 0 to ignore
MENULST_TIMEOUT = 0

# Image filename for automatic boot and optional command line parameter
AUTOBOOT_FILE = "hda1:/vmlinuz root=/dev/hda3 console=tty0 console=ttyS0,115200"
#AUTOBOOT_FILE = "mem@0xfff80000"
#AUTOBOOT_FILE = "hde1@0"
#AUTOBOOT_FILE = "uda1:/vmlinuz.elf"
#AUTOBOOT_FILE = "flashb@0x00400000,0x154a00 console=tty0 console=ttyS0,115200"

# Time in second before booting AUTOBOOT_FILE
AUTOBOOT_DELAY = 2

# Driver for hard disk, CompactFlash, and CD-ROM on IDE bus
IDE_DISK = 1

# Add a short delay when polling status registers
# (required on some broken SATA controllers)
# NOTE: Slows down access significantly, so disable
# whenever possible.
#IDE_DISK_POLL_DELAY = 1

# SATA drives seem to have problems reporting their spinup.
# This will delay FILO start by 5s so the disks have some time to settle.
# (required on some broken SATA controllers)
# NOTE: Slows down access significantly, so disable
# whenever possible.
#SLOW_SATA = 1

# Use PCMCIA compact flash on Via Epia MII10000 and MII6000E
# This device is referred to as hde.
#PCMCIA_CF = 1

# Driver for USB Storage
#USB_DISK = 1

# Driver for NAND flash storage
#FLASH_DISK = 1

# VGA text console
VGA_CONSOLE = 1
PC_KEYBOARD = 1

# Serial console
SERIAL_CONSOLE = 1
SERIAL_IOBASE = 0x3f8
# if SERIAL_SPEED is commented out, the speed will not be changed.
#SERIAL_SPEED = 115200

# Filesystems
FSYS_EXT2FS = 1
#FSYS_FAT = 1
#FSYS_JFS = 1
#FSYS_MINIX = 1
#FSYS_REISERFS = 1
#FSYS_XFS = 1
FSYS_ISO9660 = 1
#FSYS_CRAMFS = 1
#FSYS_SQUASHFS = 1

# Support for boot disk image in bootable CD-ROM (El Torito)
ELTORITO = 1

# PCI support
SUPPORT_PCI = 1

# Enable this to scan PCI busses above bus 0
# AMD64 based boards do need this.
PCI_BRUTE_SCAN = 1

# Sound support (needs SUPPORT_PCI)
#SUPPORT_SOUND = 1

# Sound drivers
#VIA_SOUND = 1

# Debugging
#DEBUG_ALL = 1
#DEBUG_ELFBOOT = 1
#DEBUG_ELFNOTE = 1
#DEBUG_LINUXBIOS = 1
#DEBUG_MALLOC = 1
#DEBUG_MULTIBOOT = 1
#DEBUG_SEGMENT = 1
#DEBUG_SYS_INFO = 1
#DEBUG_TIMER = 1
#DEBUG_BLOCKDEV = 1
#DEBUG_PCI = 1
#DEBUG_VIA_SOUND = 1
#DEBUG_LINUXLOAD = 1
#DEBUG_IDE = 1
#DEBUG_USB = 1
#DEBUG_ELTORITO = 1
#DEBUG_FLASH = 1
#DEBUG_ARTECBOOT = 1


# i386 options

# Loader for standard Linux kernel image, a.k.a. /vmlinuz
LINUX_LOADER = 1

# Loader for Windows CE image


# Leave disabled for now. Not supported.
#WINCE_LOADER = 1

# Artecboot loader support
#ARTEC_BOOT = 1

# Boot FILO from Multiboot loader (eg. GRUB)
MULTIBOOT_IMAGE = 1

The only ones that I changed are the MULTIBOOT_IMAGE-1. This makes filo build a bootable filo.elf


And MENULIST_FILE = "hda1:/filo/menu.lst", you set up this file above; this is what will be used when you use coreboot. Note that /boot is the first partition on my disk.

If boot is a directory in the root partition and suppose this is the third partition, then this would become MENULIST_FILE = "hda3:/boot/filo/menu.lst"

Build your filo.elf and copy it into /boot. Boot it via the grub command line and make sure it works.

Grub2

There are hints and a wiki page, but no proper documentation.

Grub2 did not work for me. It did show a help screen, but did not boot the system, If you embed a menu into the grub2 payload, it just reboots the machine, after showing the "Grub2 Welcome" message

Since you get the source via svn, I probably caught it on a bad day; hopefully they will get it to work soon.


A Linux Payload

This was a lot easier than I thought it would be. You need to buy some SST49LF160C chips, So 16 M Bits gives you 2M bytes. There do not seem to be any bigger chips.

You need a system with a small kernel. The first system on this machine is "Linux from Scratch", and with careful pruning I have got the kernel down to around 1.8M bytes.

Get the program mkelfImage, and set up a command something like


/usr/sbin/mkelfImage --append="root=/dev/hda3 "   /boot/vmlinuz-2.6.27   linux.elf

Your kernel number and the partition may vary, of course.

Then copy the kernel.elf file into /boot, and check that it works on grub's command line

You can use this as a payload now, and change the size of BIOS chip in your build parameters from 4 M bit to 16 M bit. Then put in a new chip and flash it.

You should build a static kexec and add that to the coreboot build, I am working on it.

But this boots my system; I have built kexec on this system,and can boot into other systems from there; though this is not a good idea unless you stop your services, unmount most partitions, and remount the rest read only.

But I still want a menu so I can choose which system I want; so I am thinking of using some sort of screen, to ask which system the booted kernel will kexec into.


Null Modem Cable

If you have two machines you can see the output from coreboot. Get a good quality Null Modem cable and test it by running minicom on both machines. The only change that I made was to use ttyS0, instead of minicom's default of ttyS1.

Just for information the settings are:

Serial Device         : /dev/ttyS0
Lockfile Location     : /var/lock
Callin Program        :
Callout Program       :
Bps/Par/Bits          : 115200 8N1
Hardware Flow Control : No
Software Flow Control : No


The BIOS chip

This motherboard has a socketed BIOS chip, so buy half a dozen empty Pm49FL004 chips. You will also need some sort of chip extractor tool.

Build flashrom, it is a utility program that is included in coreboot's source, and install it.

Then do something like

sudo flashrom   -V  -c Pm49FL004

Your output should contain the lines

Probing for PMC Pm49FL004, 512 KB: probe_jedec: id1 0x9d, id2 0x6e
Found chip "PMC Pm49FL004" (512 KB) at physical address 0xfff80000.
No operations were specified.

You can now take a copy of the factory BIOS. First read the factory BIOS into a file

sudo flashrom   -V  -c Pm49FL004  -r -o factory

And then verify it


sudo flashrom   -V  -c Pm49FL004   -v  factory

You now have a verified copy of the factory BIOS, ready to reprogram new chips. .

The next step is to use that file to flash a brand new chip. To hot swap the BIOS chip I found it best to lay the machine on its back so you can put the chip out vertically. So gently extract the BIOS chip and put it into an anti-static bag. Get one of your new chips and locate it very carefully into position, note the bevel on one corner. Gentle pressure will now push the chip home. Put the computer back onto its feet, and check that the chip is there.


sudo flashrom   -V  -c Pm49FL004

You should see the output


Probing for PMC Pm49FL004, 512 KB: probe_jedec: id1 0x9d, id2 0x6e
Found chip "PMC Pm49FL004" (512 KB) at physical address 0xfff80000.
No operations were specified.

You can now flash this chip with the factory BIOS. but before you can write to it you must erase it.


sudo flashrom   -V  -c Pm49FL004  -E

sudo flashrom   -V  -c Pm49FL004  -w  factory

And verify that it is a good copy


sudo flashrom   -V  -c Pm49FL004  -v  factory

You can now reboot the machine and check that it works. You will need to interrupt the BIOS, read the optimized setting, reset the boot order, then write the settings back.

Repeat this procedure until you have two backup copies, then put those two copies away somewhere safe. You now have an emergency recovery procedure.

You may like to repeat this so that you have a spare factory BIOS chip to keep near the machine,

Coreboot

You can now build coreboot, check that the payloads are your working filo.elf, and just follow the build instructions. Set minicom working on the second machine, you might like to capture the data into a file. Write the coreboot image to the flash chip, after erasing first, then verify it.

sudo flashrom   -V  -c Pm49FL004  -E
sudo flashrom   -V  -c Pm49FL004  -w  coreboot.rom
sudo flashrom   -V  -c Pm49FL004  -v  coreboot.rom

You can now reboot, and have fun,

Gremlins, Bugs and Gotchas

Ethernet

The ethernet gets changed from eth0 to eth1 by udev during the kernel start up.

My splash screen looks horrible

Splash screens get wrecked, due to lack of video driver at start up.


Invalid CMOS error

You might see this error in the coreboot log, and want to correct it.

PCI: 00:01.0 init
set power on after power fail
RTC Init
Invalid CMOS LB checksum
PNP: 002e.1 init

Hack the program that outputs this error something like

        sum = (~sum)&0x0ffff;
        printk_debug("Sum is %x\n", sum);
        old_sum = ((CMOS_READ(cks_loc)<<8) | CMOS_READ(cks_loc+1))&0x0ffff;
        printk_debug("Read from memory %x\n", old_sum);
        return sum == old_sum;

Run this coreboot so that you see the values being used.

Now build nvramtool from coreboot's source package, and use it to reset the CMOS value to the correct value.

Now you have the correct value to compare against, this fault will disapear.


Timing

BIOS Power up — OS loader Linux — console login Summary
Vendor BIOS (boot from IDE disk) 7 9 16
coreboot (boot from IDE disk) 5 9 14

there is no difference in the speed that jobs run. Compiling the latest version of gcc takes about 26 minutes, this is a make bootstrap, building both a 32 bit and 64 bit compiler.

Public domain I, the copyright holder of this work, hereby release it into the public domain. This applies worldwide.

In case this is not legally possible:
I grant anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law.