18c2ecf20Sopenharmony_ci/*
28c2ecf20Sopenharmony_ci * This file is subject to the terms and conditions of the GNU General Public
38c2ecf20Sopenharmony_ci * License.  See the file "COPYING" in the main directory of this archive
48c2ecf20Sopenharmony_ci * for more details.
58c2ecf20Sopenharmony_ci *
68c2ecf20Sopenharmony_ci * KVM/MIPS: COP0 access histogram
78c2ecf20Sopenharmony_ci *
88c2ecf20Sopenharmony_ci * Copyright (C) 2012  MIPS Technologies, Inc.  All rights reserved.
98c2ecf20Sopenharmony_ci * Authors: Sanjay Lal <sanjayl@kymasys.com>
108c2ecf20Sopenharmony_ci */
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci#include <linux/kvm_host.h>
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_cichar *kvm_cop0_str[N_MIPS_COPROC_REGS] = {
158c2ecf20Sopenharmony_ci	"Index",
168c2ecf20Sopenharmony_ci	"Random",
178c2ecf20Sopenharmony_ci	"EntryLo0",
188c2ecf20Sopenharmony_ci	"EntryLo1",
198c2ecf20Sopenharmony_ci	"Context",
208c2ecf20Sopenharmony_ci	"PG Mask",
218c2ecf20Sopenharmony_ci	"Wired",
228c2ecf20Sopenharmony_ci	"HWREna",
238c2ecf20Sopenharmony_ci	"BadVAddr",
248c2ecf20Sopenharmony_ci	"Count",
258c2ecf20Sopenharmony_ci	"EntryHI",
268c2ecf20Sopenharmony_ci	"Compare",
278c2ecf20Sopenharmony_ci	"Status",
288c2ecf20Sopenharmony_ci	"Cause",
298c2ecf20Sopenharmony_ci	"EXC PC",
308c2ecf20Sopenharmony_ci	"PRID",
318c2ecf20Sopenharmony_ci	"Config",
328c2ecf20Sopenharmony_ci	"LLAddr",
338c2ecf20Sopenharmony_ci	"Watch Lo",
348c2ecf20Sopenharmony_ci	"Watch Hi",
358c2ecf20Sopenharmony_ci	"X Context",
368c2ecf20Sopenharmony_ci	"Reserved",
378c2ecf20Sopenharmony_ci	"Impl Dep",
388c2ecf20Sopenharmony_ci	"Debug",
398c2ecf20Sopenharmony_ci	"DEPC",
408c2ecf20Sopenharmony_ci	"PerfCnt",
418c2ecf20Sopenharmony_ci	"ErrCtl",
428c2ecf20Sopenharmony_ci	"CacheErr",
438c2ecf20Sopenharmony_ci	"TagLo",
448c2ecf20Sopenharmony_ci	"TagHi",
458c2ecf20Sopenharmony_ci	"ErrorEPC",
468c2ecf20Sopenharmony_ci	"DESAVE"
478c2ecf20Sopenharmony_ci};
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_civoid kvm_mips_dump_stats(struct kvm_vcpu *vcpu)
508c2ecf20Sopenharmony_ci{
518c2ecf20Sopenharmony_ci#ifdef CONFIG_KVM_MIPS_DEBUG_COP0_COUNTERS
528c2ecf20Sopenharmony_ci	int i, j;
538c2ecf20Sopenharmony_ci
548c2ecf20Sopenharmony_ci	kvm_info("\nKVM VCPU[%d] COP0 Access Profile:\n", vcpu->vcpu_id);
558c2ecf20Sopenharmony_ci	for (i = 0; i < N_MIPS_COPROC_REGS; i++) {
568c2ecf20Sopenharmony_ci		for (j = 0; j < N_MIPS_COPROC_SEL; j++) {
578c2ecf20Sopenharmony_ci			if (vcpu->arch.cop0->stat[i][j])
588c2ecf20Sopenharmony_ci				kvm_info("%s[%d]: %lu\n", kvm_cop0_str[i], j,
598c2ecf20Sopenharmony_ci					 vcpu->arch.cop0->stat[i][j]);
608c2ecf20Sopenharmony_ci		}
618c2ecf20Sopenharmony_ci	}
628c2ecf20Sopenharmony_ci#endif
638c2ecf20Sopenharmony_ci}
64