ASoC: SOF: debug: Add generic API and ops for DSP regions
authorPeter Ujfalusi <peter.ujfalusi@linux.intel.com>
Wed, 15 Sep 2021 12:21:12 +0000 (15:21 +0300)
committerMark Brown <broonie@kernel.org>
Wed, 15 Sep 2021 15:25:05 +0000 (16:25 +0100)
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: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Daniel Baluta <daniel.baluta@gmail.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
Link: https://lore.kernel.org/r/20210915122116.18317-9-peter.ujfalusi@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/debug.c
sound/soc/sof/ops.h
sound/soc/sof/sof-priv.h

index a51a928ea40a7388ceafef518ed7b48f5fc35918..c536ea71630f820e8121949f29fb15fa8919c8a3 100644 (file)
@@ -588,6 +588,21 @@ int snd_sof_debugfs_io_item(struct snd_sof_dev *sdev,
 }
 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 */
 int snd_sof_debugfs_buf_item(struct snd_sof_dev *sdev,
                             void *base, size_t size,
index 2412b5a77e42018eea405e07d0453684f3aaec1c..b4121e51658599a5ed8e66146998483f389eafcd 100644 (file)
@@ -253,6 +253,17 @@ static inline void snd_sof_ipc_dump(struct snd_sof_dev *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 */
 static inline void snd_sof_dsp_write(struct snd_sof_dev *sdev, u32 bar,
                                     u32 offset, u32 value)
index 9a05d0c7a7c72af56203d841629bedea312d4f44..6c7da38e65fb901fbba4e8f5587fb3dd13d646bc 100644 (file)
@@ -83,6 +83,16 @@ enum sof_system_suspend_state {
        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_ipc_msg;
 struct snd_sof_ipc;
@@ -237,6 +247,10 @@ struct snd_sof_dsp_ops {
        void (*dbg_dump)(struct snd_sof_dev *sof_dev,
                         u32 flags); /* 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 */
        int (*trace_init)(struct snd_sof_dev *sdev,
@@ -286,16 +300,6 @@ struct sof_ops_table {
        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 */
 struct snd_sof_dfsentry {
        size_t size;
@@ -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);
 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_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.