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 71EAA3ED134 for ; Wed, 21 Jan 2026 07:47: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=1768981653; cv=none; b=KJYz1v+AKosDhdaQvpd+hJomGJql/1W0bpNy9dQiZviglDg+ySl9FWpQl5lXieAblCrTx3UFpyQe/UYncUNbQirdR+Vd4ILIssUwViKV/noizsUE7t5eJ5oKF8PG8Q+8yoU2dr15YWdcWfVspRTRI9NEnMbniGgFbOCXoIUuA1w= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768981653; c=relaxed/simple; bh=OsLO1copfDI7UNXhjs/8qoFniZASEhHK4kjvMKyUMCs=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=eIRZuvGMZiwBsr06tSLGH33ACzFUus5Ctpe9NAZn1uXs9zCYxcd4VmkQMTCbiCtgOKkYg5HSeLuXVA1qW2FilfDup7JERR5HrsWHrWRg3ymkte1Ebwphlt+1JtdPsvbmUYsHQ7KDlg/zyJd7ar+HmqcznjP3n+etxxXGQhFQYZE= 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=D80a4ULT; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=RtUtURxE; 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="D80a4ULT"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="RtUtURxE" 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 60L2LSt93256460 for ; Wed, 21 Jan 2026 07:47:30 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= dI6CvH/K4XzoB9yWVh3TUf4YLFRgJueU93szPqG5mj8=; b=D80a4ULTQyD3gadB WRRw+iTkowqWvuORR9hXNYy2tYZPG1LiPasmeVfFBrKBqLT7V5gpLarOx8XxtxF0 SEM4mS7SAC71ebvtNzyGls0Ss4E2wEhn1Xx/kM2fdtt8ErTkmR2lj+2fFvCp/zox 3KTWim0BNjAsqsmgiFgA8VCz94lbjtElh4K24jKMKczjQ8b0MTKCvUQfIV8Kguo9 yAiaQcUw8Njs2U5F1L52z86cNgjxGHu0D5xc4bZ1AiuznOcU0mrSUU1Bk6gryk9Y bimScwAH5ynHOfGJsVV35/yZymlOba3YO2U5tkzd58ur5FhmpPbtMYhaL2SFGvRt cBYhRA== Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bt6u7v6yj-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 21 Jan 2026 07:47:30 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2a79164b686so12077245ad.0 for ; Tue, 20 Jan 2026 23:47:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1768981649; x=1769586449; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=dI6CvH/K4XzoB9yWVh3TUf4YLFRgJueU93szPqG5mj8=; b=RtUtURxEXonLNUMyFbD9foOs5p8EJf4iadzM/i3sBQYuLFhV8dXusNti/28QRNfvuV opwMj5eHkLwFscNaOyI+nGR9Br246ntN7A15kSm8nTtJwh3fdirM0+nsSQT+JyQLLO6D xfrSOKmihk9Pi49icvdjUkYUQLXJQK5zE/ptlYj+341fLolmXHjWs48LbK9wAQ8So6jK uo2C2IFU0c23j/zx45hsPXU9eZe69oGbLbytn52VpBe72NC+sxZEhpE2vAZ8iz6rfLDK a4wp36uOTPQGhneFVeYMWKzI36MRE2wrjOEevHYgn3Bs704iVwXGKalMxal1nQu+pm4A r0GA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768981649; x=1769586449; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=dI6CvH/K4XzoB9yWVh3TUf4YLFRgJueU93szPqG5mj8=; b=purgeys1MMQQGFC81N6WnqzHBMENtYoggHkSkituylyGDKUdkPMZGZu7L67Mk//VM9 hWj/8feusRx5pyXdrOoF7PPFB2+V4fdu/PodVxwQQCfK7hIJ4kv7/+ImNNVzaioTC2gq WqmKZiKtsE+Oq387vGQIsci90FgG3gZaIrBAtG/Y7u1dWqF/35KWmGp8GwS+qRnfKoD8 6oomSkdMggsD/yS1lz8haFGXiJJLuFINbrBU+JtaNbMNoBk56B0eMWgydNLXKKxt60Ss SP31VDUBpRARcwpMn7Tqc09/MeRYax67/e5Yaz2vC4GucMv08vQ1Pyfimd87FX3hMriO Qzyw== X-Forwarded-Encrypted: i=1; AJvYcCWXBhfqm1W+HAxrlPktSGChJQiBWF8NEe/E6TtAHfENjubB8P+HFgeCy38NqDuj7FWHewdaOhX65K0jP14=@vger.kernel.org X-Gm-Message-State: AOJu0Yxc9IIBranV/yPUi3hg9b+0v6cP3P85nAlTnuxJfomPUP8uxm3L hrBeQEr4mPkzdfrrd3N8FD0kWdqXW/pzjT4GWlUWvDs5PWT8DNNf/M2sLOhiQ4NnU7YIAXxhCZP 0kL6dlWB4x8q+tCezF1b0/+x/6n9FwU2oNjiMRsb2SgRgN4B4mOz+ZP4+7FK47MwZACk= X-Gm-Gg: AZuq6aJGLJArngf6dvhlwYTWChVtc+NnQEHsaREejWJfyiWPY1pOr6Pt939gzP2mfSF +DxTiJQtYH5rjzul3NwjaimyRv9Fnn4tsp6kJLLC6APBUB+MlpUdFkjs2GQQrFAcL9ZlxDpbyTV 7XmG18AI9Et5b2dSFoF9bXk8R79SNP5sCuMZpvKqgG3ulcMBACaJftHyW80jOqJhr3IIBA2jue2 W7S0/daDJTJPE3ru/W9sRpGBk/f0/wLGmfgKzeuU91XLfscis2kwaih5nub+ghdCPZgX543yw4U Zxz4liejGUYwfkMFYU4wbX9TQUiS9CpgBBS2+nJQ6XAGYPmxTfVmaInQM7g0dauYoLXRLgq1trz dFcypaaM48lCJ7vgH6soY64+UCZg+278BeFUVNUJh/Q== X-Received: by 2002:a17:902:ea02:b0:2a2:f0cb:dfa2 with SMTP id d9443c01a7336-2a7698f854bmr42099875ad.13.1768981648935; Tue, 20 Jan 2026 23:47:28 -0800 (PST) X-Received: by 2002:a17:902:ea02:b0:2a2:f0cb:dfa2 with SMTP id d9443c01a7336-2a7698f854bmr42099645ad.13.1768981648421; Tue, 20 Jan 2026 23:47:28 -0800 (PST) Received: from [10.218.4.221] ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a7193dd533sm71941465ad.66.2026.01.20.23.47.23 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 20 Jan 2026 23:47:27 -0800 (PST) Message-ID: <93eec05a-588a-468d-885e-5432c8c26d0a@oss.qualcomm.com> Date: Wed, 21 Jan 2026 13:17:20 +0530 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 08/12] i2c: qcom-geni: Isolate serial engine setup To: Praveen Talari , Andi Shyti , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Mukesh Kumar Savaliya , Bjorn Andersson , Konrad Dybcio , linux-arm-msm@vger.kernel.org, linux-i2c@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, bryan.odonoghue@linaro.org, dmitry.baryshkov@oss.qualcomm.com, bjorn.andersson@oss.qualcomm.com Cc: prasad.sodagudi@oss.qualcomm.com, quic_vtanuku@quicinc.com, aniket.randive@oss.qualcomm.com, chandana.chiluveru@oss.qualcomm.com References: <20260112104722.591521-1-praveen.talari@oss.qualcomm.com> <20260112104722.591521-9-praveen.talari@oss.qualcomm.com> Content-Language: en-US From: Viken Dadhaniya In-Reply-To: <20260112104722.591521-9-praveen.talari@oss.qualcomm.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Authority-Analysis: v=2.4 cv=P/w3RyAu c=1 sm=1 tr=0 ts=69708492 cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=u-HHVrLI-TFpGRdm_AoA:9 a=QEXdDO2ut3YA:10 a=uG9DUKGECoFWVXl0Dc02:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTIxMDA2NCBTYWx0ZWRfX8dvsausS1cks AxRmHI5460PGAOQOVvKe+JXpcQMtU0H1nycmaUSbD+z9c0iUP7h9HSu72DtwLZKXz/dFG2WtmIX ZDzK2YJXTvKWgnM39FiFmFyc7Ig9dfL7G7Ot9QrYhGY+tTj88gp1FWSPUia2HIILlhxkiU+I6OR MrvkZgXGLnYUXNMyhanKmvMTtZEVYyepWNSbkxELIvErRt6h9OKu3MIohk+1kQ/qIxNgmcTIrQq 50drcmxuJXZQKhtok4Pw/4YIjeXbEQQk0GFzxOnGtwlTUf+VOE8focDY/Huo3jdiFLlHp6k9arb UvH7klzmfG/7pKcOGZeP/FCyczU07F7PN+zDHl41oHi2/i74yrhy+v/IsJozAzVxMk8F2KE0QCX hJUXE6fCcc9qlOpGNMDvgtMmu/G3aOeqDXAbDxfFFrvc/AYHFf4egFhD0T9HW9SgiCjjmazWPHU hIfEaij1La55zvn0rPg== X-Proofpoint-ORIG-GUID: Tp_o8Y7trzx2oVj7m_iS2ihGyeYnxhtu X-Proofpoint-GUID: Tp_o8Y7trzx2oVj7m_iS2ihGyeYnxhtu X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.20,FMLib:17.12.100.49 definitions=2026-01-21_01,2026-01-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 suspectscore=0 bulkscore=0 lowpriorityscore=0 adultscore=0 clxscore=1015 spamscore=0 phishscore=0 impostorscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2601210064 Minor comment. Acked-by: Viken Dadhaniya On 1/12/2026 4:17 PM, Praveen Talari wrote: > 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. > > Signed-off-by: Praveen Talari > --- > v1->v2: > Bjorn: > - Updated commit text. > --- > drivers/i2c/busses/i2c-qcom-geni.c | 154 ++++++++++++++--------------- > 1 file changed, 73 insertions(+), 81 deletions(-) > > diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qcom-geni.c > index 3a04016db2c3..58c32ffbd150 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; > } > > +static int geni_i2c_init(struct geni_i2c_dev *gi2c) > +{ > + const struct geni_i2c_desc *desc = NULL; > + u32 proto, tx_depth; > + bool fifo_disable; > + int ret; > + > + ret = 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 = geni_se_read_proto(&gi2c->se); > + if (proto == GENI_SE_INVALID_PROTO) { > + ret = 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 != GENI_SE_I2C) { > + ret = dev_err_probe(gi2c->se.dev, -ENXIO, "Invalid proto %d\n", proto); > + goto err; > + } > + > + desc = device_get_match_data(gi2c->se.dev); > + if (desc && desc->no_dma_support) > + fifo_disable = false; > + else > + fifo_disable = readl_relaxed(gi2c->se.base + GENI_IF_DISABLE_RO) & FIFO_IF_DISABLE; > + > + if (fifo_disable) { > + /* FIFO is disabled, so we can only use GPI DMA */ > + gi2c->gpi_mode = true; > + ret = setup_gpi_dma(gi2c); > + if (ret) > + goto err; > + > + dev_dbg(gi2c->se.dev, "Using GPI DMA mode for I2C\n"); > + } else { > + gi2c->gpi_mode = false; > + tx_depth = 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 = desc->tx_fifo_depth; > + > + if (!tx_depth) { > + ret = dev_err_probe(gi2c->se.dev, -EINVAL, > + "Invalid TX FIFO depth\n"); > + goto err; > + } > + > + gi2c->tx_wm = 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 = &pdev->dev; > const struct geni_i2c_desc *desc = NULL; > @@ -1059,100 +1124,27 @@ static int geni_i2c_probe(struct platform_device *pdev) > if (ret) > return ret; > > - ret = clk_prepare_enable(gi2c->core_clk); > - if (ret) > - return ret; > - > - ret = geni_se_resources_on(&gi2c->se); > - if (ret) { > - dev_err_probe(dev, ret, "Error turning on resources\n"); > - goto err_clk; > - } > - proto = geni_se_read_proto(&gi2c->se); > - if (proto == GENI_SE_INVALID_PROTO) { > - ret = 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 != GENI_SE_I2C) { > - ret = dev_err_probe(dev, -ENXIO, "Invalid proto %d\n", proto); > - goto err_resources; > - } > - > - if (desc && desc->no_dma_support) > - fifo_disable = false; > - else > - fifo_disable = readl_relaxed(gi2c->se.base + GENI_IF_DISABLE_RO) & FIFO_IF_DISABLE; > - > - if (fifo_disable) { > - /* FIFO is disabled, so we can only use GPI DMA */ > - gi2c->gpi_mode = true; > - ret = setup_gpi_dma(gi2c); > - if (ret) > - goto err_resources; > - > - dev_dbg(dev, "Using GPI DMA mode for I2C\n"); > - } else { > - gi2c->gpi_mode = false; > - tx_depth = 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 = desc->tx_fifo_depth; > - > - if (!tx_depth) { > - ret = dev_err_probe(dev, -EINVAL, > - "Invalid TX FIFO depth\n"); > - goto err_resources; > - } > - > - gi2c->tx_wm = 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 = geni_se_resources_off(&gi2c->se); > - if (ret) { > - dev_err_probe(dev, ret, "Error turning off resources\n"); > - goto err_dma; > - } > - > - ret = geni_icc_disable(&gi2c->se); > - if (ret) > - goto err_dma; > - > gi2c->suspended = 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); > > + ret = geni_i2c_init(gi2c); Double space. > + if (ret < 0) { > + pm_runtime_disable(gi2c->se.dev); > + return ret; > + } > + > ret = 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; > } > > dev_dbg(dev, "Geni-I2C adaptor successfully added\n"); > > - 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; > } >