Commit 07e833b4 authored by Peter Ujfalusi's avatar Peter Ujfalusi Committed by Mark Brown

ASoC: SOF: debug: Add generic API and ops for DSP regions

Add new debugfs_add_region_item along with a generic wrapper
snd_sof_debugfs_add_region_item() to abstract away the DSP regions related
debugfs support.

At the same commit add iomem based generic implementation for the new ops
Signed-off-by: default avatarPeter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: default avatarDaniel Baluta <daniel.baluta@gmail.com>
Reviewed-by: default avatarRanjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: default avatarGuennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
Link: https://lore.kernel.org/r/20210915122116.18317-9-peter.ujfalusi@linux.intel.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 4624bb2f
...@@ -588,6 +588,21 @@ int snd_sof_debugfs_io_item(struct snd_sof_dev *sdev, ...@@ -588,6 +588,21 @@ int snd_sof_debugfs_io_item(struct snd_sof_dev *sdev,
} }
EXPORT_SYMBOL_GPL(snd_sof_debugfs_io_item); EXPORT_SYMBOL_GPL(snd_sof_debugfs_io_item);
int snd_sof_debugfs_add_region_item_iomem(struct snd_sof_dev *sdev,
enum snd_sof_fw_blk_type blk_type, u32 offset,
size_t size, const char *name,
enum sof_debugfs_access_type access_type)
{
int bar = snd_sof_dsp_get_bar_index(sdev, blk_type);
if (bar < 0)
return bar;
return snd_sof_debugfs_io_item(sdev, sdev->bar[bar] + offset, size, name,
access_type);
}
EXPORT_SYMBOL_GPL(snd_sof_debugfs_add_region_item_iomem);
/* create FS entry for debug files to expose kernel memory */ /* create FS entry for debug files to expose kernel memory */
int snd_sof_debugfs_buf_item(struct snd_sof_dev *sdev, int snd_sof_debugfs_buf_item(struct snd_sof_dev *sdev,
void *base, size_t size, void *base, size_t size,
......
...@@ -253,6 +253,17 @@ static inline void snd_sof_ipc_dump(struct snd_sof_dev *sdev) ...@@ -253,6 +253,17 @@ static inline void snd_sof_ipc_dump(struct snd_sof_dev *sdev)
sof_ops(sdev)->ipc_dump(sdev); sof_ops(sdev)->ipc_dump(sdev);
} }
static inline int snd_sof_debugfs_add_region_item(struct snd_sof_dev *sdev,
enum snd_sof_fw_blk_type blk_type, u32 offset, size_t size,
const char *name, enum sof_debugfs_access_type access_type)
{
if (sof_ops(sdev) && sof_ops(sdev)->debugfs_add_region_item)
return sof_ops(sdev)->debugfs_add_region_item(sdev, blk_type, offset,
size, name, access_type);
return 0;
}
/* register IO */ /* register IO */
static inline void snd_sof_dsp_write(struct snd_sof_dev *sdev, u32 bar, static inline void snd_sof_dsp_write(struct snd_sof_dev *sdev, u32 bar,
u32 offset, u32 value) u32 offset, u32 value)
......
...@@ -83,6 +83,16 @@ enum sof_system_suspend_state { ...@@ -83,6 +83,16 @@ enum sof_system_suspend_state {
SOF_SUSPEND_S3, SOF_SUSPEND_S3,
}; };
enum sof_dfsentry_type {
SOF_DFSENTRY_TYPE_IOMEM = 0,
SOF_DFSENTRY_TYPE_BUF,
};
enum sof_debugfs_access_type {
SOF_DEBUGFS_ACCESS_ALWAYS = 0,
SOF_DEBUGFS_ACCESS_D0_ONLY,
};
struct snd_sof_dev; struct snd_sof_dev;
struct snd_sof_ipc_msg; struct snd_sof_ipc_msg;
struct snd_sof_ipc; struct snd_sof_ipc;
...@@ -237,6 +247,10 @@ struct snd_sof_dsp_ops { ...@@ -237,6 +247,10 @@ struct snd_sof_dsp_ops {
void (*dbg_dump)(struct snd_sof_dev *sof_dev, void (*dbg_dump)(struct snd_sof_dev *sof_dev,
u32 flags); /* optional */ u32 flags); /* optional */
void (*ipc_dump)(struct snd_sof_dev *sof_dev); /* optional */ void (*ipc_dump)(struct snd_sof_dev *sof_dev); /* optional */
int (*debugfs_add_region_item)(struct snd_sof_dev *sdev,
enum snd_sof_fw_blk_type blk_type, u32 offset,
size_t size, const char *name,
enum sof_debugfs_access_type access_type); /* optional */
/* host DMA trace initialization */ /* host DMA trace initialization */
int (*trace_init)(struct snd_sof_dev *sdev, int (*trace_init)(struct snd_sof_dev *sdev,
...@@ -286,16 +300,6 @@ struct sof_ops_table { ...@@ -286,16 +300,6 @@ struct sof_ops_table {
const struct snd_sof_dsp_ops *ops; const struct snd_sof_dsp_ops *ops;
}; };
enum sof_dfsentry_type {
SOF_DFSENTRY_TYPE_IOMEM = 0,
SOF_DFSENTRY_TYPE_BUF,
};
enum sof_debugfs_access_type {
SOF_DEBUGFS_ACCESS_ALWAYS = 0,
SOF_DEBUGFS_ACCESS_D0_ONLY,
};
/* FS entry for debug files that can expose DSP memories, registers */ /* FS entry for debug files that can expose DSP memories, registers */
struct snd_sof_dfsentry { struct snd_sof_dfsentry {
size_t size; size_t size;
...@@ -534,6 +538,9 @@ void snd_sof_get_status(struct snd_sof_dev *sdev, u32 panic_code, ...@@ -534,6 +538,9 @@ void snd_sof_get_status(struct snd_sof_dev *sdev, u32 panic_code,
int snd_sof_init_trace_ipc(struct snd_sof_dev *sdev); int snd_sof_init_trace_ipc(struct snd_sof_dev *sdev);
void snd_sof_handle_fw_exception(struct snd_sof_dev *sdev); void snd_sof_handle_fw_exception(struct snd_sof_dev *sdev);
int snd_sof_dbg_memory_info_init(struct snd_sof_dev *sdev); int snd_sof_dbg_memory_info_init(struct snd_sof_dev *sdev);
int snd_sof_debugfs_add_region_item_iomem(struct snd_sof_dev *sdev,
enum snd_sof_fw_blk_type blk_type, u32 offset, size_t size,
const char *name, enum sof_debugfs_access_type access_type);
/* /*
* Platform specific ops. * Platform specific ops.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment