2005-07-27 11:44:44 -07:00
/ *
* CRISv3 2 k e r n e l s t a r t u p c o d e .
*
* Copyright ( C ) 2 0 0 3 , A x i s C o m m u n i c a t i o n s A B
* /
# define A S S E M B L E R _ M A C R O S _ O N L Y
/ *
* The m a c r o s f o u n d i n m m u _ d e f s _ a s m . h u s e s t h e ## c o n c a t e n a t i o n o p e r a t o r , s o
* - traditional m u s t n o t b e u s e d w h e n a s s e m b l i n g t h i s f i l e .
* /
2008-10-21 17:45:58 +02:00
# include < a r c h / m e m m a p . h >
2008-10-22 23:57:53 +02:00
# include < h w r e g s / r e g _ r d w r . h >
2007-11-30 17:54:12 +01:00
# include < h w r e g s / i n t r _ v e c t . h >
# include < h w r e g s / a s m / m m u _ d e f s _ a s m . h >
# include < h w r e g s / a s m / r e g _ m a p _ a s m . h >
2008-10-21 17:45:58 +02:00
# include < m a c h / s t a r t u p . i n c >
2005-07-27 11:44:44 -07:00
# define C R A M F S _ M A G I C 0 x28 c d3 d45
2007-11-30 17:54:12 +01:00
# define J H E A D _ M A G I C 0 x1 F F 5 2 8 A 6
# define J H E A D _ S I Z E 8
2005-07-27 11:44:44 -07:00
# define R A M _ I N I T _ M A G I C 0 x56 9 0 2 3 8 7
# define C O M M A N D _ L I N E _ M A G I C 0 x87 1 0 9 5 6 3
2007-11-30 17:54:12 +01:00
# define N A N D _ B O O T _ M A G I C 0 x9 a9 d b00 1
2005-07-27 11:44:44 -07:00
;; NOTE: R8 and R9 carry information from the decompressor (if the
;; kernel was compressed). They must not be used in the code below
;; until they are read!
;; Exported symbols.
.global etrax_irv
.global romfs_start
.global romfs_length
.global romfs_in_flash
2007-11-30 17:54:12 +01:00
.global nand_boot
2005-07-27 11:44:44 -07:00
.global swapper_pg_dir
;; Dummy section to make it bootable with current VCS simulator
2007-11-30 17:54:12 +01:00
# ifdef C O N F I G _ E T R A X _ V C S _ S I M
2005-07-27 11:44:44 -07:00
.section " .boot " , " ax"
ba t s t a r t
nop
# endif
.text
tstart :
;; This is the entry point of the kernel. The CPU is currently in
;; supervisor mode.
;;
;; 0x00000000 if flash.
;; 0x40004000 if DRAM.
;;
di
2007-11-30 17:54:12 +01:00
START_ C L O C K S
SETUP_ W A I T _ S T A T E S
2008-01-29 18:54:05 +01:00
GIO_ I N I T
2007-11-30 17:54:12 +01:00
# ifdef C O N F I G _ S M P
secondary_cpu_entry : /* Entry point for secondary CPUs */
di
2005-07-27 11:44:44 -07:00
# endif
;; Setup and enable the MMU. Use same configuration for both the data
;; and the instruction MMU.
;;
;; Note; 3 cycles is needed for a bank-select to take effect. Further;
;; bank 1 is the instruction MMU, bank 2 is the data MMU.
2007-11-30 17:54:12 +01:00
# ifndef C O N F I G _ E T R A X _ V C S _ S I M
2005-07-27 11:44:44 -07:00
move. d R E G _ F I E L D ( m m u , r w _ m m _ k b a s e _ h i , b a s e _ e , 8 ) \
| REG_ F I E L D ( m m u , r w _ m m _ k b a s e _ h i , b a s e _ c , 4 ) \
| REG_ F I E L D ( m m u , r w _ m m _ k b a s e _ h i , b a s e _ b , 0 x b ) , $ r0
# else
;; Map the virtual DRAM to the RW eprom area at address 0.
;; Also map 0xa for the hook calls,
move. d R E G _ F I E L D ( m m u , r w _ m m _ k b a s e _ h i , b a s e _ e , 8 ) \
2007-11-30 17:54:12 +01:00
| REG_ F I E L D ( m m u , r w _ m m _ k b a s e _ h i , b a s e _ c , 4 ) \
2005-07-27 11:44:44 -07:00
| REG_ F I E L D ( m m u , r w _ m m _ k b a s e _ h i , b a s e _ b , 0 x b ) \
| REG_ F I E L D ( m m u , r w _ m m _ k b a s e _ h i , b a s e _ a , 0 x a ) , $ r0
# endif
;; Temporary map of 0x40 -> 0x40 and 0x00 -> 0x00.
move. d R E G _ F I E L D ( m m u , r w _ m m _ k b a s e _ l o , b a s e _ 4 , 4 ) \
| REG_ F I E L D ( m m u , r w _ m m _ k b a s e _ l o , b a s e _ 0 , 0 ) , $ r1
;; Enable certain page protections and setup linear mapping
;; for f,e,c,b,4,0.
2007-11-30 17:54:12 +01:00
# ifndef C O N F I G _ E T R A X _ V C S _ S I M
2005-07-27 11:44:44 -07:00
move. d R E G _ S T A T E ( m m u , r w _ m m _ c f g , w e , o n ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , a c c , o n ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , e x , o n ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , i n v , o n ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ f , l i n e a r ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ e , l i n e a r ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ d , p a g e ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ c , l i n e a r ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ b , l i n e a r ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ a , p a g e ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ 9 , p a g e ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ 8 , p a g e ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ 7 , p a g e ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ 6 , p a g e ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ 5 , p a g e ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ 4 , l i n e a r ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ 3 , p a g e ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ 2 , p a g e ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ 1 , p a g e ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ 0 , l i n e a r ) , $ r2
# else
move. d R E G _ S T A T E ( m m u , r w _ m m _ c f g , w e , o n ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , a c c , o n ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , e x , o n ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , i n v , o n ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ f , l i n e a r ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ e , l i n e a r ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ d , p a g e ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ c , l i n e a r ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ b , l i n e a r ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ a , l i n e a r ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ 9 , p a g e ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ 8 , p a g e ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ 7 , p a g e ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ 6 , p a g e ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ 5 , p a g e ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ 4 , l i n e a r ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ 3 , p a g e ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ 2 , p a g e ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ 1 , p a g e ) \
| REG_ S T A T E ( m m u , r w _ m m _ c f g , s e g _ 0 , l i n e a r ) , $ r2
# endif
;; Update instruction MMU.
move 1 , $ s r s
nop
nop
nop
move $ r0 , $ s2 ; kbase_hi.
move $ r1 , $ s1 ; kbase_lo.
move $ r2 , $ s0 ; mm_cfg, virtual memory configuration.
;; Update data MMU.
move 2 , $ s r s
nop
nop
nop
move $ r0 , $ s2 ; kbase_hi.
move $ r1 , $ s1 ; kbase_lo
move $ r2 , $ s0 ; mm_cfg, virtual memory configuration.
;; Enable data and instruction MMU.
move 0 , $ s r s
moveq 0 x f , $ r0 ; IMMU, DMMU, DCache, Icache on
nop
nop
nop
move $ r0 , $ s0
nop
nop
nop
# ifdef C O N F I G _ S M P
;; Read CPU ID
move 0 , $ s r s
nop
nop
nop
2007-11-30 17:54:12 +01:00
move $ s12 , $ r0
2005-07-27 11:44:44 -07:00
cmpq 0 , $ r0
beq m a s t e r _ c p u
nop
slave_cpu :
; Time to boot-up. Get stack location provided by master CPU.
move. d s m p _ i n i t _ c u r r e n t _ i d l e _ t h r e a d , $ r1
move. d [ $ r1 ] , $ s p
add. d 8 1 9 2 , $ s p
move. d e b p _ s t a r t , $ r0 ; Defined in linker-script.
move $ r0 , $ e b p
jsr s m p _ c a l l i n
nop
master_cpu :
2007-11-30 17:54:12 +01:00
/ * Set u p e n t r y p o i n t f o r s e c o n d a r y C P U s . T h e b o o t R O M h a s s e t u p
* EBP a t s t a r t o f i n t e r n a l m e m o r y . T h e C P U w i l l g e t t h e r e
* later w h e n w e i s s u e a n I P I t o t h e m . . . * /
move. d M E M _ I N T M E M _ S T A R T + I P I _ I N T R _ V E C T * 4 , $ r0
move. d s e c o n d a r y _ c p u _ e n t r y , $ r1
move. d $ r1 , [ $ r0 ]
2005-07-27 11:44:44 -07:00
# endif
2007-11-30 17:54:12 +01:00
# ifndef C O N F I G _ E T R A X _ V C S _ S I M
; Check if starting from DRAM (network->RAM boot or unpacked
; compressed kernel), or directly from flash.
2005-07-27 11:44:44 -07:00
lapcq . , $ r0
and. d 0 x7 f f f f f f f , $ r0 ; Mask off the non-cache bit.
cmp. d 0 x10 0 0 0 , $ r0 ; Arbitrary, something above this code.
blo _ i n f l a s h0
nop
# endif
jump _ i n r a m ; Jump to cached RAM.
nop
;; Jumpgate.
_inflash0 :
jump _ i n f l a s h
nop
;; Put the following in a section so that storage for it can be
;; reclaimed after init is finished.
.section " .init .text " , " ax"
_inflash :
;; Initialize DRAM.
cmp. d R A M _ I N I T _ M A G I C , $ r8 ; Already initialized?
beq _ d r a m _ i n i t i a l i z e d
nop
2008-10-22 23:57:53 +02:00
# if d e f i n e d C O N F I G _ E T R A X F S
# include " . . / m a c h - f s / d r a m _ i n i t . S "
# elif d e f i n e d C O N F I G _ C R I S _ M A C H _ A R T P E C 3
# include " . . / m a c h - a3 / d r a m _ i n i t . S "
# else
# error O n l y E T R A X F S a n d A R T P E C - 3 s u p p o r t e d !
# endif
2005-07-27 11:44:44 -07:00
_dram_initialized :
;; Copy the text and data section to DRAM. This depends on that the
;; variables used below are correctly set up by the linker script.
;; The calculated value stored in R4 is used below.
2007-11-30 17:54:12 +01:00
;; Leave the cramfs file system (piggybacked after the kernel) in flash.
2005-07-27 11:44:44 -07:00
moveq 0 , $ r0 ; Source.
move. d t e x t _ s t a r t , $ r1 ; Destination.
move. d _ _ v m l i n u x _ e n d , $ r2
move. d $ r2 , $ r4
sub. d $ r1 , $ r4
1 : move. w [ $ r0 + ] , $ r3
move. w $ r3 , [ $ r1 + ]
cmp. d $ r2 , $ r1
blo 1 b
nop
2007-11-30 17:54:12 +01:00
;; Check for cramfs.
2005-07-27 11:44:44 -07:00
moveq 0 , $ r0
move. d r o m f s _ l e n g t h , $ r1
move. d $ r0 , [ $ r1 ]
move. d [ $ r4 ] , $ r0 ; cramfs_super.magic
cmp. d C R A M F S _ M A G I C , $ r0
bne 1 f
nop
2007-11-30 17:54:12 +01:00
;; Set length and start of cramfs, set romfs_in_flash flag
2005-07-27 11:44:44 -07:00
addoq + 4 , $ r4 , $ a c r
move. d [ $ a c r ] , $ r0
move. d r o m f s _ l e n g t h , $ r1
move. d $ r0 , [ $ r1 ]
add. d 0 x f00 0 0 0 0 0 , $ r4 ; Add cached flash start in virtual memory.
move. d r o m f s _ s t a r t , $ r1
move. d $ r4 , [ $ r1 ]
1 : moveq 1 , $ r0
move. d r o m f s _ i n _ f l a s h , $ r1
move. d $ r0 , [ $ r1 ]
jump _ s t a r t _ i t ; Jump to cached code.
nop
_inram :
2007-11-30 17:54:12 +01:00
;; Check if booting from NAND flash; if so, set appropriate flags
;; and move on.
cmp. d N A N D _ B O O T _ M A G I C , $ r12
bne m o v e _ c r a m f s ; not nand, jump
2005-07-27 11:44:44 -07:00
moveq 1 , $ r0
2007-11-30 17:54:12 +01:00
move. d n a n d _ b o o t , $ r1 ; tell axisflashmap we're booting from NAND
2005-07-27 11:44:44 -07:00
move. d $ r0 , [ $ r1 ]
2007-11-30 17:54:12 +01:00
moveq 0 , $ r0 ; tell axisflashmap romfs is not in
move. d r o m f s _ i n _ f l a s h , $ r1 ; (directly accessed) flash
move. d $ r0 , [ $ r1 ]
jump _ s t a r t _ i t ; continue with boot
2005-07-27 11:44:44 -07:00
nop
move_cramfs :
2007-11-30 17:54:12 +01:00
;; kernel is in DRAM.
;; Must figure out if there is a piggybacked rootfs image or not.
;; Set romfs_length to 0 => no rootfs image available by default.
2005-07-27 11:44:44 -07:00
moveq 0 , $ r0
move. d r o m f s _ l e n g t h , $ r1
move. d $ r0 , [ $ r1 ]
2007-11-30 17:54:12 +01:00
# ifndef C O N F I G _ E T R A X _ V C S _ S I M
2005-07-27 11:44:44 -07:00
;; The kernel could have been unpacked to DRAM by the loader, but
2007-11-30 17:54:12 +01:00
;; the cramfs image could still be in the flash immediately
;; following the compressed kernel image. The loader passes the address
;; of the byte succeeding the last compressed byte in the flash in
2005-07-27 11:44:44 -07:00
;; register R9 when starting the kernel.
cmp. d 0 x0 f f f f f f8 , $ r9
bhs _ n o _ r o m f s _ i n _ f l a s h ; R9 points outside the flash area.
nop
# else
ba _ n o _ r o m f s _ i n _ f l a s h
nop
# endif
2007-11-30 17:54:12 +01:00
;; cramfs rootfs might to be in flash. Check for it.
2005-07-27 11:44:44 -07:00
move. d [ $ r9 ] , $ r0 ; cramfs_super.magic
cmp. d C R A M F S _ M A G I C , $ r0
bne _ n o _ r o m f s _ i n _ f l a s h
nop
2007-11-30 17:54:12 +01:00
;; found cramfs in flash. set address and size, and romfs_in_flash flag.
2005-07-27 11:44:44 -07:00
addoq + 4 , $ r9 , $ a c r
move. d [ $ a c r ] , $ r0
move. d r o m f s _ l e n g t h , $ r1
move. d $ r0 , [ $ r1 ]
add. d 0 x f00 0 0 0 0 0 , $ r9 ; Add cached flash start in virtual memory.
move. d r o m f s _ s t a r t , $ r1
move. d $ r9 , [ $ r1 ]
moveq 1 , $ r0
move. d r o m f s _ i n _ f l a s h , $ r1
move. d $ r0 , [ $ r1 ]
jump _ s t a r t _ i t ; Jump to cached code.
nop
_no_romfs_in_flash :
2007-11-30 17:54:12 +01:00
;; No romfs in flash, so look for cramfs, or jffs2 with jhead,
;; after kernel in RAM, as is the case with network->RAM boot.
;; For cramfs, partition starts with magic and length.
;; For jffs2, a jhead is prepended which contains with magic and length.
;; The jhead is not part of the jffs2 partition however.
2005-07-27 11:44:44 -07:00
# ifndef C O N F I G _ E T R A X F S _ S I M
move. d _ _ v m l i n u x _ e n d , $ r0
# else
move. d _ _ e n d , $ r0
# endif
move. d [ $ r0 ] , $ r1
2007-11-30 17:54:12 +01:00
cmp. d C R A M F S _ M A G I C , $ r1 ; cramfs magic?
beq 2 f ; yes, jump
nop
cmp. d J H E A D _ M A G I C , $ r1 ; jffs2 (jhead) magic?
bne 4 f ; no, skip copy
nop
addq 4 , $ r0 ; location of jffs2 size
move. d [ $ r0 + ] , $ r2 ; fetch jffs2 size -> r2
; r0 now points to start of jffs2
ba 3 f
2005-07-27 11:44:44 -07:00
nop
2007-11-30 17:54:12 +01:00
2 :
addoq + 4 , $ r0 , $ a c r ; location of cramfs size
move. d [ $ a c r ] , $ r2 ; fetch cramfs size -> r2
; r0 still points to start of cramfs
3 :
;; Now, move the root fs to after kernel's BSS
2005-07-27 11:44:44 -07:00
2007-11-30 17:54:12 +01:00
move. d _ e n d , $ r1 ; start of cramfs -> r1
2005-07-27 11:44:44 -07:00
move. d r o m f s _ s t a r t , $ r3
2007-11-30 17:54:12 +01:00
move. d $ r1 , [ $ r3 ] ; store at romfs_start (for axisflashmap)
2005-07-27 11:44:44 -07:00
move. d r o m f s _ l e n g t h , $ r3
2007-11-30 17:54:12 +01:00
move. d $ r2 , [ $ r3 ] ; store size at romfs_length
2005-07-27 11:44:44 -07:00
2007-11-30 17:54:12 +01:00
# ifndef C O N F I G _ E T R A X _ V C S _ S I M
add. d $ r2 , $ r0 ; copy from end and downwards
2005-07-27 11:44:44 -07:00
add. d $ r2 , $ r1
lsrq 1 , $ r2 ; Size is in bytes, we copy words.
addq 1 , $ r2
1 :
move. w [ $ r0 ] , $ r3
move. w $ r3 , [ $ r1 ]
subq 2 , $ r0
subq 2 , $ r1
subq 1 , $ r2
bne 1 b
nop
# endif
2007-11-30 17:54:12 +01:00
4 :
;; BSS move done.
;; Clear romfs_in_flash flag, as we now know romfs is in DRAM
;; Also clear nand_boot flag; if we got here, we know we've not
;; booted from NAND flash.
2005-07-27 11:44:44 -07:00
moveq 0 , $ r0
move. d r o m f s _ i n _ f l a s h , $ r1
move. d $ r0 , [ $ r1 ]
2007-11-30 17:54:12 +01:00
moveq 0 , $ r0
move. d n a n d _ b o o t , $ r1
move. d $ r0 , [ $ r1 ]
2005-07-27 11:44:44 -07:00
jump _ s t a r t _ i t ; Jump to cached code.
nop
_start_it :
;; Check if kernel command line is supplied
cmp. d C O M M A N D _ L I N E _ M A G I C , $ r10
bne n o _ c o m m a n d _ l i n e
nop
move. d 2 5 6 , $ r13
move. d c r i s _ c o m m a n d _ l i n e , $ r10
or. d 0 x80 0 0 0 0 0 0 , $ r11 ; Make it virtual
1 :
2007-11-30 17:54:12 +01:00
move. b [ $ r11 + ] , $ r1
move. b $ r1 , [ $ r10 + ]
2005-07-27 11:44:44 -07:00
subq 1 , $ r13
bne 1 b
nop
no_command_line :
;; The kernel stack contains a task structure for each task. This
;; the initial kernel stack is in the same page as the init_task,
;; but starts at the top of the page, i.e. + 8192 bytes.
move. d i n i t _ t h r e a d _ u n i o n + 8 1 9 2 , $ s p
move. d e b p _ s t a r t , $ r0 ; Defined in linker-script.
move $ r0 , $ e b p
move. d e t r a x _ i r v , $ r1 ; Set the exception base register and pointer.
move. d $ r0 , [ $ r1 ]
2007-11-30 17:54:12 +01:00
# ifndef C O N F I G _ E T R A X _ V C S _ S I M
2005-07-27 11:44:44 -07:00
;; Clear the BSS region from _bss_start to _end.
move. d _ _ b s s _ s t a r t , $ r0
move. d _ e n d , $ r1
1 : clear. d [ $ r0 + ]
cmp. d $ r1 , $ r0
blo 1 b
nop
# endif
2007-11-30 17:54:12 +01:00
# ifdef C O N F I G _ E T R A X _ V C S _ S I M
2005-07-27 11:44:44 -07:00
/* Set the watchdog timeout to something big. Will be removed when */
/* watchdog can be disabled with command line option */
move. d 0 x7 f f f f f f f , $ r10
jsr C P U _ W A T C H D O G _ T I M E O U T
nop
# endif
; Initialize registers to increase determinism
move. d _ _ b s s _ s t a r t , $ r0
movem [ $ r0 ] , $ r13
2007-11-30 17:54:12 +01:00
# ifdef C O N F I G _ E T R A X _ L 2 C A C H E
jsr l 2 c a c h e _ i n i t
nop
# endif
2005-07-27 11:44:44 -07:00
jump s t a r t _ k e r n e l ; Jump to start_kernel() in init/main.c.
nop
.data
etrax_irv :
.dword 0
2007-11-30 17:54:12 +01:00
; Variables for communication with the Axis flash map driver (axisflashmap),
; and for setting up memory in arch/cris/kernel/setup.c .
; romfs_start is set to the start of the root file system, if it exists
; in directly accessible memory (i.e. NOR Flash when booting from Flash,
; or RAM when booting directly from a network-downloaded RAM image)
2005-07-27 11:44:44 -07:00
romfs_start :
.dword 0
2007-11-30 17:54:12 +01:00
; romfs_length is set to the size of the root file system image, if it exists
; in directly accessible memory (see romfs_start). Otherwise it is set to 0.
2005-07-27 11:44:44 -07:00
romfs_length :
.dword 0
2007-11-30 17:54:12 +01:00
; romfs_in_flash is set to 1 if the root file system resides in directly
; accessible flash memory (i.e. NOR flash). It is set to 0 for RAM boot
; or NAND flash boot.
2005-07-27 11:44:44 -07:00
romfs_in_flash :
.dword 0
2007-11-30 17:54:12 +01:00
; nand_boot is set to 1 when the kernel has been booted from NAND flash
nand_boot :
2005-07-27 11:44:44 -07:00
.dword 0
swapper_ p g _ d i r = 0 x c00 0 2 0 0 0
.section " .init .data " , " aw"
2008-10-22 23:57:53 +02:00
# if d e f i n e d C O N F I G _ E T R A X F S
# include " . . / m a c h - f s / h w _ s e t t i n g s . S "
# elif d e f i n e d C O N F I G _ C R I S _ M A C H _ A R T P E C 3
# include " . . / m a c h - a3 / h w _ s e t t i n g s . S "
# else
# error O n l y E T R A X F S a n d A R T P E C - 3 s u p p o r t e d !
# endif