Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 35 additions & 5 deletions sound/soc/sof/debug.c
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,10 @@ static const struct file_operations sof_dfs_fops = {
.llseek = default_llseek,
};

int snd_sof_debugfs_create_item(struct snd_sof_dev *sdev,
void __iomem *base, size_t size,
const char *name)
/* create FS entry for debug files that can expose DSP memories, registers */
int snd_sof_debugfs_io_create_item(struct snd_sof_dev *sdev,
void __iomem *base, size_t size,
const char *name)
{
struct snd_sof_dfsentry_io *dfse;

Expand All @@ -115,7 +116,36 @@ int snd_sof_debugfs_create_item(struct snd_sof_dev *sdev,

return 0;
}
EXPORT_SYMBOL(snd_sof_debugfs_create_item);
EXPORT_SYMBOL(snd_sof_debugfs_io_create_item);

/* create FS entry for debug files to expose kernel memory */
int snd_sof_debugfs_buf_create_item(struct snd_sof_dev *sdev,
void *base, size_t size,
const char *name)
{
struct snd_sof_dfsentry_buf *dfse;

if (!sdev)
return -EINVAL;

dfse = devm_kzalloc(sdev->dev, sizeof(*dfse), GFP_KERNEL);
if (!dfse)
return -ENOMEM;

dfse->buf = base;
dfse->size = size;
dfse->sdev = sdev;

dfse->dfsentry = debugfs_create_file(name, 0444, sdev->debugfs_root,
dfse, &sof_dfs_fops);
if (!dfse->dfsentry) {
dev_err(sdev->dev, "cannot create debugfs entry.\n");
return -ENODEV;
}

return 0;
}
EXPORT_SYMBOL(snd_sof_debugfs_buf_create_item);

int snd_sof_dbg_init(struct snd_sof_dev *sdev)
{
Expand All @@ -134,7 +164,7 @@ int snd_sof_dbg_init(struct snd_sof_dev *sdev)
for (i = 0; i < ops->debug_map_count; i++) {
map = &ops->debug_map[i];

err = snd_sof_debugfs_create_item(sdev, sdev->bar[map->bar] +
err = snd_sof_debugfs_io_create_item(sdev, sdev->bar[map->bar] +
map->offset, map->size,
map->name);
if (err < 0)
Expand Down
60 changes: 32 additions & 28 deletions sound/soc/sof/intel/bdw.c
Original file line number Diff line number Diff line change
Expand Up @@ -426,51 +426,55 @@ static void bdw_get_windows(struct snd_sof_dev *sdev)
case SOF_IPC_REGION_UPBOX:
inbox_offset = elem->offset + MBOX_OFFSET;
inbox_size = elem->size;
snd_sof_debugfs_create_item(sdev,
sdev->bar[BDW_DSP_BAR] +
inbox_offset,
elem->size, "inbox");
snd_sof_debugfs_io_create_item(sdev,
sdev->bar[BDW_DSP_BAR] +
inbox_offset,
elem->size, "inbox");
break;
case SOF_IPC_REGION_DOWNBOX:
outbox_offset = elem->offset + MBOX_OFFSET;
outbox_size = elem->size;
snd_sof_debugfs_create_item(sdev,
sdev->bar[BDW_DSP_BAR] +
outbox_offset,
elem->size, "outbox");
snd_sof_debugfs_io_create_item(sdev,
sdev->bar[BDW_DSP_BAR] +
outbox_offset,
elem->size, "outbox");
break;
case SOF_IPC_REGION_TRACE:
snd_sof_debugfs_create_item(sdev,
sdev->bar[BDW_DSP_BAR] +
elem->offset + MBOX_OFFSET,
elem->size, "etrace");
snd_sof_debugfs_io_create_item(sdev,
sdev->bar[BDW_DSP_BAR] +
elem->offset +
MBOX_OFFSET,
elem->size, "etrace");
break;
case SOF_IPC_REGION_DEBUG:
snd_sof_debugfs_create_item(sdev,
sdev->bar[BDW_DSP_BAR] +
elem->offset + MBOX_OFFSET,
elem->size, "debug");
snd_sof_debugfs_io_create_item(sdev,
sdev->bar[BDW_DSP_BAR] +
elem->offset +
MBOX_OFFSET,
elem->size, "debug");
break;
case SOF_IPC_REGION_STREAM:
stream_offset = elem->offset + MBOX_OFFSET;
stream_size = elem->size;
snd_sof_debugfs_create_item(sdev,
sdev->bar[BDW_DSP_BAR] +
stream_offset,
elem->size, "stream");
snd_sof_debugfs_io_create_item(sdev,
sdev->bar[BDW_DSP_BAR] +
stream_offset,
elem->size, "stream");
break;
case SOF_IPC_REGION_REGS:
snd_sof_debugfs_create_item(sdev,
sdev->bar[BDW_DSP_BAR] +
elem->offset + MBOX_OFFSET,
elem->size, "regs");
snd_sof_debugfs_io_create_item(sdev,
sdev->bar[BDW_DSP_BAR] +
elem->offset +
MBOX_OFFSET,
elem->size, "regs");
break;
case SOF_IPC_REGION_EXCEPTION:
sdev->dsp_oops_offset = elem->offset + MBOX_OFFSET;
snd_sof_debugfs_create_item(sdev,
sdev->bar[BDW_DSP_BAR] +
elem->offset + MBOX_OFFSET,
elem->size, "exception");
snd_sof_debugfs_io_create_item(sdev,
sdev->bar[BDW_DSP_BAR] +
elem->offset +
MBOX_OFFSET,
elem->size, "exception");
break;
default:
dev_err(sdev->dev, "error: get illegal window info\n");
Expand Down
60 changes: 32 additions & 28 deletions sound/soc/sof/intel/byt.c
Original file line number Diff line number Diff line change
Expand Up @@ -186,51 +186,55 @@ static void byt_get_windows(struct snd_sof_dev *sdev)
case SOF_IPC_REGION_UPBOX:
inbox_offset = elem->offset + MBOX_OFFSET;
inbox_size = elem->size;
snd_sof_debugfs_create_item(sdev,
sdev->bar[BYT_DSP_BAR] +
inbox_offset,
elem->size, "inbox");
snd_sof_debugfs_io_create_item(sdev,
sdev->bar[BYT_DSP_BAR] +
inbox_offset,
elem->size, "inbox");
break;
case SOF_IPC_REGION_DOWNBOX:
outbox_offset = elem->offset + MBOX_OFFSET;
outbox_size = elem->size;
snd_sof_debugfs_create_item(sdev,
sdev->bar[BYT_DSP_BAR] +
outbox_offset,
elem->size, "outbox");
snd_sof_debugfs_io_create_item(sdev,
sdev->bar[BYT_DSP_BAR] +
outbox_offset,
elem->size, "outbox");
break;
case SOF_IPC_REGION_TRACE:
snd_sof_debugfs_create_item(sdev,
sdev->bar[BYT_DSP_BAR] +
elem->offset + MBOX_OFFSET,
elem->size, "etrace");
snd_sof_debugfs_io_create_item(sdev,
sdev->bar[BYT_DSP_BAR] +
elem->offset +
MBOX_OFFSET,
elem->size, "etrace");
break;
case SOF_IPC_REGION_DEBUG:
snd_sof_debugfs_create_item(sdev,
sdev->bar[BYT_DSP_BAR] +
elem->offset + MBOX_OFFSET,
elem->size, "debug");
snd_sof_debugfs_io_create_item(sdev,
sdev->bar[BYT_DSP_BAR] +
elem->offset +
MBOX_OFFSET,
elem->size, "debug");
break;
case SOF_IPC_REGION_STREAM:
stream_offset = elem->offset + MBOX_OFFSET;
stream_size = elem->size;
snd_sof_debugfs_create_item(sdev,
sdev->bar[BYT_DSP_BAR] +
stream_offset,
elem->size, "stream");
snd_sof_debugfs_io_create_item(sdev,
sdev->bar[BYT_DSP_BAR] +
stream_offset,
elem->size, "stream");
break;
case SOF_IPC_REGION_REGS:
snd_sof_debugfs_create_item(sdev,
sdev->bar[BYT_DSP_BAR] +
elem->offset + MBOX_OFFSET,
elem->size, "regs");
snd_sof_debugfs_io_create_item(sdev,
sdev->bar[BYT_DSP_BAR] +
elem->offset +
MBOX_OFFSET,
elem->size, "regs");
break;
case SOF_IPC_REGION_EXCEPTION:
sdev->dsp_oops_offset = elem->offset + MBOX_OFFSET;
snd_sof_debugfs_create_item(sdev,
sdev->bar[BYT_DSP_BAR] +
elem->offset + MBOX_OFFSET,
elem->size, "exception");
snd_sof_debugfs_io_create_item(sdev,
sdev->bar[BYT_DSP_BAR] +
elem->offset +
MBOX_OFFSET,
elem->size, "exception");
break;
default:
dev_err(sdev->dev, "error: get illegal window info\n");
Expand Down
76 changes: 38 additions & 38 deletions sound/soc/sof/intel/hda-ipc.c
Original file line number Diff line number Diff line change
Expand Up @@ -285,64 +285,64 @@ static void ipc_get_windows(struct snd_sof_dev *sdev)
inbox_offset =
elem->offset + SRAM_WINDOW_OFFSET(elem->id);
inbox_size = elem->size;
snd_sof_debugfs_create_item(sdev,
sdev->bar[HDA_DSP_BAR] +
inbox_offset,
elem->size, "inbox");
snd_sof_debugfs_io_create_item(sdev,
sdev->bar[HDA_DSP_BAR] +
inbox_offset,
elem->size, "inbox");
break;
case SOF_IPC_REGION_DOWNBOX:
outbox_offset =
elem->offset + SRAM_WINDOW_OFFSET(elem->id);
outbox_size = elem->size;
snd_sof_debugfs_create_item(sdev,
sdev->bar[HDA_DSP_BAR] +
outbox_offset,
elem->size, "outbox");
snd_sof_debugfs_io_create_item(sdev,
sdev->bar[HDA_DSP_BAR] +
outbox_offset,
elem->size, "outbox");
break;
case SOF_IPC_REGION_TRACE:
snd_sof_debugfs_create_item(sdev,
sdev->bar[HDA_DSP_BAR] +
elem->offset +
SRAM_WINDOW_OFFSET
(elem->id),
elem->size, "etrace");
snd_sof_debugfs_io_create_item(sdev,
sdev->bar[HDA_DSP_BAR] +
elem->offset +
SRAM_WINDOW_OFFSET
(elem->id),
elem->size, "etrace");
break;
case SOF_IPC_REGION_DEBUG:
snd_sof_debugfs_create_item(sdev,
sdev->bar[HDA_DSP_BAR] +
elem->offset +
SRAM_WINDOW_OFFSET
(elem->id),
elem->size, "debug");
snd_sof_debugfs_io_create_item(sdev,
sdev->bar[HDA_DSP_BAR] +
elem->offset +
SRAM_WINDOW_OFFSET
(elem->id),
elem->size, "debug");
break;
case SOF_IPC_REGION_STREAM:
stream_offset =
elem->offset + SRAM_WINDOW_OFFSET(elem->id);
stream_size = elem->size;
snd_sof_debugfs_create_item(sdev,
sdev->bar[HDA_DSP_BAR] +
elem->offset +
SRAM_WINDOW_OFFSET
(elem->id),
elem->size, "stream");
snd_sof_debugfs_io_create_item(sdev,
sdev->bar[HDA_DSP_BAR] +
elem->offset +
SRAM_WINDOW_OFFSET
(elem->id),
elem->size, "stream");
break;
case SOF_IPC_REGION_REGS:
snd_sof_debugfs_create_item(sdev,
sdev->bar[HDA_DSP_BAR] +
elem->offset +
SRAM_WINDOW_OFFSET
(elem->id),
elem->size, "regs");
snd_sof_debugfs_io_create_item(sdev,
sdev->bar[HDA_DSP_BAR] +
elem->offset +
SRAM_WINDOW_OFFSET
(elem->id),
elem->size, "regs");
break;
case SOF_IPC_REGION_EXCEPTION:
sdev->dsp_oops_offset = elem->offset +
SRAM_WINDOW_OFFSET(elem->id);
snd_sof_debugfs_create_item(sdev,
sdev->bar[HDA_DSP_BAR] +
elem->offset +
SRAM_WINDOW_OFFSET
(elem->id),
elem->size, "exception");
snd_sof_debugfs_io_create_item(sdev,
sdev->bar[HDA_DSP_BAR] +
elem->offset +
SRAM_WINDOW_OFFSET
(elem->id),
elem->size, "exception");
break;
default:
dev_err(sdev->dev, "error: get illegal window info\n");
Expand Down
Loading