[openfirmware] r1167 - in cpu/x86: . pc pc/biosload pc/olpc

svn at openfirmware.info svn at openfirmware.info
Sun May 3 10:46:13 CEST 2009


Author: wmb
Date: 2009-05-03 10:46:13 +0200 (Sun, 03 May 2009)
New Revision: 1167

Modified:
   cpu/x86/dtacc.fth
   cpu/x86/pc/biosload/addrs.fth
   cpu/x86/pc/biosload/fw.bth
   cpu/x86/pc/biosload/linux.fth
   cpu/x86/pc/biosload/ofw.bth
   cpu/x86/pc/linux.fth
   cpu/x86/pc/mmusetup.fth
   cpu/x86/pc/olpc/addrs.fth
Log:
Biosload version - fixed it so it will boot Linux.



Modified: cpu/x86/dtacc.fth
===================================================================
--- cpu/x86/dtacc.fth	2009-05-03 08:44:29 UTC (rev 1166)
+++ cpu/x86/dtacc.fth	2009-05-03 08:46:13 UTC (rev 1167)
@@ -41,7 +41,7 @@
 ;
 
 stand-init: Exceptions
-   make-idt  stand-set-idt  move-gdt
+   make-idt  stand-set-idt  ( move-gdt)
    true to hardware-step?
 ;
 

Modified: cpu/x86/pc/biosload/addrs.fth
===================================================================
--- cpu/x86/pc/biosload/addrs.fth	2009-05-03 08:44:29 UTC (rev 1166)
+++ cpu/x86/pc/biosload/addrs.fth	2009-05-03 08:46:13 UTC (rev 1167)
@@ -96,7 +96,7 @@
 
 \ Where OFW initially loads an OS that is is going to boot
 
-h#  80.0000 constant def-load-base      \ Convenient for initrd
+h# 100.0000 constant def-load-base      \ Convenient for initrd
 
 fload ${BP}/cpu/x86/pc/virtaddr.fth
 

Modified: cpu/x86/pc/biosload/fw.bth
===================================================================
--- cpu/x86/pc/biosload/fw.bth	2009-05-03 08:44:29 UTC (rev 1166)
+++ cpu/x86/pc/biosload/fw.bth	2009-05-03 08:46:13 UTC (rev 1167)
@@ -158,7 +158,11 @@
 fload ${BP}/cpu/x86/pc/reenter.fth	\ Various entries into Forth
 
 headerless
+[ifdef] virtual-mode
+: (initial-heap)  ( -- adr len )  sp0 @ ps-size -  dict-limit  tuck -  ;
+[else]
 : (initial-heap)  ( -- adr len )  heap-base heap-size  ;
+[then]
 ' (initial-heap) is initial-heap
 headers
 
@@ -207,6 +211,7 @@
 fload ${BP}/cpu/x86/pc/mscal.fth
 [then]
 fload ${BP}/cpu/x86/pc/boot.fth
+fload ${BP}/cpu/x86/pc/linux.fth
 
 hex 
 \ If there is a PCI ethernet adapter, use it as the default net device,
@@ -353,6 +358,9 @@
 
 fload ${BP}/forth/lib/selstr.fth
 
+\needs ramdisk  " " d# 128 config-string ramdisk
+" console=tty0 console=ttyS0,115200"   ' boot-file    set-config-string-default
+
 [ifdef] pc-linux
 " a:\initrd.imz" d# 128 config-string ramdisk
 " root=/dev/ram0 mount_ramdisk=1"  ' boot-file        set-config-string-default
@@ -361,9 +369,10 @@
 \ Also try " console=/dev/ttyS0,9600 console=/dev/tty0" in boot-file
 [then]
 
-[ifdef] linux-support
-fload ${BP}/cpu/x86/pc/biosload/linux.fth
-[then]
+\ XXX delete me
+\ [ifdef] linux-support
+\ fload ${BP}/cpu/x86/pc/biosload/linux.fth
+\ [then]
 
 fload ${BP}/cpu/x86/pc/biosload/vmdoor.fth   \ VMware interfaces
 

Modified: cpu/x86/pc/biosload/linux.fth
===================================================================
--- cpu/x86/pc/biosload/linux.fth	2009-05-03 08:44:29 UTC (rev 1166)
+++ cpu/x86/pc/biosload/linux.fth	2009-05-03 08:46:13 UTC (rev 1167)
@@ -158,6 +158,11 @@
 \ Add some entries to the GDT for Linux
 : amend-gdt   ( -- )
    gdtr@ drop                        ( va )
+   h# 0000.ffff over h# 10 + l!      ( va ) \ user 4 GB code at 0
+   h# 00cf.fa00 over h# 14 + l!      ( va )
+   h# 0000.ffff over h# 18 + l!      ( va ) \ user 4 GB data at 0
+   h# 00cf.f200 over h# 1c + l!      ( va )
+
    h# 0000.ffff over h# 20 + l!      ( va ) \ user 4 GB code at 0
    h# 00cf.fa00 over h# 24 + l!      ( va )
    h# 0000.ffff over h# 28 + l!      ( va ) \ user 4 GB data at 0

