18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright © 2017 Broadcom 48c2ecf20Sopenharmony_ci */ 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#include <linux/seq_file.h> 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#include <drm/drm_debugfs.h> 98c2ecf20Sopenharmony_ci#include <drm/drm_file.h> 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci#include "pl111_drm.h" 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci#define REGDEF(reg) { reg, #reg } 148c2ecf20Sopenharmony_cistatic const struct { 158c2ecf20Sopenharmony_ci u32 reg; 168c2ecf20Sopenharmony_ci const char *name; 178c2ecf20Sopenharmony_ci} pl111_reg_defs[] = { 188c2ecf20Sopenharmony_ci REGDEF(CLCD_TIM0), 198c2ecf20Sopenharmony_ci REGDEF(CLCD_TIM1), 208c2ecf20Sopenharmony_ci REGDEF(CLCD_TIM2), 218c2ecf20Sopenharmony_ci REGDEF(CLCD_TIM3), 228c2ecf20Sopenharmony_ci REGDEF(CLCD_UBAS), 238c2ecf20Sopenharmony_ci REGDEF(CLCD_LBAS), 248c2ecf20Sopenharmony_ci REGDEF(CLCD_PL111_CNTL), 258c2ecf20Sopenharmony_ci REGDEF(CLCD_PL111_IENB), 268c2ecf20Sopenharmony_ci REGDEF(CLCD_PL111_RIS), 278c2ecf20Sopenharmony_ci REGDEF(CLCD_PL111_MIS), 288c2ecf20Sopenharmony_ci REGDEF(CLCD_PL111_ICR), 298c2ecf20Sopenharmony_ci REGDEF(CLCD_PL111_UCUR), 308c2ecf20Sopenharmony_ci REGDEF(CLCD_PL111_LCUR), 318c2ecf20Sopenharmony_ci}; 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_ciint pl111_debugfs_regs(struct seq_file *m, void *unused) 348c2ecf20Sopenharmony_ci{ 358c2ecf20Sopenharmony_ci struct drm_info_node *node = (struct drm_info_node *)m->private; 368c2ecf20Sopenharmony_ci struct drm_device *dev = node->minor->dev; 378c2ecf20Sopenharmony_ci struct pl111_drm_dev_private *priv = dev->dev_private; 388c2ecf20Sopenharmony_ci int i; 398c2ecf20Sopenharmony_ci 408c2ecf20Sopenharmony_ci for (i = 0; i < ARRAY_SIZE(pl111_reg_defs); i++) { 418c2ecf20Sopenharmony_ci seq_printf(m, "%s (0x%04x): 0x%08x\n", 428c2ecf20Sopenharmony_ci pl111_reg_defs[i].name, pl111_reg_defs[i].reg, 438c2ecf20Sopenharmony_ci readl(priv->regs + pl111_reg_defs[i].reg)); 448c2ecf20Sopenharmony_ci } 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_ci return 0; 478c2ecf20Sopenharmony_ci} 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_cistatic const struct drm_info_list pl111_debugfs_list[] = { 508c2ecf20Sopenharmony_ci {"regs", pl111_debugfs_regs, 0}, 518c2ecf20Sopenharmony_ci}; 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_civoid 548c2ecf20Sopenharmony_cipl111_debugfs_init(struct drm_minor *minor) 558c2ecf20Sopenharmony_ci{ 568c2ecf20Sopenharmony_ci drm_debugfs_create_files(pl111_debugfs_list, 578c2ecf20Sopenharmony_ci ARRAY_SIZE(pl111_debugfs_list), 588c2ecf20Sopenharmony_ci minor->debugfs_root, minor); 598c2ecf20Sopenharmony_ci} 60