From nobody Tue Feb 10 06:25:36 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 BD13842188A for ; Fri, 6 Feb 2026 17:42:31 +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=1770399752; cv=none; b=u3cT1wnvKwRmyl9CY1SjLITgFP9cbC9fIJ0NtLZmma5+4m19fHw6RxSP25bxOgWQ9oq4sWMeCX7FteTO0JIVs0ES+JkD/a2LjrawCkhE2bChy8uf2kzPTruSWZvwZp7ghfJ/YDkJRidkyCTdoxIGSlv1EqPwrqkbD9COpOlKGuU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770399752; c=relaxed/simple; bh=sDUm9Xydq3403YULfrfZBE49cHQPZ/UiIqAzox6BoBM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=i/xImzrBtIpkknLvxgWvtagbJCD9uv25cR8RdazCWUE+CNQz4jr6efmzpWUc+MTS8G7mb2aYufQQHxbuc94ncfBcg1XeE3CsW+/47H1stKn5gzeionb+gG1eayaxGoglF4thPe2SQV2MKwItfp7h6n7gWKDgJqG9u2FWJRqAfgs= 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=XROZyVqL; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=ACyaXTx+; 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="XROZyVqL"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="ACyaXTx+" 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 616H54iD695346 for ; Fri, 6 Feb 2026 17:42:30 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=tZXS0ryzuuo eAsGptKjaEuILlyf9UBevXtHQPKJSvt0=; b=XROZyVqL1eptJRLEbnARPhaaDnf K/v1rAvMmyLNf3aqjL6bw52BgkXPuZN7hGUslnUDC48+gOlj6pyJz9yZ2csjrwFd ksbJk7KZJCGulaakadajhvxXTiJDUhD84404hacNA1XjCdJVAn8pF4+xGu841V1L 8YjUsV1FGHSHrRVb01Blqc3kAU1JfwQAJIcPbn1BnImSSGdk4pLpBluNMLFrIyiU 7ZJB6GvcwH48lLH3vm3BsfGY4UaVfjeOcLwomri4yAuZ0ivQVZlAVRPnAvFJigRM RDraEyTfw1mt0yFGeTcDS4bebMDgpj/zMmsFjado+2xODIN7ha5vavwuq9A== 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 4c53qvbcsy-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 06 Feb 2026 17:42:30 +0000 (GMT) Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-c5291b89733so1381843a12.0 for ; Fri, 06 Feb 2026 09:42:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1770399749; x=1771004549; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=tZXS0ryzuuoeAsGptKjaEuILlyf9UBevXtHQPKJSvt0=; b=ACyaXTx+8uDH5Xno5c9MTO7ycl6zb5gk6yQ4coU/WkqqhhqLSwTpYvVVg0zexXLlqX pW8XNIqXZ2pHYKpNM6Pri8pta90Hx15gdAwFwn+naqo32TpoR44UYXlQgen6qQ5QRbj1 +52QO8va5T3ODQf6zRY2Bzxdwsh8GXrhZsJYJL4Y/0/LXt2YPiQy93OTVM1GC2lx0qzn 8gHP+COZ/x1hTB6EMFlOQ63TycsZFr3vT5MtQqgSu4BIzK1nlmITfaADNlg7zqxvQwru vMA6JhWOVb64wPFIcLekTcIgh79qoNARsRye40B8ViwUoSh2kWQkTbAxe9O6E2/DblA3 DD3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770399749; x=1771004549; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=tZXS0ryzuuoeAsGptKjaEuILlyf9UBevXtHQPKJSvt0=; b=Le8SOZv5J7kF1JYQ0Y2sChcWW2Lw7GdSzKCbrypPfJXBBkiEUUoonuGP3Dz0mYcZSk 1+EL/X1fRCcx/GaG0kEFTdgZ0KF6LwTZZl3BJ4d0QOiC26+KeGfLF+D8+0KFjpWQghSU nuoIkr8M90HbzFWi2YyTALZdABBKYDrRr9Cna11caXP7Qcy1vWvIZMOEDZViRkU+x8Ye vO2mQcPbn7j15bAotgX5gKAdwx39xbreB6KgVvMYoPAjxYA+J03MHpYsSTNz1wrNOFVZ X7UkaLm/n0Bve4v1St8GYOsHsryrQx15BDq4Cg7JSMQlVkUKw2CQxwX0+kE6bNhh0kBx D4zg== X-Forwarded-Encrypted: i=1; AJvYcCWeBlav9HqxfEwh/XAZa2CxVk1nwW4dj1OcEnq4RFwtVdnNkX5Cq7hWtVWFFS+VMp1d6WDf9lYkKRgyBa8=@vger.kernel.org X-Gm-Message-State: AOJu0YzOgcg8QpZPd8GSjA64N7sgydbPIxoWjQQUJ+CdH2zFHNFpAzpy DN6UWbcQcPl595Za1EupM047UK308H0rG4ULpmowTVmJLm49D4FlK9dzqJ4tmz1VYxNq/7eqBYp IZBO38aTrEdjrOe2WzmjS5Jzy07TYAVPbNaPgk6C/SbV5Z2gspHreq9BR3+TnyRCindw= X-Gm-Gg: AZuq6aKdHLSo41xp6EMclAcNBrTTVletSc0BUfzWMLEVhdw+T6acG5FZNc81RWeSEm9 RcXXvcqDPPvYsuK1L60b6j8I7d984/a3H3I5KtvO9hSFW1fz1ZjgIN+HEFVSL7TLlc0Af+uq4Qh YuhLfFPk4XjXjnOOe2f88TW9A4oiCQ1NMLIFg+doxKLBdhF0ue4CHu1CY++WQ2q3hGKdSwhEgyh MQCtVA9ArenINIm63QlFFwm6xatxfLadK8mx/SswUnDCOtUgpWu1lxgjgphgs2l+NcDpvDbP3/Z Dbfv5/QEox2dOFZyXjtmWvP/lm+U3yN7T3T1adHNZoqedl1H8wJ8Uh88zVDoUPCyARb5a1L6l3z Fuw1LRjnzSWPG2LWo/jDp3k19qSIIXR9pz/XeqJKSjiM= X-Received: by 2002:a05:6a20:d12f:b0:393:c4d:be50 with SMTP id adf61e73a8af0-393acfb104fmr3213281637.16.1770399749526; Fri, 06 Feb 2026 09:42:29 -0800 (PST) X-Received: by 2002:a05:6a20:d12f:b0:393:c4d:be50 with SMTP id adf61e73a8af0-393acfb104fmr3213243637.16.1770399748923; Fri, 06 Feb 2026 09:42:28 -0800 (PST) Received: from hu-ptalari-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c6dcb5eccbdsm2639387a12.19.2026.02.06.09.42.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Feb 2026 09:42:28 -0800 (PST) From: Praveen Talari To: Andi Shyti , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Mukesh Kumar Savaliya , Viken Dadhaniya , Bjorn Andersson , Konrad Dybcio , Praveen Talari , linux-arm-msm@vger.kernel.org, linux-i2c@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, bjorn.andersson@oss.qualcomm.com, dmitry.baryshkov@oss.qualcomm.com, konrad.dybcio@oss.qualcomm.com Cc: prasad.sodagudi@oss.qualcomm.com, quic_vtanuku@quicinc.com, aniket.randive@oss.qualcomm.com, chandana.chiluveru@oss.qualcomm.com, jyothi.seerapu@oss.qualcomm.com, chiluka.harish@oss.qualcomm.com Subject: [PATCH v5 09/13] i2c: qcom-geni: Isolate serial engine setup Date: Fri, 6 Feb 2026 23:11:08 +0530 Message-Id: <20260206174112.4149893-10-praveen.talari@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260206174112.4149893-1-praveen.talari@oss.qualcomm.com> References: <20260206174112.4149893-1-praveen.talari@oss.qualcomm.com> 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=TsPrRTXh c=1 sm=1 tr=0 ts=69862806 cx=c_pps a=rz3CxIlbcmazkYymdCej/Q==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=EUspDBNiAAAA:8 a=6GPvvr__t7aM35KwLhsA:9 a=bFCP_H2QrGi7Okbo017w:22 X-Proofpoint-ORIG-GUID: fVaa9DgCaAJylZGEXQTrWtgbDmMczcgb X-Proofpoint-GUID: fVaa9DgCaAJylZGEXQTrWtgbDmMczcgb X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjA2MDEyOSBTYWx0ZWRfX1GvfgyifQQAq YJZR/hqOSRELr5RAFBwgg267Q9/E3UafNQlLh/E14EIhDlH4b+uNycoC4Idf/HjSMce2lJUe82L 76jNXLnCrc53WsL7LsiKTt+w0zCrvBftrGQYndFwLOXKhZ6JLWH/cszt87Ytix4Xpc244AgXU1g O6YxL3sY9RSmKqEXVozNMkTKMUFXCS4qlyVWXJDHu4d1Mnjc4nHBK61cgQDB0dexfT3S9E5PItg uuqfwyr6BOrJQ4aNcOoWr5YubwdJAJWlbKj3U0xuwi5ZdHURG3Oj5clloWgMDNfbG2mbnp21LRW 7waFTn9AVuwGHvJq8cD4wR+EB/lmO09y5abtBSMFaol/dMnvikavsIQnKOsvjT26cV5m6+RkCPx niiHxbtP2VGWaUuosGBIRCg1oMIl7eywXWuMj5JEKu6T7GkyUzOOpdGzBHB296n1BOPWqaNye4t qo7NoItd6+XrNeEh9mA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-06_05,2026-02-05_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 lowpriorityscore=0 phishscore=0 priorityscore=1501 suspectscore=0 malwarescore=0 bulkscore=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-2601150000 definitions=main-2602060129 Content-Type: text/plain; charset="utf-8" Moving the serial engine setup to geni_i2c_init() API for a cleaner probe function and utilizes the PM runtime API to control resources instead of direct clock-related APIs for better resource management. Enables reusability of the serial engine initialization like hibernation and deep sleep features where hardware context is lost. Acked-by: Viken Dadhaniya Reviewed-by: Konrad Dybcio Signed-off-by: Praveen Talari --- v4->v5: - Added Reviewed-by tag. v3->v4: viken: - Added Acked-by tag - Removed extra space before invoke of geni_i2c_init(). v1->v2: Bjorn: - Updated commit text. --- drivers/i2c/busses/i2c-qcom-geni.c | 158 ++++++++++++++--------------- 1 file changed, 75 insertions(+), 83 deletions(-) diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qc= om-geni.c index ae609bdd2ec4..81ed1596ac9f 100644 --- a/drivers/i2c/busses/i2c-qcom-geni.c +++ b/drivers/i2c/busses/i2c-qcom-geni.c @@ -977,10 +977,77 @@ static int setup_gpi_dma(struct geni_i2c_dev *gi2c) return ret; } =20 +static int geni_i2c_init(struct geni_i2c_dev *gi2c) +{ + const struct geni_i2c_desc *desc =3D NULL; + u32 proto, tx_depth; + bool fifo_disable; + int ret; + + ret =3D pm_runtime_resume_and_get(gi2c->se.dev); + if (ret < 0) { + dev_err(gi2c->se.dev, "error turning on device :%d\n", ret); + return ret; + } + + proto =3D geni_se_read_proto(&gi2c->se); + if (proto =3D=3D GENI_SE_INVALID_PROTO) { + ret =3D geni_load_se_firmware(&gi2c->se, GENI_SE_I2C); + if (ret) { + dev_err_probe(gi2c->se.dev, ret, "i2c firmware load failed ret: %d\n", = ret); + goto err; + } + } else if (proto !=3D GENI_SE_I2C) { + ret =3D dev_err_probe(gi2c->se.dev, -ENXIO, "Invalid proto %d\n", proto); + goto err; + } + + desc =3D device_get_match_data(gi2c->se.dev); + if (desc && desc->no_dma_support) { + fifo_disable =3D false; + gi2c->no_dma =3D true; + } else { + fifo_disable =3D readl_relaxed(gi2c->se.base + GENI_IF_DISABLE_RO) & FIF= O_IF_DISABLE; + } + + if (fifo_disable) { + /* FIFO is disabled, so we can only use GPI DMA */ + gi2c->gpi_mode =3D true; + ret =3D setup_gpi_dma(gi2c); + if (ret) + goto err; + + dev_dbg(gi2c->se.dev, "Using GPI DMA mode for I2C\n"); + } else { + gi2c->gpi_mode =3D false; + tx_depth =3D geni_se_get_tx_fifo_depth(&gi2c->se); + + /* I2C Master Hub Serial Elements doesn't have the HW_PARAM_0 register */ + if (!tx_depth && desc) + tx_depth =3D desc->tx_fifo_depth; + + if (!tx_depth) { + ret =3D dev_err_probe(gi2c->se.dev, -EINVAL, + "Invalid TX FIFO depth\n"); + goto err; + } + + gi2c->tx_wm =3D tx_depth - 1; + geni_se_init(&gi2c->se, gi2c->tx_wm, tx_depth); + geni_se_config_packing(&gi2c->se, BITS_PER_BYTE, + PACKING_BYTES_PW, true, true, true); + + dev_dbg(gi2c->se.dev, "i2c fifo/se-dma mode. fifo depth:%d\n", tx_depth); + } + +err: + pm_runtime_put(gi2c->se.dev); + return ret; +} + static int geni_i2c_probe(struct platform_device *pdev) { struct geni_i2c_dev *gi2c; - u32 proto, tx_depth, fifo_disable; int ret; struct device *dev =3D &pdev->dev; const struct geni_i2c_desc *desc =3D NULL; @@ -1060,102 +1127,27 @@ static int geni_i2c_probe(struct platform_device *= pdev) if (ret) return ret; =20 - ret =3D clk_prepare_enable(gi2c->core_clk); - if (ret) - return ret; - - ret =3D geni_se_resources_on(&gi2c->se); - if (ret) { - dev_err_probe(dev, ret, "Error turning on resources\n"); - goto err_clk; - } - proto =3D geni_se_read_proto(&gi2c->se); - if (proto =3D=3D GENI_SE_INVALID_PROTO) { - ret =3D geni_load_se_firmware(&gi2c->se, GENI_SE_I2C); - if (ret) { - dev_err_probe(dev, ret, "i2c firmware load failed ret: %d\n", ret); - goto err_resources; - } - } else if (proto !=3D GENI_SE_I2C) { - ret =3D dev_err_probe(dev, -ENXIO, "Invalid proto %d\n", proto); - goto err_resources; - } - - if (desc && desc->no_dma_support) { - fifo_disable =3D false; - gi2c->no_dma =3D true; - } else { - fifo_disable =3D readl_relaxed(gi2c->se.base + GENI_IF_DISABLE_RO) & FIF= O_IF_DISABLE; - } - - if (fifo_disable) { - /* FIFO is disabled, so we can only use GPI DMA */ - gi2c->gpi_mode =3D true; - ret =3D setup_gpi_dma(gi2c); - if (ret) - goto err_resources; - - dev_dbg(dev, "Using GPI DMA mode for I2C\n"); - } else { - gi2c->gpi_mode =3D false; - tx_depth =3D geni_se_get_tx_fifo_depth(&gi2c->se); - - /* I2C Master Hub Serial Elements doesn't have the HW_PARAM_0 register */ - if (!tx_depth && desc) - tx_depth =3D desc->tx_fifo_depth; - - if (!tx_depth) { - ret =3D dev_err_probe(dev, -EINVAL, - "Invalid TX FIFO depth\n"); - goto err_resources; - } - - gi2c->tx_wm =3D tx_depth - 1; - geni_se_init(&gi2c->se, gi2c->tx_wm, tx_depth); - geni_se_config_packing(&gi2c->se, BITS_PER_BYTE, - PACKING_BYTES_PW, true, true, true); - - dev_dbg(dev, "i2c fifo/se-dma mode. fifo depth:%d\n", tx_depth); - } - - clk_disable_unprepare(gi2c->core_clk); - ret =3D geni_se_resources_off(&gi2c->se); - if (ret) { - dev_err_probe(dev, ret, "Error turning off resources\n"); - goto err_dma; - } - - ret =3D geni_icc_disable(&gi2c->se); - if (ret) - goto err_dma; - gi2c->suspended =3D 1; pm_runtime_set_suspended(gi2c->se.dev); pm_runtime_set_autosuspend_delay(gi2c->se.dev, I2C_AUTO_SUSPEND_DELAY); pm_runtime_use_autosuspend(gi2c->se.dev); pm_runtime_enable(gi2c->se.dev); =20 + ret =3D geni_i2c_init(gi2c); + if (ret < 0) { + pm_runtime_disable(gi2c->se.dev); + return ret; + } + ret =3D i2c_add_adapter(&gi2c->adap); if (ret) { dev_err_probe(dev, ret, "Error adding i2c adapter\n"); pm_runtime_disable(gi2c->se.dev); - goto err_dma; + return ret; } =20 dev_dbg(dev, "Geni-I2C adaptor successfully added\n"); =20 - return ret; - -err_resources: - geni_se_resources_off(&gi2c->se); -err_clk: - clk_disable_unprepare(gi2c->core_clk); - - return ret; - -err_dma: - release_gpi_dma(gi2c); - return ret; } =20 --=20 2.34.1