From nobody Fri Apr 3 04:35:27 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1A72030F535 for ; Wed, 25 Mar 2026 05:44:06 +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=1774417448; cv=none; b=VKOexQaiguVnFGFMPROL1gzRH4E7Xme//lg0jNLpt2fGpC21nAJKmjv8kVvOrkI8oVl6TWYMUtVIghqFLhYUpjQy+SeLwVkJxgf1Rct77UW8r0+Nat3Lpnv1rHWFON9xBlfPWqLJkHoNaDwIpMLYRMnsIVIP/ZGbketokCSmwK4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774417448; c=relaxed/simple; bh=7Av2HAUAr7KB5Ak4a2H20M+seSJyBiILEkz7dpvzJfA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CH3h+scH3pEF2Q5L6DYZQy74s6hEW+EsXl/+hOwVbBtDp5X9CBl/qzg5WPQXsDFOdmpKhWvf/IUJ61NaIUTwKg3MY0VZMf/2isRbvFpHKZ6fxuigcA1yhQfE+l2hYwL++MHWVamEeePwl0pEHT4uLKdnBpAVhJnOdhAdkkDZ3YA= 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=Mr94mDjb; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=QbP8X+e0; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="Mr94mDjb"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="QbP8X+e0" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62P2J84X3057321 for ; Wed, 25 Mar 2026 05:44:06 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= 1uROBrYURmQMKmWYhSbrHteOFKQsLCjR237xB3AYYOI=; b=Mr94mDjb2yNvU7yw Gs+bsDbAGwj1bFgqGYMVnoh1yvJTR5CjDhG7N2CANnqEENGIzHGuC+RaiMyBPcuL p/ZQ//lO2lwaL0h94YAkgBxs7OXFtxwLkNvH9JDtgLpaAu7gkITvaYYlIWQ8XExp W77KQZp0CHR3674LrTjcYLAy9twGSiJBQ3xL6mUceZ+JoZXNhYjzvAMxPrPxLWyN +XYuQY1TIDnkVoh0Im5kISPCIjZ5ey9RHNgHIjrve+z9SwFaotDhxp3IgnLABUdA Z7KBXdW1yD6ujsbsia8qzFLC+RFJGPQ2vRfb7PAMboTtU4KB9KqGKQ1FCTNveK8/ HGRAdA== Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d46tp0jjd-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 25 Mar 2026 05:44:06 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2adc527eaf5so19473885ad.0 for ; Tue, 24 Mar 2026 22:44:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774417445; x=1775022245; 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=1uROBrYURmQMKmWYhSbrHteOFKQsLCjR237xB3AYYOI=; b=QbP8X+e0gE87tFN1NHAuX38HmFQQ9ngBxq7NUWJ1Czvof9Hh6cEhUQsmc9SgEgxNyP zc0Li0Ejj6bdI2YowxyI7ejeR5z+Xur9dmDF0lrk7QH4/CajIGvLVaxtN3A5syOLqCNp b/MCDfd+CQpY5kKk6H+RKjUVsCrwh3peTC102lINjltjJabJ4vzG83Dit6TlQiEZ7FBx QEsRtBsA34J1fMV8Rmiqo3EWERtfxa8xIBofqbJ0I9cbEOm+yVR0ljHbvm9VTlIgQjTP 7vmVLeu77vPWouCf54QaZmDACqMeIk1N3IeM9SEkQwo6j/pjZTJei/KIYjNFL+cwrD5W CDZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774417445; x=1775022245; 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=1uROBrYURmQMKmWYhSbrHteOFKQsLCjR237xB3AYYOI=; b=r+mopAXxaBrPtsoagnboavSuzFoqq8Ynw6A/PFtXb9NRb3F3LZo2lOs3UJ3QFolorN Xi88HQ6lro+8qmMF4Z8T9bJhupuqShRMbKbDaGQs1gmV7ghPREit5uE24N7Tm1LpWwxW UAMq4IISj17ScxDfqiTdTCW2SWa9fCutP2tSqo+Snf+OmBmgMS9XvVEp837LKvjrNrfU Ra0yrq2+oAtmg1KDYhrrJQEgUvX+19go4/5XXJLC5Zg6Dxy64x5L+L4OESrZJTMrGtYv /F+UTuC5UbfyoBHRqjPx7xp4QvTSLX4E84s1koaZDGA+CqpXZHYlmXoHZ7bf4Y2z7vKZ vuvg== X-Forwarded-Encrypted: i=1; AJvYcCWrEqRQukFUNgYVhSLjb1jALRToVRGrKfd/sL6ht84ihJf23HuLOXgsFNIhVW7NKBRcMNLwiE85lwntED4=@vger.kernel.org X-Gm-Message-State: AOJu0YyoHWqZ7GMarfgOSRKql5BUjHI5PsUOcRWoCdg6D+vuzaPOe+r8 BuDHINgtPiZ00k8Xz7eAjJx6s7ESSnqm2Lw0/alSr+V3Odm3dhbdICr8F8qs3ch72XWCVZKiSJm P6zHr4Tk26n4v8dQPZObjIJlP5JVPlNW8qda7kcDHhByatbCUe/tVWyF3azIojjZWZYdVApkATD s= X-Gm-Gg: ATEYQzximuvRgbK7R23NO9FPCOXWz3hANyKu8FAOqNVCLQUrH5vrPZBvqD749vGnqtj lK5e596uesADDrvs3/+faPvzc2RIGN6lK7Zx9HUL3N6WycM3nNl3Ro1yN8ErXLUwQagjG0Wp9fL Co4Y3EXMeIXk+oa9RPpUOIhXNneQxYQKtjbOUvmAmZo1QJiCKJw16lee/rx/rklpktfX5dNO9Ix eAmZAnvsch2iD4FFVpKx7SF9p4RYK94ZMUkX1VNsAme6nn6NO0jeu9j29f/stKO/qeUlXffAhvu u6SEwLmnPBEq6pZDnCxntMvpFtQPrxEaZJZYesC18Gz7bDI8ZXH/59iGEziUm2H3/zo5JFJD78k Y8tnBz1L+ECX1sF0dWiqHpUTR5hbiUC1/JApJ6rjk6pYjp9GvNBRaMSDyPH3n+k/UmjfCu89Xqg qSHWNKHdaJazhDLg== X-Received: by 2002:a17:902:e784:b0:2b0:4eeb:f80a with SMTP id d9443c01a7336-2b0b0ab3a21mr25199055ad.29.1774417445413; Tue, 24 Mar 2026 22:44:05 -0700 (PDT) X-Received: by 2002:a17:902:e784:b0:2b0:4eeb:f80a with SMTP id d9443c01a7336-2b0b0ab3a21mr25198645ad.29.1774417444850; Tue, 24 Mar 2026 22:44:04 -0700 (PDT) Received: from jinlmao-gv.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b0836556f6sm219985805ad.49.2026.03.24.22.44.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Mar 2026 22:44:04 -0700 (PDT) From: Yingchao Deng Date: Wed, 25 Mar 2026 13:43:45 +0800 Subject: [PATCH v7 2/4] coresight: cti: encode trigger register index in register offsets 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: <20260325-extended_cti-v7-2-bb406005089f@oss.qualcomm.com> References: <20260325-extended_cti-v7-0-bb406005089f@oss.qualcomm.com> In-Reply-To: <20260325-extended_cti-v7-0-bb406005089f@oss.qualcomm.com> To: Suzuki K Poulose , Mike Leach , James Clark , Leo Yan , Alexander Shishkin Cc: coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Jinlong Mao , Tingwei Zhang , Jie Gan , quic_yingdeng@quicinc.com, Yingchao Deng X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1774417433; l=6063; i=yingchao.deng@oss.qualcomm.com; s=20260324; h=from:subject:message-id; bh=7Av2HAUAr7KB5Ak4a2H20M+seSJyBiILEkz7dpvzJfA=; b=0fa+nmYg96nSHuDJGRyhZxDSsgOWgfT19ZguSiSwp/vuHjyKHTiCh5Iv1Ms+1Yb0seEIvbBxL Iy4Sk6rijZ3CEYOla+zqiEFOdEYaibAZICIYxobNu9pxZ9OjWEDc7mn X-Developer-Key: i=yingchao.deng@oss.qualcomm.com; a=ed25519; pk=5tp504LR96W2IVT3sAbRCqWtoG16CxJVUnXJSfU8NlQ= X-Proofpoint-ORIG-GUID: 88eges2RXSdD_NOKtXLzMYzwXb-DWUV4 X-Authority-Analysis: v=2.4 cv=F4lat6hN c=1 sm=1 tr=0 ts=69c37626 cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=JIbpoTx20AKeDh2nFAsA:9 a=QEXdDO2ut3YA:10 a=GvdueXVYPmCkWapjIL-Q:22 X-Proofpoint-GUID: 88eges2RXSdD_NOKtXLzMYzwXb-DWUV4 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzI1MDAzOCBTYWx0ZWRfX31Wp6Rdv6EjP zf8aHlPH4zpvrOXoWRN5kXiPpNQ7uS9WC255DyVBNyiI0TQmytQLL7SbozRJ/vgxHAQV9l7SsCV pXuKOcwcxijpg5B1H0/4ZW/TTuC3cBbpybtXlBCOKkrLocU5KaD+sVhRIJoabk+fQnfmIEjEyfI vMPIr6bJWOzEUzgJmTP99SHNxcEW2TBukqcQUwzUNyb9r/Ua6tFF8Vj+BgprJHtGaOSlLAsQKGv 8B4iYgErcBc0VbYSHhE99hbHQV9fBPt29O7y9SReeGdvuiSPp5R5ys5BPBUAWiegSp22kPjIMA3 B7u6d8XaExKgqdyKyJEyDKCAL7ongbTuziMFvfbJTm6TRWqd25kEI7Nh55kaxNq03c2HtRYf1Mf jXDU55x9us1V8oZOQ3fjmkz0C8FYp6J4KoBWcgP3Ahgog0AuqDLF6S6OIpYExs+A4US/bu8D1x9 Qk9mjgHEEnI+u3XtH/Q== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-25_02,2026-03-24_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 lowpriorityscore=0 priorityscore=1501 bulkscore=0 adultscore=0 malwarescore=0 clxscore=1015 suspectscore=0 impostorscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603250038 Introduce a small encoding to carry the register index together with the base offset in a single u32, and use a common helper to compute the final MMIO address. This refactors register access to be based on the encoded (reg, nr) pair, reducing duplicated arithmetic and making it easier to support variants that bank or relocate trigger-indexed registers. Signed-off-by: Yingchao Deng --- drivers/hwtracing/coresight/coresight-cti-core.c | 31 +++++++++++++++----= ---- drivers/hwtracing/coresight/coresight-cti-sysfs.c | 4 +-- drivers/hwtracing/coresight/coresight-cti.h | 17 ++++++++++--- 3 files changed, 36 insertions(+), 16 deletions(-) diff --git a/drivers/hwtracing/coresight/coresight-cti-core.c b/drivers/hwt= racing/coresight/coresight-cti-core.c index d5cb94e33184..023993475a2e 100644 --- a/drivers/hwtracing/coresight/coresight-cti-core.c +++ b/drivers/hwtracing/coresight/coresight-cti-core.c @@ -42,6 +42,14 @@ static DEFINE_MUTEX(ect_mutex); #define csdev_to_cti_drvdata(csdev) \ dev_get_drvdata(csdev->dev.parent) =20 +static void __iomem *cti_reg_addr(struct cti_drvdata *drvdata, u32 reg) +{ + u32 offset =3D CTI_REG_CLR_NR(reg); + u32 nr =3D CTI_REG_GET_NR(reg); + + return drvdata->base + offset + sizeof(u32) * nr; +} + /* write set of regs to hardware - call with spinlock claimed */ void cti_write_all_hw_regs(struct cti_drvdata *drvdata) { @@ -55,16 +63,17 @@ void cti_write_all_hw_regs(struct cti_drvdata *drvdata) =20 /* write the CTI trigger registers */ for (i =3D 0; i < config->nr_trig_max; i++) { - writel_relaxed(config->ctiinen[i], drvdata->base + CTIINEN(i)); + writel_relaxed(config->ctiinen[i], + cti_reg_addr(drvdata, CTI_REG_SET_NR(CTIINEN, i))); writel_relaxed(config->ctiouten[i], - drvdata->base + CTIOUTEN(i)); + cti_reg_addr(drvdata, CTI_REG_SET_NR(CTIOUTEN, i))); } =20 /* other regs */ - writel_relaxed(config->ctigate, drvdata->base + CTIGATE); + writel_relaxed(config->ctigate, cti_reg_addr(drvdata, CTIGATE)); if (config->asicctl_impl) - writel_relaxed(config->asicctl, drvdata->base + ASICCTL); - writel_relaxed(config->ctiappset, drvdata->base + CTIAPPSET); + writel_relaxed(config->asicctl, cti_reg_addr(drvdata, ASICCTL)); + writel_relaxed(config->ctiappset, cti_reg_addr(drvdata, CTIAPPSET)); =20 /* re-enable CTI */ writel_relaxed(1, drvdata->base + CTICONTROL); @@ -127,7 +136,7 @@ u32 cti_read_single_reg(struct cti_drvdata *drvdata, in= t offset) int val; =20 CS_UNLOCK(drvdata->base); - val =3D readl_relaxed(drvdata->base + offset); + val =3D readl_relaxed(cti_reg_addr(drvdata, offset)); CS_LOCK(drvdata->base); =20 return val; @@ -136,7 +145,7 @@ u32 cti_read_single_reg(struct cti_drvdata *drvdata, in= t offset) void cti_write_single_reg(struct cti_drvdata *drvdata, int offset, u32 val= ue) { CS_UNLOCK(drvdata->base); - writel_relaxed(value, drvdata->base + offset); + writel_relaxed(value, cti_reg_addr(drvdata, offset)); CS_LOCK(drvdata->base); } =20 @@ -342,8 +351,7 @@ int cti_channel_trig_op(struct device *dev, enum cti_ch= an_op op, =20 /* update the local register values */ chan_bitmask =3D BIT(channel_idx); - reg_offset =3D (direction =3D=3D CTI_TRIG_IN ? CTIINEN(trigger_idx) : - CTIOUTEN(trigger_idx)); + reg_offset =3D (direction =3D=3D CTI_TRIG_IN ? CTIINEN : CTIOUTEN); =20 guard(raw_spinlock_irqsave)(&drvdata->spinlock); =20 @@ -363,8 +371,9 @@ int cti_channel_trig_op(struct device *dev, enum cti_ch= an_op op, =20 /* write through if enabled */ if (cti_is_active(config)) - cti_write_single_reg(drvdata, reg_offset, reg_value); - + cti_write_single_reg(drvdata, + CTI_REG_SET_NR(reg_offset, trigger_idx), + reg_value); return 0; } =20 diff --git a/drivers/hwtracing/coresight/coresight-cti-sysfs.c b/drivers/hw= tracing/coresight/coresight-cti-sysfs.c index 88f8a08ef778..075f633ea9e1 100644 --- a/drivers/hwtracing/coresight/coresight-cti-sysfs.c +++ b/drivers/hwtracing/coresight/coresight-cti-sysfs.c @@ -385,7 +385,7 @@ static ssize_t inen_store(struct device *dev, =20 /* write through if enabled */ if (cti_is_active(config)) - cti_write_single_reg(drvdata, CTIINEN(index), val); + cti_write_single_reg(drvdata, CTI_REG_SET_NR(CTIINEN, index), val); =20 return size; } @@ -426,7 +426,7 @@ static ssize_t outen_store(struct device *dev, =20 /* write through if enabled */ if (cti_is_active(config)) - cti_write_single_reg(drvdata, CTIOUTEN(index), val); + cti_write_single_reg(drvdata, CTI_REG_SET_NR(CTIOUTEN, index), val); =20 return size; } diff --git a/drivers/hwtracing/coresight/coresight-cti.h b/drivers/hwtracin= g/coresight/coresight-cti.h index ef079fc18b72..21bcdedcb95f 100644 --- a/drivers/hwtracing/coresight/coresight-cti.h +++ b/drivers/hwtracing/coresight/coresight-cti.h @@ -30,8 +30,8 @@ struct fwnode_handle; #define CTIAPPSET 0x014 #define CTIAPPCLEAR 0x018 #define CTIAPPPULSE 0x01C -#define CTIINEN(n) (0x020 + (4 * n)) -#define CTIOUTEN(n) (0x0A0 + (4 * n)) +#define CTIINEN 0x020 +#define CTIOUTEN 0x0A0 #define CTITRIGINSTATUS 0x130 #define CTITRIGOUTSTATUS 0x134 #define CTICHINSTATUS 0x138 @@ -57,7 +57,18 @@ struct fwnode_handle; * Max of in and out defined in the DEVID register. * - pick up actual number used from .dts parameters if present. */ -#define CTIINOUTEN_MAX 32 +#define CTIINOUTEN_MAX 128 + +/* + * Encode CTI register offset and register index in one u32: + * - bits[0:11] : base register offset (0x000 to 0xFFF) + * - bits[24:31] : register index (nr) + */ +#define CTI_REG_NR_MASK GENMASK(31, 24) +#define CTI_REG_GET_NR(reg) FIELD_GET(CTI_REG_NR_MASK, (reg)) +#define CTI_REG_SET_NR_CONST(reg, nr) ((reg) | FIELD_PREP_CONST(CTI_REG_NR= _MASK, (nr))) +#define CTI_REG_SET_NR(reg, nr) ((reg) | FIELD_PREP(CTI_REG_NR_MASK, (nr)= )) +#define CTI_REG_CLR_NR(reg) ((reg) & (~CTI_REG_NR_MASK)) =20 /** * Group of related trigger signals --=20 2.43.0