From mboxrd@z Thu Jan 1 00:00:00 1970 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 5A38A396587 for ; Thu, 9 Jul 2026 04:20:58 +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=1783570860; cv=none; b=XOQQ3ov/CIfTeCwZadWSHGo8MT8f7dJT+WokEgIoP/CCXKLdeSwRiKvTL3qO9GSvvfHCs5rTMRptx+m4FBSNv39Fo8riNNmLHDBVGglyuRK5IDJPxSBftXVeWRAKMKvBPedwgViuaCYKq9aVLc7FIKO+hrMz2x5DZdL3qxH3ImQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783570860; c=relaxed/simple; bh=fUysjhNtvV8X/Ql+qqACuezU5OdURq9AJeR3Khazz4E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kdveBvzOK7+F3wtHixTJocdSkM7PVpBVDgymjMHGX5eX2EnjCx+6FshNgaLZ70REVRhqALuUk7AlvHdc0Lz3A1w3bmmHhMQl9nJgwUEHegOAPYRrqn6xil6GSYku0duOkjEjsVuZvzd2IvAXA6941LFD6zOaJttRg61zfbJ5mnI= 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=ihY6abod; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=g0qgyh77; 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="ihY6abod"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="g0qgyh77" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 668N8js54054170 for ; Thu, 9 Jul 2026 04:20:57 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= /olJtL4EEXjuiuE/Fu9MLOtE57HZJ7p/f88ZnmXBGcw=; b=ihY6abodggriP8Uw iZq/2fM/LWeypOhwHR1PAZVlnGgqi+6XJlQ5MuXbf0X7jDwx04Gps6SRevfRalNy jiK/bOhKwNKGegH9pRGAQss/kus/fyo7TAGEosYodOYZrDpwhscnzNgZHO64acjK nfAAjbnDzt8ozjdSbJIRuEimC3nSYb0jQrpNqty0U/pfweZl263TLC8SRoXHheCU Hd/yq5d8cBGBYGt5grBKvp7cp8Z4sYYg3vqrQ/focHc8jAEiDkC+s1V9hF31SNLW b2HxfIOva9eYY7ZBBG2wG6ROVSMwy6dyEN1UdjMD7FsHHlwWXEsLk0uMPHZOp1Ll x2bkZw== Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4f9wwfs87s-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 09 Jul 2026 04:20:57 +0000 (GMT) Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-c890bac374eso1929535a12.1 for ; Wed, 08 Jul 2026 21:20:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1783570856; x=1784175656; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=/olJtL4EEXjuiuE/Fu9MLOtE57HZJ7p/f88ZnmXBGcw=; b=g0qgyh77GlnDu5XrjlYXOh6hp1fWDi1BVjYFBAHuCr0hF/2G6jd8FVnVnUEGWvQXsL 3hN2f+G1GVOkGqxF6hrCYFV4jjBHvdaSbrZLHJXAs8OeLgjjz8O/sjOIhNcIxOvzUqL7 iPBZ0Mb74ILfsrHpFfrhHwtgbCpx+73LXOu6QWu8/Ci1dMvcRShctlR5Amfdf+NzTsX/ 7X9mZoPo5PbMauJkAZiRlqDQb3TteEgJybC8m+Uj6dptETa4PMeWA1iDWS6vUGpIrqU9 gQYYc0/dMXLBoZvL11gHZcpoHiDvIciuz6d1BJXdZQm7Q2MYBgM++RSUnwVWq14tjdNv DJIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783570856; x=1784175656; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=/olJtL4EEXjuiuE/Fu9MLOtE57HZJ7p/f88ZnmXBGcw=; b=f3x9Pw/fuS82Wme/UkyjvOjNduTGSfH4qCbTGb3TvRz1QBfM0lsc9N+OW9wTld+v4l omhf9HVQcV73qDzneb+vaWLlep3SZ3CyiRWFcDlwL96mnRf3KMNcJHTdPxkKNOBYrtG8 lqu2TEBHoAxLHlG8KKaHpBcYvfZDsUpLzfgS5WkS32RLrNOy4Fced12/6PitcjDJMHrU CQtOos6NI4eAXxSGVU893rzZx8R/fF4O0YrLJyTUE4K5rWiVTg8ahPZLmY/Rjx6Y+jXv 3oCwLVyrdATiGTxy7q79w7IaFp0qvIp/R/n8AZutmUpCfm+hVxAVwe5s5/DR9MNvR2BF rMAw== X-Forwarded-Encrypted: i=1; AHgh+RpYnsJZDh3Xjd78r3a7qAS5BjXxjFjyDuSs7coEAcJNqXg296/BFhLIqlDIbZgdkITq5z4q72L/NVRNX4A=@vger.kernel.org X-Gm-Message-State: AOJu0YxhEOhf4/cUkj6K0HnAPmieotQGVUE8L1O8UWPHhSHU4SAWWH9K yEUFj5LJA+L+p6bvyAc/LIT5+aU3UpCJ3xwIwrwu0N8oeYk11Ppq/NaVSFK1cgSiGr9IgTvuhN4 yWc0enRgkmp1NWiCgPzRvxRrQ3j9SMbpq9JUjq6b3e3wZ/TqWZtIJHYj/P87bRNYc8HXBQVXoby M= X-Gm-Gg: AfdE7ckFn+1emaKVO37YFhivWCPNvZ97FlKavZFYnnPsBEn5puTQ04CKsiqd1pB4kQk bTL9v99XWU2M7xuGpWNVWmszYz9OSjo4nrBf3SYA+aQ8b5x9igFEnsDjMb5URyB4eryaHBVZCup JiLbnZqzWsCSePa2KKB5M3ksYRYJe29P4JjFpHnOIPBAWYyoqvltTQayrVebOVaPTtwsQ1uXHrf KI991G/2j6cU2ksg7os5qBGXCgQlp6e+UTScRyne8Wtj9Ca7tksTnDg2Q5YPBwgzFoU5lNqFt9j bYizN3O6hX0fMbLfqXvVJ9YeFFnkdctBh3wjKTuqWeODo2LxZXCAKeWzw5lkCGHF0XH0qWJiLx5 R/IMjBAB9IzI9UKKWZK3sKE3uidIwCUdliIxBZAfUUzK/ X-Received: by 2002:a05:6a20:3d8b:b0:3c0:9c19:65c2 with SMTP id adf61e73a8af0-3c0bcd20145mr6948225637.74.1783570856305; Wed, 08 Jul 2026 21:20:56 -0700 (PDT) X-Received: by 2002:a05:6a20:3d8b:b0:3c0:9c19:65c2 with SMTP id adf61e73a8af0-3c0bcd20145mr6948187637.74.1783570855798; Wed, 08 Jul 2026 21:20:55 -0700 (PDT) Received: from hu-ptalari-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-311747f596asm25490098eec.2.2026.07.08.21.20.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Jul 2026 21:20:55 -0700 (PDT) From: Praveen Talari Date: Thu, 09 Jul 2026 09:50:40 +0530 Subject: [PATCH v2 1/3] i2c: qcom-geni: use cancel command before abort on transfer timeout 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: 7bit Message-Id: <20260709-fix_cancel_sequence_on_failure_for_i2c-v2-1-1db178c695bb@oss.qualcomm.com> References: <20260709-fix_cancel_sequence_on_failure_for_i2c-v2-0-1db178c695bb@oss.qualcomm.com> In-Reply-To: <20260709-fix_cancel_sequence_on_failure_for_i2c-v2-0-1db178c695bb@oss.qualcomm.com> To: Mukesh Kumar Savaliya , Viken Dadhaniya , Andi Shyti Cc: linux-arm-msm@vger.kernel.org, linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, Praveen Talari , Naresh Maramaina X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1783570849; l=3620; i=praveen.talari@oss.qualcomm.com; s=20251114; h=from:subject:message-id; bh=fUysjhNtvV8X/Ql+qqACuezU5OdURq9AJeR3Khazz4E=; b=tcpnCaPmpdRfdgIMv0FhXQPBBupfektEgs90MvtZmgXWpK90KxU//rHmtcSeBBxBnlBbsRYxO hsBqscZaPx/Cm3S0ecwrkLyh3IzzPbX5BdKADVu9t7DU6lb6aVRd1Mw X-Developer-Key: i=praveen.talari@oss.qualcomm.com; a=ed25519; pk=NGK/88fjyHXgfhIKwag7+uIytOmyOypvZ/hDFaYPEss= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzA5MDAzNyBTYWx0ZWRfX98TsqRL0JK2H DuEPMVscIuRayeU6sAx3JjeNExSladePLDquYHmK0Wgbhy++j0k1w5YuHm7X/cBjuTUn0RDrMKz QlWn1kXUFB9VnTnFSumYkyLpOKauNO6tLbhM2R6S/AEEKlm41p5oTfs84qBNyH76rkf1SM5CeLX UiTu7ND2A7R2nf3gRpc9cNHkArJ1Kow0ngY4KvIR8vYo8+Ihy0IUnrTBRgL8NIPnEpW2+de5bL+ IsVq82UaNpqkfcvsSDxBUjCRZS6A7/lXuOHsNRPWNgXsShcMh4ectD66Fw6E61Puk2mAyNfu6m9 N2JVO8xIR0B2U9o/j5OMY2IUEJXEeJ+M/EISCijMPIa2OPR/QaP//5q2mZc4+x4yvucck4dszXK 5aegwD/JqSBAV3ePflPjEoNLTo+H8/ZEPHOFdovq+V5OoPhtwCBqYx3pAf5du6zl2Sh7DOd6U7d xgaRAgRl9q/cNgFss1g== X-Proofpoint-Spam-Info: AW1haW4tMjYwNzA5MDAzNyBTYWx0ZWRfX/C7Zm2GplN9K ahhCzV4Ix2dSI3qK4AqQDTndRTI5MXNPykCkr8YqoFtie2333jt5TxtMHLAYphbonJa+7VzbvM+ p+FoVZ8dll+T6vfvoZuG34PBzRZzQhA= X-Proofpoint-ORIG-GUID: m9hu2afmMFzyq6SzClMLjBIgqjPEtPkn X-Proofpoint-GUID: m9hu2afmMFzyq6SzClMLjBIgqjPEtPkn X-Authority-Analysis: v=2.4 cv=Krh9H2WN c=1 sm=1 tr=0 ts=6a4f21a9 cx=c_pps a=rz3CxIlbcmazkYymdCej/Q==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=EUspDBNiAAAA:8 a=HIFZfxgX9pW5VpyTZ0YA:9 a=QEXdDO2ut3YA:10 a=bFCP_H2QrGi7Okbo017w:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-08_05,2026-07-08_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 phishscore=0 priorityscore=1501 impostorscore=0 lowpriorityscore=0 adultscore=0 spamscore=0 suspectscore=0 bulkscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607090037 The GENI I2C driver currently invokes geni_se_abort_m_cmd() directly when a transfer times out. However, the GENI hardware command cancellation flow requires a cancel command to be issued first. An abort should only be used as a fallback when the cancel operation itself fails to complete. Introduce a dedicated cancel_done completion that is signaled when M_CMD_CANCEL_EN is received. The timeout recovery path waits for cancel completion and escalates to geni_i2c_abort_xfer() only if the cancel command does not complete within the expected time. Co-developed-by: Naresh Maramaina Signed-off-by: Naresh Maramaina Reviewed-by: Mukesh Kumar Savaliya Signed-off-by: Praveen Talari --- drivers/i2c/busses/i2c-qcom-geni.c | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qcom-geni.c index 96dbf04138be..15403edb355a 100644 --- a/drivers/i2c/busses/i2c-qcom-geni.c +++ b/drivers/i2c/busses/i2c-qcom-geni.c @@ -74,6 +74,7 @@ enum geni_i2c_err_code { #define PACKING_BYTES_PW 4 #define ABORT_TIMEOUT HZ +#define CANCEL_TIMEOUT HZ #define XFER_TIMEOUT HZ #define RST_TIMEOUT HZ @@ -112,6 +113,7 @@ struct geni_i2c_dev { int err; struct i2c_adapter adap; struct completion done; + struct completion cancel_done; struct i2c_msg *cur; int cur_wr; int cur_rd; @@ -361,6 +363,8 @@ static irqreturn_t geni_i2c_irq(int irq, void *dev) dm_tx_st & TX_DMA_DONE || dm_tx_st & TX_RESET_DONE || dm_rx_st & RX_DMA_DONE || dm_rx_st & RX_RESET_DONE) complete(&gi2c->done); + if (m_stat & M_CMD_CANCEL_EN) + complete(&gi2c->cancel_done); spin_unlock(&gi2c->lock); @@ -387,6 +391,27 @@ static void geni_i2c_abort_xfer(struct geni_i2c_dev *gi2c) dev_err(gi2c->se.dev, "Timeout abort_m_cmd\n"); } +static void geni_i2c_cancel_xfer(struct geni_i2c_dev *gi2c) +{ + unsigned long time_left = msecs_to_jiffies(CANCEL_TIMEOUT); + unsigned long flags; + + reinit_completion(&gi2c->cancel_done); + + spin_lock_irqsave(&gi2c->lock, flags); + if (!gi2c->err) + geni_i2c_err(gi2c, GENI_TIMEOUT); + gi2c->cur = NULL; + geni_se_cancel_m_cmd(&gi2c->se); + spin_unlock_irqrestore(&gi2c->lock, flags); + + time_left = wait_for_completion_timeout(&gi2c->cancel_done, time_left); + if (!time_left) { + dev_err(gi2c->se.dev, "Timeout cancel_m_cmd\n"); + geni_i2c_abort_xfer(gi2c); + } +} + static void geni_i2c_rx_fsm_rst(struct geni_i2c_dev *gi2c) { u32 val; @@ -473,7 +498,7 @@ static int geni_i2c_rx_one_msg(struct geni_i2c_dev *gi2c, struct i2c_msg *msg, cur = gi2c->cur; time_left = wait_for_completion_timeout(&gi2c->done, XFER_TIMEOUT); if (!time_left) - geni_i2c_abort_xfer(gi2c); + geni_i2c_cancel_xfer(gi2c); geni_i2c_rx_msg_cleanup(gi2c, cur); @@ -515,7 +540,7 @@ static int geni_i2c_tx_one_msg(struct geni_i2c_dev *gi2c, struct i2c_msg *msg, cur = gi2c->cur; time_left = wait_for_completion_timeout(&gi2c->done, XFER_TIMEOUT); if (!time_left) - geni_i2c_abort_xfer(gi2c); + geni_i2c_cancel_xfer(gi2c); geni_i2c_tx_msg_cleanup(gi2c, cur); @@ -1107,6 +1132,7 @@ static int geni_i2c_probe(struct platform_device *pdev) gi2c->adap.algo = &geni_i2c_algo; init_completion(&gi2c->done); + init_completion(&gi2c->cancel_done); spin_lock_init(&gi2c->lock); platform_set_drvdata(pdev, gi2c); -- 2.34.1