Home | History | Annotate | Download | only in ebb
      1 #ifndef _SELFTESTS_POWERPC_PMU_EBB_LMR_H
      2 #define _SELFTESTS_POWERPC_PMU_EBB_LMR_H
      3 
      4 #include "reg.h"
      5 
      6 #ifndef PPC_FEATURE2_ARCH_3_00
      7 #define PPC_FEATURE2_ARCH_3_00 0x00800000
      8 #endif
      9 
     10 #define lmr_is_supported() have_hwcap2(PPC_FEATURE2_ARCH_3_00)
     11 
     12 static inline void ebb_lmr_reset(void)
     13 {
     14 	unsigned long bescr = mfspr(SPRN_BESCR);
     15 	bescr &= ~(BESCR_LMEO);
     16 	bescr |= BESCR_LME;
     17 	mtspr(SPRN_BESCR, bescr);
     18 }
     19 
     20 #define LDMX(t, a, b)\
     21 	(0x7c00026a |				\
     22 	 (((t) & 0x1f) << 21) |			\
     23 	 (((a) & 0x1f) << 16) |			\
     24 	 (((b) & 0x1f) << 11))
     25 
     26 static inline unsigned long ldmx(unsigned long address)
     27 {
     28 	unsigned long ret;
     29 
     30 	asm volatile ("mr 9, %1\r\n"
     31 		      ".long " __stringify(LDMX(9, 0, 9)) "\r\n"
     32 		      "mr %0, 9\r\n":"=r"(ret)
     33 		      :"r"(address)
     34 		      :"r9");
     35 
     36 	return ret;
     37 }
     38 
     39 #endif
     40