Staging
v0.8.1
https://github.com/torvalds/linux
Raw File
Tip revision: 15c03dd4859ab16f9212238f29dd315654aa94f6 authored by Linus Torvalds on 29 September 2013, 22:02:38 UTC
Linux 3.12-rc3
Tip revision: 15c03dd
head.S
;
;  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
back to top