From 52a14338ef1d2d50a00681d137810a45b2e80051 Mon Sep 17 00:00:00 2001 From: Tushar Nimkar Date: Fri, 5 Feb 2021 16:18:39 +0530 Subject: [PATCH] soc: qcom: Add support to read apps stats from smem The trustzone will write apps stats into smem. This change adds support to read and display it when rpmh_unit_base is not present. Change-Id: Ifc3566018fd6722eb2d818d8d81370dc1f8cea19 Signed-off-by: Tushar Nimkar --- drivers/soc/qcom/Kconfig | 1 - drivers/soc/qcom/rpmh_master_stat.c | 18 ++++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/drivers/soc/qcom/Kconfig b/drivers/soc/qcom/Kconfig index 8f7002a20a00..0424c0f53ae0 100644 --- a/drivers/soc/qcom/Kconfig +++ b/drivers/soc/qcom/Kconfig @@ -909,7 +909,6 @@ endif # MSM_PM config QTI_RPM_STATS_LOG tristate "Qualcomm Technologies RPM Stats Driver" - depends on QCOM_RPMH help This option enables a driver which reads RPM messages from a shared memory location. These messages provide statistical information about diff --git a/drivers/soc/qcom/rpmh_master_stat.c b/drivers/soc/qcom/rpmh_master_stat.c index 1d15d048d42d..1787d517e5b0 100644 --- a/drivers/soc/qcom/rpmh_master_stat.c +++ b/drivers/soc/qcom/rpmh_master_stat.c @@ -35,6 +35,7 @@ enum master_smem_id { GPU, DISPLAY, SLPI_ISLAND = 613, + APSS = 631, }; enum master_pid { @@ -63,6 +64,7 @@ struct msm_rpmh_master_data { }; static const struct msm_rpmh_master_data rpmh_masters[] = { + {"APSS", APSS, QCOM_SMEM_HOST_ANY}, {"MPSS", MPSS, PID_MPSS}, {"WPSS", MPSS, PID_WPSS}, {"ADSP", ADSP, PID_ADSP}, @@ -134,8 +136,10 @@ static ssize_t msm_rpmh_master_stats_show(struct kobject *kobj, /* First Read APSS master stats */ - length = msm_rpmh_master_stats_print_data(buf, PAGE_SIZE, - &apss_master_stats, "APSS"); + if (rpmh_unit_base) + length = msm_rpmh_master_stats_print_data(buf, PAGE_SIZE, + &apss_master_stats, + "APSS"); /* Read SMEM data written by other masters */ @@ -229,17 +233,14 @@ static int msm_rpmh_master_stats_probe(struct platform_device *pdev) rpmh_unit_base = of_iomap(pdev->dev.of_node, 0); if (!rpmh_unit_base) { - pr_err("Failed to get rpmh_unit_base\n"); - ret = -ENOMEM; - goto fail_iomap; + pr_err("Failed to get rpmh_unit_base or rpm based target\n"); + rpmh_unit_base = NULL; } apss_master_stats.version_id = 0x1; platform_set_drvdata(pdev, prvdata); return ret; -fail_iomap: - sysfs_remove_file(prvdata->kobj, &prvdata->ka.attr); fail_sysfs: kobject_put(prvdata->kobj); return ret; @@ -255,7 +256,8 @@ static int msm_rpmh_master_stats_remove(struct platform_device *pdev) sysfs_remove_file(prvdata->kobj, &prvdata->ka.attr); kobject_put(prvdata->kobj); platform_set_drvdata(pdev, NULL); - iounmap(rpmh_unit_base); + if (rpmh_unit_base) + iounmap(rpmh_unit_base); rpmh_unit_base = NULL; return 0;