Adjust bootstrap code to build kernels that work with the mailbox test app.
authorDavid Given <dg@cowlark.com>
Tue, 21 May 2013 23:16:59 +0000 (00:16 +0100)
committerDavid Given <dg@cowlark.com>
Tue, 21 May 2013 23:16:59 +0000 (00:16 +0100)
--HG--
branch : dtrg-videocore

plat/rpi/boot.s

index b848e65..f5c8baf 100644 (file)
 
 .sect .text
 
+#define gp r15
+
 begtext:
-       lea r15, begtext
+       ! Set up system registers.
+
+       lea gp, begtext
        st sp, .returnsp
        st lr, .returnlr
 
-#if 0
+       ! The GPU kernel code will load parameters into r0-r5. Save them
+       ! so that the user code can access them.
+
+       sub r0, gp ! pointer
+       sub r1, gp ! pointer
+       sub r2, gp ! pointer
+       sub r3, gp ! pointer
+       ! r4-r5 are not pointers and don't need adjusting
+       push r0-r5
+       sub r0, sp, gp
+       st r0, _gpu_parameters
+
        ! Wipe the bss. (I'm a little suprised that __m_a_i_n doesn't do this.)
        
-       mov di, begbss
-       mov cx, endbss
-       sub cx, di
-       mov ax, 0
-       rep stosb
+       lea r0, begbss
+       lea r1, endbss
+       mov r2, #0
+_1:
+       stb r2, (r0)
+       addcmpb.lt r2, #1, r1, _1
        
        ! Push standard parameters onto the stack and go.
        
-       push envp               ! envp
-       push argv               ! argv
-       push 1                  ! argc
-#endif
-       b __m_a_i_n
+       mov r0, #0
+       push r0                 ! envp
+       push r0                 ! argv
+       push r0                 ! argc
+
+       ! Call the language startup code.
+
+       bl __m_a_i_n
+       ! Fall through to __exit if this returns.
 
 .define __exit
 __exit:
@@ -63,3 +83,9 @@ __exit:
 
 .comm .returnsp, 4
 .comm .returnlr, 4
+
+! User pointer to the GPU kernel parameter block.
+
+.define _gpu_parameters
+.comm _gpu_parameters, 4
+