/* * Early initialization code for aarch64 (a.k.a. armv8) * * Copyright 2013Google Inc. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; version 2 of * the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA */ // See LICENSE for license details. relating to the _start code in this file. #include .section ".text._start", "ax", %progbits // Maybe there's a better way. .space 0x2000 .globl _start _start: // pending figuring out this f-ing toolchain. Hardcode what we know works. la sp, 0x4ef0 // .stacktop // la a0, trap_entry // la gp, _gp // csrw evec, a0 # clear any pending interrupts csrwi clear_ipi, 0 li a0, SR_S | SR_PS | SR_EI | SR_S64 | SR_U64 or a1, a0, SR_EF | SR_EA csrw status, a1 csrr a1, status csrw status, a0 // and a2, a1, SR_EF // sw a2, have_fp, t0 // and a2, a1, SR_EA // sw a2, have_accelerator, t0 call main .=0x4000 .stack: .align 8 .space 0xf00 .stacktop: .quad 0 .align 3 .stack_size: .quad 0xf00 .globl _cbfs_master_header _cbfs_master_header: .balignl 16,0xdeadbeef .align 8 // this assembler SUCKS .long 0x4F524243 .long 0xdeadbeef .long 0xdeadbeef .long 0xdeadbeef .long 0xdeadbeef .long 0xdeadbeef .long 0xdeadbeef /* The CBFS master header is inserted by cbfstool at the first * aligned offset after the above anchor string is found. * Hence, we leave some space for it. * Assumes 64-byte alignment. */ .space 128 reset: init_stack_loop: .word CONFIG_STACK_SIZE .section ".id", "a", %progbits .section ".id", "a", @progbits .globl __id_start // fix this bs later. What's wrong with the riscv gcc? __id_start: ver: .asciz "1" //COREBOOT_VERSION vendor: .asciz "ucb" //CONFIG_MAINBOARD_VENDOR part: .asciz "1" //CONFIG_MAINBOARD_PART_NUMBER .long __id_end + CONFIG_ID_SECTION_OFFSET - ver /* Reverse offset to the vendor id */ .long __id_end + CONFIG_ID_SECTION_OFFSET - vendor /* Reverse offset to the vendor id */ .long __id_end + CONFIG_ID_SECTION_OFFSET - part /* Reverse offset to the part number */ .long CONFIG_ROM_SIZE /* Size of this romimage */ .globl __id_end __id_end: .previous