j
: Next unread message k
: Previous unread message j a
: Jump to all threads
j l
: Jump to MailingList overview
Author: blueswirl Date: 2008-09-29 19:11:00 +0200 (Mon, 29 Sep 2008) New Revision: 241
Modified: openbios-devel/arch/sparc32/entry.S openbios-devel/arch/sparc32/wof.S openbios-devel/arch/sparc32/wuf.S Log: Fix window handling on 7 window Sparcs
Modified: openbios-devel/arch/sparc32/entry.S =================================================================== --- openbios-devel/arch/sparc32/entry.S 2008-09-28 19:55:25 UTC (rev 240) +++ openbios-devel/arch/sparc32/entry.S 2008-09-29 17:11:00 UTC (rev 241) @@ -364,6 +364,49 @@ mov %y, %g2 st %g2, [%g1]
+ /* Compute NWINDOWS and stash it away. Now uses %wim trick explained + * in the V8 manual. Ok, this method seems to work, Sparc is cool... + * No, it doesn't work, have to play the save/readCWP/restore trick. + */ + + wr %g0, 0x0, %wim ! so we do not get a trap + WRITE_PAUSE + + save + + rd %psr, %g3 + + restore + + and %g3, 0x1f, %g3 + add %g3, 0x1, %g3 + + mov 2, %g1 + wr %g1, 0x0, %wim ! make window 1 invalid + WRITE_PAUSE + + cmp %g3, 0x7 + bne 1f + nop + + /* Adjust our window handling routines to + * do things correctly on 7 window Sparcs. + */ +#define PATCH_INSN(src, dest) \ + set src, %g5; \ + set dest, %g2; \ + ld [%g5], %g4; \ + st %g4, [%g2]; + + /* Patch for window spills... */ + PATCH_INSN(spnwin_patch1_7win, spnwin_patch1) + PATCH_INSN(spnwin_patch2_7win, spnwin_patch2) + + /* Patch for window fills... */ + PATCH_INSN(fnwin_patch1_7win, fnwin_patch1) + PATCH_INSN(fnwin_patch2_7win, fnwin_patch2) + +1: /* Finally, turn on traps so that we can call c-code. */ rd %psr, %g3 wr %g3, 0x0, %psr
Modified: openbios-devel/arch/sparc32/wof.S =================================================================== --- openbios-devel/arch/sparc32/wof.S 2008-09-28 19:55:25 UTC (rev 240) +++ openbios-devel/arch/sparc32/wof.S 2008-09-29 17:11:00 UTC (rev 241) @@ -77,7 +77,7 @@
.text .align 4 -#if 0 + /* BEGINNING OF PATCH INSTRUCTIONS */ /* On a 7-window Sparc the boot code patches spnwin_* * instructions with the following ones. @@ -87,7 +87,7 @@ spnwin_patch2_7win: and %glob_tmp, 0x7f, %glob_tmp spnwin_patch3_7win: and %twin_tmp, 0x7f, %twin_tmp /* END OF PATCH INSTRUCTIONS */ -#endif + /* The trap entry point has done the following: * * rd %psr, %l0
Modified: openbios-devel/arch/sparc32/wuf.S =================================================================== --- openbios-devel/arch/sparc32/wuf.S 2008-09-28 19:55:25 UTC (rev 240) +++ openbios-devel/arch/sparc32/wuf.S 2008-09-29 17:11:00 UTC (rev 241) @@ -96,7 +96,7 @@ * I == this window will be the invalid one when we * are done and return from trap if successful */ -#if 0 + /* BEGINNING OF PATCH INSTRUCTIONS */
/* On 7-window Sparc the boot code patches fnwin_patch1 @@ -106,8 +106,8 @@ fnwin_patch1_7win: srl %t_wim, 6, %twin_tmp2 fnwin_patch2_7win: and %twin_tmp1, 0x7f, %twin_tmp1 /* END OF PATCH INSTRUCTIONS */ -#endif
+ .globl fill_window_entry, fnwin_patch1, fnwin_patch2 fill_window_entry: /* LOCATION: Window 'T' */