xref: /openbmc/qemu/tests/qtest/migration/ppc64/a-b-kernel.S (revision bdce9bc9179bd7b6f4e12c759dd3cd6794e26a6b)
1*212c1933SFabiano Rosas#
2*212c1933SFabiano Rosas# Copyright (c) 2024 IBM, Inc
3*212c1933SFabiano Rosas#
4*212c1933SFabiano Rosas# This work is licensed under the terms of the GNU GPL, version 2 or later.
5*212c1933SFabiano Rosas# See the COPYING file in the top-level directory.
6*212c1933SFabiano Rosas
7*212c1933SFabiano Rosas#include "../migration-test.h"
8*212c1933SFabiano Rosas
9*212c1933SFabiano Rosas.section .text
10*212c1933SFabiano Rosas
11*212c1933SFabiano Rosas.macro print ch
12*212c1933SFabiano Rosas	li	%r3,PPC_H_PUT_TERM_CHAR
13*212c1933SFabiano Rosas	li	%r4,0
14*212c1933SFabiano Rosas	li	%r5,1
15*212c1933SFabiano Rosas	li	%r6,\ch
16*212c1933SFabiano Rosas	sldi	%r6,%r6,56
17*212c1933SFabiano Rosas	sc	1
18*212c1933SFabiano Rosas.endm
19*212c1933SFabiano Rosas
20*212c1933SFabiano Rosas        .globl  _start
21*212c1933SFabiano Rosas_start:
22*212c1933SFabiano Rosas. = 0x100
23*212c1933SFabiano Rosas	/*
24*212c1933SFabiano Rosas	 * Enter 64-bit mode. Not necessary because the test uses 32-bit
25*212c1933SFabiano Rosas	 * addresses, but those constants could easily be changed and break
26*212c1933SFabiano Rosas	 * in 32-bit mode.
27*212c1933SFabiano Rosas	 */
28*212c1933SFabiano Rosas	mfmsr	%r9
29*212c1933SFabiano Rosas	li	%r10,-1
30*212c1933SFabiano Rosas	rldimi	%r9,%r10,63,0
31*212c1933SFabiano Rosas	mtmsrd	%r9
32*212c1933SFabiano Rosas
33*212c1933SFabiano Rosas        /*
34*212c1933SFabiano Rosas	 * Set up test memory region. Non-volatiles are used because the
35*212c1933SFabiano Rosas	 * hcall can clobber regs.
36*212c1933SFabiano Rosas	 * r20 - start address
37*212c1933SFabiano Rosas	 * r21 - number of pages
38*212c1933SFabiano Rosas	 */
39*212c1933SFabiano Rosas	lis	%r20,PPC_TEST_MEM_START@h
40*212c1933SFabiano Rosas	ori	%r20,%r20,PPC_TEST_MEM_START@l
41*212c1933SFabiano Rosas	lis	%r9,PPC_TEST_MEM_END@h
42*212c1933SFabiano Rosas	ori	%r9,%r9,PPC_TEST_MEM_END@l
43*212c1933SFabiano Rosas	subf	%r21,%r20,%r9
44*212c1933SFabiano Rosas	li	%r10,TEST_MEM_PAGE_SIZE
45*212c1933SFabiano Rosas	divd	%r21,%r21,%r10
46*212c1933SFabiano Rosas
47*212c1933SFabiano Rosas	print	'A'
48*212c1933SFabiano Rosas
49*212c1933SFabiano Rosas	li	%r3,0
50*212c1933SFabiano Rosas	mr	%r9,%r20
51*212c1933SFabiano Rosas	mtctr	%r21
52*212c1933SFabiano Rosas1:	stb	%r3,0(%r9)
53*212c1933SFabiano Rosas	addi	%r9,%r9,TEST_MEM_PAGE_SIZE
54*212c1933SFabiano Rosas	bdnz	1b
55*212c1933SFabiano Rosas
56*212c1933SFabiano Rosasloop:
57*212c1933SFabiano Rosas	mr	%r9,%r20
58*212c1933SFabiano Rosas	mtctr	%r21
59*212c1933SFabiano Rosas1:	lbz	%r3,0(%r9)
60*212c1933SFabiano Rosas	addi	%r3,%r3,1
61*212c1933SFabiano Rosas	stb	%r3,0(%r9)
62*212c1933SFabiano Rosas	addi	%r9,%r9,TEST_MEM_PAGE_SIZE
63*212c1933SFabiano Rosas	bdnz	1b
64*212c1933SFabiano Rosas
65*212c1933SFabiano Rosas	print	'B'
66*212c1933SFabiano Rosas	b	loop
67