[OpenBIOS] [commit] r1221 - trunk/openbios-devel/arch/sparc32
repository service
svn at openbios.org
Mon Aug 19 14:58:07 CEST 2013
Author: mcayland
Date: Mon Aug 19 14:58:06 2013
New Revision: 1221
URL: http://tracker.coreboot.org/trac/openbios/changeset/1221
Log:
SPARC32: handle data faults for peek/poke
Signed-off-by: Bob Breuer <breuerr at mc.net>
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at ilande.co.uk>
Modified:
trunk/openbios-devel/arch/sparc32/init.fs
trunk/openbios-devel/arch/sparc32/lib.c
Modified: trunk/openbios-devel/arch/sparc32/init.fs
==============================================================================
--- trunk/openbios-devel/arch/sparc32/init.fs Mon Aug 19 14:58:03 2013 (r1220)
+++ trunk/openbios-devel/arch/sparc32/init.fs Mon Aug 19 14:58:06 2013 (r1221)
@@ -46,6 +46,36 @@
0
;
+\ (peek) and (poke) implementation
+defer sfsr@
+defer ignore-dfault
+
+:noname
+ \ ( addr xt -- false | value true )
+ sfsr@ drop \ Clear any existing MMU fault status
+
+ -1 ignore-dfault ! \ Disable data fault trap
+ execute
+ 0 ignore-dfault ! \ Enable data fault trap
+
+ sfsr@ 0= if
+ true
+ else
+ drop false \ Failed, drop the read value
+ then
+; to (peek)
+
+:noname
+ \ ( value addr xt -- okay? )
+ sfsr@ drop \ Clear any existing MMU fault status
+
+ -1 ignore-dfault ! \ Disable data fault trap
+ execute
+ 0 ignore-dfault ! \ Enable data fault trap
+
+ sfsr@ 0= \ true if no fault
+; to (poke)
+
\ Load TCX FCode driver blob
[IFDEF] CONFIG_DRIVER_SBUS
-1 value tcx-driver-fcode
Modified: trunk/openbios-devel/arch/sparc32/lib.c
==============================================================================
--- trunk/openbios-devel/arch/sparc32/lib.c Mon Aug 19 14:58:03 2013 (r1220)
+++ trunk/openbios-devel/arch/sparc32/lib.c Mon Aug 19 14:58:06 2013 (r1221)
@@ -302,6 +302,22 @@
DPRINTF("obp_dumb_memfree 0x%p (size %d)\n", va, sz);
}
+/* Data fault handling routines */
+
+extern unsigned int ignore_dfault;
+
+/* ( -- reg ) */
+static void srmmu_get_sfsr(void)
+{
+ PUSH(srmmu_get_fstatus());
+}
+
+/* ( -- addr ) */
+static void ignore_dfault_addr(void)
+{
+ PUSH(pointer2cell(&ignore_dfault));
+}
+
void
ob_init_mmu(void)
{
@@ -360,6 +376,12 @@
bind_func("pgmap@", pgmap_fetch);
bind_func("pgmap!", pgmap_store);
bind_func("map-pages", ob_map_pages);
+
+ /* Install data fault handler words for cpeek etc. */
+ PUSH_xt(bind_noname_func(srmmu_get_sfsr));
+ feval("to sfsr@");
+ PUSH_xt(bind_noname_func(ignore_dfault_addr));
+ feval("to ignore-dfault");
}
/*
More information about the OpenBIOS
mailing list