1*4882a593Smuzhiyun/* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun/* 3*4882a593Smuzhiyun * Basic assembly code to read BHRB entries 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright 2013 Anshuman Khandual, IBM Corporation. 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun#include <asm/ppc_asm.h> 8*4882a593Smuzhiyun#include <asm/ppc-opcode.h> 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun .text 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun.balign 8 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun/* r3 = n (where n = [0-31]) 15*4882a593Smuzhiyun * The maximum number of BHRB entries supported with PPC_MFBHRBE instruction 16*4882a593Smuzhiyun * is 1024. We have limited number of table entries here as POWER8 implements 17*4882a593Smuzhiyun * 32 BHRB entries. 18*4882a593Smuzhiyun */ 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun/* .global read_bhrb */ 21*4882a593Smuzhiyun_GLOBAL(read_bhrb) 22*4882a593Smuzhiyun cmpldi r3,31 23*4882a593Smuzhiyun bgt 1f 24*4882a593Smuzhiyun ld r4,bhrb_table@got(r2) 25*4882a593Smuzhiyun sldi r3,r3,3 26*4882a593Smuzhiyun add r3,r4,r3 27*4882a593Smuzhiyun mtctr r3 28*4882a593Smuzhiyun bctr 29*4882a593Smuzhiyun1: li r3,0 30*4882a593Smuzhiyun blr 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun#define MFBHRB_TABLE1(n) PPC_MFBHRBE(R3,n); blr 33*4882a593Smuzhiyun#define MFBHRB_TABLE2(n) MFBHRB_TABLE1(n); MFBHRB_TABLE1(n+1) 34*4882a593Smuzhiyun#define MFBHRB_TABLE4(n) MFBHRB_TABLE2(n); MFBHRB_TABLE2(n+2) 35*4882a593Smuzhiyun#define MFBHRB_TABLE8(n) MFBHRB_TABLE4(n); MFBHRB_TABLE4(n+4) 36*4882a593Smuzhiyun#define MFBHRB_TABLE16(n) MFBHRB_TABLE8(n); MFBHRB_TABLE8(n+8) 37*4882a593Smuzhiyun#define MFBHRB_TABLE32(n) MFBHRB_TABLE16(n); MFBHRB_TABLE16(n+16) 38*4882a593Smuzhiyun 39*4882a593Smuzhiyunbhrb_table: 40*4882a593Smuzhiyun MFBHRB_TABLE32(0) 41