[openfirmware] r1074 - cpu/x86/pc/biosload

svn at openfirmware.info svn at openfirmware.info
Fri Jan 23 20:26:25 CET 2009


Author: wmb
Date: 2009-01-23 20:26:25 +0100 (Fri, 23 Jan 2009)
New Revision: 1074

Added:
   cpu/x86/pc/biosload/HOWTO_USB_boot.txt
   cpu/x86/pc/biosload/config-olpc.fth
Modified:
   cpu/x86/pc/biosload/addrs.fth
   cpu/x86/pc/biosload/devices.fth
   cpu/x86/pc/biosload/fw.bth
   cpu/x86/pc/biosload/ofw.bth
Log:
Biosload build - Added OLPC build variant for use as a recovery tool
(in case of XOs that have been reflashed with Insyde BIOS), and
added instructions for how to prepare a generic USB-bootable version.


Added: cpu/x86/pc/biosload/HOWTO_USB_boot.txt
===================================================================
--- cpu/x86/pc/biosload/HOWTO_USB_boot.txt	                        (rev 0)
+++ cpu/x86/pc/biosload/HOWTO_USB_boot.txt	2009-01-23 19:26:25 UTC (rev 1074)
@@ -0,0 +1,61 @@
+== Booting OFW from BIOS via a USB Drive ==
+
+You need a USB drive (hard disk, FLASH stick, pendrive) that is formatted with a FAT filesystem
+(they come that way from the factory).
+
+These instructions assume that you know the basics of mounting USB drives and copying files to and from them.
+
+=== Build OFW ===
+
+On a Linux system with gcc and Subversion installed:
+
+  $ svn co svn://openbios.org/openfirmware
+  $ cd openfirmware/cpu/x86/pc/biosload
+  $ cp config-usbkey.fth config.fth
+  $ cd build
+  $ make
+
+The output file is ofw.c32 .  It is in "COM32" format, as used by SYSLINUX.
+
+* Copy ofw.c32 to the USB drive's root directory
+
+* Copy openfirmware/cpu/x86/biosload/syslinux.cfg to the USB drive's root directory
+
+=== Make the USB Key Bootable ... ===
+
+==== ... On Linux ====
+
+* Install the "syslinux" package (e.g. "apt-get install syslinux" or "yum install syslinux" or get the whole distribution from http://www.kernel.org/pub/linux/utils/boot/syslinux/ and use linux/syslinux therein).
+
+* Unmount any filesystems that are currently mounted on the USB drive
+
+* Find the USB drive's device name.  It will probably be something like /dev/sda .  You want the name of the whole drive (just sda), NOT a subordinate partition (NOT sda1).
+
+* Run this command, replacing "/dev/sda" with the appropriate device name for your USB drive:
+
+   $ syslinux /dev/sda
+
+
+==== ... On Windows ====
+
+* Open My Computer and find the drive corresponding to the USB key.  The following instructions assume that it is "F".
+
+* Download and extract the following onto your host machine: http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-3.72.zip
+
+* Open a cmd window
+
+* cd to the directory where you unzipped the syslinux files
+
+* cd to the win32 subdirectory
+
+* Run this command line, replacing "f" with the drive letter for your USB key:
+
+      syslinux f:
+
+* Use the "Safely Remove Hardware" icon in the system tray to stop the USB key device, then remove that device
+
+=== Setup Your BIOS to Boot From USB ===
+
+... depends on your particular BIOS, but in general, you must set the
+boot order so something like "USB HDD" is the first choice.  You do not
+want "USB ZIP drive" or "USB floppy".

Modified: cpu/x86/pc/biosload/addrs.fth
===================================================================
--- cpu/x86/pc/biosload/addrs.fth	2009-01-16 09:06:43 UTC (rev 1073)
+++ cpu/x86/pc/biosload/addrs.fth	2009-01-23 19:26:25 UTC (rev 1074)
@@ -34,6 +34,21 @@
 h#   08.0000 constant dropin-size
 [then]
 
+[ifdef] olpc
+\ System has limited memory (256M for most versions, 128M for a few)
+\needs fw-pa      h#  e00.0000 constant fw-pa     \ OFW dictionary location
+\needs /fw-ram    h#   20.0000 constant /fw-ram
+
+\needs heap-base  h#  e20.0000 constant heap-base \ Dynamic allocation heap
+\needs heap-size  h#   20.0000 constant heap-size
+
+\needs dma-base   h#  e40.0000 constant dma-base  \ DMA heap
+\needs dma-size   h#   20.0000 constant dma-size
+
+                  h#  e60.0000 constant dropin-base  \ Location of payload in RAM
+                  h#   08.0000 constant dropin-size
+[then]
+
 \needs dropin-base  h# 198.0000 constant dropin-base
 \needs dropin-size  h#   8.0000 constant dropin-size
 \needs ResetBase    dropin-base h# 20 +  constant ResetBase	\ Location of "reset" dropin in ROM

Added: cpu/x86/pc/biosload/config-olpc.fth
===================================================================
--- cpu/x86/pc/biosload/config-olpc.fth	                        (rev 0)
+++ cpu/x86/pc/biosload/config-olpc.fth	2009-01-23 19:26:25 UTC (rev 1074)
@@ -0,0 +1,55 @@
+\ See license at end of file
+purpose: Configuration for loading from a USB key via Syslinux on OLPC
+
+create olpc             \ OLPC-specific SPI FLASH programming
+
+\ --- The environment that "boots" OFW ---
+\ - Image Format - Example Media - previous stage bootloader
+
+\ - (Syslinux) COM32 format - USB Key w/ FAT FS - Syslinux
+create syslinux-loaded
+
+\ create serial-console
+create pc
+
+\ create pseudo-nvram
+create debug-startup
+create resident-packages
+create addresses-assigned  \ Don't reassign PCI addresses
+\ create virtual-mode
+\ create use-root-isa
+create use-timestamp-counter
+create use-pci-isa
+create use-isa-ide
+create use-ega
+create use-elf
+\ create use-ne2000
+create use-watch-all
+create use-null-nvram
+create no-floppy-node
+
+fload ${BP}/cpu/x86/pc/biosload/addrs.fth
+
+\ LICENSE_BEGIN
+\ Copyright (c) 2006 FirmWorks
+\ 
+\ Permission is hereby granted, free of charge, to any person obtaining
+\ a copy of this software and associated documentation files (the
+\ "Software"), to deal in the Software without restriction, including
+\ without limitation the rights to use, copy, modify, merge, publish,
+\ distribute, sublicense, and/or sell copies of the Software, and to
+\ permit persons to whom the Software is furnished to do so, subject to
+\ the following conditions:
+\ 
+\ The above copyright notice and this permission notice shall be
+\ included in all copies or substantial portions of the Software.
+\ 
+\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+\
+\ LICENSE_END

Modified: cpu/x86/pc/biosload/devices.fth
===================================================================
--- cpu/x86/pc/biosload/devices.fth	2009-01-16 09:06:43 UTC (rev 1073)
+++ cpu/x86/pc/biosload/devices.fth	2009-01-23 19:26:25 UTC (rev 1074)
@@ -82,6 +82,19 @@
 fload ${BP}/dev/pc87317.fth		\ National PC87317 superIO
 [then]
 
+[ifdef] olpc
+\ Create the top-level device node to access the entire boot FLASH device
+0 0  " fff00000"  " /" begin-package
+   " flash" device-name
+
+   h# 10.0000 value /device
+   h# 10.0000 constant /device-phys
+   my-address my-space /device-phys reg
+   fload ${BP}/dev/flashpkg.fth
+   fload ${BP}/dev/flashwrite.fth
+end-package
+[then]
+
 0 0  dropin-base <# u#s u#>  " /" begin-package
    " flash" device-name
 
@@ -176,7 +189,8 @@
 [then]
 
 fload ${BP}/ofw/core/countdwn.fth	\ Startup countdown
-fload ${BP}/forth/lib/pattern.fth		\ Text string pattern matching
+fload ${BP}/forth/lib/pattern.fth	\ Text string pattern matching
+fload ${BP}/forth/lib/tofile.fth	\ to-file and append-to-file
 \ XXX remove the OS file commands from tools.dic
 fload ${BP}/ofw/core/filecmds.fth	\ File commands: dir, del, ren, etc.
 
@@ -302,6 +316,34 @@
 fload ${BP}/cpu/x86/pc/egauart.fth		\ Output also to EGA
 
 fload ${BP}/cpu/x86/pc/reset.fth		\ reset-all
+
+[ifdef] olpc
+\ true constant lx?			\ 
+h# fff0.0000   constant rom-pa		\ Physical address of boot ROM
+fload ${BP}/dev/geode/acpi.fth           \ Power management
+fload ${BP}/dev/olpc/kb3700/ecspi.fth      \ EC chip SPI FLASH access
+
+warning @ warning off
+: stand-init-io  stand-init-io  h# fff0.0000 to flash-base  ;
+warning !
+
+fload ${BP}/dev/olpc/kb3700/ecserial.fth   \ Serial access to EC chip
+
+fload ${BP}/dev/olpc/kb3700/ecio.fth       \ I/O space access to EC chip
+
+\ fload ${BP}/cpu/x86/pc/olpc/boardrev.fth   \ Board revision decoding
+fload ${BP}/cpu/x86/pc/olpc/mfgdata.fth      \ Manufacturing data
+fload ${BP}/cpu/x86/pc/olpc/mfgtree.fth      \ Manufacturing data in device tree
+fload ${BP}/dev/olpc/kb3700/battery.fth      \ Battery status reports
+
+fload ${BP}/dev/olpc/spiflash/spiflash.fth   \ SPI FLASH programming
+fload ${BP}/dev/olpc/spiflash/spiui.fth      \ User interface for SPI FLASH programming
+fload ${BP}/dev/olpc/spiflash/recover.fth    \ XO-to-XO SPI FLASH recovery
+fload ${BP}/cpu/x86/pc/olpc/iflash.fth       \ Insyde BIOS replacement tools
+: ofw-fw-filename$  " u:\olpcofw.rom"  ;
+' ofw-fw-filename$ to fw-filename$
+[then]
+
 \ LICENSE_BEGIN
 \ Copyright (c) 2006 FirmWorks
 \ 

Modified: cpu/x86/pc/biosload/fw.bth
===================================================================
--- cpu/x86/pc/biosload/fw.bth	2009-01-16 09:06:43 UTC (rev 1073)
+++ cpu/x86/pc/biosload/fw.bth	2009-01-23 19:26:25 UTC (rev 1074)
@@ -49,6 +49,7 @@
 
 \ XXX should be loaded by basefw.bth
 fload ${BP}/cpu/x86/initpgm.fth		\ Basic boot handler
+fload ${BP}/cpu/x86/msr.fth	        \ Access to machine specific registers
 
 : (cpu-arch  ( -- adr len )
    " architecture" ['] root-node  get-package-property  drop
@@ -61,7 +62,7 @@
 
 dev /
 1 encode-int  " #address-cells"  property
-
+1 encode-int  " #size-cells"     property
 " Generic PC" model
 " PC" encode-string  " architecture" property
 
@@ -79,6 +80,7 @@
 fload ${BP}/ofw/core/showlist.fth	\ Linked list display tool
 fload ${BP}/ofw/core/allocph1.fth	\ S Physical memory allocator
 fload ${BP}/ofw/core/availpm.fth	\ Available memory list
+fload ${BP}/ofw/core/allocmor.fth	\ Secondary allocator
 
 fload ${BP}/cpu/x86/pc/rootnode.fth	\ Platform-specific root node changes
 
@@ -114,6 +116,7 @@
 [then]
 
 [ifdef] linux-support
+\needs unix-seconds>  fload ${BP}/ofw/fs/unixtime.fth	\ Unix time calculation
 support-package: ext2-file-system
    fload ${BP}/ofw/fs/ext2fs/ext2fs.fth	\ Linux file system
 end-support-package
@@ -145,10 +148,10 @@
 [ifdef] virtual-mode
 \ Depends on the assumption that physical memory is mapped 1:1 already
 : (elf-map-in) ( va size -- )  0 mem-claim  drop  ;
-' (elf-map-in) is elf-map-in
 [else]
-' 2drop is elf-map-in
+: (elf-map-in)  ( va size -- )  2drop  ;
 [then]
+' (elf-map-in) is elf-map-in
 [then]
 
 \ Reboot and re-entry code
@@ -166,7 +169,16 @@
 
 [ifdef] virtual-mode
 fload ${BP}/cpu/x86/pc/mmusetup.fth	\ Initial values for MMU lists
+[ifdef] olpc
+dev /mmu
+: claim-rom  ( -- )
+   (initial-claim)
+   rom-pa  h# ffff.0000 over -  claim-virtual drop   \ ROM 1-1 map
+;
+' claim-rom to initial-claim
+dend
 [then]
+[then]
 
 fload ${BP}/cpu/x86/pc/biosload/devices.fth
 
@@ -265,6 +277,11 @@
    " penguin.txt" find-drop-in  if  page type  then
 ;
 
+[ifdef] olpc
+fload  ${BP}/cpu/x86/pc/olpc/usbpwr.fth
+devalias net /wlan
+[then]
+
 : probe-all  ( -- )
    " probe-" do-drop-in
    ." probe-pci"  cr
@@ -273,9 +290,14 @@
 [ifdef] probe-isa-modem
    probe-isa-modem
 [then]
+[ifdef] olpc
+   power-cycle-usb
    probe-usb
+[else]
+   probe-usb
+   report-net
+[then]
    report-disk
-   report-net
    report-pci-fb
 ;
 

Modified: cpu/x86/pc/biosload/ofw.bth
===================================================================
--- cpu/x86/pc/biosload/ofw.bth	2009-01-16 09:06:43 UTC (rev 1073)
+++ cpu/x86/pc/biosload/ofw.bth	2009-01-23 19:26:25 UTC (rev 1074)
@@ -96,6 +96,10 @@
    " ${BP}/dev/usb2/device/net/build/usbnet.fc"         " usbnet"      $add-deflated-dropin
    " ${BP}/dev/usb2/device/serial/build/usbserial.fc"   " usbserial"   $add-deflated-dropin
    " ${BP}/dev/usb2/device/storage/build/usbstorage.fc" " usbstorage"  $add-deflated-dropin
+[ifdef] olpc
+   " ${BP}/dev/usb2/device/wlan/build/usb8388.fc"  " usb1286,2001"   $add-deflated-dropin
+   " ../../olpc/build/usb8388.bin"                 " usb8388.bin"    $add-deflated-dropin
+[then]
 
    " builton.fth"                       " probe-"          $add-dropin
 [ifndef] resident-packages




More information about the openfirmware mailing list