Skip to content

Commit 6f1b17f

Browse files
committed
Linux driver update to support FW debug enhancements.
Add log info to iomapped DRAM buffer from FW, read at driver side on FW triggered interrupts. Signed-off-by: vinit shukla <[email protected]>
1 parent 5913b85 commit 6f1b17f

File tree

7 files changed

+731
-1
lines changed

7 files changed

+731
-1
lines changed

src/driver/amdxdna/Kbuild

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ amdxdna-$(OFT_CONFIG_AMDXDNA_PCI) += \
3535
aie2_error.o \
3636
aie2_debugfs.o \
3737
aie2_message.o \
38+
aie2_logging.o \
3839
aie2_event_trace.o \
3940
aie2_ctx_runqueue.o \
4041
aie2_pm.o \

src/driver/amdxdna/aie2_debugfs.c

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,84 @@ static int aie2_event_trace_show(struct seq_file *m, void *unused)
293293

294294
AIE2_DBGFS_FOPS(event_trace, aie2_event_trace_show, aie2_event_trace_write);
295295

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+
296374
static int test_case01(struct amdxdna_dev_hdl *ndev)
297375
{
298376
int ret;
@@ -653,6 +731,7 @@ const struct {
653731
AIE2_DBGFS_FILE(event_trace, 0600),
654732
AIE2_DBGFS_FILE(ctx_rq, 0400),
655733
AIE2_DBGFS_FILE(get_app_health, 0400),
734+
AIE2_DBGFS_FILE(dram_logging, 0600),
656735
};
657736

658737
void aie2_debugfs_init(struct amdxdna_dev *xdna)

0 commit comments

Comments
 (0)