162306a36Sopenharmony_ci/*
262306a36Sopenharmony_ci * This file is subject to the terms and conditions of the GNU General Public
362306a36Sopenharmony_ci * License.  See the file "COPYING" in the main directory of this archive
462306a36Sopenharmony_ci * for more details.
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * KVM/MIPS: COP0 access histogram
762306a36Sopenharmony_ci *
862306a36Sopenharmony_ci * Copyright (C) 2012  MIPS Technologies, Inc.  All rights reserved.
962306a36Sopenharmony_ci * Authors: Sanjay Lal <sanjayl@kymasys.com>
1062306a36Sopenharmony_ci */
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#include <linux/kvm_host.h>
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_cichar *kvm_cop0_str[N_MIPS_COPROC_REGS] = {
1562306a36Sopenharmony_ci	"Index",
1662306a36Sopenharmony_ci	"Random",
1762306a36Sopenharmony_ci	"EntryLo0",
1862306a36Sopenharmony_ci	"EntryLo1",
1962306a36Sopenharmony_ci	"Context",
2062306a36Sopenharmony_ci	"PG Mask",
2162306a36Sopenharmony_ci	"Wired",
2262306a36Sopenharmony_ci	"HWREna",
2362306a36Sopenharmony_ci	"BadVAddr",
2462306a36Sopenharmony_ci	"Count",
2562306a36Sopenharmony_ci	"EntryHI",
2662306a36Sopenharmony_ci	"Compare",
2762306a36Sopenharmony_ci	"Status",
2862306a36Sopenharmony_ci	"Cause",
2962306a36Sopenharmony_ci	"EXC PC",
3062306a36Sopenharmony_ci	"PRID",
3162306a36Sopenharmony_ci	"Config",
3262306a36Sopenharmony_ci	"LLAddr",
3362306a36Sopenharmony_ci	"Watch Lo",
3462306a36Sopenharmony_ci	"Watch Hi",
3562306a36Sopenharmony_ci	"X Context",
3662306a36Sopenharmony_ci	"Reserved",
3762306a36Sopenharmony_ci	"Impl Dep",
3862306a36Sopenharmony_ci	"Debug",
3962306a36Sopenharmony_ci	"DEPC",
4062306a36Sopenharmony_ci	"PerfCnt",
4162306a36Sopenharmony_ci	"ErrCtl",
4262306a36Sopenharmony_ci	"CacheErr",
4362306a36Sopenharmony_ci	"TagLo",
4462306a36Sopenharmony_ci	"TagHi",
4562306a36Sopenharmony_ci	"ErrorEPC",
4662306a36Sopenharmony_ci	"DESAVE"
4762306a36Sopenharmony_ci};
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_civoid kvm_mips_dump_stats(struct kvm_vcpu *vcpu)
5062306a36Sopenharmony_ci{
5162306a36Sopenharmony_ci#ifdef CONFIG_KVM_MIPS_DEBUG_COP0_COUNTERS
5262306a36Sopenharmony_ci	int i, j;
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci	kvm_info("\nKVM VCPU[%d] COP0 Access Profile:\n", vcpu->vcpu_id);
5562306a36Sopenharmony_ci	for (i = 0; i < N_MIPS_COPROC_REGS; i++) {
5662306a36Sopenharmony_ci		for (j = 0; j < N_MIPS_COPROC_SEL; j++) {
5762306a36Sopenharmony_ci			if (vcpu->arch.cop0.stat[i][j])
5862306a36Sopenharmony_ci				kvm_info("%s[%d]: %lu\n", kvm_cop0_str[i], j,
5962306a36Sopenharmony_ci					 vcpu->arch.cop0.stat[i][j]);
6062306a36Sopenharmony_ci		}
6162306a36Sopenharmony_ci	}
6262306a36Sopenharmony_ci#endif
6362306a36Sopenharmony_ci}
64