From nobody Sat Jun 27 10:07:10 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 D8E774A2E1E for ; Wed, 6 May 2026 16:51:37 +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=1778086301; cv=none; b=SOXmj8sVBKGXFgotodHod5Yu5bMKciSh6Nnk5RIY9V5cqT6P9fXXCLnwLQV7WxxLlnsDUI43AEutEpPHWMajrTknxSJdQoFk0tWNtllHbjJg7xpBlhM2c5VPedXXcvRcgYkKYlWqnlapgvR3MWuDp3ej2GszW9kypaH5BJeA1LI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778086301; c=relaxed/simple; bh=ZnNgSpO+rDe+yjBS+MiU11AXoaRoAFc5EaHISqIfggw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=N7YfJqDfD9AyHPyxDNWKdnQIJdqyr9bpsH0oS42vgMSPYavDN+UVl41RIw5+L/txZY8Ffdws7QGHfoU+gBGbzEyATRaoQusZmHYf4Tz5668V6aIlEzmjVOlNNnZy6Q6Z5RuFhiU6jeqMBtfy3phiaTm/9WPw4JBiVhET9ObgmNA= 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=kqrAhnF0; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=HqnQ3yrB; 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="kqrAhnF0"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="HqnQ3yrB" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 646D6MAJ1527783 for ; Wed, 6 May 2026 16:51:35 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= rkow89ZOZQzN7WmylajJzM+goCRPh33PqTU7SObuX2c=; b=kqrAhnF0ScuIkR5L efSWmJ5lD+OfBT0DLzrkol1gkwPGUjfiFIfuoBtruVBxlhsUPpvwuGF6T1GxnNfL a9QtdcvShTD9OpMbjaT+bIIH9OPF5iccLYtmes85/1bwnsZnzwDXW3++SOd/wfic eRMp2GRRzb5pWJHZM7VyNz3zVdG+qkyYl1/MhmDrImAcJCDDT4F8MI4IHw6GaI6/ moD9U4EeLbVn/tuhN6PqUpCIbYljIWBLS/7C+YJr0oniNt/iH6HeJVwUrzHU/RUS r+0rKf9U3nlymyjz4WDr6AqmoZhu9q8/ZwSMcFnUGC2b3vSmk+v55TSeCTqRirMf YSLQIA== Received: from mail-dl1-f70.google.com (mail-dl1-f70.google.com [74.125.82.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4e0128a8f1-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 06 May 2026 16:51:35 +0000 (GMT) Received: by mail-dl1-f70.google.com with SMTP id a92af1059eb24-1309f4ee9a3so3211567c88.1 for ; Wed, 06 May 2026 09:51:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1778086295; x=1778691095; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=rkow89ZOZQzN7WmylajJzM+goCRPh33PqTU7SObuX2c=; b=HqnQ3yrBzOnvpiydn5G6PTYHqk65PVcaKOyveV1MQpujxozohPbpO21RVCFtCkvVxp 6AYIULEGgviVMim7u1oRjta/2CWW3TVRPABe7cD3hC845v3zF/PGLdTkWhQcjNu49EgS LiTD7NZW4SFja8V7jqVEZ4ClDp+co965KGFOMG84sOR0GvcuSJof5ts24ddF0n37TE9K ktUmM8Y7tdvFF9GGiiig5D7lOjjpr69jRnCrIw3AmlUBkSsZqJsZyZsqBz2U0el9vacL CNe+jobMMIg8liwfG8DPJpB8lcqRip6KNBVow8u1bElMtwqYWQOb4n3eaBAEOkpHNWzA qaXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778086295; x=1778691095; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=rkow89ZOZQzN7WmylajJzM+goCRPh33PqTU7SObuX2c=; b=cJYIfd/WeA04likVM7JA1fcTOmtvQ1eUEqumfMkMwjlg7UezYmrxQ7cwg5wU9i7WH9 xdRnX5Xlcp9t8EWM43Xn00rSOPxPM6H825u+bIjbyhQF7IBTkj3j7cp/tjgubkw+EmDz Kvw2LGAVxLACRG2NjxaweMWFe43+GWPYg03w1jssr+U1sIres+kG9Xh/Ssk9TclSGxE2 LhqkZrUgjb8n1sWPhYVl6hNvLACCd4UCy91Is4/65/OVIuOZQQRqbh0kEOTPe2Jfx+MD JqulkbClUHvdOW8emE/fOT/CZcYjZGVL8Ej7wddOqYIoP/S02GTpTKWDq+TSttOX5oGb HA+g== X-Forwarded-Encrypted: i=1; AFNElJ/GVMOjJVBxYIGTbHhXxszgEnzH69RZVkzS5Y+xltjJ68hINqAb1vB7fbpt74OdMVUbMaoQH5saIJMIyjY=@vger.kernel.org X-Gm-Message-State: AOJu0YweFZaNPnSkTonOu6F9S/B8lKbXxsxAp8rOtqOnL6PCSbVpDim8 dEfW8UyGVxc9rhIsIpRCYfnQSsJobe1WR4Sny4DSjg44GWla55AWYwM8YyR2OjBf/ShM5dF0FPL Yx4kxpa7BlPc993iafOU+rK9X9VfAceMCpMaT8dCQzzTpClOxxPaYclT4UhPNaN3TCUs= X-Gm-Gg: AeBDiet12MMvDVuHf+SixXAVN/OQyqYmffgERHfLsAlpgrZA0/IjWBbtQfZKhQJtECc +0akS5OcwmE4LmBhio1VDpStS3fhc2IV+zZDXypntsYvHi+mG7s4i+VlbUPzPJuab8PDacLo3+c B9gREwwptncpjLGbaqHJwmOMRjpjfO0yRLQVbyW2e5ZYM7EH4r4VOzzGq4m6PvHbOM+gUPK5j4C tk8dwc1ONGPQApkTzJN3YyGWJlwQHvlK3XqAyx05hnjVuzi9h2/PYkY8FrFMLxOjwAP24H3n2yv SJkjNAoYqYjKeyghJnIwpB3AFSrSd/LIbcM8KhNtb54OAd8CAStrF29bwzwyXrO9lc/uF1IaObl L+AI7QtElcvCYuGzVjDgREeb7YYE9v7RQsBVJAhw3t4knSkjybi9lXX/daExUnI+vMPC00LJN4R C3Oo1SfW6upUk= X-Received: by 2002:a05:7022:fa9:b0:12f:1f67:e744 with SMTP id a92af1059eb24-1318eb518a7mr2029536c88.44.1778086294614; Wed, 06 May 2026 09:51:34 -0700 (PDT) X-Received: by 2002:a05:7022:fa9:b0:12f:1f67:e744 with SMTP id a92af1059eb24-1318eb518a7mr2029498c88.44.1778086293914; Wed, 06 May 2026 09:51:33 -0700 (PDT) Received: from hu-viveka-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-1320f16b189sm2696087c88.12.2026.05.06.09.51.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 May 2026 09:51:33 -0700 (PDT) From: Vivek Aknurwar Date: Wed, 06 May 2026 09:50:44 -0700 Subject: [PATCH v3 5/7] clk: qcom: Add Hawi TCSR clock controller driver 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: quoted-printable Message-Id: <20260506-clk-hawi-v3-5-530b538679f1@oss.qualcomm.com> References: <20260506-clk-hawi-v3-0-530b538679f1@oss.qualcomm.com> In-Reply-To: <20260506-clk-hawi-v3-0-530b538679f1@oss.qualcomm.com> To: Bjorn Andersson , Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Taniya Das , Taniya Das , Brian Masney Cc: linux-arm-msm@vger.kernel.org, linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Mike Tipton , Vivek Aknurwar , Konrad Dybcio X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1778086289; l=6233; i=vivek.aknurwar@oss.qualcomm.com; s=20260311; h=from:subject:message-id; bh=ZnNgSpO+rDe+yjBS+MiU11AXoaRoAFc5EaHISqIfggw=; b=44uPQNXToTXGtWBY/tywIrO8ReAZNvLxKXceYuJyPBmp2C1Q+wEJMvU0Bu4aGdrKk0kheMv32 m1r8amzszbVB/3sWciX5Bcm7pUsbUFIYzC21YgMBfJbT3UCr5UqQ6Ys X-Developer-Key: i=vivek.aknurwar@oss.qualcomm.com; a=ed25519; pk=WIVIbn3nJR9YRWNRyJiEbvpgoHhNyYrmVqMUXWqAIC0= X-Proofpoint-GUID: DaWL1kienFTfvxokvoNqIqGFel8rLs0h X-Proofpoint-ORIG-GUID: DaWL1kienFTfvxokvoNqIqGFel8rLs0h X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTA2MDE2NCBTYWx0ZWRfX1kIBWqNuDaTt ZqngaE8O2kEMMeoDfaWYJL1hlaGFb0RybuIfFjVvSnZA6RNky2sqPlNbeaDmFcwQUt1Xx1qZgAb xl3N+whM8sTSZWD1xTtABpHyXpmEFwq3XxlbydzwaoJmxtfgyj/EvEHN1m9ngR1afJaEwQnSFWq pl6qTEpesDn0SDptA7f7/jaa4Gx37qZIDlqMLKjFfCi0jMsrwkSpA993Jcu/ovMGqy8B1gpQJXu geMCmc1M6XnkucrPx4+CohgECTr3DA+66cS9La5Aoun2GCdpqMKCC2l4tOubsJcd9+BkUtv+TQq NauCzdFZ5RtdvmZxkDjq6PwtCMd+rNKbvZtvKvMcfvpVhat9QvMhuMXmZ0jVotCismZK6oD8AOo 23evnc2cgv8fi+F60FFIndbITvHMG4eQFWDpGvUg9hpXfq8fH7KdVDLVQC2pyyBaLRFe1Abi7KA ty/TXdGfYAymBq7Kaxw== X-Authority-Analysis: v=2.4 cv=A8xc+aWG c=1 sm=1 tr=0 ts=69fb7197 cx=c_pps a=SvEPeNj+VMjHSW//kvnxuw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=EUspDBNiAAAA:8 a=8uJ8VFNcneawzIKLpTsA:9 a=QEXdDO2ut3YA:10 a=Kq8ClHjjuc5pcCNDwlU0:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-06_01,2026-05-06_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 spamscore=0 phishscore=0 bulkscore=0 clxscore=1015 lowpriorityscore=0 malwarescore=0 adultscore=0 impostorscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000 definitions=main-2605060164 Add support for the TCSR clock controller found on the Qualcomm Hawi SoC. This controller provides reference clocks for various peripherals including PCIe, UFS, and USB. Reviewed-by: Taniya Das Reviewed-by: Konrad Dybcio Reviewed-by: Mike Tipton Signed-off-by: Vivek Aknurwar --- drivers/clk/qcom/Kconfig | 7 ++ drivers/clk/qcom/Makefile | 1 + drivers/clk/qcom/tcsrcc-hawi.c | 158 +++++++++++++++++++++++++++++++++++++= ++++ 3 files changed, 166 insertions(+) diff --git a/drivers/clk/qcom/Kconfig b/drivers/clk/qcom/Kconfig index df21ef5ffd68..86914bab79c9 100644 --- a/drivers/clk/qcom/Kconfig +++ b/drivers/clk/qcom/Kconfig @@ -296,6 +296,13 @@ config QCOM_CLK_RPMH Say Y if you want to support the clocks exposed by RPMh on platforms such as SDM845. =20 +config CLK_HAWI_TCSRCC + tristate "Hawi TCSR Clock Controller" + depends on ARM64 || COMPILE_TEST + help + Support for the TCSR clock controller on Hawi devices. + Say Y if you want to use peripheral devices such as PCIe, USB, UFS. + config APQ_GCC_8084 tristate "APQ8084 Global Clock Controller" depends on ARM || COMPILE_TEST diff --git a/drivers/clk/qcom/Makefile b/drivers/clk/qcom/Makefile index 89d07c35e4d9..282b1dbe2585 100644 --- a/drivers/clk/qcom/Makefile +++ b/drivers/clk/qcom/Makefile @@ -29,6 +29,7 @@ obj-$(CONFIG_CLK_GLYMUR_GCC) +=3D gcc-glymur.o obj-$(CONFIG_CLK_GLYMUR_GPUCC) +=3D gpucc-glymur.o gxclkctl-kaanapali.o obj-$(CONFIG_CLK_GLYMUR_TCSRCC) +=3D tcsrcc-glymur.o obj-$(CONFIG_CLK_GLYMUR_VIDEOCC) +=3D videocc-glymur.o +obj-$(CONFIG_CLK_HAWI_TCSRCC) +=3D tcsrcc-hawi.o obj-$(CONFIG_CLK_KAANAPALI_CAMCC) +=3D cambistmclkcc-kaanapali.o camcc-kaa= napali.o obj-$(CONFIG_CLK_KAANAPALI_DISPCC) +=3D dispcc-kaanapali.o obj-$(CONFIG_CLK_KAANAPALI_GCC) +=3D gcc-kaanapali.o diff --git a/drivers/clk/qcom/tcsrcc-hawi.c b/drivers/clk/qcom/tcsrcc-hawi.c new file mode 100644 index 000000000000..c942b0c8e09f --- /dev/null +++ b/drivers/clk/qcom/tcsrcc-hawi.c @@ -0,0 +1,158 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + */ + +#include +#include +#include +#include +#include +#include + +#include + +#include "clk-alpha-pll.h" +#include "clk-branch.h" +#include "clk-pll.h" +#include "clk-rcg.h" +#include "clk-regmap.h" +#include "clk-regmap-divider.h" +#include "clk-regmap-mux.h" +#include "common.h" +#include "reset.h" + +enum { + DT_BI_TCXO_PAD, +}; + +static struct clk_branch tcsr_pcie_0_clkref_en =3D { + .halt_reg =3D 0x4c, + .halt_check =3D BRANCH_HALT_DELAY, + .clkr =3D { + .enable_reg =3D 0x4c, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "tcsr_pcie_0_clkref_en", + .parent_data =3D &(const struct clk_parent_data){ + .index =3D DT_BI_TCXO_PAD, + }, + .num_parents =3D 1, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch tcsr_pcie_1_clkref_en =3D { + .halt_reg =3D 0x0, + .halt_check =3D BRANCH_HALT_DELAY, + .clkr =3D { + .enable_reg =3D 0x0, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "tcsr_pcie_1_clkref_en", + .parent_data =3D &(const struct clk_parent_data){ + .index =3D DT_BI_TCXO_PAD, + }, + .num_parents =3D 1, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch tcsr_ufs_clkref_en =3D { + .halt_reg =3D 0x10, + .halt_check =3D BRANCH_HALT_DELAY, + .clkr =3D { + .enable_reg =3D 0x10, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "tcsr_ufs_clkref_en", + .parent_data =3D &(const struct clk_parent_data){ + .index =3D DT_BI_TCXO_PAD, + }, + .num_parents =3D 1, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch tcsr_usb2_clkref_en =3D { + .halt_reg =3D 0x18, + .halt_check =3D BRANCH_HALT_DELAY, + .clkr =3D { + .enable_reg =3D 0x18, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "tcsr_usb2_clkref_en", + .parent_data =3D &(const struct clk_parent_data){ + .index =3D DT_BI_TCXO_PAD, + }, + .num_parents =3D 1, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch tcsr_usb3_clkref_en =3D { + .halt_reg =3D 0x8, + .halt_check =3D BRANCH_HALT_DELAY, + .clkr =3D { + .enable_reg =3D 0x8, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "tcsr_usb3_clkref_en", + .parent_data =3D &(const struct clk_parent_data){ + .index =3D DT_BI_TCXO_PAD, + }, + .num_parents =3D 1, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_regmap *tcsr_cc_hawi_clocks[] =3D { + [TCSR_PCIE_0_CLKREF_EN] =3D &tcsr_pcie_0_clkref_en.clkr, + [TCSR_PCIE_1_CLKREF_EN] =3D &tcsr_pcie_1_clkref_en.clkr, + [TCSR_UFS_CLKREF_EN] =3D &tcsr_ufs_clkref_en.clkr, + [TCSR_USB2_CLKREF_EN] =3D &tcsr_usb2_clkref_en.clkr, + [TCSR_USB3_CLKREF_EN] =3D &tcsr_usb3_clkref_en.clkr, +}; + +static const struct regmap_config tcsr_cc_hawi_regmap_config =3D { + .reg_bits =3D 32, + .reg_stride =3D 4, + .val_bits =3D 32, + .max_register =3D 0x4c, + .fast_io =3D true, +}; + +static const struct qcom_cc_desc tcsr_cc_hawi_desc =3D { + .config =3D &tcsr_cc_hawi_regmap_config, + .clks =3D tcsr_cc_hawi_clocks, + .num_clks =3D ARRAY_SIZE(tcsr_cc_hawi_clocks), +}; + +static const struct of_device_id tcsr_cc_hawi_match_table[] =3D { + { .compatible =3D "qcom,hawi-tcsrcc" }, + { } +}; +MODULE_DEVICE_TABLE(of, tcsr_cc_hawi_match_table); + +static int tcsr_cc_hawi_probe(struct platform_device *pdev) +{ + return qcom_cc_probe(pdev, &tcsr_cc_hawi_desc); +} + +static struct platform_driver tcsr_cc_hawi_driver =3D { + .probe =3D tcsr_cc_hawi_probe, + .driver =3D { + .name =3D "tcsrcc-hawi", + .of_match_table =3D tcsr_cc_hawi_match_table, + }, +}; + +module_platform_driver(tcsr_cc_hawi_driver); + +MODULE_DESCRIPTION("QTI TCSRCC HAWI Driver"); +MODULE_LICENSE("GPL"); --=20 2.34.1