18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (C) 2020-2022 Loongson Technology Corporation Limited 48c2ecf20Sopenharmony_ci */ 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#include <linux/debugfs.h> 78c2ecf20Sopenharmony_ci#include <linux/kvm_host.h> 88c2ecf20Sopenharmony_ci#include <linux/seq_file.h> 98c2ecf20Sopenharmony_ci#include "kvmcpu.h" 108c2ecf20Sopenharmony_ci#include "ls3a_ext_irq.h" 118c2ecf20Sopenharmony_ci#include "ls7a_irq.h" 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci#ifdef CONFIG_DEBUG_FS 148c2ecf20Sopenharmony_cistatic int irqchip_state_show(struct seq_file *m, void *v) 158c2ecf20Sopenharmony_ci{ 168c2ecf20Sopenharmony_ci struct kvm *kvm = m->private; 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_ci kvm_get_kvm(kvm); 198c2ecf20Sopenharmony_ci kvm_dump_ls3a_extirq_state(m, kvm->arch.v_extirq); 208c2ecf20Sopenharmony_ci kvm_dump_ls7a_ioapic_state(m, kvm->arch.v_ioapic); 218c2ecf20Sopenharmony_ci kvm_put_kvm(kvm); 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_ci return 0; 248c2ecf20Sopenharmony_ci} 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_cistatic int irqchip_debug_open(struct inode *inode, struct file *file) 278c2ecf20Sopenharmony_ci{ 288c2ecf20Sopenharmony_ci return single_open(file, irqchip_state_show, inode->i_private); 298c2ecf20Sopenharmony_ci} 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_cistatic const struct file_operations irqchip_debug_fops = { 328c2ecf20Sopenharmony_ci .open = irqchip_debug_open, 338c2ecf20Sopenharmony_ci .read = seq_read, 348c2ecf20Sopenharmony_ci .llseek = seq_lseek, 358c2ecf20Sopenharmony_ci .release = single_release, 368c2ecf20Sopenharmony_ci}; 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_civoid irqchip_debug_init(struct kvm *kvm) 398c2ecf20Sopenharmony_ci{ 408c2ecf20Sopenharmony_ci debugfs_create_file("irqchip-state", 0444, kvm->debugfs_dentry, kvm, 418c2ecf20Sopenharmony_ci &irqchip_debug_fops); 428c2ecf20Sopenharmony_ci} 438c2ecf20Sopenharmony_ci#else 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_civoid irqchip_debug_init(struct kvm *kvm) {} 468c2ecf20Sopenharmony_ci#endif 478c2ecf20Sopenharmony_civoid irqchip_debug_destroy(struct kvm *kvm) 488c2ecf20Sopenharmony_ci{ 498c2ecf20Sopenharmony_ci} 50