From nobody Tue Dec 2 01:26:44 2025 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 30FEB2C3268 for ; Sat, 22 Nov 2025 05:01:28 +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=1763787689; cv=none; b=pmz8wpshjHJwPbznf6wxHHrmy+7FR5UDDrX0stFzAupe1i20G1Ky7k0oH3n9wmXIM2cEeRiwmbJmfJQu0olUVo8yoer8+RzdbUEW2bEWpZ1+5fEcDvhExGDbe9U1eOA9I+V9dNJl6jkLKpmhpmv3uu/N7HwBJaTACb2we2UyciM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763787689; c=relaxed/simple; bh=LhJuKA2MQMHo9RRWRHBlEbIB6tUr7IjpiYBDNYGMC8o=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=tQQ70Y2GWn2WaBI7A3CvY6iNz4+jW42M8hifpNZUJJmX7cnYKkIRK2SCgWwjid0Fbben1sWvWM9POzicq39RYYdWi4/+qN9g6XPNB2txo3iyZ3nXvwxXbHPH+o2SQhCjlCk14zWOktGZ2iIRMg4TICO7QcvubS3QmIH5dWGoaRQ= 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=Dc3TXP21; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=ThYE3Vsg; 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="Dc3TXP21"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="ThYE3Vsg" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5AM4lxjg1949831 for ; Sat, 22 Nov 2025 05:01:27 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=ba/8yXeN/Cp a8rrPju5CylcOxI0VUEDX1A3sMcUJl3s=; b=Dc3TXP21NbkyvgV+PkzEpPOOK5n ecjVxDk2J7irzED2nzofIBlVuFNetNI8hqGdBDK8WilN4ROdz25F5RTJ7LCXpnmi UHm93cuZCdsG1U+gGi6UjiSGYZDRxzHSRdr/R5VUkUVtf6pwCFgBsNFwwunXR0mg BDpRT1vPRycwFrRkmvYjlRmTvYhlOMsIoydM3xkgRQ+oLzzMADOWd3OR28PC4Z4Y qIwD/i4vudY42v25U7IRTIc66DZiMCaZE0I1Y/kA/WU4pQVdnbAA3Gyv0Fv9Ic7F +kjidklRtR5kPoID2AxCa2NvLKA2zplic3MhAdbpi7PjmTFyzNlgC7iHr0A== Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ak6ff80nd-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 22 Nov 2025 05:01:27 +0000 (GMT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-34566e62f16so3119685a91.1 for ; Fri, 21 Nov 2025 21:01:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1763787686; x=1764392486; 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=ba/8yXeN/Cpa8rrPju5CylcOxI0VUEDX1A3sMcUJl3s=; b=ThYE3Vsgt00g3fOgYyYqbWEZDMM6W5+pLl7uUwzf6RnjbBm0UbA7v0AOBk5gYu0Esm lH+VKHM4asWk3BsnWDqFjzFoq4jCIjhsVgxEYNYz2pObR6ySkL7wlXw2FhtTH7+b+g5o 4/Z5v/C25QK1YIAqn1LP99iMxfQfGqGXWWx8s337Ha2+MTz/1KSjqJJbOYh05ki2b1SP EpgP5oySQUzM3dd9AHi8nkW7np/Jtvwf0f0O5mKywCkmg7M/7g/y0UQowwDLZjtGCP7F kO70vnCvFy2QSTLlZo8+0+LVy+hFjhlXOngsJfO1fN9x/Fjt5x+PuqHmo3j/wafXVFMf XZuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763787686; x=1764392486; 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=ba/8yXeN/Cpa8rrPju5CylcOxI0VUEDX1A3sMcUJl3s=; b=ELhoNT0PlXlY3TNGknoDQWkp52akR9991wuxLAxz8pYQ79N4kVW5DYcSwlTRDowPQE zYTebBz9XLg9wKg+GmmW41NVOouoDDNd8tIefPUtZanzrbPiQCU+C/9NNhVJIjbrKoJv 3P0Fc2QaX6+bwyj0zIpJjjKv4VA2apfilV3Nd1NRrh85LCKNDSRehgZ2x+TLsK+5UfWg 37KdnD6oh+D3b/TIaZvzT+bzOpodGtHpwekOBi4y3DBUoEs/mhqEwd3JM+wbiQLFwaiR 60OhwWc5R7Qy9UPYdoMtjNcno06Ybe6Y1OZqutAWwh+EE+8UgFO1kOidacXDlCxJtxMJ 2wew== X-Forwarded-Encrypted: i=1; AJvYcCWdBtpQG07X468eU2BcWYqtD7GzYuxMmYNoMH1u3ynqJJJIR2wGyqRAjpaxp1e5/5G85oOAYEkHuJsrfhg=@vger.kernel.org X-Gm-Message-State: AOJu0YyFvsImscxKLPSqyESdckH38p3ZNGtA93swlxeZ420KCPTmc7n8 Ql5NEja61NfH6vvcrjcbQFGCADzt+bzfC+pzhh1D9pFz6yw4MZp9AUowYcPjHs4DPo4lJZil47a tt4Q3RffcnG19iHh6Moru444f1I3T3HzZsMYGxWiohgjMdCv7U7MCpX86zxdv5LrkmQM= X-Gm-Gg: ASbGncsWrnAKfFeq0r/77xss1/T1fFzWK8Aq7OF6XFKuUydC/qT7JDEGqb1Rn/nr9Wj h097Et+SGUEnOKUuOit+Xa/RQ+GSB/u/Kb8ewg9LsLgQf0PgbY7U4xSjKZIg1o74I0ccuwP4XYY ouFkmR8z+yDVSb3KOIXbDL9wul+rV70+jNZUjENFHDpKTPgV3kiEn1X+SiLaaoLasYefcaoAYMT fAiFBTwdFH4gSYZyJa6f9JFW5OuM8b7w2GZ8oXeWoQzItYFMCvn8+6obSZAa8Bk8RHVXWH/Oycm 1ypRn32+KThDS/lED/qkjBD/1indhfJ/EUT2Qfv5xaOd9G66itSIaUTGuSdtXTwSMz3Af9surzX +DuqGcVx6lJXkR5Su/+OgWRY+FXEHy6l7LyMHIUhEy/g= X-Received: by 2002:a17:902:ce01:b0:295:557e:746a with SMTP id d9443c01a7336-29b6c3e375emr51588245ad.13.1763787686051; Fri, 21 Nov 2025 21:01:26 -0800 (PST) X-Google-Smtp-Source: AGHT+IFZw33E42wJRtTKCTlFWOeZ0uPYN+DHueMghEVprymvWra29Qgc2v3IJ4BH37QAlsCh9kk2lA== X-Received: by 2002:a17:902:ce01:b0:295:557e:746a with SMTP id d9443c01a7336-29b6c3e375emr51587825ad.13.1763787685517; Fri, 21 Nov 2025 21:01:25 -0800 (PST) Received: from hu-ptalari-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-29b5b138c08sm70688725ad.25.2025.11.21.21.01.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Nov 2025 21:01:25 -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 Cc: psodagud@quicinc.com, djaggi@quicinc.com, quic_msavaliy@quicinc.com, quic_vtanuku@quicinc.com, quic_arandive@quicinc.com, quic_shazhuss@quicinc.com Subject: [PATCH v1 08/12] i2c: qcom-geni: Isolate serial engine setup Date: Sat, 22 Nov 2025 10:30:14 +0530 Message-Id: <20251122050018.283669-9-praveen.talari@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251122050018.283669-1-praveen.talari@oss.qualcomm.com> References: <20251122050018.283669-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-GUID: -hXiwvZlOwk_NNuKaVZmG0hBjIgON1cl X-Proofpoint-ORIG-GUID: -hXiwvZlOwk_NNuKaVZmG0hBjIgON1cl X-Authority-Analysis: v=2.4 cv=OsxCCi/t c=1 sm=1 tr=0 ts=692143a7 cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=6UeiqGixMTsA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=eRlIPBYRqdTMzyAxtVEA:9 a=rl5im9kqc5Lf4LNbBjHf:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIyMDAzNyBTYWx0ZWRfXwuAt4lGWBMwf oPCND9lD19RQ8RXuuLuFyxLIzecc3k+oAoXEq3iLNunVpG9eRvSiVKvsSYrZprNb8+VwsLThsQB uWYNDWTMja+b9HP1PCabGfA6QUc6G71IdnVunjnRlmr0xMvucaP7lqS990i9HJNN+l/UsWWU/VD qUCNaEYUTakDGnOlyzOQtF/l7tdv2ItaAFL7gUda1lXdccHFZE5CZ6P58MFDK1uimJnW/owXqwK lAaZFmywxO6xqqs3wnQmH5Ma70/W0FKV3RG3w8cw+99rXUDkd4tcmInvmPQny3AcGl9PbRbQ+tQ 62kpvy2F9TQ/yq4y/FPFVS7MJALXBaKiAYGYyVsQ2AUPCfhoA0GOTJzrWuZGAyG2Rz6f6DqWgzQ sm3/R6pl5vJJuAVvkFN5ureWROiGlw== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-11-22_01,2025-11-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 clxscore=1015 suspectscore=0 adultscore=0 bulkscore=0 malwarescore=0 phishscore=0 lowpriorityscore=0 impostorscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511220037 Content-Type: text/plain; charset="utf-8" Move serial engine configuration from probe to geni_i2c_init(). Relocating the serial engine setup to a dedicated initialization function enhances code clarity and simplifies future modifications. Signed-off-by: Praveen Talari --- drivers/i2c/busses/i2c-qcom-geni.c | 148 ++++++++++++++--------------- 1 file changed, 73 insertions(+), 75 deletions(-) diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qc= om-geni.c index 3a04016db2c3..4111afe2713e 100644 --- a/drivers/i2c/busses/i2c-qcom-geni.c +++ b/drivers/i2c/busses/i2c-qcom-geni.c @@ -976,10 +976,75 @@ 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; + 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; @@ -1059,79 +1124,19 @@ static int geni_i2c_probe(struct platform_device *p= dev) 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; - 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) { + dev_err(gi2c->se.dev, "I2C init failed :%d\n", ret); + pm_runtime_disable(gi2c->se.dev); + goto err_dma; + } + ret =3D i2c_add_adapter(&gi2c->adap); if (ret) { dev_err_probe(dev, ret, "Error adding i2c adapter\n"); @@ -1143,13 +1148,6 @@ static int geni_i2c_probe(struct platform_device *pd= ev) =20 return ret; =20 -err_resources: - geni_se_resources_off(&gi2c->se); -err_clk: - clk_disable_unprepare(gi2c->core_clk); - - return ret; - err_dma: release_gpi_dma(gi2c); =20 --=20 2.34.1