@@ -293,6 +293,84 @@ static int aie2_event_trace_show(struct seq_file *m, void *unused)
293
293
294
294
AIE2_DBGFS_FOPS (event_trace , aie2_event_trace_show , aie2_event_trace_write );
295
295
296
+ static ssize_t aie2_dram_logging_write (struct file * file , const char __user * buf ,
297
+ size_t len , loff_t * off )
298
+ {
299
+ struct amdxdna_dev_hdl * ndev = file_to_ndev_rw (file );
300
+ u32 enable = 0 , buf_size = 0 , loglevel = 0 ;
301
+ char * kbuf , * token , * key , * val ;
302
+
303
+ kbuf = kzalloc (len + 1 , GFP_KERNEL );
304
+ if (!kbuf )
305
+ return - ENOMEM ;
306
+
307
+ if (copy_from_user (kbuf , buf , len )) {
308
+ kfree (kbuf );
309
+ return - EFAULT ;
310
+ }
311
+
312
+ kbuf [len ] = '\0' ;
313
+ token = strsep (& kbuf , " " );
314
+
315
+ while (token ) {
316
+ key = strsep (& token , "=" );
317
+ val = token ;
318
+ int ret ;
319
+
320
+ if (key && val ) {
321
+ if (strcmp (key , "enable" ) == 0 ) {
322
+ ret = kstrtouint (val , 10 , & enable );
323
+ if (ret ) {
324
+ XDNA_INFO (ndev -> xdna , "invalid enable value %u" ,
325
+ enable );
326
+ return ret ;
327
+ }
328
+ } else if (strcmp (key , "size" ) == 0 ) {
329
+ buf_size = memparse (val , NULL );
330
+ } else if (strcmp (key , "loglevel" ) == 0 ) {
331
+ ret = kstrtouint (val , 0 , & loglevel );
332
+ if (ret ) {
333
+ XDNA_INFO (ndev -> xdna , "invalid log level %u" ,
334
+ loglevel );
335
+ return ret ;
336
+ }
337
+ } else {
338
+ XDNA_INFO (ndev -> xdna , "invalid key %s format" , key );
339
+ return len ;
340
+ }
341
+ }
342
+ token = strsep (& kbuf , " " );
343
+ }
344
+
345
+ XDNA_DBG (ndev -> xdna , "Dram logging config: %u, %u, %u" ,
346
+ enable , buf_size , loglevel );
347
+ if (enable && !buf_size )
348
+ return - EINVAL ;
349
+
350
+ aie2_set_dram_log_config (ndev , enable , buf_size , loglevel );
351
+ kfree (kbuf );
352
+
353
+ return len ;
354
+ }
355
+
356
+ static int aie2_dram_logging_show (struct seq_file * m , void * unused )
357
+ {
358
+ struct amdxdna_dev_hdl * ndev = m -> private ;
359
+
360
+ if (aie2_is_dram_logging_enable (ndev ))
361
+ seq_puts (m , "Dram logging is enabled\n" );
362
+ else
363
+ seq_puts (m , "Dram logging is disabled\n"
364
+ "echo enable=1 size=1K loglevel=4 -> Follow given input format to enable\n"
365
+ "enable=[0, 1] -> enable=1 to enable, enable=0 to disable\n"
366
+ "size=[1K, 2K, 4K...512K to 1M] -> buffer size should be pow of 2\n"
367
+ "loglevel=[0 - 4] -> None-Err...Dbg\n\n" );
368
+
369
+ return 0 ;
370
+ }
371
+
372
+ AIE2_DBGFS_FOPS (dram_logging , aie2_dram_logging_show , aie2_dram_logging_write );
373
+
296
374
static int test_case01 (struct amdxdna_dev_hdl * ndev )
297
375
{
298
376
int ret ;
@@ -653,6 +731,7 @@ const struct {
653
731
AIE2_DBGFS_FILE (event_trace , 0600 ),
654
732
AIE2_DBGFS_FILE (ctx_rq , 0400 ),
655
733
AIE2_DBGFS_FILE (get_app_health , 0400 ),
734
+ AIE2_DBGFS_FILE (dram_logging , 0600 ),
656
735
};
657
736
658
737
void aie2_debugfs_init (struct amdxdna_dev * xdna )
0 commit comments