From patchwork Wed May 21 08:32:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Maulik Shah \(mkshah\)" X-Patchwork-Id: 892008 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1CB2822DF91 for ; Wed, 21 May 2025 08:32:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747816350; cv=none; b=ql26Ekt95N43k0MZBmiZh2NUH9VHsriFTKmK746ZauBZKE67kFi28RwCq2MvmW6JbRgNqCHGocZ8962HFiwagsoixBzdQXh7TWNnfreeEHaOzjim5gwLGLE/19RHxKxlEQnVrWz1r3JxXGMvshsz/gBG0mfHvkcHgEJdeDsuvCU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747816350; c=relaxed/simple; bh=Oe0c/HT/ThhA+Ev7ojrKYh6uc2pxBdtFufKW0Dpogs0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NjnWWnVe6pgewzRr+JYUDfCsvc5iPKjEMr0vJ2Il5zXq9t/vkAaq8R4BRYoL/Yiyo+yVMOX2pJQ0E2jX99hIXCijp+aUAjfWypYM5XWdHPwu5vVvWGf8Ci5V0COpzxH2nLs6MNOCibLRwHJHGADsK0a+Ps3yhD7qe5HH0x7aqAM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=VT7WU8JW; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="VT7WU8JW" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54L5omBv028094 for ; Wed, 21 May 2025 08:32:28 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= S76KZTjew8gM/3p7mMZdUV3VYx0eCPcV5iivyT9LkdE=; b=VT7WU8JWJ5GCrNh4 au/VrzCFqb/T82FC0WZtLwfoDa+wN+tKSAK3t1CH2okmBY1S3zS/KUkrNGBug2Io 1xiu0TK9Aob9U+IdKxFQmT6dpbHAITDLAn+H4kxfeoQABcHJyanTFNFJsemGnCOA hhVlWX2VlwMtzlHxmhk0frdNLjVzgMKljTTgTe6SpkVmDEZ0q2QQxH5dCmjfKxYO ofmHNIez5tD98t/yIjp4CRPbBgJjDKR0BkIduUx552Two5JVK7cFsGO0xIeTD0qG DwYLDtDUfYKBiyMMUpHs60vuAxJ5BkjBsHJXUiviCJvJGTQeABEaqjE+kmqmJ51L yA3OZw== Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46rwf428tv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Wed, 21 May 2025 08:32:28 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-232340ba283so28971595ad.0 for ; Wed, 21 May 2025 01:32:28 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747816347; x=1748421147; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=S76KZTjew8gM/3p7mMZdUV3VYx0eCPcV5iivyT9LkdE=; b=RhgCSDV2L5+S8QWUOE0ZPKx3RE3HEWWAB7icgn5qgaKNdtUfXns/BzWaZIjrXJMYpV 2I1XhQMcpceU7TSzNxIfWomgnmbv6srq6OZPsqAHLbPL7RLJ/HDe+0ulya61yx65FLc9 gRq1DEkfICVlv8JbM6y93hRddR8RSssnuSTYkLVw7/5L1BFKISk4LcPwHPI4F74PwLrn YTEguznUW4ddtuLWCAHiHBNuavGpPqEZUZUNbrtk1T7BpDXv8DJUSCmFO1yM993kz8cD L0EX7zR7OwcXE9Oly3pHy0qx8pkfJHHX1h1wgob4YVJ9RZa+qERXaTFvqiwGRj7i2VhR QMBw== X-Gm-Message-State: AOJu0YyyERGcO/YdIv85EU66D6ls+rowR1gM+Nw7rkBtAx9f5LrNBFdD y+/bN63Bltw9qI1J7UvKBJpC58LhQaYFpw9x/Uu3K+auFGq7K4p7RuZiMWaassgeDM8+HkiRRrg qqMucZJUodHEEMZWqPWeYJ0F5K/gPbdkScyfFDPkeymuZAZVsH9C5IVKVxTMw31kfVfxZ X-Gm-Gg: ASbGnctaiIp2Gr7NaqELmEKeJ6U9p2RAiOvBURd2J8HxESlEqEPGBVAQleqVfJNKylX CqQS7EHkRRnT/LC3pR3Aa8ekupPZwJZOiJ5DQvk9IBh8R598xjOCmhvr0xzdw3Ia0UHQWkPds1U jwzKRYMiNyXFzbVZK/ISnhBlfQUtgDYCeEKFsJDWDqHWoBufnyw7lwKbb5lmUovxyNP5GWsnAV4 P/6pDlbaeZdyQPW4BoelyOQ1Q2RE/knrtJA6ttNmtlPkel2IN8Lt3KfdiUSxqKOMDJk0r8mABt/ ntvuERgPBXSAFY+dzD5sO0fTaQ== X-Received: by 2002:a17:902:f683:b0:231:fc4b:c04 with SMTP id d9443c01a7336-231fc4b11c7mr244351165ad.17.1747816347424; Wed, 21 May 2025 01:32:27 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGV1xWBfIK43T9/ji+GRLO5chwpRsJB/lkdE0H3gO8bQb2Z1FBbt6swDS+oSfMEBAxBhaMgSg== X-Received: by 2002:a17:902:f683:b0:231:fc4b:c04 with SMTP id d9443c01a7336-231fc4b11c7mr244350865ad.17.1747816347039; Wed, 21 May 2025 01:32:27 -0700 (PDT) Received: from [10.213.103.17] ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-233abb99a06sm13194265ad.254.2025.05.21.01.32.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 May 2025 01:32:26 -0700 (PDT) From: Maulik Shah Date: Wed, 21 May 2025 14:02:10 +0530 Subject: [PATCH v2 1/3] soc: qcom: qcom_stats: Add support to read DDR statistic Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250521-ddr_stats_-v2-1-2c54ea4fc071@oss.qualcomm.com> References: <20250521-ddr_stats_-v2-0-2c54ea4fc071@oss.qualcomm.com> In-Reply-To: <20250521-ddr_stats_-v2-0-2c54ea4fc071@oss.qualcomm.com> To: Bjorn Andersson , Konrad Dybcio , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Marijn Suijten , Doug Anderson , Maulik Shah X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1747816340; l=5258; i=maulik.shah@oss.qualcomm.com; s=20240109; h=from:subject:message-id; bh=Oe0c/HT/ThhA+Ev7ojrKYh6uc2pxBdtFufKW0Dpogs0=; b=ujNdqZfGze7UgJfqIFYhkIv01bVnGXPPcSyMndyG2IS1LFj+NNu0nOitbNxhGDeB+0mLItUPn 3nWs3e1dwxXCo2C2K9N5i9yfpmwGsZGq43aIHti0GF6sCNCSBDehYv4 X-Developer-Key: i=maulik.shah@oss.qualcomm.com; a=ed25519; pk=bd9h5FIIliUddIk8p3BlQWBlzKEQ/YW5V+fe759hTWQ= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTIxMDA4MyBTYWx0ZWRfX9bfBSjEgaxVj aZL8ZkupYRWgZKyAIX8UgWvA99cwC4UQlRAL+cHiUiU+1kstmerp83nQapKlTdL/Smy6+04ZdeI L5KLifnGaFS+pJXLMQXMEM2iZQnpMBVY8FCymCjtkkzwfDCqijjO1GcISdNYf1bZ+++n+LNRK2X AlVknuhIIXjW/JlVaxuu86T0kJhNKatihyc3oih8kSX+J36zcme42mVCsRLgrEyCmMGPL4JJgk7 ef4dnNo6fUlh2cKu69s4ZxyCyIDkJjO7VKpM3v5wNLrZcMHRR6gtPzkhDnONDBCX9v0XjtYkYi2 Vu+6ECpHl0oKfSBVO+Xqid4xN1LS7Mc9MfCCMHApvZgmh/co8hiv1t96Pbn9YANq3OU0pZ45fYS USq7YbHGTelwny2+lpvLhageuq5jdRRN5YskfIFsroiOwXV94IwihCyJrlsNgQ8Pda9u2z9R X-Proofpoint-GUID: Qn2bO5uv3MjTUIwKEEiqubE3LWEfLTX1 X-Authority-Analysis: v=2.4 cv=Ws8rMcfv c=1 sm=1 tr=0 ts=682d8f9c cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=dt9VzEwgFbYA:10 a=EUspDBNiAAAA:8 a=4QwxTSDsR6DxlQvKCcYA:9 a=QEXdDO2ut3YA:10 a=GvdueXVYPmCkWapjIL-Q:22 X-Proofpoint-ORIG-GUID: Qn2bO5uv3MjTUIwKEEiqubE3LWEfLTX1 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-05-21_02,2025-05-20_03,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 malwarescore=0 clxscore=1015 suspectscore=0 mlxscore=0 bulkscore=0 phishscore=0 priorityscore=1501 impostorscore=0 lowpriorityscore=0 mlxlogscore=999 adultscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000 definitions=main-2505210083 DDR statistic provide different DDR LPM and DDR frequency statistic. Add support to read from MSGRAM and display via debugfs. Signed-off-by: Maulik Shah --- drivers/soc/qcom/qcom_stats.c | 99 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/drivers/soc/qcom/qcom_stats.c b/drivers/soc/qcom/qcom_stats.c index 5de99cf59b9fbe32c0580e371c3cc362dfabb895..6ee73268db1d4f69deaf4ff1ee8cc8e245b76f07 100644 --- a/drivers/soc/qcom/qcom_stats.c +++ b/drivers/soc/qcom/qcom_stats.c @@ -1,8 +1,10 @@ // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2011-2021, The Linux Foundation. All rights reserved. + * Copyright (c) 2022-2025, Qualcomm Innovation Center, Inc. All rights reserved. */ +#include #include #include #include @@ -24,6 +26,17 @@ #define ACCUMULATED_OFFSET 0x18 #define CLIENT_VOTES_OFFSET 0x20 +#define DDR_STATS_MAGIC_KEY 0xA1157A75 +#define DDR_STATS_MAX_NUM_MODES 20 +#define DDR_STATS_MAGIC_KEY_ADDR 0x0 +#define DDR_STATS_NUM_MODES_ADDR 0x4 +#define DDR_STATS_ENTRY_START_ADDR 0x8 + +#define DDR_STATS_CP_IDX(data) FIELD_GET(GENMASK(4, 0), data) +#define DDR_STATS_LPM_NAME(data) FIELD_GET(GENMASK(7, 0), data) +#define DDR_STATS_TYPE(data) FIELD_GET(GENMASK(15, 8), data) +#define DDR_STATS_FREQ(data) FIELD_GET(GENMASK(31, 16), data) + struct subsystem_data { const char *name; u32 smem_item; @@ -48,12 +61,19 @@ static const struct subsystem_data subsystems[] = { struct stats_config { size_t stats_offset; + size_t ddr_stats_offset; size_t num_records; bool appended_stats_avail; bool dynamic_offset; bool subsystem_stats_in_smem; }; +struct ddr_stats_entry { + u32 name; + u32 count; + u64 duration; +}; + struct stats_data { bool appended_stats_avail; void __iomem *base; @@ -122,8 +142,85 @@ static int qcom_soc_sleep_stats_show(struct seq_file *s, void *unused) return 0; } +static void qcom_ddr_stats_print(struct seq_file *s, struct ddr_stats_entry *data) +{ + u32 cp_idx; + + /* + * DDR statistic have two different types of details encoded. + * (1) DDR LPM Stats + * (2) DDR Frequency Stats + * + * The name field have details like which type of DDR stat (bits 8:15) + * along with other details as explained below + * + * In case of DDR LPM stat, name field will be encoded as, + * Bits - Meaning + * 0:7 - DDR LPM name, can be of 0xd4, 0xd3, 0x11 and 0xd0. + * 8:15 - 0x0 (indicates its a LPM stat) + * 16:31 - Unused + * + * In case of DDR FREQ stats, name field will be encoded as, + * Bits - Meaning + * 0:4 - DDR Clock plan index (CP IDX) + * 5:7 - Unused + * 8:15 - 0x1 (indicates its Freq stat) + * 16:31 - Frequency value in Mhz + */ + switch (DDR_STATS_TYPE(data->name)) { + case 0: + seq_printf(s, "DDR LPM Stat Name:0x%x\tcount:%u\tDuration (ticks):%llu\n", + DDR_STATS_LPM_NAME(data->name), data->count, data->duration); + break; + case 1: + if (!data->count || !DDR_STATS_FREQ(data->name)) + return; + + cp_idx = DDR_STATS_CP_IDX(data->name); + seq_printf(s, "DDR Freq %uMhz:\tCP IDX:%u\tcount:%u\tDuration (ticks):%llu\n", + DDR_STATS_FREQ(data->name), cp_idx, data->count, data->duration); + break; + } +} + +static int qcom_ddr_stats_show(struct seq_file *s, void *d) +{ + struct ddr_stats_entry data[DDR_STATS_MAX_NUM_MODES]; + void __iomem *reg = (void __iomem *)s->private; + u32 entry_count; + int i; + + entry_count = readl_relaxed(reg + DDR_STATS_NUM_MODES_ADDR); + if (entry_count > DDR_STATS_MAX_NUM_MODES) + return -EINVAL; + + reg += DDR_STATS_ENTRY_START_ADDR; + memcpy_fromio(data, reg, sizeof(struct ddr_stats_entry) * entry_count); + + for (i = 0; i < entry_count; i++) + qcom_ddr_stats_print(s, &data[i]); + + return 0; +} + DEFINE_SHOW_ATTRIBUTE(qcom_soc_sleep_stats); DEFINE_SHOW_ATTRIBUTE(qcom_subsystem_sleep_stats); +DEFINE_SHOW_ATTRIBUTE(qcom_ddr_stats); + +static void qcom_create_ddr_stat_files(struct dentry *root, void __iomem *reg, + const struct stats_config *config) +{ + u32 key; + + if (!config->ddr_stats_offset) + return; + + key = readl_relaxed(reg + config->ddr_stats_offset + DDR_STATS_MAGIC_KEY_ADDR); + if (key == DDR_STATS_MAGIC_KEY) + debugfs_create_file("ddr_stats", 0400, root, + (__force void *)reg + config->ddr_stats_offset, + &qcom_ddr_stats_fops); +} static void qcom_create_soc_sleep_stat_files(struct dentry *root, void __iomem *reg, struct stats_data *d, @@ -212,6 +309,7 @@ static int qcom_stats_probe(struct platform_device *pdev) qcom_create_subsystem_stat_files(root, config); qcom_create_soc_sleep_stat_files(root, reg, d, config); + qcom_create_ddr_stat_files(root, reg, config); platform_set_drvdata(pdev, root); @@ -254,6 +352,7 @@ static const struct stats_config rpmh_data_sdm845 = { static const struct stats_config rpmh_data = { .stats_offset = 0x48, + .ddr_stats_offset = 0xb8, .num_records = 3, .appended_stats_avail = false, .dynamic_offset = false, From patchwork Wed May 21 08:32:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Maulik Shah \(mkshah\)" X-Patchwork-Id: 892007 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 639D3238176 for ; Wed, 21 May 2025 08:32:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747816365; cv=none; b=RYaC3nUxYxPiVCFz7yXH5r9F+Fmx7vrzQQ9FMl0pb29Z4l+6kYE6fHEg80Rw+eyU2bXINp6neJzjN792tVFM5O015MdBFMgehM1ZSQqjYuGXbYwkn76tmBR9LciB5z9Obeyt5afVLy7TaFSreWuBqb3n/iyx8ovX25/K1veCOG0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747816365; c=relaxed/simple; bh=B90rtJaEdLVGrv1h54uOTMtYopEROylXsM2X/zlsPDA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=el/2f72e3sPXPNtKthj3ejI+f29fcHeUHVtDl5FwS1yqCpUatlNm+Y8EVOSBA1UFWftLMFtV81tGnBZ3Qsbi63ng1YinjmJgXjQ4eyd20jyghDWxWqvushacQSg/gJ2GW4vy+BJ1R1zSLvZ6wsIlIRrA0eROzwVjUQBITbkSxas= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=kERgPdgW; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="kERgPdgW" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54L5rxJe018394 for ; Wed, 21 May 2025 08:32:42 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= q8WlVCilRvu0R8ZkLwU1bjGX+ll6bjMiuOVM1KThDM0=; b=kERgPdgWw+/NE7D4 XhLxrLiULjlDATmiINY1fsDA+uFlBlnxUVajj0tI0C8CsHFOOAp2Fb+Cb1jn9BjF 2/q5xFHo24P5xUyHShMQsjKceFlXwppSWvLLpTo9OuW0jJ3FGQT26xOkuYfOtTvK +V8rlO4ZCn+b3z3OpE4mQQVKdVW6mnYtEc9BN9VqMJGk2hEZhZjLvEsct7jsItkB ZAaxUI1aRSJ1ygxvD47KJyA03eTCLA4SlFkDOW4wHysOskksEOIxsnhfz2Mf5Gwi qorp63aP//niU/4TCqkNXeVWggOMryEaYQVBLKPbQLPkz+f5YXWFTHv18FykkuD3 b0MDuw== Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46rwf9t79y-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Wed, 21 May 2025 08:32:42 +0000 (GMT) Received: by mail-qt1-f197.google.com with SMTP id d75a77b69052e-4768f9fea35so160151781cf.2 for ; Wed, 21 May 2025 01:32:42 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747816361; x=1748421161; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=q8WlVCilRvu0R8ZkLwU1bjGX+ll6bjMiuOVM1KThDM0=; b=YvOaaiX8eeR2iWnq7zxiAqIhdmJ9uU32hSmHCr0JpL2rs1z9yy5oAo7VCrZ2JC6cji +FItKBVXP4up8zHtUYBDhY68hWqKny/HHjnSsZv3EKddyRAxngZUVk/15BmMLz7RhzW7 MLLO3sDkWvBxOvENZc+MvKleUNVkOSKlc26/ygQYFrHnYDRTaoVnvA7/+/84KBoFEPAu wSFSKecDBPAf2F+BMEG+DRYv0mcq1VI55/C1+dMi3ecwOPKHSVhDRmwbsAQ7sTZWjHbx /gvZTDPYhbxD52WZZfmdKw22h0Hh+5Qr+mDyMs5X+e9beK3Wix0DfHhceB1KjwQyUZyE Zq+A== X-Gm-Message-State: AOJu0YxQkQAd2anxGD7j6a1Wu6fq/BOSu33G4GZfYaOf1MfM+Z0Ui4l3 tI4ZhuUIakWiGMEIG3fERiLFimlYGl6QpsigYj6JPCSAZ0Eatmb2CKhIIFQ90ufqI2dHCcYqnvN h2zWZZrxkGj0XqTsgRB24fUaEfYYVhvIdH8U/WxBO2ZzRD8IS6nfzpEhYY5XuTYZHRBC+AhBVj3 Km X-Gm-Gg: ASbGncs2bBx7AciIR8kwftfgCpYv4aifEIo/5lPFak8JPEVAG0ZWGnsUd9J2nqnLy0I xum5ZxW73j9KkxwtzE3diXuC+nFhCTutHji+3SXIXtIjmAo93RlN716EbcoWqSrRmlJbaSknc+U s47LLt+igH8SMLB2qQCWzXBEpReC1qVJlQjkezfqOSdmrAEm3rTuwkzZ8RuaSxIR0QS+XuLytuw a5v7HfnpJDuqv46o1n5ApaYnpmL0ZHnwdwFzzYMk53IlBeaJLP79qvICUIKVEDcjTkXeJxUgjV2 luTgNWqrNBxglX42eVKYz9IA5g== X-Received: by 2002:a05:622a:2616:b0:47a:eade:95eb with SMTP id d75a77b69052e-494b09361a3mr264761371cf.40.1747816360984; Wed, 21 May 2025 01:32:40 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHZQqSOAx2Bxa4yRiJZZ0m16zE1B1PlA2lhEyP9p5hl0i+wk6+k2XHsKXXRZEXZW3tGc/2c9w== X-Received: by 2002:a17:902:ef4e:b0:231:cec7:465a with SMTP id d9443c01a7336-231de36b432mr231781865ad.20.1747816350468; Wed, 21 May 2025 01:32:30 -0700 (PDT) Received: from [10.213.103.17] ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-233abb99a06sm13194265ad.254.2025.05.21.01.32.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 May 2025 01:32:30 -0700 (PDT) From: Maulik Shah Date: Wed, 21 May 2025 14:02:11 +0530 Subject: [PATCH v2 2/3] soc: qcom: qcom_stats: Add QMP support for syncing ddr stats Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250521-ddr_stats_-v2-2-2c54ea4fc071@oss.qualcomm.com> References: <20250521-ddr_stats_-v2-0-2c54ea4fc071@oss.qualcomm.com> In-Reply-To: <20250521-ddr_stats_-v2-0-2c54ea4fc071@oss.qualcomm.com> To: Bjorn Andersson , Konrad Dybcio , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Marijn Suijten , Doug Anderson , Maulik Shah X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1747816340; l=2719; i=maulik.shah@oss.qualcomm.com; s=20240109; h=from:subject:message-id; bh=B90rtJaEdLVGrv1h54uOTMtYopEROylXsM2X/zlsPDA=; b=GBFBCNX5R87eCsqSldgqftv+DUUjDPTkN4YAgA/+62IfTuYkCWkeTptZUqHkB9HJipE5sHsFB mrwcZZhfXWEBLGeXrLJl8FhmxzdS0WsiqYAQbGKm6loYxp882042O3+ X-Developer-Key: i=maulik.shah@oss.qualcomm.com; a=ed25519; pk=bd9h5FIIliUddIk8p3BlQWBlzKEQ/YW5V+fe759hTWQ= X-Authority-Analysis: v=2.4 cv=V9990fni c=1 sm=1 tr=0 ts=682d8faa cx=c_pps a=EVbN6Ke/fEF3bsl7X48z0g==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=dt9VzEwgFbYA:10 a=EUspDBNiAAAA:8 a=BT90xxDHZu-g9S-RVkkA:9 a=QEXdDO2ut3YA:10 a=a_PwQJl-kcHnX1M80qC6:22 X-Proofpoint-ORIG-GUID: 3UdSr51fUanmbc6jVuC9_wLf5BxB0Pz2 X-Proofpoint-GUID: 3UdSr51fUanmbc6jVuC9_wLf5BxB0Pz2 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTIxMDA4MyBTYWx0ZWRfX0L5snLGKyPi5 oKzDysX+YLEquDzlFy4mlGQ/hW87XfjuLIv06B4XpwZbBYfEarkBtRQxAkZxSRkPl1hWy2TUGTS q6kfLfyaNBSG8qPfLmrYdAW7v9Mai6zGZ43GqrcTuc1w+9OEfodxKzzFlYZRcXFH3KtEhgt9UGq 5DzeRAWeYFJied+pX1StCTIfbD4ei95/pfT7W/5naKsrflVO8qJl4OR5AQHDhQFrUKb36+25KN6 8Bzgn0HH73uM6EYzObdBaAH/2cK/ctndxKKWP6xaGXTbzTy+dkE9qNq64oFhgs4NU4163zcrlYG HOu1I8ZiWB3mAtuUfGFekLQDIdzywCl/WR+LEAgH/+r4lD4A8J0VZ9cY8mxA3GiIlCc4SFhxa55 FEEOmuNVLwAMZa1YEVOtZVEjY8tqcFSlQ2lmUHzem/GRQc54tQwDuOSAEZA9R7L+82GeaWmv X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-05-21_02,2025-05-20_03,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxlogscore=999 bulkscore=0 impostorscore=0 clxscore=1015 priorityscore=1501 lowpriorityscore=0 mlxscore=0 spamscore=0 phishscore=0 suspectscore=0 adultscore=0 malwarescore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000 definitions=main-2505210083 Recent SoCs (SM8450 onwards) require QMP command to be sent before reading ddr stats. The duration field of ddr stats will get populated only if QMP command is sent. Add support to send ddr stats freqsync QMP command. Signed-off-by: Maulik Shah --- drivers/soc/qcom/qcom_stats.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/drivers/soc/qcom/qcom_stats.c b/drivers/soc/qcom/qcom_stats.c index 6ee73268db1d4f69deaf4ff1ee8cc8e245b76f07..52b0f909bc4a365af77ca7e7fc7f997ce2c2be9a 100644 --- a/drivers/soc/qcom/qcom_stats.c +++ b/drivers/soc/qcom/qcom_stats.c @@ -13,6 +13,7 @@ #include #include +#include #include #include @@ -37,6 +38,8 @@ #define DDR_STATS_TYPE(data) FIELD_GET(GENMASK(15, 8), data) #define DDR_STATS_FREQ(data) FIELD_GET(GENMASK(31, 16), data) +static struct qmp *qcom_stats_qmp; + struct subsystem_data { const char *name; u32 smem_item; @@ -188,12 +191,28 @@ static int qcom_ddr_stats_show(struct seq_file *s, void *d) struct ddr_stats_entry data[DDR_STATS_MAX_NUM_MODES]; void __iomem *reg = (void __iomem *)s->private; u32 entry_count; - int i; + int i, ret; entry_count = readl_relaxed(reg + DDR_STATS_NUM_MODES_ADDR); if (entry_count > DDR_STATS_MAX_NUM_MODES) return -EINVAL; + if (qcom_stats_qmp) { + /* + * Recent SoCs (SM8450 onwards) do not have duration field + * populated from boot up onwards for both DDR LPM Stats + * and DDR Frequency Stats. + * + * Send QMP message to Always on processor which will + * populate duration field into MSG RAM area. + * + * Sent everytime to read latest data. + */ + ret = qmp_send(qcom_stats_qmp, "{class: ddr, action: freqsync}"); + if (ret) + return ret; + } + reg += DDR_STATS_ENTRY_START_ADDR; memcpy_fromio(data, reg, sizeof(struct ddr_stats_entry) * entry_count); @@ -310,6 +329,14 @@ static int qcom_stats_probe(struct platform_device *pdev) qcom_create_subsystem_stat_files(root, config); qcom_create_soc_sleep_stat_files(root, reg, d, config); qcom_create_ddr_stat_files(root, reg, config); + /* + * QMP is used for DDR stats syncing to MSG RAM for recent SoCs (SM8450 onwards). + * The prior SoCs do not need QMP handle as the required stats are already present + * in MSG RAM, provided the DDR_STATS_MAGIC_KEY matches. + */ + qcom_stats_qmp = qmp_get(&pdev->dev); + if (IS_ERR(qcom_stats_qmp)) + qcom_stats_qmp = NULL; platform_set_drvdata(pdev, root);