From nobody Fri Apr 3 19:25:17 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 8B17F37B01F for ; Fri, 3 Apr 2026 08:41:45 +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=1775205707; cv=none; b=tJKMh2LUo7GMPEO8GuzfqeltZ8CCCrvYccWio9xXigB6L6Kyi3u+qlOZCj+uKHRQPQmcDEYRWOF2HCJlicP7YckzBCjj/aA1wlFy4X2yZz7dzUhiIZ6pZ5OWWyDAvuL+lnZC5GEjQzsUDTeTLzpyzMXBwFy+ZyJelKm5CUyHDk8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775205707; c=relaxed/simple; bh=/xJ8nlzEUwBgB9odC2pDNog1qLXHQGWB2GUPekbM6FY=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=MoHveTne0qsgQO0/SfAICBsWr/BZHtyxspx5HMDls6V4GxNds3X/oad1a2QQ9U67MnwSveEiaXBOsOHahu9gpTvR7qIWIhW6zN2h/I//dFFLNT1X5fnGS2fW1/MLnI00cOcLjvwSI+43kefQ1WWOpQwiFVNHnwlUB+iPaBkZ/QM= 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=ej4FKVO2; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=ZMPbFf3+; 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="ej4FKVO2"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="ZMPbFf3+" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6336EM6t140000 for ; Fri, 3 Apr 2026 08:41:45 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=QmKfAmOnOoidKU2K7M065NqSIxZq6+lb/9v nAIyjv3o=; b=ej4FKVO2FH0oAp4MNdN5hb1b9k5gUhvwvlo86YCJVpzdmzRdxvR tVGpIhdjlHoSoeJQnQY+VGGu8Ul+8RQTGPYnGX6MaynkGvZFP2sZgBKU2uwphhzo s5MJt6+hP552oi9ARgCgfGY++KgDQVAKc2sgtxwtD7dK3hni3/1DQDOIcBi/+EN8 o4uqXMR6qtpoDohrSaLpUpuJfRVVSgt2JgUrMWBNq9DQj/QABvcvWuwPi9pZ6Ju/ hqfMW06cN+a7m2Zz8zYklHS6vFkvZypXv27+X3/vsSj9u3UDBLwD5taGuJgBncyK RLZsY9ex3S8ZCYn58Pvu9/UXYxA1DWpWDvA== Received: from mail-pf1-f198.google.com (mail-pf1-f198.google.com [209.85.210.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4da83y0drp-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 03 Apr 2026 08:41:44 +0000 (GMT) Received: by mail-pf1-f198.google.com with SMTP id d2e1a72fcca58-82a855dc82aso1041845b3a.2 for ; Fri, 03 Apr 2026 01:41:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775205704; x=1775810504; 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=QmKfAmOnOoidKU2K7M065NqSIxZq6+lb/9vnAIyjv3o=; b=ZMPbFf3+ogIAK80b+3QVo+7FSh4eWr1JFUQW95LT2EJXYuLFaGkplNIY30wgvtcYPD HaLAdxI9AdzAXDdPL7udyy7uEDNFBECwVGm4t1EEgWQf6M3hInqbwbcumOOkKjugiIVw 6yTvgC2sVGHp1jtuv1XUsZ5VHCv5PgQfGgl5MFYJYl0LhF7J9JRiaenwqJvIAZRPiZHV tZ1dhYOGY6wswJOoOTWzQq2iRbLcPaL/CXL9LHXKntLvZcGMj1t7DmYkDD0q+qTjI6ej 04xvELaJlIdFVhnhYERmPWQ9rtMpD6jEw2Yeow3jbQ/ciT9eDAwg+J5EqCEwfOyW0r7X XTBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775205704; x=1775810504; 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=QmKfAmOnOoidKU2K7M065NqSIxZq6+lb/9vnAIyjv3o=; b=Wurb0gKeTLSqBPT1VvcD0aPThWAoCXhVX78hNBEKyNkC4WuCLhwb7JuokN0HTTOkJV iYu30KmqWP/n2zG4yn5dK3J81aKEOXBXku8qt5WonuhWyG2WwHCfEDUNkQJGmm8sVLSk NqJ6FQOanbRfWnWQVdm/qrqfCyiBrkOxAoMNKd8lODH4ddBCVvL4yFR9XYLtejLf3eed MabhtUrwsnM7np1MGRkx0f0IJ9BmpLvPOvHS+9dUSbRUBui3U5kfwmAfLU+DNcJN63/2 wtS0BJmwE/Ksvc3djSD3R9d0Si6TFZ8I/uj1dY+4i5DGNVutvbi1zgmZpao+lmfB4XM7 DNag== X-Forwarded-Encrypted: i=1; AJvYcCVgvu2CfoUFGoZ5iukUlR/3wZyWoHN6CtoT9M4n29y96Befh0HDsQFm7egfybOKTvq0ucrmKOFSqDqqryE=@vger.kernel.org X-Gm-Message-State: AOJu0YzX4k15LSzcI5YSTyHcuNufWuhoX70Oy/UH/uQr1SnxwBaRbSIk 8Ez26ysz3mP7eXW5xXJlj0GtfuuxCY4aTwKK/dSpyx1MGbuBhjC0IsP0Vx1JbRfIAM+RMvCqPOg PgUXDM8XW3of0fjAcAmZE3P4JHv8vZKWJox0hVc3QnB3TztC4NLcYfnhyU3KGxL31EyM= X-Gm-Gg: AeBDievzylQOa4AvOwf7BzSNxE/66AYhlkotEd7BlaCTiN1CX11rITIHPkeFAP/gIWb L0mqKTmbpIPdifmf3h3bRDoDBHaBcOe60rPLZn+uveWjb6H8pAk6yS9sKoR9QWBI4Du9zlMf6oc aHXv6E+zlLXMylCEY7kEOli1BHTuEg9l/qD2qrUPmBdLHwBHEkNHUflgVaksq5hFm6DXbINUOnn ihTi9jVZaeKPlkWK5AgxkG0/x5TFKQUquMUR71Sr+2kx3KwKOSJPpmnzmk7H4UlSSxVaH5G2qMy 2ueE39jxkc/yhqMDuBB1ZajnCOu+AiG9dmMUD2pYPyDGT7MuTKijJohlBC8B5RY9vWARkdIvxyx DQTrROS+19GQ+5/dOePJTtvhlvlna+i65qX1wPfaAyaul9LVFGrEt8QYE X-Received: by 2002:a05:6a00:2d10:b0:82c:9c47:fef9 with SMTP id d2e1a72fcca58-82d0da34535mr2228678b3a.2.1775205704171; Fri, 03 Apr 2026 01:41:44 -0700 (PDT) X-Received: by 2002:a05:6a00:2d10:b0:82c:9c47:fef9 with SMTP id d2e1a72fcca58-82d0da34535mr2228649b3a.2.1775205703692; Fri, 03 Apr 2026 01:41:43 -0700 (PDT) Received: from hu-arandive-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82cf9b2714dsm6757172b3a.1.2026.04.03.01.41.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Apr 2026 01:41:43 -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 V3] i2c: qcom-geni: Avoid extra TX DMA TRE for single read message in GPI mode Date: Fri, 3 Apr 2026 14:11:35 +0530 Message-Id: <20260403084135.1300931-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=ar6/yCZV c=1 sm=1 tr=0 ts=69cf7d48 cx=c_pps a=m5Vt/hrsBiPMCU0y4gIsQw==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=qPv6kJ6rrmvbaMxWJaQA:9 a=IoOABgeZipijB_acs4fv:22 X-Proofpoint-ORIG-GUID: 8V5C9eyZu82P_Nt4D0plV-hVsHd7VjsM X-Proofpoint-GUID: 8V5C9eyZu82P_Nt4D0plV-hVsHd7VjsM X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDAzMDA3NiBTYWx0ZWRfX3KFng69K76ln cYq+AxjxCkUMHNHQfc2EILaYXE1w4j8hcky9da8ggCdSkb8l2O8SaF8Qpr0dyIcJCBN5UT7ME9S zGkaB00ASqaaNfZGMUWxjuS+cu4ePdt3ZYo5Hoi2xw8r99A/Q8FoaFtfeYZjfmlJG0XBTkFtdte qLJ5bIcVFuHfftQ4i4BTU4pPqIUk8vNUzR1D7HjXw17rdQ5gZmrHAp2wcb8vYlmwucTuI6XEM/v +AzK1YjS1zmjCgoePV44HqVoz9xP9TS+ofr8OyjFdT6PTs+r+PopdGTedzH2QLsiZDQA86MyQ6h dS2cuKsl1uQrrt8vncx97oJDdLyZBJMfGrdANSAaPlBg95rCXR382iO5U24ercF2B6i1JoV29/i ORpBNpeVhzrjdEOT96YwobkNbHR3lDEVBtXGWyF8bz44zZSm9Z73lfprItGKOss2xCnTIUEwqPz LhEa0xcQyYK/jtI9wQw== 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-03_02,2026-04-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 lowpriorityscore=0 bulkscore=0 adultscore=0 malwarescore=0 phishscore=0 spamscore=0 clxscore=1015 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2604030076 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 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 | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qc= om-geni.c index a4acb78fafb6..78b92db7c7fd 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,12 @@ 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 map for I2C_WRITE operation to avoid unintended write cycl= e */ + 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; @@ -658,6 +664,7 @@ static int geni_i2c_gpi(struct geni_i2c_dev *gi2c, stru= ct i2c_msg msgs[], goto out; } =20 +skip_dma: if (gi2c->is_tx_multi_desc_xfer) { flags =3D DMA_CTRL_ACK; =20 @@ -740,9 +747,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