Author: mcayland Date: Sun Feb 16 17:26:31 2014 New Revision: 1264 URL: http://tracker.coreboot.org/trac/openbios/changeset/1264
Log: SPARC32: implement Forth get-msecs word
Switch obp_ticks over to be a pointer to the counter rather than its value, then point this to the contents of a new Forth obp-ticks variable. This allows a simple get-msecs word to be implemented for SPARC32 which simply reads the value of the obp-ticks variable and places it on the stack.
Signed-off-by: Mark Cave-Ayland mark.cave-ayland@ilande.co.uk
Modified: trunk/openbios-devel/arch/sparc32/romvec.c trunk/openbios-devel/arch/sparc32/romvec.h trunk/openbios-devel/arch/sparc32/vectors.S trunk/openbios-devel/forth/device/other.fs
Modified: trunk/openbios-devel/arch/sparc32/romvec.c ============================================================================== --- trunk/openbios-devel/arch/sparc32/romvec.c Sun Feb 16 17:26:28 2014 (r1263) +++ trunk/openbios-devel/arch/sparc32/romvec.c Sun Feb 16 17:26:31 2014 (r1264) @@ -449,7 +449,7 @@ dstackcnt = dstacktmp; }
-volatile uint32_t obp_ticks; +volatile uint32_t *obp_ticks;
void * init_openprom(void) @@ -482,9 +482,11 @@ romvec0.pv_printf = obp_printf_handler; romvec0.pv_abort = obp_abort_handler;
- /* Reset the tick counter */ - obp_ticks = 0; - romvec0.pv_ticks = &obp_ticks; + /* Point to the Forth obp-ticks variable and reset */ + fword("obp-ticks"); + obp_ticks = cell2pointer(POP()); + *obp_ticks = 0; + romvec0.pv_ticks = obp_ticks;
romvec0.pv_halt = obp_halt_handler; romvec0.pv_synchook = &sync_hook;
Modified: trunk/openbios-devel/arch/sparc32/romvec.h ============================================================================== --- trunk/openbios-devel/arch/sparc32/romvec.h Sun Feb 16 17:26:28 2014 (r1263) +++ trunk/openbios-devel/arch/sparc32/romvec.h Sun Feb 16 17:26:31 2014 (r1264) @@ -2,7 +2,7 @@ * romvec main C function and handler declarations */
-extern volatile uint32_t obp_ticks; +extern volatile uint32_t *obp_ticks; void *init_openprom(void);
int obp_devopen(char *str);
Modified: trunk/openbios-devel/arch/sparc32/vectors.S ============================================================================== --- trunk/openbios-devel/arch/sparc32/vectors.S Sun Feb 16 17:26:28 2014 (r1263) +++ trunk/openbios-devel/arch/sparc32/vectors.S Sun Feb 16 17:26:31 2014 (r1264) @@ -208,9 +208,10 @@ ld [%l7 + %lo(counter_regs)], %l7 ld [%l7], %g0 sethi %hi(obp_ticks), %l7 - ld [%l7 + %lo(obp_ticks)], %l6 + ld [%l7 + %lo(obp_ticks)], %l7 + ld [%l7], %l6 add %l6, 10, %l6 - st %l6, [%l7 + %lo(obp_ticks)] + st %l6, [%l7] jmp %l1 rett %l2
Modified: trunk/openbios-devel/forth/device/other.fs ============================================================================== --- trunk/openbios-devel/forth/device/other.fs Sun Feb 16 17:26:28 2014 (r1263) +++ trunk/openbios-devel/forth/device/other.fs Sun Feb 16 17:26:31 2014 (r1264) @@ -93,12 +93,25 @@
\ 5.3.7.3 Time
+[IFDEF] CONFIG_SPARC32 + +\ OBP tick value updated by timer interrupt +variable obp-ticks + +: get-msecs ( -- n ) + obp-ticks @ + ; + +[ELSE] + 0 value dummy-msecs
: get-msecs ( -- n ) dummy-msecs dup 1+ to dummy-msecs ; - + +[THEN] + : ms ( n -- ) get-msecs + begin dup get-msecs < until