From nobody Thu Nov 21 14:31:20 2024 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 E32491C9B98; Thu, 21 Nov 2024 06:29:44 +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=1732170586; cv=none; b=r6mbb2ZTop/Aqtl062d9TUVzwmZvj36UDq7XJ9lnPXELIt5kj42oaEGRjRDA92n/zE2UBNJQ34iMW8/vZVOMx3pLg72TtG62saQJ/P8UKNe1pjhxH7qlh0I6Bd1pkIvDjZzMFUUSCoBIQJeaWD3Bisvue8y4LRHg++H4pMzzHLc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1732170586; c=relaxed/simple; bh=tW6lYfDQgWTzkIZNrcEony2IMOCr5u+WoYAYNqXNnNg=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=uy3HRvA+4AAekoIH6zZN1l9QGQGoe6KgR2AEeH8qcv5axTH2ddKAS6TyFcGVGS5dzzdRt8QFMYGIPE6lyMXjvSit6iv/weMarpX2MwMYkIuM9tp+VhlHfCkq/eLLACNaY08optzsSCAMtI2yudJxrPrR8/5AycGRGvpuwYIK3I8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com; spf=pass smtp.mailfrom=quicinc.com; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b=e1tqEh07; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=quicinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="e1tqEh07" Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 4AKKSNM5003971; Thu, 21 Nov 2024 06:29:27 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h= cc:content-type:date:from:in-reply-to:message-id:mime-version :references:subject:to; s=qcppdkim1; bh=r7QGRJT45n0T5+Wc2ENAMTJg AWENYDW4gQh9c7sFtMA=; b=e1tqEh07ncsSPIDTj0OtsSCjsGJHI79/+o33X2i7 MC6s0rHZZrfEtECwEZ65pOGaOFyrz69gXFU4bP4YhYGL2RHO8XOIxkHUsfzFW05u 0I3Bn/vF6DQZifcSC27fTGyT7grqC570OEJXvONeVjIY1mTBROtYrnP6kWaQsWtn QQUWZt13PsubGvAtbDsQT7UJDy+UDD49EnS5/W0Ho/r66ZBL34VlnywzsDzxKZdw 3a7rwtcGrFFUIm6B+4OBZg/O/FJtbAhoAhpqurs0gaxu6dz3jT+DFeELjeFkbGBr i7vdLmVpIDJJp4ZPVizMs6dNavQ5i6xXapLKVXamGYOzSg== Received: from nalasppmta01.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 431ce3axp8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 21 Nov 2024 06:29:27 +0000 (GMT) Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com [10.47.209.196]) by NALASPPMTA01.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id 4AL6TQmh025550 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 21 Nov 2024 06:29:26 GMT Received: from jinlmao-gv.qualcomm.com (10.80.80.8) by nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.9; Wed, 20 Nov 2024 22:29:22 -0800 From: Mao Jinlong To: Suzuki K Poulose , Mike Leach , James Clark , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Mao Jinlong , "Alexander Shishkin" CC: , , , , Subject: [PATCH v7 1/3] dt-bindings: arm: Add arm,static-trace-id for coresight dummy source Date: Thu, 21 Nov 2024 14:28:27 +0800 Message-ID: <20241121062829.11571-2-quic_jinlmao@quicinc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20241121062829.11571-1-quic_jinlmao@quicinc.com> References: <20241121062829.11571-1-quic_jinlmao@quicinc.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nalasex01a.na.qualcomm.com (10.47.209.196) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: noefrPb6PaVQEMUMK35Xlg45owA5jzaz X-Proofpoint-ORIG-GUID: noefrPb6PaVQEMUMK35Xlg45owA5jzaz X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.60.29 definitions=2024-09-06_09,2024-09-06_01,2024-09-02_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 malwarescore=0 clxscore=1015 priorityscore=1501 impostorscore=0 bulkscore=0 mlxscore=0 adultscore=0 spamscore=0 mlxlogscore=926 suspectscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2409260000 definitions=main-2411210048 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Some dummy source HW has static trace id which cannot be changed via software programming. Add arm,static-trace-id for static id support to coresight dummy source. Signed-off-by: Mao Jinlong Reviewed-by: Rob Herring (Arm) Reviewed-by: Mike Leach --- .../devicetree/bindings/arm/arm,coresight-dummy-source.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Documentation/devicetree/bindings/arm/arm,coresight-dummy-sour= ce.yaml b/Documentation/devicetree/bindings/arm/arm,coresight-dummy-source.= yaml index 04a8c37b4aff..742dc4e25d3b 100644 --- a/Documentation/devicetree/bindings/arm/arm,coresight-dummy-source.yaml +++ b/Documentation/devicetree/bindings/arm/arm,coresight-dummy-source.yaml @@ -38,6 +38,12 @@ properties: enum: - arm,coresight-dummy-source =20 + arm,static-trace-id: + description: If dummy source needs static id support, use this to set = trace id. + $ref: /schemas/types.yaml#/definitions/uint32 + minimum: 1 + maximum: 111 + out-ports: $ref: /schemas/graph.yaml#/properties/ports =20 --=20 2.17.1 From nobody Thu Nov 21 14:31:20 2024 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 E0C8B3DBB6; Thu, 21 Nov 2024 06:29:41 +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=1732170583; cv=none; b=YY3i+9+AgiXNvx4dU5VCxwzaJ7h/NSDwQEYYnEX2h0Lxs8h4/AV24HTMgm7JTYMI1ABYJcAVLM1R7QOOdNguecYmPViyHolq0+w1tTrBU467Xstub5sZ1jjs32X352jw7IjIrgUsvvH7Kh2swQvYpTr/spXwNsAc14mVyMTRreA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1732170583; c=relaxed/simple; bh=SwPJe3iF9xmf6X48ja8JVh/1B7PQw9A5ie2GuqTOmaA=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=tqBsy/6OgtH7P+zB4DUuN+EjQdSlrRfzv7urh1l7IKY4Qvh4JWCmst3j1f83veOg202qqEBjJniGz/Ml+GcQNkbHsRB8ce9+OTx+vkQO9n2Mw6VckiC7plZfsRxJ5AvkZShnBU0FWwtV7X1C1s/bhGsCpUmVhyUK9gjLvgv+cgE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com; spf=pass smtp.mailfrom=quicinc.com; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b=NWm0wYn6; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=quicinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="NWm0wYn6" 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 4AKKwD7F007603; Thu, 21 Nov 2024 06:29:32 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h= cc:content-type:date:from:in-reply-to:message-id:mime-version :references:subject:to; s=qcppdkim1; bh=yiteIrukDnU6un4jtLQ0C/js F8RJG79T7zmFyKbyjU8=; b=NWm0wYn6FeHTyZsTGF2RS0clSnm5ARWNVHVlFlqj cmNMfbVwz00zL4D+1q0cZ1I7E4DLNMKGQpJ638T9XY4Xcvry6W+8lAHfFAsUz4P0 bEiiF62I1WoTMnHUZOb0Fq6RqSUyZNGsUCPUBQkPU+2i2es1WwinG32KB0k4dIVM G/Vjga2yhKPFitgPjWhAiwIpEDHDHrU1Wd4/2jA+kpOhpvC8gwuk/gpvuKuw4zDk w7KL7GOSVK/YJI1aVe6L+8oUQwbZE1fyTRrSsaOxlsxm+uV1xK52euTSmGHyXmde WEJpxUdfP1rHVBpnyi/8mzXnjmaiCF2pblJIxbXmRL7Xeg== Received: from nalasppmta04.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4318uvkery-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 21 Nov 2024 06:29:32 +0000 (GMT) Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com [10.47.209.196]) by NALASPPMTA04.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id 4AL6TVe1028317 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 21 Nov 2024 06:29:31 GMT Received: from jinlmao-gv.qualcomm.com (10.80.80.8) by nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.9; Wed, 20 Nov 2024 22:29:26 -0800 From: Mao Jinlong To: Suzuki K Poulose , Mike Leach , James Clark , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Mao Jinlong , "Alexander Shishkin" CC: , , , , Subject: [PATCH v7 2/3] coresight: Add support to get static id for system trace sources Date: Thu, 21 Nov 2024 14:28:28 +0800 Message-ID: <20241121062829.11571-3-quic_jinlmao@quicinc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20241121062829.11571-1-quic_jinlmao@quicinc.com> References: <20241121062829.11571-1-quic_jinlmao@quicinc.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nalasex01a.na.qualcomm.com (10.47.209.196) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-ORIG-GUID: gIu36xhNHhFMBGAearw22Dpz9a80Dftw X-Proofpoint-GUID: gIu36xhNHhFMBGAearw22Dpz9a80Dftw X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.60.29 definitions=2024-09-06_09,2024-09-06_01,2024-09-02_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 bulkscore=0 priorityscore=1501 phishscore=0 adultscore=0 malwarescore=0 mlxscore=0 lowpriorityscore=0 mlxlogscore=999 spamscore=0 suspectscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2409260000 definitions=main-2411210047 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Dynamic trace id was introduced in coresight subsystem, so trace id is allocated dynamically. However, some hardware ATB source has static trace id and it cannot be changed via software programming. For such source, it can call coresight_get_static_trace_id to get the fixed trace id from device node and pass id to coresight_trace_id_get_static_system_id to reserve the id. Signed-off-by: Mao Jinlong Reviewed-by: Mike Leach --- .../hwtracing/coresight/coresight-platform.c | 6 +++ .../hwtracing/coresight/coresight-trace-id.c | 43 +++++++++++++------ .../hwtracing/coresight/coresight-trace-id.h | 9 ++++ include/linux/coresight.h | 1 + 4 files changed, 47 insertions(+), 12 deletions(-) diff --git a/drivers/hwtracing/coresight/coresight-platform.c b/drivers/hwt= racing/coresight/coresight-platform.c index 64e171eaad82..633d96b9577a 100644 --- a/drivers/hwtracing/coresight/coresight-platform.c +++ b/drivers/hwtracing/coresight/coresight-platform.c @@ -796,6 +796,12 @@ int coresight_get_cpu(struct device *dev) } EXPORT_SYMBOL_GPL(coresight_get_cpu); =20 +int coresight_get_static_trace_id(struct device *dev, u32 *id) +{ + return fwnode_property_read_u32(dev_fwnode(dev), "arm,static-trace-id", i= d); +} +EXPORT_SYMBOL_GPL(coresight_get_static_trace_id); + struct coresight_platform_data * coresight_get_platform_data(struct device *dev) { diff --git a/drivers/hwtracing/coresight/coresight-trace-id.c b/drivers/hwt= racing/coresight/coresight-trace-id.c index d98e12cb30ec..378af743be45 100644 --- a/drivers/hwtracing/coresight/coresight-trace-id.c +++ b/drivers/hwtracing/coresight/coresight-trace-id.c @@ -12,6 +12,12 @@ =20 #include "coresight-trace-id.h" =20 +enum trace_id_flags { + TRACE_ID_ANY =3D 0x0, + TRACE_ID_PREFER_ODD =3D 0x1, + TRACE_ID_REQ_STATIC =3D 0x2, +}; + /* Default trace ID map. Used in sysfs mode and for system sources */ static DEFINE_PER_CPU(atomic_t, id_map_default_cpu_ids) =3D ATOMIC_INIT(0); static struct coresight_trace_id_map id_map_default =3D { @@ -74,21 +80,25 @@ static int coresight_trace_id_find_odd_id(struct coresi= ght_trace_id_map *id_map) * Otherwise allocate next available ID. */ static int coresight_trace_id_alloc_new_id(struct coresight_trace_id_map *= id_map, - int preferred_id, bool prefer_odd_id) + int preferred_id, unsigned int flags) { int id =3D 0; =20 /* for backwards compatibility, cpu IDs may use preferred value */ - if (IS_VALID_CS_TRACE_ID(preferred_id) && - !test_bit(preferred_id, id_map->used_ids)) { - id =3D preferred_id; - goto trace_id_allocated; - } else if (prefer_odd_id) { + if (IS_VALID_CS_TRACE_ID(preferred_id)) { + if (!test_bit(preferred_id, id_map->used_ids)) { + id =3D preferred_id; + goto trace_id_allocated; + } else if (flags & TRACE_ID_REQ_STATIC) + return -EBUSY; + } else if (flags & TRACE_ID_PREFER_ODD) { /* may use odd ids to avoid preferred legacy cpu IDs */ id =3D coresight_trace_id_find_odd_id(id_map); if (id) goto trace_id_allocated; - } + } else if (!IS_VALID_CS_TRACE_ID(preferred_id) && + (flags & TRACE_ID_REQ_STATIC)) + return -EINVAL; =20 /* * skip reserved bit 0, look at bitmap length of @@ -153,7 +163,7 @@ static int _coresight_trace_id_get_cpu_id(int cpu, stru= ct coresight_trace_id_map */ id =3D coresight_trace_id_alloc_new_id(id_map, CORESIGHT_LEGACY_CPU_TRACE_ID(cpu), - false); + TRACE_ID_ANY); if (!IS_VALID_CS_TRACE_ID(id)) goto get_cpu_id_out_unlock; =20 @@ -188,14 +198,14 @@ static void _coresight_trace_id_put_cpu_id(int cpu, s= truct coresight_trace_id_ma DUMP_ID_MAP(id_map); } =20 -static int coresight_trace_id_map_get_system_id(struct coresight_trace_id_= map *id_map) +static int coresight_trace_id_map_get_system_id(struct coresight_trace_id_= map *id_map, + int preferred_id, unsigned int traceid_flags) { unsigned long flags; int id; =20 spin_lock_irqsave(&id_map->lock, flags); - /* prefer odd IDs for system components to avoid legacy CPU IDS */ - id =3D coresight_trace_id_alloc_new_id(id_map, 0, true); + id =3D coresight_trace_id_alloc_new_id(id_map, preferred_id, traceid_flag= s); spin_unlock_irqrestore(&id_map->lock, flags); =20 DUMP_ID(id); @@ -255,10 +265,19 @@ EXPORT_SYMBOL_GPL(coresight_trace_id_read_cpu_id_map); =20 int coresight_trace_id_get_system_id(void) { - return coresight_trace_id_map_get_system_id(&id_map_default); + /* prefer odd IDs for system components to avoid legacy CPU IDS */ + return coresight_trace_id_map_get_system_id(&id_map_default, 0, + TRACE_ID_PREFER_ODD); } EXPORT_SYMBOL_GPL(coresight_trace_id_get_system_id); =20 +int coresight_trace_id_get_static_system_id(int trace_id) +{ + return coresight_trace_id_map_get_system_id(&id_map_default, + trace_id, TRACE_ID_REQ_STATIC); +} +EXPORT_SYMBOL_GPL(coresight_trace_id_get_static_system_id); + void coresight_trace_id_put_system_id(int id) { coresight_trace_id_map_put_system_id(&id_map_default, id); diff --git a/drivers/hwtracing/coresight/coresight-trace-id.h b/drivers/hwt= racing/coresight/coresight-trace-id.h index 9aae50a553ca..db68e1ec56b6 100644 --- a/drivers/hwtracing/coresight/coresight-trace-id.h +++ b/drivers/hwtracing/coresight/coresight-trace-id.h @@ -116,6 +116,15 @@ int coresight_trace_id_read_cpu_id_map(int cpu, struct= coresight_trace_id_map *i */ int coresight_trace_id_get_system_id(void); =20 +/** + * Allocate a CoreSight static trace ID for a system component. + * + * Used to allocate static IDs for system trace sources such as dummy sour= ce. + * + * return: Trace ID or -EINVAL if allocation is impossible. + */ +int coresight_trace_id_get_static_system_id(int id); + /** * Release an allocated system trace ID. * diff --git a/include/linux/coresight.h b/include/linux/coresight.h index c13342594278..129795873072 100644 --- a/include/linux/coresight.h +++ b/include/linux/coresight.h @@ -662,6 +662,7 @@ void coresight_relaxed_write64(struct coresight_device = *csdev, void coresight_write64(struct coresight_device *csdev, u64 val, u32 offset= ); =20 extern int coresight_get_cpu(struct device *dev); +extern int coresight_get_static_trace_id(struct device *dev, u32 *id); =20 struct coresight_platform_data *coresight_get_platform_data(struct device = *dev); struct coresight_connection * --=20 2.17.1 From nobody Thu Nov 21 14:31:20 2024 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 97E001CACE5; Thu, 21 Nov 2024 06:29:47 +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=1732170589; cv=none; b=MDpEy3VT4LRzesGrV/BGGeiE8jtRDu6ntQQME6r2n7UGAKxIe3XpGKmrhGW2wRWEAyT0PAjZWuOm2E6lkr9Z87KG57BfKOwIAWsO05aOI1bukFndA0XsRzdJMPzgu4cu3ZI/ruWbHVndyy2NbpEu5f2J39AcLOi4P7axAJOPMLw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1732170589; c=relaxed/simple; bh=02OMCjDTekeFkO4QlSzuys9GrA6Kbv2qsQpucTpXbrU=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=SYJ8VmPs88C4MfQLsp58qFKWWD3Xv7upLtBOmRr2Tgct+fIq9l52qqGZ7RtWL6Um2gMThQQ/Cw5MxpHJD5Y/MHkKxwWQsb0zHnkwxWO8ojLHXog/Xq8qqw8da1OZHXq8ntNGJBakMWXRPg6uqL4m4hS6ngzbf8Wdc+UHz+51i34= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com; spf=pass smtp.mailfrom=quicinc.com; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b=k2rqLQbv; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=quicinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="k2rqLQbv" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 4AKKMcR3026025; Thu, 21 Nov 2024 06:29:37 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h= cc:content-type:date:from:in-reply-to:message-id:mime-version :references:subject:to; s=qcppdkim1; bh=e8ywS48pvo0nbEefVW3/4wBu /FfDIT+pXFZkV8Shp4U=; b=k2rqLQbvYyHRu18bZsLZ/UfK5bWRsqTh8d7OyBRT nCXYp4372EASHhB4p6/qSr4soAn5Q8JeO3C8LtOSCw4qT3FO/d+GYdZjm4hPNiMW WCUaOaXbGLk6Xenn6ihdlij3nkv3ofjioM583TArtnLPGjcIPo2jGbvhgACzc63+ kwaBU7uRW69yAclmLsg4KKvZpF8GKfCXdnVBUVgWBSuox3+DlmvaL54Mjd9hUgsd qfQImYVPOCphTOn1WW4KmBLPks05p24EpFt6C6r0voWCToLyob1NsPDbrd5A06Ua raLVMzHqc3laMOIJA9bom6dRnB8fj84P+aFj1MfuEa0G7w== Received: from nalasppmta04.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 431byjk1h4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 21 Nov 2024 06:29:36 +0000 (GMT) Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com [10.47.209.196]) by NALASPPMTA04.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id 4AL6TZdt028356 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 21 Nov 2024 06:29:35 GMT Received: from jinlmao-gv.qualcomm.com (10.80.80.8) by nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.9; Wed, 20 Nov 2024 22:29:31 -0800 From: Mao Jinlong To: Suzuki K Poulose , Mike Leach , James Clark , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Mao Jinlong , "Alexander Shishkin" CC: , , , , Subject: [PATCH v7 3/3] coresight: dummy: Add static trace id support for dummy source Date: Thu, 21 Nov 2024 14:28:29 +0800 Message-ID: <20241121062829.11571-4-quic_jinlmao@quicinc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20241121062829.11571-1-quic_jinlmao@quicinc.com> References: <20241121062829.11571-1-quic_jinlmao@quicinc.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nalasex01a.na.qualcomm.com (10.47.209.196) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: pW4fz9uZ1Qr1Mqs2a4kfEHx9ItKP_fTw X-Proofpoint-ORIG-GUID: pW4fz9uZ1Qr1Mqs2a4kfEHx9ItKP_fTw X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.60.29 definitions=2024-09-06_09,2024-09-06_01,2024-09-02_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 clxscore=1015 suspectscore=0 phishscore=0 lowpriorityscore=0 impostorscore=0 malwarescore=0 priorityscore=1501 bulkscore=0 adultscore=0 mlxlogscore=999 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2409260000 definitions=main-2411210048 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Some dummy source has static trace id configured in HW and it cannot be changed via software programming. Configure the trace id in device tree and reserve the id when device probe. Signed-off-by: Mao Jinlong --- .../sysfs-bus-coresight-devices-dummy-source | 15 ++++ drivers/hwtracing/coresight/coresight-dummy.c | 81 ++++++++++++++++--- 2 files changed, 87 insertions(+), 9 deletions(-) create mode 100644 Documentation/ABI/testing/sysfs-bus-coresight-devices-d= ummy-source diff --git a/Documentation/ABI/testing/sysfs-bus-coresight-devices-dummy-so= urce b/Documentation/ABI/testing/sysfs-bus-coresight-devices-dummy-source new file mode 100644 index 000000000000..a1309ddaa4b9 --- /dev/null +++ b/Documentation/ABI/testing/sysfs-bus-coresight-devices-dummy-source @@ -0,0 +1,15 @@ +What: /sys/bus/coresight/devices/dummy_source/enable_source +Date: Nov 2024 +KernelVersion: 6.13 +Contact: Mao Jinlong +Description: (RW) Enable/disable tracing of dummy source. A sink should be= activated + before enabling the source. The path of coresight components linking + the source to the sink is configured and managed automatically by the + coresight framework. + +What: /sys/bus/coresight/devices/dummy_source/traceid +Date: Nov 2024 +KernelVersion: 6.13 +Contact: Mao Jinlong +Description: (R) Show the trace ID that will appear in the trace stream + coming from this trace entity. diff --git a/drivers/hwtracing/coresight/coresight-dummy.c b/drivers/hwtrac= ing/coresight/coresight-dummy.c index bb85fa663ffc..ac65ac1dad87 100644 --- a/drivers/hwtracing/coresight/coresight-dummy.c +++ b/drivers/hwtracing/coresight/coresight-dummy.c @@ -11,10 +11,12 @@ #include =20 #include "coresight-priv.h" +#include "coresight-trace-id.h" =20 struct dummy_drvdata { struct device *dev; struct coresight_device *csdev; + u8 traceid; }; =20 DEFINE_CORESIGHT_DEVLIST(source_devs, "dummy_source"); @@ -72,6 +74,32 @@ static const struct coresight_ops dummy_sink_cs_ops =3D { .sink_ops =3D &dummy_sink_ops, }; =20 +/* User can get the trace id of dummy source from this node. */ +static ssize_t traceid_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + unsigned long val; + struct dummy_drvdata *drvdata =3D dev_get_drvdata(dev->parent); + + val =3D drvdata->traceid; + return sysfs_emit(buf, "%#lx\n", val); +} +static DEVICE_ATTR_RO(traceid); + +static struct attribute *coresight_dummy_attrs[] =3D { + &dev_attr_traceid.attr, + NULL, +}; + +static const struct attribute_group coresight_dummy_group =3D { + .attrs =3D coresight_dummy_attrs, +}; + +static const struct attribute_group *coresight_dummy_groups[] =3D { + &coresight_dummy_group, + NULL, +}; + static int dummy_probe(struct platform_device *pdev) { struct device *dev =3D &pdev->dev; @@ -79,6 +107,11 @@ static int dummy_probe(struct platform_device *pdev) struct coresight_platform_data *pdata; struct dummy_drvdata *drvdata; struct coresight_desc desc =3D { 0 }; + int ret =3D 0, trace_id =3D 0; + + drvdata =3D devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL); + if (!drvdata) + return -ENOMEM; =20 if (of_device_is_compatible(node, "arm,coresight-dummy-source")) { =20 @@ -90,6 +123,26 @@ static int dummy_probe(struct platform_device *pdev) desc.subtype.source_subtype =3D CORESIGHT_DEV_SUBTYPE_SOURCE_OTHERS; desc.ops =3D &dummy_source_cs_ops; + desc.groups =3D coresight_dummy_groups; + + ret =3D coresight_get_static_trace_id(dev, &trace_id); + if (!ret) { + /* Get the static id if id is set in device tree. */ + ret =3D coresight_trace_id_get_static_system_id(trace_id); + if (ret < 0) { + dev_err(dev, "Fail to get static id.\n"); + return ret; + } + } else { + /* Get next available id if id is not set in device tree. */ + trace_id =3D coresight_trace_id_get_system_id(); + if (trace_id < 0) { + ret =3D trace_id; + return ret; + } + } + drvdata->traceid =3D (u8)trace_id; + } else if (of_device_is_compatible(node, "arm,coresight-dummy-sink")) { desc.name =3D coresight_alloc_device_name(&sink_devs, dev); if (!desc.name) @@ -104,27 +157,35 @@ static int dummy_probe(struct platform_device *pdev) } =20 pdata =3D coresight_get_platform_data(dev); - if (IS_ERR(pdata)) - return PTR_ERR(pdata); + if (IS_ERR(pdata)) { + ret =3D PTR_ERR(pdata); + goto free_id; + } pdev->dev.platform_data =3D pdata; =20 - drvdata =3D devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL); - if (!drvdata) - return -ENOMEM; - drvdata->dev =3D &pdev->dev; platform_set_drvdata(pdev, drvdata); =20 desc.pdata =3D pdev->dev.platform_data; desc.dev =3D &pdev->dev; drvdata->csdev =3D coresight_register(&desc); - if (IS_ERR(drvdata->csdev)) - return PTR_ERR(drvdata->csdev); + if (IS_ERR(drvdata->csdev)) { + ret =3D PTR_ERR(drvdata->csdev); + goto free_id; + } =20 pm_runtime_enable(dev); dev_dbg(dev, "Dummy device initialized\n"); =20 - return 0; + ret =3D 0; + goto out; + +free_id: + if (IS_VALID_CS_TRACE_ID(drvdata->traceid)) + coresight_trace_id_put_system_id(drvdata->traceid); + +out: + return ret; } =20 static void dummy_remove(struct platform_device *pdev) @@ -132,6 +193,8 @@ static void dummy_remove(struct platform_device *pdev) struct dummy_drvdata *drvdata =3D platform_get_drvdata(pdev); struct device *dev =3D &pdev->dev; =20 + if (IS_VALID_CS_TRACE_ID(drvdata->traceid)) + coresight_trace_id_put_system_id(drvdata->traceid); pm_runtime_disable(dev); coresight_unregister(drvdata->csdev); } --=20 2.17.1