forked from Minki/linux
ASoC: SOF: Intel: add HDA interrupt source tracing
The Intel HDaudio controller relies on a single interrupt line which wire-ORs multiple interrupt sources, such as stream, IPC, SoundWire and wakes. This patch adds the ability to trace each event occurrence. Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com> Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Noah Klayman <noah.klayman@intel.com> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Link: https://lore.kernel.org/r/20220919122108.43764-3-pierre-louis.bossart@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
fa6e73d691
commit
baedc6300b
34
include/trace/events/sof_intel.h
Normal file
34
include/trace/events/sof_intel.h
Normal file
@ -0,0 +1,34 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Copyright(c) 2022 Intel Corporation. All rights reserved.
|
||||
*
|
||||
* Author: Noah Klayman <noah.klayman@intel.com>
|
||||
*/
|
||||
|
||||
#undef TRACE_SYSTEM
|
||||
#define TRACE_SYSTEM sof_intel
|
||||
|
||||
#if !defined(_TRACE_SOF_INTEL_H) || defined(TRACE_HEADER_MULTI_READ)
|
||||
#define _TRACE_SOF_INTEL_H
|
||||
#include <linux/tracepoint.h>
|
||||
#include "../../../sound/soc/sof/sof-audio.h"
|
||||
|
||||
TRACE_EVENT(sof_intel_hda_irq,
|
||||
TP_PROTO(struct snd_sof_dev *sdev, char *source),
|
||||
TP_ARGS(sdev, source),
|
||||
TP_STRUCT__entry(
|
||||
__string(device_name, dev_name(sdev->dev))
|
||||
__string(source, source)
|
||||
),
|
||||
TP_fast_assign(
|
||||
__assign_str(device_name, dev_name(sdev->dev));
|
||||
__assign_str(source, source);
|
||||
),
|
||||
TP_printk("device_name=%s source=%s",
|
||||
__get_str(device_name), __get_str(source))
|
||||
);
|
||||
|
||||
#endif /* _TRACE_SOF_INTEL_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
#include <trace/define_trace.h>
|
@ -31,6 +31,9 @@
|
||||
#include "../ops.h"
|
||||
#include "hda.h"
|
||||
|
||||
#define CREATE_TRACE_POINTS
|
||||
#include <trace/events/sof_intel.h>
|
||||
|
||||
#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)
|
||||
#include <sound/soc-acpi-intel-match.h>
|
||||
#endif
|
||||
@ -938,17 +941,25 @@ static irqreturn_t hda_dsp_interrupt_thread(int irq, void *context)
|
||||
struct sof_intel_hda_dev *hdev = sdev->pdata->hw_pdata;
|
||||
|
||||
/* deal with streams and controller first */
|
||||
if (hda_dsp_check_stream_irq(sdev))
|
||||
if (hda_dsp_check_stream_irq(sdev)) {
|
||||
trace_sof_intel_hda_irq(sdev, "stream");
|
||||
hda_dsp_stream_threaded_handler(irq, sdev);
|
||||
}
|
||||
|
||||
if (hda_check_ipc_irq(sdev))
|
||||
if (hda_check_ipc_irq(sdev)) {
|
||||
trace_sof_intel_hda_irq(sdev, "ipc");
|
||||
sof_ops(sdev)->irq_thread(irq, sdev);
|
||||
}
|
||||
|
||||
if (hda_dsp_check_sdw_irq(sdev))
|
||||
if (hda_dsp_check_sdw_irq(sdev)) {
|
||||
trace_sof_intel_hda_irq(sdev, "sdw");
|
||||
hda_dsp_sdw_thread(irq, hdev->sdw);
|
||||
}
|
||||
|
||||
if (hda_sdw_check_wakeen_irq(sdev))
|
||||
if (hda_sdw_check_wakeen_irq(sdev)) {
|
||||
trace_sof_intel_hda_irq(sdev, "wakeen");
|
||||
hda_sdw_process_wakeen(sdev);
|
||||
}
|
||||
|
||||
hda_check_for_state_change(sdev);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user