From nobody Wed Apr 1 22:13:35 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 B87293DEFE6 for ; Wed, 1 Apr 2026 10:14:04 +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=1775038446; cv=none; b=IFLC33ItPB9lE+EXIA1JRITMLJ1kxZnxhgfYlZ7X1xxVXWB3Hee/akO4kUkqO/a95WQtEurG4AuLa+nDxTLLIkv69QSFKl4F6iqcKhFAXjwvzn5VxEmDIwQbP0c1myXhjwQwDZMbG8BrhOZ9gk2pt2B1r+2SWg3cylxjs7kYPfE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775038446; c=relaxed/simple; bh=EEswu+6fbqBa08SHQjIIuTp3bMH1hK4CRlphTe6mLzA=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=t6cCPqDxYQEhuTwFy1bzOy20qrXt8f56OwMHaMt1qOPII8DNIf1g8m+jeyO5mxLBOxKLy1Ompytu4tWYqJNG1ztALWKwJlsQJScyp9P40yMa8cWYa7XQLqUDyRbfSYI6ldCcgOi/1mt77I3p70vN7ao+Uyw5D6tZu3Xu/qqPtvU= 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=EcQjUpHd; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=E5dUNcsw; 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="EcQjUpHd"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="E5dUNcsw" Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6314MdFF3363191 for ; Wed, 1 Apr 2026 10:14:03 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:message-id:mime-version :subject:to; s=qcppdkim1; bh=EnaTxDzY/SHS22gfoLDFYPunIIYegtMK3o1 Q5/kWemM=; b=EcQjUpHdFbEXKNQ/vGfUKZ1KOJKi+aE+2oC3k1CVSMeewo+2ORy 20/hBfCvCAR0AsJf1BRHeHHeyU/6Q9FkUxS48BKl3Gs4WWFNeQDrUxbWyLeOjTjm w3GNLs5dSUtyNn66o4BOGO32CjS47lJQMZhphely4uU79bVwKxqy773iaqCSNrbv oIw1OVk5qLJlYrj29TXp9TvseLr5eAZvZYHpadqwpDeWOhM90dzssrl/BOxgrMbw 8RLFkyR+p/KOuPkU29cD+zUzT891yXFOMeHS1iY56enkVPWOHJ8MpnHrbUgeNPaJ lZ7XG9Cgj7puJExfi8mPEhT8nibUZDvbeIQ== 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 4d8nddjubh-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 01 Apr 2026 10:14:03 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2b24e9b4d82so8472595ad.1 for ; Wed, 01 Apr 2026 03:14:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775038443; x=1775643243; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=EnaTxDzY/SHS22gfoLDFYPunIIYegtMK3o1Q5/kWemM=; b=E5dUNcswB0gDiEpgmyNjJPMO+QjCBuOy77C+HvV+uVIiHo9j8CFVBtqT559ztykr0F /h0CcKkn5Q0p2YwrCFfbyzwWdtc2saFt8CBea9XOBBtOg2UyQS0wQmXHzoo5la5E/NUt zBZpKeEKkokGMID4dcKgFX+M+XX4eEEPNOsbPXBVx7in0TJTdiTdM6gOXqmb3m5+rrXP WkDk5Do1vUmKurQPT9A7Oa3uxy8/mRYjURTkoMNkCdE3U7w6MKtTmwsNKbB12kbwW50x ZpYjpSheAUc27m5EG5MsV5wB7VdNSs1sNPHg6jl1z1Dov1iJX1x2i5vv68O1krOAKI+O owiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775038443; x=1775643243; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=EnaTxDzY/SHS22gfoLDFYPunIIYegtMK3o1Q5/kWemM=; b=aePVcKLph/HLwsXVqfGDxn4GHtcjGdhE6bEkFzcxPDm94IOKPnch2wFYVT1I6BqwYI 6mW4aivUqMZQ2w3gluIl3zVfI5TJLPi7wZpoYsOAxF/Lif5s/B1BXme1ciawvfZ427xo TonvX81LJ73oIGBt2l46FUy21qJMxqPnzuMOOaYP0INta/gTZ18SKjvx2ZLrWqM6up7/ jL7FtZe5npfbRUPE3rCWZbp1zNyeIifU84scIIsb0hnA0CU7t3SAjw1TxR6EkdpD+iHM oBVtWSMfHkK+CaYqFysqmm8u8OQYiBIrJplWdIYwwLkaI1rwSrHiXbm9u31dwjbvmJvB 2A4g== X-Forwarded-Encrypted: i=1; AJvYcCUnwdPoOkNbSRejRfzeRsu7mq941558ZzfbjSFHei+JWM0xkjV/QpDAV9DpVkpQBWBV2NMJy1IESWr2Cn4=@vger.kernel.org X-Gm-Message-State: AOJu0YxW7c5GezxjrUR5iwMkymnKMKxiB3YTJTXVdGt7kdt84jlHUeYc Yuh+CiD/wGdwzzDo7IB1hcfpUiDq0mcCxnryaqS7o1R7NKlm8epCU8Bv8DrL1MO7a8MeUWrHfkT G2w23lxKkcthiOAPXeVzaLXUxtkn55tyuF1gMa1eDxqIm/777n5We6yd28Yk+9jQqUKc= X-Gm-Gg: ATEYQzziswAhtJ53tiZnXv3ayJUYD+BPNHxwGls4mUDe23TiSsEmImbY7dbjSWDiYSW 29ARzlmzudfAOLYOKevLXZ+EGqdFl0Atzi/g6JCzJKcscbm4rFOIW2F8JgWuJwpn0j5n5800ppF WhUIIgOyxKZ4nG7sF8jE2bhBW5yXNfk+3CBgT2bWgj2czaXqyA5uQRskyvMFuuhlg9lgovizaQz MdR9g7glkwHDSO0klBk9gKRFo7zgmmnCC/vaBsVc/sMlf8OfUWwFRjenXFBVJ8CNVyuQhJ/0FW1 m8MBpA7Ms7Crkf55y4iDKIhP7GPSjsLe1k+8wtwbCKkwQFzXLQemQ6R4AhE+9ezHIZYGUkcDTm6 R6pFA3yK1q/R/avPvhoL28YAEKYJ16OwLyZ6DCVWcrQYTj/PTajOuoiyK X-Received: by 2002:a17:903:1b6b:b0:2ae:5346:d4e6 with SMTP id d9443c01a7336-2b25efabff3mr60943165ad.28.1775038442605; Wed, 01 Apr 2026 03:14:02 -0700 (PDT) X-Received: by 2002:a17:903:1b6b:b0:2ae:5346:d4e6 with SMTP id d9443c01a7336-2b25efabff3mr60942995ad.28.1775038442085; Wed, 01 Apr 2026 03:14:02 -0700 (PDT) Received: from hu-arandive-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b2427c5f5bsm148503885ad.82.2026.04.01.03.13.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Apr 2026 03:14:01 -0700 (PDT) From: Aniket Randive To: mukesh.savaliya@oss.qualcomm.com, viken.dadhaniya@oss.qualcomm.com, andi.shyti@kernel.org, sumit.semwal@linaro.org, christian.koenig@amd.com Cc: linux-i2c@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org, naresh.maramaina@oss.qualcomm.com, aniket.randive@oss.qualcomm.com Subject: [PATCH V2] i2c: qcom-geni: Avoid extra TX DMA TRE for single read message in GPI mode Date: Wed, 1 Apr 2026 15:43:52 +0530 Message-Id: <20260401101352.4065798-1-aniket.randive@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=ZfUQ98VA c=1 sm=1 tr=0 ts=69ccefeb cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=EUspDBNiAAAA:8 a=qPv6kJ6rrmvbaMxWJaQA:9 a=GvdueXVYPmCkWapjIL-Q:22 X-Proofpoint-GUID: 6n2WXiNkov1gyT3KC9f5QCFQj_9zu3oc X-Proofpoint-ORIG-GUID: 6n2WXiNkov1gyT3KC9f5QCFQj_9zu3oc X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDAxMDA5MiBTYWx0ZWRfX1SSV2T/mtvvi StvwnnLaQs4nuv+n2O9AKCwwtIrK4Y4sj+H0CUjcoCISr1vhxqI5bXLOS1CJyjhdJJDpStFGM2Q NUfAbRL2sfD8wl6r0OXWUl+Ha07LYy4u8ZEWbsPMhVf04BQ0J6nBanfQWNY+8/9ybZea+Eycje4 hiLK5jcW0BGM1JGpnaafkEudn/LZizQjqIrRUsriJtD/Ibyg6qhGxJul3i7n0mwalanWU5gQWKF LCYOmzf7aLk39mibi0FnLjrZbnk1fvpIhzKntKnDOCcTrXhRh24HWyDEjbV2mtkjb5zQ+7m3wqP whwBIf9ZhJnmUdcJZKKkE73l2ILF5moqVGh5GYpx805LpJkzJ3hFEhL/hzmZ3tAMZkh8Oa6gbTW vdJTlpTlChGpTP4o64xP+g8HEc/ByttLYv5ZEZZnBhtaR1CYszCcHGwIq5KncsCuZgx+SVQFbvb ysmmxkTLIseIyOP7Z6w== 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-04-01_03,2026-04-01_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 lowpriorityscore=0 priorityscore=1501 phishscore=0 spamscore=0 clxscore=1015 bulkscore=0 suspectscore=0 impostorscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2604010092 Content-Type: text/plain; charset="utf-8" In GPI mode, the I2C GENI driver programs an extra TX DMA transfer descriptor (TRE) on the TX channel when handling a single read message. This results in an unintended write phase being issued on the I2C bus, even though a read transaction does not require any TX data. For a single-byte read, the correct hardware sequence consists of the CONFIG and GO commands followed by a single RX DMA TRE. Programming an additional TX DMA TRE is redundant, causes unnecessary DMA buffer mapping on the TX channel, and may lead to incorrect bus behavior. Update the transfer logic to avoid programming a TX DMA TRE for single read messages in GPI mode. Co-developed-by: Maramaina Naresh Signed-off-by: Maramaina Naresh Signed-off-by: Aniket Randive --- Changes in v2: - Updated the commit message. drivers/i2c/busses/i2c-qcom-geni.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qc= om-geni.c index a4acb78fafb6..2706309bbebb 100644 --- a/drivers/i2c/busses/i2c-qcom-geni.c +++ b/drivers/i2c/busses/i2c-qcom-geni.c @@ -625,8 +625,8 @@ static int geni_i2c_gpi(struct geni_i2c_dev *gi2c, stru= ct i2c_msg msgs[], { struct gpi_i2c_config *peripheral; unsigned int flags; - void *dma_buf; - dma_addr_t addr; + void *dma_buf =3D NULL; + dma_addr_t addr =3D 0; enum dma_data_direction map_dirn; enum dma_transfer_direction dma_dirn; struct dma_async_tx_descriptor *desc; @@ -639,6 +639,11 @@ static int geni_i2c_gpi(struct geni_i2c_dev *gi2c, str= uct i2c_msg msgs[], gi2c_gpi_xfer =3D &gi2c->i2c_multi_desc_config; msg_idx =3D gi2c_gpi_xfer->msg_idx_cnt; =20 + if (op =3D=3D I2C_WRITE && msgs[msg_idx].flags & I2C_M_RD) { + peripheral->multi_msg =3D true; + goto skip_dma; + } + dma_buf =3D i2c_get_dma_safe_msg_buf(&msgs[msg_idx], 1); if (!dma_buf) { ret =3D -ENOMEM; @@ -668,6 +673,7 @@ static int geni_i2c_gpi(struct geni_i2c_dev *gi2c, stru= ct i2c_msg msgs[], flags =3D DMA_PREP_INTERRUPT | DMA_CTRL_ACK; } =20 +skip_dma: /* set the length as message for rx txn */ peripheral->rx_len =3D msgs[msg_idx].len; peripheral->op =3D op; @@ -740,9 +746,11 @@ static int geni_i2c_gpi(struct geni_i2c_dev *gi2c, str= uct i2c_msg msgs[], return 0; =20 err_config: - dma_unmap_single(gi2c->se.dev->parent, addr, - msgs[msg_idx].len, map_dirn); - i2c_put_dma_safe_msg_buf(dma_buf, &msgs[msg_idx], false); + if (op =3D=3D I2C_WRITE && (msgs[msg_idx].flags & I2C_M_RD)) { + dma_unmap_single(gi2c->se.dev->parent, addr, + msgs[msg_idx].len, map_dirn); + i2c_put_dma_safe_msg_buf(dma_buf, &msgs[msg_idx], false); + } =20 out: gi2c->err =3D ret; --=20 2.34.1