2019-06-04 10:11:33 +02:00
// SPDX-License-Identifier: GPL-2.0-only
2015-03-02 13:01:12 -08:00
/*
* Copyright © 2014 Broadcom
*/
# include <linux/seq_file.h>
# include <linux/circ_buf.h>
# include <linux/ctype.h>
# include <linux/debugfs.h>
# include "vc4_drv.h"
# include "vc4_regs.h"
2019-04-01 11:35:58 -07:00
struct vc4_debugfs_info_entry {
struct list_head link ;
struct drm_info_list info ;
2015-03-02 13:01:12 -08:00
} ;
2019-04-01 11:35:58 -07:00
/**
* Called at drm_dev_register ( ) time on each of the minors registered
* by the DRM device , to attach the debugfs files .
*/
2015-03-02 13:01:12 -08:00
int
vc4_debugfs_init ( struct drm_minor * minor )
{
2019-02-20 16:51:24 +01:00
struct vc4_dev * vc4 = to_vc4_dev ( minor - > dev ) ;
2019-04-01 11:35:58 -07:00
struct vc4_debugfs_info_entry * entry ;
2019-02-20 16:51:24 +01:00
2019-06-13 13:45:48 +02:00
debugfs_create_bool ( " hvs_load_tracker " , S_IRUGO | S_IWUSR ,
minor - > debugfs_root , & vc4 - > load_tracker_enabled ) ;
2019-02-20 16:51:24 +01:00
2019-04-01 11:35:58 -07:00
list_for_each_entry ( entry , & vc4 - > debugfs_list , link ) {
int ret = drm_debugfs_create_files ( & entry - > info , 1 ,
minor - > debugfs_root , minor ) ;
if ( ret )
return ret ;
}
return 0 ;
}
2019-04-04 05:36:29 +08:00
static int vc4_debugfs_regset32 ( struct seq_file * m , void * unused )
2019-04-01 11:35:58 -07:00
{
struct drm_info_node * node = ( struct drm_info_node * ) m - > private ;
struct debugfs_regset32 * regset = node - > info_ent - > data ;
struct drm_printer p = drm_seq_file_printer ( m ) ;
drm_print_regset32 ( & p , regset ) ;
return 0 ;
}
/**
* Registers a debugfs file with a callback function for a vc4 component .
*
* This is like drm_debugfs_create_files ( ) , but that can only be
* called a given DRM minor , while the various VC4 components want to
* register their debugfs files during the component bind process . We
* track the request and delay it to be called on each minor during
* vc4_debugfs_init ( ) .
*/
void vc4_debugfs_add_file ( struct drm_device * dev ,
const char * name ,
int ( * show ) ( struct seq_file * , void * ) ,
void * data )
{
struct vc4_dev * vc4 = to_vc4_dev ( dev ) ;
struct vc4_debugfs_info_entry * entry =
devm_kzalloc ( dev - > dev , sizeof ( * entry ) , GFP_KERNEL ) ;
if ( ! entry )
return ;
entry - > info . name = name ;
entry - > info . show = show ;
entry - > info . data = data ;
list_add ( & entry - > link , & vc4 - > debugfs_list ) ;
}
void vc4_debugfs_add_regset32 ( struct drm_device * drm ,
const char * name ,
struct debugfs_regset32 * regset )
{
vc4_debugfs_add_file ( drm , name , vc4_debugfs_regset32 , regset ) ;
2015-03-02 13:01:12 -08:00
}