Modified: cpu/x86/pc/biosload/ofw.bth
===================================================================
--- cpu/x86/pc/biosload/ofw.bth	2009-05-03 08:44:29 UTC (rev 1166)
+++ cpu/x86/pc/biosload/ofw.bth	2009-05-03 08:46:13 UTC (rev 1167)
@@ -4,6 +4,7 @@
 \ in: biostart.img
 in: reset.di
 in: start.di
+in: ${BP}/cpu/x86/pc/biosload/build/paging.di
 in: fw.img
 in: ${BP}/dev/usb2/hcd/ohci/build/ohci.fc
 in: ${BP}/dev/usb2/hcd/uhci/build/uhci.fc
@@ -84,6 +85,7 @@
 [then]
    " reset.di"              $add-file
    " start.di"              $add-file
+   " paging.di"             $add-file
    " ${BP}/cpu/x86/build/inflate.bin"           " inflate"         $add-dropin
    " fw.img"                                    " firmware"        $add-deflated-dropin
    " ${BP}/dev/pci/build/pcibridg.fc"           " class060400"     $add-deflated-dropin

Modified: cpu/x86/pc/linux.fth
===================================================================
--- cpu/x86/pc/linux.fth	2009-05-03 08:44:29 UTC (rev 1166)
+++ cpu/x86/pc/linux.fth	2009-05-03 08:46:13 UTC (rev 1167)
@@ -115,6 +115,7 @@
 
            0  h# 1ff +lp  c!	\ Aux device - set to AA if PS2 mouse present
  /ramdisk 0<> h# 210 +lp  c!	\ loader type - set non0 to enable ramdisk info
+ h# 211 +lp dup c@ h# 40 or swap c!  \ Set the "KEEP_SEGMENTS" bit (new as of about 2.6.29)
 \  h# 100000  h# 214 +lp  l!	\ kernel start - unused
  ramdisk-adr  h# 218 +lp  l!	\ initrd start
     /ramdisk  h# 21c +lp  l!	\ initrd size
@@ -148,9 +149,25 @@
 ;
 [then]
 
+\ Add some entries to the GDT for Linux
+: amend-gdt   ( -- )
+   gdtr@ drop                        ( va )
+   h# 0000.ffff over h# 10 + l!      ( va ) \ user 4 GB code at 0
+   h# 00cf.9a00 over h# 14 + l!      ( va )
+   h# 0000.ffff over h# 18 + l!      ( va ) \ user 4 GB data at 0
+   h# 00cf.9200 over h# 1c + l!      ( va )
+
+   h# 0000.ffff over h# 20 + l!      ( va ) \ user 4 GB code at 0
+   h# 00cf.9a00 over h# 24 + l!      ( va )
+   h# 0000.ffff over h# 28 + l!      ( va ) \ user 4 GB data at 0
+   h# 00cf.9200 over h# 2c + l!      ( va )
+   drop
+;
+
 : linux-fixup  ( -- )
 [ifdef] linux-logo  linux-logo  [then]
    args-buf cscount set-parameters          ( )
+   amend-gdt                                ( )
    h# ff h# 21 pc!	\ Squelch the timer interrupt and others
 
    linux-base  linux-params  (init-program)
@@ -206,7 +223,10 @@
 
 : claim-params  ( -- )
 [ifdef] virtual-mode
-   0 0 1meg -1 mmu-map     ( )		\ Make the parameter area accessible
+\ We don't need this because we assume that low memory is already mapped 1-1
+\ If low mem is mapped with 4M pages, mmu-map will overwrite the page at 0 
+\ because the MMU methods don't handle 4M pages correctly.
+\   0 0 1meg -1 mmu-map     ( )		\ Make the parameter area accessible
 [then]
    0 +lp  h# 1000 0 mem-claim drop      \ Play nice with memory reporting
 ;

Modified: cpu/x86/pc/mmusetup.fth
===================================================================
--- cpu/x86/pc/mmusetup.fth	2009-05-03 08:44:29 UTC (rev 1166)
+++ cpu/x86/pc/mmusetup.fth	2009-05-03 08:46:13 UTC (rev 1167)
@@ -4,7 +4,12 @@
 \ The code in this file depends in detail on the initial MMU setup
 \ established by initmmu.fth
 
-: (memory?)  ( adr -- flag )  h# 1000.0000 u<  ;
+[ifdef] total-ram
+: (memory?)  ( adr -- flag )  total-ram u<  ;
+[else]
+h# 8000.0000 value ram-boundary
+: (memory?)  ( adr -- flag )  ram-boundary u<  ;
+[then]
 ' (memory?) is memory?
 
 dev /mmu

Modified: cpu/x86/pc/olpc/addrs.fth
===================================================================
--- cpu/x86/pc/olpc/addrs.fth	2009-05-03 08:44:29 UTC (rev 1166)
+++ cpu/x86/pc/olpc/addrs.fth	2009-05-03 08:46:13 UTC (rev 1167)
@@ -58,8 +58,6 @@
 h# fe02.8000 constant camera-pci-base
 h# fe02.c000 constant uoc-pci-base
 
-h# 9.fc00 constant 'ebda  \ Extended BIOS Data Area, which we co-opt for our real-mode workspace
-
 h# e0000 constant rsdp-adr
 h# e0040 constant rsdt-adr
 h# e0080 constant fadt-adr




More information about the openfirmware mailing list