From cf2ea6ea6a74e26f2d3edad18a6e261e27978c26 Mon Sep 17 00:00:00 2001 From: Sayali Lokhande Date: Wed, 20 Sep 2017 19:39:18 +0530 Subject: [PATCH] scsi: ufs: Add counter for hibernate and gear switch This change adds few more debugfs entries to capture statistics regarding the ufs driver. This information include: 1. ufs hibernate exit count 2. ufs power mode change count usage : cat /sys/kernel/debug/ufshcd0/show_hba Change-Id: I75ac694c1f7e98d527392372300d16ad911ac512 Signed-off-by: Sayali Lokhande --- drivers/scsi/ufs/ufs-debugfs.c | 6 +++++- drivers/scsi/ufs/ufshcd.c | 4 +--- drivers/scsi/ufs/ufshcd.h | 1 + 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/scsi/ufs/ufs-debugfs.c b/drivers/scsi/ufs/ufs-debugfs.c index 0547853c4f3a..51eef0d5e95c 100644 --- a/drivers/scsi/ufs/ufs-debugfs.c +++ b/drivers/scsi/ufs/ufs-debugfs.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2013-2016, The Linux Foundation. All rights reserved. +/* Copyright (c) 2013-2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -950,6 +950,10 @@ static int ufsdbg_show_hba_show(struct seq_file *file, void *data) seq_printf(file, "hba->saved_err = 0x%x\n", hba->saved_err); seq_printf(file, "hba->saved_uic_err = 0x%x\n", hba->saved_uic_err); + seq_printf(file, "power_mode_change_cnt = %d\n", + hba->ufs_stats.power_mode_change_cnt); + seq_printf(file, "hibern8_exit_cnt = %d\n", + hba->ufs_stats.hibern8_exit_cnt); return 0; } diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 34109bbe69ac..7fd8ffe17707 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -4729,6 +4729,7 @@ int ufshcd_change_power_mode(struct ufs_hba *hba, memcpy(&hba->pwr_info, pwr_mode, sizeof(struct ufs_pa_layer_attr)); + hba->ufs_stats.power_mode_change_cnt++; } return ret; @@ -7450,9 +7451,6 @@ static void ufshcd_clear_dbg_ufs_stats(struct ufs_hba *hba) { int err_reg_hist_size = sizeof(struct ufs_uic_err_reg_hist); - hba->ufs_stats.hibern8_exit_cnt = 0; - hba->ufs_stats.last_hibern8_exit_tstamp = ktime_set(0, 0); - memset(&hba->ufs_stats.pa_err, 0, err_reg_hist_size); memset(&hba->ufs_stats.dl_err, 0, err_reg_hist_size); memset(&hba->ufs_stats.nl_err, 0, err_reg_hist_size); diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index dbc80848ed8b..5a7cf839b4fd 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -638,6 +638,7 @@ struct ufs_stats { struct ufshcd_clk_ctx clk_rel; u32 hibern8_exit_cnt; ktime_t last_hibern8_exit_tstamp; + u32 power_mode_change_cnt; struct ufs_uic_err_reg_hist pa_err; struct ufs_uic_err_reg_hist dl_err; struct ufs_uic_err_reg_hist nl_err;