mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-11 13:56:30 +00:00
83d290c56f
When U-Boot started using SPDX tags we were among the early adopters and there weren't a lot of other examples to borrow from. So we picked the area of the file that usually had a full license text and replaced it with an appropriate SPDX-License-Identifier: entry. Since then, the Linux Kernel has adopted SPDX tags and they place it as the very first line in a file (except where shebangs are used, then it's second line) and with slightly different comment styles than us. In part due to community overlap, in part due to better tag visibility and in part for other minor reasons, switch over to that style. This commit changes all instances where we have a single declared license in the tag as both the before and after are identical in tag contents. There's also a few places where I found we did not have a tag and have introduced one. Signed-off-by: Tom Rini <trini@konsulko.com>
149 lines
2.8 KiB
ArmAsm
149 lines
2.8 KiB
ArmAsm
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
/*
|
|
* Copyright 2004, 2007, 2008 Freescale Semiconductor.
|
|
* Srikanth Srinivasan <srikanth.srinivaan@freescale.com>
|
|
*/
|
|
#include <config.h>
|
|
#include <mpc86xx.h>
|
|
|
|
#include <ppc_asm.tmpl>
|
|
#include <ppc_defs.h>
|
|
|
|
#include <asm/cache.h>
|
|
#include <asm/mmu.h>
|
|
|
|
/* If this is a multi-cpu system then we need to handle the
|
|
* 2nd cpu. The assumption is that the 2nd cpu is being
|
|
* held in boot holdoff mode until the 1st cpu unlocks it
|
|
* from Linux. We'll do some basic cpu init and then pass
|
|
* it to the Linux Reset Vector.
|
|
* Sri: Much of this initialization is not required. Linux
|
|
* rewrites the bats, and the sprs and also enables the L1 cache.
|
|
*
|
|
* Core 0 must copy this to a 1M aligned region and set BPTR
|
|
* to point to it.
|
|
*/
|
|
.align 12
|
|
.globl __secondary_start_page
|
|
__secondary_start_page:
|
|
.space 0x100 /* space over to reset vector loc */
|
|
mfspr r0, MSSCR0
|
|
andi. r0, r0, 0x0020
|
|
rlwinm r0,r0,27,31,31
|
|
mtspr PIR, r0
|
|
|
|
/* Invalidate BATs */
|
|
li r0, 0
|
|
mtspr IBAT0U, r0
|
|
mtspr IBAT1U, r0
|
|
mtspr IBAT2U, r0
|
|
mtspr IBAT3U, r0
|
|
mtspr IBAT4U, r0
|
|
mtspr IBAT5U, r0
|
|
mtspr IBAT6U, r0
|
|
mtspr IBAT7U, r0
|
|
isync
|
|
mtspr DBAT0U, r0
|
|
mtspr DBAT1U, r0
|
|
mtspr DBAT2U, r0
|
|
mtspr DBAT3U, r0
|
|
mtspr DBAT4U, r0
|
|
mtspr DBAT5U, r0
|
|
mtspr DBAT6U, r0
|
|
mtspr DBAT7U, r0
|
|
isync
|
|
sync
|
|
|
|
/* enable extended addressing */
|
|
mfspr r0, HID0
|
|
lis r0, (HID0_HIGH_BAT_EN | HID0_XBSEN | HID0_XAEN)@h
|
|
ori r0, r0, (HID0_HIGH_BAT_EN | HID0_XBSEN | HID0_XAEN)@l
|
|
mtspr HID0, r0
|
|
sync
|
|
isync
|
|
|
|
#ifdef CONFIG_SYS_L2
|
|
/* init the L2 cache */
|
|
addis r3, r0, L2_INIT@h
|
|
ori r3, r3, L2_INIT@l
|
|
sync
|
|
mtspr l2cr, r3
|
|
#ifdef CONFIG_ALTIVEC
|
|
dssall
|
|
#endif
|
|
/* invalidate the L2 cache */
|
|
mfspr r3, l2cr
|
|
rlwinm. r3, r3, 0, 0, 0
|
|
beq 1f
|
|
|
|
mfspr r3, l2cr
|
|
rlwinm r3, r3, 0, 1, 31
|
|
|
|
#ifdef CONFIG_ALTIVEC
|
|
dssall
|
|
#endif
|
|
sync
|
|
mtspr l2cr, r3
|
|
sync
|
|
1: mfspr r3, l2cr
|
|
oris r3, r3, L2CR_L2I@h
|
|
mtspr l2cr, r3
|
|
|
|
invl2:
|
|
mfspr r3, l2cr
|
|
andis. r3, r3, L2CR_L2I@h
|
|
bne invl2
|
|
sync
|
|
#endif
|
|
|
|
/* enable and invalidate the data cache */
|
|
mfspr r3, HID0
|
|
li r5, HID0_DCFI|HID0_DLOCK
|
|
andc r3, r3, r5
|
|
mtspr HID0, r3 /* no invalidate, unlock */
|
|
ori r3, r3, HID0_DCE
|
|
ori r5, r3, HID0_DCFI
|
|
mtspr HID0, r5 /* enable + invalidate */
|
|
mtspr HID0, r3 /* enable */
|
|
sync
|
|
#ifdef CONFIG_SYS_L2
|
|
sync
|
|
lis r3, L2_ENABLE@h
|
|
ori r3, r3, L2_ENABLE@l
|
|
mtspr l2cr, r3
|
|
isync
|
|
sync
|
|
#endif
|
|
|
|
/* enable and invalidate the instruction cache*/
|
|
mfspr r3, HID0
|
|
li r5, HID0_ICFI|HID0_ILOCK
|
|
andc r3, r3, r5
|
|
ori r3, r3, HID0_ICE
|
|
ori r5, r3, HID0_ICFI
|
|
mtspr HID0, r5
|
|
mtspr HID0, r3
|
|
isync
|
|
sync
|
|
|
|
/* TBEN in HID0 */
|
|
mfspr r4, HID0
|
|
oris r4, r4, 0x0400
|
|
mtspr HID0, r4
|
|
sync
|
|
isync
|
|
|
|
/* MCP|SYNCBE|ABE in HID1 */
|
|
mfspr r4, HID1
|
|
oris r4, r4, 0x8000
|
|
ori r4, r4, 0x0C00
|
|
mtspr HID1, r4
|
|
sync
|
|
isync
|
|
|
|
lis r3, CONFIG_LINUX_RESET_VEC@h
|
|
ori r3, r3, CONFIG_LINUX_RESET_VEC@l
|
|
mtlr r3
|
|
blr
|
|
|
|
/* Never Returns, Running in Linux Now */
|