From nobody Tue Apr 7 13:09:56 2026 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 94AA7386C3A for ; Fri, 13 Mar 2026 09:02:51 +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=1773392573; cv=none; b=VYMsy4UytSsItD3theQOiao6+gbqzEBN6qJJDZ5aLsXX3FQ8EesgXA74nj1KXQbxiEe8vTerWWgv6iJoKmh4yjho48TRmvxydzLXQIQoCJjNgrfA3vxIHQKmj5pwkTCjIGbH5kUpugZnUrTUu35Dp9WeFVWXNez0T/8oyejpbOk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773392573; c=relaxed/simple; bh=ckf80wWUcb1qnI0v7q/6ZqqYr3nuJh7ROL35EVLOH7w=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Q2W+C0jplUpGB7Ltog1nmCIDCB+giGCAKuYkhBbV7LVcWbQEc8kQPIfXh0eys7dSRCdoIbLBM0XHe3DhgkZEyUvzbLJjikXb9CGtpQa5o6SlgYj7+B40V1jqsL/Cf/90Fv8C/bJ+NOTzGo0mZvJX7iWu2l6c7estZu9mflPfeU4= 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=THZ0iXBn; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=kRJW8QfQ; 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="THZ0iXBn"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="kRJW8QfQ" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62D5tpBh1015142 for ; Fri, 13 Mar 2026 09:02:44 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= aOdpdbZJkeNi3c6n6qEjoFu015+pEeWRTwmOxcPblaY=; b=THZ0iXBnRpfwi66q bycRV2natZUmE2rHybS/kvBqs+m77SehKofeSekf/WSIseZNZsB6vA24t40smfgh L7GGveMOY+zhDhBhmvJr1AMyVk5u1BjiylSyw4xlDU8UZ71iUdqu3kyi2ZCgKzyB aD/qYgrE6uJEuZ9un974J2LjSou/FVvNuIQaHL7TaihRV11oB0/GDzr+DRKvoyCJ UhjXnh2gPoRMaor8VTmqfzcn9eKEfXp+EHbrmAFWmULiSfk2qz76yF5g3WuaTq88 70eL+3pu0FLxgFDpkdYDUe2gBXPcTDbkUiZCUDOLyHLM2NqhpP2IGbOJstanf/00 CFTZ9w== Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cumvdmqck-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 13 Mar 2026 09:02:44 +0000 (GMT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-35a02f3b8e2so8459744a91.0 for ; Fri, 13 Mar 2026 02:02:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773392564; x=1773997364; 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=aOdpdbZJkeNi3c6n6qEjoFu015+pEeWRTwmOxcPblaY=; b=kRJW8QfQcaY2DJGslxhmZ8meBDOVorJwAplXXbMIT7IIcBMXvKRPWSQy7lw/1iO9EK J8qpoctbiEQdNqD/JPGPQhShNb4B9aiNH6uIvprTN4pi7XUwI/zywE11PEKS3FP77XgX 5dl6ywW3plQVAbGkLbkZW/9CPNKW+zONtY5EdQAJ8vbqBn3HfmndYUotXf3UjsRlkSS7 S1Ke/tveRMOhlxx4bLYq6u+xN0VEEDge+fDIfyPRSJBWYXIq4cuARJj1Yr574C2hfivt Kh/lC19RWpz5cWTsu0BlgNn9jiDTEZ3D9O6k+WZTNZV86C4henp81vw0V633EuvqCZpI KA0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773392564; x=1773997364; 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=aOdpdbZJkeNi3c6n6qEjoFu015+pEeWRTwmOxcPblaY=; b=emWDv+7Z089WyFlwU+NOeWI+I2ETETyb9f6dlgaFRgR1TYYZFkpjXSbQsiL2Bbng86 ERjZTA/hTV0P8T2IQceShBVTBpU2ihN0qNM+MscNCEYBYS07zde4Tj4glELiTu4iA46a ZRiIxskdxqolwzF81m6KC5KTWSsNL6C2rdMVjxlQLTc5wDATitiyaAHCIq7wfzmnyJfw y10o2P1K0s55NVrUB8vbjDNGxbZTPTAP14TXaaoQO3oOTvK21iprBjlQIOUOpA1x0SEN THf644KX0gZc3K5DtBP/YB9V6RwBGvhPM9t5H0xr0oxfXYyrPGu1yBO91INKUi7/RqAW N6Ow== X-Forwarded-Encrypted: i=1; AJvYcCUEZmXU9EDT7lU1hUyubNlf/fOdjYCiND8cDFiuPzhE2BOzIAjeZF8TM4mqJWBhRRK+opviw3g+qKJa6Y8=@vger.kernel.org X-Gm-Message-State: AOJu0YzUTWR2yY4/+ABPUFIfOaGaILwXDcZE/4bT8E1E3C8OcAzqZwm3 I7GptWw7mXWqNsy12+M+p7i1HcBmsQHB87dV16+WeI4wCnaDEmIYRtsriQU3qOLhQ4WFdVZqL+Q 47r9RgH2rg+Hf9Mf40SoU0fBnSYrOM9xDRI+QaeLQpIUH9AXrZMw9HvT2YXvBKrmxdBo= X-Gm-Gg: ATEYQzzGePM7TfV2Pw2EAHBWNB2FD4QkFotGa1pgxj4xMBWJB5e35fvGNcVC/mTzkcz jUBMuqGxPJ87GUIuPqBgGyc0wb5KcqKc4Qyr896eY/PDMw2fzsTRr8x3LpPEvl/EEqP3yxWYDDn KAVh5UnEU2aLE1tEPQcZmYgQoMsVNK2DS2gaNmCRqe1a3saXM5GvGY4t6Ic/gQQgtM7qLe/Ftdm YdMhe6GNgiEPbraAzaCmrUR46gTeZd5QB+ECBkR4DaxP9Tq+HgZLDmm/QK0pRVgaoXacwg2ADCN 5jqPIgiENGdzTOz3rL6Zq1Wvjrs6RJjfQ3CEkVbLt5exn8g0OEjq3NXQb8gZlFHLpTzCmYIttnJ OS+FYB8nxzKRj4+udx0GAz1dsti3dbAg6S9j5SQI8JTsy09DIGLc0FFK9n1JQR30QLwB5ujvhV/ +yjZG6PTsB X-Received: by 2002:a05:6a21:339a:b0:347:9ae1:cffb with SMTP id adf61e73a8af0-398ecab089emr2423220637.24.1773392563580; Fri, 13 Mar 2026 02:02:43 -0700 (PDT) X-Received: by 2002:a05:6a21:339a:b0:347:9ae1:cffb with SMTP id adf61e73a8af0-398ecab089emr2423158637.24.1773392562923; Fri, 13 Mar 2026 02:02:42 -0700 (PDT) Received: from jiegan-gv.ap.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c73ebb9ed44sm1269275a12.34.2026.03.13.02.02.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2026 02:02:42 -0700 (PDT) From: Jie Gan Date: Fri, 13 Mar 2026 17:02:04 +0800 Subject: [PATCH v15 1/7] coresight: core: refactor ctcu_get_active_port and make it generic 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: quoted-printable Message-Id: <20260313-enable-byte-cntr-for-ctcu-v15-1-1777f14ed319@oss.qualcomm.com> References: <20260313-enable-byte-cntr-for-ctcu-v15-0-1777f14ed319@oss.qualcomm.com> In-Reply-To: <20260313-enable-byte-cntr-for-ctcu-v15-0-1777f14ed319@oss.qualcomm.com> To: Suzuki K Poulose , Mike Leach , James Clark , Alexander Shishkin , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Tingwei Zhang , Bjorn Andersson , Konrad Dybcio Cc: coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, Jie Gan , Mike Leach X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1773392552; l=3771; i=jie.gan@oss.qualcomm.com; s=20250909; h=from:subject:message-id; bh=ckf80wWUcb1qnI0v7q/6ZqqYr3nuJh7ROL35EVLOH7w=; b=c/dRbCE5JkmyLINGwwdPHLcTkYrm7yMV8q5tvofpzFQTU7KcXIJgFI63txp30QPtCREO35GBx Q5aR9IeTh+HC3vuo91oweld6aAYBhoPk90BhhK3WfITAv129Baly/sG X-Developer-Key: i=jie.gan@oss.qualcomm.com; a=ed25519; pk=3LxxUZRPCNkvPDlWOvXfJNqNO4SfGdy3eghMb8puHuk= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzEzMDA2OCBTYWx0ZWRfX00xPZmkSUbwY U8AU3yR7zRHD6AifVonWUkNHFmO1CmANo9fK3/ROQ31pofmrj70C0V4BpJHEJ0i8qiLG4jOj72r avQRIcGhDcaXNkbeBb0OVR4M6ypPVQf9rjLrQKHLF3pEoiGZlAT/gAUD2N0pQQa/J0Uw7HRIgXw aswhc5pNybL7M3Q+8BgeRTT4PPAL0ckGuh8GVqoO4/sAPht9iIn9aWnFx+TTuCvEktu00pouHfN d1Jpc/hYO+V5PSoOgn8su0PQ55LL8EdW0eeUcvw0gR4kwu2N+sm7lfAoDz1BX6eebDN8t1rR7xq TTusl5WS8JEuioDl0nhfxK9jPv+0+Ej9a+AP8VXKnHR0Z9jlIGtfwolu7HdZaSyD3WgIHYi7Eva PJaMiB19D29t1OrlqQoHnMuycGyx+QcChiuD0lblZcYeIzBsp5eTJqPRJJVqI7R43cT8y6D8M5P 7RLBe0cwPpugeUTT0Jg== X-Proofpoint-GUID: pQvDWUy6kAheOCmGykligILBmjSCAAhn X-Proofpoint-ORIG-GUID: pQvDWUy6kAheOCmGykligILBmjSCAAhn X-Authority-Analysis: v=2.4 cv=XsT3+FF9 c=1 sm=1 tr=0 ts=69b3d2b4 cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=KKAkSRfTAAAA:8 a=EUspDBNiAAAA:8 a=qQZ2XtAyJf2dEkEvaVsA:9 a=QEXdDO2ut3YA:10 a=rl5im9kqc5Lf4LNbBjHf:22 a=cvBusfyB2V15izCimMoJ:22 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-03-13_01,2026-03-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 spamscore=0 bulkscore=0 clxscore=1015 adultscore=0 priorityscore=1501 impostorscore=0 lowpriorityscore=0 malwarescore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603130068 Remove ctcu_get_active_port from CTCU module and add it to the core framework. The port number is crucial for the CTCU device to identify which ETR it serves. With the port number we can correctly get required parameters of the CTCU device in TMC module. Reviewed-by: Mike Leach Signed-off-by: Jie Gan --- drivers/hwtracing/coresight/coresight-core.c | 24 +++++++++++++++++++= ++++ drivers/hwtracing/coresight/coresight-ctcu-core.c | 19 +----------------- drivers/hwtracing/coresight/coresight-priv.h | 2 ++ 3 files changed, 27 insertions(+), 18 deletions(-) diff --git a/drivers/hwtracing/coresight/coresight-core.c b/drivers/hwtraci= ng/coresight/coresight-core.c index 46f247f73cf6..221de57ca57b 100644 --- a/drivers/hwtracing/coresight/coresight-core.c +++ b/drivers/hwtracing/coresight/coresight-core.c @@ -588,6 +588,30 @@ struct coresight_device *coresight_get_sink(struct cor= esight_path *path) } EXPORT_SYMBOL_GPL(coresight_get_sink); =20 +/** + * coresight_get_in_port: Find the input port number at @remote where the = @csdev + * device is connected to. + * + * @csdev: csdev of the device. + * @remote: csdev of the remote device which is connected to @csdev. + * + * Return: port number upon success or -EINVAL for fail. + */ +int coresight_get_in_port(struct coresight_device *csdev, + struct coresight_device *remote) +{ + struct coresight_platform_data *pdata =3D remote->pdata; + int i; + + for (i =3D 0; i < pdata->nr_inconns; ++i) { + if (pdata->in_conns[i]->src_dev =3D=3D csdev) + return pdata->in_conns[i]->dest_port; + } + + return -EINVAL; +} +EXPORT_SYMBOL_GPL(coresight_get_in_port); + u32 coresight_get_sink_id(struct coresight_device *csdev) { if (!csdev->ea) diff --git a/drivers/hwtracing/coresight/coresight-ctcu-core.c b/drivers/hw= tracing/coresight/coresight-ctcu-core.c index 9043cad42f01..e8720026c9e3 100644 --- a/drivers/hwtracing/coresight/coresight-ctcu-core.c +++ b/drivers/hwtracing/coresight/coresight-ctcu-core.c @@ -116,23 +116,6 @@ static int __ctcu_set_etr_traceid(struct coresight_dev= ice *csdev, u8 traceid, in return 0; } =20 -/* - * Searching the sink device from helper's view in case there are multiple= helper devices - * connected to the sink device. - */ -static int ctcu_get_active_port(struct coresight_device *sink, struct core= sight_device *helper) -{ - struct coresight_platform_data *pdata =3D helper->pdata; - int i; - - for (i =3D 0; i < pdata->nr_inconns; ++i) { - if (pdata->in_conns[i]->src_dev =3D=3D sink) - return pdata->in_conns[i]->dest_port; - } - - return -EINVAL; -} - static int ctcu_set_etr_traceid(struct coresight_device *csdev, struct cor= esight_path *path, bool enable) { @@ -145,7 +128,7 @@ static int ctcu_set_etr_traceid(struct coresight_device= *csdev, struct coresight return -EINVAL; } =20 - port_num =3D ctcu_get_active_port(sink, csdev); + port_num =3D coresight_get_in_port(sink, csdev); if (port_num < 0) return -EINVAL; =20 diff --git a/drivers/hwtracing/coresight/coresight-priv.h b/drivers/hwtraci= ng/coresight/coresight-priv.h index 1ea882dffd70..5532ec82e82c 100644 --- a/drivers/hwtracing/coresight/coresight-priv.h +++ b/drivers/hwtracing/coresight/coresight-priv.h @@ -155,6 +155,8 @@ void coresight_remove_links(struct coresight_device *or= ig, u32 coresight_get_sink_id(struct coresight_device *csdev); void coresight_path_assign_trace_id(struct coresight_path *path, enum cs_mode mode); +int coresight_get_in_port(struct coresight_device *csdev, + struct coresight_device *remote); =20 #if IS_ENABLED(CONFIG_CORESIGHT_SOURCE_ETM3X) int etm_readl_cp14(u32 off, unsigned int *val); --=20 2.34.1 From nobody Tue Apr 7 13:09:56 2026 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 69A73366DBB for ; Fri, 13 Mar 2026 09:02:50 +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=1773392571; cv=none; b=T13lVfOaTkIgzABmsbLecsW97Ea+xQvKADIHFXXMUnhkLkDru2Xjp5OZ0IaoUo5vvaqumyAHGu7jBAypCjvnMB2anqv6GPgtdBUAAo5mrl82khLVfUrSZcDcVOeiU/ZsMOOm9iOihRO4UZXSrZmv5xZ5DMDEu59FBKd3jmuAdAg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773392571; c=relaxed/simple; bh=ox7XkapqqQFv6BvdfowOKNWDnDUZ/ZoNrcI2LZNMF5c=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mq0xVwYvv+cAmoYG/Vj5oroyrr65AVj+Kvbfi0kWWy6WZA9uC2S6SgTMtR9G5s7i3vWuCFs+hkCFZpv6MlitoyObhfOWmi7ro/k1Tcbw8O6oBXtLugRBsXkbPXI0u0b3XnLf98GpwFmhey5mJZ7hljkrOFxyNLEP2c3LbBU33HY= 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=SC9LSw+P; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=H16XmNy8; 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="SC9LSw+P"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="H16XmNy8" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62D5td8c1014895 for ; Fri, 13 Mar 2026 09:02:49 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= KfHNY/tww1SGJwd/uAbJYnDxS5kq3xHdkWpsLjKeguM=; b=SC9LSw+Pkr92IgIC eUAfSTWD7AroXI2r+zTnLCFrBOFwV+3MdubZVPXF8QAFiEgs+FGH9hGodsWdqIu4 +UH0xBwdBYjwB+EbV6jtY8h5CQMjLprrOLDrlbu+4NHCDcGyIo1Me8+apKjZO9+g +mwuHoLrXC73Km4HvIaPJAYr1cWQhbo2ZWjYAOJb7Gzvlo+tUgdOHZgIOHvhNZ6M q4okDNRhy3JOG81K6Um6JGJBbO+Yut1qWCx2PtZyEoEwWP7m3bm1rXm28BmeFmNV 8tvs70FlUGsxqUVJLr45q1YoDQDcQZaa12HndtfL9Hcbmu2j+NDMwTWue+Bvvn/y zIxQRQ== Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cumvdmqd7-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 13 Mar 2026 09:02:49 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2aec3f67844so14887765ad.3 for ; Fri, 13 Mar 2026 02:02:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773392568; x=1773997368; 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=KfHNY/tww1SGJwd/uAbJYnDxS5kq3xHdkWpsLjKeguM=; b=H16XmNy89KHeRlnRR4yYI4GpxuKgsuLxerxsvX42uE3xx2xrWWTh5q1uk6jepiJEow Fnd/055Pa3XUkNzSdpn1F7MviDXSi5oD+fagzG/P1QFLMf6NOmmhEkTocahLpwKeb1AD YoeOIs61R/M5zvkR4rarZX72VC7K+B/n2ljeyjTTwSxa0R0crvxlPTdKH07s4zUYCa6y BHEKtVY+EKYFIvS5ZSL5Ye/zxsigT2N7EXMicoUZv6/SMy1UBOLCCnRMbJRCf78tX3NP 2V06excWi4RcWptjRUxGnrlnsUATX364U4tdNYq2rVBaNwOVDAsNMoO8iVTZ152Rmln0 gcuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773392568; x=1773997368; 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=KfHNY/tww1SGJwd/uAbJYnDxS5kq3xHdkWpsLjKeguM=; b=aIUthsF78SXJwpVXhXZmciIvLPnPTSxP4ZLNgs9TrbxEqd1AZAdwDsB28xiuhRrq64 hWByCW2kYj23KpN55OAyZ0v/v9U25XtXJIpoe0Rz+RJag4BBAWanhL3Tq8t8YehStdBH hs53Kbpo6yhKgboRK8NcRLJJj5YN/aCRIiautO06QNmg7XXpCPDHDbm0ocEy97HrwX5p jVI3OeFyLLYpZVhBXMRta6RE4agv4wzC4rdF4AebSyItH//EzBBEkSoREyfzpMSWtR7Q Ky1G61JOlKOAyZd+DwUICdU30AXZUud9bzp30RC989EmIKhSxRflDJLlMv0QvPQRDuJk Hudw== X-Forwarded-Encrypted: i=1; AJvYcCWPUz7EHnzSNgLWbDFRzH5Zw570I0PAbtytDvWEwJlChix0YQb6wGwZxH9MkzYj4X9zH0GdSvKlS+59X9k=@vger.kernel.org X-Gm-Message-State: AOJu0YwmWYYPtB8LXJ0gMkIZFT0hhUFxUNjYZcmVyHXluOq0iY1gUFTE VNwIzENn9Wjyty3YIN8rHhfbUwG7Mv6sliUHnr7iVhnlHlESjceI7fhBVTquD6rNf++pzUBDsCY BdOFXNSmmg0+xSLPQmD3BWgv73TBUw/KxmvbzjXygArky2bs5qQrKiZ9nyoWJrd3t+YQ= X-Gm-Gg: ATEYQzyF/dBqtGqNAVMiekBlqJi9mWO+YMF97anH4QMBF2WPb8KXa9IEbg4AvJPE3ua f5XdBXlVk2kuaSyJeuUQvQJYFuXBzVixuLON4sxMgnvzq5f9YdCkEHT7bgEedtCvasVxhAYHpio iddnXRU+X/I5fDW1XkZ3pTg6qRpemGhmPgE0ErJpi+xSMfALBhI7rusHDeeCDTVq3EeoJvjVtFg 8+g2p/mKO4bR6AWnpIVu2MH2I6gbsMVftLOiBfmBhMHPXmJzvHR5WvmF27Kwl8+wNGz0xlQjJKg 66lR48nJPTpooGFeFeS43wTPs58HMaz689OAp8GkVhEArlf1bLKJmmgcohR3Jrw4/4V0DUyKPDT zbiY2rvJ9aDE3n87rzJnBEmdb1FZtzqTt2u9JMQeZuSXsRWodTUkGoVIPkh7FEh3hwv1gAbemX7 GZ5CRYxjbh X-Received: by 2002:a05:6a21:d83:b0:394:5463:7330 with SMTP id adf61e73a8af0-398ecd72c68mr2109268637.51.1773392568060; Fri, 13 Mar 2026 02:02:48 -0700 (PDT) X-Received: by 2002:a05:6a21:d83:b0:394:5463:7330 with SMTP id adf61e73a8af0-398ecd72c68mr2109233637.51.1773392567520; Fri, 13 Mar 2026 02:02:47 -0700 (PDT) Received: from jiegan-gv.ap.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c73ebb9ed44sm1269275a12.34.2026.03.13.02.02.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2026 02:02:47 -0700 (PDT) From: Jie Gan Date: Fri, 13 Mar 2026 17:02:05 +0800 Subject: [PATCH v15 2/7] coresight: tmc: add create/clean functions for etr_buf_list 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: quoted-printable Message-Id: <20260313-enable-byte-cntr-for-ctcu-v15-2-1777f14ed319@oss.qualcomm.com> References: <20260313-enable-byte-cntr-for-ctcu-v15-0-1777f14ed319@oss.qualcomm.com> In-Reply-To: <20260313-enable-byte-cntr-for-ctcu-v15-0-1777f14ed319@oss.qualcomm.com> To: Suzuki K Poulose , Mike Leach , James Clark , Alexander Shishkin , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Tingwei Zhang , Bjorn Andersson , Konrad Dybcio Cc: coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, Jie Gan , Mike Leach X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1773392552; l=6645; i=jie.gan@oss.qualcomm.com; s=20250909; h=from:subject:message-id; bh=ox7XkapqqQFv6BvdfowOKNWDnDUZ/ZoNrcI2LZNMF5c=; b=jVA1wfsLfdrODOSjsqgCmf1D8+mwe9eT/Kky4CgBmEZDCatvdZiCN1CHUu35Cn59KBw2jJTTV AC264ehcxqhCBP6JFlpVFjSpmslS4XD6tDutbSP8odsSWJIjKfGomAo X-Developer-Key: i=jie.gan@oss.qualcomm.com; a=ed25519; pk=3LxxUZRPCNkvPDlWOvXfJNqNO4SfGdy3eghMb8puHuk= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzEzMDA2OSBTYWx0ZWRfX8dsoRRVMTWpM SYcRCICVpPeuXMWykFmIjwAWm1NbeEko+d7uEw+3q39iZFYppWtsn5WEfRfmq00SfTmGGFITahH fPqyIZRXG7sB3JuwLd+0sCZiqDEiLYij5wv+CIQpEVqgg8kaQZwwOwXJG9RrHyGrDhmyV9KXo2G vAfhJewNzq/Gmum7zOnPS0NyKyxyfROef99dGUmjqYJDJUgHzYw/sx90107pF19vN8QSt0xJESm Ul0QARzbuyHwKwqf06jfUw4C9MYqfsAC4rJ2FEpIPVrpCUxDsZZ/tntAIsbj3sy3SDdihdjjEc5 2eXwAU/7DpRHIpjVYN6jb8DTJTMqp4RZAiRQSP1Fdl05+eAKJiX5FZMkokeoSK0SJp2dZyyoyDh VutPivdF4RQafZX5LYAlgpRkF4Ige2x5eaHn87UsTgi5PsQwfMsFWfFnxFNe60dPiX4TtdGnKGZ 8qAzAwTaSnvCJqqHsAw== X-Proofpoint-GUID: 6dko55bW4NzsjOLBTwv6ewDpyMhvJsPP X-Proofpoint-ORIG-GUID: 6dko55bW4NzsjOLBTwv6ewDpyMhvJsPP X-Authority-Analysis: v=2.4 cv=XsT3+FF9 c=1 sm=1 tr=0 ts=69b3d2b9 cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=KKAkSRfTAAAA:8 a=EUspDBNiAAAA:8 a=SmiEMI61MywFhWxRikMA:9 a=QEXdDO2ut3YA:10 a=1OuFwYUASf3TG4hYMiVC:22 a=cvBusfyB2V15izCimMoJ:22 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-03-13_01,2026-03-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 spamscore=0 bulkscore=0 clxscore=1015 adultscore=0 priorityscore=1501 impostorscore=0 lowpriorityscore=0 malwarescore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603130069 Introduce functions for creating and inserting or removing the etr_buf_node to/from the etr_buf_list. The byte-cntr functionality requires two etr_buf to receive trace data. The active etr_buf collects the trace data from source device, while the byte-cntr reading function accesses the deactivated etr_buf after is has been filled and synced, transferring data to the userspace. Reviewed-by: Mike Leach Signed-off-by: Jie Gan --- drivers/hwtracing/coresight/coresight-tmc-core.c | 1 + drivers/hwtracing/coresight/coresight-tmc-etr.c | 108 +++++++++++++++++++= ++++ drivers/hwtracing/coresight/coresight-tmc.h | 17 ++++ 3 files changed, 126 insertions(+) diff --git a/drivers/hwtracing/coresight/coresight-tmc-core.c b/drivers/hwt= racing/coresight/coresight-tmc-core.c index c89fe996af23..bac3278ef4dd 100644 --- a/drivers/hwtracing/coresight/coresight-tmc-core.c +++ b/drivers/hwtracing/coresight/coresight-tmc-core.c @@ -835,6 +835,7 @@ static int __tmc_probe(struct device *dev, struct resou= rce *res) idr_init(&drvdata->idr); mutex_init(&drvdata->idr_mutex); dev_list =3D "tmc_etr"; + INIT_LIST_HEAD(&drvdata->etr_buf_list); break; case TMC_CONFIG_TYPE_ETF: desc.groups =3D coresight_etf_groups; diff --git a/drivers/hwtracing/coresight/coresight-tmc-etr.c b/drivers/hwtr= acing/coresight/coresight-tmc-etr.c index 4dc1defe27a5..fdf23e1c932f 100644 --- a/drivers/hwtracing/coresight/coresight-tmc-etr.c +++ b/drivers/hwtracing/coresight/coresight-tmc-etr.c @@ -1918,6 +1918,114 @@ const struct coresight_ops tmc_etr_cs_ops =3D { .panic_ops =3D &tmc_etr_sync_ops, }; =20 +/** + * tmc_clean_etr_buf_list - clean the etr_buf_list. + * @drvdata: driver data of the TMC device. + * + * Remove unused buffers from @drvdata->etr_buf_list and free them. + */ +void tmc_clean_etr_buf_list(struct tmc_drvdata *drvdata) +{ + struct etr_buf_node *nd, *next; + unsigned long flags; + + lockdep_assert_held(&drvdata->spinlock); + list_for_each_entry_safe(nd, next, &drvdata->etr_buf_list, link) { + if (nd->sysfs_buf =3D=3D drvdata->sysfs_buf) { + if (coresight_get_mode(drvdata->csdev) !=3D CS_MODE_DISABLED) { + /* + * Dont free the sysfs_buf, just remove it from list. + * drvdata->sysfs_buf will hold the buffer and free it later. + */ + nd->sysfs_buf =3D NULL; + list_del(&nd->link); + kfree(nd); + continue; + } + } + /* Free allocated buffers which are not utilized by ETR */ + raw_spin_unlock_irqrestore(&drvdata->spinlock, flags); + tmc_etr_free_sysfs_buf(nd->sysfs_buf); + raw_spin_lock_irqsave(&drvdata->spinlock, flags); + drvdata->sysfs_buf =3D NULL; + nd->sysfs_buf =3D NULL; + list_del(&nd->link); + kfree(nd); + } +} +EXPORT_SYMBOL_GPL(tmc_clean_etr_buf_list); + +/** + * tmc_create_etr_buf_list - create a list to manage the etr_buf_node. + * @drvdata: driver data of the TMC device. + * @num_nodes: number of nodes want to create with the list. + * + * Return 0 upon success and return the error number if fail. + */ +int tmc_create_etr_buf_list(struct tmc_drvdata *drvdata, int num_nodes) +{ + struct etr_buf_node *new_node; + struct etr_buf *sysfs_buf; + unsigned long flags; + int i =3D 0, ret =3D 0; + + lockdep_assert_held(&drvdata->spinlock); + /* We dont need a list if there is only one node */ + if (num_nodes < 2) + return -EINVAL; + + /* We expect that sysfs_buf in drvdata has already been allocated. */ + if (drvdata->sysfs_buf) { + raw_spin_unlock_irqrestore(&drvdata->spinlock, flags); + /* Directly insert the allocated sysfs_buf into the list first */ + new_node =3D kzalloc_obj(*new_node, GFP_KERNEL); + if (IS_ERR(new_node)) + return PTR_ERR(new_node); + + raw_spin_lock_irqsave(&drvdata->spinlock, flags); + new_node->sysfs_buf =3D drvdata->sysfs_buf; + new_node->is_free =3D false; + list_add(&new_node->link, &drvdata->etr_buf_list); + i++; + } + + raw_spin_unlock_irqrestore(&drvdata->spinlock, flags); + while (i < num_nodes) { + new_node =3D kzalloc_obj(*new_node, GFP_KERNEL); + if (IS_ERR(new_node)) { + ret =3D PTR_ERR(new_node); + break; + } + + sysfs_buf =3D tmc_alloc_etr_buf(drvdata, drvdata->size, 0, cpu_to_node(0= ), NULL); + if (IS_ERR(sysfs_buf)) { + kfree(new_node); + ret =3D PTR_ERR(sysfs_buf); + break; + } + + /* We dont have a available sysfs_buf in drvdata, setup one */ + if (!drvdata->sysfs_buf) { + drvdata->sysfs_buf =3D sysfs_buf; + new_node->is_free =3D false; + } else + new_node->is_free =3D true; + + new_node->sysfs_buf =3D sysfs_buf; + list_add(&new_node->link, &drvdata->etr_buf_list); + i++; + } + + /* Clean the list if there is an error */ + if (ret) + tmc_clean_etr_buf_list(drvdata); + + raw_spin_lock_irqsave(&drvdata->spinlock, flags); + + return ret; +} +EXPORT_SYMBOL_GPL(tmc_create_etr_buf_list); + int tmc_read_prepare_etr(struct tmc_drvdata *drvdata) { int ret =3D 0; diff --git a/drivers/hwtracing/coresight/coresight-tmc.h b/drivers/hwtracin= g/coresight/coresight-tmc.h index 319a354ede9f..81237944b986 100644 --- a/drivers/hwtracing/coresight/coresight-tmc.h +++ b/drivers/hwtracing/coresight/coresight-tmc.h @@ -208,6 +208,19 @@ struct tmc_resrv_buf { s64 len; }; =20 +/** + * @sysfs_buf: Allocated sysfs_buf. + * @is_free: Indicates whether the buffer is free to choose. + * @pos: Position of the buffer. + * @link: list_head of the node. + */ +struct etr_buf_node { + struct etr_buf *sysfs_buf; + bool is_free; + loff_t pos; + struct list_head link; +}; + /** * struct tmc_drvdata - specifics associated to an TMC component * @atclk: optional clock for the core parts of the TMC. @@ -245,6 +258,7 @@ struct tmc_resrv_buf { * (after crash) by default. * @crash_mdata: Reserved memory for storing tmc crash metadata. * Used by ETR/ETF. + * @etr_buf_list: List that is used to manage allocated etr_buf. */ struct tmc_drvdata { struct clk *atclk; @@ -275,6 +289,7 @@ struct tmc_drvdata { struct etr_buf *perf_buf; struct tmc_resrv_buf resrv_buf; struct tmc_resrv_buf crash_mdata; + struct list_head etr_buf_list; }; =20 struct etr_buf_operations { @@ -447,5 +462,7 @@ struct etr_buf *tmc_etr_get_buffer(struct coresight_dev= ice *csdev, enum cs_mode mode, struct coresight_path *path); extern const struct attribute_group coresight_etr_group; +void tmc_clean_etr_buf_list(struct tmc_drvdata *drvdata); +int tmc_create_etr_buf_list(struct tmc_drvdata *drvdata, int num_nodes); =20 #endif --=20 2.34.1 From nobody Tue Apr 7 13:09:56 2026 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 07A4C388E78 for ; Fri, 13 Mar 2026 09:02:54 +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=1773392578; cv=none; b=ZT9rBOwu79m3lSSkzP7hfPuQRvcFsG0J7/W4nzIf/mxSu9TOJJXGEHwGkpANsIXvB9YFJwIKr+qCS30sOCUCflVIW6PBcSZ2Id6V5ZASVwFi7FU7e3xI32W4RTuHq8lZ4UjLrQe+9YLBBko6kTm+jEaIdZ2qYFEpDx+daWHdvQo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773392578; c=relaxed/simple; bh=nC4Owf4MXjBHiFj34VEuBfBkJjEC2Xd5I2Sevk5UnH8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DWd1zFXAlre5JPh/xB1p2t6bDPe8xaY2ze5X5eNdp4QiC4ZQdW6eemjDiEWvTnb2vys5n58SR4pQQvequmFjswq8jEWvcBgfaF0FPPsVDiXoPoD/5F2wGJY8uozSNci0dDWwQtuoUPO1FJRBWVUjzt1ms17zsHQ9Rdf5BczL9MY= 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=p0TDtLkT; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=iDmYBfrX; 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="p0TDtLkT"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="iDmYBfrX" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62D5tdf71014931 for ; Fri, 13 Mar 2026 09:02:54 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= L48WYHJuhhkO9dFp26TAm1fpnJhYIgGr7XXmW7vKLpc=; b=p0TDtLkTPv3bP2+K 76YjEI1hQq1paFdfLoK5BaWrKQUr5vNoltpAW2sJyXJXn1hc430mPyRk2He1zifa Lw/VAXOITvm27EB8SzltmyC9fZdEGyPzFFMRHWBbU70ULyH5ES9T3OwmmCQf4edg tc5d8yE6A7LL+4ASrl53OXsQ1eF+k7+7dpkxRFxurrIQ6y5rRG4e2wdT3e23ltkG g+OOKGIvSjklQRAFen4QL1jGjKc3rLtRhEgmpImS7noZaUsPjYqaFM6oNH4xHusT ZfUOqlwBaid3JFMHZqPacT6n5Rav+FpEvtESIW5utWA1bkZabqvMdRVul+YOwErF vOQFEg== Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cumvdmqdn-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 13 Mar 2026 09:02:53 +0000 (GMT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-35a0b5cf34dso2249737a91.1 for ; Fri, 13 Mar 2026 02:02:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773392573; x=1773997373; 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=L48WYHJuhhkO9dFp26TAm1fpnJhYIgGr7XXmW7vKLpc=; b=iDmYBfrXTmXBrAmygut2wfp7o6IfS4dYPVOsTjOva21GRikdPpoeESf/rRD70MLkCu 2MPyHXO8l/yern6Q9l+keCHsCDBUqKnCoTKxHr6CIwapacpqacMlybHUEDlRkDzJE9y4 9VYXFzooz+AvswRGW9QR5wRNZMngzf3RxHYhcTcW6kewqt1CVYd8gujBMQq6O+mxxfpY Vm0hWJoGgrce89zwfx/l79h3gEQq4dEjC63V1woBhMYD3dNrZXaBEmfbOvQRAE6z1mXC BXLV5/+i2r7wBi5oZ8HsqfY9Fl2Cr5djmZjOszln2etIyFQyrN0JZ7OYNxm+AtSqtfW1 ctcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773392573; x=1773997373; 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=L48WYHJuhhkO9dFp26TAm1fpnJhYIgGr7XXmW7vKLpc=; b=b3u3VFApBTDS1nc82tI+njhK8tiVpDx3/AqpBAcBGPWxtfxKGieSHm7moy8mmb2YlI xWwi3HPxsz4DJwxV6UKpegbBiFQmpjrzgeo84WMXOxS1eOUfQN5naNKDmCUYKxk4TCAP dTHPZScTmzZS+aqGfhxg9G6EqL9I3k4oTtuP7DmNeGtsPd6kv0jygJMpD8bu0I+Yhdx9 6ZdGvRzxl+VEUuAFLA4NLq46RhcE5oglrQWq2n1mxLETPDP8jd1HyC3wWYTcGwmuLUG2 AIWsyr5qYCWEeWTFEMd6PQJjQP7J+2h6SsCw7WunW4sl0Aj5dCf9Nf3CkdBxxlC4DkkX hquQ== X-Forwarded-Encrypted: i=1; AJvYcCWpPi/B66lVnT8F9fD4nA3VmMuqHdnJfcv3icxnr8Zq/Aw9ugUkl3yefqlUohj46frVIE7GBgDbExCjvMg=@vger.kernel.org X-Gm-Message-State: AOJu0Yzkuhl3owV+xoqTxxrlCWX36os+EVj2AKXc6SK692s2q+uuit0J XXHSPyZPuh6Uusr6hQ1+LaoKpRm8FjSHv/ttDwISJg1uKXlYRIUFUs6HYRgejmYilMVChdhtdPL BPrqAoM/3lpCtCuRYsQip7GUItNTNsmOf5YKbmTrdsYhAkkw3Dwj/aBA7hY9op/psSdHB2O8hZZ YxQg== X-Gm-Gg: ATEYQzxy1OySJcaPAqojDdkN6/hO8GqfiUfgsRyPDQ0AoV1kNOahhDEwSrxe/MkVJZl vcCL8DHmVNZ+pajiJ7hMrlVzq0FqSZ6+MLVEyIH9MyGuq2n3hw1Cnkvxk/dMt/TLWRLfRRBX4TD LNdMCzEAnC0pdkZUPf4/DnfL5xtgyga8lIng53tTnoe2mDGfW4xiWPwHy0rZqdB5LzlT7Dxc+Js wapKnN9Aqkr72shYbHx/jlaivI0eSxeGW6VmCU/0eY5w1GQc5STLcHUvsoqXuP20FWVGv2z7ElL wLxgwuMu4DwEkCM1IC4O8z84ONPlxWaGUU5M0OejQ/clhDNFRTlTR8UkscP5RKVJUsvewTHZgL7 obXKCnpK+KTDvllNCKMlSULazI87LrBZpzHPm0zSzkRKBFp3lDls3+XUJ05v1gRMPHo9szsiDjX 9uIW4l9Jrb X-Received: by 2002:a17:90b:384b:b0:352:d59a:b28 with SMTP id 98e67ed59e1d1-35a21fbe2c3mr2369896a91.19.1773392572623; Fri, 13 Mar 2026 02:02:52 -0700 (PDT) X-Received: by 2002:a17:90b:384b:b0:352:d59a:b28 with SMTP id 98e67ed59e1d1-35a21fbe2c3mr2369870a91.19.1773392572168; Fri, 13 Mar 2026 02:02:52 -0700 (PDT) Received: from jiegan-gv.ap.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c73ebb9ed44sm1269275a12.34.2026.03.13.02.02.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2026 02:02:51 -0700 (PDT) From: Jie Gan Date: Fri, 13 Mar 2026 17:02:06 +0800 Subject: [PATCH v15 3/7] coresight: tmc: introduce tmc_sysfs_ops to wrap sysfs read operations 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: quoted-printable Message-Id: <20260313-enable-byte-cntr-for-ctcu-v15-3-1777f14ed319@oss.qualcomm.com> References: <20260313-enable-byte-cntr-for-ctcu-v15-0-1777f14ed319@oss.qualcomm.com> In-Reply-To: <20260313-enable-byte-cntr-for-ctcu-v15-0-1777f14ed319@oss.qualcomm.com> To: Suzuki K Poulose , Mike Leach , James Clark , Alexander Shishkin , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Tingwei Zhang , Bjorn Andersson , Konrad Dybcio Cc: coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, Jie Gan , Mike Leach X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1773392552; l=5200; i=jie.gan@oss.qualcomm.com; s=20250909; h=from:subject:message-id; bh=nC4Owf4MXjBHiFj34VEuBfBkJjEC2Xd5I2Sevk5UnH8=; b=680OzAf8qsYE3RuttmLZm/HyPOQNsaUyipptyvNuG8EgqR378XZux5Ew4oPnbHNclrPBXigg9 G4oKQ3bhfgcAefhUXOs3izzV5FOz5ZSQYI/UJMsU5Kh+DhGyugys6lP X-Developer-Key: i=jie.gan@oss.qualcomm.com; a=ed25519; pk=3LxxUZRPCNkvPDlWOvXfJNqNO4SfGdy3eghMb8puHuk= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzEzMDA2OSBTYWx0ZWRfX2IiAC5DLUfRY SmKL5CNq+c5eqZL28LsDgoeigW+Qw2zwOYugRMIbmt6g9gPceTMFrBX/gXLSTAuEvOP6IUUhSfF y0e9GUopS7KcBwDGrE9ZZmA4Gp0LD4VJMSQlKo06Pj25opZFsNUj+JLDc6Qef4zB9rX2yAkHR0o 1oL2oUFMtyFo6qcMA4U286Oteap0Q1CDDEG+y7DNm5Use7BFnExsld5c90u326exRJ9aOrxBw8e F35JLWrds0ulkxx5zngmgxJp2VyZ8xSxe78oUwgn+7+0UcyoYTDm8MKt4WoVZLNmKlC7XgMt23f 1e9c7kiNDz7SaXBhKkYeT4V6yXZ4UEnp3C8KjpIWSIb0Ka6LJ8//d+3GLdi4PFZqNZXcvNXWe/P evHymHumPNAjZxMfF6fr14Js4o37ithr7wfnowdb9/sX8Te4FMRsRS1ScjNtBQKamZBIipunCkt dRCCJgqsygZh28k2y4Q== X-Proofpoint-GUID: YOT_yCShnxlpPQSR30MYFCyC0OyTOGzW X-Proofpoint-ORIG-GUID: YOT_yCShnxlpPQSR30MYFCyC0OyTOGzW X-Authority-Analysis: v=2.4 cv=XsT3+FF9 c=1 sm=1 tr=0 ts=69b3d2bd cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=KKAkSRfTAAAA:8 a=EUspDBNiAAAA:8 a=ia3uihG--C1vaqsH_ucA:9 a=QEXdDO2ut3YA:10 a=rl5im9kqc5Lf4LNbBjHf:22 a=cvBusfyB2V15izCimMoJ:22 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-03-13_01,2026-03-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 spamscore=0 bulkscore=0 clxscore=1015 adultscore=0 priorityscore=1501 impostorscore=0 lowpriorityscore=0 malwarescore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603130069 Introduce tmc_sysfs_ops as a wrapper, wrap sysfs read operations, for reading trace data from the TMC buffer. Reviewed-by: Mike Leach Signed-off-by: Jie Gan --- drivers/hwtracing/coresight/coresight-tmc-core.c | 51 ++++++++++----------= ---- drivers/hwtracing/coresight/coresight-tmc.h | 15 +++++++ 2 files changed, 37 insertions(+), 29 deletions(-) diff --git a/drivers/hwtracing/coresight/coresight-tmc-core.c b/drivers/hwt= racing/coresight/coresight-tmc-core.c index bac3278ef4dd..110eedde077f 100644 --- a/drivers/hwtracing/coresight/coresight-tmc-core.c +++ b/drivers/hwtracing/coresight/coresight-tmc-core.c @@ -228,17 +228,10 @@ static int tmc_read_prepare(struct tmc_drvdata *drvda= ta) { int ret =3D 0; =20 - switch (drvdata->config_type) { - case TMC_CONFIG_TYPE_ETB: - case TMC_CONFIG_TYPE_ETF: - ret =3D tmc_read_prepare_etb(drvdata); - break; - case TMC_CONFIG_TYPE_ETR: - ret =3D tmc_read_prepare_etr(drvdata); - break; - default: + if (drvdata->sysfs_ops) + ret =3D drvdata->sysfs_ops->read_prepare(drvdata); + else ret =3D -EINVAL; - } =20 if (!ret) dev_dbg(&drvdata->csdev->dev, "TMC read start\n"); @@ -250,17 +243,10 @@ static int tmc_read_unprepare(struct tmc_drvdata *drv= data) { int ret =3D 0; =20 - switch (drvdata->config_type) { - case TMC_CONFIG_TYPE_ETB: - case TMC_CONFIG_TYPE_ETF: - ret =3D tmc_read_unprepare_etb(drvdata); - break; - case TMC_CONFIG_TYPE_ETR: - ret =3D tmc_read_unprepare_etr(drvdata); - break; - default: + if (drvdata->sysfs_ops) + ret =3D drvdata->sysfs_ops->read_unprepare(drvdata); + else ret =3D -EINVAL; - } =20 if (!ret) dev_dbg(&drvdata->csdev->dev, "TMC read end\n"); @@ -287,15 +273,7 @@ static int tmc_open(struct inode *inode, struct file *= file) static ssize_t tmc_get_sysfs_trace(struct tmc_drvdata *drvdata, loff_t pos= , size_t len, char **bufpp) { - switch (drvdata->config_type) { - case TMC_CONFIG_TYPE_ETB: - case TMC_CONFIG_TYPE_ETF: - return tmc_etb_get_sysfs_trace(drvdata, pos, len, bufpp); - case TMC_CONFIG_TYPE_ETR: - return tmc_etr_get_sysfs_trace(drvdata, pos, len, bufpp); - } - - return -EINVAL; + return drvdata->sysfs_ops->get_trace_data(drvdata, pos, len, bufpp); } =20 static ssize_t tmc_read(struct file *file, char __user *data, size_t len, @@ -764,6 +742,18 @@ static void register_crash_dev_interface(struct tmc_dr= vdata *drvdata, "Valid crash tracedata found\n"); } =20 +static const struct tmc_sysfs_ops etb_sysfs_ops =3D { + .read_prepare =3D tmc_read_prepare_etb, + .read_unprepare =3D tmc_read_unprepare_etb, + .get_trace_data =3D tmc_etb_get_sysfs_trace, +}; + +static const struct tmc_sysfs_ops etr_sysfs_ops =3D { + .read_prepare =3D tmc_read_prepare_etr, + .read_unprepare =3D tmc_read_unprepare_etr, + .get_trace_data =3D tmc_etr_get_sysfs_trace, +}; + static int __tmc_probe(struct device *dev, struct resource *res) { int ret =3D 0; @@ -823,6 +813,7 @@ static int __tmc_probe(struct device *dev, struct resou= rce *res) desc.subtype.sink_subtype =3D CORESIGHT_DEV_SUBTYPE_SINK_BUFFER; desc.ops =3D &tmc_etb_cs_ops; dev_list =3D "tmc_etb"; + drvdata->sysfs_ops =3D &etb_sysfs_ops; break; case TMC_CONFIG_TYPE_ETR: desc.groups =3D coresight_etr_groups; @@ -835,6 +826,7 @@ static int __tmc_probe(struct device *dev, struct resou= rce *res) idr_init(&drvdata->idr); mutex_init(&drvdata->idr_mutex); dev_list =3D "tmc_etr"; + drvdata->sysfs_ops =3D &etr_sysfs_ops; INIT_LIST_HEAD(&drvdata->etr_buf_list); break; case TMC_CONFIG_TYPE_ETF: @@ -844,6 +836,7 @@ static int __tmc_probe(struct device *dev, struct resou= rce *res) desc.subtype.link_subtype =3D CORESIGHT_DEV_SUBTYPE_LINK_FIFO; desc.ops =3D &tmc_etf_cs_ops; dev_list =3D "tmc_etf"; + drvdata->sysfs_ops =3D &etb_sysfs_ops; break; default: pr_err("%s: Unsupported TMC config\n", desc.name); diff --git a/drivers/hwtracing/coresight/coresight-tmc.h b/drivers/hwtracin= g/coresight/coresight-tmc.h index 81237944b986..4d80105d3fcf 100644 --- a/drivers/hwtracing/coresight/coresight-tmc.h +++ b/drivers/hwtracing/coresight/coresight-tmc.h @@ -259,6 +259,7 @@ struct etr_buf_node { * @crash_mdata: Reserved memory for storing tmc crash metadata. * Used by ETR/ETF. * @etr_buf_list: List that is used to manage allocated etr_buf. + * @sysfs_ops: Read operations for the sysfs mode. */ struct tmc_drvdata { struct clk *atclk; @@ -290,6 +291,20 @@ struct tmc_drvdata { struct tmc_resrv_buf resrv_buf; struct tmc_resrv_buf crash_mdata; struct list_head etr_buf_list; + const struct tmc_sysfs_ops *sysfs_ops; +}; + +/** + * struct tmc_sysfs_ops - read operations for TMC and its helper devices + * @read_prepare: prepare operation. + * @read_unprepare: unprepare operation. + * @get_trace_data: read operation. + */ +struct tmc_sysfs_ops { + int (*read_prepare)(struct tmc_drvdata *drvdata); + int (*read_unprepare)(struct tmc_drvdata *drvdata); + ssize_t (*get_trace_data)(struct tmc_drvdata *drvdata, loff_t pos, + size_t len, char **bufpp); }; =20 struct etr_buf_operations { --=20 2.34.1 From nobody Tue Apr 7 13:09:56 2026 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 8AA77387377 for ; Fri, 13 Mar 2026 09:03:00 +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=1773392583; cv=none; b=bE1UZJ1CJXKH/FwS3m9BbUBTHPkq877o/alniHV3rgg/9cqz+yXkpT5lAjJnaguULx5Nw/91ogtGm/GwMgW1ApHO0sv5vElsQqAa6pv/F1SJXRvViVrbLqyYckJvGFO6o9I/M4hqLfRuDuXmDePM3Rr1Bi8Bq1fWaQGaZ2upyl0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773392583; c=relaxed/simple; bh=SHQCxyqhzOhDvbMmdapiBeYjKlWwzGTzuuL4qctEsok=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FyhJBpG8V7gVM+x1R5lDKPVU5bmcIdXq8EbhpqFz+TB3u13mGzwcPZL0HVXzSllGjTh5vG24aHU2HuZkYU0HoQNKpYMAQgydL9MUQIuTKlvuE5Lp5TDqIpSUvuieD9O90P0dBO1caOeF21I5QPayWJeCvkjTGM6gYmwjG501vOY= 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=QJUSP//V; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=CM4iS2bJ; 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="QJUSP//V"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="CM4iS2bJ" 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 62D8v98K481510 for ; Fri, 13 Mar 2026 09:02:59 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= e3QKe9UEvF2DO5cfYaW3eH4Kymumo+ieIlTFLLIUxrU=; b=QJUSP//V4NS+aQIo n/iEjSXTXQFa82nnGfgR3XQ7XZn16yizAvPIrYC0Xf4ZkSJWhaUVhQZ16Rrlg+8f h9bJu05RqPo+tdjXk2Ji6CECtbs5FLIZOlql6vd8X6cjPpl5zOSeef5TZPgouaYV LAD0ZRFsMboM+i2ftLAYLERyarzqoHmNxbDGZ6+1K7+uKaghX/YlQ9PgKcFQIyPB hcgaXyulZZGZ2g82T+wDC/nDXURAXhErKcr017vfMI1xXtZB5JziIf4TGy9Wposc Sj6LMoEgskLk6A7XJAggwv+LLbk4sv7bpoByomC30gKgeqNda5OA9JaQWzkYJIZk r37fNg== Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cvfh7r0qh-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 13 Mar 2026 09:02:58 +0000 (GMT) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2ae3f446ccfso20609125ad.2 for ; Fri, 13 Mar 2026 02:02:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773392577; x=1773997377; 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=e3QKe9UEvF2DO5cfYaW3eH4Kymumo+ieIlTFLLIUxrU=; b=CM4iS2bJATH6Dz4cdp6osu4BXBGZGsU+4X6aIGCImMHRgpe1iy4PEWCwViKL4ZT+iR V01fnxTmCavQbOSaEZ7buf2bIobJaa1TbvAkoqzV8BgilP6HoMVX7Bz3eRXBRhtEVjfV wRFBcI/5OGzkT4n0ynMO0w1U1X7JWA/J815pt7J/lqzuiVDo04cQqqSwWR8mE21SyA/q /N7ly6m00xXOqzK5wHJID9uykH/g8P+P/evJTRzds0Xm8/eK3wLgNGoFw5Js02Zveybh +hAiVZRFKcSAUqV4r/tDB7z1K6OUWenDuAwRrj/XxAKL6Nx18uciNdPcSGRp7VzdDt83 UeSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773392577; x=1773997377; 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=e3QKe9UEvF2DO5cfYaW3eH4Kymumo+ieIlTFLLIUxrU=; b=jGYDFDwbTXLNdkQTXR9W/Bj7rI935GrNoNbi9vdK8yKpMvbbWIDZ3wqeJ1Kl4jd3Aq LMEbFMSEf1pw41NZucFIOmXkb2UFyXOSgbIzuWvCaTXyTfRd+iSFRh5q6WPyPxIJhchz Fcz6t73esvPeCeoh95JD+/7K25cwbrTc05JY4ln7dcTf/boRnHAeg1rADs32G4u8xxsK uWcfCvz34fvkLCLOIH44aKNImXnoDs3xoUbfwyeIkAqd7XBPyvRGeK5rLGcD0xH2Gr+j puuIs6bELIlNlA2twCrS2zmbL9J39pdYBvwmTsa+5L709z8PGBsinbSbSxzK7Qx1iDcQ MKQg== X-Forwarded-Encrypted: i=1; AJvYcCXCHeXsdpA+m+tqMrYw/k8BvTPBEvLZY75C85pntk5zOlkiIa8SFbcZakozLj96ewmiEV2T2bYHs2pfP1s=@vger.kernel.org X-Gm-Message-State: AOJu0YzmY441K4lHhcjMyGDWr50FNR8WtUrxFL05B2uj44vMYTBXCqPw sNvcAUp1g6bq/a/LgsrkO+fZF9vW3/T9wkxmHZmsZnm8wSEIputin6nwsk5QtsHMfbsYtoeCSyx RJo8yuIzugma0+unM2iNnPz6qrw8xsTAdhiTEojRicAbfereHNfTGhkyVzLnDYFiZZ3A= X-Gm-Gg: ATEYQzze7w9p+z/+Kzt+3blGBKAAAyR2B1c3wy9SIVV6xCuJ7OJd6JUcteWSRXt6wk3 aSwCXCPO0DNX15+7pICjef2Z8BBzKZzQ6wye+8HChuMKEzIVpcfccoQ68ktMafDgNPSyfowdR/M URu1TggjVZzMp832QxEv2DAoJkZpEehrJOhkAgdC4p+C9hYKoOIJewFTOHl76aK0sV9VG6E4CA1 CHdBvskkc+BcpDQVtg2Ym0yHV6bgKrb+O9HB2iWI8fBXamEPCNv6bzMKnQNoW3x5t5XYhQax0K5 hwAiHDdcoDC/BEQnz95Xn3aLJ5r4syrmMkc0J5U3liKhHZbjdh0/Hj3ECigz2Xr/m18yryEy1rW iXRybRNE/PUAHoywXowYyVJ4tsJiM+dzOgzGuuGTisOBe2KIetAt9yeauqZbkzcGj4CdujDVXrn 6Vh4qmWjvy X-Received: by 2002:a05:6a21:7706:b0:398:71b6:33aa with SMTP id adf61e73a8af0-398ecdf29ddmr2038614637.64.1773392577534; Fri, 13 Mar 2026 02:02:57 -0700 (PDT) X-Received: by 2002:a05:6a21:7706:b0:398:71b6:33aa with SMTP id adf61e73a8af0-398ecdf29ddmr2038581637.64.1773392577039; Fri, 13 Mar 2026 02:02:57 -0700 (PDT) Received: from jiegan-gv.ap.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c73ebb9ed44sm1269275a12.34.2026.03.13.02.02.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2026 02:02:56 -0700 (PDT) From: Jie Gan Date: Fri, 13 Mar 2026 17:02:07 +0800 Subject: [PATCH v15 4/7] coresight: etr: add a new function to retrieve the CTCU device 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: quoted-printable Message-Id: <20260313-enable-byte-cntr-for-ctcu-v15-4-1777f14ed319@oss.qualcomm.com> References: <20260313-enable-byte-cntr-for-ctcu-v15-0-1777f14ed319@oss.qualcomm.com> In-Reply-To: <20260313-enable-byte-cntr-for-ctcu-v15-0-1777f14ed319@oss.qualcomm.com> To: Suzuki K Poulose , Mike Leach , James Clark , Alexander Shishkin , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Tingwei Zhang , Bjorn Andersson , Konrad Dybcio Cc: coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, Jie Gan X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1773392552; l=2348; i=jie.gan@oss.qualcomm.com; s=20250909; h=from:subject:message-id; bh=SHQCxyqhzOhDvbMmdapiBeYjKlWwzGTzuuL4qctEsok=; b=r51Dn3HQ6+cRTi9Bx+21pf6jblf+Slf/fo169jNssmIDb5fBcFkHf0XkqJIAVYEoIHrgjF6V7 uWc4QNP8xkpCMCX65JnUKBnylEf39DUaaagbjqPQlEyMbdU3Jl1MLyG X-Developer-Key: i=jie.gan@oss.qualcomm.com; a=ed25519; pk=3LxxUZRPCNkvPDlWOvXfJNqNO4SfGdy3eghMb8puHuk= X-Proofpoint-ORIG-GUID: yD2RAgRfoh0gNLllftWpvoBUxjgJkvGm X-Proofpoint-GUID: yD2RAgRfoh0gNLllftWpvoBUxjgJkvGm X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzEzMDA2OCBTYWx0ZWRfX749GuronATQp Fy3+CdPK/f7FVCb2Gr/AG2sIv3f/veHk6AeVM/SH7EYFFSOAW1d0tK9Kn6RZQVj4nBQIdHwQoQ9 cBZmJdPEWOCfaLAxYaUjuESBJoIJWOOnG7Rv/EfqfswI7wfL1ykdmSYRYBb2yN2bM1g8SqXQWeE ugZ4ou0k70sh2OxXj++dlnMEu4gkWAbbJPZdwNLMFg/R9yk5uOI7T7OWRIBSZ2v/7ieENCeZK+j 9iEiD/4INpCi6CpUDuWRbmT9OGJkqPiLGoHgUhUonBMUJ3PAQ0rpGmfNAVn4eYVMg9nwuKrCZOU vPJErDON3KDqhSa92jHLyu1HSaKnZa4BNRO2N5q8hY4vEHaEQrJ3Q/AqegxrqdP6n+yaK/rtg4X L/UOnJSj3dq+kiX70JglX+GYnXib7nN40FToBETXiavnc1wTzKpX4EFoMBOtLIaGo8zFI7tFyJm 6pAOQpUwzc6A6SpAMkQ== X-Authority-Analysis: v=2.4 cv=BpiQAIX5 c=1 sm=1 tr=0 ts=69b3d2c2 cx=c_pps a=JL+w9abYAAE89/QcEU+0QA==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=EUspDBNiAAAA:8 a=FuIWbRVyn4pKkvqW11oA:9 a=QEXdDO2ut3YA:10 a=324X-CrmTo6CU4MGRt3R:22 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-03-13_01,2026-03-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 impostorscore=0 phishscore=0 adultscore=0 suspectscore=0 lowpriorityscore=0 clxscore=1015 bulkscore=0 spamscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603130068 Add tmc_etr_get_ctcu_device function to find the ptr of the coresight_device of the CTCU device if the CTCU device is connected to the TMC ETR device. Signed-off-by: Jie Gan --- drivers/hwtracing/coresight/coresight-tmc-etr.c | 24 +++++++++++++++++++++= +++ drivers/hwtracing/coresight/coresight-tmc.h | 1 + 2 files changed, 25 insertions(+) diff --git a/drivers/hwtracing/coresight/coresight-tmc-etr.c b/drivers/hwtr= acing/coresight/coresight-tmc-etr.c index fdf23e1c932f..eebfe45b82b9 100644 --- a/drivers/hwtracing/coresight/coresight-tmc-etr.c +++ b/drivers/hwtracing/coresight/coresight-tmc-etr.c @@ -865,6 +865,30 @@ tmc_etr_get_catu_device(struct tmc_drvdata *drvdata) } EXPORT_SYMBOL_GPL(tmc_etr_get_catu_device); =20 +/* + * TMC ETR could be connected to a CTCU device, which can provide ATID fil= ter + * and byte-cntr service. This is represented by the output port of the TMC + * (ETR) connected to the input port of the CTCU. + * + * Returns : coresight_device ptr for the CTCU device if a CTCU is found. + * : NULL otherwise. + */ +struct coresight_device * +tmc_etr_get_ctcu_device(struct tmc_drvdata *drvdata) +{ + struct coresight_device *etr =3D drvdata->csdev; + union coresight_dev_subtype ctcu_subtype =3D { + .helper_subtype =3D CORESIGHT_DEV_SUBTYPE_HELPER_CTCU + }; + + if (!IS_ENABLED(CONFIG_CORESIGHT_CTCU)) + return NULL; + + return coresight_find_output_type(etr->pdata, CORESIGHT_DEV_TYPE_HELPER, + ctcu_subtype); +} +EXPORT_SYMBOL_GPL(tmc_etr_get_ctcu_device); + static const struct etr_buf_operations *etr_buf_ops[] =3D { [ETR_MODE_FLAT] =3D &etr_flat_buf_ops, [ETR_MODE_ETR_SG] =3D &etr_sg_buf_ops, diff --git a/drivers/hwtracing/coresight/coresight-tmc.h b/drivers/hwtracin= g/coresight/coresight-tmc.h index 4d80105d3fcf..00a0b3597348 100644 --- a/drivers/hwtracing/coresight/coresight-tmc.h +++ b/drivers/hwtracing/coresight/coresight-tmc.h @@ -470,6 +470,7 @@ static inline uint32_t find_crash_tracedata_crc(struct = tmc_drvdata *drvdata, } =20 struct coresight_device *tmc_etr_get_catu_device(struct tmc_drvdata *drvda= ta); +struct coresight_device *tmc_etr_get_ctcu_device(struct tmc_drvdata *drvda= ta); =20 void tmc_etr_set_catu_ops(const struct etr_buf_operations *catu); void tmc_etr_remove_catu_ops(void); --=20 2.34.1 From nobody Tue Apr 7 13:09:56 2026 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 77624386C37 for ; Fri, 13 Mar 2026 09:03:04 +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=1773392585; cv=none; b=lkUboxbcFGVhKF5WGnhcwCCScd0V2u1kV9jVndXsZvXQfpQIgIulFzg8Kgfp0Q7U8OQGXES+nHaGJMeOuCyKWSw4rLaP7yACSLq77aIFOt09dA+ipXgHqXxPFASHynpsHPhHyEtYLZ4fGePbfQJ6iHiacgdOTAEYQgEexApXBbo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773392585; c=relaxed/simple; bh=DsL6kcYT3hY1q2jvZSOp/rxfO6RBNAUHqHA9yEMzJAk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FiY3+fAQ12dO20HMpRoMiwthyYLA168vcaqTa+yI1pkgN/hpZwknEX/UoBZN43yVJb7RcWYmTrjmNOwGrXcBRI9nJH8WWsA+ifBW2/ffBF/LVYfRJi+U33FLAAaUMJzDIrnZirFB4pg3VJ+DI5Q5oxHGLNnSkGjsN5XY525Cbuc= 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=n0vDKuNl; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Gq4C+D9H; 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="n0vDKuNl"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Gq4C+D9H" Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62D5tYN03229726 for ; Fri, 13 Mar 2026 09:03:03 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= 5AiUjeizRXgIt0pWaEk9wGXXVAIJo5RCeKWJBfIhvcE=; b=n0vDKuNl+IOtEaYG EBGvgVYeVY71ct51G5mLn78Prteo/suCcPjzVYKx03+q4NSOrrBIyED0zu99gus0 ZTHa3sfEBzncUNa+1OLXPimH25lc90B/6q2b1lpgCWQfYKPqJpJge2qija8b/6BW D05+t5mneaf5wspe1IFVO5w5ybgQBfYu9e1zeVyqBG7ECFbULmPnSYjZqOqk8kix XiiHGc09Fqfh5RKtzDYWVGujENJSd0vBoLnEaCL7RfU3zMzV3Csd5kN9X0kUuQiV Vxy16Sn4YwbdstfKkU6PFepucR4+yQ7D03I/FX5mssSbIwtZaDD8t0tFhyrPrlBR Q3cUpg== Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cv8n7heb0-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 13 Mar 2026 09:03:03 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2aed37d9310so1645135ad.3 for ; Fri, 13 Mar 2026 02:03:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773392583; x=1773997383; 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=5AiUjeizRXgIt0pWaEk9wGXXVAIJo5RCeKWJBfIhvcE=; b=Gq4C+D9HUkzc1C5vnW2pX47bSUhBg3wos7buLEs0WkPZqe1KpbrwEp43ntR574sXPc h7BCqwwwSjlMT115qaIYchZW9OX38ZTSM+Ra3glitZpYo/D9+jKHH5WLBYdmT6RANrmm yVOtLlUIwyPuWhbPDaEKSqyZqRuMDugXBOuQVmOuqclR+R3qlU1FFBPSNUIFCDcMtKNY xKv8QzpZq/EOLoTUYfLNlSyCasdwNOe4QGHGfmiErS1WcDxtUJ3NFZYgpxDsYsQAfQ/g vJ6ifmTHjCV7sySwKXSaMJD5ZIcKw1sYXwYa5uLKxFE6DBC0VQyPT7zHdXVvlsqtVmg5 mcQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773392583; x=1773997383; 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=5AiUjeizRXgIt0pWaEk9wGXXVAIJo5RCeKWJBfIhvcE=; b=tUlBxpH3vzZvl7GNhCjFryojGM3RgawpEL8y+vXlurfdq0MknpPIZ/pCddSGnFzvQV jXHnCzGTcj9YZSdEHIoXl0a6DTNrsu3luyigX8rfK22aNSI8X+pVdqEXPqEbT2rKdUyo dlcjCEpgO0p0sY+nJOrRKD6QEoaCJTeRDVjd1CX6ZcMvXSICQydJXeJbUnrrUuMPUnru 3Ang0UMDuiXpx2HH+oZ6ST6UFMRavGIvCtHdoUc60YY659EBZjK2vSsc58G9XBcRPZcu haG3qFGSh26OKQLy9X5XRzFA+/BNaUpSKQ5VQCBfo5jjiWStVIzEftUtGOEX2TDIIQSX rOeA== X-Forwarded-Encrypted: i=1; AJvYcCVHCa+i8U5g588UrPqSd6n2rJv/Alf+Q1IkzeDVItI25VAkMCrozwowdeue25glySOhd/It1xL+Cn8W41A=@vger.kernel.org X-Gm-Message-State: AOJu0YzDSl1vLHSC3/pZlzO5HSjUgXcQ/BLTd6nJ1nNRfs4GikO43/tw 38y7F2FhR9tIR+xga5mAuimqMWsv9XLaBaA6dvn7zFlJXQM48CTq2yI9EDzUrrtGN3S7TzF15Q7 Z5rP13aayGmvSYQaP8UZA5aQUer3bwhzEVqfB4tDzDr920KDji0fKC87qeI/2DG54LhU= X-Gm-Gg: ATEYQzyjblVKaL9vJAcP/b0TwxlAHYX2VcD2v12baHRSt/kgMVx9rTBZ3eaQtgNGI81 2kNVRU9PfVw6ONokyU7KjNsk3vFk0BOfCiypekskykGi+Eaa6uYh+H6uxfT0hw3LzPLXGX+IqR2 ydQh0GiWamv17t+m8fjVx13hmG7Ui31GkPNNlmumevNIOdEfT8TGHixeCody8JCZNAm9nkQtSxX O/WfOE3TmpGKN2CwaQ1kVQzYUdBSSWBGCFePmLcfMn+OJ8FKz+G347A/c0rGbYTYMWTAKu8SibQ G3eewei8zrLcM6uf6PQhyt++EM0ihbu7EdFWa9+li4Pp4k2srWj+pcJJ2IeihvKzjxcpDMgn1kV H9RE6rjM2Tl5v1f/1t3VAVA5WSb6HYoLMUmEaMA0fIADKOjDgppUCe3NghgcbYEzFIPh/NchK3R dU/oNnWfVD X-Received: by 2002:a05:6a21:748e:b0:398:b72a:94c1 with SMTP id adf61e73a8af0-398ecb44697mr2160745637.30.1773392582574; Fri, 13 Mar 2026 02:03:02 -0700 (PDT) X-Received: by 2002:a05:6a21:748e:b0:398:b72a:94c1 with SMTP id adf61e73a8af0-398ecb44697mr2160701637.30.1773392582022; Fri, 13 Mar 2026 02:03:02 -0700 (PDT) Received: from jiegan-gv.ap.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c73ebb9ed44sm1269275a12.34.2026.03.13.02.02.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2026 02:03:01 -0700 (PDT) From: Jie Gan Date: Fri, 13 Mar 2026 17:02:08 +0800 Subject: [PATCH v15 5/7] dt-bindings: arm: add an interrupt property for Coresight CTCU 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: quoted-printable Message-Id: <20260313-enable-byte-cntr-for-ctcu-v15-5-1777f14ed319@oss.qualcomm.com> References: <20260313-enable-byte-cntr-for-ctcu-v15-0-1777f14ed319@oss.qualcomm.com> In-Reply-To: <20260313-enable-byte-cntr-for-ctcu-v15-0-1777f14ed319@oss.qualcomm.com> To: Suzuki K Poulose , Mike Leach , James Clark , Alexander Shishkin , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Tingwei Zhang , Bjorn Andersson , Konrad Dybcio Cc: coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, Jie Gan , Krzysztof Kozlowski , Mike Leach X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1773392552; l=1751; i=jie.gan@oss.qualcomm.com; s=20250909; h=from:subject:message-id; bh=DsL6kcYT3hY1q2jvZSOp/rxfO6RBNAUHqHA9yEMzJAk=; b=wxo93JaqfmmRQZHWnlaOdqCh8k2BX70514xVcuOFt1uLiFwTUsN5vwD98y42Myh1S5EFfwppp kx24azgXIP4C71B5gX+knl1PmnT3R7S6lISm0O61Xnmgmsl0qvnG4BB X-Developer-Key: i=jie.gan@oss.qualcomm.com; a=ed25519; pk=3LxxUZRPCNkvPDlWOvXfJNqNO4SfGdy3eghMb8puHuk= X-Proofpoint-ORIG-GUID: wJHlQDXTDTmPs103q2jG0RbDfdY-tq60 X-Proofpoint-GUID: wJHlQDXTDTmPs103q2jG0RbDfdY-tq60 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzEzMDA2OSBTYWx0ZWRfX+r41V7XgNzvZ 4eIiryko1kW1ZHhsYbFWEi/ClmOmKdfg3iJ/9jq3GRBPgv/z3Arn5m7AGUZQk1tLTSeIfTzkhM9 /qgtxtYA8XgzsPeXPkya69XE2sMirgu2F2D/joFz7qyNtzSnjyEdfvAYalL6ixpssVSpp3ah7GU n8R/WGrftUepFz4xpMoSHllLRJsFAaO0Cu8677hpCL2bCie5Fz5mSgqg8pEkaiNZ0k0K0pNjlOK he71KI5ThausqkBQDXBPKDPG1gFiLmue477mafiuzXE9AudlEcHQ+JeBLOop/hiMgYdUEcgb2/F 56upa2GVd/Ewwz8iXEdu9W8m+g8OTnylvLmSlZVrukC+kC09KQj7RVzHp0ANzaeMtuFuPCeLX9p IFY1HL2Shjms0sgqsv/boa0WS1aBwQRTkDCiimfi1/QndwB1WbVihyW+EHDIbNuYTzEearf7NMy joMB9e9nFCdvY91ctFw== X-Authority-Analysis: v=2.4 cv=CpCys34D c=1 sm=1 tr=0 ts=69b3d2c7 cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=KKAkSRfTAAAA:8 a=EUspDBNiAAAA:8 a=gSyxy6DGYGa4b6s9XCEA:9 a=QEXdDO2ut3YA:10 a=1OuFwYUASf3TG4hYMiVC:22 a=cvBusfyB2V15izCimMoJ:22 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-03-13_01,2026-03-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 malwarescore=0 lowpriorityscore=0 clxscore=1015 spamscore=0 priorityscore=1501 adultscore=0 suspectscore=0 bulkscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603130069 Add an interrupt property to CTCU device. The interrupt will be triggered when the data size in the ETR buffer exceeds the threshold of the BYTECNTRVAL register. Programming a threshold in the BYTECNTRVAL register of CTCU device will enable the interrupt. Acked-by: Krzysztof Kozlowski Reviewed-by: Mike Leach Signed-off-by: Jie Gan --- Documentation/devicetree/bindings/arm/qcom,coresight-ctcu.yaml | 10 ++++++= ++++ 1 file changed, 10 insertions(+) diff --git a/Documentation/devicetree/bindings/arm/qcom,coresight-ctcu.yaml= b/Documentation/devicetree/bindings/arm/qcom,coresight-ctcu.yaml index e002f87361ad..2981001a7d7f 100644 --- a/Documentation/devicetree/bindings/arm/qcom,coresight-ctcu.yaml +++ b/Documentation/devicetree/bindings/arm/qcom,coresight-ctcu.yaml @@ -44,6 +44,11 @@ properties: items: - const: apb =20 + interrupts: + items: + - description: Interrupt for the ETR device connected to in-port0. + - description: Interrupt for the ETR device connected to in-port1. + label: description: Description of a coresight device. @@ -65,6 +70,8 @@ additionalProperties: false =20 examples: - | + #include + ctcu@1001000 { compatible =3D "qcom,sa8775p-ctcu"; reg =3D <0x1001000 0x1000>; @@ -72,6 +79,9 @@ examples: clocks =3D <&aoss_qmp>; clock-names =3D "apb"; =20 + interrupts =3D , + ; + in-ports { #address-cells =3D <1>; #size-cells =3D <0>; --=20 2.34.1 From nobody Tue Apr 7 13:09:56 2026 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 F080F387377 for ; Fri, 13 Mar 2026 09:03:09 +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=1773392591; cv=none; b=QI1tG2pZNYW2LlStXXH3DRDY2rcBFIafunyAtEWVgtJXC6jLUA+JYjWISpDLxkbXql5aMy9uhamu51mPV8yz4SizuKXbciKmIeO4lyYVU0ZsHZnF0trQw2xMEWXRBYHyzr18CUbWtNowKfYpCpTD7HlevCbX+etqxnHu5xpnfcg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773392591; c=relaxed/simple; bh=XxaF0d4GsY8w76Qm6KBddVxedRFRq0jSH6fNohRSiiQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZBlsE0fO59CB4J7OXQAVvKCDwHfiL3lynJyPCt9bp80ZF17jexQanqQeuPCsEgH6ZnuFNw1TOl21zWtrUDvnBvzAfwdhEs4np8aLf1ulHdtOiRpbxWREwtKApio1NGJGgmyq61IH2cRxg8m0S5lfgQP7OsgD0/r821pM1G5/W/0= 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=Ip1Ic3yC; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Zl/m3VVE; 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="Ip1Ic3yC"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Zl/m3VVE" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62D5tclN1176374 for ; Fri, 13 Mar 2026 09:03:09 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= 4g6Bi/263JJhMEabL0RlzSYfRK5KWj5II2MW3Vr000Y=; b=Ip1Ic3yCYFZVHhQ+ oIESswTIyX6yp/kGXZsvr1sqntZ8Gv94atSrUlbdDo4QNvE6dYYb3pkyGumbTG42 pjS6PC4Ga9tlHjudvDg+WnFbUpCol2Ugn6hJhFR46rCLZaANgj//R+30OWTU856j ERiZ2WAZmXBGVd8IIQpZcQFJBjMEgfbR6JSOPQxhpSRLunxdNqAj0qbYeC0pRlT8 hlA2An0z2ydUlueUGUR2ZYSmoylS8GesZUyeMZ3IUJib+detZKrGL8TsmWUuqE+S NCau/2SDOtp/ouSrXodKMh/Ovv8FtAorFM0nDARxu4YC8Vg4G4VKR98FeQf2evUz JNw9vg== Received: from mail-pg1-f199.google.com (mail-pg1-f199.google.com [209.85.215.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cumvqcsgj-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 13 Mar 2026 09:03:09 +0000 (GMT) Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-c73935acff2so1025833a12.2 for ; Fri, 13 Mar 2026 02:03:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773392588; x=1773997388; 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=4g6Bi/263JJhMEabL0RlzSYfRK5KWj5II2MW3Vr000Y=; b=Zl/m3VVE5fDJDu5eOHpTBFZ8VmhPiq0zqjZ8gBMuY2y2g9x8Iv4Uzh3iWM3r/D8a00 IH4l4tN6/nv/gzwgS8ZnvAX6ne38Re+hbpD1KePRgxYuyUfHexgKBLeMi6R0K92ocXaz NOCS3xs37IPFjHgPPEzJAG5/Fu3qGLNMRhew4qE2YfiZKxH2qkW1tFbnIYeUdsXjg+uE 87RSn7ecDc8S7p5EaCBB63ec/N3z/H3rY+d0NCUxAzNsURE4raUjcl7/Ak2u9YVFGjxm yWerq0rECg2Lxmx1w+5HaLmHEU/OKqR5FrZNjH97QAxhUiNEK/rwH6vq7RTSlPmohyOW gHYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773392588; x=1773997388; 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=4g6Bi/263JJhMEabL0RlzSYfRK5KWj5II2MW3Vr000Y=; b=EGzccXNHndVn8+HFhNt640DWom3fVV69W+MurLKvVFBNSn3Xwwl7MO8rroemGHNWa2 Yd+r9APAUNFsXPoaxEafbMmkGQeA4pFl3Py9DDsIKJmhThHJLUXiPXpEqsKN5+G1IMvC A/LdKZmZ1+jTQxZo5D2t8acpVIjdPCArIToihVnJisgAx30U5SqTZlJevwlGA3jQrliQ QRbpnM/k7U4da0y2oyI4QyrSjWA9pBmIRtJj0t+5WUYpO0SMQ6gZrPy3gVEIYR0pNTSK aVDKZK267mrjbLbrMjHobgyVW5TaR54eFXJn9wgEUEuJPbbUCp6Ro51AZ5If2HGfwDDU y7sg== X-Forwarded-Encrypted: i=1; AJvYcCUuIw1Cu/H0GWgyyrGfjSm5xJIFP1lugUaLiMqQifM3Gbbt87/5MqCAoV3e9X1u7sYekrGgKkwLe5Toqnw=@vger.kernel.org X-Gm-Message-State: AOJu0YzLa3VXOaChMWkjzSeZVQBsPtTi13o233gXiEkM3Iee5PHyQCFr DgkW5qeNRL3Negn+lzuMVlHWPa57/vRH4PjUadowzYHwUmP1i/eeiawr6F+QNwOG35vgvspQs8+ JoIVaOeu3XsrcvZ+vxQZJZlNaj9JC5eGvDAYjNNbF5rMGnY9WVFiGqvG1UG2w2mb0xOQ= X-Gm-Gg: ATEYQzwIozmZxJziRcQRb6W8H0hh0IrFWzPBcBw6/K7yn5a5KOBc/09gGVAHMxdW13n acXlLJzWXMsXGOGtfk3ydZA3BnOPxPb5jPVwid5/3bdpQNz1xt10uqa+sncxkys7Bv7HZQpT3Nv llXAz5sGLxoWlJPXO3Mm6/MkJqmZ9Msx2YrC3K4nba25UUvsovI5a2XwAHJ8R1aWClHOIY7Oo19 1mGg8CcLTw7IJEbpgZP4i8CdkWuDTzfuYiyNgRBMNw19G0KUPKRo0Sxkh/4SVi99JvKmXScJM6a 4OgM2a48N470EpQTi38mzR2e8sL5RkVCrAcg1csfC7HJvbpVuvHk3UlAOSmLUNGcNItlGB6khvW cT08vYZg13Ra3rNzJ7241L8uTgguDcpt9UhflizJyREdNTyODzSw8KewC2DyRQc+2EhTfAbE+F8 ix68/F7mB4 X-Received: by 2002:a05:6300:49:b0:398:aaac:a08f with SMTP id adf61e73a8af0-398ecd55b7bmr2094467637.51.1773392587803; Fri, 13 Mar 2026 02:03:07 -0700 (PDT) X-Received: by 2002:a05:6300:49:b0:398:aaac:a08f with SMTP id adf61e73a8af0-398ecd55b7bmr2094412637.51.1773392586993; Fri, 13 Mar 2026 02:03:06 -0700 (PDT) Received: from jiegan-gv.ap.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c73ebb9ed44sm1269275a12.34.2026.03.13.02.03.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2026 02:03:06 -0700 (PDT) From: Jie Gan Date: Fri, 13 Mar 2026 17:02:09 +0800 Subject: [PATCH v15 6/7] coresight: ctcu: enable byte-cntr for TMC ETR devices 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: quoted-printable Message-Id: <20260313-enable-byte-cntr-for-ctcu-v15-6-1777f14ed319@oss.qualcomm.com> References: <20260313-enable-byte-cntr-for-ctcu-v15-0-1777f14ed319@oss.qualcomm.com> In-Reply-To: <20260313-enable-byte-cntr-for-ctcu-v15-0-1777f14ed319@oss.qualcomm.com> To: Suzuki K Poulose , Mike Leach , James Clark , Alexander Shishkin , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Tingwei Zhang , Bjorn Andersson , Konrad Dybcio Cc: coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, Jie Gan X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1773392553; l=28446; i=jie.gan@oss.qualcomm.com; s=20250909; h=from:subject:message-id; bh=XxaF0d4GsY8w76Qm6KBddVxedRFRq0jSH6fNohRSiiQ=; b=M1uftfVGCZOUu51wfkI5NZ3hdr6bgDkTp6H5hFi7seeJqdk5VUjG6MyDSTh5XZ+mwaRJMz8N1 WxF3quX2FdUCWwfppnIP/wm7gOJ+/rBtEH2XK4cv61ZzzcliewNAIDG X-Developer-Key: i=jie.gan@oss.qualcomm.com; a=ed25519; pk=3LxxUZRPCNkvPDlWOvXfJNqNO4SfGdy3eghMb8puHuk= X-Proofpoint-ORIG-GUID: Q0YkZN4pBQq5W0PhZBazOUVDm50XdcPH X-Proofpoint-GUID: Q0YkZN4pBQq5W0PhZBazOUVDm50XdcPH X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzEzMDA2OSBTYWx0ZWRfX6w7/pXaBnRut HHdJ6Uy0cL3XwD3nAn8SDry3v2mQRIwrLBgWhhUWyibkIkmrNMr8FbdaF1oP70umNkFAbzSIEpI m82HbFgVwuTEXg4POeFeux64Q5BWakZK/Ut5rx1ff4jHeMfgpIGRXyHN2421xD8UKpsRFeKN/rh ckkHQxksjgTM59XqIEvnwBJdBUYjJYtPwRXHC56B0/SWR8DvOo12nS/pwhBbSfHUBuK7KS/T0GU qtelW6d5zUUmJhHPehvl+8XwpJxSl0sG4xkvuMzTNFqOyZmKjfpFJxms7ugvNuQvRzg/LXPhH1d OxNcZo/YFsb5EPCBu711hgQp0jEHNBQRMpisRynpo8b+z47czOCYFRH6aOKoXE2m0fZmmGDWvVI d9/HzT19Cskzzhpf8+6mhOi5M3B5prP9vPNGi6PHoF5VUPnaahEyWsywk1JoshFgo3R2VtpjyKn PRZilvZ1gvYTkjCyRVw== X-Authority-Analysis: v=2.4 cv=ccHfb3DM c=1 sm=1 tr=0 ts=69b3d2cd cx=c_pps a=Oh5Dbbf/trHjhBongsHeRQ==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=6MhHx5wqrWBboxSnaDoA:9 a=QEXdDO2ut3YA:10 a=_Vgx9l1VpLgwpw_dHYaR:22 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-03-13_01,2026-03-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 bulkscore=0 malwarescore=0 suspectscore=0 clxscore=1015 priorityscore=1501 lowpriorityscore=0 spamscore=0 adultscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603130069 The byte-cntr function provided by the CTCU device is used to transfer data from the ETR buffer to the userspace. An interrupt is triggered if the data size exceeds the threshold set in the BYTECNTRVAL register. The interrupt handler counts the number of triggered interruptions and the read function will read the data from the synced ETR buffer. Switching the sysfs_buf when current buffer is full or the timeout is triggered and resets rrp and rwp registers after switched the buffer. The synced buffer will become available for reading after the switch. Byte-cntr workflow: start -> ctcu_enable(ctcu_byte_cntr_start) -> tmc_enable_etr_sink -> tmc_read_prepare_etr(jump to tmc_read_prepare_byte_cntr) -> tmc_etr_get_sysfs_trace(jump to tmc_byte_cntr_get_data) -> tmc_disable_etr_sink -> ctcu_disable(ctcu_byte_cntr_stop) -> tmc_read_unprepare_etr(jump to tmc_read_unprepare_byte_cntr) -> finish Signed-off-by: Jie Gan --- .../ABI/testing/sysfs-bus-coresight-devices-ctcu | 9 + drivers/hwtracing/coresight/Makefile | 2 +- .../hwtracing/coresight/coresight-ctcu-byte-cntr.c | 286 +++++++++++++++++= ++++ drivers/hwtracing/coresight/coresight-ctcu-core.c | 104 +++++++- drivers/hwtracing/coresight/coresight-ctcu.h | 79 +++++- drivers/hwtracing/coresight/coresight-tmc-core.c | 3 +- drivers/hwtracing/coresight/coresight-tmc-etr.c | 105 +++++++- drivers/hwtracing/coresight/coresight-tmc.h | 9 + 8 files changed, 572 insertions(+), 25 deletions(-) diff --git a/Documentation/ABI/testing/sysfs-bus-coresight-devices-ctcu b/D= ocumentation/ABI/testing/sysfs-bus-coresight-devices-ctcu new file mode 100644 index 000000000000..f17a6c0382c8 --- /dev/null +++ b/Documentation/ABI/testing/sysfs-bus-coresight-devices-ctcu @@ -0,0 +1,9 @@ +What: /sys/bus/coresight/devices//irq_enabled[0:1] +Date: March 2026 +KernelVersion: 7.1 +Contact: Tingwei Zhang ; Jinlong Ma= o ; Jie Gan +Description: + (RW) Configure the flag to enable interrupt to count data during CTCU en= ablement. + An interrupt is generated when the data size exceeds the value set in th= e IRQ register. + 0 : disable + 1 : enable diff --git a/drivers/hwtracing/coresight/Makefile b/drivers/hwtracing/cores= ight/Makefile index ab16d06783a5..821a1b06b20c 100644 --- a/drivers/hwtracing/coresight/Makefile +++ b/drivers/hwtracing/coresight/Makefile @@ -55,5 +55,5 @@ coresight-cti-y :=3D coresight-cti-core.o coresight-cti-p= latform.o \ obj-$(CONFIG_ULTRASOC_SMB) +=3D ultrasoc-smb.o obj-$(CONFIG_CORESIGHT_DUMMY) +=3D coresight-dummy.o obj-$(CONFIG_CORESIGHT_CTCU) +=3D coresight-ctcu.o -coresight-ctcu-y :=3D coresight-ctcu-core.o +coresight-ctcu-y :=3D coresight-ctcu-core.o coresight-ctcu-byte-cntr.o obj-$(CONFIG_CORESIGHT_KUNIT_TESTS) +=3D coresight-kunit-tests.o diff --git a/drivers/hwtracing/coresight/coresight-ctcu-byte-cntr.c b/drive= rs/hwtracing/coresight/coresight-ctcu-byte-cntr.c new file mode 100644 index 000000000000..56d73f91d47f --- /dev/null +++ b/drivers/hwtracing/coresight/coresight-ctcu-byte-cntr.c @@ -0,0 +1,286 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + */ + +#include +#include +#include +#include +#include +#include + +#include "coresight-ctcu.h" +#include "coresight-priv.h" +#include "coresight-tmc.h" + +static irqreturn_t byte_cntr_handler(int irq, void *data) +{ + struct ctcu_byte_cntr *byte_cntr_data =3D (struct ctcu_byte_cntr *)data; + + atomic_inc(&byte_cntr_data->irq_cnt); + wake_up(&byte_cntr_data->wq); + + return IRQ_HANDLED; +} + +static void ctcu_cfg_byte_cntr_reg(struct ctcu_drvdata *drvdata, u32 val, + u32 offset) +{ + /* A one value for IRQCTRL register represents 8 bytes */ + ctcu_program_register(drvdata, val / 8, offset); +} + +static struct ctcu_byte_cntr *ctcu_get_byte_cntr(struct coresight_device *= ctcu, + struct coresight_device *etr) +{ + struct ctcu_drvdata *drvdata =3D dev_get_drvdata(ctcu->dev.parent); + int port; + + port =3D coresight_get_in_port(etr, ctcu); + if (port < 0 || port > 1) + return NULL; + + return &drvdata->byte_cntr_data[port]; +} + +static bool ctcu_byte_cntr_switch_buffer(struct tmc_drvdata *etr_drvdata, + struct ctcu_byte_cntr *byte_cntr_data) +{ + struct etr_buf_node *nd, *next, *curr_node, *picked_node; + struct etr_buf *curr_buf =3D etr_drvdata->sysfs_buf; + bool found_free_buf =3D false; + + if (WARN_ON(!etr_drvdata || !byte_cntr_data)) + return found_free_buf; + + /* Stop the ETR before initiating the switch */ + if (coresight_get_mode(etr_drvdata->csdev) !=3D CS_MODE_DISABLED) + tmc_etr_enable_disable_hw(etr_drvdata, false); + + list_for_each_entry_safe(nd, next, &etr_drvdata->etr_buf_list, link) { + /* curr_buf is free for next round */ + if (nd->sysfs_buf =3D=3D curr_buf) { + nd->is_free =3D true; + curr_node =3D nd; + } else if (!found_free_buf && nd->is_free) { + picked_node =3D nd; + found_free_buf =3D true; + } + } + + if (found_free_buf) { + curr_node->pos =3D 0; + curr_node->reading =3D true; + byte_cntr_data->buf_node =3D curr_node; + etr_drvdata->sysfs_buf =3D picked_node->sysfs_buf; + etr_drvdata->etr_buf =3D picked_node->sysfs_buf; + picked_node->is_free =3D false; + /* Reset irq_cnt for next etr_buf */ + atomic_set(&byte_cntr_data->irq_cnt, 0); + /* Restart the ETR once a free buffer is available */ + if (coresight_get_mode(etr_drvdata->csdev) !=3D CS_MODE_DISABLED) + tmc_etr_enable_disable_hw(etr_drvdata, true); + } + + return found_free_buf; +} + +/* + * ctcu_byte_cntr_get_data() - reads data from the deactivated and filled = buffer. + * The byte-cntr reading work reads data from the deactivated and filled b= uffer. + * The read operation waits for a buffer to become available, either fille= d or + * upon timeout, and then reads trace data from the synced buffer. + */ +static ssize_t tmc_byte_cntr_get_data(struct tmc_drvdata *etr_drvdata, lof= f_t pos, + size_t len, char **bufpp) +{ + struct coresight_device *ctcu =3D tmc_etr_get_ctcu_device(etr_drvdata); + struct device *dev =3D &etr_drvdata->csdev->dev; + struct ctcu_byte_cntr *byte_cntr_data; + struct etr_buf *sysfs_buf; + atomic_t *irq_cnt; + ssize_t actual; + int ret; + + byte_cntr_data =3D ctcu_get_byte_cntr(ctcu, etr_drvdata->csdev); + if (!byte_cntr_data || !byte_cntr_data->irq_enabled) + return -EINVAL; + + irq_cnt =3D &byte_cntr_data->irq_cnt; + +wait_buffer: + if (!byte_cntr_data->buf_node) { + ret =3D wait_event_interruptible_timeout(byte_cntr_data->wq, + (atomic_read(irq_cnt) >=3D MAX_IRQ_CNT - 1) || + !byte_cntr_data->enable, + BYTE_CNTR_TIMEOUT); + if (ret < 0) + return ret; + /* + * The current etr_buf is almost full or timeout is triggered, + * so switch the buffer and mark the switched buffer as reading. + */ + if (byte_cntr_data->enable) { + if (!ctcu_byte_cntr_switch_buffer(etr_drvdata, byte_cntr_data)) { + dev_err(dev, "Switch buffer failed for the byte-cntr\n"); + return -EINVAL; + } + } else + /* Exit byte-cntr reading */ + return 0; + } + + /* Check the status of current etr_buf*/ + if (atomic_read(irq_cnt) >=3D MAX_IRQ_CNT) + dev_warn(dev, "Data overwrite happened\n"); + + pos =3D byte_cntr_data->buf_node->pos; + sysfs_buf =3D byte_cntr_data->buf_node->sysfs_buf; + actual =3D tmc_etr_read_sysfs_buf(sysfs_buf, pos, len, bufpp); + if (actual <=3D 0) { + /* Reset buf_node upon reading is finished or failed */ + byte_cntr_data->buf_node->reading =3D false; + byte_cntr_data->buf_node =3D NULL; + + /* + * Nothing in the buffer, waiting for the next buffer + * to be filled. + */ + if (actual =3D=3D 0) + goto wait_buffer; + } + + return actual; +} + +static int tmc_read_prepare_byte_cntr(struct tmc_drvdata *etr_drvdata) +{ + struct coresight_device *ctcu =3D tmc_etr_get_ctcu_device(etr_drvdata); + struct ctcu_byte_cntr *byte_cntr_data; + int ret =3D 0; + + /* byte-cntr is operating with SYSFS mode being enabled only */ + if (coresight_get_mode(etr_drvdata->csdev) !=3D CS_MODE_SYSFS) + return -EINVAL; + + byte_cntr_data =3D ctcu_get_byte_cntr(ctcu, etr_drvdata->csdev); + if (!byte_cntr_data || !byte_cntr_data->irq_enabled) + return -EINVAL; + + if (byte_cntr_data->reading) + return -EBUSY; + + /* Setup an available etr_buf_list for byte-cntr */ + ret =3D tmc_create_etr_buf_list(etr_drvdata, 2); + if (ret) + goto out; + + guard(raw_spinlock_irqsave)(&byte_cntr_data->spin_lock); + atomic_set(&byte_cntr_data->irq_cnt, 0); + /* + * Configure the byte-cntr register to enable IRQ. The configured + * size is 5% of the buffer_size. + */ + ctcu_cfg_byte_cntr_reg(byte_cntr_data->ctcu_drvdata, + etr_drvdata->size / MAX_IRQ_CNT, + byte_cntr_data->irq_ctrl_offset); + enable_irq_wake(byte_cntr_data->irq); + byte_cntr_data->buf_node =3D NULL; + byte_cntr_data->reading =3D true; + +out: + return ret; +} + +static int tmc_read_unprepare_byte_cntr(struct tmc_drvdata *etr_drvdata) +{ + struct coresight_device *ctcu =3D tmc_etr_get_ctcu_device(etr_drvdata); + struct ctcu_byte_cntr *byte_cntr_data; + + byte_cntr_data =3D ctcu_get_byte_cntr(ctcu, etr_drvdata->csdev); + if (!byte_cntr_data || !byte_cntr_data->irq_enabled) + return -EINVAL; + + tmc_clean_etr_buf_list(etr_drvdata); + guard(raw_spinlock_irqsave)(&byte_cntr_data->spin_lock); + /* Configure the byte-cntr register to disable IRQ */ + ctcu_cfg_byte_cntr_reg(byte_cntr_data->ctcu_drvdata, 0, + byte_cntr_data->irq_ctrl_offset); + disable_irq_wake(byte_cntr_data->irq); + byte_cntr_data->buf_node =3D NULL; + byte_cntr_data->reading =3D false; + + return 0; +} + +const struct tmc_sysfs_ops byte_cntr_sysfs_ops =3D { + .read_prepare =3D tmc_read_prepare_byte_cntr, + .read_unprepare =3D tmc_read_unprepare_byte_cntr, + .get_trace_data =3D tmc_byte_cntr_get_data, +}; + +/* Start the byte-cntr function when the path is enabled. */ +void ctcu_byte_cntr_start(struct coresight_device *csdev, struct coresight= _path *path) +{ + struct coresight_device *sink =3D coresight_get_sink(path); + struct ctcu_byte_cntr *byte_cntr_data; + + byte_cntr_data =3D ctcu_get_byte_cntr(csdev, sink); + if (!byte_cntr_data) + return; + + /* Don't start byte-cntr function when irq_enabled is not set. */ + if (!byte_cntr_data->irq_enabled || byte_cntr_data->enable) + return; + + guard(raw_spinlock_irqsave)(&byte_cntr_data->spin_lock); + byte_cntr_data->enable =3D true; +} + +/* Stop the byte-cntr function when the path is disabled. */ +void ctcu_byte_cntr_stop(struct coresight_device *csdev, struct coresight_= path *path) +{ + struct coresight_device *sink =3D coresight_get_sink(path); + struct ctcu_byte_cntr *byte_cntr_data; + + if (coresight_get_mode(sink) =3D=3D CS_MODE_SYSFS) + return; + + byte_cntr_data =3D ctcu_get_byte_cntr(csdev, sink); + if (!byte_cntr_data) + return; + + guard(raw_spinlock_irqsave)(&byte_cntr_data->spin_lock); + byte_cntr_data->enable =3D false; +} + +void ctcu_byte_cntr_init(struct device *dev, struct ctcu_drvdata *drvdata,= int etr_num) +{ + struct ctcu_byte_cntr *byte_cntr_data; + struct device_node *nd =3D dev->of_node; + int irq_num, ret, i; + + tmc_etr_set_byte_cntr_sysfs_ops(&byte_cntr_sysfs_ops); + for (i =3D 0; i < etr_num; i++) { + byte_cntr_data =3D &drvdata->byte_cntr_data[i]; + irq_num =3D of_irq_get(nd, i); + if (irq_num < 0) { + dev_err(dev, "Failed to get IRQ from DT for port%d\n", i); + continue; + } + + ret =3D devm_request_irq(dev, irq_num, byte_cntr_handler, + IRQF_TRIGGER_RISING | IRQF_SHARED, + dev_name(dev), byte_cntr_data); + if (ret) { + dev_err(dev, "Failed to register IRQ for port%d\n", i); + continue; + } + + byte_cntr_data->irq =3D irq_num; + byte_cntr_data->ctcu_drvdata =3D drvdata; + init_waitqueue_head(&byte_cntr_data->wq); + raw_spin_lock_init(&byte_cntr_data->spin_lock); + } +} diff --git a/drivers/hwtracing/coresight/coresight-ctcu-core.c b/drivers/hw= tracing/coresight/coresight-ctcu-core.c index e8720026c9e3..56590f22ad79 100644 --- a/drivers/hwtracing/coresight/coresight-ctcu-core.c +++ b/drivers/hwtracing/coresight/coresight-ctcu-core.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only /* - * Copyright (c) 2024-2025 Qualcomm Innovation Center, Inc. All rights res= erved. + * Copyright (c) 2024-2026 Qualcomm Innovation Center, Inc. All rights res= erved. + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. */ =20 #include @@ -18,6 +19,7 @@ =20 #include "coresight-ctcu.h" #include "coresight-priv.h" +#include "coresight-tmc.h" =20 #define ctcu_writel(drvdata, val, offset) __raw_writel((val), drvdata->bas= e + offset) #define ctcu_readl(drvdata, offset) __raw_readl(drvdata->base + offset) @@ -43,17 +45,21 @@ =20 #define CTCU_ATID_REG_BIT(traceid) (traceid % 32) #define CTCU_ATID_REG_SIZE 0x10 +#define CTCU_ETR0_IRQCTRL 0x6c +#define CTCU_ETR1_IRQCTRL 0x70 #define CTCU_ETR0_ATID0 0xf8 #define CTCU_ETR1_ATID0 0x108 =20 static const struct ctcu_etr_config sa8775p_etr_cfgs[] =3D { { - .atid_offset =3D CTCU_ETR0_ATID0, - .port_num =3D 0, + .atid_offset =3D CTCU_ETR0_ATID0, + .irq_ctrl_offset =3D CTCU_ETR0_IRQCTRL, + .port_num =3D 0, }, { - .atid_offset =3D CTCU_ETR1_ATID0, - .port_num =3D 1, + .atid_offset =3D CTCU_ETR1_ATID0, + .irq_ctrl_offset =3D CTCU_ETR1_IRQCTRL, + .port_num =3D 1, }, }; =20 @@ -62,6 +68,85 @@ static const struct ctcu_config sa8775p_cfgs =3D { .num_etr_config =3D ARRAY_SIZE(sa8775p_etr_cfgs), }; =20 +void ctcu_program_register(struct ctcu_drvdata *drvdata, u32 val, u32 offs= et) +{ + CS_UNLOCK(drvdata->base); + ctcu_writel(drvdata, val, offset); + CS_LOCK(drvdata->base); +} + +static ssize_t irq_enabled_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct ctcu_byte_cntr_irq_attribute *irq_attr =3D + container_of(attr, struct ctcu_byte_cntr_irq_attribute, attr); + struct ctcu_drvdata *drvdata =3D dev_get_drvdata(dev->parent); + u8 port =3D irq_attr->port; + + if (!drvdata->byte_cntr_data[port].irq_ctrl_offset) + return -EINVAL; + + return sysfs_emit(buf, "%u\n", + (unsigned int)drvdata->byte_cntr_data[port].irq_enabled); +} + +static ssize_t irq_enabled_store(struct device *dev, + struct device_attribute *attr, + const char *buf, + size_t size) +{ + struct ctcu_byte_cntr_irq_attribute *irq_attr =3D + container_of(attr, struct ctcu_byte_cntr_irq_attribute, attr); + struct ctcu_drvdata *drvdata =3D dev_get_drvdata(dev->parent); + u8 port =3D irq_attr->port; + unsigned long val; + + if (kstrtoul(buf, 0, &val)) + return -EINVAL; + + guard(raw_spinlock_irqsave)(&drvdata->spin_lock); + if (drvdata->byte_cntr_data[port].reading) + return -EBUSY; + else if (drvdata->byte_cntr_data[port].irq_ctrl_offset) + drvdata->byte_cntr_data[port].irq_enabled =3D !!val; + + return size; +} + +static umode_t irq_enabled_is_visible(struct kobject *kobj, + struct attribute *attr, int n) +{ + struct device_attribute *dev_attr =3D + container_of(attr, struct device_attribute, attr); + struct ctcu_byte_cntr_irq_attribute *irq_attr =3D + container_of(dev_attr, struct ctcu_byte_cntr_irq_attribute, attr); + struct device *dev =3D kobj_to_dev(kobj); + struct ctcu_drvdata *drvdata =3D dev_get_drvdata(dev->parent); + u8 port =3D irq_attr->port; + + if (drvdata && drvdata->byte_cntr_data[port].irq_ctrl_offset) + return attr->mode; + + return 0; +} + +static struct attribute *ctcu_attrs[] =3D { + ctcu_byte_cntr_irq_rw(0), + ctcu_byte_cntr_irq_rw(1), + NULL, +}; + +static struct attribute_group ctcu_attr_grp =3D { + .attrs =3D ctcu_attrs, + .is_visible =3D irq_enabled_is_visible, +}; + +static const struct attribute_group *ctcu_attr_grps[] =3D { + &ctcu_attr_grp, + NULL, +}; + static void ctcu_program_atid_register(struct ctcu_drvdata *drvdata, u32 r= eg_offset, u8 bit, bool enable) { @@ -140,11 +225,15 @@ static int ctcu_set_etr_traceid(struct coresight_devi= ce *csdev, struct coresight static int ctcu_enable(struct coresight_device *csdev, enum cs_mode mode, struct coresight_path *path) { + ctcu_byte_cntr_start(csdev, path); + return ctcu_set_etr_traceid(csdev, path, true); } =20 static int ctcu_disable(struct coresight_device *csdev, struct coresight_p= ath *path) { + ctcu_byte_cntr_stop(csdev, path); + return ctcu_set_etr_traceid(csdev, path, false); } =20 @@ -195,7 +284,10 @@ static int ctcu_probe(struct platform_device *pdev) for (i =3D 0; i < cfgs->num_etr_config; i++) { etr_cfg =3D &cfgs->etr_cfgs[i]; drvdata->atid_offset[i] =3D etr_cfg->atid_offset; + drvdata->byte_cntr_data[i].irq_ctrl_offset =3D + etr_cfg->irq_ctrl_offset; } + ctcu_byte_cntr_init(dev, drvdata, cfgs->num_etr_config); } } =20 @@ -209,6 +301,7 @@ static int ctcu_probe(struct platform_device *pdev) desc.dev =3D dev; desc.ops =3D &ctcu_ops; desc.access =3D CSDEV_ACCESS_IOMEM(base); + desc.groups =3D ctcu_attr_grps; raw_spin_lock_init(&drvdata->spin_lock); =20 drvdata->csdev =3D coresight_register(&desc); @@ -248,6 +341,7 @@ static void ctcu_platform_remove(struct platform_device= *pdev) if (WARN_ON(!drvdata)) return; =20 + tmc_etr_reset_byte_cntr_sysfs_ops(); ctcu_remove(pdev); pm_runtime_disable(&pdev->dev); } diff --git a/drivers/hwtracing/coresight/coresight-ctcu.h b/drivers/hwtraci= ng/coresight/coresight-ctcu.h index e9594c38dd91..a2ae0a0d91d0 100644 --- a/drivers/hwtracing/coresight/coresight-ctcu.h +++ b/drivers/hwtracing/coresight/coresight-ctcu.h @@ -1,23 +1,31 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* - * Copyright (c) 2024-2025 Qualcomm Innovation Center, Inc. All rights res= erved. + * Copyright (c) 2024-2026 Qualcomm Innovation Center, Inc. All rights res= erved. + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. */ =20 #ifndef _CORESIGHT_CTCU_H #define _CORESIGHT_CTCU_H + +#include #include "coresight-trace-id.h" =20 /* Maximum number of supported ETR devices for a single CTCU. */ #define ETR_MAX_NUM 2 =20 +#define BYTE_CNTR_TIMEOUT (3 * HZ) +#define MAX_IRQ_CNT 20 + /** * struct ctcu_etr_config * @atid_offset: offset to the ATID0 Register. - * @port_num: in-port number of CTCU device that connected to ETR. + * @port_num: in-port number of the CTCU device that connected to ETR. + * @irq_ctrl_offset: offset to the BYTECNTRVAL register. */ struct ctcu_etr_config { const u32 atid_offset; const u32 port_num; + const u32 irq_ctrl_offset; }; =20 struct ctcu_config { @@ -25,15 +33,68 @@ struct ctcu_config { int num_etr_config; }; =20 -struct ctcu_drvdata { - void __iomem *base; - struct clk *apb_clk; - struct device *dev; - struct coresight_device *csdev; +/** + * struct ctcu_byte_cntr + * @enable: indicates that byte_cntr function is enabled or not. + * @irq_enabled: indicates that the interruption is enabled. + * @reading: indicates that byte_cntr is reading. + * @irq: allocated number of the IRQ. + * @irq_cnt: IRQ count number of the triggered interruptions. + * @wq: waitqueue for reading data from ETR buffer. + * @spin_lock: spinlock of the byte_cntr_data. + * @irq_ctrl_offset: offset to the BYTECNTVAL Register. + * @ctcu_drvdata: drvdata of the CTCU device. + * @buf_node: etr_buf_node for reading. + */ +struct ctcu_byte_cntr { + bool enable; + bool irq_enabled; + bool reading; + int irq; + atomic_t irq_cnt; + wait_queue_head_t wq; raw_spinlock_t spin_lock; - u32 atid_offset[ETR_MAX_NUM]; + u32 irq_ctrl_offset; + struct ctcu_drvdata *ctcu_drvdata; + struct etr_buf_node *buf_node; +}; + +struct ctcu_drvdata { + void __iomem *base; + struct clk *apb_clk; + struct device *dev; + struct coresight_device *csdev; + struct ctcu_byte_cntr byte_cntr_data[ETR_MAX_NUM]; + raw_spinlock_t spin_lock; + u32 atid_offset[ETR_MAX_NUM]; /* refcnt for each traceid of each sink */ - u8 traceid_refcnt[ETR_MAX_NUM][CORESIGHT_TRACE_ID_RES_TOP]; + u8 traceid_refcnt[ETR_MAX_NUM][CORESIGHT_TRACE_ID_RES_TOP]; }; =20 +/** + * struct ctcu_byte_cntr_irq_attribute + * @attr: The device attribute. + * @port: port number. + */ +struct ctcu_byte_cntr_irq_attribute { + struct device_attribute attr; + u8 port; +}; + +#define ctcu_byte_cntr_irq_rw(port) \ + (&((struct ctcu_byte_cntr_irq_attribute[]) { \ + { \ + __ATTR(irq_enabled##port, 0644, irq_enabled_show, \ + irq_enabled_store), \ + port, \ + } \ + })[0].attr.attr) + +void ctcu_program_register(struct ctcu_drvdata *drvdata, u32 val, u32 offs= et); + +/* Byte-cntr functions */ +void ctcu_byte_cntr_start(struct coresight_device *csdev, struct coresight= _path *path); +void ctcu_byte_cntr_stop(struct coresight_device *csdev, struct coresight_= path *path); +void ctcu_byte_cntr_init(struct device *dev, struct ctcu_drvdata *drvdata,= int port_num); + #endif diff --git a/drivers/hwtracing/coresight/coresight-tmc-core.c b/drivers/hwt= racing/coresight/coresight-tmc-core.c index 110eedde077f..9f4fd86e8c32 100644 --- a/drivers/hwtracing/coresight/coresight-tmc-core.c +++ b/drivers/hwtracing/coresight/coresight-tmc-core.c @@ -293,7 +293,8 @@ static ssize_t tmc_read(struct file *file, char __user = *data, size_t len, return -EFAULT; } =20 - *ppos +=3D actual; + if (!tmc_etr_update_buf_node_pos(drvdata, actual)) + *ppos +=3D actual; dev_dbg(&drvdata->csdev->dev, "%zu bytes copied\n", actual); =20 return actual; diff --git a/drivers/hwtracing/coresight/coresight-tmc-etr.c b/drivers/hwtr= acing/coresight/coresight-tmc-etr.c index eebfe45b82b9..8b8bb43197b6 100644 --- a/drivers/hwtracing/coresight/coresight-tmc-etr.c +++ b/drivers/hwtracing/coresight/coresight-tmc-etr.c @@ -1168,6 +1168,8 @@ static int tmc_etr_enable_hw(struct tmc_drvdata *drvd= ata, return rc; } =20 +static const struct tmc_sysfs_ops *byte_cntr_sysfs_ops; + /* * Return the available trace data in the buffer (starts at etr_buf->offse= t, * limited by etr_buf->len) from @pos, with a maximum limit of @len, @@ -1178,23 +1180,39 @@ static int tmc_etr_enable_hw(struct tmc_drvdata *dr= vdata, * We are protected here by drvdata->reading !=3D 0, which ensures the * sysfs_buf stays alive. */ -ssize_t tmc_etr_get_sysfs_trace(struct tmc_drvdata *drvdata, - loff_t pos, size_t len, char **bufpp) +ssize_t tmc_etr_read_sysfs_buf(struct etr_buf *sysfs_buf, loff_t pos, + size_t len, char **bufpp) { s64 offset; ssize_t actual =3D len; - struct etr_buf *etr_buf =3D drvdata->sysfs_buf; =20 - if (pos + actual > etr_buf->len) - actual =3D etr_buf->len - pos; + if (pos + actual > sysfs_buf->len) + actual =3D sysfs_buf->len - pos; if (actual <=3D 0) return actual; =20 /* Compute the offset from which we read the data */ - offset =3D etr_buf->offset + pos; - if (offset >=3D etr_buf->size) - offset -=3D etr_buf->size; - return tmc_etr_buf_get_data(etr_buf, offset, actual, bufpp); + offset =3D sysfs_buf->offset + pos; + if (offset >=3D sysfs_buf->size) + offset -=3D sysfs_buf->size; + return tmc_etr_buf_get_data(sysfs_buf, offset, actual, bufpp); +} +EXPORT_SYMBOL_GPL(tmc_etr_read_sysfs_buf); + +ssize_t tmc_etr_get_sysfs_trace(struct tmc_drvdata *drvdata, + loff_t pos, size_t len, char **bufpp) +{ + ssize_t ret; + + if (byte_cntr_sysfs_ops) { + ret =3D byte_cntr_sysfs_ops->get_trace_data(drvdata, pos, + len, bufpp); + /* Return the filled buffer */ + if (ret > 0) + return ret; + } + + return tmc_etr_read_sysfs_buf(drvdata->sysfs_buf, pos, len, bufpp); } =20 static struct etr_buf * @@ -1248,6 +1266,33 @@ static void __tmc_etr_disable_hw(struct tmc_drvdata = *drvdata) =20 } =20 +static void tmc_etr_reset_sysfs_buf(struct tmc_drvdata *drvdata) +{ + u32 sts; + + CS_UNLOCK(drvdata->base); + tmc_write_rrp(drvdata, drvdata->sysfs_buf->hwaddr); + tmc_write_rwp(drvdata, drvdata->sysfs_buf->hwaddr); + sts =3D readl_relaxed(drvdata->base + TMC_STS) & ~TMC_STS_FULL; + writel_relaxed(sts, drvdata->base + TMC_STS); + CS_LOCK(drvdata->base); +} + +/** + * tmc_etr_enable_disable_hw - enable/disable the ETR hw. + * @drvdata: drvdata of the TMC device. + * @enable: indicates enable/disable. + */ +void tmc_etr_enable_disable_hw(struct tmc_drvdata *drvdata, bool enable) +{ + if (enable) { + tmc_etr_reset_sysfs_buf(drvdata); + __tmc_etr_enable_hw(drvdata); + } else + __tmc_etr_disable_hw(drvdata); +} +EXPORT_SYMBOL_GPL(tmc_etr_enable_disable_hw); + void tmc_etr_disable_hw(struct tmc_drvdata *drvdata) { __tmc_etr_disable_hw(drvdata); @@ -2050,6 +2095,35 @@ int tmc_create_etr_buf_list(struct tmc_drvdata *drvd= ata, int num_nodes) } EXPORT_SYMBOL_GPL(tmc_create_etr_buf_list); =20 +void tmc_etr_set_byte_cntr_sysfs_ops(const struct tmc_sysfs_ops *sysfs_ops) +{ + byte_cntr_sysfs_ops =3D sysfs_ops; +} +EXPORT_SYMBOL_GPL(tmc_etr_set_byte_cntr_sysfs_ops); + +void tmc_etr_reset_byte_cntr_sysfs_ops(void) +{ + byte_cntr_sysfs_ops =3D NULL; +} +EXPORT_SYMBOL_GPL(tmc_etr_reset_byte_cntr_sysfs_ops); + +bool tmc_etr_update_buf_node_pos(struct tmc_drvdata *drvdata, ssize_t size) +{ + struct etr_buf_node *nd, *next; + + if (drvdata->config_type !=3D TMC_CONFIG_TYPE_ETR) + return false; + + list_for_each_entry_safe(nd, next, &drvdata->etr_buf_list, link) { + if (nd && nd->reading) { + nd->pos +=3D size; + return true; + } + } + + return false; +} + int tmc_read_prepare_etr(struct tmc_drvdata *drvdata) { int ret =3D 0; @@ -2060,6 +2134,14 @@ int tmc_read_prepare_etr(struct tmc_drvdata *drvdata) return -EINVAL; =20 raw_spin_lock_irqsave(&drvdata->spinlock, flags); + if (byte_cntr_sysfs_ops) { + ret =3D byte_cntr_sysfs_ops->read_prepare(drvdata); + if (!ret || ret =3D=3D -EBUSY) + goto out; + + ret =3D 0; + } + if (drvdata->reading) { ret =3D -EBUSY; goto out; @@ -2097,6 +2179,10 @@ int tmc_read_unprepare_etr(struct tmc_drvdata *drvda= ta) =20 raw_spin_lock_irqsave(&drvdata->spinlock, flags); =20 + if (byte_cntr_sysfs_ops) + if (!byte_cntr_sysfs_ops->read_unprepare(drvdata)) + goto out; + /* RE-enable the TMC if need be */ if (coresight_get_mode(drvdata->csdev) =3D=3D CS_MODE_SYSFS) { /* @@ -2115,6 +2201,7 @@ int tmc_read_unprepare_etr(struct tmc_drvdata *drvdat= a) } =20 drvdata->reading =3D false; +out: raw_spin_unlock_irqrestore(&drvdata->spinlock, flags); =20 /* Free allocated memory out side of the spinlock */ diff --git a/drivers/hwtracing/coresight/coresight-tmc.h b/drivers/hwtracin= g/coresight/coresight-tmc.h index 00a0b3597348..eb8b34b3741c 100644 --- a/drivers/hwtracing/coresight/coresight-tmc.h +++ b/drivers/hwtracing/coresight/coresight-tmc.h @@ -211,12 +211,15 @@ struct tmc_resrv_buf { /** * @sysfs_buf: Allocated sysfs_buf. * @is_free: Indicates whether the buffer is free to choose. + * @reading: Indicates byte_cntr is reading the buffer attached to + * the node. * @pos: Position of the buffer. * @link: list_head of the node. */ struct etr_buf_node { struct etr_buf *sysfs_buf; bool is_free; + bool reading; loff_t pos; struct list_head link; }; @@ -480,5 +483,11 @@ struct etr_buf *tmc_etr_get_buffer(struct coresight_de= vice *csdev, extern const struct attribute_group coresight_etr_group; void tmc_clean_etr_buf_list(struct tmc_drvdata *drvdata); int tmc_create_etr_buf_list(struct tmc_drvdata *drvdata, int num_nodes); +void tmc_etr_set_byte_cntr_sysfs_ops(const struct tmc_sysfs_ops *sysfs_ops= ); +void tmc_etr_reset_byte_cntr_sysfs_ops(void); +void tmc_etr_enable_disable_hw(struct tmc_drvdata *drvdata, bool enable); +bool tmc_etr_update_buf_node_pos(struct tmc_drvdata *drvdata, ssize_t size= ); +ssize_t tmc_etr_read_sysfs_buf(struct etr_buf *sysfs_buf, loff_t pos, + size_t len, char **bufpp); =20 #endif --=20 2.34.1 From nobody Tue Apr 7 13:09:56 2026 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 CC55A388E78 for ; Fri, 13 Mar 2026 09:03:13 +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=1773392595; cv=none; b=gme5UiqXxTFszEWVFXcz715DxrZLH0qEzzP6lmyROXvwGPsG4wzY/AH1ax+oc9WgouIChS937sNA66N7+LBVtU/F0WFnw9dVp3m8vlYr61wSUoEF1/0nfj7D9IRGsXJESHQK+8PxmPSGyyHcVbs+wto4TorTRQGWw1vUNjdEMzQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773392595; c=relaxed/simple; bh=0MADiRxGeDkPQDc+D4cOyR9YpPfqVXFTQN8hJDo+rxc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FtGGS0EzTqxmwyjZAeaHxEJap6mE3+IKCQChiOcRjsGHU8h5GaNWLD1fNYKh467smxEGBzxr6/z5pw20IfW0r9wCIN/q3gWgokwUWADfgRlz+HjavuYJZqxKhkF2vU8882tzmuV7cSNLKM5sw5v8eQo4NxGlb3ILo7G9TzOuiIo= 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=NQJ0Oq2b; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=bJ/WuoaD; 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="NQJ0Oq2b"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="bJ/WuoaD" Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62D5taRL4140701 for ; Fri, 13 Mar 2026 09:03:13 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= Q+6sbBvItLVDaaK2nVoqlOqVJ4lF02bwo0WaOVku2Og=; b=NQJ0Oq2bkwRyQVLJ BR1oHmMsDFtWsex7Ume+LsDBbjvLk3yfXFCOP/VwtGecbTEF4KBZMhhH3JUTPqeH ESqBBfG5A2XRGNczBEK1R3cXtV7si+QGr4qMeY5pc1JGXOH/ow5PjKDC/sUNT12Y Kpv73SjimpWogy6DSkQX7Y2qhJrrO2e1GqTalcDsuThr+3T7CiyY+nhZstG+LX/f NwczdH+K45T5zlrztpghLcI3DqB/LTT6CV/99DO82vpgFS0lOBshZsZW8im1y1i8 aK7Hm39aCk2llXt3z5YrV+r6JMmv/j9Y4KyvPMRfqTJTWYtdKaR1e+nbEJE7FOMl McUiuQ== Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cvbn28w49-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 13 Mar 2026 09:03:13 +0000 (GMT) Received: by mail-pf1-f199.google.com with SMTP id d2e1a72fcca58-829b7db4babso956922b3a.0 for ; Fri, 13 Mar 2026 02:03:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773392592; x=1773997392; 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=Q+6sbBvItLVDaaK2nVoqlOqVJ4lF02bwo0WaOVku2Og=; b=bJ/WuoaDX/ABLDBXQf4Pk+Ct2TQs/A0l38cmZ9G2pv38AqDbpWhfJjIp+WzTZXWbDU okFMLfHn/2nA6B6YW3piRV++6MF3M88BB/zA3ppl7sQS7eJUrXM6AZQ1svkbGtp64IC3 CnTgy3xKcgNhaM7PpgUOja1sHReJYrs63jdNQxKfCbpgX4gTFfMeKWhWIyd1X346jDau m62gEwUXdPPEtx5hozIQ7ccSWR4ARAjfIiLQZWbhOMV/ykKud0StHao6s1ymw3ctGH0X cA07uKbPTawZ4KfPL6RhcOZ6Xi+ecuOJ0jDZyucuYrWvA/DZnoZtIl0U8yTlk8NjeW5t NcRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773392592; x=1773997392; 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=Q+6sbBvItLVDaaK2nVoqlOqVJ4lF02bwo0WaOVku2Og=; b=fUDQ4otj8nEJEaqek+u0Q2Mvxl0iVhBfcrzdurH74zlbWW5GqIN0AVDvNSYfgssPfc +JOMisp28y8qY1IpJsspczcLxpEdEcokSWVWUxZReFsWv4PhhNFgxoXB9Z+6zjUN//Ns GG+6hgWWwBYqK2Y02oHze8KhBG66RzAZ3QuBDkNoD3OctJeURNjeQzU2/Dxsxhlror8g wmbnRDmsCVXpP26bHPIWFXP7DXenNZQcKu7wOcZmn8HR42XkoFv581tuR5J/ZwBFXdDb FjSP2SUmS7ZESfUwZflFTZ5v4tmAfzDcWU2Y32912q/n003DkFs4Womo2u+NkypXkz6r 81/A== X-Forwarded-Encrypted: i=1; AJvYcCUj9BlVUw2pC+ZZhSvpsWj9WP2sHj3Z1h64ZudkrxrAJWIb3MQkK7mxqqS9vs0+KEcDQKYeQiY5ySK64PQ=@vger.kernel.org X-Gm-Message-State: AOJu0YwsTuM6HELspPv1g5Y0pv9nN5iC5VNTJ1FPl3Ar5V3DRJ4MsP8V quBjzxItsV7dsPvhmugs2OgsrCmfndDsWQ8NimIbcrA5ANx7hz7rBGlxJo6cTelw5zuVEkiSyh6 MZPwbgdNNlWm9ezAsldd5l+ufxsYPm+8rvemj4V5MCrQKvy0FCzBbGVCjgkqyBgBk2QI= X-Gm-Gg: ATEYQzyRsx/9fnfe9hEZhT8QlMP+m1GK+qxLCLCI9aaZznTBZ9uLtjpHdqLBPFu/N+Z nU5rHrIb0VM5JDuFVYwZjIeE4qJloKzZBUkngM1VMhi9NC+sOR8lzoWMmypRFIRAfVIW8S/X9gu b+cjaanSBHDeeQg5YEOgzepH6OYgZioBnTvtM7yKObMe6brBooot7BttO0LlMAH0KNuBEXRPw2F 8u7ENRbsIB24GlJ2KD/FFP+87zE1kwZ7vd4ekwM0A+NDOTet8hwfEhkba+iV/OG51nDnxOEf+Ot 1MLN6OQxb7ih4dg4a9NZxLvSl8RwjttJGsAoegcosXMS2ADUGRKOGzHdU5ZG9Hw+zvQtDkZLzsp uwWsFjS5qd3NqWq2YrK+cFBYzR8YqoYUA5EUx3YMVelG9VoBIwKg6KQhFLCNrMn09TaDeqNWTCE Nf5pwuTPHm X-Received: by 2002:a05:6a21:687:b0:398:aaac:a079 with SMTP id adf61e73a8af0-398ecd38582mr2136354637.45.1773392592347; Fri, 13 Mar 2026 02:03:12 -0700 (PDT) X-Received: by 2002:a05:6a21:687:b0:398:aaac:a079 with SMTP id adf61e73a8af0-398ecd38582mr2136304637.45.1773392591858; Fri, 13 Mar 2026 02:03:11 -0700 (PDT) Received: from jiegan-gv.ap.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c73ebb9ed44sm1269275a12.34.2026.03.13.02.03.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2026 02:03:11 -0700 (PDT) From: Jie Gan Date: Fri, 13 Mar 2026 17:02:10 +0800 Subject: [PATCH v15 7/7] arm64: dts: qcom: lemans: add interrupts to CTCU device 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: quoted-printable Message-Id: <20260313-enable-byte-cntr-for-ctcu-v15-7-1777f14ed319@oss.qualcomm.com> References: <20260313-enable-byte-cntr-for-ctcu-v15-0-1777f14ed319@oss.qualcomm.com> In-Reply-To: <20260313-enable-byte-cntr-for-ctcu-v15-0-1777f14ed319@oss.qualcomm.com> To: Suzuki K Poulose , Mike Leach , James Clark , Alexander Shishkin , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Tingwei Zhang , Bjorn Andersson , Konrad Dybcio Cc: coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, Jie Gan , Konrad Dybcio X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1773392553; l=769; i=jie.gan@oss.qualcomm.com; s=20250909; h=from:subject:message-id; bh=0MADiRxGeDkPQDc+D4cOyR9YpPfqVXFTQN8hJDo+rxc=; b=0J85xbyTY/0MHfnvcKJXG9ENgHTZhO2hLfyhFJl+vQIbDZagnd8thni9l+8CaOt5aokMxSfV4 roVmSvGh3bUBQKAQdiG+hg30af1ewsWBVxZTWSJDeGw7GSgX9kSCU28 X-Developer-Key: i=jie.gan@oss.qualcomm.com; a=ed25519; pk=3LxxUZRPCNkvPDlWOvXfJNqNO4SfGdy3eghMb8puHuk= X-Proofpoint-ORIG-GUID: vWZOSE_AOhJuk0xtyxS5kPu597JLexPJ X-Proofpoint-GUID: vWZOSE_AOhJuk0xtyxS5kPu597JLexPJ X-Authority-Analysis: v=2.4 cv=ZKfaWH7b c=1 sm=1 tr=0 ts=69b3d2d1 cx=c_pps a=WW5sKcV1LcKqjgzy2JUPuA==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=gBkj9RZkAcI1HbXH1KoA:9 a=QEXdDO2ut3YA:10 a=OpyuDcXvxspvyRM73sMx:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzEzMDA2OSBTYWx0ZWRfX+ucJN4bpx864 XyceHQyzH7ULEw6Zj1kk/4ilRtq3azRtlVI+fld1nVleWMefbdlfh9jwW5/CK9oWrb0iLd265wH 7LeAgrCE1EIobQ2r9QjbEftI4nmbaeUhn7mUgXftTE/+wVctc9LkCaXP4ZU7yRfQhiN80/Kha4t UaHfG9+gu2al+YFEWh4Jad6q1qCp/kmcrJh3rlcA78PZW7OOsosXXjzPEJ570P9STcG62oasmxT gkQv6uyYAJOwHIh9JgSPISysZmicvJXdp57BYKMBpt3v/69kNvxRzBaklMytS7+aF2CmgSHJbCa NMAreSlzA11fQx76dOfkhpDHS7LJoAuH+XZeC3fNKF6AFZPQvaOs0etJRgBYKP6qk1hp1jjqYFo AS40aBC/ds3sSusQI7m1jETZL2p96tu7LL/PNUr4k9h2jm/MEvrSciykvuyLYCCnCgZUO29YwSF xSHtM2ldsng/J65P8QA== 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-03-13_01,2026-03-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 clxscore=1015 spamscore=0 malwarescore=0 suspectscore=0 lowpriorityscore=0 bulkscore=0 adultscore=0 priorityscore=1501 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603130069 Add interrupts to enable byte-cntr function for TMC ETR devices. Reviewed-by: Konrad Dybcio Signed-off-by: Jie Gan --- arch/arm64/boot/dts/qcom/lemans.dtsi | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/arm64/boot/dts/qcom/lemans.dtsi b/arch/arm64/boot/dts/qco= m/lemans.dtsi index 808827b83553..e8a20789cd58 100644 --- a/arch/arm64/boot/dts/qcom/lemans.dtsi +++ b/arch/arm64/boot/dts/qcom/lemans.dtsi @@ -2800,6 +2800,9 @@ ctcu@4001000 { clocks =3D <&aoss_qmp>; clock-names =3D "apb"; =20 + interrupts =3D , + ; + in-ports { #address-cells =3D <1>; #size-cells =3D <0>; --=20 2.34.1