From nobody Thu Apr 2 09:30:24 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 4493B3E95B3 for ; Fri, 27 Feb 2026 06:16:59 +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=1772173021; cv=none; b=S00jZnu3xXlIeH/M6tYp7wU+UfIj3s/jVEGC3uqjpZ4DkUjpNjUyjOLu7fy/Cre95X/4iFZnJfhEuuwMK0K3pBe6+HOkuC245JCixy9uLb/0HYh7ZXGsuOdJbxvkfbUXHyaZ3aIEMUdoQrX0nVyVsH35Eakniak0XmbCFXmNxyo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772173021; c=relaxed/simple; bh=S/vIeyOk0etlagZVP40JWlg+UBzm8Qxfl4zTRXy27jQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=cMAKstJoJfODfedZ9WnQ6U5H0dASgqmWDwAYEQXuzB+ZWbJcQonCPuq+sHtdGoXDZd/h2Fg1BDFU5guqHCSdlIGOWLyizxFZOl92/45q0AUayUCDh5sA10jefho1YcOKjqRWoMf3EgBxAiANLjaPbbYUPkjsQczacyF2kFcYvHs= 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=eTGPIHAM; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=HDGgjcXJ; 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="eTGPIHAM"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="HDGgjcXJ" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 61R2KJV72440245 for ; Fri, 27 Feb 2026 06:16:58 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=2FSw1TauRxw uUqMcF+pvf5bVYnR/BuNas3ylwyrIGN8=; b=eTGPIHAM1nW1Q81LCsO2Yu+oxT3 Vx4z4p3vELH0YhyxmkZ1wBs9Pid54Mes1q1auovZItydqBg2JgTGLNeYHlhYvDrb Slbd0dBa1wE2aWnNcjWUezGBoE4oom+jIdqXhQKxV7ASwdMp+qQ4kcO0EoH+nZ9y V3hBnU8K5lxoLagnOYf7cYhWwVaAOg1s8whvyUntji7UBP2Z8hFipZmiqQkxr1Ke l8nSUYwsH9n2kBAMNHE2oMHI7K3VaOXAu0SFZHanQKiYX6ZWbqdrFOjs0L87OFiT rkhbIavnhoIJMvcwgXDaHxBbR1YS+Xfgi8fqcAqZAnSzpUyH90IebzpA86w== Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cju4r26kg-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 27 Feb 2026 06:16:58 +0000 (GMT) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2aaf2f3bef6so16921425ad.0 for ; Thu, 26 Feb 2026 22:16:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772173018; x=1772777818; 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=2FSw1TauRxwuUqMcF+pvf5bVYnR/BuNas3ylwyrIGN8=; b=HDGgjcXJfiG0IGD8fyOb7zCmpYbF+XEyKG3JFWPZaB6+V+V/lnwooUsJ4QTVMtUtmf jiXlGyao87IQdETb9CuXzZPFeBiuutTa4fRqpiX4NmUcb88YrWks5F3wc/oCbc1Nfl+r mAf/7T28GecYA+kgg/oWRMMC37Z7sLIfRUfP9bdRwsSnTKeq9FQeYTB4GKPOhPB16LEs c1GXZhLNIG0Kf4giK1zr3C+faY3ech0ulfU3+IXVysfHZKYU1bQUpNu34MA4tJZ1/tyJ pVLQrpUvLXAOjhIq+QvGGYC+ObD8tMtc18wjs6mhA1sAo0KuXB29IXjAK/0OoQcfSm2q V4/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772173018; x=1772777818; 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=2FSw1TauRxwuUqMcF+pvf5bVYnR/BuNas3ylwyrIGN8=; b=l81bS/NrNPz2Ry+Q5ybcshnooZABzFh2CZWtQNKi90NwxCmDZ1XzeSjaaFC5ARx5iY yQt7gf8T+7Ld+n79+47+/2Gt/6ADbX8o0SHmKexzcj3YW332sT/kCiZ58EBh/RqrkzHv F80Gvhkr9hKkBdKQ2LCwEsJ41c0XMmQG1cGeehdO9H2pe631K0ZoQXuoS+A1tjBJkgH0 40u/zGmJ83VIqGTaiO2hjO3CEB0O1/2jwLFNz3BZeZn0zP0I5td9ZxXeCrLmVZUZN0YS pQ8M6LwNdQAuZa8jA6sufcIJiNyuQPmbaKgV6r1KbsIdM9gpk8tSkdvxLI8bdP+nVvOq nn4A== X-Forwarded-Encrypted: i=1; AJvYcCUhWWNUWvZydt/whbVWExUIbZlCjTMqeF7AIlVUgZ7Im8ddxwZ0biNtq1VBw9Z7knF5x8lkWnig11+yg24=@vger.kernel.org X-Gm-Message-State: AOJu0YzBT8OCNzzM6r0GlL3IdxPuibxf6OtexoszlX5MZs/KSxBEdU+6 vAZXqgB+h1XT7m9ewz0z4UBEJNNVXsmzOeRZ+6PdBfP1+XJk9Fez5on84wtYFZfbufh3dBiIhA2 PQN78+0l5hsrJqNNL5yIfyHRYzSdjhczjaSUn7xzxzfDDp5uCQGbHnAd/RaT4IyrOiqk= X-Gm-Gg: ATEYQzy5znCuJYc9dlfKNa3XF0JaBvBJfsCuVlQzLNNN672ssu5gMYrQ7f0Fx3o9BGR kq4hFg7aRZ1qJL5SF6Sxc6CoQiu4HSQ0za4HO/ar4iCcvEZ0JBLRKP3SMFd393ZvJb/ng20dRy3 TXgGanPo1ia3IXHRREY2E0/xhOveIlNw2qATCN/q2r6xwnqGa1WwSuziT+aguOwhYmHY7lG/sRB HGq3pnNKU4TqXTxkYJG6qtqoP8tXYlvA56LHImA8Hi6lwAghydnwNKn78Ih3U9E5LhfPv9GfvIC FE2oUN6d7M129WJ6LONLNBtO2Iaf8Bleo4w3kn5TYjCLy6Z1o/b4jwlxUyUrkb0Z6yTX24ZINSC doV7uHxMWbGMczKdSZymXNlVUb3AkdD1hing0DnrUs2cs4nCbyoT9rEY= X-Received: by 2002:a17:903:41c4:b0:2aa:d34d:a805 with SMTP id d9443c01a7336-2ae2e47d9c6mr14787555ad.27.1772173017809; Thu, 26 Feb 2026 22:16:57 -0800 (PST) X-Received: by 2002:a17:903:41c4:b0:2aa:d34d:a805 with SMTP id d9443c01a7336-2ae2e47d9c6mr14787115ad.27.1772173017185; Thu, 26 Feb 2026 22:16:57 -0800 (PST) Received: from hu-ptalari-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2adfb6a043dsm64813025ad.54.2026.02.26.22.16.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Feb 2026 22:16:56 -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, aniket.randive@oss.qualcomm.com, chandana.chiluveru@oss.qualcomm.com, jyothi.seerapu@oss.qualcomm.com, chiluka.harish@oss.qualcomm.com Subject: [PATCH v6 09/13] i2c: qcom-geni: Isolate serial engine setup Date: Fri, 27 Feb 2026 11:45:40 +0530 Message-Id: <20260227061544.1785978-10-praveen.talari@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260227061544.1785978-1-praveen.talari@oss.qualcomm.com> References: <20260227061544.1785978-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-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI3MDA1MCBTYWx0ZWRfX2ea9FzqeQiM4 70RBIegNfceLEC86vkI2VVsm5M1rwzva/wo3PKLroXc/OeOnmW1lR4SeiIbTPbdT8uT/v4Ncp9x 76Hh4e2vccztduG88iRNYZph1K62cm0POaQjsscBX+NBNel2fqAG5dKIs4opjnQorpg/EqkXt8h dekSx/NtJ+4xsyFrc0/VgXR/ntLlqcKSEPbnoXD6P3mASHFOk0dgo8qQJduWhq59UhWAZDwhqff kquvFe4YccnkktDgydSpFILs7q5Y+GAohsXjzv0Syy4HNtEYpCDWCmAHc5MN+0MustH58rY/z8h E11OfuR/N0/7q8HMW6Mnww99UVuBKW2IJV2rgc3FGWevl/KfXA1wyKOjhih5t9wqQOZqDKKufPn hbIVzqyd44tjQ+eYpr93lt55GaJrNNhmEWv/461MNdLBNwCgOLvdJ4a9fRKZO1ntfraSxeGJB1s vR9u5/OnuUtj9qEPqGg== X-Proofpoint-GUID: TUXFg8AqrFXQBQ4-q-PefVqVNbcn4ygy X-Authority-Analysis: v=2.4 cv=KZzfcAYD c=1 sm=1 tr=0 ts=69a136da cx=c_pps a=JL+w9abYAAE89/QcEU+0QA==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=6GPvvr__t7aM35KwLhsA:9 a=324X-CrmTo6CU4MGRt3R:22 X-Proofpoint-ORIG-GUID: TUXFg8AqrFXQBQ4-q-PefVqVNbcn4ygy 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-27_01,2026-02-26_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 lowpriorityscore=0 priorityscore=1501 suspectscore=0 malwarescore=0 bulkscore=0 adultscore=0 phishscore=0 spamscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2602270050 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 a4acb78fafb6..2986266695c0 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