18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Basic assembly code to read BHRB entries 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright 2013 Anshuman Khandual, IBM Corporation. 68c2ecf20Sopenharmony_ci */ 78c2ecf20Sopenharmony_ci#include <asm/ppc_asm.h> 88c2ecf20Sopenharmony_ci#include <asm/ppc-opcode.h> 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci .text 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci.balign 8 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci/* r3 = n (where n = [0-31]) 158c2ecf20Sopenharmony_ci * The maximum number of BHRB entries supported with PPC_MFBHRBE instruction 168c2ecf20Sopenharmony_ci * is 1024. We have limited number of table entries here as POWER8 implements 178c2ecf20Sopenharmony_ci * 32 BHRB entries. 188c2ecf20Sopenharmony_ci */ 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci/* .global read_bhrb */ 218c2ecf20Sopenharmony_ci_GLOBAL(read_bhrb) 228c2ecf20Sopenharmony_ci cmpldi r3,31 238c2ecf20Sopenharmony_ci bgt 1f 248c2ecf20Sopenharmony_ci ld r4,bhrb_table@got(r2) 258c2ecf20Sopenharmony_ci sldi r3,r3,3 268c2ecf20Sopenharmony_ci add r3,r4,r3 278c2ecf20Sopenharmony_ci mtctr r3 288c2ecf20Sopenharmony_ci bctr 298c2ecf20Sopenharmony_ci1: li r3,0 308c2ecf20Sopenharmony_ci blr 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_ci#define MFBHRB_TABLE1(n) PPC_MFBHRBE(R3,n); blr 338c2ecf20Sopenharmony_ci#define MFBHRB_TABLE2(n) MFBHRB_TABLE1(n); MFBHRB_TABLE1(n+1) 348c2ecf20Sopenharmony_ci#define MFBHRB_TABLE4(n) MFBHRB_TABLE2(n); MFBHRB_TABLE2(n+2) 358c2ecf20Sopenharmony_ci#define MFBHRB_TABLE8(n) MFBHRB_TABLE4(n); MFBHRB_TABLE4(n+4) 368c2ecf20Sopenharmony_ci#define MFBHRB_TABLE16(n) MFBHRB_TABLE8(n); MFBHRB_TABLE8(n+8) 378c2ecf20Sopenharmony_ci#define MFBHRB_TABLE32(n) MFBHRB_TABLE16(n); MFBHRB_TABLE16(n+16) 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_cibhrb_table: 408c2ecf20Sopenharmony_ci MFBHRB_TABLE32(0) 41