1dcb58231SJanosch Frank/* SPDX-License-Identifier: GPL-2.0-only */ 2dcb58231SJanosch Frank/* 3dcb58231SJanosch Frank * Start assembly for snippets 4dcb58231SJanosch Frank * 5dcb58231SJanosch Frank * Copyright (c) 2021 IBM Corp. 6dcb58231SJanosch Frank * 7dcb58231SJanosch Frank * Authors: 8dcb58231SJanosch Frank * Janosch Frank <frankja@linux.ibm.com> 9dcb58231SJanosch Frank */ 10acc93cbfSJanosch Frank#include <asm/sigp.h> 11acc93cbfSJanosch Frank 12acc93cbfSJanosch Frank.section .init 13acc93cbfSJanosch Frank .globl start 14acc93cbfSJanosch Frankstart: 15*df8d7ad7SJanosch Frank larl %r1, initial_cr0 16*df8d7ad7SJanosch Frank lctlg %c0, %c0, 0(%r1) 17acc93cbfSJanosch Frank /* XOR all registers with themselves to clear them fully. */ 18acc93cbfSJanosch Frank .irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 19acc93cbfSJanosch Frank xgr \i,\i 20acc93cbfSJanosch Frank .endr 21acc93cbfSJanosch Frank /* 0x3000 is the stack page for now */ 22a6c15401SJanosch Frank lghi %r15, stackptr 23acc93cbfSJanosch Frank sam64 24acc93cbfSJanosch Frank brasl %r14, main 25478996b1SThomas Huth /* 26478996b1SThomas Huth * If main() returns, we stop the CPU with the code below. We also 27478996b1SThomas Huth * route some functions that are required by the libc (but not usable 28478996b1SThomas Huth * from snippets) to the CPU stop code below, so that snippets can 29478996b1SThomas Huth * still be linked against the libc code (to use non-related functions 30478996b1SThomas Huth * like memset() etc.) 31478996b1SThomas Huth */ 32478996b1SThomas Huth.global puts 33478996b1SThomas Huth.global exit 34478996b1SThomas Huthputs: 35478996b1SThomas Huthexit: 36acc93cbfSJanosch Frank /* For now let's only use cpu 0 in snippets so this will always work. */ 37acc93cbfSJanosch Frank xgr %r0, %r0 38acc93cbfSJanosch Frank sigp %r2, %r0, SIGP_STOP 39*df8d7ad7SJanosch Frank 40*df8d7ad7SJanosch Frankinitial_cr0: 41*df8d7ad7SJanosch Frank /* enable AFP-register control, so FP regs (+BFP instr) can be used */ 42*df8d7ad7SJanosch Frank .quad 0x0000000000040000 43