From nobody Sun Jun 14 05:10:48 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 1B96B37A4B9 for ; Fri, 10 Apr 2026 10:19:58 +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=1775816400; cv=none; b=kNOah0Ug7psiTPQvMbMzYVpRcd7W1KroO11X+miGksy+Ao6zWD5ws6zN6gSnZWZpL3lm2BTkV9WWV5iUp8Rt666Nhb2bOAGR2mrBrxYQ84yue7HhD5mWaptaM0gXCib7XMmB5h5MwBEXMooaJSXDasWtp3ShRrbLsk2PqC2rfBA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775816400; c=relaxed/simple; bh=U9lnarrase4jaY5q287H+b4eiN/j85K2bs3ZiGD/sKY=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=TNgbp0qFINOS+tEmfPTfG2o7jtbb9Y0/P2TNdSclJ/dKrVf82Vuy2zDmhkBal99kals4JFx1am7kehKRlECvrfNSX+bFR5s7QGVz5kn8XOBUKchR7t3JWDR8YgRqtoo/q7Ki+tyiOEiJvzWoC2YSOj0P+G+NrWhqE+6xU/uJTTg= 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=ndPdVVLn; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=S4AFAO13; 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="ndPdVVLn"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="S4AFAO13" Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 63A6nsv71729932 for ; Fri, 10 Apr 2026 10:19:58 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=6jAgrIXul/6oRSYYubPw70Q0si68WXVn+fa kGuy+ODE=; b=ndPdVVLnGPt32e2MEzl7sTuz9/zVb7Sk84BklOIbc/rtOnMHJEL 6J+fQmw38SM2WVmQRhoUZxq1JPCnytnNgArI2MVnT+7H+9+tsq0JMpTHzF/xgKAd a6IH4gcMXW9TISx4eJ1JpoF5ESDjtT6gjEquabdsRmduxNHxtVD2uEzbJ34suXz+ WqwbGrj4lFSE8uqFuyLx/qQcmXTS266MnkSJSXqfy9tCcrS367sBehXCLdq20vlc pGC7/r0GVnkNCxZoLcI5VUv4xZkN/l7EaEOGEsMf8cdLCmtyafGpMMA7qSNJr7Va QApP0LKWRTcmc5d/DwrpEJSBJgRAMzDg6jA== 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 4deckxktp7-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 10 Apr 2026 10:19:58 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2b23c909256so21455165ad.0 for ; Fri, 10 Apr 2026 03:19:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775816398; x=1776421198; 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=6jAgrIXul/6oRSYYubPw70Q0si68WXVn+fakGuy+ODE=; b=S4AFAO13j9CjWAb90zPY+HckegWhCoh41NLZb1ULgjpWV/8MXkr/PAyYbyV69bcmJ8 nyHuZK1vULNQbpG+xNRqhA0g/xIXdS3vW5LlPNMSp3y8ChN5zrzX0ELSkaEMER8/ZR15 8rwRZ79PhJyjmz8pD55Wjl+EhJEoKw22eLXF+1qxKgo22J26iZRXOWBD1qGJ9XO7lhdU UfSsq+tYM6aXr3dLx3V3uQf3a1YW2X0yNIgCnhJyqfGFtuAqnMsIhwhK08RPjBc3ydhn Nqc9M0gjnquVaZww9g+XZiUwg/dG702u9OtidmUPLlgKuPTqiLfDEepyJHaqj1rqkvZB QMRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775816398; x=1776421198; 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=6jAgrIXul/6oRSYYubPw70Q0si68WXVn+fakGuy+ODE=; b=D017MJaX3McI4NYORxp5klyENxvEm9QeNoYEe1i4nYcaKarNaL+4ZR/VpoEsEDvSrR S+PwhntG8X7ZSATbe3sNkNeR9MIqL4kSr1uUrFyJuoCAhCgojvqAqPY38w+4ca5a3mOg mcg/mjiH8PcSc/lC8P0KUlbP1FabbdaRUyI+TvqvcWbVX6b2XtTNtVK4Noq2zadWtV5E vBMjme63U7OjgHCa8JURQWKwoiK0sSF/Y1PHGLIza5UK2tohdH5fOEVSPCc0bojkSa5f 0xBFZgksw6u8VKiLD31T2sNk6vb3rUzI4uBLgZfCUNPESjpvdVw8z1ESbG2MLNWLQpS7 K2dg== X-Forwarded-Encrypted: i=1; AJvYcCXMXnZztFt6Hdcvva75lSzC4jgF7cVh72muT7x9+6OEO19pDw0lHJeqRoOGUhuuolqSf28Mcik0if9rQOU=@vger.kernel.org X-Gm-Message-State: AOJu0Yy4qJaSAW+o60hTqfbXhEDwXiHoMOoHQR6iq0K5VsOS3VyRV/t8 uxAL62Ly5M3D6YQ/M6FvF6UhvDAOk0rT7Puc/0XmBGbSQ9SC0MG1At1lwyVJtPwT3Oih989j56X RHviA92GIi1/RzNHIQET3gi99VbgKbeUQezY2eeayjnbD8g0Qn61SHd01h8yvjDd5KJI= X-Gm-Gg: AeBDievQW5080i87uybPHZPOJFsD7u9zfwepR9n20aLUkU8G04Fn14JqBrjxj3O0Vcn 3R7pOS6XSyNGz/bVvsIWICR86LvzHLFdyWrOnfhI+h6YwrWEAO9JfwN8H5uB3y9ukq8SYolOP7+ 0FBRLMMU9iBFEtr08FmiPI2TwWgRsFNDp/WvmgcmWJfTJ3ah3li+H5VCVggVhWTW9ot3W7kFVe/ rtGowwZruTt3FEEisuzjeXhhQrM+1+eW62/31bt5z8eqhKrZuCWeq1wHyyqNFXG5j5VoUy10c9r eIG1lw1eirHEhTav5oJjs8laGofObXHA3SrvXX4EdURut4W2zjvxxClJ+9nq2AV8sow+D3kn54u d24Rlwfb0IL9TuF/9Hjx+dihsD2Uqgms28+nliHo03qbePC0FO+inrJ1u X-Received: by 2002:a05:6a20:9389:b0:398:7855:1596 with SMTP id adf61e73a8af0-39fe3c64b7amr3091125637.10.1775816397579; Fri, 10 Apr 2026 03:19:57 -0700 (PDT) X-Received: by 2002:a05:6a20:9389:b0:398:7855:1596 with SMTP id adf61e73a8af0-39fe3c64b7amr3091085637.10.1775816397075; Fri, 10 Apr 2026 03:19:57 -0700 (PDT) Received: from hu-arandive-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c79219c618asm2024362a12.18.2026.04.10.03.19.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Apr 2026 03:19:56 -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 V4] i2c: qcom-geni: Avoid extra TX DMA TRE for single read message in GPI mode Date: Fri, 10 Apr 2026 15:49:49 +0530 Message-Id: <20260410101949.2315058-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-Proofpoint-ORIG-GUID: 1gcAF4gaOE-BIhp8x3qsfgVSC5uqkD7H X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDEwMDA5NSBTYWx0ZWRfXxSIhEUejmw6H wDnl3owyt0YFzendvi3b610bNfYmt7gsHDdLx5cXVGvoFXNp6MuFuOUBxvMr3AsFMH3zAlSYiZL x1K3yvF0nMWljC/jkhDpag0EK3xEr4JayJ9ACQou8x5aZqxVDvt/dq6q7Kw1piRdQoHx6cdd+2e t0GM1Tkdvzf4vz4xW+OqoDbcCfuubi/8HAlObwuMxaAktjRaXV53AwPhVzUuB5B1VYKtj64cfOq G2EhPdJl6bEx4Ts8f6kpK+eaNf0LLgm2iilnvuqHowxjvpdUcldUnRMrkbDAHRbE4Bq9MVRZUtI Ca04K5HEZGUQXWumgZlueAYYFKssga99c/Jhn4ObJlpbxDE/G28gQZ/Ix4e0vLupg10Xkud1HCA EbeBaG/ZtZoMATzpxV2KLMoJuozer95EOtdFK56q4M8dp8aQBmyiRbXc1lMwXAr0M2xw+QthL0D KxJzcaSSlmBexDV2LxQ== X-Authority-Analysis: v=2.4 cv=OMcXGyaB c=1 sm=1 tr=0 ts=69d8cece cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=g-2Moo4YgOi5Nr3pVm0A:9 a=GvdueXVYPmCkWapjIL-Q:22 X-Proofpoint-GUID: 1gcAF4gaOE-BIhp8x3qsfgVSC5uqkD7H 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-10_03,2026-04-09_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 phishscore=0 clxscore=1015 impostorscore=0 spamscore=0 priorityscore=1501 lowpriorityscore=0 suspectscore=0 malwarescore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604010000 definitions=main-2604100095 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 Reviewed-by: Mukesh Kumar Savaliya --- Changes in v4: - Added some more description in comment and changed the label name. Changes in v3: - Added comment in the driver for better readability and changed the position of 'skip_dma' label to allow dma engine configuration. Changes in v2: - Updated the commit message. drivers/i2c/busses/i2c-qcom-geni.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qc= om-geni.c index a4acb78fafb6..a482a4c60744 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,16 @@ 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 + /* + * Skip TX DMA mapping for a read message (I2C_M_RD) to avoid + * programming an extra TX DMA TRE that would cause an unintended + * write cycle on the I2C bus before the actual read operation. + */ + if (op =3D=3D I2C_WRITE && msgs[msg_idx].flags & I2C_M_RD) { + peripheral->multi_msg =3D true; + goto skip_tx_dma_map; + } + dma_buf =3D i2c_get_dma_safe_msg_buf(&msgs[msg_idx], 1); if (!dma_buf) { ret =3D -ENOMEM; @@ -658,6 +668,7 @@ static int geni_i2c_gpi(struct geni_i2c_dev *gi2c, stru= ct i2c_msg msgs[], goto out; } =20 +skip_tx_dma_map: if (gi2c->is_tx_multi_desc_xfer) { flags =3D DMA_CTRL_ACK; =20 @@ -740,9 +751,12 @@ 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); + /* Avoid DMA unmap as the write operation skipped DMA mapping */ + if (dma_buf) { + 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