diff options
| author | Russell King <rmk+kernel@arm.linux.org.uk> | 2012-01-13 15:00:22 +0000 | 
|---|---|---|
| committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2012-01-13 15:00:22 +0000 | 
| commit | 4de3a8e101150feaefa1139611a50ff37467f33e (patch) | |
| tree | daada742542518b02d7db7c5d32e715eaa5f166d /arch/c6x/kernel/head.S | |
| parent | 294064f58953f9964e5945424b09c51800330a83 (diff) | |
| parent | 099469502f62fbe0d7e4f0b83a2f22538367f734 (diff) | |
| download | olio-linux-3.10-4de3a8e101150feaefa1139611a50ff37467f33e.tar.xz olio-linux-3.10-4de3a8e101150feaefa1139611a50ff37467f33e.zip  | |
Merge branch 'master' into fixes
Diffstat (limited to 'arch/c6x/kernel/head.S')
| -rw-r--r-- | arch/c6x/kernel/head.S | 84 | 
1 files changed, 84 insertions, 0 deletions
diff --git a/arch/c6x/kernel/head.S b/arch/c6x/kernel/head.S new file mode 100644 index 00000000000..133eab6edf6 --- /dev/null +++ b/arch/c6x/kernel/head.S @@ -0,0 +1,84 @@ +; +;  Port on Texas Instruments TMS320C6x architecture +; +;  Copyright (C) 2004, 2009, 2010, 2011 Texas Instruments Incorporated +;  Author: Aurelien Jacquiot (aurelien.jacquiot@jaluna.com) +; +;  This program is free software; you can redistribute it and/or modify +;  it under the terms of the GNU General Public License version 2 as +;  published by the Free Software Foundation. +; +#include <linux/linkage.h> +#include <linux/of_fdt.h> +#include <asm/asm-offsets.h> + +	__HEAD +ENTRY(_c_int00) +	;; Save magic and pointer +	MV	.S1	A4,A10 +	MV	.S2	B4,B10 +	MVKL	.S2	__bss_start,B5 +	MVKH	.S2	__bss_start,B5 +	MVKL	.S2	__bss_stop,B6 +	MVKH	.S2	__bss_stop,B6 +	SUB	.L2	B6,B5,B6 ; bss size + +	;; Set the stack pointer +	MVKL	.S2	current_ksp,B0 +	MVKH	.S2	current_ksp,B0 +	LDW	.D2T2	*B0,B15 + +	;; clear bss +	SHR	.S2	B6,3,B0	  ; number of dwords to clear +	ZERO	.L2	B13 +	ZERO	.L2	B12 +bss_loop: +	BDEC	.S2	bss_loop,B0 +	NOP	3 +	CMPLT	.L2	B0,0,B1 + [!B1]	STDW	.D2T2	B13:B12,*B5++[1] + +	NOP	4 +	AND	.D2	~7,B15,B15 + +	;; Clear GIE and PGIE +	MVC	.S2	CSR,B2 +	CLR	.S2	B2,0,1,B2 +	MVC	.S2	B2,CSR +	MVC	.S2	TSR,B2 +	CLR	.S2	B2,0,1,B2 +	MVC	.S2	B2,TSR +	MVC	.S2	ITSR,B2 +	CLR	.S2	B2,0,1,B2 +	MVC	.S2	B2,ITSR +	MVC	.S2	NTSR,B2 +	CLR	.S2	B2,0,1,B2 +	MVC	.S2	B2,NTSR + +	;; pass DTB pointer to machine_init (or zero if none) +	MVKL	.S1	OF_DT_HEADER,A0 +	MVKH	.S1	OF_DT_HEADER,A0 +	CMPEQ	.L1	A10,A0,A0 +  [A0]	MV	.S1X	B10,A4 +  [!A0] MVK	.S1	0,A4 + +#ifdef CONFIG_C6X_BIG_KERNEL +	MVKL	.S1	machine_init,A0 +	MVKH	.S1	machine_init,A0 +	B	.S2X	A0 +	ADDKPC  .S2     0f,B3,4 +0: +#else +	CALLP	.S2	machine_init,B3 +#endif + +	;; Jump to Linux init +#ifdef CONFIG_C6X_BIG_KERNEL +	MVKL	.S1	start_kernel,A0 +	MVKH	.S1	start_kernel,A0 +	B	.S2X	A0 +#else +	B	.S2	start_kernel +#endif +	NOP	5 +L1:	BNOP	.S2	L1,5  |