]> git.openfabrics.org - ~emulex/infiniband.git/commitdiff
sparc64: Add hypervisor interfaces for SPARC-T4 perf counter access.
authorDavid S. Miller <davem@davemloft.net>
Fri, 17 Aug 2012 03:35:41 +0000 (20:35 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sun, 19 Aug 2012 06:03:53 +0000 (23:03 -0700)
Unlike for previous chips, access to the perf-counter control
registers are all hyper-privileged.  Therefore, access to them must go
through a hypervisor interface.

Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc/include/asm/hypervisor.h
arch/sparc/kernel/hvapi.c
arch/sparc/kernel/hvcalls.S

index 015a761eaa322c1a9d11d2f20281c42184daa4bc..ca121f0fa3ec73314de54f3fc8c3e73988e594bb 100644 (file)
@@ -2934,6 +2934,16 @@ extern unsigned long sun4v_reboot_data_set(unsigned long ra,
                                           unsigned long len);
 #endif
 
+#define HV_FAST_VT_GET_PERFREG         0x184
+#define HV_FAST_VT_SET_PERFREG         0x185
+
+#ifndef __ASSEMBLY__
+extern unsigned long sun4v_vt_get_perfreg(unsigned long reg_num,
+                                         unsigned long *reg_val);
+extern unsigned long sun4v_vt_set_perfreg(unsigned long reg_num,
+                                         unsigned long reg_val);
+#endif
+
 /* Function numbers for HV_CORE_TRAP.  */
 #define HV_CORE_SET_VER                        0x00
 #define HV_CORE_PUTCHAR                        0x01
@@ -2964,6 +2974,7 @@ extern unsigned long sun4v_reboot_data_set(unsigned long ra,
 #define HV_GRP_NIU                     0x0204
 #define HV_GRP_VF_CPU                  0x0205
 #define HV_GRP_KT_CPU                  0x0209
+#define HV_GRP_VT_CPU                  0x020c
 #define HV_GRP_DIAG                    0x0300
 
 #ifndef __ASSEMBLY__
index 8593672838fde52d133e2597e25753c19f12394c..1032df43ec95869f9b3df643ec01c46c9ff5d723 100644 (file)
@@ -45,6 +45,7 @@ static struct api_info api_table[] = {
        { .group = HV_GRP_NIU,                                  },
        { .group = HV_GRP_VF_CPU,                               },
        { .group = HV_GRP_KT_CPU,                               },
+       { .group = HV_GRP_VT_CPU,                               },
        { .group = HV_GRP_DIAG,         .flags = FLAG_PRE_API   },
 };
 
index 58d60de4d65b496d1287de3468d58e2cb08e6075..f3ab509b76a8daf32123ec47bbbf0ebb5b360bde 100644 (file)
@@ -805,3 +805,19 @@ ENTRY(sun4v_reboot_data_set)
        retl
         nop
 ENDPROC(sun4v_reboot_data_set)
+
+ENTRY(sun4v_vt_get_perfreg)
+       mov     %o1, %o4
+       mov     HV_FAST_VT_GET_PERFREG, %o5
+       ta      HV_FAST_TRAP
+       stx     %o1, [%o4]
+       retl
+        nop
+ENDPROC(sun4v_vt_get_perfreg)
+
+ENTRY(sun4v_vt_set_perfreg)
+       mov     HV_FAST_VT_SET_PERFREG, %o5
+       ta      HV_FAST_TRAP
+       retl
+        nop
+ENDPROC(sun4v_vt_set_perfreg)