[OpenBIOS] [commit] r1334 - trunk/openbios-devel/arch/sparc32
repository service
svn at openbios.org
Wed Mar 11 23:58:20 CET 2015
Author: mcayland
Date: Wed Mar 11 23:58:20 2015
New Revision: 1334
URL: http://tracker.coreboot.org/trac/openbios/changeset/1334
Log:
SPARC32: clear physical memory upon startup
This is to work around a bug in Solaris which appears not to explicitly clear
some of its internal kmem structures (particularly its pagelists) on boot. The
result of this is that Solaris will initially boot fine, until a reboot/reset
is initiated.
When this occurs, the kmem structures contain whatever junk was previously left
in memory during initialisation causing a panic. The fix is to clear physical
memory on startup (as OBP appears to do) so that the kmem intialisation code
behaves correctly.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at ilande.co.uk>
Modified:
trunk/openbios-devel/arch/sparc32/entry.S
Modified: trunk/openbios-devel/arch/sparc32/entry.S
==============================================================================
--- trunk/openbios-devel/arch/sparc32/entry.S Wed Mar 11 23:58:18 2015 (r1333)
+++ trunk/openbios-devel/arch/sparc32/entry.S Wed Mar 11 23:58:20 2015 (r1334)
@@ -122,7 +122,44 @@
or %g3, %g4, %g1
! %g1 contains end of memory
+ ! Get kernel address from configuration device
+ ! NB: little endian format
+ mov FW_CFG_KERNEL_ADDR, %g2
+ sub %g5, 2, %g5
+ stha %g2, [%g5] CFG_ASI
+ add %g5, 2, %g5
+ lduba [%g5] CFG_ASI, %g4
+ lduba [%g5] CFG_ASI, %g3
+ sll %g3, 8, %g3
+ or %g3, %g4, %g4
+
+ lduba [%g5] CFG_ASI, %g3
+ sll %g3, 16, %g3
+ or %g3, %g4, %g4
+
+ lduba [%g5] CFG_ASI, %g3
+ sll %g3, 24, %g3
+ or %g3, %g4, %g4
+
+ ! If kernel address is set, don't clear from base of RAM in order to
+ ! leave the kernel image intact
+ mov 0, %g6
+ cmp %g4, 0
+ beq clear_mem
+ nop
+
+ ! Start from 16M
+ set 0x1000000, %g6
+
+clear_mem:
+ sta %g0, [%g6] ASI_M_BYPASS
+ add %g6, 0x4, %g6
+ cmp %g6, %g1
+ bl clear_mem
+ nop
+
+clear_done:
! Start of private memory in %g6
set 0x2000, %g3
sub %g1, %g3, %g6
More information about the OpenBIOS
mailing list