From nobody Sat Oct 4 22:36:07 2025 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 7BB762E2845 for ; Tue, 12 Aug 2025 08:37:46 +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=1754987868; cv=none; b=rBa1JSyjXhtZTI0REsOIIR+xnKUcHbmv8KVbcefQX84xFNeNkl/QfYkv0j/qCpWC+wkT1h5ZXAUzL1A5PH2NBD1/1M+6NhqNpI9L/6i8Z4EM4FCk2TVKYIje3IkyjOatu/OdShYk7E3+rX6uxmHVJkvC68GqJiqaauBIhYn8Qhw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754987868; c=relaxed/simple; bh=xtxhewrRdxb/X3PMc7wN8egXSrqwQkWhSbTXQL2ZeWY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=e5SxtbWvcITuWZSguiRS6UfOo29E7Hg3kv8upkBlTSH5xXf4yw0DfgneKYNkF0/9kOZ2aP1wPOBLPpok8Q2mgax5kM4IIl3C1/+1z7BPrX8pMDKxAShLxNm/2eFHls0fla26WHf0/UVbBwcBYxTxnc+DeqihzePtSsOKD3X63zA= 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=GJKin4ld; 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="GJKin4ld" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 57C6QcAs008762 for ; Tue, 12 Aug 2025 08:37:45 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=riURT7yHCOP Zx38hIetmNcrk/xUqPrSJU9dLdU0LRDM=; b=GJKin4ldmrNMZD8zcr+1NHBAgdz //9AbRH4PQBcUZ9fxecK3iWVCNevMsUQte/Wa19fuvpNErwbWvdgEdtGLkJJ54AP 6QAeJ7nuYET1jC7bT8urMGONOZ58wRSdeD5+WG1RoAnOrjryp5hdW5hQjFBiigWi sKtkF8ut80Y0AWUkhzTVbfSnQAkAhlYaFeDwx5ZKv2EBmFoVTA4DiOVa7FeSC1pE 0mnzbdi8Xag38oKA/LfJenvYvulhigEPEVQtvUjuaoXUuKadvy5UoGYs/Oje5b+s 1SYOGRR8kkdaPM45dusXOyT9nW/nzbU6MYQRYCbjs+VqwR6xjGCpurrsN8Q== 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 48ffhjk8p3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Tue, 12 Aug 2025 08:37:45 +0000 (GMT) Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-b3f38d3cabeso4120001a12.3 for ; Tue, 12 Aug 2025 01:37:45 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754987864; x=1755592664; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=riURT7yHCOPZx38hIetmNcrk/xUqPrSJU9dLdU0LRDM=; b=HCRMHVDYWDHcQCTfNl6BLBHswk7VMkgF4E+Ph9BMnLTSJ3eG3z7qxgsxE2hDhrpyJF 4WcOTdlqDdvj+A96fnpXjrHZJ+WH6YEPrQ0Ev60VLyjpF/PSnIz0gXFfMkRwn9wmFWz/ zUFfgNpJHZLyPIihbtw1AkSu7V1U8hK5HpBpnc2fmFYNsleRPr2A75zekS9lLzSBakDt buZ4H/HMthTI7X1SZ3Mpwb00HLtwrfvzTzkOGKVc5qR/knkv593AtRgc3PMVdo+SxIk0 ECJna3zJW8seCT+4hoM2JY//PQJpznJfk/ww42nv0SfdYbfrzSN/WG/JzizG9Fq6fTJ8 ZmJQ== X-Forwarded-Encrypted: i=1; AJvYcCXThZcaXHVH2Opj9RqAPHBil9PFezPQTrVc9D/cXzYEZB00dkwILVflMYIvINsOYjWNUQqSzXDGCHHsm28=@vger.kernel.org X-Gm-Message-State: AOJu0Yw1qNJdiamdfX6G4h8Mjrif+Hv0NVrLGkpq2Ae11otwer7drQKe bvXKEq8zKw0rV+TNfciZrC/DOpYMHIjdpmlXE962YuY9PkxQ/eH5rfB4N0PuOunheV3LsF2cFNm wIKF1EcDIBmLDXjaZEA04/F5JjuckLLo21aeuHXNELcNsYJVLvgE2ONsYKAaL1CpkcfU= X-Gm-Gg: ASbGncs/BCPZGUiZ4c5rNcIfI5mZlnhB5U+yHxLSX5aCiZmvl6ChnHtYNBxYJcCuFBm GAD1TAMVuZUZ2Qp0egh77hGQ0VDp0LRurJDHcX4YfoR88+mlac4eQ3waLM7zs8JtowiQx5AlFKq lPZn30Vi/fsM4IIfi4jZJ07jdQpJiKiH/cjqcyQtmaW+wJIDWOwi89FEktfVZQRkWo45I4PgyNh 0Z0tmdUPJbOqimDa5MhwcCeHsMaLvU8DUzCfaSdPFmsfZ5pVwCnj3N3z7H+W77fasjdqcAFDj1E E5oSDicySCCeoq3OpoHhSpbvYgRKltTCPX+tDg5wNFrgUJYznB0wAT1jJ0HDeOnO6zkW/BDgEiA lbvcM1l6sbL2XpRuyMEY= X-Received: by 2002:a17:902:e74f:b0:240:11be:4dd3 with SMTP id d9443c01a7336-242fc230cd9mr37045745ad.3.1754987864054; Tue, 12 Aug 2025 01:37:44 -0700 (PDT) X-Google-Smtp-Source: AGHT+IF5dAbW2Log0v6AuB3l+T7D5XFDndUH0k2jF1NznPuDRg5AqrmtsIfJngtinh2TBDJFxMffEA== X-Received: by 2002:a17:902:e74f:b0:240:11be:4dd3 with SMTP id d9443c01a7336-242fc230cd9mr37045195ad.3.1754987863460; Tue, 12 Aug 2025 01:37:43 -0700 (PDT) Received: from jiegan.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-243086849b3sm1915345ad.175.2025.08.12.01.37.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Aug 2025 01:37:43 -0700 (PDT) From: Jie Gan To: Suzuki K Poulose , Mike Leach , James Clark , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bjorn Andersson , Konrad Dybcio , Alexander Shishkin , Yuanfang Zhang , Mao Jinlong , Jie Gan , Tingwei Zhang 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 Subject: [PATCH v5 1/9] coresight: core: Refactoring ctcu_get_active_port and make it generic Date: Tue, 12 Aug 2025 16:37:23 +0800 Message-Id: <20250812083731.549-2-jie.gan@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250812083731.549-1-jie.gan@oss.qualcomm.com> References: <20250812083731.549-1-jie.gan@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwODExMDA3NCBTYWx0ZWRfX3mec3r7LhUPg ft+5mq9hUMJNnEowvTcjKy3SAvLQiukBZ8E4bpfmUWDus5XplLmBYi33/nOFEtTOuLeBW/StkHS +nmiPK0yRoo+quxNQk43ouL07Wi9IxRtQj6sCnjLw7WPFDo/wSLoPBYjUuAyB9VxkAtkGIf6Shy ini4sR9pldGDWzq0xV48dQApeAMM5Vv/lcQOyPejzTpuRCAOOU/IcOCaAUbFlpsC2gE7DGUQ2z8 LRhGHhB5CpnluTzfqNygRTuY39NtJ20TgYgCdwZBnLiXOLiyaKLwyMjb23ZxSUQVZXn2YZSnkLJ ZykM2vK91tMwy3s2AJS3QnQjQHyOPIKFZiVrNmEIzaVPXwcDeCKlze724GZdRqrfSskoMf74SSJ /oPQtySB X-Proofpoint-GUID: okzpZQ1HHswGd0hJS0G2iesZefH0Y8vk X-Authority-Analysis: v=2.4 cv=TJFFS0la c=1 sm=1 tr=0 ts=689afd59 cx=c_pps a=Oh5Dbbf/trHjhBongsHeRQ==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=2OwXVqhp2XgA:10 a=KKAkSRfTAAAA:8 a=EUspDBNiAAAA:8 a=UMME_An3wchvczm7DuYA:9 a=_Vgx9l1VpLgwpw_dHYaR:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: okzpZQ1HHswGd0hJS0G2iesZefH0Y8vk X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-08-12_04,2025-08-11_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 adultscore=0 impostorscore=0 malwarescore=0 phishscore=0 clxscore=1015 spamscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2508110074 Content-Type: text/plain; charset="utf-8" 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 +++++++++++++++++++ .../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 1accd7cbd54b..042c4fa39e55 100644 --- a/drivers/hwtracing/coresight/coresight-core.c +++ b/drivers/hwtracing/coresight/coresight-core.c @@ -580,6 +580,30 @@ struct coresight_device *coresight_get_sink(struct cor= esight_path *path) } EXPORT_SYMBOL_GPL(coresight_get_sink); =20 +/** + * coresight_get_in_port_dest: get the in-port number of the dest device + * that is connected to the src device. + * + * @src: csdev of the source device. + * @dest: csdev of the destination device. + * + * Return: port number upon success or -EINVAL for fail. + */ +int coresight_get_in_port_dest(struct coresight_device *src, + struct coresight_device *dest) +{ + struct coresight_platform_data *pdata =3D dest->pdata; + int i; + + for (i =3D 0; i < pdata->nr_inconns; ++i) { + if (pdata->in_conns[i]->src_dev =3D=3D src) + return pdata->in_conns[i]->dest_port; + } + + return -EINVAL; +} +EXPORT_SYMBOL_GPL(coresight_get_in_port_dest); + 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 c6bafc96db96..3bdedf041390 100644 --- a/drivers/hwtracing/coresight/coresight-ctcu-core.c +++ b/drivers/hwtracing/coresight/coresight-ctcu-core.c @@ -118,23 +118,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) { @@ -147,7 +130,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_dest(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 33e22b1ba043..e51b22b8ebde 100644 --- a/drivers/hwtracing/coresight/coresight-priv.h +++ b/drivers/hwtracing/coresight/coresight-priv.h @@ -156,6 +156,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_dest(struct coresight_device *src, + struct coresight_device *dest); =20 #if IS_ENABLED(CONFIG_CORESIGHT_SOURCE_ETM3X) int etm_readl_cp14(u32 off, unsigned int *val); --=20 2.34.1 From nobody Sat Oct 4 22:36:07 2025 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 91CC92E8E02 for ; Tue, 12 Aug 2025 08:37: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=1754987873; cv=none; b=K09zhA/vtFvYZTHRQ6tTwdjneWQGUjIAscR5l0rrHuKGKNhZIvPDC7wbJ4pxcx4a3gU788n5XygmYJCev1jUo5zwME2LDyGYIy6GAQ6USIG5cqc3dYC8ZCWeJOi6KfpSfusoYbKN5/IYPbBf2nM+lwovQcuPhE9zQWnGwtniMjs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754987873; c=relaxed/simple; bh=D/F4ojh5lN6J1g3jMwklYOcZ7lTVu6mETleBG8wgOTk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=hHbksOT03t/Scw2zXA6jNJy7hajhady+QDc+HWjKt4HljVxSBBAdC3P4DQd97msK5M7ZJZr4EIyYfvVptnEEnaVUEoVqWIKxgPUYfuRn9v1CwyEM+OF8z6Dehj40GhxXFFu1grqUOQSvGKgSbmQ9b5UiqoDRLej/G+I9Dl40hNs= 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=gufhqA2Z; 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="gufhqA2Z" Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 57C4t5bY013094 for ; Tue, 12 Aug 2025 08:37:50 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=wrGu5dBmfdM mzrfdvoTs2DIE+CWt05hHpp1+g0Qaf2o=; b=gufhqA2ZBtkvBSF2b8ZHeibVtt5 H43hsVSJWZzwVH70ZTx66iee0kXSpyLFjt+WIp2nL/iJ10+tej5R08Dv4/VDezcV kajiTaj4wwFt4VPqzZi7Lh5wwMxkEAF9r516yTN3ncFqMcTyKkNhez8wbYmg3NSU ONPJprHDkB0q2vdSXmZ5QhokpifwubucDWxGjfMoqOIVrMZhX5Soc+NomHwPOww1 uMKm2Bk05Ar3iiqkoi1r6LXWS5PJN+6dACdhWbUCFcZA38v0KrAbkVhy6y6mWj0l SuVOxLx9wkq/eJ8dmitZ8AsOqgluTivUGHqAcPJkB3g9RjL3Z6b5oYh3ahQ== Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 48dupmqjcx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Tue, 12 Aug 2025 08:37:50 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-23fc5b1c983so63564035ad.0 for ; Tue, 12 Aug 2025 01:37:50 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754987869; x=1755592669; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wrGu5dBmfdMmzrfdvoTs2DIE+CWt05hHpp1+g0Qaf2o=; b=dkoNfPKjAXcBeJgLIzv6gt7nSUeaaXlBnhEQ/NTmJk7/IpDl+l2QwdNxoZgMYwmWB6 Je16DXOCTimussLaWdSqwSzYTDi00ycfcS1e597gcwwk9bbY8c6iMlLDWmOTyczp/sCj nSgRa7PuUS5gklIJTlhxC1FpZ7YZyJ6y44mey/chY16UKPKIVw0IoEj1HCitVv+rVcTi s6ndqunEYCb1kU2UhAgDoDdQldWNRl6TJVa8Vp5gQjN8RATCqXn2wqyV1ovHYqcZEisL 9IaX9d/1WNd4cjpMl6q4Ya3SFSCkL2CqVhxIR2i1yNSj6Y1bZCOwRXo4WO2wvoMpjaLg QpgA== X-Forwarded-Encrypted: i=1; AJvYcCUBdsS3A2gcuapz7jR63P9UKH207X/MIL9KBDLGnb1wCJmkjZheDCidT6xwUqV8asfntm9INFDLz8Nv7WY=@vger.kernel.org X-Gm-Message-State: AOJu0YyeGyTyeLpCe2g85+DfHr21Stk5ANz13vkKU5hdVROPwx22Vz31 eKn8hhBZpno/Ei6XjK9icAdbPAGxU5C+unGpH/gimKKZX48P/6Yryls50ODCrZ+JVAt5Zbh8t9v 8A3LSynacqgpj2iS7Y32YgeVfthlSqOTHeOOo1a37NcqvAioq9zaVZlafFkQoS76L/Sw= X-Gm-Gg: ASbGncuS64jNZxzE8i81YTzUUVqFXhMZLiD4P/vA98c3EhOsfiOFndmt1gOBobqaBQV at2YyXUczhzJIy/ZXvWGdZr/pu+VBwvguzTKvuQkuc5w3arKKqP5zx9nAt+MCgsyZ82K36e9d90 6jRnCrSXM4MoW3dlCF1zpThG0mlB1rM0u4uv7gjoZAJXq6O1E9wYsKKNE8hgGTIqpBWJzMnDrIY /JnxM2FNwUyr8srocRbSHSC7ywtHTh3LXrQsJy4WMw2EYsuieWHofZz+JvBcUXcF9HNLYpDBRVQ 0ywim/U9sXsymB12oiSol/pqROo352rss/ybfD9QDJbfr7zuwpk3K9T6U9KPfs6++jA9CTs6FFg DP228FWfkhx3oNKS4aR4= X-Received: by 2002:a17:903:32d0:b0:240:6fc0:3421 with SMTP id d9443c01a7336-242fc2df919mr32672035ad.3.1754987869228; Tue, 12 Aug 2025 01:37:49 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE1epWZtnF2IBB4X6gRIcAxheEo7d+5Pdk6LBydS5mLgAm0zXrYNJ+qesoW7cmIPGP6RrbrFw== X-Received: by 2002:a17:903:32d0:b0:240:6fc0:3421 with SMTP id d9443c01a7336-242fc2df919mr32671605ad.3.1754987868720; Tue, 12 Aug 2025 01:37:48 -0700 (PDT) Received: from jiegan.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-243086849b3sm1915345ad.175.2025.08.12.01.37.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Aug 2025 01:37:48 -0700 (PDT) From: Jie Gan To: Suzuki K Poulose , Mike Leach , James Clark , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bjorn Andersson , Konrad Dybcio , Alexander Shishkin , Yuanfang Zhang , Mao Jinlong , Jie Gan , Tingwei Zhang 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 Subject: [PATCH v5 2/9] coresight: core: add a new API to retrieve the helper device Date: Tue, 12 Aug 2025 16:37:24 +0800 Message-Id: <20250812083731.549-3-jie.gan@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250812083731.549-1-jie.gan@oss.qualcomm.com> References: <20250812083731.549-1-jie.gan@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=bY5rUPPB c=1 sm=1 tr=0 ts=689afd5e cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=2OwXVqhp2XgA:10 a=KKAkSRfTAAAA:8 a=EUspDBNiAAAA:8 a=ViBFXQGRTvhYuEXyb1sA:9 a=uG9DUKGECoFWVXl0Dc02:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: gYD-ndTocgELL1Ndxt4cSluBhpAj3MMk X-Proofpoint-ORIG-GUID: gYD-ndTocgELL1Ndxt4cSluBhpAj3MMk X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwODA5MDAwMCBTYWx0ZWRfX1va/zBPgSujX 02RTFpqWF+YgMhlzZ6ZaGrEAs6WHGdCUaMe+NPGvuEKZB4Oltgc1wtpX3n7AxCKqcrS62Nrlplw B5pY0wOxsWUyT5HOpBJEuBUF5qvV1e4AqZxWRp5eckMEbN4/wJ64s1Sr79pabTPfbxhR/6QmKta wnPwhj2OIYIGds3ZQKZqTbFwRxs2ynaqCM0W8rqQV2PEWKADdR2njDlxPwdb5fhP5GLFSASpKUW eunL+1faSaA/YgDwYmwqpR0OJRnliLfNi95x3YO5jNOe7k76GD5OdDVTd1rf+ogjX5WWHUxpwtW 39WmnnTSD28vgXQEbk75HoIzawxTuGQlXbBuHPvRKMb7HomYisO0FCUZKP/YLDtuyVZqu5GA+zZ 2u823ktI X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-08-12_04,2025-08-11_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 malwarescore=0 bulkscore=0 impostorscore=0 priorityscore=1501 spamscore=0 clxscore=1015 phishscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2508090000 Content-Type: text/plain; charset="utf-8" Retrieving the helper device of the specific coresight device based on its helper_subtype because a single coresight device may has multiple types of the helper devices. Reviewed-by: Mike Leach Signed-off-by: Jie Gan --- drivers/hwtracing/coresight/coresight-core.c | 35 ++++++++++++++++++++ drivers/hwtracing/coresight/coresight-priv.h | 2 ++ 2 files changed, 37 insertions(+) diff --git a/drivers/hwtracing/coresight/coresight-core.c b/drivers/hwtraci= ng/coresight/coresight-core.c index 042c4fa39e55..018b1119c48a 100644 --- a/drivers/hwtracing/coresight/coresight-core.c +++ b/drivers/hwtracing/coresight/coresight-core.c @@ -580,6 +580,41 @@ struct coresight_device *coresight_get_sink(struct cor= esight_path *path) } EXPORT_SYMBOL_GPL(coresight_get_sink); =20 +/** + * coresight_get_helper: find the helper device of the assigned csdev. + * + * @csdev: The csdev the helper device is conntected to. + * @type: helper_subtype of the expected helper device. + * + * Retrieve the helper device for the specific csdev based on its + * helper_subtype. + * + * Return: the helper's csdev upon success or NULL for fail. + */ +struct coresight_device *coresight_get_helper(struct coresight_device *csd= ev, + int type) +{ + int i; + struct coresight_device *helper; + + /* protect the connections */ + mutex_lock(&coresight_mutex); + for (i =3D 0; i < csdev->pdata->nr_outconns; ++i) { + helper =3D csdev->pdata->out_conns[i]->dest_dev; + if (!helper || !coresight_is_helper(helper)) + continue; + + if (helper->subtype.helper_subtype =3D=3D type) { + mutex_unlock(&coresight_mutex); + return helper; + } + } + mutex_unlock(&coresight_mutex); + + return NULL; +} +EXPORT_SYMBOL_GPL(coresight_get_helper); + /** * coresight_get_in_port_dest: get the in-port number of the dest device * that is connected to the src device. diff --git a/drivers/hwtracing/coresight/coresight-priv.h b/drivers/hwtraci= ng/coresight/coresight-priv.h index e51b22b8ebde..f80122827934 100644 --- a/drivers/hwtracing/coresight/coresight-priv.h +++ b/drivers/hwtracing/coresight/coresight-priv.h @@ -158,6 +158,8 @@ void coresight_path_assign_trace_id(struct coresight_pa= th *path, enum cs_mode mode); int coresight_get_in_port_dest(struct coresight_device *src, struct coresight_device *dest); +struct coresight_device *coresight_get_helper(struct coresight_device *csd= ev, + int type); =20 #if IS_ENABLED(CONFIG_CORESIGHT_SOURCE_ETM3X) int etm_readl_cp14(u32 off, unsigned int *val); --=20 2.34.1 From nobody Sat Oct 4 22:36:07 2025 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 AAF252E542E for ; Tue, 12 Aug 2025 08:37:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754987879; cv=none; b=H3HGzESdnds2Yky72FH2u+W9F10zqo/QZxm/a7fJQkjzOVwLi4Xqs3FOCT4wUNyEMccZjR5a/lFiVi1be8LpXmaAJ8wwV8K6tZnoDwMxkx2JyMRoD6mfD86HfR6/05YoJK8zWBgfy44stzj/HbDsviwSY4Qja97oTqJNuRgjxiM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754987879; c=relaxed/simple; bh=XGiX4Gfca5hhkZ5WBB5kzoN3+KaO9zxGm+JxwB+Qnqw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=nlFbggGsCASMQIpUeTXuJ+RSgJFkRErMY3d2aMJZXqmEyuGlKUVuw8TlRtPKQz4klCS8c6IFFrBBcG2wc8p266NF2y2WFy3d5CnZvuR29cgiY+x9KVyjhWweyrtUHnS1LPLlkLe4B2k/HzVOQFlgJS/xe1Qke9jU4YJ850/xkZE= 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=ZT3lTJhA; 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="ZT3lTJhA" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 57C5Y7ld022400 for ; Tue, 12 Aug 2025 08:37:56 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=x1IUpmlclQ0 9bHbCcAYuy6OSpZ8BPA7QouFBaqx7SR4=; b=ZT3lTJhAaIKaH4BVqDqRNS0xXEX lFUrMOzmBpNorqpYX2q4LRTIkcj6NzzoQ7sOVX+5ivF3sbaqGs38RgNEGw1H3p/+ B+8WvrCrl92OGiCbcQRtTFf7cYZhz+xep2u7r8np4k8WNgiXgw9S1DA+Jjsgt9fj U0OGPBw2NkkcXfCrk/dXpNE9grpf9NMmmNUp5hHpRzRHLHjUXSs+4+yXG0P4W0mv YGcGvtzTSRmuibOfd3HSzc3plNTDAtlKB37weNjHMsAoRcqyPs7gWAJrreyTwihh 3w4BCtOtPKiQwiszSen6ATR7NNIrKLdfSlqHl/o2NCSiRS3jzFYZicuOedQ== Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 48fm3vja8h-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Tue, 12 Aug 2025 08:37:56 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-240607653f4so46415775ad.3 for ; Tue, 12 Aug 2025 01:37:56 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754987875; x=1755592675; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=x1IUpmlclQ09bHbCcAYuy6OSpZ8BPA7QouFBaqx7SR4=; b=bZw11jyjOn7By67E4JH7MHPnEVD5YGd/ez2u5D36QnHs60/gY3/aTZosgObJ1mdGdD vc3zpaZjJLFQ8tEQhcolDECRJHl5mMoVB1vQGjGiEwwkte6PKGEVF6E+E7fImuWGgmjo aigHWU9EVIgyDIXay52pWlutJCEjLTboZxVDfK3EqwNvObb6YfeKGgGijfX9n14QTluN uuu6W7r1qpSZtjCdJwpjy24Pg4Tt2/sPfHxVgW0zOqNIKxgmc0HQK2lktc17pMPP0nU7 fkUXrAu1mWThscdtJeDqg12EJBePSUryoCu1TWQlHFdoFt8vkR76RTBb+E1yLp9UuPON mnlw== X-Forwarded-Encrypted: i=1; AJvYcCWIYjhlM6OwtUkRJMCvqjxpc2+fhyqrk+wcndcmf3y+YXRpR555wDjBAB6KPzd6kj4N6EbR6457Pw4eNDY=@vger.kernel.org X-Gm-Message-State: AOJu0Yyqdu/pDQ+FBi9ko8tziUPFNmc9j/dImgsyeQyAj1eE7NEf34CM /vZ1dee121M3XEdQ5bwJKfw5x5fR0R+q5NqDG6r8Few1cuzqFBIFpgyhrTThb0sIFFHsqI8MYr9 Obgm2zSbcD1FJkIbxrIolLuz6eBYbGKk+qhwTgKnHTaFZd/SbSpQXLCLQQ3tcjSJPFTA= X-Gm-Gg: ASbGnctUYs99ZzCKLwNUJWQOFpZ6Y8N5xoR9uL11NIuaKKoFjm+cvI9BnqeN+30wAwf /tTX+QKPU8zI5z3hYTUraA+osSNzQONOtk82Tf8WgYmPpXbqYe8+9NJKhMB4BdNlncH6H/2lb+X RrgSaVK4ZNedpCh9JHFE7bLNG+fe4GnaRUL2v1Jo4zVZ4DjEvwKe9PVOG5IkB1MKIg6sMKpsW0K ZigafrKb3modlBY8jNXuKcIPR2mVEKQZj8pKXcHNkwLNaIez9JdwhW+S8sAVD3edDzFGAQp6TW7 KfZmX7PtwnLHTzXgG+2UgNkWQaYzY6Zy8WSNH3LVwn/pHOHj+s0nHjE4iA2OgmkZ7ClDqk/5uB4 n9unYyOd3uTsewJnqRyE= X-Received: by 2002:a17:903:1a0f:b0:23f:c005:eab0 with SMTP id d9443c01a7336-242c22085e0mr247517365ad.40.1754987875211; Tue, 12 Aug 2025 01:37:55 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHSyTwItp4AzURKgkqbIXylqMcchbdJF5mW3fYQFHbXyc1v7LKgkg38a0UoXB11ZfsFFDrQmQ== X-Received: by 2002:a17:903:1a0f:b0:23f:c005:eab0 with SMTP id d9443c01a7336-242c22085e0mr247517015ad.40.1754987874696; Tue, 12 Aug 2025 01:37:54 -0700 (PDT) Received: from jiegan.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-243086849b3sm1915345ad.175.2025.08.12.01.37.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Aug 2025 01:37:54 -0700 (PDT) From: Jie Gan To: Suzuki K Poulose , Mike Leach , James Clark , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bjorn Andersson , Konrad Dybcio , Alexander Shishkin , Yuanfang Zhang , Mao Jinlong , Jie Gan , Tingwei Zhang 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 Subject: [PATCH v5 3/9] coresight: tmc: add etr_buf_list to store allocated etr_buf Date: Tue, 12 Aug 2025 16:37:25 +0800 Message-Id: <20250812083731.549-4-jie.gan@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250812083731.549-1-jie.gan@oss.qualcomm.com> References: <20250812083731.549-1-jie.gan@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwODExMDEwNyBTYWx0ZWRfXzvqTp7lagft2 R8VZRcUtLUInSmP2qg9e2NN/ytJdcyUE42D6MN5KHkvUnmyTUekTEiam3Muz9GTbcD2CqzSM1Hn 3F77z0zp+qyL249Ufgv97zX0BpG3Uy2Zu9LxBWPAIssHxEdy2F7Nvh6pNkVFFRFW5nrqX9QbRdf 1GxAMtaqEo/TJNBsjr18+fft9Nr1Hnwm44PsupEvqueB8IYR8GsN+h8OoCUKti/1c/yCYLAcVSk T5lrW7WKHUFTYuQXSse0vMXC/XGkHu6p0iAYwwam8ILxgbB8Lf7LEakQ1oSMMBCQUTyAOYJpdiW GvdsskhnGhemLoZv8fclSsoPLfFBB/FUNJhDcGTT8AXG108yvmhv8oehJ+F7MqgQqd/HWLj0LMB uSECrVMS X-Proofpoint-GUID: JhOal27o16z5CtJXRzGUafSr6QpKa5ea X-Authority-Analysis: v=2.4 cv=A+1sP7WG c=1 sm=1 tr=0 ts=689afd64 cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=2OwXVqhp2XgA:10 a=EUspDBNiAAAA:8 a=JdrPKQqGaJHjzi2MttEA:9 a=GvdueXVYPmCkWapjIL-Q:22 X-Proofpoint-ORIG-GUID: JhOal27o16z5CtJXRzGUafSr6QpKa5ea X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-08-12_04,2025-08-11_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 suspectscore=0 priorityscore=1501 malwarescore=0 spamscore=0 phishscore=0 clxscore=1015 adultscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2508110107 Content-Type: text/plain; charset="utf-8" Add a list to store allocated etr_buf. 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. Signed-off-by: Jie Gan --- .../hwtracing/coresight/coresight-tmc-core.c | 1 + drivers/hwtracing/coresight/coresight-tmc.h | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/drivers/hwtracing/coresight/coresight-tmc-core.c b/drivers/hwt= racing/coresight/coresight-tmc-core.c index be964656be93..4d249af93097 100644 --- a/drivers/hwtracing/coresight/coresight-tmc-core.c +++ b/drivers/hwtracing/coresight/coresight-tmc-core.c @@ -830,6 +830,7 @@ static int __tmc_probe(struct device *dev, struct resou= rce *res) idr_init(&drvdata->idr); mutex_init(&drvdata->idr_mutex); dev_list =3D &etr_devs; + 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.h b/drivers/hwtracin= g/coresight/coresight-tmc.h index 6541a27a018e..292e25d82b62 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. + * @node: Node in etr_buf_list. + */ +struct etr_buf_node { + struct etr_buf *sysfs_buf; + bool is_free; + loff_t pos; + struct list_head node; +}; + /** * struct tmc_drvdata - specifics associated to an TMC component * @pclk: APB clock if present, otherwise NULL @@ -242,6 +255,8 @@ 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. + * @reading_node: Available buffer for byte-cntr reading. */ struct tmc_drvdata { struct clk *pclk; @@ -271,6 +286,8 @@ 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; + struct etr_buf_node *reading_node; }; =20 struct etr_buf_operations { --=20 2.34.1 From nobody Sat Oct 4 22:36:07 2025 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 568382E9743 for ; Tue, 12 Aug 2025 08:38:02 +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=1754987883; cv=none; b=HFtgT3j41jIPTTY7ojt9PKPZLFvQwG/50ESs8FAmhsaD6y+LBYamLeEA/ojaSxe9it5TWtme7xfTtGkgpF6kVQXO6wusPnLOqWmSgfyM6RJLGi62BfYKBqoIPIzckKPe5/sjBiT21Hqqkn8t/LEY3oQU0oAV0xwXDC1U7J1cNNg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754987883; c=relaxed/simple; bh=GOPjgHWxv1KwRPxnlny046bCIvHx4fvw/23iFRXh6tA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Tt4HaXXtGPQJW1JJVWLozwas5OitSSr21I7+Rhzo1ykhgvLCi5loIgzA7S2gw8aeSQGhVcdubRzT1KuYPo+gDrgGg0s3NAklzy3Oq3YjO81phkd5lIUvvKIeD/D/fxO9J4ZqwxTRz/92A0a4rff8ejlxxYz0a+pabU84fKX7t+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=a848246D; 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="a848246D" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 57C5X9vu021586 for ; Tue, 12 Aug 2025 08:38:01 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=nfhiX1ygP2A vXXrs0gcWYMD2ZsFc5ZoIj7fNw/kuGXI=; b=a848246DTWrr8GBfTijf6OIzLAI HTGVIOm9ZWPzxG9azZHVn6sXBR28x0/U7pScZwW0t6U9fopH9vRS6BvJOLIm4K9o zSFoN+rwtXwSDowODTuZd61v3jO3VkgS7SSiNpTe+gm8zkMVKyWmotgOlnycazmt nvqKKwSccD8kJP6s2bGcAhoZdnI6u3Xo8ju6VEax8NDfsq8cGb0TKWM6xpvwdkIk uVmrquZa99DPS08LBiUfA8pA7O5K9L63pemdNdCmxaTH9eJ2DciVT0bopDqffzmC 7Wctb8Pc62rlpiGTJ8THL40wP93NU5oKO4ZyiE4p5M1Q1N8CZrlLwWkemSQ== Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 48dxj47dsn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Tue, 12 Aug 2025 08:38:01 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-23fe26e5a33so79443695ad.3 for ; Tue, 12 Aug 2025 01:38:01 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754987880; x=1755592680; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=nfhiX1ygP2AvXXrs0gcWYMD2ZsFc5ZoIj7fNw/kuGXI=; b=mYnMx9LjZK4YSU1AKc+6hEzUN1zng7oWtj8igtFglsEpfmJMhHfaeo0l0FmvnJWH1t nrBW1MlUjH0dqWxbIUTTIfD1vHVKl71rjU6Njy3V/oudL/9iRqU+pYTCq3T7BCvZVrZ4 SBlGtqjcDqMqbsxGOLPjso7WWzVdDna+AtZ2WkwhPXvePCW7LakYLIE7RU/7FbvmGmFy F/KsGKe6iJ/FiQguWypCvuKIeFjAV9h7C25RZey7HiXHCz+vOLaqPKkqRIHy4cxcdMza Zmrjr7ogEgaUqw6CSKFmxNYoL4z8kce/t61uandFO0wIeU5hZBvZm6sxfRtzYN7P+0vS 9PMg== X-Forwarded-Encrypted: i=1; AJvYcCW/cF68RLUD7Okxe8XNHvYqrUSMwOmLF1Qbd8ylwDb34t4a5Jr4lKePtWe5PucZeQMmqxiNJtAsUFJi3aM=@vger.kernel.org X-Gm-Message-State: AOJu0YwaRWgmALvNQh6pztuClAHV63Rfnx8hGURBI2gUkvEa7gD/Vpkp yIxBVTjDm1A3VpCKj6acws5FRSFF2C76YpwYjwV2+4y28KWMLxk0H/K/eyFRBCU7KkLScdy6xr+ ZC908v6I6Det3r4brVTI3rmcuBNw6CZ5kMAQaVN1cWh89QvLrBVz5XVXBI49oG8vtZUc= X-Gm-Gg: ASbGncssYgPEu4H5pcDC3Gto4qZP51NoE3Ff5Bo3HJ7v92d2w6x9GGAYLvb6P2PIypz bZnmIkR6Ls+YKMskH85chJ5+YpQXYxiFEIWLvCyqbSBQV10LB6p85r5LZCFI+Esc3kK0kV8h3XB XjMx1of1CyH9t0TyKLE/2jbZVM8S5y1889RajKZbR6oFcGLE7YT8lVfrt+W0lhu1A78pEhLp5Ri j/bMTtxMOkvtSf8U/wDOyRxU6NgIAVs6RYz/HypYR9ydzzEJzXt09rsuO2i56RpSp5/WRxYC9kV luDEEErGX3z6+VWBTL9e6FRgme/b7b1bgUFRt7Z0b2gSt+xNPY1ROvs/V86fTq2fp2ZLXxklVbh 7QuluesfCkz2uVaCc5kw= X-Received: by 2002:a17:902:fc4c:b0:242:9bca:863c with SMTP id d9443c01a7336-242fc38a0f1mr34907785ad.54.1754987880444; Tue, 12 Aug 2025 01:38:00 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHGnaHE1ZpiwMNn4UsN08f5Kfog+omLIJ5L0j2dBUjCm2KGFIcXRJMShYCrtbagzF0cmN8OXg== X-Received: by 2002:a17:902:fc4c:b0:242:9bca:863c with SMTP id d9443c01a7336-242fc38a0f1mr34907345ad.54.1754987879947; Tue, 12 Aug 2025 01:37:59 -0700 (PDT) Received: from jiegan.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-243086849b3sm1915345ad.175.2025.08.12.01.37.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Aug 2025 01:37:59 -0700 (PDT) From: Jie Gan To: Suzuki K Poulose , Mike Leach , James Clark , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bjorn Andersson , Konrad Dybcio , Alexander Shishkin , Yuanfang Zhang , Mao Jinlong , Jie Gan , Tingwei Zhang 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 Subject: [PATCH v5 4/9] coresight: tmc: add create/clean functions for etr_buf_list Date: Tue, 12 Aug 2025 16:37:26 +0800 Message-Id: <20250812083731.549-5-jie.gan@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250812083731.549-1-jie.gan@oss.qualcomm.com> References: <20250812083731.549-1-jie.gan@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwODA5MDAyNyBTYWx0ZWRfX7TygWbVfA4Eu UDQmt14bkKmj0fnPt/H8GFNU7coP9O1gA7PA96lLXJU1I9+4mxfnmctQhcRVnqax+8O/IjgNPBn sLNGd3DczgZDMJuJlFaqtNMGilP9fa3DtarA+amJGwvklbTovUEtTaYXKtT3pmOlGiY7r1vl3dk rMRhTI4lmVHYfegshmBJRyAOzuN47VxsGZg0oLlvnKQqtvuUHWBMHyUkrda3ehcdBfUwWgtsqeU j1BPwRD2eNKs+ssyTrB7VtrUYgIMiLDARqw4jUqq5EI8VSa8qpeO3blH0rO5AxIpufJAtP7e+re F7HYHGjihkDktBgeFyOIeDmk6B0m5uFDGXgjpRb3fPvyoVHB+vNkNK1qiQTzlxuoOimjWnAsf7E mSgg8YgL X-Authority-Analysis: v=2.4 cv=fvDcZE4f c=1 sm=1 tr=0 ts=689afd69 cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=2OwXVqhp2XgA:10 a=EUspDBNiAAAA:8 a=HgEQyz239O5rJIWi_rYA:9 a=GvdueXVYPmCkWapjIL-Q:22 X-Proofpoint-ORIG-GUID: jFRwCXqe90RIHD40JM34BoD2WTXu_Bhm X-Proofpoint-GUID: jFRwCXqe90RIHD40JM34BoD2WTXu_Bhm X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-08-12_04,2025-08-11_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 adultscore=0 priorityscore=1501 spamscore=0 suspectscore=0 clxscore=1015 phishscore=0 bulkscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2508090027 Content-Type: text/plain; charset="utf-8" Create and insert or remove the etr_buf_node to/from the etr_buf_list. Signed-off-by: Jie Gan --- .../hwtracing/coresight/coresight-tmc-etr.c | 94 +++++++++++++++++++ drivers/hwtracing/coresight/coresight-tmc.h | 2 + 2 files changed, 96 insertions(+) diff --git a/drivers/hwtracing/coresight/coresight-tmc-etr.c b/drivers/hwtr= acing/coresight/coresight-tmc-etr.c index b07fcdb3fe1a..ed15991b3217 100644 --- a/drivers/hwtracing/coresight/coresight-tmc-etr.c +++ b/drivers/hwtracing/coresight/coresight-tmc-etr.c @@ -1909,6 +1909,100 @@ 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 the allocated node from the list and free the extra buffer. + */ +void tmc_clean_etr_buf_list(struct tmc_drvdata *drvdata) +{ + struct etr_buf_node *nd, *next; + + list_for_each_entry_safe(nd, next, &drvdata->etr_buf_list, node) { + if (nd->sysfs_buf =3D=3D drvdata->sysfs_buf) { + if (coresight_get_mode(drvdata->csdev) =3D=3D CS_MODE_DISABLED) { + drvdata->sysfs_buf =3D NULL; + tmc_free_etr_buf(nd->sysfs_buf); + nd->sysfs_buf =3D NULL; + } + list_del(&nd->node); + kfree(nd); + } else { + /* Free allocated buffers which are not utilized by ETR */ + list_del(&nd->node); + tmc_free_etr_buf(nd->sysfs_buf); + nd->sysfs_buf =3D NULL; + 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; + int i =3D 0, ret =3D 0; + + /* 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) { + /* Directly insert the allocated sysfs_buf into the list first */ + new_node =3D kzalloc(sizeof(struct etr_buf_node), GFP_KERNEL); + if (IS_ERR(new_node)) + return PTR_ERR(new_node); + + new_node->sysfs_buf =3D drvdata->sysfs_buf; + new_node->is_free =3D false; + list_add(&new_node->node, &drvdata->etr_buf_list); + i++; + } + + while (i < num_nodes) { + new_node =3D kzalloc(sizeof(struct etr_buf_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(new_node); + 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->node, &drvdata->etr_buf_list); + i++; + } + + /* Clean the list if there is an error */ + if (ret) + tmc_clean_etr_buf_list(drvdata); + + 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 292e25d82b62..ca0cba860d5f 100644 --- a/drivers/hwtracing/coresight/coresight-tmc.h +++ b/drivers/hwtracing/coresight/coresight-tmc.h @@ -459,5 +459,7 @@ void tmc_etr_remove_catu_ops(void); struct etr_buf *tmc_etr_get_buffer(struct coresight_device *csdev, enum cs_mode mode, void *data); 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 Sat Oct 4 22:36:07 2025 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 7EE2A2E9EB4 for ; Tue, 12 Aug 2025 08:38:07 +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=1754987889; cv=none; b=ZUZj0owKKTK8Y6oaJnbHYXZFTY1J7ve5HwffcTh2WuG74FO1JV8gAR5PuCaDNqswlPRx/6CuRQV+eUdfg3YFIRdq/NB6nlTRTXx6VltD3vXtbYIfQsmDQ0r/4zqgHzICDfnBEoBTW2UUp9OkBHD4YFk+SK/8nzaHYB0l3xwn3Go= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754987889; c=relaxed/simple; bh=7JykDjPK767tZ43BdVcJfvn/WRbg093jCfiuGDNITBE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=nFbYAcxEd9wmPeZAZ5L76LvaTLL7z+FNG/tzhjnKdCTBpF3UA5rdWJsIrugv+IVNztlDCt+zx9c2KMA7kWqUs/xHoGMoZVhRtpsMONSZsi3ChJvyOWWKP4OBvu+cUdhVBUnuVDR7oDgXMyRVf7CfXJgql/Hb6U+GlnCnp+MDp18= 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=DiRcSEIu; 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="DiRcSEIu" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 57C5Womk029132 for ; Tue, 12 Aug 2025 08:38:07 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=QoeGXn7mj0x vk3qJvFMf762jOqVA+60Yk/pH1LCpYf8=; b=DiRcSEIu5ZeVNAdfJ9HHI2UerKH cSazn6xFCA9NF0XLgr9RRTL6uzxLFS3YWYC+1FtZ6qLYG9VQ0T3nQ9AM7BtHYLoh Jlvs6gZ4QkAekdwkX8QMCWIi6LLRDs8PQmgYgYyscOIa5imMbDysuvk7HELCJg4i CFaD4NhrOY4UkfAeVuqZBDw1OaR6ieWvjOjIKGDFYtbLMo3kFUK6x6loIMLYPXaJ m1SIGzlhSwPyDIKBSEP/hDtIUlyYQdQ7x78PhGg+4z9N2I9DVquK+8BDBgVxQB0Y HS0x3omCUhcKJTpX3iFhd4Hrntt1KlO97PZAF+dvlUdPcYjsADQ5r6tpA8A== 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 48dw9sqkg6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Tue, 12 Aug 2025 08:38:06 +0000 (GMT) Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-b38d8ee46a5so5071481a12.1 for ; Tue, 12 Aug 2025 01:38:06 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754987886; x=1755592686; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=QoeGXn7mj0xvk3qJvFMf762jOqVA+60Yk/pH1LCpYf8=; b=YEyQ6JfNojnOPip7SKE3Fqjjkj1B8dIISbBtWA2OGGlP0pEvWOB92xczbtYQWpUYq3 pmiQnKRv5QhNXytzvZXOtEfog+0F7dKY9NHB7dmq+FjYRKmnIrBNYvZhV/8VMNp05Egj RzErB9QwSd7E9Wcz0rynYYF+clEKSf4AV95gRwUrO/BibDMTZRmpN+mRzhRi3LxUoVpw hWFegbpTV7aD36hDtox5JTaX0BAE3fzCAXRz6Y5bBUtL0xMiPSzTM2UPtrRvjrzkOj7J QINYwQjbIw8MoHHiDciIuwQ/B/I5pDTGaRs2s6TuPbeL8q/H3aaq/Dbl0NHo3q+qvG1k QJVw== X-Forwarded-Encrypted: i=1; AJvYcCV7YWia9aYFN/PUAOd6Yb38tHnwVkiBbRx1qkuwjp2z+N8RyfsB7DKI6kUhO/OlrIqnDmEBJ9yAeVM062A=@vger.kernel.org X-Gm-Message-State: AOJu0YwcAUI+CVpuD5lAny2vl/1LtoC1SHQh6TYWrbmWZ/c02bDV5Ome 3qzWsXj9wBPV15Oo3VewALzj7X+4NkXCZtJzJnSODFsz7pXWLPGcW/rkL7ADr32xZxpkQdN/6U+ J2xjRlUFrrGLXEbFn/jbrc+9diiJIN4AQvh1xaUkgxSBpOynJs4FySAz/sNSpUJoiHrE= X-Gm-Gg: ASbGncsY9J7dSZZ5s/aXi0roMTKy+HESff3jddW3Bj+0hXUkU0D/LfAMX9Gp8O5g8rP 7ljmk5Ausq+33oHS3ZGaK0jr5MYJPV0Dd9V7/sdnFypJACkcZN2tMFrx63TARGIBn9Ho4VvdHVI 1tcxpNVbYQPxg7FKJbSgXXiShHybpCduanarx5gDmCVwIcPJlEylSVSo30ynn7e3tEA4RQbN1Or 7zOQCGTY77kb12DnKUFwzwVDRG1Q1GSWhxe+G/Z+ZV5FMkCHz11CNtRfDHr8GPOrWGAfGHusiBs jDddTloU9FNY1Lcjfi1wCU2FJ4sk0eck5wH4AEoGe5ihpjIDECdeHodHJKgbZ3B6iXz6ehPePU6 7/6rVnn/TzdQfTbPkikQ= X-Received: by 2002:a17:902:cec1:b0:23f:f39b:eae4 with SMTP id d9443c01a7336-242fc32a4b4mr39002685ad.9.1754987885741; Tue, 12 Aug 2025 01:38:05 -0700 (PDT) X-Google-Smtp-Source: AGHT+IET9VO5P4ZRdMO2sMpbOqfeJjlpt9JwuEh8ou9XqceDwgQAmb4qLnq4jupgSMl0CJgtynW4yg== X-Received: by 2002:a17:902:cec1:b0:23f:f39b:eae4 with SMTP id d9443c01a7336-242fc32a4b4mr39002355ad.9.1754987885263; Tue, 12 Aug 2025 01:38:05 -0700 (PDT) Received: from jiegan.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-243086849b3sm1915345ad.175.2025.08.12.01.38.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Aug 2025 01:38:04 -0700 (PDT) From: Jie Gan To: Suzuki K Poulose , Mike Leach , James Clark , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bjorn Andersson , Konrad Dybcio , Alexander Shishkin , Yuanfang Zhang , Mao Jinlong , Jie Gan , Tingwei Zhang 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 Subject: [PATCH v5 5/9] coresight: tmc: Introduce sysfs_read_ops to wrap sysfs read operations Date: Tue, 12 Aug 2025 16:37:27 +0800 Message-Id: <20250812083731.549-6-jie.gan@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250812083731.549-1-jie.gan@oss.qualcomm.com> References: <20250812083731.549-1-jie.gan@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=J+Wq7BnS c=1 sm=1 tr=0 ts=689afd6e cx=c_pps a=Oh5Dbbf/trHjhBongsHeRQ==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=2OwXVqhp2XgA:10 a=KKAkSRfTAAAA:8 a=EUspDBNiAAAA:8 a=1hiE41pZ4Zj50arX-_gA:9 a=_Vgx9l1VpLgwpw_dHYaR:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: 6GglqSUCTuzHjOKxejU4ZhvhtpNX4tgV X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwODA5MDAxNSBTYWx0ZWRfXwg62K/FvP7NV OUQ/suw+umE4D9CtDosXUYALtf/tn2TTegotU5akUCU04CRcmiWBE2zesKx5RnjEAbxNoq9FQu5 AqZCmN4t8NJDAYlp62yI0ckzYTm09SXppwQoqvcYSgl4zi4Lbm818yvCG//iMGRLlZmLxDIcvEr B0twIU377Fpg4cNBwCf2X8xZyeyaYHAVkW1blRQE8U1sHb2hGC8Xz82S1llaSc36sHRPLVMOwB9 vAD+1z2jj1WaTm+pX8QepQBWMT5lnEmkiS8OltEn1rnD2CwNYsbCkvrJAlHrwbjQRPOaTdHBVCC k+huMwSGMnXMUZiSe2Sv81IwNNgZ8ZTTHAPsoppMFiumAzeIdaJLWmsMu4DJn4gBTnIB8HC+uJH OnkYT4FN X-Proofpoint-GUID: 6GglqSUCTuzHjOKxejU4ZhvhtpNX4tgV X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-08-12_04,2025-08-11_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 adultscore=0 malwarescore=0 impostorscore=0 bulkscore=0 phishscore=0 suspectscore=0 spamscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2508090015 Content-Type: text/plain; charset="utf-8" Introduce sysfs_read_ops as a wrapper, wrap sysfs read operations, for read= ing trace data from the TMC buffer. Reviewed-by: Mike Leach Signed-off-by: Jie Gan --- .../hwtracing/coresight/coresight-tmc-core.c | 50 +++++++++---------- drivers/hwtracing/coresight/coresight-tmc.h | 18 +++++++ 2 files changed, 41 insertions(+), 27 deletions(-) diff --git a/drivers/hwtracing/coresight/coresight-tmc-core.c b/drivers/hwt= racing/coresight/coresight-tmc-core.c index 4d249af93097..23c8e903a474 100644 --- a/drivers/hwtracing/coresight/coresight-tmc-core.c +++ b/drivers/hwtracing/coresight/coresight-tmc-core.c @@ -232,17 +232,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->read_ops) + ret =3D drvdata->read_ops->read_prepare(drvdata); + else ret =3D -EINVAL; - } =20 if (!ret) dev_dbg(&drvdata->csdev->dev, "TMC read start\n"); @@ -254,17 +247,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->read_ops) + ret =3D drvdata->read_ops->read_unprepare(drvdata); + else ret =3D -EINVAL; - } =20 if (!ret) dev_dbg(&drvdata->csdev->dev, "TMC read end\n"); @@ -291,13 +277,8 @@ 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); - } + if (drvdata->read_ops) + return drvdata->read_ops->get_trace_data(drvdata, pos, len, bufpp); =20 return -EINVAL; } @@ -769,6 +750,18 @@ static void register_crash_dev_interface(struct tmc_dr= vdata *drvdata, "Valid crash tracedata found\n"); } =20 +static const struct sysfs_read_ops tmc_etb_sysfs_read_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 sysfs_read_ops tmc_etr_sysfs_read_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; @@ -818,6 +811,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 &etb_devs; + drvdata->read_ops =3D &tmc_etb_sysfs_read_ops; break; case TMC_CONFIG_TYPE_ETR: desc.groups =3D coresight_etr_groups; @@ -831,6 +825,7 @@ static int __tmc_probe(struct device *dev, struct resou= rce *res) mutex_init(&drvdata->idr_mutex); dev_list =3D &etr_devs; INIT_LIST_HEAD(&drvdata->etr_buf_list); + drvdata->read_ops =3D &tmc_etr_sysfs_read_ops; break; case TMC_CONFIG_TYPE_ETF: desc.groups =3D coresight_etf_groups; @@ -839,6 +834,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 &etf_devs; + drvdata->read_ops =3D &tmc_etb_sysfs_read_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 ca0cba860d5f..cf1b4e8ba80f 100644 --- a/drivers/hwtracing/coresight/coresight-tmc.h +++ b/drivers/hwtracing/coresight/coresight-tmc.h @@ -221,6 +221,9 @@ struct etr_buf_node { struct list_head node; }; =20 + +struct sysfs_read_ops; + /** * struct tmc_drvdata - specifics associated to an TMC component * @pclk: APB clock if present, otherwise NULL @@ -257,6 +260,7 @@ struct etr_buf_node { * Used by ETR/ETF. * @etr_buf_list: List that is used to manage allocated etr_buf. * @reading_node: Available buffer for byte-cntr reading. + * @tmc_read_ops: Read operations for TMC device. */ struct tmc_drvdata { struct clk *pclk; @@ -288,6 +292,20 @@ struct tmc_drvdata { struct tmc_resrv_buf crash_mdata; struct list_head etr_buf_list; struct etr_buf_node *reading_node; + const struct sysfs_read_ops *read_ops; +}; + +/** + * struct sysfs_read_ops - read operations for TMC and its helper devices + * @read_prepare: prepare operation. + * @read_unprepare: unprepare operation. + * @get_trace_data: read operation. + */ +struct sysfs_read_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 Sat Oct 4 22:36:07 2025 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 59FD02E5B2B for ; Tue, 12 Aug 2025 08:38:14 +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=1754987895; cv=none; b=i+fSqylYnId83fNyJ8UCu1CZQFe4DIUlr/OWAMonzGjyY4BG9U6mG2vI9TjUsVHwuAwCgZMLre7J6D+RYqNms30zt6xmPJBw+YPMXRGi3CHD9Npn6Nda1U7382ib7Ot/qS7DuYdTdAxRBrKTiZZwoMMP7sfq6V1gRuCKJy1Fxs8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754987895; c=relaxed/simple; bh=/g0/ZP4wHtHkgn87d1qyuSHaHZRS6iAOtiw3E5bQBKQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=dN4xBmDcKeNIyT5zz3iXmA+ztjESVXTb1HViuLarIf8Ri6Iu5jwAb92F8XU0EZEg2RQBjT9palYuyEJS7vcXC3gHLqW5jcKGPBMEc8eAZdCiJZeHJ9+Om/tBdsa2tr1z7ii2JFRTEn3xNxbAsRaC7L/khGec7rDuYrL5huUX58M= 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=IN8uN/Dt; 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="IN8uN/Dt" Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 57C5MFi5013072 for ; Tue, 12 Aug 2025 08:38:13 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=0SmpNFp+B8v w9+MbCCEs5ee5DB9AM9lfQmDfPKr7t7U=; b=IN8uN/DtQg/dumPK03u2KI7sh2W MDnlx8MgYFxExuf6GYBInpzJaU2cNtvwytNgVdcwgrE2QMrm3m2AeLm66R8g9YyE ANAwosSIErq20mnpnYjKB0uGBI8sPtIxEw8lh6Vxfj+c3Ile7sGrAFHPkOjukhqn IeOMhcNWPVKGuDil8jqGmKd9xtdcz4IzVP0Mb89ImdGnK4L1C2jPoZ2JVHRio3xG daxFPfFxfzKbC/jQ3GmsfiHpUZ5kxLIBwNEcl3PkJM/zmhrknBPAUYcq8KgPubwl 5xS/Q7HxYv32s4EDFH+IlC5OddYsIBAaHCP05lJW+K/zbUL77e+vfTJLqcw== 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 48dupmqjdx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Tue, 12 Aug 2025 08:38:13 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-240b9c0bddcso49400335ad.2 for ; Tue, 12 Aug 2025 01:38:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754987892; x=1755592692; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0SmpNFp+B8vw9+MbCCEs5ee5DB9AM9lfQmDfPKr7t7U=; b=BVTrY+bayWsPdte2nacOewtu1NCe99rwdY7qlIL+NTWz0QL2yON/3UdRzHjkkHxq7+ SFZnwCgp7N6ImH1lSuPB+ctrM6xE2nq0/0zAZVUwoxqKab1840vB0rZLPasYx/BJKd2e 5WBjqVHwfvZktNrMqr2AK/OuCio6fdZghVhiLT5N/9ej5OIP14Mk19WJvj1efIG+NY6Z /QGfYDmyERhIbwk3qu+I9s3P/EtRMwMMfIEP3AxCgtd3O/d6LRMER2D3HANpvsLsQ19u 7HVqiZEgqt//fop4DRW3Voh4d2cqi22kx/DEZMZqN2YDOv4s24qBGD1vkiRflpxLrRRd 6QUQ== X-Forwarded-Encrypted: i=1; AJvYcCWF7aojWlR9+og5CqCDOjZcRNlvIDe0ndqlCkCS0df0EDnQSDC3AC9gZ6vk+zBdOID/iAa1Rikna0qUYcw=@vger.kernel.org X-Gm-Message-State: AOJu0YyIdtt6OuufuP8yW6sBZ7XroFULHAajhd9OUpKKZZ8vK6Oc83lf dELyJztKOwhAVhLeKIGg5mODdK++YutesgfHMDqX3aHXe+/Y7fo2Q6a73uAaFeB1oPTMiOKpXjZ rHUa9+lGXBwG9M3YMPiGX35l5VQnKWB+ux+0P4lVjTF3mezgDpka6DTdxZVxUxWn96EY= X-Gm-Gg: ASbGnctr7YEUKQZlzoHSFJsZKe3ZnAWATBBF/OdFEVO3gtvFIrH74jxmQg97SjNthxI lCcoLNXb1wWPpXN+ycpfm0CpluBIgQ8H0Y1EXDxz+/QxUHJAZSbidWV4R7A1AzWPJSpBi512QQi sgdipmFuefdFOilitGOZqY3etNU5H9i/iFNqdan3fMtPfe3Hy0gV+YBnLi11fYt1ngsBRjeK/6h pvs50/k1eM5p8jZU9GSrV7g7OZWK6tKjwEtvDlXGy0O2BQnPXhkRFlRwFrhB647FctYp0mgTZHx p4xqa5Fhwr7xnYIVnJhiM9PsFD9mg2ncgm0xiDB8ltNxZ64LLnyYUNcpUWZ+2sDMv/mbRejVs/7 XqoOWtVwemUD926r84x8= X-Received: by 2002:a17:903:1249:b0:240:3db8:9adc with SMTP id d9443c01a7336-242c1ffb202mr221272655ad.4.1754987892026; Tue, 12 Aug 2025 01:38:12 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGsrejQyQPUM/qvKCFw2RaISG2UWmCC1pkXJPCzFHH/tzSURwaSjJEvjHXBGqe+x2dQbAv5zA== X-Received: by 2002:a17:903:1249:b0:240:3db8:9adc with SMTP id d9443c01a7336-242c1ffb202mr221272155ad.4.1754987891561; Tue, 12 Aug 2025 01:38:11 -0700 (PDT) Received: from jiegan.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-243086849b3sm1915345ad.175.2025.08.12.01.38.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Aug 2025 01:38:11 -0700 (PDT) From: Jie Gan To: Suzuki K Poulose , Mike Leach , James Clark , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bjorn Andersson , Konrad Dybcio , Alexander Shishkin , Yuanfang Zhang , Mao Jinlong , Jie Gan , Tingwei Zhang 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, Krzysztof Kozlowski Subject: [PATCH v5 6/9] dt-bindings: arm: add an interrupt property for Coresight CTCU Date: Tue, 12 Aug 2025 16:37:28 +0800 Message-Id: <20250812083731.549-7-jie.gan@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250812083731.549-1-jie.gan@oss.qualcomm.com> References: <20250812083731.549-1-jie.gan@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=bY5rUPPB c=1 sm=1 tr=0 ts=689afd75 cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=2OwXVqhp2XgA:10 a=KKAkSRfTAAAA:8 a=EUspDBNiAAAA:8 a=gSyxy6DGYGa4b6s9XCEA:9 a=1OuFwYUASf3TG4hYMiVC:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: J1y36SInQjV_24xmhDHn3lB5VYMPPBi8 X-Proofpoint-ORIG-GUID: J1y36SInQjV_24xmhDHn3lB5VYMPPBi8 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwODA5MDAwMCBTYWx0ZWRfX9dVSDBdpvncV ozO2ciX8Q8xLw38/AdTUEhGyVuvAJ6Ge67y+MvSmLcbE5Tw+Jaca8AnEPCrJkcVseD8Uv7Mly3J l8QxgQW9zU+qNgsbOsVOM84s9iZcPQfmfV5/o8ZQcKlkAN+R8m/OlNFYu8zJ1njtHqqSnRz5N1P K96YY7HxmghtqmJ9nSpJqleUWuV1Kx/ZxSZ6whv6Bj2vFnhxDKD8qbB5x8xwYxwKwBM1GN/r/s/ C+TjOZ0t6PaZhLMDfgkl8jaoXchz2xw0zE0J3Vz11ZPc1+adPAyuQ0x2cOrdab0QHZQV3qdHWLr MkJlrm1rqlZSeiBDev6UC3siqE8xnmbrUf40Egdp4fGuS+TUhAbvJZFoMom3tlUR0qz3x7nirFv HehjCj9n X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-08-12_04,2025-08-11_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 malwarescore=0 bulkscore=0 impostorscore=0 priorityscore=1501 spamscore=0 clxscore=1015 phishscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2508090000 Content-Type: text/plain; charset="utf-8" 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 Signed-off-by: Jie Gan --- .../bindings/arm/qcom,coresight-ctcu.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Documentation/devicetree/bindings/arm/qcom,coresight-ctcu.yaml= b/Documentation/devicetree/bindings/arm/qcom,coresight-ctcu.yaml index 843b52eaf872..ea05ad8f3dd3 100644 --- a/Documentation/devicetree/bindings/arm/qcom,coresight-ctcu.yaml +++ b/Documentation/devicetree/bindings/arm/qcom,coresight-ctcu.yaml @@ -39,6 +39,16 @@ properties: items: - const: apb =20 + interrupts: + items: + - description: Byte cntr interrupt for etr0 + - description: Byte cntr interrupt for etr1 + + interrupt-names: + items: + - const: etr0 + - const: etr1 + in-ports: $ref: /schemas/graph.yaml#/properties/ports =20 @@ -56,6 +66,8 @@ additionalProperties: false =20 examples: - | + #include + ctcu@1001000 { compatible =3D "qcom,sa8775p-ctcu"; reg =3D <0x1001000 0x1000>; @@ -63,6 +75,11 @@ examples: clocks =3D <&aoss_qmp>; clock-names =3D "apb"; =20 + interrupts =3D , + ; + interrupt-names =3D "etr0", + "etr1"; + in-ports { #address-cells =3D <1>; #size-cells =3D <0>; --=20 2.34.1 From nobody Sat Oct 4 22:36:07 2025 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 9F5BF2E975F for ; Tue, 12 Aug 2025 08:38:20 +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=1754987902; cv=none; b=Scunz5njePznqw0IrkTBVvEFFwzIhgK5YxvVYh7AUr8/PHgMjZyXRQBBPhWa4SfcnWffQF8ora2CV1H845smZqWQLi+bMEftc+QvItbK5bEpLEW1Bggd7AIlM9ufwQ3R1Ik2Msr0tNrJQGR7ljKP5333K6TzB8VwbuQSXxzHo80= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754987902; c=relaxed/simple; bh=jvReL4TTXqHFRSwVLtjS15HrepqoApKNl8CXXlBdCrU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=PbCS1e4TtLCgiPUtENCkeNDcMciQ6YPj/tLf/y0YqDjwWk8/dPliNyZyOZ5x9itzaVJCygDYOQUt4esVgIUvjKHRQSlCTpFbE/cr53aYKNWTPRLW3iR4EAnbRerqw08U2KLm/WczgoPTE84VdDq+30ZqgnoQUBkR6KgfZ+RLhsQ= 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=TViUoVdz; 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="TViUoVdz" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 57C5PW1h019268 for ; Tue, 12 Aug 2025 08:38:19 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=sV8AvFyKpWF dsvPfGk+nc9feORWFOT1mgtd/u131riM=; b=TViUoVdzk++peqx/BRWz8N/N8bm jRjoE9fpVX8keC3+EUh3Xkv08YKNTgJ+7IXzqQRSRcD0mcQ40jzZd47kV/mJJ63O REu9goVnJILEGGoOAbfUY3SWYGsWnUGagivYbprfEVT06cE9rvIo/wF/xZ3Mdy5G SFQEdeVn33HKwV6rM0BqzmliXGtIFT7LYqPH9B7LyC+02C6IDRFt7+zQuVRp8ZJg FS8cluverufvpn2XYQj2TUJn/q27kiTI62nMCbZWy6ok5usuAg7TZJKQ1/oSeJTR eP3lNVmL4ie/bQ6t6cXdCGhpdUSidBX7oB0B3JL/iJXX4WEWB5Kd8Ncz6Nw== 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 48dxduydye-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Tue, 12 Aug 2025 08:38:19 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-23fe26e5a33so79445575ad.3 for ; Tue, 12 Aug 2025 01:38:19 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754987898; x=1755592698; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sV8AvFyKpWFdsvPfGk+nc9feORWFOT1mgtd/u131riM=; b=uDxZDAxfZiFUL6cdU/h40j6rKfV5FwbeBaZOmCDR7Ra6RSsJc9p+edcb+SWyAzBEM/ 2bcMrdiSbU54S2HtW6xw60SlMrQvENeUeqRkETYExP54851zPTDorHh8u6Sy6EbKwdil RRj8OUAzYQE7udK74PBEmSep6C8zOAwWflr7us3OpX8xQnYU9kCowUiwDfm00iOdPucz 46bhBXjPKsowhORcnwsRtdyr6QsCiiKKM+C3QJhno1OUxwvjlqdnUCX9l9y3yB5jYtqT ZUBuzQAothh7zMQUiO7WK7qujTkJ24WuL5tV/XdH45xnoOm6X/F0ECGY4zfJenbV5OmJ kHow== X-Forwarded-Encrypted: i=1; AJvYcCVXvu2mXthObUAx2gT4GKKDNzYtAAGq+m2sNjhRD7+ZvUmNUB7FccbH7GTOI4y4SpsjKbZyXPLt3cUoe9M=@vger.kernel.org X-Gm-Message-State: AOJu0YzYNtFkLYAUy9wmX+ObedI/h1mN/eDB08kC/C/+eUCNMbrwJwK/ WBSh8jVwRRX0R2kBk+4IGB9Bgdgwbm7bM49s8N/mX89FneW83saeUFGCc+0yny27T3K4EagrtO7 2pFsoAAVB1V2t+SDmXTOgsf+hXe+B21UGecZ2S8mGGzEEstsYlSKMkadujTxT6FixFHg= X-Gm-Gg: ASbGncvnnKYN3t/iSbWgUALn8wcOzUA2oSUMDG/gZAZUVzOJJaeP3HLf4qD5gNuV302 1U+QxBkf7nYa8YcqzAlEyeVDM5PepeVpAmGJnSmvUjvFay6UKuErW10nSc6c0hVajoi4rC9vM06 /F/wY2xBECM9yJunORsU7Igo9JfGQ4yqplOko4GIfECiaUQb+WHR8Z5qiXMfFxda4Wem5yn6Exx VEhqmYywn8jIq6A83W2g1BDbno1oGxjo3RG0/iZjnamhRleGBlWZTHYUuMvampnub9plPH7uHGy ZbL0bNkmiFU9tkToa0SeIuyXPZ2sGgJDfXGgKN6PP/5X/2pa0vQhmgPS24ndT7KreZ5yIg3iDKA 9vqjjzRGPWi12xTBjxf8= X-Received: by 2002:a17:902:ce8b:b0:240:80f:a4b6 with SMTP id d9443c01a7336-242fc207c8fmr31083865ad.4.1754987898021; Tue, 12 Aug 2025 01:38:18 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHHehwDw6fiJQjdiZPUkkJPkF//3umK6LlywRy+NL9VO4hADT3au0uwCF3zf3kWXNyxiup8tw== X-Received: by 2002:a17:902:ce8b:b0:240:80f:a4b6 with SMTP id d9443c01a7336-242fc207c8fmr31083505ad.4.1754987897379; Tue, 12 Aug 2025 01:38:17 -0700 (PDT) Received: from jiegan.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-243086849b3sm1915345ad.175.2025.08.12.01.38.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Aug 2025 01:38:16 -0700 (PDT) From: Jie Gan To: Suzuki K Poulose , Mike Leach , James Clark , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bjorn Andersson , Konrad Dybcio , Alexander Shishkin , Yuanfang Zhang , Mao Jinlong , Jie Gan , Tingwei Zhang 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 Subject: [PATCH v5 7/9] coresight: ctcu: enable byte-cntr for TMC ETR devices Date: Tue, 12 Aug 2025 16:37:29 +0800 Message-Id: <20250812083731.549-8-jie.gan@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250812083731.549-1-jie.gan@oss.qualcomm.com> References: <20250812083731.549-1-jie.gan@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=IuYecK/g c=1 sm=1 tr=0 ts=689afd7b cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=2OwXVqhp2XgA:10 a=EUspDBNiAAAA:8 a=TrPPj8Ph-2G9coJyck8A:9 a=1OuFwYUASf3TG4hYMiVC:22 X-Proofpoint-ORIG-GUID: 9wul9wI6okx6uMjqh0fzYXmp-xjW8yYe X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwODA5MDAyNSBTYWx0ZWRfX9ho7+IfTxjjR Q2msmvsoBkeRzVFtiWxtoMBQyzqcpRwPkh4l+cMOOIztVSP4AJZLHzvHS+ev2z4DhOT6oQOtV0Z NeKMgS5rgrjE+irJiPXxaxudcxzrslliycI07YuHnOQ5NO3+PglZmfJN7gQ66WhT9XNX77+hPE1 n78OzIJhu5VaycnplhoG5y6QSd1w/9qKZTd/SCy0bbyBpk72zx0msX7IPvmDIFdQkxAbG6wO/9l N+AeyrPDUiLD2TsCwh5+AscKlX4ded7UUj2j3HkPS41CthJqtvDaUKgFH34CFBRS5cplD7HrUfi Kz6ShMzlGZ4igNNLzyNR7GmLLUE9MwLCu3VInGIujMFgZv1S1CjwxoHORxqnLCI1P7GVv0Mg9cb fDvEnTwB X-Proofpoint-GUID: 9wul9wI6okx6uMjqh0fzYXmp-xjW8yYe X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-08-12_04,2025-08-11_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 malwarescore=0 spamscore=0 priorityscore=1501 adultscore=0 clxscore=1015 phishscore=0 suspectscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2508090025 Content-Type: text/plain; charset="utf-8" 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. Signed-off-by: Jie Gan --- .../testing/sysfs-bus-coresight-devices-ctcu | 5 + drivers/hwtracing/coresight/Makefile | 2 +- .../coresight/coresight-ctcu-byte-cntr.c | 368 ++++++++++++++++++ .../hwtracing/coresight/coresight-ctcu-core.c | 89 ++++- drivers/hwtracing/coresight/coresight-ctcu.h | 62 ++- .../hwtracing/coresight/coresight-tmc-etr.c | 16 + drivers/hwtracing/coresight/coresight-tmc.h | 2 + 7 files changed, 531 insertions(+), 13 deletions(-) create mode 100644 Documentation/ABI/testing/sysfs-bus-coresight-devices-c= tcu create mode 100644 drivers/hwtracing/coresight/coresight-ctcu-byte-cntr.c 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..a1fd93400baa --- /dev/null +++ b/Documentation/ABI/testing/sysfs-bus-coresight-devices-ctcu @@ -0,0 +1,5 @@ +What: /sys/bus/coresight/devices//irq_threshold +Date: August 2025 +KernelVersion: 6.17 +Contact: Tingwei Zhang ; Jinlong Ma= o ; Jie Gan +Description: (RW) Configure the IRQ value for byte-cntr register. 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..895d8c720183 --- /dev/null +++ b/drivers/hwtracing/coresight/coresight-ctcu-byte-cntr.c @@ -0,0 +1,368 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025 Qualcomm Innovation Center, Inc. All rights reserved. + */ + +#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_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); +} + +static void ctcu_cfg_byte_cntr_reg(struct tmc_drvdata *drvdata, u32 val, u= 32 offset) +{ + struct ctcu_drvdata *ctcu_drvdata; + struct coresight_device *helper; + + helper =3D coresight_get_helper(drvdata->csdev, CORESIGHT_DEV_SUBTYPE_HEL= PER_CTCU); + if (!helper) + return; + + ctcu_drvdata =3D dev_get_drvdata(helper->dev.parent); + /* A one value for IRQCTRL register represents 8 bytes */ + ctcu_program_register(ctcu_drvdata, val / 8, offset); +} + +static struct ctcu_byte_cntr *ctcu_get_byte_cntr_data(struct tmc_drvdata *= drvdata) +{ + struct ctcu_byte_cntr *byte_cntr_data; + struct ctcu_drvdata *ctcu_drvdata; + struct coresight_device *helper; + int port; + + helper =3D coresight_get_helper(drvdata->csdev, CORESIGHT_DEV_SUBTYPE_HEL= PER_CTCU); + if (!helper) + return NULL; + + port =3D coresight_get_in_port_dest(drvdata->csdev, helper); + if (port < 0) + return NULL; + + ctcu_drvdata =3D dev_get_drvdata(helper->dev.parent); + byte_cntr_data =3D &ctcu_drvdata->byte_cntr_data[port]; + return byte_cntr_data; +} + +static bool ctcu_byte_cntr_switch_buffer(struct tmc_drvdata *drvdata, + struct ctcu_byte_cntr *byte_cntr_data) +{ + struct etr_buf_node *nd, *next, *curr_node, *picked_node; + struct etr_buf *curr_buf =3D drvdata->sysfs_buf; + bool found_free_buf =3D false; + + if (WARN_ON(!drvdata || !byte_cntr_data)) + return found_free_buf; + + /* Stop the ETR before we start the switch */ + if (coresight_get_mode(drvdata->csdev) !=3D CS_MODE_DISABLED) + tmc_etr_disable_hw_before_switching(drvdata); + + list_for_each_entry_safe(nd, next, &drvdata->etr_buf_list, node) { + /* curr_buf is free for next round */ + if (nd->sysfs_buf =3D=3D curr_buf) { + nd->is_free =3D true; + curr_node =3D nd; + } + + if (!found_free_buf && nd->is_free && nd->sysfs_buf !=3D curr_buf) { + picked_node =3D nd; + found_free_buf =3D true; + } + } + + if (found_free_buf) { + curr_node->pos =3D 0; + drvdata->reading_node =3D curr_node; + drvdata->sysfs_buf =3D picked_node->sysfs_buf; + 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); + /* Reset rrp and rwp when the system has switched the buffer*/ + ctcu_reset_sysfs_buf(drvdata); + /* Restart the ETR when we find a free buffer */ + if (coresight_get_mode(drvdata->csdev) !=3D CS_MODE_DISABLED) + tmc_etr_enable_hw_after_switching(drvdata); + } + + 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 ctcu_byte_cntr_get_data(struct tmc_drvdata *drvdata, loff_t= pos, + size_t len, char **bufpp) +{ + struct etr_buf *sysfs_buf =3D drvdata->sysfs_buf; + struct device *dev =3D &drvdata->csdev->dev; + ssize_t actual, size =3D sysfs_buf->size; + struct ctcu_byte_cntr *byte_cntr_data; + size_t thresh_val; + atomic_t *irq_cnt; + int ret; + + byte_cntr_data =3D ctcu_get_byte_cntr_data(drvdata); + if (!byte_cntr_data) + return -EINVAL; + + thresh_val =3D byte_cntr_data->thresh_val; + irq_cnt =3D &byte_cntr_data->irq_cnt; + +wait_buffer: + if (!byte_cntr_data->reading_buf) { + ret =3D wait_event_interruptible_timeout(byte_cntr_data->wq, + ((atomic_read(irq_cnt) + 1) * thresh_val >=3D size) || + !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(drvdata, byte_cntr_data)) { + dev_err(dev, "Switch buffer failed for byte-cntr\n"); + return -EINVAL; + } + + byte_cntr_data->reading_buf =3D true; + } else { + /* + * TMC-ETR has been disabled, so directly reads data from + * the drvdata->sysfs_buf. + */ + actual =3D drvdata->read_ops->get_trace_data(drvdata, pos, len, bufpp); + if (actual > 0) { + byte_cntr_data->total_size +=3D actual; + return actual; + } + + /* Exit byte-cntr reading */ + return 0; + } + } + + /* Check the status of current etr_buf*/ + if ((atomic_read(irq_cnt) + 1) * thresh_val >=3D size) + /* + * Unlikely to find a free buffer to switch, so just disable + * the ETR for a while. + */ + if (!ctcu_byte_cntr_switch_buffer(drvdata, byte_cntr_data)) + dev_warn(dev, "No available buffer to store data, disable ETR\n"); + + pos =3D drvdata->reading_node->pos; + actual =3D drvdata->read_ops->get_trace_data(drvdata, pos, len, bufpp); + if (actual <=3D 0) { + /* Reset flags upon reading is finished or failed */ + byte_cntr_data->reading_buf =3D false; + drvdata->reading_node =3D NULL; + + /* + * Nothing in the buffer, waiting for the next buffer + * to be filled. + */ + if (actual =3D=3D 0) + goto wait_buffer; + } else + byte_cntr_data->total_size +=3D actual; + + return actual; +} + +static int ctcu_read_prepare_byte_cntr(struct tmc_drvdata *drvdata) +{ + struct ctcu_byte_cntr *byte_cntr_data; + unsigned long flags; + int ret =3D 0; + + /* config types are set a boot time and never change */ + if (WARN_ON_ONCE(drvdata->config_type !=3D TMC_CONFIG_TYPE_ETR)) + return -EINVAL; + + /* + * Byte counter reading should start only after the TMC-ETR has been + * enabled, which implies that the sysfs_buf has already been setup + * in drvdata. + */ + if (!drvdata->sysfs_buf) + return -EINVAL; + + byte_cntr_data =3D ctcu_get_byte_cntr_data(drvdata); + if (!byte_cntr_data) + return -EINVAL; + + /* + * The threshold value must not exceed the buffer size. + * A margin should be maintained between the two values to account + * for the time gap between the interrupt and buffer switching. + */ + if (byte_cntr_data->thresh_val + SZ_16K >=3D drvdata->size) { + dev_err(&drvdata->csdev->dev, "The threshold value is too large\n"); + return -EINVAL; + } + + raw_spin_lock_irqsave(&drvdata->spinlock, flags); + if (byte_cntr_data->reading) { + ret =3D -EBUSY; + goto out_unlock; + } + + byte_cntr_data->reading =3D true; + raw_spin_unlock_irqrestore(&drvdata->spinlock, flags); + /* Setup an available etr_buf_list for byte-cntr */ + ret =3D tmc_create_etr_buf_list(drvdata, 2); + if (ret) + goto out; + + raw_spin_lock_irqsave(&drvdata->spinlock, flags); + atomic_set(&byte_cntr_data->irq_cnt, 0); + /* Configure the byte-cntr register to enable IRQ */ + ctcu_cfg_byte_cntr_reg(drvdata, byte_cntr_data->thresh_val, + byte_cntr_data->irq_ctrl_offset); + enable_irq_wake(byte_cntr_data->irq); + byte_cntr_data->total_size =3D 0; + +out_unlock: + raw_spin_unlock_irqrestore(&drvdata->spinlock, flags); + +out: + return ret; +} + +static int ctcu_read_unprepare_byte_cntr(struct tmc_drvdata *drvdata) +{ + struct device *dev =3D &drvdata->csdev->dev; + struct ctcu_byte_cntr *byte_cntr_data; + unsigned long flags; + + byte_cntr_data =3D ctcu_get_byte_cntr_data(drvdata); + if (!byte_cntr_data) + return -EINVAL; + + raw_spin_lock_irqsave(&drvdata->spinlock, flags); + /* Configure the byte-cntr register to disable IRQ */ + ctcu_cfg_byte_cntr_reg(drvdata, 0, byte_cntr_data->irq_ctrl_offset); + disable_irq_wake(byte_cntr_data->irq); + byte_cntr_data->reading =3D false; + byte_cntr_data->reading_buf =3D false; + drvdata->reading_node =3D NULL; + raw_spin_unlock_irqrestore(&drvdata->spinlock, flags); + dev_dbg(dev, "send data total size:%llu bytes\n", byte_cntr_data->total_s= ize); + tmc_clean_etr_buf_list(drvdata); + + return 0; +} + +static const struct sysfs_read_ops byte_cntr_sysfs_read_ops =3D { + .read_prepare =3D ctcu_read_prepare_byte_cntr, + .read_unprepare =3D ctcu_read_unprepare_byte_cntr, + .get_trace_data =3D ctcu_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 ctcu_drvdata *drvdata =3D dev_get_drvdata(csdev->dev.parent); + struct coresight_device *sink =3D coresight_get_sink(path); + struct ctcu_byte_cntr *byte_cntr_data; + int port_num; + + if (!sink) + return; + + port_num =3D coresight_get_in_port_dest(sink, csdev); + if (port_num < 0) + return; + + byte_cntr_data =3D &drvdata->byte_cntr_data[port_num]; + /* Don't start byte-cntr function when threshold is not set. */ + if (!byte_cntr_data->thresh_val || byte_cntr_data->enable) + return; + + guard(raw_spinlock_irqsave)(&byte_cntr_data->spin_lock); + byte_cntr_data->enable =3D true; + byte_cntr_data->reading_buf =3D false; +} + +/* Stop the byte-cntr function when the path is disabled. */ +void ctcu_byte_cntr_stop(struct coresight_device *csdev, struct coresight_= path *path) +{ + struct ctcu_drvdata *drvdata =3D dev_get_drvdata(csdev->dev.parent); + struct coresight_device *sink =3D coresight_get_sink(path); + struct ctcu_byte_cntr *byte_cntr_data; + int port_num; + + if (!sink || coresight_get_mode(sink) =3D=3D CS_MODE_SYSFS) + return; + + port_num =3D coresight_get_in_port_dest(sink, csdev); + if (port_num < 0) + return; + + byte_cntr_data =3D &drvdata->byte_cntr_data[port_num]; + 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; + + drvdata->byte_cntr_sysfs_read_ops =3D &byte_cntr_sysfs_read_ops; + for (i =3D 0; i < etr_num; i++) { + byte_cntr_data =3D &drvdata->byte_cntr_data[i]; + irq_num =3D of_irq_get_byname(nd, byte_cntr_data->irq_name); + if (irq_num < 0) { + dev_err(dev, "Failed to get IRQ from DT for %s\n", + byte_cntr_data->irq_name); + 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 %s\n", + byte_cntr_data->irq_name); + continue; + } + + byte_cntr_data->irq =3D irq_num; + init_waitqueue_head(&byte_cntr_data->wq); + } +} diff --git a/drivers/hwtracing/coresight/coresight-ctcu-core.c b/drivers/hw= tracing/coresight/coresight-ctcu-core.c index 3bdedf041390..df02783e6e8f 100644 --- a/drivers/hwtracing/coresight/coresight-ctcu-core.c +++ b/drivers/hwtracing/coresight/coresight-ctcu-core.c @@ -15,6 +15,7 @@ #include #include #include +#include =20 #include "coresight-ctcu.h" #include "coresight-priv.h" @@ -45,17 +46,23 @@ DEFINE_CORESIGHT_DEVLIST(ctcu_devs, "ctcu"); =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, + .irq_name =3D "etr0", + .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, + .irq_name =3D "etr1", + .port_num =3D 1, }, }; =20 @@ -64,6 +71,71 @@ 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_threshold_show(struct device *dev, struct device_attrib= ute *attr, + char *buf) +{ + struct ctcu_drvdata *drvdata =3D dev_get_drvdata(dev->parent); + int i, len =3D 0; + + for (i =3D 0; i < ETR_MAX_NUM; i++) { + if (drvdata->byte_cntr_data[i].irq_ctrl_offset) + len +=3D scnprintf(buf + len, PAGE_SIZE - len, "%u ", + drvdata->byte_cntr_data[i].thresh_val); + } + + len +=3D scnprintf(buf + len, PAGE_SIZE - len, "\n"); + + return len; +} + +/* Program a valid value into IRQCTRL register will enable byte-cntr inter= rupt */ +static ssize_t irq_threshold_store(struct device *dev, struct device_attri= bute *attr, + const char *buf, size_t size) +{ + struct ctcu_drvdata *drvdata =3D dev_get_drvdata(dev->parent); + u32 thresh_vals[ETR_MAX_NUM] =3D { 0 }; + int num, i; + + num =3D sscanf(buf, "%i %i", &thresh_vals[0], &thresh_vals[1]); + if (num <=3D 0 || num > ETR_MAX_NUM) + return -EINVAL; + + /* Threshold 0 disables the interruption. */ + guard(raw_spinlock_irqsave)(&drvdata->spin_lock); + for (i =3D 0; i < num; i++) { + /* A small threshold will result in a large number of interruptions */ + if (thresh_vals[i] && thresh_vals[i] < SZ_4K) + return -EINVAL; + + if (drvdata->byte_cntr_data[i].irq_ctrl_offset) + drvdata->byte_cntr_data[i].thresh_val =3D thresh_vals[i]; + } + + return size; +} +static DEVICE_ATTR_RW(irq_threshold); + +static struct attribute *ctcu_attrs[] =3D { + &dev_attr_irq_threshold.attr, + NULL, +}; + +static struct attribute_group ctcu_attr_grp =3D { + .attrs =3D ctcu_attrs, +}; + +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) { @@ -143,6 +215,8 @@ static int ctcu_enable(struct coresight_device *csdev, = enum cs_mode mode, void * { struct coresight_path *path =3D (struct coresight_path *)data; =20 + ctcu_byte_cntr_start(csdev, path); + return ctcu_set_etr_traceid(csdev, path, true); } =20 @@ -150,6 +224,8 @@ static int ctcu_disable(struct coresight_device *csdev,= void *data) { struct coresight_path *path =3D (struct coresight_path *)data; =20 + ctcu_byte_cntr_stop(csdev, path); + return ctcu_set_etr_traceid(csdev, path, false); } =20 @@ -200,7 +276,11 @@ 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_name =3D etr_cfg->irq_name; + 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 @@ -212,6 +292,7 @@ static int ctcu_probe(struct platform_device *pdev) desc.subtype.helper_subtype =3D CORESIGHT_DEV_SUBTYPE_HELPER_CTCU; desc.pdata =3D pdata; desc.dev =3D dev; + desc.groups =3D ctcu_attr_grps; desc.ops =3D &ctcu_ops; desc.access =3D CSDEV_ACCESS_IOMEM(base); =20 diff --git a/drivers/hwtracing/coresight/coresight-ctcu.h b/drivers/hwtraci= ng/coresight/coresight-ctcu.h index e9594c38dd91..21938a201dbb 100644 --- a/drivers/hwtracing/coresight/coresight-ctcu.h +++ b/drivers/hwtracing/coresight/coresight-ctcu.h @@ -5,19 +5,28 @@ =20 #ifndef _CORESIGHT_CTCU_H #define _CORESIGHT_CTCU_H + +#include #include "coresight-trace-id.h" +#include "coresight-tmc.h" =20 /* Maximum number of supported ETR devices for a single CTCU. */ #define ETR_MAX_NUM 2 =20 +#define BYTE_CNTR_TIMEOUT (5 * HZ) + /** * 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. + * @irq_name: IRQ name in dt node. */ struct ctcu_etr_config { const u32 atid_offset; const u32 port_num; + const u32 irq_ctrl_offset; + const char *irq_name; }; =20 struct ctcu_config { @@ -25,15 +34,52 @@ 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. + * @reading: indicates that byte-cntr reading is started. + * @reading_buf: indicates that byte-cntr is reading data from the buffer. + * @thresh_val: threshold to trigger a interruption. + * @total_size: total size of transferred data. + * @irq: allocated number of the IRQ. + * @irq_cnt: IRQ count number for triggered interruptions. + * @wq: waitqueue for reading data from ETR buffer. + * @spin_lock: spinlock of byte_cntr_data. + * @irq_ctrl_offset: offset to the BYTECNTVAL Register. + * @irq_name: IRQ name defined in DT. + */ +struct ctcu_byte_cntr { + bool enable; + bool reading; + bool reading_buf; + u32 thresh_val; + u64 total_size; + 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; + const char *irq_name; +}; + +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]; + const struct sysfs_read_ops *byte_cntr_sysfs_read_ops; }; =20 +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-etr.c b/drivers/hwtr= acing/coresight/coresight-tmc-etr.c index ed15991b3217..adfb916d3927 100644 --- a/drivers/hwtracing/coresight/coresight-tmc-etr.c +++ b/drivers/hwtracing/coresight/coresight-tmc-etr.c @@ -1117,6 +1117,12 @@ static int __tmc_etr_enable_hw(struct tmc_drvdata *d= rvdata) return rc; } =20 +int tmc_etr_enable_hw_after_switching(struct tmc_drvdata *drvdata) +{ + return __tmc_etr_enable_hw(drvdata); +} +EXPORT_SYMBOL_GPL(tmc_etr_enable_hw_after_switching); + static int tmc_etr_enable_hw(struct tmc_drvdata *drvdata, struct etr_buf *etr_buf) { @@ -1163,6 +1169,10 @@ ssize_t tmc_etr_get_sysfs_trace(struct tmc_drvdata *= drvdata, ssize_t actual =3D len; struct etr_buf *etr_buf =3D drvdata->sysfs_buf; =20 + /* Reading the buffer from the buf_node if it exists*/ + if (drvdata->reading_node) + etr_buf =3D drvdata->reading_node->sysfs_buf; + if (pos + actual > etr_buf->len) actual =3D etr_buf->len - pos; if (actual <=3D 0) @@ -1226,6 +1236,12 @@ static void __tmc_etr_disable_hw(struct tmc_drvdata = *drvdata) =20 } =20 +void tmc_etr_disable_hw_before_switching(struct tmc_drvdata *drvdata) +{ + __tmc_etr_disable_hw(drvdata); +} +EXPORT_SYMBOL_GPL(tmc_etr_disable_hw_before_switching); + void tmc_etr_disable_hw(struct tmc_drvdata *drvdata) { __tmc_etr_disable_hw(drvdata); diff --git a/drivers/hwtracing/coresight/coresight-tmc.h b/drivers/hwtracin= g/coresight/coresight-tmc.h index cf1b4e8ba80f..69f80cd55b13 100644 --- a/drivers/hwtracing/coresight/coresight-tmc.h +++ b/drivers/hwtracing/coresight/coresight-tmc.h @@ -479,5 +479,7 @@ struct etr_buf *tmc_etr_get_buffer(struct coresight_dev= ice *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); +int tmc_etr_enable_hw_after_switching(struct tmc_drvdata *drvdata); +void tmc_etr_disable_hw_before_switching(struct tmc_drvdata *drvdata); =20 #endif --=20 2.34.1 From nobody Sat Oct 4 22:36:07 2025 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 607F02EA15D for ; Tue, 12 Aug 2025 08:38:25 +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=1754987906; cv=none; b=UgKWi+PmRVNLhCMvFjvi8xDE267uKbG+9opC6IMdd9d2Kf05FHEy4lu3y5twi1XvOfk4t9tWYip9dnZaB3K4l6ClIm9VJ5Ih6qNYE3JVp6O6aA//cr1//lUKYED6NUjCAVn08NO2Ymy0BKx6UAT8Q15t8SJHxMLjvTjic4zHWQg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754987906; c=relaxed/simple; bh=4oVqUrDKt37G+H9HcLVCziP9hzKvHfxFZDRDsBbG1RM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=AAPrzNikFzxj4qU819Zf/cLxwmHt8P6sKqDr4l13tplBBNqbPpwpB5dmyLH4jLmtWK/tv8aAd+9ovqDQ+Eorbv/2xAsRic+4ixczWpzZogffDVLB66sSAwCraYOo9h/MO3m8UXQrINuwzavP7RAuMaHZe+w67IzG36+cJtl/jFQ= 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=a5pevnTZ; 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="a5pevnTZ" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 57C6uRh1008406 for ; Tue, 12 Aug 2025 08:38:24 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=1OcyQpnD9L7 5XnG1ZEvfUt6LUJDwDhLDEI4FIuyjCj4=; b=a5pevnTZH+PdV73g24zMsrn9Dw2 XzUZ5+8VQOvMK1susE0wRnqjdjsSXr2ft7DhljR0NbG2kRvqPF1XD2Wm4ShgTCcV xNgh3Ks2AZIh/LWHLjFO3eE91ADkA9i7ULeTkJDx7fv+Ar5TIoA89C1bi+mL6ryV 31OGuP4B6/M2owYdfezoNKusCtSwYZl2mtHWKiEm3nmHO82AAbIsb+hkA8Q/Zs4n jiGxihtNzy1tWM7cNMYmfJuVojZI7fNE3wchvvjlenHjh/gzOTvgumKcBGfaRez9 tEn9dIzJEpf3GtQi+RVhm5A3VfWPQ5W63mra1NYjRpOn5GIYaV4veGThb7A== 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 48ffhjk8rk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Tue, 12 Aug 2025 08:38:24 +0000 (GMT) Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-b2c36951518so2467574a12.2 for ; Tue, 12 Aug 2025 01:38:24 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754987903; x=1755592703; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1OcyQpnD9L75XnG1ZEvfUt6LUJDwDhLDEI4FIuyjCj4=; b=HOycE1CTnhe1BYDmUJmMZ8FBotYQy00RZ2+u45id2gRyIBb5CVn89Hh/BoafrWyac0 ZfBZ9BX/tPDs5j5C1WoAdG7pMyT0pBm2/wgf/17/50iHHFGmromi69rmG8cz78l9fEtW h9AL6oEl5Il/SbKhxk2Xzra2smjjidy+EtzwjVTvjbGTuuIYJs/nJU2A2F+B1cfczK4t 6lKVpaMjYTjsic49evn6XiInoZXEBLeF8Ny7xy1+8KobHBJ69BU8WmSWYk9UtBFh9Q0u XlUkdqtDyk1CsNlrycKPHZAqQB0c1btkYXeWly5lVJE1ewghTHjVJGL6eRpYb01fTOGi H2oA== X-Forwarded-Encrypted: i=1; AJvYcCVHWzKECRkqXsCSHf3/tvQqxPkIzOWkG3OhgROvUDjaElmkFq7vgfurmkFtKqc+Uve/d0xJpza7rZfeRNQ=@vger.kernel.org X-Gm-Message-State: AOJu0YyH/gF35WtfgtSuDm7FM4ID3iK0zRyMGXa1Yi3G/07BxfIb1l58 7kRQmw+kYH0FSCq8x+Ku897rzCNNN211QGYXoMhgrA+qoSFzDBycXLeeX6uZgIZS9AY2tU3AsrZ 2svoVzSjZIj0PIq1ZHINhxMByN6sChllFLiLX3U+kqHyJnnGLjmWLh0A1ZZZdls4bKXk= X-Gm-Gg: ASbGncuk/TogJxUoRSmF9k7InARV0KILjkTp15AT4iZT0fadgMNqOG94camfOGUEGH7 rLVYgRSnFdJgkQwQJ68jacnePNI22N3YgjEImPeHZ+QT11YojrFIj6D3o5sdN9oB87PvXlLc2qo NfFcnNsV6fbQyz8iRCs9nt/mvAkWXyF74bxcL7QMhdhyMP/tyuHRpDTSN7SU0MD2Aq5sY50xfJL M21bBSeRaDj3SKxv8vux+NfNKLzycBGCiq5NKgTfQjtQRAnkJD/McDxerS/s/edaKYYT3SnR8FP S7HYWPR5wUg47o5la7MRkWFLj6dlM0i2JuKju4Mp6jbHaOSHUNsdbMJVLc5GoOmbXbC15E4iIDz +BHOXsSfnJ3fNRtRj9iQ= X-Received: by 2002:a17:902:e88c:b0:242:6f41:2351 with SMTP id d9443c01a7336-242fc22867amr34513425ad.14.1754987903126; Tue, 12 Aug 2025 01:38:23 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFYNZy0KkiaMxYcwqChfC+6AbngjNQCRku5c0+99ujSBUHULsyDtiHI4rPOrktUm1IOA807SQ== X-Received: by 2002:a17:902:e88c:b0:242:6f41:2351 with SMTP id d9443c01a7336-242fc22867amr34513015ad.14.1754987902709; Tue, 12 Aug 2025 01:38:22 -0700 (PDT) Received: from jiegan.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-243086849b3sm1915345ad.175.2025.08.12.01.38.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Aug 2025 01:38:22 -0700 (PDT) From: Jie Gan To: Suzuki K Poulose , Mike Leach , James Clark , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bjorn Andersson , Konrad Dybcio , Alexander Shishkin , Yuanfang Zhang , Mao Jinlong , Jie Gan , Tingwei Zhang 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 Subject: [PATCH v5 8/9] coresight: tmc: integrate byte-cntr's read_ops with sysfs file_ops Date: Tue, 12 Aug 2025 16:37:30 +0800 Message-Id: <20250812083731.549-9-jie.gan@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250812083731.549-1-jie.gan@oss.qualcomm.com> References: <20250812083731.549-1-jie.gan@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwODExMDA3NCBTYWx0ZWRfX41P3ADqnSwpJ b6zxP1hQ/ML1hhodncUvnAYx6VUfhzIhkZbqfqg00wc/r1aUBNWYYZnUzhqoyF/zRmVphDgkKEi FW643KnfFkVYoEFA1k+YM9cyzORU7npljEQIhrdPNEIHNzDh9PZlKCfyrm4iAwhHV5DslWPgcJA 7dwyodk05OOmaezdJDn+LYW15wNrRzw4WksZNhz6Hc/KmGeqz9k5lWM58wxr9Qzk1vDgdIZtupO Ub4NN+iVjwQeos5rBGLhitSKlSn1jW7M8H+U1N6j9nueV687EiKJb6p4Ukr2IGv/9aFtU10bSoU 33Ki1DuMuC4fVNG348Zb7x7UPFa3Kb4Nnee4LswHH7TTtOVMXOy6/q5fIuwhhiN5FvWudLwXZg0 6/dL4GoF X-Proofpoint-GUID: TiwFtkuB0bnEJdVen1gjsptG59iu6aDl X-Authority-Analysis: v=2.4 cv=TJFFS0la c=1 sm=1 tr=0 ts=689afd80 cx=c_pps a=Oh5Dbbf/trHjhBongsHeRQ==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=2OwXVqhp2XgA:10 a=EUspDBNiAAAA:8 a=rDF8AtoJFDS1Q4XTlPQA:9 a=+jEqtf1s3R9VXZ0wqowq2kgwd+I=:19 a=_Vgx9l1VpLgwpw_dHYaR:22 X-Proofpoint-ORIG-GUID: TiwFtkuB0bnEJdVen1gjsptG59iu6aDl X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-08-12_04,2025-08-11_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 adultscore=0 impostorscore=0 malwarescore=0 phishscore=0 clxscore=1015 spamscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2508110074 Content-Type: text/plain; charset="utf-8" Add code logic to invoke byte-cntr's sysfs_read_ops if the byte-cntr is enabled. Signed-off-by: Jie Gan --- .../hwtracing/coresight/coresight-tmc-core.c | 53 ++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/drivers/hwtracing/coresight/coresight-tmc-core.c b/drivers/hwt= racing/coresight/coresight-tmc-core.c index 23c8e903a474..ff68b3edb7cf 100644 --- a/drivers/hwtracing/coresight/coresight-tmc-core.c +++ b/drivers/hwtracing/coresight/coresight-tmc-core.c @@ -31,6 +31,7 @@ =20 #include "coresight-priv.h" #include "coresight-tmc.h" +#include "coresight-ctcu.h" =20 DEFINE_CORESIGHT_DEVLIST(etb_devs, "tmc_etb"); DEFINE_CORESIGHT_DEVLIST(etf_devs, "tmc_etf"); @@ -228,15 +229,47 @@ static int tmc_prepare_crashdata(struct tmc_drvdata *= drvdata) return 0; } =20 +/* Return the byte-cntr's sysfs_read_ops if in use */ +static const struct sysfs_read_ops *tmc_qcom_byte_cntr_in_use(struct tmc_d= rvdata *drvdata) +{ + struct ctcu_byte_cntr *byte_cntr_data; + struct ctcu_drvdata *ctcu_drvdata; + struct coresight_device *helper; + int port; + + helper =3D coresight_get_helper(drvdata->csdev, CORESIGHT_DEV_SUBTYPE_HEL= PER_CTCU); + if (!helper) + return NULL; + + port =3D coresight_get_in_port_dest(drvdata->csdev, helper); + if (port < 0) + return NULL; + + ctcu_drvdata =3D dev_get_drvdata(helper->dev.parent); + byte_cntr_data =3D &ctcu_drvdata->byte_cntr_data[port]; + if (byte_cntr_data && byte_cntr_data->thresh_val) + return ctcu_drvdata->byte_cntr_sysfs_read_ops; + + return NULL; +} + static int tmc_read_prepare(struct tmc_drvdata *drvdata) { + const struct sysfs_read_ops *byte_cntr_sysfs_read_ops; int ret =3D 0; =20 + byte_cntr_sysfs_read_ops =3D tmc_qcom_byte_cntr_in_use(drvdata); + if (byte_cntr_sysfs_read_ops) { + ret =3D byte_cntr_sysfs_read_ops->read_prepare(drvdata); + goto out; + } + if (drvdata->read_ops) ret =3D drvdata->read_ops->read_prepare(drvdata); else ret =3D -EINVAL; =20 +out: if (!ret) dev_dbg(&drvdata->csdev->dev, "TMC read start\n"); =20 @@ -245,13 +278,21 @@ static int tmc_read_prepare(struct tmc_drvdata *drvda= ta) =20 static int tmc_read_unprepare(struct tmc_drvdata *drvdata) { + const struct sysfs_read_ops *byte_cntr_sysfs_read_ops; int ret =3D 0; =20 + byte_cntr_sysfs_read_ops =3D tmc_qcom_byte_cntr_in_use(drvdata); + if (byte_cntr_sysfs_read_ops) { + ret =3D byte_cntr_sysfs_read_ops->read_unprepare(drvdata); + goto out; + } + if (drvdata->read_ops) ret =3D drvdata->read_ops->read_unprepare(drvdata); else ret =3D -EINVAL; =20 +out: if (!ret) dev_dbg(&drvdata->csdev->dev, "TMC read end\n"); =20 @@ -277,6 +318,12 @@ 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) { + const struct sysfs_read_ops *byte_cntr_sysfs_read_ops; + + byte_cntr_sysfs_read_ops =3D tmc_qcom_byte_cntr_in_use(drvdata); + if (byte_cntr_sysfs_read_ops) + return byte_cntr_sysfs_read_ops->get_trace_data(drvdata, pos, len, bufpp= ); + if (drvdata->read_ops) return drvdata->read_ops->get_trace_data(drvdata, pos, len, bufpp); =20 @@ -300,7 +347,11 @@ static ssize_t tmc_read(struct file *file, char __user= *data, size_t len, return -EFAULT; } =20 - *ppos +=3D actual; + if (drvdata->reading_node) + drvdata->reading_node->pos +=3D actual; + else + *ppos +=3D actual; + dev_dbg(&drvdata->csdev->dev, "%zu bytes copied\n", actual); =20 return actual; --=20 2.34.1 From nobody Sat Oct 4 22:36:07 2025 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 DF81A2EA46A for ; Tue, 12 Aug 2025 08:38:30 +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=1754987912; cv=none; b=HeqdBunsOFIljuNhkuTYug3PlAPigT0N6DKoulIcPNLdNN11OnCsVabnZcd+oCqJUljALPjINItjn7vPxhBCyARnKoIAqZZyHWh4UU1k/xalHd1iHAxwnAo1RtVB1A1EDdXORWGb3QxA0U16xB1yvP+L+meaUHWFgNd1yutS9RY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754987912; c=relaxed/simple; bh=QuD88quV2+ZZSG71H8tKu1kO0ROT5crAafRmiD8dmdw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=FcpkxtK8qSreueRa8tsOs9myMS88Sci9B4PzurTyFZnZ7h97vj3oDDk9JlFygfi25ox+pEs3TAuElBfGNu29abx9EEmdp5/KbL/SVbfiDYJuLgNQUL90QNVWUGsKWS1j+WGfAKqRUrlPjwUlYUpEEmhdBkoGfH6YGT6yPWyFb3E= 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=hq2rRye0; 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="hq2rRye0" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 57C6V59J024514 for ; Tue, 12 Aug 2025 08:38:30 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=xKWmqQzdMPq FddVCcAzQVRWG47+T57+MG8ITHFHowHo=; b=hq2rRye0T9cHP5DKcQeKgSDynMa EIhBIA1peD1eXbwpJmswOQ/xwm6Zh/jBe9zEO6wsitSXbDaLF2ZPj6YAaV6XHiuB 7BNumW7iEfGa9OecXDNm4hYJ9wJ62wzMuAr39Wzejii/DWm3XH1Y3FJGhaldTHJY QYKX4bMIJKmCSQVpwljOb9O4XamLVrunA+Po5xxKayWqvVKpC07iVF8Um6uBjhpw UkBkFhfak2DSsIzwQf2i4okw/zJ32SASrOuJpnR8UEyFYYT6KiSXGA8PNr8hZCb4 pxSZ3yieZMhJr3cKjZa1/q1YNFn2llKsq5n05vE9VbKD8OcT41tqTl1xdJQ== Received: from mail-pj1-f70.google.com (mail-pj1-f70.google.com [209.85.216.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 48fem4beex-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Tue, 12 Aug 2025 08:38:29 +0000 (GMT) Received: by mail-pj1-f70.google.com with SMTP id 98e67ed59e1d1-31ed9a17f22so8798291a91.0 for ; Tue, 12 Aug 2025 01:38:29 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754987909; x=1755592709; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=xKWmqQzdMPqFddVCcAzQVRWG47+T57+MG8ITHFHowHo=; b=F2o55sHF+FkzrAus3oXR2quQiAYNjHbW0VktBv5+ZwR3wJjVX8CidHTaNIrHdYypw1 nb+X3ppaeNfTVbRfi8roZMdBlanCdEmEootrZoOMO4+bbTNGvbhA1zn9qDrVDaj32K3v i5yIzbA2NhwWFqmf8nFyeDOlWoL9JhkVKdEvtqwDTBG3qQYDdYqYDtHEhefRiWNcLeNY KM56xFUQt9T6+T8Bcd/6Q8buVuXONkG1XI0B+jO4ULJ7culTg2BONPKb1lwnjAfTYxUy YtCcaetJ18Eee8l9zthaaisvj4ReC7DrwItib/1OjU4vkE1ISGlE1c+rxv4eaAErpzJl r7mQ== X-Forwarded-Encrypted: i=1; AJvYcCWn1b+WQpcE2w4pgDBg1UG89DOOkVMthxsxYDyhxpuQhi5t8FpQvj1vTZdoueKvQk9oKo0MvZIybb8/qNs=@vger.kernel.org X-Gm-Message-State: AOJu0YwmNG8zDdXNa3dXkh1C0wYcDp5nIiwOrPvi7jRKZ9TPtSAf1FbA RKDE+HupDJhHySKm4mIbdktyvafCqcJBhtpWsMFS/qxj8ZmJlgNbCPedcPBk4Qn7tTZd4trIYq4 BDkWAMhMPtnz+8araVsfjM3KCNgqsTLQ4ZkLae1JHwGI26UZ0eIp4B65QFl9oln5HzPM= X-Gm-Gg: ASbGncuhTeOzg4tJyDjCYxWpB0P8NL7F4+NkVULAMbxC+FOmqQvfBVGqzszXA3/t7Hi DfCoacwVoC+IFScuRh+ezBGT36a4wWO4Od4UDIFBonUNSpQhSGlNKjOwktoCrqM0udrynk2b8zz FN4usTere/qfnGqA2tebVKnRcyQ7DlVsr0vumwKfe6VS3uCjdEFUSDFspPxQrGVHF/bm212DOGs UazZy4TY+FQ6GtaYErgNneGNwL8ffgqIb5aLHWWU/eWkiT+JaNHvXHA1Ov5uQsQm16cQ6+dF3qW 1bHf14NzKSR2csKNlgfKrHgttM7coTGoedZSuQ/Lvqtk3kUrlHl+JfNZRYNSwjXsrczkNfBelUz gSRh8XmAIPqfK0NLg7SY= X-Received: by 2002:a17:902:ccc2:b0:240:99d8:84 with SMTP id d9443c01a7336-242fc38ac30mr39407855ad.52.1754987908699; Tue, 12 Aug 2025 01:38:28 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHoUSP4uUhj7WlazCHA59ecFxrurDGloo1nWYrazR2qhQPlOy/gay3zElJWlYEMBfhndfzVmg== X-Received: by 2002:a17:902:ccc2:b0:240:99d8:84 with SMTP id d9443c01a7336-242fc38ac30mr39407435ad.52.1754987908254; Tue, 12 Aug 2025 01:38:28 -0700 (PDT) Received: from jiegan.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-243086849b3sm1915345ad.175.2025.08.12.01.38.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Aug 2025 01:38:27 -0700 (PDT) From: Jie Gan To: Suzuki K Poulose , Mike Leach , James Clark , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bjorn Andersson , Konrad Dybcio , Alexander Shishkin , Yuanfang Zhang , Mao Jinlong , Jie Gan , Tingwei Zhang 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, Konrad Dybcio Subject: [PATCH v5 9/9] arm64: dts: qcom: sa8775p: Add interrupts to CTCU device Date: Tue, 12 Aug 2025 16:37:31 +0800 Message-Id: <20250812083731.549-10-jie.gan@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250812083731.549-1-jie.gan@oss.qualcomm.com> References: <20250812083731.549-1-jie.gan@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: kZXuFuJnjvUWh7V_X1h6N_ouGKn3OKZl X-Proofpoint-ORIG-GUID: kZXuFuJnjvUWh7V_X1h6N_ouGKn3OKZl X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwODExMDA2OCBTYWx0ZWRfXyUsRcT0VgNA5 hb6itJqpUqeSOL0V8GP7z47UyRGqlUOTRx2jpBCxUQFYN/aBvtxaBKLRQziNhwxKDMMcGezG0QA HfQ1HR2Fu9CeReOAD3JA8pxk+OenFsvlF0e1L633H52FqcLH99FUh2QBd1TBSfYqvapal6oP64i B1Fo5JCswBEDSJhdOxWi5+qHL7w/ttpen3sZD4BKCDEGNwqmhLviUbqBQguGXFtGBRQrKSsanW3 taO9tUB5M2MtmHOMEHmzJEqtU/CCCiekCsbgoGKGOB/fmr79yjbspGOzwO5D53FKXaNEPSPs2nZ 5RuBYoUbVqYoRWknAScTAPTW2Ur4edUDUMvkCPmFiPf//mdPp7ZqLnSFuc4IvcebHlv+3i7aQps DRJmBAob X-Authority-Analysis: v=2.4 cv=YMafyQGx c=1 sm=1 tr=0 ts=689afd85 cx=c_pps a=0uOsjrqzRL749jD1oC5vDA==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=2OwXVqhp2XgA:10 a=EUspDBNiAAAA:8 a=gBkj9RZkAcI1HbXH1KoA:9 a=mQ_c8vxmzFEMiUWkPHU9:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-08-12_04,2025-08-11_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 clxscore=1015 priorityscore=1501 spamscore=0 suspectscore=0 adultscore=0 impostorscore=0 malwarescore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2508110068 Content-Type: text/plain; charset="utf-8" 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/sa8775p.dtsi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/arm64/boot/dts/qcom/sa8775p.dtsi b/arch/arm64/boot/dts/qc= om/sa8775p.dtsi index 9997a29901f5..4e6684a6d38e 100644 --- a/arch/arm64/boot/dts/qcom/sa8775p.dtsi +++ b/arch/arm64/boot/dts/qcom/sa8775p.dtsi @@ -2762,6 +2762,11 @@ ctcu@4001000 { clocks =3D <&aoss_qmp>; clock-names =3D "apb"; =20 + interrupts =3D , + ; + interrupt-names =3D "etr0", + "etr1"; + in-ports { #address-cells =3D <1>; #size-cells =3D <0>; --=20 2.34.1