xref: /openbmc/qemu/pc-bios/vof/entry.S (revision fc32b91a88cc9cd560da5488bdca4d69f2bac620)
1*fc8c745dSAlexey Kardashevskiy#define LOAD32(rn, name)    \
2*fc8c745dSAlexey Kardashevskiy	lis     rn,name##@h;    \
3*fc8c745dSAlexey Kardashevskiy	ori     rn,rn,name##@l
4*fc8c745dSAlexey Kardashevskiy
5*fc8c745dSAlexey Kardashevskiy#define ENTRY(func_name)    \
6*fc8c745dSAlexey Kardashevskiy	.text;                  \
7*fc8c745dSAlexey Kardashevskiy	.align  2;              \
8*fc8c745dSAlexey Kardashevskiy	.globl  .func_name;     \
9*fc8c745dSAlexey Kardashevskiy	.func_name:             \
10*fc8c745dSAlexey Kardashevskiy	.globl  func_name;      \
11*fc8c745dSAlexey Kardashevskiy	func_name:
12*fc8c745dSAlexey Kardashevskiy
13*fc8c745dSAlexey Kardashevskiy#define KVMPPC_HCALL_BASE       0xf000
14*fc8c745dSAlexey Kardashevskiy#define KVMPPC_H_RTAS           (KVMPPC_HCALL_BASE + 0x0)
15*fc8c745dSAlexey Kardashevskiy#define KVMPPC_H_VOF_CLIENT     (KVMPPC_HCALL_BASE + 0x5)
16*fc8c745dSAlexey Kardashevskiy
17*fc8c745dSAlexey Kardashevskiy	. = 0x100 /* Do exactly as SLOF does */
18*fc8c745dSAlexey Kardashevskiy
19*fc8c745dSAlexey KardashevskiyENTRY(_start)
20*fc8c745dSAlexey Kardashevskiy	LOAD32(2, __toc_start)
21*fc8c745dSAlexey Kardashevskiy	b entry_c
22*fc8c745dSAlexey Kardashevskiy
23*fc8c745dSAlexey KardashevskiyENTRY(_prom_entry)
24*fc8c745dSAlexey Kardashevskiy	LOAD32(2, __toc_start)
25*fc8c745dSAlexey Kardashevskiy	stwu    %r1,-112(%r1)
26*fc8c745dSAlexey Kardashevskiy	stw     %r31,104(%r1)
27*fc8c745dSAlexey Kardashevskiy	mflr    %r31
28*fc8c745dSAlexey Kardashevskiy	bl prom_entry
29*fc8c745dSAlexey Kardashevskiy	nop
30*fc8c745dSAlexey Kardashevskiy	mtlr    %r31
31*fc8c745dSAlexey Kardashevskiy	lwz     %r31,104(%r1)
32*fc8c745dSAlexey Kardashevskiy	addi    %r1,%r1,112
33*fc8c745dSAlexey Kardashevskiy	blr
34*fc8c745dSAlexey Kardashevskiy
35*fc8c745dSAlexey KardashevskiyENTRY(ci_entry)
36*fc8c745dSAlexey Kardashevskiy	mr	4,3
37*fc8c745dSAlexey Kardashevskiy	LOAD32(3,KVMPPC_H_VOF_CLIENT)
38*fc8c745dSAlexey Kardashevskiy	sc	1
39*fc8c745dSAlexey Kardashevskiy	blr
40*fc8c745dSAlexey Kardashevskiy
41*fc8c745dSAlexey Kardashevskiy/* This is the actual RTAS blob copied to the OS at instantiate-rtas */
42*fc8c745dSAlexey KardashevskiyENTRY(hv_rtas)
43*fc8c745dSAlexey Kardashevskiy	mr      %r4,%r3
44*fc8c745dSAlexey Kardashevskiy	LOAD32(3,KVMPPC_H_RTAS)
45*fc8c745dSAlexey Kardashevskiy	sc	1
46*fc8c745dSAlexey Kardashevskiy	blr
47*fc8c745dSAlexey Kardashevskiy	.globl hv_rtas_size
48*fc8c745dSAlexey Kardashevskiyhv_rtas_size:
49*fc8c745dSAlexey Kardashevskiy	.long . - hv_rtas;
50