! Copyright 2005,2006,2007,2009 Imagination Technologies #include <linux/init.h> #include <asm/metag_mem.h> #include <generated/asm-offsets.h> #undef __exit __HEAD ! Setup the stack and get going into _metag_start_kernel .global __start .type __start,function __start: ! D1Ar1 contains pTBI (ISTAT) ! D0Ar2 contains pTBI ! D1Ar3 contains __pTBISegs ! D0Ar4 contains kernel arglist pointer MOVT D0Re0,#HI(___pTBIs) ADD D0Re0,D0Re0,#LO(___pTBIs) SETL [D0Re0],D0Ar2,D1Ar1 MOVT D0Re0,#HI(___pTBISegs) ADD D0Re0,D0Re0,#LO(___pTBISegs) SETD [D0Re0],D1Ar3 MOV A0FrP,#0 MOV D0Re0,#0 MOV D1Re0,#0 MOV D1Ar3,#0 MOV D1Ar1,D0Ar4 !Store kernel boot params MOV D1Ar5,#0 MOV D0Ar6,#0 #ifdef CONFIG_METAG_DSP MOV D0.8,#0 #endif MOVT A0StP,#HI(_init_thread_union) ADD A0StP,A0StP,#LO(_init_thread_union) ADD A0StP,A0StP,#THREAD_INFO_SIZE MOVT D1RtP,#HI(_metag_start_kernel) CALL D1RtP,#LO(_metag_start_kernel) .size __start,.-__start !! Needed by TBX .global __exit .type __exit,function __exit: XOR TXENABLE,D0Re0,D0Re0 .size __exit,.-__exit #ifdef CONFIG_SMP .global _secondary_startup .type _secondary_startup,function _secondary_startup: #if CONFIG_PAGE_OFFSET < LINGLOBAL_BASE ! In case GCOn has just been turned on we need to fence any writes that ! the boot thread might have performed prior to coherency taking effect. MOVT D0Re0,#HI(LINSYSEVENT_WR_ATOMIC_UNLOCK) MOV D1Re0,#0 SETD [D0Re0], D1Re0 #endif MOVT A0StP,#HI(_secondary_data_stack) ADD A0StP,A0StP,#LO(_secondary_data_stack) GETD A0StP,[A0StP] ADD A0StP,A0StP,#THREAD_INFO_SIZE B _secondary_start_kernel .size _secondary_startup,.-_secondary_startup #endif