1313#include <linux/acpi.h>
1414#include <linux/cpu.h>
1515#include <linux/cpumask.h>
16+ #include <linux/debugfs.h>
1617#include <linux/gfp.h>
1718#include <linux/init.h>
1819#include <linux/io.h>
@@ -73,6 +74,8 @@ struct amd_hfi_data {
7374 void __iomem * pcc_comm_addr ;
7475 struct acpi_subtable_header * pcct_entry ;
7576 struct amd_shmem_info * shmem ;
77+
78+ struct dentry * dbgfs_dir ;
7679};
7780
7881/**
@@ -238,6 +241,13 @@ static int amd_hfi_alloc_class_data(struct platform_device *pdev)
238241 return 0 ;
239242}
240243
244+ static void amd_hfi_remove (struct platform_device * pdev )
245+ {
246+ struct amd_hfi_data * dev = platform_get_drvdata (pdev );
247+
248+ debugfs_remove_recursive (dev -> dbgfs_dir );
249+ }
250+
241251static int amd_set_hfi_ipcc_score (struct amd_hfi_cpuinfo * hfi_cpuinfo , int cpu )
242252{
243253 for (int i = 0 ; i < hfi_cpuinfo -> nr_class ; i ++ )
@@ -393,6 +403,26 @@ static int amd_hfi_metadata_parser(struct platform_device *pdev,
393403 return ret ;
394404}
395405
406+ static int class_capabilities_show (struct seq_file * s , void * unused )
407+ {
408+ u32 cpu , idx ;
409+
410+ seq_puts (s , "CPU #\tWLC\tPerf\tEff\n" );
411+ for_each_possible_cpu (cpu ) {
412+ struct amd_hfi_cpuinfo * hfi_cpuinfo = per_cpu_ptr (& amd_hfi_cpuinfo , cpu );
413+
414+ seq_printf (s , "%d" , cpu );
415+ for (idx = 0 ; idx < hfi_cpuinfo -> nr_class ; idx ++ ) {
416+ seq_printf (s , "\t%u\t%u\t%u\n" , idx ,
417+ hfi_cpuinfo -> amd_hfi_classes [idx ].perf ,
418+ hfi_cpuinfo -> amd_hfi_classes [idx ].eff );
419+ }
420+ }
421+
422+ return 0 ;
423+ }
424+ DEFINE_SHOW_ATTRIBUTE (class_capabilities );
425+
396426static int amd_hfi_pm_resume (struct device * dev )
397427{
398428 int ret , cpu ;
@@ -469,6 +499,10 @@ static int amd_hfi_probe(struct platform_device *pdev)
469499
470500 schedule_work (& sched_amd_hfi_itmt_work );
471501
502+ amd_hfi_data -> dbgfs_dir = debugfs_create_dir ("amd_hfi" , arch_debugfs_dir );
503+ debugfs_create_file ("class_capabilities" , 0644 , amd_hfi_data -> dbgfs_dir , pdev ,
504+ & class_capabilities_fops );
505+
472506 return 0 ;
473507}
474508
@@ -480,6 +514,7 @@ static struct platform_driver amd_hfi_driver = {
480514 .acpi_match_table = ACPI_PTR (amd_hfi_platform_match ),
481515 },
482516 .probe = amd_hfi_probe ,
517+ .remove = amd_hfi_remove ,
483518};
484519
485520static int __init amd_hfi_init (void )
0 commit comments