From patchwork Thu Apr 10 01:33:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jie Gan X-Patchwork-Id: 14045711 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 3C373C369A2 for ; Thu, 10 Apr 2025 01:37:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=/hbu+J38OslkyyaqUl3TD0hhOvybI072r0nxhEaLcKQ=; b=4s32HxtqBg7fFHeCPfiMFJlMKY r1Ar7VE0AdaiDD46r543ah9YhdRzupE3X6dKF3meKFWfEnniHuXiTVMhpL1MZyzf60mBuOm0PJsYh DzfB/hobW8E8x6a7QeNZ1kOmO1fRGNR68AVxSGE1A/NLk4ZE27Y7pteRC1LByJ76eBdqzHKs3zeUE Zo2tay3lLHgElr2aHzcZZtVW1HFe1nSxKV88+2hrpwf+Gw81OXyCmtxOiIxY3U1MKimNFYRaNM+hh 2S0IgieFm+tVAZDzSy46UXHdqvX2X9IPwHHdyLmQzukmhyZC+N0D8T7KDwg9lKTlqJOeLpH9yf2Im RCvnBnyA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u2gr6-00000008xM6-0JOb; Thu, 10 Apr 2025 01:37:24 +0000 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u2gnd-00000008weE-202Z for linux-arm-kernel@lists.infradead.org; Thu, 10 Apr 2025 01:33:50 +0000 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 539H4PU7027520 for ; Thu, 10 Apr 2025 01:33:48 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=/hbu+J38Osl kyyaqUl3TD0hhOvybI072r0nxhEaLcKQ=; b=H9yJUA9bw3vdhwFOIqJSwaKyDPs VH7D+VDM0GQ7CVhfxld0MT66iEEwGqU+XnAmi5bFqjn22L85W9fVXZW7IMSfWJ9T XUI+zEbIUhB8RiaZ6fddg/RtKp5jaP2vZg1QRg5WNgeAHP2Ixrnw8eUEoB9ETKA2 M1p52z+mdIRgU4FIW7mwx6rLK2NYKABmFJMelJA2BDu6WtX8nPhkElITkFuw+Ir+ q7l31eH/ItXMqwT84tH53XwCEYzRv5eYNZkc5XBh7KrqXmYzg5J3a5w3d6yVsZPX iZS+8GihNblIq6kFOr2Eyzk5+8PP0QQvLLUzpoIyN432Tl28GS4Ax+SVHaw== 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 45twcrnbjh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Thu, 10 Apr 2025 01:33:48 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2240a960f9cso3061025ad.0 for ; Wed, 09 Apr 2025 18:33:47 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744248827; x=1744853627; 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=/hbu+J38OslkyyaqUl3TD0hhOvybI072r0nxhEaLcKQ=; b=FUyJ9XAauH7uYrzBuNV4kChWRpDpCIYXjWDZOGNvh6rw3L1rxwen1YFg6F3RrUleAD 7qHrE5MzdBpALEwPZ6SFgIMkPNAaR0QtogtH18T4PNwJvb9Q4lX5AIK5+D3R6yd32aKf 9ZdGwHu1NaQbASxRLrTYHl+Wo/Xda+VGmJRyr+aH6clEYj3047jyBWIwzskFK6q0ZEOs zkxUF822Q9qK//e2UNhKvvE5JkzVOnvhbE/OGT9+tNWj//B+gBlC1rCSo/OQCLmGLOaB gJ3kh3K4qJRfwWsOayJodvDXpeKXnHhAVSUCTSalYzz5O9rg4b9UAR1yc+NNTbSCmDHZ n3Jg== X-Forwarded-Encrypted: i=1; AJvYcCVhiW/MVFHMquBzZGgP54rPEDtmi645SHs6JZJZ8s9NXkWb2iEFI8CcKXzc75aL/TEGA7YoBcfTTMBd/U9ig41h@lists.infradead.org X-Gm-Message-State: AOJu0YwElyiaSUXnzEEV02d0j19seSn67cxUFh9xsYA/BuyhKgqXWgtj DtZuiVLflr2CHWFRXKb0QWp/f7D7EgliZD+35CQEgqmihtdiuvyLDJ6FZnnynkpKb8M/nikUaZQ iTGju+r3S+q8nuzFopSAo3mXjo8CsIikLZ0om6FvNbrCwPN5Ykf7CDbf6eJ1P2CU9Sq5trMnOLw == X-Gm-Gg: ASbGncvOj5tHDjuo5xxzG5z8n/rz4lAPH457VbpR/4XZ0c986bIAREzt+L1PgwqnCR/ bbJxFRYMbmTgYhRb2bPxQRGABjKC+GDLv/pcPEiXNZs0JyeZxlLQg0lXAhX6snExBk629kX0JSS fkBeAeRjHxGUvOe5KxH/9nnbERaiwybsxVxYNEJ4MSN381Kps3ZE9HtCl70QcNENvc1iEJ/L982 2rxtY79IvM8mKucHcHwG5y2Ukx0GP5//x0sMKcdTFtnUnSCz3C7/DhZfEz6TaZHy1HNsF2tbhkz AIYOtBNVOyYpNd0XE2vOXqPCfO/XoKElgetO37/T20w/QWTD3zMctKR4106m3UZCl0hVFDs= X-Received: by 2002:a17:902:d2ca:b0:223:5a6e:b2c with SMTP id d9443c01a7336-22b2edd2d5amr14924705ad.17.1744248826345; Wed, 09 Apr 2025 18:33:46 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEbZM9pDJc+QEgclUt66GbWgtrAL7JKUny/wc6kcLIOC46cExebvjVHkQBn+tXU3uwE77c53w== X-Received: by 2002:a17:902:d2ca:b0:223:5a6e:b2c with SMTP id d9443c01a7336-22b2edd2d5amr14924405ad.17.1744248825829; Wed, 09 Apr 2025 18:33:45 -0700 (PDT) Received: from jiegan-gv.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22ac7ccb596sm18801815ad.220.2025.04.09.18.33.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Apr 2025 18:33:45 -0700 (PDT) From: Jie Gan To: Suzuki K Poulose , Mike Leach , James Clark , Alexander Shishkin , Maxime Coquelin , Alexandre Torgue , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bjorn Andersson , Konrad Dybcio Cc: Tingwei Zhang , Jinlong Mao , coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com Subject: [PATCH v2 1/5] coresight: tmc: Introduce new APIs to get the RWP offset of ETR buffer Date: Thu, 10 Apr 2025 09:33:26 +0800 Message-Id: <20250410013330.3609482-2-jie.gan@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250410013330.3609482-1-jie.gan@oss.qualcomm.com> References: <20250410013330.3609482-1-jie.gan@oss.qualcomm.com> MIME-Version: 1.0 X-Proofpoint-ORIG-GUID: CIZICk8jfFfFZf5ZO-My5-MxAP5nexjv X-Authority-Analysis: v=2.4 cv=QuVe3Uyd c=1 sm=1 tr=0 ts=67f71ffc cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=XR8D0OoHHMoA:10 a=EUspDBNiAAAA:8 a=QSMfYRlErQPllaMuWGUA:9 a=1OuFwYUASf3TG4hYMiVC:22 X-Proofpoint-GUID: CIZICk8jfFfFZf5ZO-My5-MxAP5nexjv X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-09_06,2025-04-08_04,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 adultscore=0 spamscore=0 malwarescore=0 mlxlogscore=937 bulkscore=0 priorityscore=1501 clxscore=1015 phishscore=0 impostorscore=0 suspectscore=0 lowpriorityscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2502280000 definitions=main-2504100010 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250409_183349_654927_DEC600C1 X-CRM114-Status: GOOD ( 19.27 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org The new functions calculate and return the offset to the write pointer of the ETR buffer based on whether the memory mode is SG, flat or reserved. The functions have the RWP offset can directly read data from ETR buffer, enabling the transfer of data to any required location. Signed-off-by: Jie Gan --- .../hwtracing/coresight/coresight-tmc-etr.c | 62 +++++++++++++++++++ drivers/hwtracing/coresight/coresight-tmc.h | 1 + 2 files changed, 63 insertions(+) diff --git a/drivers/hwtracing/coresight/coresight-tmc-etr.c b/drivers/hwtracing/coresight/coresight-tmc-etr.c index 76a8cb29b68a..ed8a89fcd3fc 100644 --- a/drivers/hwtracing/coresight/coresight-tmc-etr.c +++ b/drivers/hwtracing/coresight/coresight-tmc-etr.c @@ -1236,6 +1236,68 @@ void tmc_etr_disable_hw(struct tmc_drvdata *drvdata) drvdata->etr_buf = NULL; } +static long tmc_etr_flat_resrv_get_rwp_offset(struct tmc_drvdata *drvdata) +{ + dma_addr_t paddr = drvdata->sysfs_buf->hwaddr; + u64 rwp; + + rwp = tmc_read_rwp(drvdata); + return rwp - paddr; +} + +static long tmc_etr_sg_get_rwp_offset(struct tmc_drvdata *drvdata) +{ + struct etr_buf *etr_buf = drvdata->sysfs_buf; + struct etr_sg_table *etr_table = etr_buf->private; + struct tmc_sg_table *table = etr_table->sg_table; + long w_offset; + u64 rwp; + + rwp = tmc_read_rwp(drvdata); + w_offset = tmc_sg_get_data_page_offset(table, rwp); + + return w_offset; +} + +/** + * tmc_etr_get_rwp_offset() - Retrieving the offset to the write pointer. + * + * @drvdata: driver data of TMC device. + * + * Retrieve the offset to the write pointer of the ETR + * buffer based on whether the memory mode is SG, flat or reserved. + * + * Return w_offset of the ETR buffer upon success, else the error number. + */ +long tmc_etr_get_rwp_offset(struct tmc_drvdata *drvdata) +{ + struct etr_buf *etr_buf; + long w_offset; + + if (WARN_ON(!drvdata) || WARN_ON(!drvdata->sysfs_buf) || + WARN_ON(drvdata->config_type != TMC_CONFIG_TYPE_ETR)) + return -EINVAL; + + etr_buf = drvdata->sysfs_buf; + /* Disable the ETR if it is running */ + if (coresight_get_mode(drvdata->csdev) != CS_MODE_DISABLED) + __tmc_etr_disable_hw(drvdata); + + if (etr_buf->mode == ETR_MODE_ETR_SG) + w_offset = tmc_etr_sg_get_rwp_offset(drvdata); + else if (etr_buf->mode == ETR_MODE_FLAT || etr_buf->mode == ETR_MODE_RESRV) + w_offset = tmc_etr_flat_resrv_get_rwp_offset(drvdata); + else + w_offset = -EINVAL; + + /* Restart the ETR if the mode is not disabled */ + if (coresight_get_mode(drvdata->csdev) != CS_MODE_DISABLED) + __tmc_etr_enable_hw(drvdata); + + return w_offset; +} +EXPORT_SYMBOL_GPL(tmc_etr_get_rwp_offset); + static struct etr_buf *tmc_etr_get_sysfs_buffer(struct coresight_device *csdev) { int ret = 0; diff --git a/drivers/hwtracing/coresight/coresight-tmc.h b/drivers/hwtracing/coresight/coresight-tmc.h index 6541a27a018e..945c69f6e6ca 100644 --- a/drivers/hwtracing/coresight/coresight-tmc.h +++ b/drivers/hwtracing/coresight/coresight-tmc.h @@ -442,5 +442,6 @@ 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; +long tmc_etr_get_rwp_offset(struct tmc_drvdata *drvdata); #endif From patchwork Thu Apr 10 01:33:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jie Gan X-Patchwork-Id: 14045712 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 38B8EC369A2 for ; Thu, 10 Apr 2025 01:39:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=Q5C8avXIxcx6eZTU/R7g1j6DX3AayD2O7YvtYRznlQ4=; b=R2VXW+VS5nQAAxTkyVnIZvc2QW G9ibaeiBZcPtFg657ZWk69m+jN1whpYdVEDXUyDYdlw1RU9VNSaTPM97w8sNHli0ByQ/snU4SJb0H 1aAbQ+pHYicJkmO+X4Svf7kNyrNkrDdb959ml4uN+umHGbatu82q8mZ+9/ZjB1ZSjvHDwZLLQA4ZR Q8BWwq1t4yBWCxJ4s2Lc4TQn2dAdDTxdOEvzHDXWF4zkGhwO9OnSjrB2QDyEEygaL+3qK0zTCuLsF XNgnfrVdNxMqTRAQ0H7sE0VED3pfXNMK6GNMckdY4CjeLpnaxBB+t5lvK95hsIHrfp+GSgw/0Lije 1wonh2GQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u2gsq-00000008xZG-3K5q; Thu, 10 Apr 2025 01:39:12 +0000 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u2gnj-00000008wer-3zm9 for linux-arm-kernel@lists.infradead.org; Thu, 10 Apr 2025 01:33:57 +0000 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 539HErb2027501 for ; Thu, 10 Apr 2025 01:33:55 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=Q5C8avXIxcx 6eZTU/R7g1j6DX3AayD2O7YvtYRznlQ4=; b=MujjNClyaI06HBsPxeKNYGbeSll rq9Bz9OOS8XGeaWhIDYUqMAtR9YPCPsqG2HSKlv1YFChTU6+xx/u5eL1TCit9Ecl 4hyoo0qNfv78fXQVbqEI5sLurarUPTmWVqmFj8AqoKtXmjbMwGizIDCxLf+nGvf0 xtk4+OqAtT55MGoggMnm3xSocUOIyhbv54XMQ8vdkR1wDppKNi4y54Y+zJ0KrI5e nLxv8KIvs5tqqnHim5U4lOehFREFqIe7POTEvxJmh5Q07TpY0dU6duG7JuIVXkOi PaTgDJI10crIWnMa2XhzpnN12ixwqwsPwuI5FDNhhxJkgP/igia3UxSzLMg== 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 45twcrnbjy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Thu, 10 Apr 2025 01:33:55 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-229170fbe74so2303605ad.2 for ; Wed, 09 Apr 2025 18:33:54 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744248834; x=1744853634; 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=Q5C8avXIxcx6eZTU/R7g1j6DX3AayD2O7YvtYRznlQ4=; b=CDlCG9mRrGCDX5BSnp1ahypUo/871PICMG14Wth6KZo9TenB1Z6idhv4BLY/8yq9tf 745Pf/wSx0o5UkxtRTJZqHm2rcAAJ7qtQR/GAvs6j2lKlQTTOG2IDsDdnU6rxV2lumeb C44sVlm3W89PeFYeWEPFkCfz06EXUTGp9G1DmrV0AtrulXXtBp4VZYenAJjyQjnqTaZj GsCkrv14lT7kTabcqPxfVolRKJWmca0MjO91IS1K3pCQuBkpyVn++EDeGrbXCrIazniM r1MSJslZS0uZKhniTOOIRvZfXBuRTEU529LIDmPDdUa4WLpJsry1vGK0YpEW6e9yPua+ 3HQA== X-Forwarded-Encrypted: i=1; AJvYcCUaN/CEgJXVPI8TV161L5nbG3EKJZhxUT+PMPZhK/KsWzPSPzgtLbaMwnO5X8mz+UqdFxbpJ08v3ytvgtYfQYWy@lists.infradead.org X-Gm-Message-State: AOJu0YybIyeGc9ikwv2re/Z7sOO1mymnQoay/pZVUjUDcIExgC+9mGs+ uvhGtRflvwuCN0xOWXh9U5rsRt2WYrghXmG6LLQBqPlFBoeQ65cgEHTLwZBC8J18h9QWaPH5k7m ydi+Up/pBRxDnhMnUT1gWs5NTiguGQYRGoimn3AqYIbCfDNQaF0+LNu4AK7YXa7NUZznauWj/hA == X-Gm-Gg: ASbGncubUDxm7zqHyPR/tH0S1D6zQ2uSJWXChNJ8Fn09MYW3KoafYWaI8ivRQML5ak5 A1J2szLD0iTmBoSdoafO4KmSn2ujGXY9uYC2vTqWou6LTQJHrqDM0kj6pphf0RQtbmOfyYj6QR6 VV2s3pnBFWcapWg0LkBCXzL9OVQFF7685QciDpuBk+VX9PlVdsgvGPR+UH6/3jrCbNnnrxyLCBg YssGZCfntbZSFdXgPo6xrX/QwWK84vWKYN6whCGfFY6UoR0hwqTUquM6bVDB0+/onD/pXotKwnI 2H67newDZ4KSTQcwdudJpHXeWVk3Q0UH3GMJxMI4X5TWfo1NQ44cEkh8Pz1ntvtK6gZyN2s= X-Received: by 2002:a17:902:f650:b0:224:10a2:cae1 with SMTP id d9443c01a7336-22be0388945mr5828915ad.37.1744248833679; Wed, 09 Apr 2025 18:33:53 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFuGLiA2GpR0NJuAdO+G8PI7iF8HwBXSjne50t51n8f56D/aAMKowziVlwmYW3huuRGfdtbHg== X-Received: by 2002:a17:902:f650:b0:224:10a2:cae1 with SMTP id d9443c01a7336-22be0388945mr5828615ad.37.1744248833241; Wed, 09 Apr 2025 18:33:53 -0700 (PDT) Received: from jiegan-gv.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22ac7ccb596sm18801815ad.220.2025.04.09.18.33.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Apr 2025 18:33:50 -0700 (PDT) From: Jie Gan To: Suzuki K Poulose , Mike Leach , James Clark , Alexander Shishkin , Maxime Coquelin , Alexandre Torgue , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bjorn Andersson , Konrad Dybcio Cc: Tingwei Zhang , Jinlong Mao , coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com Subject: [PATCH v2 2/5] dt-bindings: arm: Add an interrupt property for Coresight CTCU Date: Thu, 10 Apr 2025 09:33:27 +0800 Message-Id: <20250410013330.3609482-3-jie.gan@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250410013330.3609482-1-jie.gan@oss.qualcomm.com> References: <20250410013330.3609482-1-jie.gan@oss.qualcomm.com> MIME-Version: 1.0 X-Proofpoint-ORIG-GUID: u94a3DKobu8V6Qb-nRHjRMAWoTChKigq X-Authority-Analysis: v=2.4 cv=QuVe3Uyd c=1 sm=1 tr=0 ts=67f72003 cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=XR8D0OoHHMoA:10 a=EUspDBNiAAAA:8 a=gSyxy6DGYGa4b6s9XCEA:9 a=1OuFwYUASf3TG4hYMiVC:22 X-Proofpoint-GUID: u94a3DKobu8V6Qb-nRHjRMAWoTChKigq X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-09_06,2025-04-08_04,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 adultscore=0 spamscore=0 malwarescore=0 mlxlogscore=999 bulkscore=0 priorityscore=1501 clxscore=1015 phishscore=0 impostorscore=0 suspectscore=0 lowpriorityscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2502280000 definitions=main-2504100010 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250409_183356_135963_7429D216 X-CRM114-Status: GOOD ( 14.20 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Add an interrupt property to CTCU device. The interrupt will be triggered when the data size in the ETR buffer exceeds the threshlod of the BYTECNTRVAL register. Programming a threshold in the BYTECNTRVAL register of CTCU device will enable the interrupt. Signed-off-by: Jie Gan Acked-by: Krzysztof Kozlowski --- .../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 + 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 @@ -56,6 +66,8 @@ additionalProperties: false examples: - | + #include + ctcu@1001000 { compatible = "qcom,sa8775p-ctcu"; reg = <0x1001000 0x1000>; @@ -63,6 +75,11 @@ examples: clocks = <&aoss_qmp>; clock-names = "apb"; + interrupts = , + ; + interrupt-names = "etr0", + "etr1"; + in-ports { #address-cells = <1>; #size-cells = <0>; From patchwork Thu Apr 10 01:33:28 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jie Gan X-Patchwork-Id: 14045717 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D428AC369A2 for ; Thu, 10 Apr 2025 01:41:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=zVEqVQGEb72vRCxRTT02PrU7JhEHIfl9uSaQKsq1qDA=; b=lxXHgo+jHeKcmb6wlPllTi/xuq AicZyCusXekG5/sBYy/1vsAGnZbc69cXNDLMeURI9L8W73EAj8kYtkxQwoDXQ8QaJ5LQ+Egj7Wubg 1QpbzUC2TpsYO7u0oeioEBijgvQwqvwtvANl2wbUzOJ3A8kT20m+OAcq3B0R5GmvXDMl5w5Hec3rs qXQpswRfCzTeRW8YRSLIJv3g3pAR1ipZZwQ7soEnxkmPzy2hy54USqPnRvCCvPDYVQ8Up7CfD9TwX 9tvOju/VcoT2s6MKb/5qPd62yJ6KxVn6WyAbRF2CKxUDXRH9ygfSPKefZDya/U/wKPSH7FY+J+Wgb 6hTm15QQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u2gua-00000008xgx-2Ils; Thu, 10 Apr 2025 01:41:00 +0000 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u2gno-00000008wgX-2by6 for linux-arm-kernel@lists.infradead.org; Thu, 10 Apr 2025 01:34:01 +0000 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 539HD7k6015755 for ; Thu, 10 Apr 2025 01:34:00 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=zVEqVQGEb72 vRCxRTT02PrU7JhEHIfl9uSaQKsq1qDA=; b=DywjHEYvi4SWvrc/FYGmdkuqu9n 9mgN0lEYR7tup9vkExpdOTtCN8KpiRaTkbrO6daIQoroDwykdB93APYBVZd7u0SM gPTMzn8NEBcHkMMHEZjpsjoJR3U2zP6990z7tGD/PH7fPimOcpVxRfZ24+a2YsYZ cQF4A7AeC16KL0M+iXFbaEqHMd6Ml6X2bwgjEhlF2Gk+tCDROKkdR0KoLQjiEd9M MSaCO39gOgcI646cW3Zic6ucxDCPAAZhl7X7eMvS2oUoDps0Hx5J5xikks3w2g7M 8kA8UNa9axSsrtwKzIDRHnwjMzzAXZkjuZqcr8svkBwwogttmUT9+c+1z2g== 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 45twd2w6e2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Thu, 10 Apr 2025 01:33:59 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2242f3fd213so2443025ad.1 for ; Wed, 09 Apr 2025 18:33:59 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744248839; x=1744853639; 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=zVEqVQGEb72vRCxRTT02PrU7JhEHIfl9uSaQKsq1qDA=; b=MTJgE7xYfoa0eW9yapZcK7MwQ9nQWabNeRvrjpMoPyspIuspl4RMz23P9YOmk35sZC EzASRJyfK2L46d5JV/yrBnWXtOBgrh051s+Tmu/PK/73SrAGqiUF9+gq/QJxGghuqXyM 0lK69RR65lwIr0QuJ5PexhDao9MLddxKNo8h7kv50GvQUgfdH4XbRjo13KHjiROlaoxr SxnDOULY66DMG8DZmVlE6hzXwz+lAs8/KhDTVXVSQ2khMwjW7Sp8IbKVOKMlXUOizp1u vEx7Jj1wf5wfcjiSgLAhO5q1AwRxQTa/8VJ4FLNTfrSaHt2HV0qUKqv+/biz5sNKBr05 J9BA== X-Forwarded-Encrypted: i=1; AJvYcCWqgwtwLyJjdAUdUST81ULjRx30v5bdDclJv2ysiH+psxX1Sk9nJc5d8Zptc/ZLjvOBca1UFtR0Qzr+hBVwar3r@lists.infradead.org X-Gm-Message-State: AOJu0YyzsC692rPZIj4p202FsP/eWyLsO7I6KRJOn7SWLkGpsxQUG38l IyqLgP4lWRjgc/2L44WA9hQ2Tq2pzY5IOWLoXdD+S9JXSBlbncuRI+S+EZYvUjQgwr+QsWvIWa3 kMZExIQ+KXfI5ZvMjWFAUcyDvd5kpC6zvgClaDTC5NuOTgn0AAOW5FlAl239iSRCmo5URAMv8Cg == X-Gm-Gg: ASbGncteDuGX9J54fre9RnTNnEnnsldzsyOehbTDaR8Z6IJzcXNCV7G2/ZCeRXzoxEX qkZ2imHLwfuHpPkK3LD5IFHHOHQe/FyanQHfxFras/lFqIc9LK5+a2M2EIT1nHcWZU/S6ZVSVTk v0od+ZCmgMjVxddUfwKy0IqgkG+kAYlcl1x7wwMmI38ALYT+a1Md9h9GXycce+0QkIw04I2pBcu Sxg3Uf8qoJ/kVki3mCu1CFefW7afg6UPznx840MKT2d06puor67TcrH9z9uH7oBBgbij4yqET1A KhDPLK3OLAPgGJa24IG5pbK/LKyyIeNcVWhrLlbEe4t/nz/BZbmP52Nq59J3UzxIqXGTImY= X-Received: by 2002:a17:902:dacc:b0:224:93e:b5d7 with SMTP id d9443c01a7336-22b42c155a9mr16185145ad.34.1744248838948; Wed, 09 Apr 2025 18:33:58 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEebPkxD9bBd6wdaOrItDYEFk+Xsh37X+Og/9rXFyiXINvdY73PqJch6YsnFc+Hx/fshtFykQ== X-Received: by 2002:a17:902:dacc:b0:224:93e:b5d7 with SMTP id d9443c01a7336-22b42c155a9mr16184635ad.34.1744248838458; Wed, 09 Apr 2025 18:33:58 -0700 (PDT) Received: from jiegan-gv.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22ac7ccb596sm18801815ad.220.2025.04.09.18.33.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Apr 2025 18:33:57 -0700 (PDT) From: Jie Gan To: Suzuki K Poulose , Mike Leach , James Clark , Alexander Shishkin , Maxime Coquelin , Alexandre Torgue , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bjorn Andersson , Konrad Dybcio Cc: Tingwei Zhang , Jinlong Mao , coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com Subject: [PATCH v2 3/5] coresight: ctcu: Enable byte-cntr for TMC ETR devices Date: Thu, 10 Apr 2025 09:33:28 +0800 Message-Id: <20250410013330.3609482-4-jie.gan@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250410013330.3609482-1-jie.gan@oss.qualcomm.com> References: <20250410013330.3609482-1-jie.gan@oss.qualcomm.com> MIME-Version: 1.0 X-Proofpoint-ORIG-GUID: pmi0TityRru9azrVOj9q5z23dESJ3Zgh X-Proofpoint-GUID: pmi0TityRru9azrVOj9q5z23dESJ3Zgh X-Authority-Analysis: v=2.4 cv=NaLm13D4 c=1 sm=1 tr=0 ts=67f72008 cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=XR8D0OoHHMoA:10 a=EUspDBNiAAAA:8 a=VuEiWhZmLyiD4YjWg_QA:9 a=RVmHIydaz68A:10 a=uG9DUKGECoFWVXl0Dc02:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-09_06,2025-04-08_04,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 impostorscore=0 priorityscore=1501 adultscore=0 malwarescore=0 suspectscore=0 lowpriorityscore=0 bulkscore=0 mlxlogscore=999 clxscore=1015 phishscore=0 spamscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2502280000 definitions=main-2504100010 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250409_183400_669135_E73F691F X-CRM114-Status: GOOD ( 34.56 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org 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 ETR buffer if the IRQ count is greater than 0. Each successful read process will decrement the IRQ count by 1. Signed-off-by: Jie Gan --- drivers/hwtracing/coresight/Makefile | 2 +- .../coresight/coresight-ctcu-byte-cntr.c | 119 ++++++++++++++++++ .../hwtracing/coresight/coresight-ctcu-core.c | 88 ++++++++++++- drivers/hwtracing/coresight/coresight-ctcu.h | 49 +++++++- drivers/hwtracing/coresight/coresight-tmc.h | 1 + 5 files changed, 252 insertions(+), 7 deletions(-) create mode 100644 drivers/hwtracing/coresight/coresight-ctcu-byte-cntr.c diff --git a/drivers/hwtracing/coresight/Makefile b/drivers/hwtracing/coresight/Makefile index 8e62c3150aeb..c90a06768a18 100644 --- a/drivers/hwtracing/coresight/Makefile +++ b/drivers/hwtracing/coresight/Makefile @@ -52,4 +52,4 @@ coresight-cti-y := coresight-cti-core.o coresight-cti-platform.o \ obj-$(CONFIG_ULTRASOC_SMB) += ultrasoc-smb.o obj-$(CONFIG_CORESIGHT_DUMMY) += coresight-dummy.o obj-$(CONFIG_CORESIGHT_CTCU) += coresight-ctcu.o -coresight-ctcu-y := coresight-ctcu-core.o +coresight-ctcu-y := coresight-ctcu-core.o coresight-ctcu-byte-cntr.o diff --git a/drivers/hwtracing/coresight/coresight-ctcu-byte-cntr.c b/drivers/hwtracing/coresight/coresight-ctcu-byte-cntr.c new file mode 100644 index 000000000000..db0bb5a71ed6 --- /dev/null +++ b/drivers/hwtracing/coresight/coresight-ctcu-byte-cntr.c @@ -0,0 +1,119 @@ +// 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 = (struct ctcu_byte_cntr *)data; + + atomic_inc(&byte_cntr_data->irq_cnt); + wake_up(&byte_cntr_data->wq); + + return IRQ_HANDLED; +} + +/* 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 = dev_get_drvdata(csdev->dev.parent); + struct coresight_device *sink = coresight_get_sink(path); + struct ctcu_byte_cntr *byte_cntr_data; + struct tmc_drvdata *tmcdrvdata; + int port_num; + + if (!sink) + return; + + tmcdrvdata = dev_get_drvdata(sink->dev.parent); + port_num = ctcu_get_active_port(sink, csdev); + if (port_num < 0) + return; + + byte_cntr_data = &drvdata->byte_cntr_data[port_num]; + /* Don't start byte-cntr function when threshold is not set. */ + if (!byte_cntr_data->thresh_val) + return; + + guard(raw_spinlock_irqsave)(&byte_cntr_data->spin_lock); + atomic_set(&byte_cntr_data->irq_cnt, 0); + tmcdrvdata->byte_cntr_data = byte_cntr_data; + byte_cntr_data->enable = true; +} + +/* Stop the byte-cntr function when the path is disabled. */ +void ctcu_byte_cntr_stop(struct coresight_device *csdev, struct coresight_path *path) +{ + struct ctcu_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); + struct coresight_device *sink = coresight_get_sink(path); + struct ctcu_byte_cntr *byte_cntr_data; + struct tmc_drvdata *tmcdrvdata; + long w_offset; + int port_num; + + if (!sink) + return; + + port_num = ctcu_get_active_port(sink, csdev); + if (port_num < 0) + return; + + byte_cntr_data = &drvdata->byte_cntr_data[port_num]; + tmcdrvdata = dev_get_drvdata(sink->dev.parent); + + guard(raw_spinlock_irqsave)(&byte_cntr_data->spin_lock); + /* Store the w_offset of the ETR buffer when stopping. */ + w_offset = tmc_etr_get_rwp_offset(tmcdrvdata); + if (w_offset >= 0) + byte_cntr_data->w_offset = w_offset; + + atomic_set(&byte_cntr_data->irq_cnt, 0); + byte_cntr_data->read_active = false; + byte_cntr_data->enable = false; + /* + * Wakeup once to force the read function to read the remaining + * data of the ETR buffer. + */ + wake_up(&byte_cntr_data->wq); +} + +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 = dev->of_node; + int byte_cntr_irq, ret, i; + + for (i = 0; i < etr_num; i++) { + byte_cntr_data = &drvdata->byte_cntr_data[i]; + byte_cntr_irq = of_irq_get_byname(nd, byte_cntr_data->irq_name); + if (byte_cntr_irq < 0) { + dev_err(dev, "Failed to get IRQ from DT for %s\n", + byte_cntr_data->irq_name); + continue; + } + + ret = devm_request_irq(dev, byte_cntr_irq, 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->byte_cntr_irq = byte_cntr_irq; + atomic_set(&byte_cntr_data->irq_cnt, 0); + init_waitqueue_head(&byte_cntr_data->wq); + } +} diff --git a/drivers/hwtracing/coresight/coresight-ctcu-core.c b/drivers/hwtracing/coresight/coresight-ctcu-core.c index c6bafc96db96..fef516d7a474 100644 --- a/drivers/hwtracing/coresight/coresight-ctcu-core.c +++ b/drivers/hwtracing/coresight/coresight-ctcu-core.c @@ -46,16 +46,22 @@ DEFINE_CORESIGHT_DEVLIST(ctcu_devs, "ctcu"); #define CTCU_ATID_REG_BIT(traceid) (traceid % 32) #define CTCU_ATID_REG_SIZE 0x10 #define CTCU_ETR0_ATID0 0xf8 +#define CTCU_ETR0_IRQCTRL 0x6c #define CTCU_ETR1_ATID0 0x108 +#define CTCU_ETR1_IRQCTRL 0x70 static const struct ctcu_etr_config sa8775p_etr_cfgs[] = { { - .atid_offset = CTCU_ETR0_ATID0, - .port_num = 0, + .atid_offset = CTCU_ETR0_ATID0, + .irq_ctrl_offset = CTCU_ETR0_IRQCTRL, + .irq_name = "etr0", + .port_num = 0, }, { - .atid_offset = CTCU_ETR1_ATID0, - .port_num = 1, + .atid_offset = CTCU_ETR1_ATID0, + .irq_ctrl_offset = CTCU_ETR1_IRQCTRL, + .irq_name = "etr1", + .port_num = 1, }, }; @@ -64,6 +70,69 @@ static const struct ctcu_config sa8775p_cfgs = { .num_etr_config = ARRAY_SIZE(sa8775p_etr_cfgs), }; +static ssize_t byte_cntr_val_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct ctcu_drvdata *drvdata = dev_get_drvdata(dev->parent); + int i, len = 0; + + for (i = 0; i < ETR_MAX_NUM; i++) { + if (drvdata->byte_cntr_data[i].irq_ctrl_offset) + len += scnprintf(buf + len, PAGE_SIZE - len, "%u ", + drvdata->byte_cntr_data[i].thresh_val); + } + + len += scnprintf(buf + len, PAGE_SIZE - len, "\n"); + + return len; +} + +static ssize_t byte_cntr_val_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t size) +{ + struct ctcu_drvdata *drvdata = dev_get_drvdata(dev->parent); + u32 thresh_vals[ETR_MAX_NUM] = { 0 }; + u32 irq_ctrl_offset; + int num, i; + + num = sscanf(buf, "%i %i", &thresh_vals[0], &thresh_vals[1]); + if (num <= 0 || num > ETR_MAX_NUM) + return -EINVAL; + + /* Threshold 0 disables the interruption. */ + guard(raw_spinlock_irqsave)(&drvdata->spin_lock); + for (i = 0; i < num; i++) { + /* A small threshold will result in a large number of interruptions */ + if (thresh_vals[i] && thresh_vals[i] < 4096) + return -EINVAL; + + if (drvdata->byte_cntr_data[i].irq_ctrl_offset) { + drvdata->byte_cntr_data[i].thresh_val = thresh_vals[i]; + irq_ctrl_offset = drvdata->byte_cntr_data[i].irq_ctrl_offset; + CS_UNLOCK(drvdata->base); + writel_relaxed(thresh_vals[i], drvdata->base + irq_ctrl_offset); + CS_LOCK(drvdata->base); + } + } + + return size; +} +static DEVICE_ATTR_RW(byte_cntr_val); + +static struct attribute *ctcu_attrs[] = { + &dev_attr_byte_cntr_val.attr, + NULL, +}; + +static struct attribute_group ctcu_attr_grp = { + .attrs = ctcu_attrs, +}; + +static const struct attribute_group *ctcu_attr_grps[] = { + &ctcu_attr_grp, + NULL, +}; + static void ctcu_program_atid_register(struct ctcu_drvdata *drvdata, u32 reg_offset, u8 bit, bool enable) { @@ -122,7 +191,7 @@ static int __ctcu_set_etr_traceid(struct coresight_device *csdev, u8 traceid, in * 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 coresight_device *helper) +int ctcu_get_active_port(struct coresight_device *sink, struct coresight_device *helper) { struct coresight_platform_data *pdata = helper->pdata; int i; @@ -160,6 +229,8 @@ static int ctcu_enable(struct coresight_device *csdev, enum cs_mode mode, void * { struct coresight_path *path = (struct coresight_path *)data; + ctcu_byte_cntr_start(csdev, path); + return ctcu_set_etr_traceid(csdev, path, true); } @@ -167,6 +238,8 @@ static int ctcu_disable(struct coresight_device *csdev, void *data) { struct coresight_path *path = (struct coresight_path *)data; + ctcu_byte_cntr_stop(csdev, path); + return ctcu_set_etr_traceid(csdev, path, false); } @@ -217,7 +290,11 @@ static int ctcu_probe(struct platform_device *pdev) for (i = 0; i < cfgs->num_etr_config; i++) { etr_cfg = &cfgs->etr_cfgs[i]; drvdata->atid_offset[i] = etr_cfg->atid_offset; + drvdata->byte_cntr_data[i].irq_name = etr_cfg->irq_name; + drvdata->byte_cntr_data[i].irq_ctrl_offset = + etr_cfg->irq_ctrl_offset; } + ctcu_byte_cntr_init(dev, drvdata, cfgs->num_etr_config); } } @@ -229,6 +306,7 @@ static int ctcu_probe(struct platform_device *pdev) desc.subtype.helper_subtype = CORESIGHT_DEV_SUBTYPE_HELPER_CTCU; desc.pdata = pdata; desc.dev = dev; + desc.groups = ctcu_attr_grps; desc.ops = &ctcu_ops; desc.access = CSDEV_ACCESS_IOMEM(base); diff --git a/drivers/hwtracing/coresight/coresight-ctcu.h b/drivers/hwtracing/coresight/coresight-ctcu.h index e9594c38dd91..bc54cce358da 100644 --- a/drivers/hwtracing/coresight/coresight-ctcu.h +++ b/drivers/hwtracing/coresight/coresight-ctcu.h @@ -5,6 +5,7 @@ #ifndef _CORESIGHT_CTCU_H #define _CORESIGHT_CTCU_H + #include "coresight-trace-id.h" /* Maximum number of supported ETR devices for a single CTCU. */ @@ -13,10 +14,14 @@ /** * struct ctcu_etr_config * @atid_offset: offset to the ATID0 Register. - * @port_num: in-port number of CTCU device that connected to ETR. + * @irq_ctrl_offset: offset to the BYTECNTRVAL register. + * @irq_name: IRQ name in dt node. + * @port_num: in-port number of the CTCU device that connected to ETR. */ struct ctcu_etr_config { const u32 atid_offset; + const u32 irq_ctrl_offset; + const char *irq_name; const u32 port_num; }; @@ -25,15 +30,57 @@ struct ctcu_config { int num_etr_config; }; +/** + * struct ctcu_byte_cntr + * @enable: indicates that byte_cntr function is enabled or not. + * @read_active: indicates that byte-cntr node is opened or not. + * @thresh_val: threshold to trigger a interruption. + * @total_size total size of transferred data. + * @byte_cntr_irq: IRQ number. + * @irq_cnt: IRQ count. + * @wq: workqueue of reading ETR data. + * @read_work: work of reading ETR data. + * @spin_lock: spinlock of byte cntr data. + * @r_offset: offset of the pointer where reading begins. + * @w_offset: offset of the write pointer in the ETR buffer when + * the byte cntr is stopped. + * @irq_ctrl_offset: offset to the BYTECNTVAL Register. + * @irq_name: IRQ name in DT. + */ +struct ctcu_byte_cntr { + bool enable; + bool read_active; + u32 thresh_val; + u64 total_size; + int byte_cntr_irq; + atomic_t irq_cnt; + wait_queue_head_t wq; + struct work_struct read_work; + raw_spinlock_t spin_lock; + long r_offset; + long w_offset; + 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]; }; +/* Generic functions */ +int ctcu_get_active_port(struct coresight_device *sink, struct coresight_device *helper); + +/* 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.h b/drivers/hwtracing/coresight/coresight-tmc.h index 945c69f6e6ca..015592863352 100644 --- a/drivers/hwtracing/coresight/coresight-tmc.h +++ b/drivers/hwtracing/coresight/coresight-tmc.h @@ -271,6 +271,7 @@ struct tmc_drvdata { struct etr_buf *perf_buf; struct tmc_resrv_buf resrv_buf; struct tmc_resrv_buf crash_mdata; + struct ctcu_byte_cntr *byte_cntr_data; }; struct etr_buf_operations { From patchwork Thu Apr 10 01:33:29 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jie Gan X-Patchwork-Id: 14045718 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 01B9EC369A2 for ; Thu, 10 Apr 2025 01:43:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=Wi4lXP9W3EGbwQoH1fNQoNj4KY8C57elQ6SQxXyrbGE=; b=4wlKAtNCKw3gkuR7xh+Kyuz+2+ Dlrs/huukouRnMTOTpQyx0lQTqljF1PsrRPhAPEbQiuWCmZcMBEPNa0BCzDY6/bdIPFlH5U2rTFNS K+5kTPVxswSMJ/Vw75Qq+43Y9TdFFFhef3BZoSZFD0xsvAntQW4Vic8zWMEnu/+Uj1YFNgZ4mINPO Psd8zfs4Xu850qHhAQuV7saoreBGR0ogwH2HOOmojvMhedg4cOLDkzMXUHpuveCtLku05z42H63zR 4UiYQ1hmIsDv/ogCo14WOnI48NQu1tyUJ12aZ1rQAxQGrbe/uTDZDYrNUKI0wUycTF6hBS3GPyDtj HPAcVEKg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u2gwL-00000008xsI-2AMF; Thu, 10 Apr 2025 01:42:49 +0000 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u2gnu-00000008whj-1cWL for linux-arm-kernel@lists.infradead.org; Thu, 10 Apr 2025 01:34:07 +0000 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 539H7jxe028048 for ; Thu, 10 Apr 2025 01:34:05 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=Wi4lXP9W3EG bwQoH1fNQoNj4KY8C57elQ6SQxXyrbGE=; b=ehx+PJASkfjQjW1jy0pGt6lr+ml MjAgpwND1hPznp/TsmS4pNTXt6M4tx1VNZ5bVw0TzkhPaOBYyIJn9rWU7Asry0Br YhFa6C1ULZNjj7ggb55L3dxkZWOr1SbkSofGL3prtxOEDovY0YZhY/inmv5xR4sY kaB4XJ43hsIItLMJFecsrvTdaHTinzlcTwU99F+og6b3kCvBUFVQ8mE9FTdCthEX qTiwB3hwIlwOI9SV82kykI2imRUHGC2ygDthDefn4EOE+4tcm/KShL6+ERb4/dzu WZRV+aui9uDRWByTsMgxraw5MQZk0CVweGBoOrGIdD0ngbpiY57TWi/91MQ== 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 45twdgnamh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Thu, 10 Apr 2025 01:34:05 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2241ae15dcbso3696455ad.0 for ; Wed, 09 Apr 2025 18:34:05 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744248844; x=1744853644; 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=Wi4lXP9W3EGbwQoH1fNQoNj4KY8C57elQ6SQxXyrbGE=; b=GNfYW7t31L9Uh8plh2qLnEdB5esnqf6tpLR0U6NlAHN3CLLW94CIJ9Wxxj/Dn16ESd 1bQYfkuaMFti1alB5i4bPbhQAS2yZLlLsPrGeV+Bpvr7G/g9k7sg5TihlXsEsLvtdxbN 5E7wJFDbbluoaGJ+Q2iwMqTDnNhRgV42VaU16TUXx6JhR7WVwOul1WwyZUW4Dib/4DQW 4jmkKZMdJZIy+BirhusbHEZM4LhBRM2mI0q+jJzsEmsa3tEomrZ9DEScdbSjih7+bVNp vVqOFAkTgNrYRWKpIXQUfr52EKm5hnAW0IPbncB+AmZZUfOlyv8PEx0E4Hw6aLrK+RPH f/Aw== X-Forwarded-Encrypted: i=1; AJvYcCX2ytN/Hi03AMcfh2bRrZFHP7ZQq7O1hwsNMAvU/Lq3XAbB1sNvF4D97NgJp05lN+cCOVwjx8EkvFvVlrapoi6K@lists.infradead.org X-Gm-Message-State: AOJu0Ywd5YHSu2ZcAa+VP6PChd6CAnuqhouZpsWD/JYVpiZd631/9gO8 TgiKnGofVXzbvgnEEfmHaZeE4q0D6+aNuyksUAYaXFlCprkmXXOGq6j5a/hdCy1AmPvHb+8x0OL hjlcwfZST3qMYzXs8EaRnpT7rkEK4omfY7G3jBinkL1FUD8H6B6L1WGieMYamK2pvMx8qbEwvTA == X-Gm-Gg: ASbGnctR0cd5ycKJ7RvUtVdzsqH0zOU2+Cu7nW/lToxR33KQmEoAXcRNU8wkw1wBWtx Z2X2BU1QAGL1z5Isu57CKi4ZDyqkjHxYiE+IVXsLG1XNnh7thbt7xpH/G2A2fS6azmNpEkOcA+p bk/f7qrWaqLRoUfsR/z6naTg8u+lZV002gI2OKe8ap5xgAOlRfxfH5aIckusaijND/00NPvZ9qM JnJl9gCMiOQV46oaUgc/T9joRIKEUoS0FnEjKM+9nwoG0JzzGYjf67ISKRKUGpvw8zYFbvGSd6j bmckIyGgPwnIwSUqP5iqOVc97GBmF1ySR3fEvsZlZuO7Xu1mMoOXjGKfKHZZVYlcHXSsSpQ= X-Received: by 2002:a17:902:f681:b0:223:6180:1bf7 with SMTP id d9443c01a7336-22b42c43a5bmr12196815ad.42.1744248844077; Wed, 09 Apr 2025 18:34:04 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHM5MLSaC5h0z0Nma92y/73HYdOvdIe7fjt5Tz++qKzvrLB+EeEnAMPV6E6WyIx8TKR//F42g== X-Received: by 2002:a17:902:f681:b0:223:6180:1bf7 with SMTP id d9443c01a7336-22b42c43a5bmr12196485ad.42.1744248843598; Wed, 09 Apr 2025 18:34:03 -0700 (PDT) Received: from jiegan-gv.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22ac7ccb596sm18801815ad.220.2025.04.09.18.33.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Apr 2025 18:34:02 -0700 (PDT) From: Jie Gan To: Suzuki K Poulose , Mike Leach , James Clark , Alexander Shishkin , Maxime Coquelin , Alexandre Torgue , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bjorn Andersson , Konrad Dybcio Cc: Tingwei Zhang , Jinlong Mao , coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com Subject: [PATCH v2 4/5] coresight: tmc: add functions for byte-cntr operation Date: Thu, 10 Apr 2025 09:33:29 +0800 Message-Id: <20250410013330.3609482-5-jie.gan@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250410013330.3609482-1-jie.gan@oss.qualcomm.com> References: <20250410013330.3609482-1-jie.gan@oss.qualcomm.com> MIME-Version: 1.0 X-Authority-Analysis: v=2.4 cv=PJgP+eqC c=1 sm=1 tr=0 ts=67f7200d cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=XR8D0OoHHMoA:10 a=EUspDBNiAAAA:8 a=vnqp29LrZxOKxJPgRI8A:9 a=1OuFwYUASf3TG4hYMiVC:22 X-Proofpoint-ORIG-GUID: C_pRqp9xQ86PV0DHB0AIiW7rN2YjPqX3 X-Proofpoint-GUID: C_pRqp9xQ86PV0DHB0AIiW7rN2YjPqX3 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-09_06,2025-04-08_04,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 lowpriorityscore=0 clxscore=1015 adultscore=0 malwarescore=0 spamscore=0 impostorscore=0 suspectscore=0 mlxlogscore=999 bulkscore=0 mlxscore=0 priorityscore=1501 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2502280000 definitions=main-2504100010 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250409_183406_551340_A8EB45D9 X-CRM114-Status: GOOD ( 26.56 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org The byte-cntr function only copy trace data from etr_buf based on the IRQ count number. The system will call byte-cntr realted functions when the BYTECNTRVAL register has configured. Signed-off-by: Jie Gan --- .../hwtracing/coresight/coresight-tmc-core.c | 29 ++++- .../hwtracing/coresight/coresight-tmc-etr.c | 113 ++++++++++++++++++ drivers/hwtracing/coresight/coresight-tmc.h | 8 +- 3 files changed, 146 insertions(+), 4 deletions(-) diff --git a/drivers/hwtracing/coresight/coresight-tmc-core.c b/drivers/hwtracing/coresight/coresight-tmc-core.c index a7814e8e657b..42707b5b6349 100644 --- a/drivers/hwtracing/coresight/coresight-tmc-core.c +++ b/drivers/hwtracing/coresight/coresight-tmc-core.c @@ -229,6 +229,7 @@ static int tmc_prepare_crashdata(struct tmc_drvdata *drvdata) static int tmc_read_prepare(struct tmc_drvdata *drvdata) { + struct ctcu_byte_cntr *byte_cntr_data = drvdata->byte_cntr_data; int ret = 0; switch (drvdata->config_type) { @@ -237,7 +238,10 @@ static int tmc_read_prepare(struct tmc_drvdata *drvdata) ret = tmc_read_prepare_etb(drvdata); break; case TMC_CONFIG_TYPE_ETR: - ret = tmc_read_prepare_etr(drvdata); + if (byte_cntr_data && byte_cntr_data->thresh_val) + ret = tmc_read_byte_cntr_prepare(drvdata); + else + ret = tmc_read_prepare_etr(drvdata); break; default: ret = -EINVAL; @@ -251,6 +255,7 @@ static int tmc_read_prepare(struct tmc_drvdata *drvdata) static int tmc_read_unprepare(struct tmc_drvdata *drvdata) { + struct ctcu_byte_cntr *byte_cntr_data = drvdata->byte_cntr_data; int ret = 0; switch (drvdata->config_type) { @@ -259,7 +264,10 @@ static int tmc_read_unprepare(struct tmc_drvdata *drvdata) ret = tmc_read_unprepare_etb(drvdata); break; case TMC_CONFIG_TYPE_ETR: - ret = tmc_read_unprepare_etr(drvdata); + if (byte_cntr_data && byte_cntr_data->thresh_val) + ret = tmc_read_byte_cntr_unprepare(drvdata); + else + ret = tmc_read_unprepare_etr(drvdata); break; default: ret = -EINVAL; @@ -290,11 +298,16 @@ static int tmc_open(struct inode *inode, struct file *file) static inline ssize_t tmc_get_sysfs_trace(struct tmc_drvdata *drvdata, loff_t pos, size_t len, char **bufpp) { + struct ctcu_byte_cntr *byte_cntr_data = drvdata->byte_cntr_data; + 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: + if (byte_cntr_data && byte_cntr_data->thresh_val) + return tmc_byte_cntr_get_data(drvdata, &len, bufpp); + return tmc_etr_get_sysfs_trace(drvdata, pos, len, bufpp); } @@ -308,6 +321,8 @@ static ssize_t tmc_read(struct file *file, char __user *data, size_t len, ssize_t actual; struct tmc_drvdata *drvdata = container_of(file->private_data, struct tmc_drvdata, miscdev); + struct ctcu_byte_cntr *byte_cntr_data = drvdata->byte_cntr_data; + actual = tmc_get_sysfs_trace(drvdata, *ppos, len, &bufp); if (actual <= 0) return 0; @@ -318,7 +333,15 @@ static ssize_t tmc_read(struct file *file, char __user *data, size_t len, return -EFAULT; } - *ppos += actual; + if (byte_cntr_data && byte_cntr_data->thresh_val) { + byte_cntr_data->total_size += actual; + if (byte_cntr_data->r_offset + actual >= drvdata->size) + byte_cntr_data->r_offset = 0; + else + byte_cntr_data->r_offset += actual; + } else + *ppos += actual; + dev_dbg(&drvdata->csdev->dev, "%zu bytes copied\n", actual); return actual; diff --git a/drivers/hwtracing/coresight/coresight-tmc-etr.c b/drivers/hwtracing/coresight/coresight-tmc-etr.c index ed8a89fcd3fc..dd9c6b541b60 100644 --- a/drivers/hwtracing/coresight/coresight-tmc-etr.c +++ b/drivers/hwtracing/coresight/coresight-tmc-etr.c @@ -18,6 +18,7 @@ #include "coresight-etm-perf.h" #include "coresight-priv.h" #include "coresight-tmc.h" +#include "coresight-ctcu.h" struct etr_flat_buf { struct device *dev; @@ -1148,6 +1149,77 @@ static int tmc_etr_enable_hw(struct tmc_drvdata *drvdata, return rc; } +/* Read the data from ETR's DDR buffer. */ +static ssize_t __tmc_byte_cntr_get_data(struct tmc_drvdata *drvdata, size_t *len, + char **bufpp) +{ + struct ctcu_byte_cntr *byte_cntr_data = drvdata->byte_cntr_data; + size_t actual, bytes = byte_cntr_data->thresh_val; + struct etr_buf *etr_buf = drvdata->sysfs_buf; + long r_offset = byte_cntr_data->r_offset; + + if (*len >= bytes) + *len = bytes; + else if ((r_offset % bytes) + *len > bytes) + *len = bytes - (r_offset % bytes); + + actual = tmc_etr_buf_get_data(etr_buf, r_offset, *len, bufpp); + if (actual == bytes || (actual + r_offset) % bytes == 0) + atomic_dec(&byte_cntr_data->irq_cnt); + + return actual; +} + +/* Flush the remaining data in the ETR buffer after the byte-cntr has stopped. */ +static ssize_t tmc_byte_cntr_flush_buffer(struct tmc_drvdata *drvdata, size_t len, + char **bufpp) +{ + struct ctcu_byte_cntr *byte_cntr_data = drvdata->byte_cntr_data; + struct etr_buf *etr_buf = drvdata->sysfs_buf; + long r_offset = byte_cntr_data->r_offset; + long w_offset = byte_cntr_data->w_offset; + ssize_t read_len = 0, remaining_len; + + if (w_offset < r_offset) + remaining_len = drvdata->size + w_offset - r_offset; + else + remaining_len = w_offset - r_offset; + + if (remaining_len > len) + remaining_len = len; + + if (remaining_len > 0) + read_len = tmc_etr_buf_get_data(etr_buf, r_offset, remaining_len, bufpp); + + return read_len; +} + +ssize_t tmc_byte_cntr_get_data(struct tmc_drvdata *drvdata, size_t *len, char **bufpp) +{ + struct ctcu_byte_cntr *byte_cntr_data = drvdata->byte_cntr_data; + ssize_t read_len; + + /* + * Flush the remaining data in the ETR buffer based on the write + * offset of the ETR buffer when the byte cntr function has stopped. + */ + if (!byte_cntr_data->read_active || !byte_cntr_data->enable) { + read_len = tmc_byte_cntr_flush_buffer(drvdata, *len, bufpp); + if (read_len > 0) + return read_len; + + return -EINVAL; + } + + if (!atomic_read(&byte_cntr_data->irq_cnt)) + if (wait_event_interruptible(byte_cntr_data->wq, + atomic_read(&byte_cntr_data->irq_cnt) > 0 || + !byte_cntr_data->enable)) + return -ERESTARTSYS; + + return __tmc_byte_cntr_get_data(drvdata, len, bufpp); +} + /* * Return the available trace data in the buffer (starts at etr_buf->offset, * limited by etr_buf->len) from @pos, with a maximum limit of @len, @@ -1963,6 +2035,32 @@ const struct coresight_ops tmc_etr_cs_ops = { .panic_ops = &tmc_etr_sync_ops, }; +int tmc_read_byte_cntr_prepare(struct tmc_drvdata *drvdata) +{ + struct ctcu_byte_cntr *byte_cntr_data = drvdata->byte_cntr_data; + long r_offset; + + if (byte_cntr_data->read_active) + return -EBUSY; + + /* + * The original r_offset is the w_offset of the ETR buffer at the + * start of the byte-cntr. + */ + r_offset = tmc_etr_get_rwp_offset(drvdata); + if (r_offset < 0) { + dev_err(&drvdata->csdev->dev, "failed to get r_offset\n"); + return r_offset; + } + + enable_irq_wake(byte_cntr_data->byte_cntr_irq); + byte_cntr_data->r_offset = r_offset; + byte_cntr_data->total_size = 0; + byte_cntr_data->read_active = true; + + return 0; +} + int tmc_read_prepare_etr(struct tmc_drvdata *drvdata) { int ret = 0; @@ -1999,6 +2097,21 @@ int tmc_read_prepare_etr(struct tmc_drvdata *drvdata) return ret; } +int tmc_read_byte_cntr_unprepare(struct tmc_drvdata *drvdata) +{ + struct ctcu_byte_cntr *byte_cntr_data = drvdata->byte_cntr_data; + struct device *dev = &drvdata->csdev->dev; + + disable_irq_wake(byte_cntr_data->byte_cntr_irq); + atomic_set(&byte_cntr_data->irq_cnt, 0); + byte_cntr_data->read_active = false; + dev_dbg(dev, "send data total size: %llu bytes, r_offset: %ld w_offset: %ld\n", + byte_cntr_data->total_size, byte_cntr_data->r_offset, + byte_cntr_data->w_offset); + + return 0; +} + int tmc_read_unprepare_etr(struct tmc_drvdata *drvdata) { unsigned long flags; diff --git a/drivers/hwtracing/coresight/coresight-tmc.h b/drivers/hwtracing/coresight/coresight-tmc.h index 015592863352..1b838e4fc9e8 100644 --- a/drivers/hwtracing/coresight/coresight-tmc.h +++ b/drivers/hwtracing/coresight/coresight-tmc.h @@ -14,6 +14,8 @@ #include #include +#include "coresight-ctcu.h" + #define TMC_RSZ 0x004 #define TMC_STS 0x00c #define TMC_RRD 0x010 @@ -334,11 +336,15 @@ ssize_t tmc_etb_get_sysfs_trace(struct tmc_drvdata *drvdata, /* ETR functions */ int tmc_read_prepare_etr(struct tmc_drvdata *drvdata); int tmc_read_unprepare_etr(struct tmc_drvdata *drvdata); +int tmc_read_prepare_etr(struct tmc_drvdata *drvdata); +int tmc_read_byte_cntr_prepare(struct tmc_drvdata *drvdata); +int tmc_read_byte_cntr_unprepare(struct tmc_drvdata *drvdata); void tmc_etr_disable_hw(struct tmc_drvdata *drvdata); extern const struct coresight_ops tmc_etr_cs_ops; ssize_t tmc_etr_get_sysfs_trace(struct tmc_drvdata *drvdata, loff_t pos, size_t len, char **bufpp); - +ssize_t tmc_byte_cntr_get_data(struct tmc_drvdata *drvdata, size_t *len, + char **bufpp); #define TMC_REG_PAIR(name, lo_off, hi_off) \ static inline u64 \ From patchwork Thu Apr 10 01:33:30 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jie Gan X-Patchwork-Id: 14045719 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 20467C369A5 for ; Thu, 10 Apr 2025 01:44:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=Y+3FfrSNBC0rnW/pbZ1shOcvb9E0aupV7QcxaMUAHKc=; b=CSXGepyzFxKUGGQP4DW9p1JTUP UKwSkFOhk+lNN76Z2lwLro/tyWwwGo5TcMuoYn845YZs2XrWdOu+SD6tQF5yjs6qHJTV/f1otPbge sUgbwjUVujP0LFDlNf2NOY9WoxPeviP/l/fuMdsT93NhUeLBdronXE/BF8VkXP54IrPrF2bv6sfSl cutVSaIpzgiBx4drqsuOxJuCFr/d2xyyYd9whRx9TUwcyvAf2LUdn7FRQ2BvAnnH24Lq4lB4R4N4V OV2bLh2mdtY4Y4tt700/M+Mma1TyPWPoCzzzgqI9TPskUyokvORi6z6s4HBwMX2LU3F6STAG8N095 57XOhZXg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u2gy5-00000008y6A-0ufi; Thu, 10 Apr 2025 01:44:37 +0000 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u2gny-00000008wiW-1tTx for linux-arm-kernel@lists.infradead.org; Thu, 10 Apr 2025 01:34:11 +0000 Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 539HMCEi010454 for ; Thu, 10 Apr 2025 01:34:10 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=Y+3FfrSNBC0 rnW/pbZ1shOcvb9E0aupV7QcxaMUAHKc=; b=paeU4x0rLxrFhPoGJrczRk4OJ2y Pkw0tFRnIMmEg5h/98A/+VlOhzFrX52SRBH18x5nchp3RFQ2B6ceiKBxxrkBq3bv mBNbC/10Fbx6Y57QLE6fggGW7O3fEZVrunIUVkCI8+H/VIOTaKGrRv0Eq5W8JVqt ifqzInGkFFmSsVlArb3+7HNHrH7NlDrN4EzoquEdTTSonuwXqeARbbP7+yC6kQKW zuk6e/EsrtRLEx1Kf1ZnntZAF54mag1bU0er2pGZXcXPHDqiWWVlM5AXkinFuts0 hvRMU8amlUKkS/qs/G6ZByeg5ax9+DBHa21vRRCLcnU02boa0P7HvJtWOOQ== 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 45twftn2e8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Thu, 10 Apr 2025 01:34:10 +0000 (GMT) Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-af9564001cbso218917a12.3 for ; Wed, 09 Apr 2025 18:34:09 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744248849; x=1744853649; 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=Y+3FfrSNBC0rnW/pbZ1shOcvb9E0aupV7QcxaMUAHKc=; b=Hf6HdIU5BBCB5nr01yxNovIigWO4VcJOHQ+BrdITce80/JQeUEBj6xPxgn15Ugo/wV +f1Z6JVFS65rDT5kZR1MudYp6ekk/aeXlhg/txN6msSyVwew3K4zqYzioZhQ45Zo2TRE KLM0yd4POc+lVBV5uCm7IB/y+6DLy1e8pGn/OHCEo3o36YWGK0JOL48UrQkhFEnBm13m NMB7/EaXNVjSGi8Qy22q9OxbjnXeS7aD8bwOduijn+CWnuqYrj/PnZHsTFXx06KpC8ZI rToIC/6tSspP4N7v8bpjYRGJKoXkHj4zrAZpPe3xXvEFxadmKrTTnAL+EUANkkv9gtOt /m6g== X-Forwarded-Encrypted: i=1; AJvYcCV7uAToXw8dwub9kSgGSX6jNpW5REomQtHE1D3DCdgv1t/aIGHm9LrAltZmVhyUkWYoI0tzVDxx/Z27NPd4/FpE@lists.infradead.org X-Gm-Message-State: AOJu0YweT3WB1DLqGwjs1MKXz/gt0fA3DWSo251z3T5k10QHDow9qF73 W/fajlcKSbzKU597sUHNrVXe49GCv98IKmcniYsVfo1aeLhzttPoMp8wT+fI0nM9qFYx8YL7SG8 qBi7Xf9JrqBmNAz55ynRT/vbbldPWqrXyC/1L0LT7aG+7trhzPdDYuKjWgXc14XtFy6dr0/s/ZA == X-Gm-Gg: ASbGncsaoZiwOAAHl4PrYtTx6aZtajx1kUSln/bq2pLPqkmaE5iUiOBgfxUVLo7ym2n t0UtGsXuond3Hq8DPjkfxrtpvcP05a1uTifEfhfJe1O5t2p8duy0ufpY4VXbYvL8JtePnbOukxR vj/743MdSAaE1qab3ZlrVKsyKqSalqv5AwGPF1I+5NeU7UT+tkK6ITcd0BUuiUziviJrzrj40rH S2viJjwfWQ7tdpQMAubWqIgzQJmQW914Z3GTlTtiiSLDwzMrrjV7rj2NCyCJyzLSdwAzPgCHGJu LAz1KEzhZ64bS8vbFTdSdVP47PhYbUihKH5Fk6dNflQ+wsacG5lmrRchgGHIuuZSDU5daW4= X-Received: by 2002:a17:90b:270b:b0:2ee:d7d3:3019 with SMTP id 98e67ed59e1d1-307e5972f0fmr1174652a91.12.1744248849116; Wed, 09 Apr 2025 18:34:09 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE7MCKoesf/io0c1ClAVPtM1es5MKBzBPeISdJZK2T+emvkEbwBgOvPufDeyPNVn4pVjc0MKg== X-Received: by 2002:a17:90b:270b:b0:2ee:d7d3:3019 with SMTP id 98e67ed59e1d1-307e5972f0fmr1174618a91.12.1744248848735; Wed, 09 Apr 2025 18:34:08 -0700 (PDT) Received: from jiegan-gv.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22ac7ccb596sm18801815ad.220.2025.04.09.18.34.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Apr 2025 18:34:08 -0700 (PDT) From: Jie Gan To: Suzuki K Poulose , Mike Leach , James Clark , Alexander Shishkin , Maxime Coquelin , Alexandre Torgue , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bjorn Andersson , Konrad Dybcio Cc: Tingwei Zhang , Jinlong Mao , coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com Subject: [PATCH v2 5/5] arm64: dts: qcom: sa8775p: Add interrupts to CTCU device Date: Thu, 10 Apr 2025 09:33:30 +0800 Message-Id: <20250410013330.3609482-6-jie.gan@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250410013330.3609482-1-jie.gan@oss.qualcomm.com> References: <20250410013330.3609482-1-jie.gan@oss.qualcomm.com> MIME-Version: 1.0 X-Authority-Analysis: v=2.4 cv=B5+50PtM c=1 sm=1 tr=0 ts=67f72012 cx=c_pps a=Oh5Dbbf/trHjhBongsHeRQ==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=XR8D0OoHHMoA:10 a=EUspDBNiAAAA:8 a=wB5yJZRArZ6K3lEFQq8A:9 a=_Vgx9l1VpLgwpw_dHYaR:22 X-Proofpoint-GUID: Qn6NbNffLI3VEzYSZEs8tJXmeM6tXsgP X-Proofpoint-ORIG-GUID: Qn6NbNffLI3VEzYSZEs8tJXmeM6tXsgP X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-09_06,2025-04-08_04,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxlogscore=804 suspectscore=0 malwarescore=0 bulkscore=0 phishscore=0 spamscore=0 priorityscore=1501 adultscore=0 impostorscore=0 lowpriorityscore=0 mlxscore=0 clxscore=1015 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2502280000 definitions=main-2504100010 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250409_183410_494041_0A6E2B7A X-CRM114-Status: GOOD ( 12.93 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Add interrupts to enable byte-cntr function for TMC ETR devices. Signed-off-by: Jie Gan Reviewed-by: Konrad Dybcio --- 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/qcom/sa8775p.dtsi index a904960359d7..b091e941aa21 100644 --- a/arch/arm64/boot/dts/qcom/sa8775p.dtsi +++ b/arch/arm64/boot/dts/qcom/sa8775p.dtsi @@ -2427,6 +2427,11 @@ ctcu@4001000 { clocks = <&aoss_qmp>; clock-names = "apb"; + interrupts = , + ; + interrupt-names = "etr0", + "etr1"; + in-ports { #address-cells = <1>; #size-cells = <0>;