From mboxrd@z Thu Jan 1 00:00:00 1970 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 19A6A3CF95A for ; Thu, 21 May 2026 12:16:57 +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=1779365819; cv=none; b=upDpAupaEPCFuxzICIbFODXl5kg0NLvhgY/Za436UGoD4jr+lpizxJEDYf3y2OejiafRan73/ilb/5flCkoa1ZvU9842mk77ODx/SU3sESSB0WkdPTUM4GzHmqvYzqZ9ipoCasSx4az5sq/vCoygvpNgaJncSjmf552gEbvbXjs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779365819; c=relaxed/simple; bh=FM2YtHpM4OM2HUWr2MmK4EhxL38NMpDBKrZYgHLhkWw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FXFnLPx7FkoCJzopN8z/2Qi8eDh/Cm/AAojuteERFDkAJfk75nFlzDEoxmN1BhO7rgOEccwcDuukzDM2ZZRTWqmLo53sMG+hdAJT3qDd6Pc1n9ppDz416fi+79aeuCFLshKSHc1FxaSgQyWJKjFpN0LPGA8ozOi+JqI1aHOA6tU= 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=hJwkaT8z; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=cJZO0aNW; 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="hJwkaT8z"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="cJZO0aNW" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64L99jvF3527290 for ; Thu, 21 May 2026 12:16:57 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= uTeTl1+Qq4xtD/LrLJVHev9cviwyL7IZCbUMY7wQWU0=; b=hJwkaT8z4Kp0K+T7 7hLyG+UrEHeqqdgwWsVJyTjWQGVAnw8DlwXarISdMaRmOa5ETcy4b4d9vrF8Ygyn JkKl4NFzAio55YFw7EfMBSWZMkzpKKGuvvIweHVdhkVyII/+40B5dBgjggAt04nk 2PR2cjsQ7SjYrpsKFVRfZjEfXlnDi+xMrFmxjGRdnTyNp1nzXOJaEkFch8ZfRNDU XhshLXaFt0vCHoCJNQf2NZVle3MicXE9Asl0W4SsnEKYyCQg+EiiD4DOGAF+O1G5 3LbTkXZ65UwaG4hCVqGr44IP1okgtqYKtjPaOYIu3VxeEhhR/uE9H0s/p/d5bnT3 BuMItA== 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 4e9vhbhgvb-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 21 May 2026 12:16:56 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2b2e8bba2e6so85180455ad.1 for ; Thu, 21 May 2026 05:16:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779365816; x=1779970616; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=uTeTl1+Qq4xtD/LrLJVHev9cviwyL7IZCbUMY7wQWU0=; b=cJZO0aNWQws0IljZTs6tIklyAQ9TK/YPkS/e0/3ev+MSlg/SiwSx9EiQKDggDDvw/7 bVQHvSXynHaFSxOwZ/mrEt0A7CcTm08vY67Yw/8Zv8OaZjreK9cdM4+3SIj0Srm0lOYU 5S2OZayk7mbdPP7ou3DsruzRRxvcg+NgD5Opv27y9Lykm2V6Ktu42dWbqQnSOo2eN7vN PdXkZ9PFuRUlzfEf2hwbfFZ0mLdfyzR8+K5i3uPOrWN0B8LH7XIwqhjtB3hbTH7wBMC3 XRm1FBKaYUv29q/J9udnGu1IOPz2e0VJKuABXP0bNHCbf9OjHh6ubjT+pW6ENYe0/AlB 1GuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779365816; x=1779970616; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=uTeTl1+Qq4xtD/LrLJVHev9cviwyL7IZCbUMY7wQWU0=; b=gcuk451ug7f8bGfpAfnaofJRL7g9Lnanwvz1PhSlc2L7JP/NrpAkibO8GNT8goRqbA jtFD8dYDrFZXN4XWFb0r4eMzSzcVsAKlzSVDvV/8lE17gEwutGoboPBiUrhGHhIZ1naP X9LPQW9SN0vYPKefZ2DcoAhbhSSufxQ0AzI97bnNBx9U02TVkKR/XtjRkHNicVaKAPHd Yj6Y9ZBv5jAY2+b0fc2t2fLbP+yTfWnfKaKFGpdfNzTFkjB9HiCaC21SSCWXPe9mp8d4 EQ2qurevTWV7oL+HcoN3bM4LicBT4Q5e7r5bUmxdz4F3U54wJ0BqVqghr11BZt082QGp Gt0g== X-Forwarded-Encrypted: i=1; AFNElJ92PC1ODN6Ltcgn04CSDXPAfclRiO1yZivQlMNjvOshIVT833wIV/KpBMuy9G4ZyQU6S8T9FdKGf7c2gJM=@vger.kernel.org X-Gm-Message-State: AOJu0Yz7qt0TCSfvrGQDmNfwNlyjKghOqIOFFkEHlPwxHpc4oiCO+pLd rEvxCTevKzfAePMDCOaE+hpw0Ps9WoXC/qUHucgzCwnZmqUqzM+vvQIiFCkUWUuwx4gIit30z6k UlTWVoR2UynnHNPrFnUPtszDiLgqN4aVlBCGvWskPtlPWxJMnI4RYsDrN6bfmZsLqUQQ= X-Gm-Gg: Acq92OFrJ8zPeY7JQK6PzlOoxZlZBNQ7EAmtfPFJ4+e/BY0isGUr5tKzeAMfzmmShRt dJqlL6s2i/u+esVN+olssfkzQuntTk8A3UolD1k0lkwyq8ANOiX8GgPNzhxITppw7idwivv6mGg TYGV2gcKewKIceTOLPe9vGrY8D4eQC4fI0/lNMF2lC65WD6gIRfwH6XK+07gjDcUwIfM4ICxEzl GjaKdBLsYKygDA5as2ryM0Niw/BGVRuKx567wj0FPBF5GftM/gaSvvS3cxEuy0LsCmv5FADJm9x go9JeL7GBjbf8Ed3rzdbYTACI4g9/jruL+Wga0birhb1wKEo+8pVg4aau/mhJLcEvli+FiVeMc/ LBmHujL7bRdv0WKNt1Lgf/8vyFvCOmoDaO6EJkjunx1ZA8lV7T9D0WzCJxcM0goEL2saSW2hGdT tZRqLhlmJEJRk0eg== X-Received: by 2002:a17:903:298e:b0:2bc:67cc:d1eb with SMTP id d9443c01a7336-2bea33833d8mr29418245ad.28.1779365815576; Thu, 21 May 2026 05:16:55 -0700 (PDT) X-Received: by 2002:a17:903:298e:b0:2bc:67cc:d1eb with SMTP id d9443c01a7336-2bea33833d8mr29417895ad.28.1779365815129; Thu, 21 May 2026 05:16:55 -0700 (PDT) Received: from jinlmao-gv.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2bea917318esm10435555ad.5.2026.05.21.05.16.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 May 2026 05:16:54 -0700 (PDT) From: Yingchao Deng Date: Thu, 21 May 2026 20:16:30 +0800 Subject: [PATCH v9 4/4] coresight: cti: expose banked sysfs registers for Qualcomm extended CTI Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260521-extended_cti-v9-4-d21f4f92c51e@oss.qualcomm.com> References: <20260521-extended_cti-v9-0-d21f4f92c51e@oss.qualcomm.com> In-Reply-To: <20260521-extended_cti-v9-0-d21f4f92c51e@oss.qualcomm.com> To: Suzuki K Poulose , Mike Leach , James Clark , Leo Yan , Alexander Shishkin Cc: coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, jinlong.mao@oss.qualcomm.com, quic_yingdeng@quicinc.com, tingwei.zhang@oss.qualcomm.com, jie.gan@oss.qualcomm.com, Yingchao Deng X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1779365796; l=5578; i=yingchao.deng@oss.qualcomm.com; s=20260521; h=from:subject:message-id; bh=FM2YtHpM4OM2HUWr2MmK4EhxL38NMpDBKrZYgHLhkWw=; b=Ds114TPyMEar/y2iZD9LJeZrXlieJ7ZuzRXSPr95QRLqTkOMZ8bTcznAP6UxlyPYeoEw/Q4j9 PpmiG0bii0BDjzLh/r6KKKYrUT7RdWxuz6oDifB+u0XaZyDhkyR1SmU X-Developer-Key: i=yingchao.deng@oss.qualcomm.com; a=ed25519; pk=YbHeeX0Qzqo7voZLva784lFhVChB9yF3a4sceW95ljA= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTIxMDEyMyBTYWx0ZWRfX1X3C/h4pEozr rMdv+eddRsMNfpi4ZU/1IXAZSwpp22qZrxAQ034B5eQZiNEyEan+uzfdWxgO3Nvc0RYi4SMYIlu Z3R314XZ4Am4ajGmzUnZhTu7+JqxA8V3eoZMSUWnmq6KFOvZGuvE6Sb96XsPVKiGD7ZSdhcuvVx hQ1D+Wv4rKQsZNPY/L/Jl2Ru9khlgwSo/fo1gflIXe2jPye+fvLqK36gMrxF0edBPdbGMz+ZmZ+ c6Hmwc2Qo/D/az4/vJ4ERsAJAwivEeT1VjyR2DTh6Qfc+6uNEnsDeHSaR8Gh2pyBHGYqD2mc5Tc W6Zmx2+u0g8rL24Yiw48dYS47ApnmTbT7DsOxymlTVWNQMAW8gzcx232DsFYmrHyjnfe8Fq7ehq El+iIWHTYUqbSwwr/Usq0YKIU80qUBOnSvkI3NgV8CBANWPKdWkVP/VpK3i88jA2Wa69Mh9YnAo RJz6dBxCgZxttu0zFyg== X-Authority-Analysis: v=2.4 cv=GYAnWwXL c=1 sm=1 tr=0 ts=6a0ef7b8 cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=EUspDBNiAAAA:8 a=yoa6GI8vE20v00mW0vsA:9 a=QEXdDO2ut3YA:10 a=GvdueXVYPmCkWapjIL-Q:22 X-Proofpoint-GUID: 9cfxFNHAlRoPO43Sjo90tRrQ8bAR1qCo X-Proofpoint-ORIG-GUID: 9cfxFNHAlRoPO43Sjo90tRrQ8bAR1qCo X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-21_02,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 lowpriorityscore=0 malwarescore=0 spamscore=0 bulkscore=0 priorityscore=1501 impostorscore=0 phishscore=0 adultscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605210123 Qualcomm extended CTI implements banked trigger status and integration registers, where each bank covers 32 triggers. Multiple instances of these registers are required to expose the full trigger space. Add coresight_cti_reg_index(), coresight_cti_reg_rw_index(), and coresight_cti_reg_wo_index() macros that carry the bank index in the cs_off_attribute.index field, keeping the base offset and index separate rather than encoding them together. Add static sysfs entries for the banked CTI registers and control their visibility based on the underlying hardware configuration. Visibility is determined by comparing the attribute's index against the number of banks implied by nr_trig_max (32 triggers per bank). Registers beyond the hardware capacity are hidden, preserving the existing ABI on standard ARM CTIs while exposing the full register set on Qualcomm CTIs. Signed-off-by: Yingchao Deng --- drivers/hwtracing/coresight/coresight-cti-sysfs.c | 58 +++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/drivers/hwtracing/coresight/coresight-cti-sysfs.c b/drivers/hwtracing/coresight/coresight-cti-sysfs.c index 7191a478b2da..feecc9d6563f 100644 --- a/drivers/hwtracing/coresight/coresight-cti-sysfs.c +++ b/drivers/hwtracing/coresight/coresight-cti-sysfs.c @@ -207,6 +207,15 @@ static __maybe_unused ssize_t coresight_cti_reg_store(struct device *dev, } \ })[0].attr.attr) +#define coresight_cti_reg_index(name, offset, idx) \ + (&((struct cs_off_attribute[]) { \ + { \ + __ATTR(name, 0444, coresight_cti_reg_show, NULL), \ + offset, \ + idx \ + } \ + })[0].attr.attr) + #define coresight_cti_reg_rw(name, offset) \ (&((struct cs_off_attribute[]) { \ { \ @@ -217,6 +226,16 @@ static __maybe_unused ssize_t coresight_cti_reg_store(struct device *dev, } \ })[0].attr.attr) +#define coresight_cti_reg_rw_index(name, offset, idx) \ + (&((struct cs_off_attribute[]) { \ + { \ + __ATTR(name, 0644, coresight_cti_reg_show, \ + coresight_cti_reg_store), \ + offset, \ + idx \ + } \ + })[0].attr.attr) + #define coresight_cti_reg_wo(name, offset) \ (&((struct cs_off_attribute[]) { \ { \ @@ -226,6 +245,15 @@ static __maybe_unused ssize_t coresight_cti_reg_store(struct device *dev, } \ })[0].attr.attr) +#define coresight_cti_reg_wo_index(name, offset, idx) \ + (&((struct cs_off_attribute[]) { \ + { \ + __ATTR(name, 0200, NULL, coresight_cti_reg_store), \ + offset, \ + idx \ + } \ + })[0].attr.attr) + /* coresight management registers */ static struct attribute *coresight_cti_mgmt_attrs[] = { coresight_cti_reg(devaff0, CTIDEVAFF0), @@ -515,18 +543,36 @@ static struct attribute *coresight_cti_regs_attrs[] = { &dev_attr_appclear.attr, &dev_attr_apppulse.attr, coresight_cti_reg(triginstatus, CTITRIGINSTATUS), + coresight_cti_reg_index(triginstatus1, CTITRIGINSTATUS, 1), + coresight_cti_reg_index(triginstatus2, CTITRIGINSTATUS, 2), + coresight_cti_reg_index(triginstatus3, CTITRIGINSTATUS, 3), coresight_cti_reg(trigoutstatus, CTITRIGOUTSTATUS), + coresight_cti_reg_index(trigoutstatus1, CTITRIGOUTSTATUS, 1), + coresight_cti_reg_index(trigoutstatus2, CTITRIGOUTSTATUS, 2), + coresight_cti_reg_index(trigoutstatus3, CTITRIGOUTSTATUS, 3), coresight_cti_reg(chinstatus, CTICHINSTATUS), coresight_cti_reg(choutstatus, CTICHOUTSTATUS), #ifdef CONFIG_CORESIGHT_CTI_INTEGRATION_REGS coresight_cti_reg_rw(itctrl, CORESIGHT_ITCTRL), coresight_cti_reg(ittrigin, ITTRIGIN), + coresight_cti_reg_index(ittrigin1, ITTRIGIN, 1), + coresight_cti_reg_index(ittrigin2, ITTRIGIN, 2), + coresight_cti_reg_index(ittrigin3, ITTRIGIN, 3), coresight_cti_reg(itchin, ITCHIN), coresight_cti_reg_rw(ittrigout, ITTRIGOUT), + coresight_cti_reg_rw_index(ittrigout1, ITTRIGOUT, 1), + coresight_cti_reg_rw_index(ittrigout2, ITTRIGOUT, 2), + coresight_cti_reg_rw_index(ittrigout3, ITTRIGOUT, 3), coresight_cti_reg_rw(itchout, ITCHOUT), coresight_cti_reg(itchoutack, ITCHOUTACK), coresight_cti_reg(ittrigoutack, ITTRIGOUTACK), + coresight_cti_reg_index(ittrigoutack1, ITTRIGOUTACK, 1), + coresight_cti_reg_index(ittrigoutack2, ITTRIGOUTACK, 2), + coresight_cti_reg_index(ittrigoutack3, ITTRIGOUTACK, 3), coresight_cti_reg_wo(ittriginack, ITTRIGINACK), + coresight_cti_reg_wo_index(ittriginack1, ITTRIGINACK, 1), + coresight_cti_reg_wo_index(ittriginack2, ITTRIGINACK, 2), + coresight_cti_reg_wo_index(ittriginack3, ITTRIGINACK, 3), coresight_cti_reg_wo(itchinack, ITCHINACK), #endif NULL, @@ -537,10 +583,22 @@ static umode_t coresight_cti_regs_is_visible(struct kobject *kobj, { struct device *dev = kobj_to_dev(kobj); struct cti_drvdata *drvdata = dev_get_drvdata(dev->parent); + struct device_attribute *dev_attr; + struct cs_off_attribute *cti_attr; + int max_bank; if (attr == &dev_attr_asicctl.attr && !drvdata->config.asicctl_impl) return 0; + dev_attr = container_of(attr, struct device_attribute, attr); + if (dev_attr->show == coresight_cti_reg_show || + dev_attr->store == coresight_cti_reg_store) { + cti_attr = container_of(dev_attr, struct cs_off_attribute, attr); + max_bank = DIV_ROUND_UP(drvdata->config.nr_trig_max, 32); + if (cti_attr->index >= max_bank) + return 0; + } + return attr->mode; } -- 2.43.0