diff options
| author | Tom Rini <trini@ti.com> | 2014-01-10 10:56:00 -0500 | 
|---|---|---|
| committer | Tom Rini <trini@ti.com> | 2014-01-10 10:56:00 -0500 | 
| commit | 7f673c99c2d8d1aa21996c5b914f06d784b080ca (patch) | |
| tree | df68108a0bd7326dc6299b96853b769220c55470 /arch/arm/include/asm/macro.h | |
| parent | 8401bfa91ef57e331e2a3abdf768d41803bec88e (diff) | |
| parent | 10a147bc665367111920be657409a5d56d3c0590 (diff) | |
| download | olio-uboot-2014.01-7f673c99c2d8d1aa21996c5b914f06d784b080ca.tar.xz olio-uboot-2014.01-7f673c99c2d8d1aa21996c5b914f06d784b080ca.zip | |
Merge branch 'master' of git://git.denx.de/u-boot-arm
Bringing in the MMC tree means that CONFIG_BOUNCE_BUFFER needed to be
added to include/configs/exynos5-dt.h now.
Conflicts:
	include/configs/exynos5250-dt.h
Signed-off-by: Tom Rini <trini@ti.com>
Diffstat (limited to 'arch/arm/include/asm/macro.h')
| -rw-r--r-- | arch/arm/include/asm/macro.h | 53 | 
1 files changed, 53 insertions, 0 deletions
| diff --git a/arch/arm/include/asm/macro.h b/arch/arm/include/asm/macro.h index ff13f36ba..f77e4b880 100644 --- a/arch/arm/include/asm/macro.h +++ b/arch/arm/include/asm/macro.h @@ -54,5 +54,58 @@  	bcs	1b  .endm +#ifdef CONFIG_ARM64 +/* + * Register aliases. + */ +lr	.req	x30 + +/* + * Branch according to exception level + */ +.macro	switch_el, xreg, el3_label, el2_label, el1_label +	mrs	\xreg, CurrentEL +	cmp	\xreg, 0xc +	b.eq	\el3_label +	cmp	\xreg, 0x8 +	b.eq	\el2_label +	cmp	\xreg, 0x4 +	b.eq	\el1_label +.endm + +/* + * Branch if current processor is a slave, + * choose processor with all zero affinity value as the master. + */ +.macro	branch_if_slave, xreg, slave_label +	mrs	\xreg, mpidr_el1 +	tst	\xreg, #0xff		/* Test Affinity 0 */ +	b.ne	\slave_label +	lsr	\xreg, \xreg, #8 +	tst	\xreg, #0xff		/* Test Affinity 1 */ +	b.ne	\slave_label +	lsr	\xreg, \xreg, #8 +	tst	\xreg, #0xff		/* Test Affinity 2 */ +	b.ne	\slave_label +	lsr	\xreg, \xreg, #16 +	tst	\xreg, #0xff		/* Test Affinity 3 */ +	b.ne	\slave_label +.endm + +/* + * Branch if current processor is a master, + * choose processor with all zero affinity value as the master. + */ +.macro	branch_if_master, xreg1, xreg2, master_label +	mrs	\xreg1, mpidr_el1 +	lsr	\xreg2, \xreg1, #32 +	lsl	\xreg1, \xreg1, #40 +	lsr	\xreg1, \xreg1, #40 +	orr	\xreg1, \xreg1, \xreg2 +	cbz	\xreg1, \master_label +.endm + +#endif /* CONFIG_ARM64 */ +  #endif /* __ASSEMBLY__ */  #endif /* __ASM_ARM_MACRO_H__ */ |