scsi: ufs-mediatek: Introduce event_notify implementation

Introduce event_notify implementation on MediaTek UFS platform. A
vendor-specific tracepoint is added that can be used for debugging
purposes.

Link: https://lore.kernel.org/r/20201205115901.26815-5-stanley.chu@mediatek.com
Reviewed-by: Avri Altman <avri.altman@wdc.com>
Signed-off-by: Stanley Chu <stanley.chu@mediatek.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
Stanley Chu 2020-12-05 19:59:01 +08:00 коммит произвёл Martin K. Petersen
Родитель 172614a9d0
Коммит ca1bb061d6
2 изменённых файлов: 48 добавлений и 0 удалений

Просмотреть файл

@ -0,0 +1,36 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (C) 2020 MediaTek Inc.
*/
#undef TRACE_SYSTEM
#define TRACE_SYSTEM ufs_mtk
#if !defined(_TRACE_EVENT_UFS_MEDIATEK_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_EVENT_UFS_MEDIATEK_H
#include <linux/tracepoint.h>
TRACE_EVENT(ufs_mtk_event,
TP_PROTO(unsigned int type, unsigned int data),
TP_ARGS(type, data),
TP_STRUCT__entry(
__field(unsigned int, type)
__field(unsigned int, data)
),
TP_fast_assign(
__entry->type = type;
__entry->data = data;
),
TP_printk("ufs:event=%u data=%u",
__entry->type, __entry->data)
);
#endif
#undef TRACE_INCLUDE_PATH
#undef TRACE_INCLUDE_FILE
#define TRACE_INCLUDE_PATH .
#define TRACE_INCLUDE_FILE ufs-mediatek-trace
#include <trace/define_trace.h>

Просмотреть файл

@ -24,6 +24,9 @@
#include "unipro.h" #include "unipro.h"
#include "ufs-mediatek.h" #include "ufs-mediatek.h"
#define CREATE_TRACE_POINTS
#include "ufs-mediatek-trace.h"
#define ufs_mtk_smc(cmd, val, res) \ #define ufs_mtk_smc(cmd, val, res) \
arm_smccc_smc(MTK_SIP_UFS_CONTROL, \ arm_smccc_smc(MTK_SIP_UFS_CONTROL, \
cmd, val, 0, 0, 0, 0, 0, &(res)) cmd, val, 0, 0, 0, 0, 0, &(res))
@ -1002,6 +1005,14 @@ static void ufs_mtk_fixup_dev_quirks(struct ufs_hba *hba)
ufshcd_fixup_dev_quirks(hba, ufs_mtk_dev_fixups); ufshcd_fixup_dev_quirks(hba, ufs_mtk_dev_fixups);
} }
static void ufs_mtk_event_notify(struct ufs_hba *hba,
enum ufs_event_type evt, void *data)
{
unsigned int val = *(u32 *)data;
trace_ufs_mtk_event(evt, val);
}
/* /*
* struct ufs_hba_mtk_vops - UFS MTK specific variant operations * struct ufs_hba_mtk_vops - UFS MTK specific variant operations
* *
@ -1021,6 +1032,7 @@ static const struct ufs_hba_variant_ops ufs_hba_mtk_vops = {
.resume = ufs_mtk_resume, .resume = ufs_mtk_resume,
.dbg_register_dump = ufs_mtk_dbg_register_dump, .dbg_register_dump = ufs_mtk_dbg_register_dump,
.device_reset = ufs_mtk_device_reset, .device_reset = ufs_mtk_device_reset,
.event_notify = ufs_mtk_event_notify,
}; };
/** /**