From nobody Mon Feb 9 16:34:30 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3D77C2EBB98 for ; Thu, 18 Dec 2025 08:10:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766045458; cv=none; b=cl+hU5AGZ2xSAn4y2+3BDB1FTVeee2bQjcm/L9LqAiKab8yUH8A9EQiJB3vKMvYNQO6Us6Ub7rWM8VX9qSW56DaVCjveVLRoLJcuz78YhpSPfDgkpFYRv6GRqxCHUW6eCefGFrGxrH5XrOxeCkDim2E93kn5OaR8aMau7M+7Q7c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766045458; c=relaxed/simple; bh=xSVwvf3r4THug/toaP/HzyHA8CkwtVjVbu+nopQb9No=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ohbXPfLPccGPFCrnoeQA9ddrTdPadVdzZQMfYkky3JbZz13wgRl4lyEobXEO25o83e4c/88c1cfwIy71JWilK8J0A1I/uT93Z9dpLrR47MYhwAPVeCJB6/KR439D+MCZCOZNYlX5nMadqxgPf4KlRK0s3CdOZu9BMG3T4N7sAts= 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=S4hn61mK; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Yx/LqrHN; 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="S4hn61mK"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Yx/LqrHN" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BI1YSOM527615 for ; Thu, 18 Dec 2025 08:10:53 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= ElfdZT9ZichzDq1xpO9r+/XiBQGhjmsYsOiV/qaeUTc=; b=S4hn61mK2essU7x1 HghDeHd0vKK7YkMWjgsjdkEdRVSBgoWS3A2eXkHudflfINXBgbzIO6WHfQHBCIm9 MVBq3Hy3sE3Wz1NunBRsElnuWUJ9RQHdpcAYyf0U7GpmfCZT9dDc6dBazIHHvKKq WLRmF/NTxLiTkrd/1HF1ehSsQ/uIM+ukahBf6FJXifNestH0+sTFlGJnW+ReJgXi rzApQxN71u6yaD0UHG+2w3m46DtX0caLyLYNIv58EPl7wZNzARZe8pD7IH4sx4tC 6iu3N/vEOCndS73ctIKp5wlQdQzIjLQ73RZBz01LXCxkqiVpukyeugmYBby+vi7g XFQuEg== Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4b43mb1q7d-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 18 Dec 2025 08:10:52 +0000 (GMT) Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-bb27b422cf2so718530a12.1 for ; Thu, 18 Dec 2025 00:10:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1766045452; x=1766650252; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=ElfdZT9ZichzDq1xpO9r+/XiBQGhjmsYsOiV/qaeUTc=; b=Yx/LqrHNMl4rqzrN7dCbOp8IEu2KKOiih8uqOOLgo/7WOR99qSYUJAHhifubU3a4t4 fG9qhfFVvyiBNnVzecfsFa3rEPqJIXmg1Qxca8UZ+EmGpXObF82MzuD2uTZaZBkBjQ8a HifBHsMaEcDnH8e7Zq9MetbitoV9Vyft9zLAOqoeKv+thOfL6MI8g7mzYMyO8JWpxT6e DCwyxZD5ZtNN35AGnMqR2wfYIunxVBH1Mrxtcva0pmmuAsBY6ijMqEj43WydoesceeKn yhr9ItRHdy44LEGxU9BVcU3fWBVsk8m9cabIi9zGqz+JW3Tq8MjXdrZNsf8tVYbT+/Tk RusQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766045452; x=1766650252; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=ElfdZT9ZichzDq1xpO9r+/XiBQGhjmsYsOiV/qaeUTc=; b=ugPV2OqZGoTySpDELlLQcCaSH5cBLLGT4d+HlgdFSA+YmGm3+2RI7BvQ79Ef1rhrZF bbIvhGtEgV+qD+d2CZSPqGlPjaBCm1/sXpn0o9IyaOGX6HK+MMTu/7RNFQUuzP2NO3XF aeqNB7cs/8+600Wct+bF+kAUh03iWjBBgfovohZCiCGfBfSaTY7cZl2bTvVuPMXUkiS4 fBBLlmGU83VU+bxIZUYVgafZbmJXWiE/xNXXD1gUbeMtduSJgixlsm2ATaEjlUydRN0w +D0HgMBZGgZpzukVx+wRsMZHJB7CGUdxa3Ha8/et8Aq40LoJGanMXn+9PAf1qiM/aGm8 stPA== X-Forwarded-Encrypted: i=1; AJvYcCXzliTwav1aP0SDeEpFn8ojaVf+Ajquw/zkTbXAmxzYqfL1NHzM2P9MFp29ZEBIJo7lKChXVmIttM3EZ/o=@vger.kernel.org X-Gm-Message-State: AOJu0YzZsTbXDyorty9Mzc4mDKN+emw0YfD/WfxQVmNzrAe+9io8w1bg 3mOdiCzGueeLFUOTFsBdBnBC0z2QLPR8ntOwIhFNrI8dgK/n3xyzxJLQwLhw+4bsEjZwbqHKFjG M/FtsT039dXHPiQ692e2QBHj1NCY/7VnfprZo7eKnou1R5ydePs8PpqxN11YSsZ4T81E= X-Gm-Gg: AY/fxX7X8x2sKBvLaCyKYcqkRDPPqhCk2/msyz4KLKVHIHHE3cCens2ZQGeEhPQ8tkq CZyO30avvUDHWgXxDBkS39WbMSBilqb7KV5dxsPQu81zUlBKLws+X5Q7DkHvpYxIotXzm9+3AfK FT27e/AbB3AyoLspt6vIWnYeOPW2WoB3yn1jiDQDSfYK0EACS4gR7Y4AlHzNLa290jUvncNwMuz q1rooK61sLvnlgX7Q6fHz/dvRiBQk5EbQEXjtWA/ZouUAlXvtKmA6jnFKqCrv/0iDWBcPsXn14/ 5c0gKqkFcNkgT/qwc85hK6vzBf3igz0yDhPiIHRMK6Dr8zINAB4rOBxWRPPQ4sAoOECW7JfL9XI n1oYY416+MhUYZp9ioMmzBvk/4Pq5WUGEibm0aF4+Ny8dNxQ3aHJ0Zu5SqOQZ78zCaB8= X-Received: by 2002:a05:7300:fb02:b0:2ae:6f72:f3dd with SMTP id 5a478bee46e88-2ae6f73071bmr2667964eec.30.1766045451649; Thu, 18 Dec 2025 00:10:51 -0800 (PST) X-Google-Smtp-Source: AGHT+IHpw2qmVadrx3R/o0TSTdL4X3Pp50wTMcw51fF1QxTKisBU7gE+WXnHQMFAEexgkRJku7S+Ew== X-Received: by 2002:a05:7300:fb02:b0:2ae:6f72:f3dd with SMTP id 5a478bee46e88-2ae6f73071bmr2667940eec.30.1766045451078; Thu, 18 Dec 2025 00:10:51 -0800 (PST) Received: from hu-yuanfang-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2b04e58d423sm2564824eec.6.2025.12.18.00.10.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Dec 2025 00:10:50 -0800 (PST) From: Yuanfang Zhang Date: Thu, 18 Dec 2025 00:09:49 -0800 Subject: [PATCH v2 09/12] coresight-tmc: Update management interface for CPU-bound TMCs Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251218-cpu_cluster_component_pm-v2-9-2335a6ae62a0@oss.qualcomm.com> References: <20251218-cpu_cluster_component_pm-v2-0-2335a6ae62a0@oss.qualcomm.com> In-Reply-To: <20251218-cpu_cluster_component_pm-v2-0-2335a6ae62a0@oss.qualcomm.com> To: Suzuki K Poulose , Mike Leach , James Clark , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Mathieu Poirier , Leo Yan , Alexander Shishkin , Bjorn Andersson , Konrad Dybcio Cc: kernel@oss.qualcomm.com, coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Yuanfang Zhang , maulik.shah@oss.qualcomm.com X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1766045439; l=5365; i=yuanfang.zhang@oss.qualcomm.com; s=20250814; h=from:subject:message-id; bh=xSVwvf3r4THug/toaP/HzyHA8CkwtVjVbu+nopQb9No=; b=/9hBxZh5Oxuk1NiyBSNu5X4oibJZHzow5zfIAp/BBYoPkFuENMTHG6mReTKKYRE6E3WH70Tl1 xpME9EbqVX8CGkwTRi1SabeS+B1ywtGX0VHhQdWPM4HXR3n58/Cgb1U X-Developer-Key: i=yuanfang.zhang@oss.qualcomm.com; a=ed25519; pk=9oS/FoPW5k0CsqSDDrPlnV+kVIOUaAe0O5pr4M1wHgY= X-Proofpoint-ORIG-GUID: JRvVJtYSFfPY6V_Untd47Qjz2l2Cp3_q X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjE4MDA2NiBTYWx0ZWRfX2QfsD8UucK2A GlRaJ9y4qtnrMG3rUbKA+W6a/8b832jCGOwKezapu64c3QoYAbD50ZjsTbTUjvkosKIBuvhoqIh UXuJI4L09zGLWjYlDJrO9uESHSuAZQD7/TC0LwsOlRTQr49rn+yv+hIIhXLbxbXF9q94CS3s/TY 7s/nAPs6SculE9biI7RWfx1OMU9Ps1bizVcD8VnQYjnHgQa+uIqhIwBFPmkLiU7KwTgt4vq99Oq xfP+rViWuPSR8lA6idCAc6iu3m2m/tb/ZOdDmDwEQO2HJ23FfGJTdkRWfhkj2iPlH7bdpQ5s5oH 5x7nobJaBtz7Qb2Dtl6wE4lvUzHu2acjIKdIKBd4ybqF1PeFS2uKR7Jm3yFyamwZSuqjGYIGHVM U35hkoc+7lLh0xGS0hYA/Gl7HjVfjQ== X-Authority-Analysis: v=2.4 cv=NPHYOk6g c=1 sm=1 tr=0 ts=6943b70c cx=c_pps a=rz3CxIlbcmazkYymdCej/Q==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=ZEnZJDymvn760SlnwMgA:9 a=QEXdDO2ut3YA:10 a=bFCP_H2QrGi7Okbo017w:22 X-Proofpoint-GUID: JRvVJtYSFfPY6V_Untd47Qjz2l2Cp3_q X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-18_01,2025-12-17_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 lowpriorityscore=0 suspectscore=0 phishscore=0 clxscore=1015 bulkscore=0 impostorscore=0 adultscore=0 priorityscore=1501 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512180066 The current TMC management interface (sysfs attributes) assumes that device registers can be accessed directly from any CPU. However, for TMCs associated with specific CPU clusters, registers must be accessed from a CPU within that cluster. Replace the standard `coresight_simple_reg*` handlers with custom accessors (`coresight_tmc_reg*`). These new handlers check if the TMC is bound to a specific set of CPUs: - If bound, they use `smp_call_function_single()` to read the register on an appropriate CPU. - If not bound (global TMC), they fall back to direct access. This ensures correct register reads for per-cluster TMC devices while maintaining backward compatibility for global TMCs. Signed-off-by: Yuanfang Zhang --- drivers/hwtracing/coresight/coresight-tmc-core.c | 137 +++++++++++++++++++= +--- 1 file changed, 123 insertions(+), 14 deletions(-) diff --git a/drivers/hwtracing/coresight/coresight-tmc-core.c b/drivers/hwt= racing/coresight/coresight-tmc-core.c index 0e1b5956398d3cefdd938a8a8404076eb4850b44..5b9f2e57c78f42f0f1460d8a8dc= bac72b5f6085e 100644 --- a/drivers/hwtracing/coresight/coresight-tmc-core.c +++ b/drivers/hwtracing/coresight/coresight-tmc-core.c @@ -458,21 +458,130 @@ static enum tmc_mem_intf_width tmc_get_memwidth(u32 = devid) return memwidth; } =20 +struct tmc_smp_arg { + struct tmc_drvdata *drvdata; + u32 offset; + int rc; +}; + +static void tmc_read_reg_smp_call(void *info) +{ + struct tmc_smp_arg *arg =3D info; + + arg->rc =3D readl_relaxed(arg->drvdata->base + arg->offset); +} + +static u32 cpu_tmc_read_reg(struct tmc_drvdata *drvdata, u32 offset) +{ + struct tmc_smp_arg arg =3D { + .drvdata =3D drvdata, + .offset =3D offset, + }; + int cpu, ret =3D 0; + + for_each_cpu(cpu, drvdata->supported_cpus) { + ret =3D smp_call_function_single(cpu, + tmc_read_reg_smp_call, &arg, 1); + if (!ret) + return arg.rc; + } + + return ret; +} + +static ssize_t coresight_tmc_reg32_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct tmc_drvdata *drvdata =3D dev_get_drvdata(dev->parent); + struct cs_off_attribute *cs_attr =3D container_of(attr, struct cs_off_att= ribute, attr); + int ret; + u32 val; + + ret =3D pm_runtime_resume_and_get(dev->parent); + if (ret < 0) + return ret; + + if (!drvdata->supported_cpus) + val =3D readl_relaxed(drvdata->base + cs_attr->off); + else + val =3D cpu_tmc_read_reg(drvdata, cs_attr->off); + + pm_runtime_put(dev->parent); + + if (ret < 0) + return ret; + else + return sysfs_emit(buf, "0x%x\n", val); +} + +static ssize_t coresight_tmc_reg64_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct tmc_drvdata *drvdata =3D dev_get_drvdata(dev->parent); + struct cs_pair_attribute *cs_attr =3D container_of(attr, struct cs_pair_a= ttribute, attr); + int ret; + u64 val; + + ret =3D pm_runtime_resume_and_get(dev->parent); + if (ret < 0) + return ret; + if (!drvdata->supported_cpus) { + val =3D readl_relaxed(drvdata->base + cs_attr->lo_off) | + ((u64)readl_relaxed(drvdata->base + cs_attr->hi_off) << 32); + } else { + ret =3D cpu_tmc_read_reg(drvdata, cs_attr->lo_off); + + if (ret < 0) + goto out; + + val =3D ret; + + ret =3D cpu_tmc_read_reg(drvdata, cs_attr->hi_off); + if (ret < 0) + goto out; + + val |=3D ((u64)ret << 32); + } + +out: + pm_runtime_put_sync(dev->parent); + if (ret < 0) + return ret; + else + return sysfs_emit(buf, "0x%llx\n", val); +} + +#define coresight_tmc_reg32(name, offset) \ + (&((struct cs_off_attribute[]) { \ + { \ + __ATTR(name, 0444, coresight_tmc_reg32_show, NULL), \ + offset \ + } \ + })[0].attr.attr) +#define coresight_tmc_reg64(name, lo_off, hi_off) \ + (&((struct cs_pair_attribute[]) { \ + { \ + __ATTR(name, 0444, coresight_tmc_reg64_show, NULL), \ + lo_off, hi_off \ + } \ + })[0].attr.attr) static struct attribute *coresight_tmc_mgmt_attrs[] =3D { - coresight_simple_reg32(rsz, TMC_RSZ), - coresight_simple_reg32(sts, TMC_STS), - coresight_simple_reg64(rrp, TMC_RRP, TMC_RRPHI), - coresight_simple_reg64(rwp, TMC_RWP, TMC_RWPHI), - coresight_simple_reg32(trg, TMC_TRG), - coresight_simple_reg32(ctl, TMC_CTL), - coresight_simple_reg32(ffsr, TMC_FFSR), - coresight_simple_reg32(ffcr, TMC_FFCR), - coresight_simple_reg32(mode, TMC_MODE), - coresight_simple_reg32(pscr, TMC_PSCR), - coresight_simple_reg32(devid, CORESIGHT_DEVID), - coresight_simple_reg64(dba, TMC_DBALO, TMC_DBAHI), - coresight_simple_reg32(axictl, TMC_AXICTL), - coresight_simple_reg32(authstatus, TMC_AUTHSTATUS), + coresight_tmc_reg32(rsz, TMC_RSZ), + coresight_tmc_reg32(sts, TMC_STS), + coresight_tmc_reg64(rrp, TMC_RRP, TMC_RRPHI), + coresight_tmc_reg64(rwp, TMC_RWP, TMC_RWPHI), + coresight_tmc_reg32(trg, TMC_TRG), + coresight_tmc_reg32(ctl, TMC_CTL), + coresight_tmc_reg32(ffsr, TMC_FFSR), + coresight_tmc_reg32(ffcr, TMC_FFCR), + coresight_tmc_reg32(mode, TMC_MODE), + coresight_tmc_reg32(pscr, TMC_PSCR), + coresight_tmc_reg32(devid, CORESIGHT_DEVID), + coresight_tmc_reg64(dba, TMC_DBALO, TMC_DBAHI), + coresight_tmc_reg32(axictl, TMC_AXICTL), + coresight_tmc_reg32(authstatus, TMC_AUTHSTATUS), NULL, }; =20 --=20 2.34.1