[OpenBIOS] [commit] r1000 - trunk/openbios-devel/arch/sparc32
repository service
svn at openbios.org
Sun Jan 2 01:05:58 CET 2011
Author: mcayland
Date: Sun Jan 2 01:05:56 2011
New Revision: 1000
URL: http://tracker.coreboot.org/trac/openbios/changeset/1000
Log:
Alter the SPARC32 entry.S file to allow extra space for the page tables to handle OpenBIOS images up to 2MB.
Currently the page tables only allow enough space for a 1.5MB image; however during testing/development it was
useful to temporarily allow larger images for debugging. Note that if larger ROM sizes are required for
testing, it is necessary to patch qemu to raise the hardcoded limit there too.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at siriusit.co.uk>
Tested-by: Blue Swirl <blauwirbel at gmail.com>
Reviewed-by: Blue Swirl <blauwirbel at gmail.com>
Modified:
trunk/openbios-devel/arch/sparc32/entry.S
Modified: trunk/openbios-devel/arch/sparc32/entry.S
==============================================================================
--- trunk/openbios-devel/arch/sparc32/entry.S Sun Jan 2 01:05:51 2011 (r999)
+++ trunk/openbios-devel/arch/sparc32/entry.S Sun Jan 2 01:05:56 2011 (r1000)
@@ -38,15 +38,15 @@
*
* Top +-------------------------+
* | SMP CPU table |
- * | s + 0xf00 ... 0xf0f |
- * | s + 0xf0c valid |
- * | s + 0xf08 entry |
- * | s + 0xf04 ctxtbl |
- * | s + 0xf00 ctx |
+ * | s + 0x1f00 ... 0x1f0f |
+ * | s + 0x1f0c valid |
+ * | s + 0x1f08 entry |
+ * | s + 0x1f04 ctxtbl |
+ * | s + 0x1f00 ctx |
* +-------------------------+
* | Bootstrap |
- * | MMU L3 tables 5 * 0x100 |
- * | s + 0xa00 ... 0xeff |
+ * | MMU L3 tables 8 * 0x100 |
+ * | s + 0xa00 ... 0x11ff |
* +-------------------------+
* | Bootstrap |
* | MMU L2 tables 2 * 0x100 |
@@ -123,11 +123,12 @@
! Start of private memory in %g6
- set 0x1000, %g3
+ set 0x2000, %g3
sub %g1, %g3, %g6
! Calculate SMP table location
- add %g6, 0xf0c, %g2 ! valid?
+ set 0x1f0c, %g2
+ add %g6, %g2, %g2 ! valid?
lda [%g2] ASI_M_BYPASS, %g7
sta %g0, [%g2] ASI_M_BYPASS
@@ -168,17 +169,20 @@
load_ctx:
! SMP init, jump to user specified address
- add %g6, 0xf04, %g5 ! ctxtbl
+ set 0x1f04, %g5
+ add %g6, %g5, %g5 ! ctxtbl
lda [%g5] ASI_M_BYPASS, %g2
sta %g0, [%g5] ASI_M_BYPASS
set AC_M_CTPR, %g1
sta %g2, [%g1] ASI_M_MMUREGS ! set ctx table ptr
- add %g6, 0xf00, %g5 ! ctx
+ set 0x1f00, %g5
+ add %g6, %g5, %g5 ! ctx
lda [%g5] ASI_M_BYPASS, %g2
sta %g0, [%g5] ASI_M_BYPASS
set AC_M_CXR, %g1
sta %g2, [%g1] ASI_M_MMUREGS ! set context
- add %g6, 0xf08, %g5 ! entry
+ set 0x1f08, %g5
+ add %g6, %g5, %g5 ! entry
lda [%g5] ASI_M_BYPASS, %g2
sta %g0, [%g5] ASI_M_BYPASS
set 1, %g1
@@ -217,7 +221,7 @@
/* Create temporary page tables and map the ROM area to end of
RAM. This will be done properly in iommu.c later. */
! Calculate start of page tables etc. to %g6
- set 0x1000, %g4
+ set 0x2000, %g4
sub %g1, %g4, %g6 ! start of private memory
mov %g6, %g2 ! ctx table at s+0x0
@@ -273,7 +277,22 @@
srl %g3, 0x4, %g3
or %g3, 0x1, %g3
sta %g3, [%g2] ASI_M_BYPASS
- add %g2, 0xa00-0x9e0, %g2 ! s+0xa00
+ add %g2, 4, %g2 ! s+0x9e4
+ add %g2, 0xf00 - 0x9e4, %g3 ! 6th l3 table for rom at s+0xf00
+ srl %g3, 0x4, %g3
+ or %g3, 0x1, %g3
+ sta %g3, [%g2] ASI_M_BYPASS
+ add %g2, 4, %g2 ! s+0x9e8
+ add %g2, 0x1000 - 0x9e8, %g3 ! 7th l3 table for rom at s+0x1000
+ srl %g3, 0x4, %g3
+ or %g3, 0x1, %g3
+ sta %g3, [%g2] ASI_M_BYPASS
+ add %g2, 4, %g2 ! s+0x9ec
+ add %g2, 0x1100 - 0x9ec, %g3 ! 8th l3 table for rom at s+0x1100
+ srl %g3, 0x4, %g3
+ or %g3, 0x1, %g3
+ sta %g3, [%g2] ASI_M_BYPASS
+ add %g2, 0xa00-0x9ec, %g2 ! s+0xa00
/* Use end of ram for code, rodata, data, and bss
sections. SunOS wants to write to trap table... */
@@ -282,6 +301,7 @@
sub %g6, %g4, %g6
sub %g1, %g6, %g3
set 0x1000, %g5
+ sub %g3, %g5, %g3
sub %g3, %g5, %g3 ! start of ROM copy
mov %g3, %g7 ! save in %g7
srl %g6, 12, %g6 ! # of all pages
@@ -311,7 +331,7 @@
bl 1b
add %g4, 0x4, %g4
- set 0x1000, %g3
+ set 0x2000, %g3
sub %g6, %g3, %g7 ! ctx table at s+0x0
set AC_M_CTPR, %g2
srl %g7, 4, %g7
@@ -360,7 +380,7 @@
set _start, %o2
sub %o0, %o2, %o0
sub %g6, %o0, %o0
- set 0x1000, %o1
+ set 0x2000, %o1
sub %o0, %o1, %o0 ! start of ROM copy
sub %o2, %o0, %o0 ! start of ROM copy
set va_shift, %g1
More information about the OpenBIOS
mailing list