From nobody Wed Jun 10 19:56:52 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 0A2C635A393 for ; Tue, 9 Jun 2026 08:43:30 +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=1780994612; cv=none; b=NpE8szehvEuDPsvm9wwOv+pzlnALo9qXzhKEZOK67p8Y17PqJBe/ZYm690xaYG8uYqcRjiDGJ8GOCze+hO/CHhFPu7MeeDW2ALLaUlfZkWyfeazsigdg11g4Y5Fk5E03Z4v5iMY3VilvmfysQi+V+XMwk1Cu0RrPbHiHWDV7fb0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780994612; c=relaxed/simple; bh=stn3ZEPLR1afpqAn0RrmIjAKSrCZN4mu3yS/RlOo3eg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=Y5czA/lzq2wrui8/ZOPzYocfZnz+4SZAWSoucFC1g33/tEcPJk6ONmf+F/az7RG4nmKZAVf+7MnwLjAUSEJmHN3y9d6Mw+CUqF2KSoDGjz5kU/AA2mHKI5YY+WG1W1eN74GTH4du41B3xYFYSuBHtyGPFSbGqZ3vk/zU8qQybtg= 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=dsOCcKvB; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=jNcIeAdT; 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="dsOCcKvB"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="jNcIeAdT" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6597rPuc1517678 for ; Tue, 9 Jun 2026 08:43:30 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:message-id :mime-version:subject:to; s=qcppdkim1; bh=yNCq2Ath3e/Fyu9ozR8E4s 0geoHbdmxBpm5kJ3fmgVs=; b=dsOCcKvByTrHjuEHVBo3f7p7JBDN3z4008UxcR INoWtI7y8kPulGhU1j8ll91HA+D8ap6qJ2A5LtamOYzq7O3nhcL6JyU08PoRwFzU q07yP9J5+3A3Gn1ZaVohsBR0tak6dubm+KAh3wcYjVoRUVkvU/P5BaOZySNsWGUN fhwomfmFhwb5wx/sdoQGJVP67lMggtkw/D0pTPg+te9KDpyYQJMuvbqsFFWgsRdg YIhVkOAClBtu6yZp94BSg3I2C2EU1sCnIpEXgvwZzRIA/fjsSoJW4PmlUbmCfT+M eukD4nuZCC69nrl2vptnZYuxfzsZ3+vFCrMgkhj77kJbtxdQ== 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 4epenr886y-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 09 Jun 2026 08:43:30 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2c0a99db8dfso60684875ad.3 for ; Tue, 09 Jun 2026 01:43:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1780994610; x=1781599410; darn=vger.kernel.org; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:from:to:cc:subject:date:message-id:reply-to; bh=yNCq2Ath3e/Fyu9ozR8E4s0geoHbdmxBpm5kJ3fmgVs=; b=jNcIeAdTvbFjYveo8SfvljCNAqSTLWiLJy6BmSDRx+XLJyNloLP2Bdn2KCXddBETj5 oOZm9RVhB104Hde9H21eBBvWZj1d9+pwPCA9aES9UpKXw8bitvXuo3ig2n6DJNjhzSzD rjWrvliyv//UyY8Z1C7l6gxccxt5d5UAn7bE1rXyRx5GD2J2TAcvzRgPCSC4zI6Nd+IU 50+YGFIY3X61Zydc8uElwejtFbeF9x3cYoSr/YQ1YJP/nml58mrW0g29p6xPafffSy0F 1NrWbYPWMRr97Q8SIKdZZURkLa4ELkSApyPOhzxxU9B8HIWBIhr2eyK1n0c9RZelgkaH xrJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780994610; x=1781599410; h=cc:to: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=yNCq2Ath3e/Fyu9ozR8E4s0geoHbdmxBpm5kJ3fmgVs=; b=U418kKe2mwqUKpETG3ECK5ZB3NXR0sBZzO1IEcuLZQLt6FabjSLW4nrLlfH1xD99EN Aq81BNTElhHsadZn7Q1QxUOBF4fkApXkxvuUpyZL4lZkaL7kcnenn1ez1VSF6QNNUOH5 rZP641ReZf01jShE0ZT+XkLzaZnZSFbI7M2VPfvqb/92AfD2pUVSDquiJXA6U1eHp70g 3xMNBU4mmzLg6AJ5YWBB9ctGoHh5TQrzANgdMG6wPV6yXUEXr+9YVUSmlDlqWYuD0ZPD iGHHc/8RVPyRTCj3AdErR5oV1I93zj5bV3gAX+AXg4cTzVS2B9F8E9nEWjfuEGKkZim2 hW4g== X-Forwarded-Encrypted: i=1; AFNElJ9oHPCUnhcEJ0FrAQ9Sqxt5Wj6hmgKt3Nh3FPAe+d7eBsGoHKMvvL0S6RikRgYDYmNcVmWuCfCqh03V1xw=@vger.kernel.org X-Gm-Message-State: AOJu0Yx/AlSI6L9U5nOpijY2xG5sHWUbH1vTOfgPc5RQOqsfoFCAYqn9 ULPSnnQB6rdesFKN/+lFgXJToMwGJ5M1fgDoQekz7dHmLfjczX4n6xxymcNaaxlURX+mBSBt5ks 1AjB6NYwj3oxbxSR9UOFUieRr6WwPJXcpdRe6ZvWtP1w8x+ssNAbjwI2UfhhJQz5hw1M= X-Gm-Gg: Acq92OEWnEIt53ObnOKgCdYTdU7CWcGbQqGIRmc90QNwXYg9pq6z/P/+l5FtKs5RIcQ mEN1MJR1WYjAgIE7U3b972125XFklawWDYUfkxe6HG+Ts8Jchyo/P/SfnN9ifxNt1nLyvEaLZWw TfrK2OdVD5hgarwLls3lVpbEZZPGE/cE90bcRL7fJMvpMj2yyQnEgvr2YLzXOhx1T1UkKyM4u0V wGaa7wKxBC6qwIYLR8iBycXY4hf7bjKuBihJSPLcrVtroLvgdr3LkjKgaVFk4KeRxhIJrsrmnhf 5XCsaORKl85EDlsFuOeH4aE0CSDG9RBITjVU2n2cn20cIBK70d/UYMbiuUVMPUQawujA0HGXCZu PElwDkf2F/ePA7MyzslvOZghQ02RmADGkymfP875MZEpdwo3P2ELc8lHS4XnLv45HIl92 X-Received: by 2002:a17:903:388e:b0:2c2:2a8a:af74 with SMTP id d9443c01a7336-2c22a8ab260mr164651325ad.15.1780994609562; Tue, 09 Jun 2026 01:43:29 -0700 (PDT) X-Received: by 2002:a17:903:388e:b0:2c2:2a8a:af74 with SMTP id d9443c01a7336-2c22a8ab260mr164650765ad.15.1780994609051; Tue, 09 Jun 2026 01:43:29 -0700 (PDT) Received: from hu-vdadhani-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c164fa00b3sm196489635ad.32.2026.06.09.01.43.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 01:43:25 -0700 (PDT) From: Viken Dadhaniya Date: Tue, 09 Jun 2026 14:13:09 +0530 Subject: [PATCH v2] spi: qcom-geni: Fix cs_change handling on the last transfer 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: <20260609-fix-spi-fragmentation-bit-logic-v2-1-e18efc255563@oss.qualcomm.com> X-B4-Tracking: v=1; b=H4sIABzSJ2oC/4WOyw6CMBBFf8V07ZA+VMCV/2FYlD5gDFBsC9EQ/ t2Cce1mkpPce88sJBiPJpDrYSHezBjQDQn48UBUK4fGAOrEhFN+oWdegMUXhBHBetn0Zogypgb UGKFzDSooCirKkxC5tSVJK6M3qbIb7tWXw1Q/jIrb7JZoMUTn3/sLM9tyP1v51zYzYCBqQS2TQ utc31wI2XOSnXJ9n6VDqnVdP10iVKznAAAA X-Change-ID: 20260528-fix-spi-fragmentation-bit-logic-880394337ff9 To: Mark Brown , Jonathan Marek Cc: linux-arm-msm@vger.kernel.org, linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org, Viken Dadhaniya X-Mailer: b4 0.16-dev X-Developer-Signature: v=1; a=ed25519-sha256; t=1780994602; l=4275; i=viken.dadhaniya@oss.qualcomm.com; s=20260324; h=from:subject:message-id; bh=stn3ZEPLR1afpqAn0RrmIjAKSrCZN4mu3yS/RlOo3eg=; b=nkbi4Vvc7G2lHmDJt3Rj5R8XMXZi/OL/bi7cdRKFiLoGGQhE2jhl5Ye03gsg95Jnr7XwSWOsW 2jHB9f3fv61CeQtR2jnjRo7JDaXa7FV6h2yFwLqnJ2pwa9C3i0oNlHQ X-Developer-Key: i=viken.dadhaniya@oss.qualcomm.com; a=ed25519; pk=C39f+LOIGhh/02LQpT46TsUSXRvBn9qXC8Xb26KJ44Y= X-Proofpoint-GUID: 4TBBp99pdUIYVbkXFcoQ7neiWifZoC5s X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNjA5MDA4MCBTYWx0ZWRfX+EONHyeb3Aqi DMUyx+AcJdU7Lydg+rB2Ua4PI4Qs0VUGopwcT6F9Gdpz8ApB7I0zbXHRfOMUexF4iLU6NI+l7TV 9/vgaTYSurOBjsAYWJQe8bLhyD/8VLgJQBUN5XY8ygBpdRJOqXVx9mEWDN10/ffC3jGteMY2NVP XJfVS3KK/wpeqEww8X6q9JiocPyH0/EIXG4yQMW4TyOrI+M33Mji/DBN6m9Gdvow2oFMuCZv7dL s05tG8eFaG8uvsIX8eszVk+WGGV3z9cn5R/vjjLRHgkfJHGMNXQ7/HTuxzX/JGRBtlbi3szZbEB 3htq0S/aq4dje14+qZLBqPwatEFxm7l6RlC77vVh8380B39cnvW5NRXJp+/aNBb5H+9Q7HwhQyC Dg/KYUXSfybhBe+f8NOk1OPtBcmXRtNhrQxN3Wr6xc3Pe0nsriQ6WvxnAK3a1nCuXlWfEw1XRMA 5oTWkhIiy6nHPgfrA5g== X-Authority-Analysis: v=2.4 cv=NKPlPU6g c=1 sm=1 tr=0 ts=6a27d232 cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=FelO9ux0wxsA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=bC-a23v3AAAA:8 a=EUspDBNiAAAA:8 a=VwQbUJbxAAAA:8 a=RAbU-raeAAAA:8 a=wpeXKL9a9D_Roaqk1GEA:9 a=QEXdDO2ut3YA:10 a=GvdueXVYPmCkWapjIL-Q:22 a=FO4_E8m0qiDe52t0p3_H:22 a=JiizpSU_mAIq9zsZDqn2:22 X-Proofpoint-ORIG-GUID: 4TBBp99pdUIYVbkXFcoQ7neiWifZoC5s X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.125,FMLib:17.12.100.49 definitions=2026-06-09_02,2026-06-09_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 adultscore=0 spamscore=0 priorityscore=1501 lowpriorityscore=0 clxscore=1015 impostorscore=0 malwarescore=0 phishscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605210000 definitions=main-2606090080 TPM TIS SPI probe fails with: tpm_tis_spi: probe of spi11.0 failed with error -110 TPM TIS SPI sets cs_change=3D1 on single-transfer messages to keep CS asserted across the header, wait-state, and data phases of a transaction. CS deassertion between these phases violates the TCG SPI flow control specification. This bug was introduced by commit b99181cdf9fa ("spi-geni-qcom: remove manual CS control"), which replaced manual CS control with automatic CS control via the FRAGMENTATION bit. The FRAGMENTATION bit controls CS behavior after a transfer: when set to 1, CS remains asserted; when cleared to 0, CS is deasserted. The commit correctly sets FRAGMENTATION for non-last transfers with cs_change=3D0 to keep CS asserted between chained transfers, but misses the case where cs_change=3D1 is set on the last transfer. When cs_change=3D1 on the last transfer, the client requests CS to remain asserted after the message completes, so FRAGMENTATION must be set to 1 in this case as well. Fix setup_se_xfer() to set FRAGMENTATION when cs_change=3D1 on the last transfer. Also fix the same missing case in setup_gsi_xfer() and correct it to write 1 instead of the raw bitmask FRAGMENTATION (value 4) to peripheral.fragmentation. This field is a 1-bit boolean consumed by gpi_create_spi_tre() via u32_encode_bits(..., TRE_SPI_GO_FRAG). Writing 4 to a 1-bit field causes u32_encode_bits() to mask it to 0, silently disabling the FRAGMENTATION bit in the GPI TRE regardless of the cs_change logic. Fixes: b99181cdf9fa ("spi-geni-qcom: remove manual CS control") Cc: stable@vger.kernel.org Reviewed-by: Jonathan Marek Signed-off-by: Viken Dadhaniya --- Changes in v2: - Updated commit log. - Fixed typo in code comment: s/keep CS between/keep CS asserted between/. - Link to v1: https://patch.msgid.link/20260529-fix-spi-fragmentation-bit-l= ogic-v1-1-3b30f1a3dd7d@oss.qualcomm.com --- drivers/spi/spi-geni-qcom.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/drivers/spi/spi-geni-qcom.c b/drivers/spi/spi-geni-qcom.c index a04cdc1e5ad4..26e723cfea61 100644 --- a/drivers/spi/spi-geni-qcom.c +++ b/drivers/spi/spi-geni-qcom.c @@ -449,10 +449,15 @@ static int setup_gsi_xfer(struct spi_transfer *xfer, = struct spi_geni_master *mas return ret; } =20 - if (!xfer->cs_change) { - if (!list_is_last(&xfer->transfer_list, &spi->cur_msg->transfers)) - peripheral.fragmentation =3D FRAGMENTATION; - } + /* + * Set fragmentation to keep CS asserted after this transfer when: + * - non-last transfer with cs_change=3D0: keep CS asserted between chai= ned transfers + * - last transfer with cs_change=3D1: keep CS asserted after the message + * (e.g. TPM TIS SPI uses cs_change=3D1 on single-transfer messages to + * keep CS asserted across header, wait-state and data phases) + */ + peripheral.fragmentation =3D list_is_last(&xfer->transfer_list, &spi->cur= _msg->transfers) ? + xfer->cs_change : !xfer->cs_change; =20 if (peripheral.cmd & SPI_RX) { dmaengine_slave_config(mas->rx, &config); @@ -858,10 +863,16 @@ static int setup_se_xfer(struct spi_transfer *xfer, mas->cur_xfer_mode =3D GENI_SE_DMA; geni_se_select_mode(se, mas->cur_xfer_mode); =20 - if (!xfer->cs_change) { - if (!list_is_last(&xfer->transfer_list, &spi->cur_msg->transfers)) - m_params =3D FRAGMENTATION; - } + /* + * Set FRAGMENTATION to keep CS asserted after this transfer when: + * - non-last transfer with cs_change=3D0: keep CS asserted between chai= ned transfers + * - last transfer with cs_change=3D1: keep CS asserted after the message + * (e.g. TPM TIS SPI uses cs_change=3D1 on single-transfer messages to + * keep CS asserted across header, wait-state and data phases) + */ + if (list_is_last(&xfer->transfer_list, &spi->cur_msg->transfers) ? + xfer->cs_change : !xfer->cs_change) + m_params =3D FRAGMENTATION; =20 /* * Lock around right before we start the transfer since our --- base-commit: e7d700e14934e68f86338c5610cf2ae76798b663 change-id: 20260528-fix-spi-fragmentation-bit-logic-880394337ff9 Best regards, -- =20 Viken Dadhaniya