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:
Родитель
172614a9d0
Коммит
ca1bb061d6
|
@ -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,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Загрузка…
Ссылка в новой задаче