Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8c79bfa5 authored by David S. Miller's avatar David S. Miller
Browse files

sparc64: Add hypervisor interfaces for SPARC-T4 perf counter access.



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: default avatarDavid S. Miller <davem@davemloft.net>
parent 6f859c0e
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -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__
+1 −0
Original line number Diff line number Diff line
@@ -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	},
};

+16 −0
Original line number Diff line number Diff line
@@ -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)