or1k: set heap start for optimsoc-gzll
- With the gzll kernel we have two different loading options:
  - If the image is loaded to the global memory, the bootstrapping
    loads the kernel to local memory. Applications are loaded on
    demand. The heap then starts right after bss.
  - If the image is pre-loaded to the local memory it includes the
    application binaries right after bss. The heap then starts after
    the application objects.
- We can check if this is a gzll kernel as it has the string "gzll" at
  0x2000. At 0x200c we then find the end of the application objects in
  the image. If there is no global memory we set _or1k_heap_start to
  this value.
    * or1k/boards/optimsoc.S: Heap for gzll kernel
			
			
This commit is contained in:
		
				
					committed by
					
						 Corinna Vinschen
						Corinna Vinschen
					
				
			
			
				
	
			
			
			
						parent
						
							58efeedd16
						
					
				
				
					commit
					5eb4a1666d
				
			| @@ -1,3 +1,7 @@ | |||||||
|  | 2015-05-26  Stefan Wallentowitz  <stefan.wallentowitz@tum.de> | ||||||
|  |  | ||||||
|  | 	* or1k/boards/optimsoc.S: Heap for gzll kernel | ||||||
|  |  | ||||||
| 2015-05-26  Stefan Wallentowitz  <stefan.wallentowitz@tum.de> | 2015-05-26  Stefan Wallentowitz  <stefan.wallentowitz@tum.de> | ||||||
|  |  | ||||||
| 	* or1k/sbrk.c: Allow for different heap start | 	* or1k/sbrk.c: Allow for different heap start | ||||||
|   | |||||||
| @@ -22,7 +22,10 @@ | |||||||
|  |  | ||||||
| #define OPTIMSOC_NA_REGS       OPTIMSOC_NA_BASE + 0x00000 | #define OPTIMSOC_NA_REGS       OPTIMSOC_NA_BASE + 0x00000 | ||||||
| #define OPTIMSOC_NA_LMEM_SIZE  OPTIMSOC_NA_REGS + 0x24 | #define OPTIMSOC_NA_LMEM_SIZE  OPTIMSOC_NA_REGS + 0x24 | ||||||
|  | #define OPTIMSOC_NA_GMEM_SIZE  OPTIMSOC_NA_REGS + 0x1c | ||||||
|  |  | ||||||
|  | #define OPTIMSOC_GZLL_STRING 0x677a6c6c | ||||||
|  | #define OPTIMSOC_GZLL_IMAGE_LAYOUT 0x2000 | ||||||
| /* | /* | ||||||
|  * Define symbols to be used during startup - file is linked at compile time |  * Define symbols to be used during startup - file is linked at compile time | ||||||
|  * |  * | ||||||
| @@ -49,6 +52,8 @@ _or1k_board_exit: | |||||||
| .Lexitloop: | .Lexitloop: | ||||||
| 	OR1K_DELAYED_NOP(l.j .Lexitloop) | 	OR1K_DELAYED_NOP(l.j .Lexitloop) | ||||||
|  |  | ||||||
|  | .extern _or1k_heap_start | ||||||
|  |  | ||||||
| .global _or1k_board_init_early | .global _or1k_board_init_early | ||||||
| _or1k_board_init_early: | _or1k_board_init_early: | ||||||
| #ifndef __OR1K_MULTICORE__ | #ifndef __OR1K_MULTICORE__ | ||||||
| @@ -62,6 +67,30 @@ _or1k_board_init_early: | |||||||
| 	l.movhi	r2,hi(_or1k_board_mem_size) | 	l.movhi	r2,hi(_or1k_board_mem_size) | ||||||
| 	l.ori	r2,r2,lo(_or1k_board_mem_size) | 	l.ori	r2,r2,lo(_or1k_board_mem_size) | ||||||
| 	l.sw	0(r2),r1 | 	l.sw	0(r2),r1 | ||||||
|  | 	// Set stack beyond apps if single image in local memory | ||||||
|  | 	// Is this a kernel running? | ||||||
|  | 	l.movhi r3,hi(OPTIMSOC_GZLL_STRING) | ||||||
|  | 	l.ori	r3,r3,lo(OPTIMSOC_GZLL_STRING) | ||||||
|  | 	l.movhi r4,hi(OPTIMSOC_GZLL_IMAGE_LAYOUT) | ||||||
|  | 	l.ori   r4,r4,lo(OPTIMSOC_GZLL_IMAGE_LAYOUT) | ||||||
|  | 	l.lwz   r5,0(r4) | ||||||
|  | 	l.sfeq  r3,r5 | ||||||
|  | 	// If not, we are done | ||||||
|  | 	OR1K_DELAYED_NOP(l.bnf ._or1k_board_init_early_done) | ||||||
|  | 	// Else: are we running with global memory (loading)? | ||||||
|  | 	l.movhi r6,hi(OPTIMSOC_NA_GMEM_SIZE) | ||||||
|  | 	l.ori   r6,r6,lo(OPTIMSOC_NA_GMEM_SIZE) | ||||||
|  | 	l.lwz   r6,0(r6) | ||||||
|  | 	l.sfeqi r6,0 | ||||||
|  | 	// If yes, we are done | ||||||
|  | 	OR1K_DELAYED_NOP(l.bnf ._or1k_board_init_early_done) | ||||||
|  | 	// Else: Read end of apps | ||||||
|  | 	l.lwz   r7,12(r4) | ||||||
|  | 	l.movhi r8,hi(_or1k_heap_start) | ||||||
|  | 	l.ori   r8,r8,lo(_or1k_heap_start) | ||||||
|  | 	l.sw    0(r8),r7 | ||||||
|  | ._or1k_board_init_early_done: | ||||||
|  | 	OR1K_DELAYED_NOP(l.jr r9) | ||||||
|  |  | ||||||
| .weak _or1k_board_init | .weak _or1k_board_init | ||||||
| _or1k_board_init: | _or1k_board_init: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user