libn64/os: Spin on different PI bit during boot.
authorTyler J. Stachecki <stachecki.tyler@gmail.com>
Sun, 28 Jan 2018 16:36:32 +0000 (11:36 -0500)
committerTyler J. Stachecki <stachecki.tyler@gmail.com>
Sun, 28 Jan 2018 16:36:32 +0000 (11:36 -0500)
Was previously spinning on a not-well-documented bit that
gets raised when the interrupt line goes high (i.e., the
PI DMA is done). Spin on the PI DMA busy bit instead.

Signed-off-by: Tyler J. Stachecki <stachecki.tyler@gmail.com>
libn64/os/asm/boot.s

index e71e2cf..fa9bcb9 100644 (file)
@@ -99,13 +99,13 @@ libn64_init_inval_icache:
 
 # Wait for the PI to finish DMA'ing the interrupt handler.
 libn64_init_pi_wait:
-  xori $ra, $ra, 0x8
-  bnezl $ra, libn64_init_pi_wait
   lw $ra, 0x10($at)
+  andi $ra, $ra, 0x1
+  bnez $ra, libn64_init_pi_wait
 
 # Clear BSS; leave it in the cache in case libn64_main needs it.
-  la $at, __bss_start
   addiu $a1, $v0, -0xC00
+  la $at, __bss_start
   beql $at, $a1, libn64_init_bss_clear_skip
 
 libn64_init_bss_clear: