From nobody Fri Jul 24 21:30:56 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 C84E042BC44 for ; Fri, 24 Jul 2026 10:55:22 +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=1784890524; cv=none; b=XirWzNbJMDfpSOxGgWEQ23Sswr7xQSBi8xM8/Uty8XAbbVpzKzxNU80BSIW7fihaHwQeHnF8mQj/ReYLwJ7fNB2Csb/vO1B5jAFY+61Ov8Lkbfn+m+GJ+lrCS/xkFnfmOk02k/afA2rB6+T7QyeQKSTF+Whtdv50Ajxr7EB2yg8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784890524; c=relaxed/simple; bh=DiqcmbipYKVPWMsm2gl/onsES4uB3Fu+pOEHra4ye/A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=haYM1cWr6cG12n5vbteX8OumeUnJyaOTw/zTnlk9YZ9svgV75we2Yvun1MWJ7qapMDKWqIQWxwt8MLS0TAAHuXxj5TkArhWvqmEsDDZS64KEEuMBR265CNzjLkPlAIi0XTMmZHgS8TOPWuAsodBicVDTLKTD+ECZ/Zl6xSEdPcw= 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=HP//NJjq; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=aGCtEMhN; 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="HP//NJjq"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="aGCtEMhN" Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66OADOP53889181 for ; Fri, 24 Jul 2026 10:55:22 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= Orh/7fz+n0VqAwrj2aIkOe7RBY8u8i+x8BBD5dRFB9c=; b=HP//NJjqbTFHLqVk h6KMqiNWNhtWgpz+Bsh9rpqRrJXhrrxS2UwLVNj2A2OipctnX7okStq58CC/z0Cz PRcvbc4ty95KPVNS4UbmQ6gk3Hom/KIV+Tz/hKjzaeHT5Oj1KE+CNPKBwP42vZic nvr/1GWaMUYblF+iug8SWnn9uZXRIBRQ/K88Nfmo8vowKZjwW722IbEyGt/lQl+B xDlA8fxSARlyxny95IzpF1FZbLbab35hTClRQHKZwMSiAtoM1DLEuCsHJhuMZFiI AVurIS7UD/AnEu/3MyxpTfs6grFPj+DRWoCP91eg/+72KnEoIFM89i68TNeJaYni mUZWQQ== Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fm5f68acv-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 24 Jul 2026 10:55:21 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2cc5faecf01so6797735ad.1 for ; Fri, 24 Jul 2026 03:55:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784890521; x=1785495321; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Orh/7fz+n0VqAwrj2aIkOe7RBY8u8i+x8BBD5dRFB9c=; b=aGCtEMhNxDWLnlJYfwUGFDeiwMUV/8pFpaqFnOTrJx2NAX61vCI3y82+ky5m1mhvtU CML0UMC8HUJ5JQzDZ6ieQInnGZrSz9rAmZw685WPQfXrINiAbLYqDiwgf9m5nZ7jz/rA bYSVEy28d3aTBtaVRj4f/1/L0dJHRxs5EgMu/MioMphXwPMKmGo5wB1Dibmau53/yEIx 1L2UyULqHwfaYx2ZvmcxspoAwJUf1aXkgpkgbPDKjtvlYfWgkDqW9Ksf1nVa6LqPlQxZ 5tdfd+fauKvVLOgbRAHXAdiWC/1nHKHVnHBUlyqLMIIlVNb12FZUozi4j+sal5tcQs7g MlfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784890521; x=1785495321; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Orh/7fz+n0VqAwrj2aIkOe7RBY8u8i+x8BBD5dRFB9c=; b=jm5ZZ2HIewS7Dr0OXhNzl+Rd9OJW1E8oN1406bQEjYffld3Lwy4uyW6TLeclj1Tl6/ 9kP51SuLsAUoqkzIYfB5yzmMTYrLwLrK1Vc5uy3Hr7KxvOqriVXKCNJ1IpHDowgqv3OH BX8qhtZVdYgQwChXXQA8CCBq6HZTZoo4v7BGEnBRYnVrxDcvatmlQqEBjIQiVG4YZOUt mOvJrVN0cgykprEtoEq3S2MRfm2V6uBC1DEXfmnN1LOu5iwF+56qmO0qvLlI5ejtf6bU gK8vHriNYFVb+D56LVuqsxYy0s9SJ/hwdJ4y84o0QEkEKHEZmKxBtdrbwrtAQMLSd1FZ gnvw== X-Forwarded-Encrypted: i=1; AHgh+RraIGemnMRPflMwEMVkMqm+WIcCZ/qf5WDZZ5BG0/QltgBR3sQy7fPoXnLALYSO/IjlaXpY/4y36BQtAGM=@vger.kernel.org X-Gm-Message-State: AOJu0Yybtknwf4hJnaqXnwnaA3Wk+KsjCmavVKHl0+C1JbSJImWOJoAw SCrRQAePZzRFz6NQD3w0PSx9ufgMmeNPfNl7SsD+0DmnFAjuks/4NcSzHTqdAMoo0lbtlSJcmOU h81brranGQwhkPvCmS+okoaHldXHkHhHyzUQFyN9zfFmGx1R320BautQLNg6LFLh/YiA= X-Gm-Gg: AR+sD10CN0dGC6MLcxtX6ckpjS932ZcqlOiEJZxn7UfHPbFFbTUE7kDicS8heA9bBiG 2/zmR2fWOQEfKfEgK5oD8pjry0AebK5mR7DU21XQsTuaFvLdRJ2bamU374RKyDZFpIAWomkGBLd P1W+YiCEoeis1wB/SZyDZh4cce9+Lumi14TlMbCvvfc6snhiC97bRkj7+gxsW9iWrQz9LPOLevc gNFy8FaJZBV2DBr3qOjRxPoArCbM/eyuS2/7KdIIh7nDWsI368RAo6y0f+Fj8bC0QXttfGyhXKq 7Wo+YD9iuHRuDnzyBbJor23ff09piI/re2MrRLHDyZLvbXf5ACaKGJjYpp+/zWEOzX1DGzVsrwu b8w3b0T314ulyNS9jE6x5ctjo X-Received: by 2002:a17:903:1b10:b0:2ca:6eca:492f with SMTP id d9443c01a7336-2cfa7435a36mr77050195ad.14.1784890521201; Fri, 24 Jul 2026 03:55:21 -0700 (PDT) X-Received: by 2002:a17:903:1b10:b0:2ca:6eca:492f with SMTP id d9443c01a7336-2cfa7435a36mr77049875ad.14.1784890520810; Fri, 24 Jul 2026 03:55:20 -0700 (PDT) Received: from hu-tdas-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2cf8f310644sm49314775ad.55.2026.07.24.03.55.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jul 2026 03:55:20 -0700 (PDT) From: Taniya Das Date: Fri, 24 Jul 2026 16:25:05 +0530 Subject: [PATCH v3 1/6] clk: qcom: gcc-nord: mark PCIe link clocks as critical 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: <20260724-nords_mm_v1-v3-1-32b45232217f@oss.qualcomm.com> References: <20260724-nords_mm_v1-v3-0-32b45232217f@oss.qualcomm.com> In-Reply-To: <20260724-nords_mm_v1-v3-0-32b45232217f@oss.qualcomm.com> To: Bjorn Andersson , Michael Turquette , Stephen Boyd , Brian Masney , Shawn Guo , Bartosz Golaszewski , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Neil Armstrong , Konrad Dybcio Cc: Ajit Pandey , Imran Shaik , Jagadeesh Kona , linux-arm-msm@vger.kernel.org, linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Taniya Das , Konrad Dybcio , Alexandre Mergnat X-Mailer: b4 0.15-dev-aa3f6 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzI0MDA5OSBTYWx0ZWRfX1hSnnIQQ0gfE a2PdZX7t2NxgdGbXlYzJMgTkP86XdyngBkywk0QBQtuQ7/Jqpvx7tjGEkaoVCyH80ClSdNdv9iU xooVt3s5UsY4QUdvLzzpeInlX/4DtsU= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzI0MDA5OSBTYWx0ZWRfX60RzEYaQWaGL Qa1MANJ2CDRn5TnoMstgnPjzOt7SX0Jzl/yPMmAsnksEEzkLb2qDwaPnTa3yYxCnW57qRy8M9Qb VORD8PE5leh/i2w5EsE0tlh64rlkY64ylypZZW3m881tDtqoT0RzYMTdS9rZrnmRnDRynhmeEu3 RGpRq8TOyaHf0KAWR9yDKEB4PbIPra1J1xzqVRg8N8HtZH0FhG5PM2M993BogmQA2MTpqhQ6XqN 2p7NxHw8uh2FRghn/9/gVtDhQ5XNiHvTCnZParEpxMO8S3GbHAaCiIFRx6mw8c10bAJYpw29Rov zn5Qz/F/to4baiMn3IowY2JXslUWgqSlfYR+x+jhLuJw8yNhJKomsWhtzFZc605fOApz5/sMIcs oLdmq1h8WAYq+p//1I3YCR9qbAuBzJW87Z+diY/vRqHeO0lyqHWCLqN5wFNNsFGPgfBdeXQwzsE 6rN+YhWOsKD3JO/gHIA== X-Proofpoint-GUID: ZWxOpjAcjZOcm9G-mecDJQWuH0XCCAp1 X-Authority-Analysis: v=2.4 cv=BNeDalQG c=1 sm=1 tr=0 ts=6a634499 cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=IpJZQVW2AAAA:8 a=CVX4TxgtaZIOJJKr5bQA:9 a=QEXdDO2ut3YA:10 a=GvdueXVYPmCkWapjIL-Q:22 a=IawgGOuG5U0WyFbmm1f5:22 X-Proofpoint-ORIG-GUID: ZWxOpjAcjZOcm9G-mecDJQWuH0XCCAp1 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-24_02,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 suspectscore=0 bulkscore=0 impostorscore=0 priorityscore=1501 adultscore=0 phishscore=0 lowpriorityscore=0 malwarescore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607240099 The PCIe link AHB and XO clocks must remain enabled for proper operation. Representing them as clk_branch instances allows them to be gated, which is undesirable. Remove their clk_branch definitions and register their CBCRs as critical clocks instead so they remain enabled. This matches the handling of similar always-on clocks in other Qualcomm clock drivers. Fixes: a4f780cd5c7a ("clk: qcom: gcc: Add multiple global clock controller = driver for Nord SoC") Reviewed-by: Konrad Dybcio Reviewed-by: Alexandre Mergnat Signed-off-by: Taniya Das --- drivers/clk/qcom/gcc-nord.c | 37 +++++++------------------------------ 1 file changed, 7 insertions(+), 30 deletions(-) diff --git a/drivers/clk/qcom/gcc-nord.c b/drivers/clk/qcom/gcc-nord.c index 8a6e429f264022d55fc5e59b9ec46ae1124f9ad8..299c616be325156ccd457b7b6ef= 45afef364ad4e 100644 --- a/drivers/clk/qcom/gcc-nord.c +++ b/drivers/clk/qcom/gcc-nord.c @@ -1185,34 +1185,6 @@ static struct clk_branch gcc_pcie_d_slv_q2a_axi_clk = =3D { }, }; =20 -static struct clk_branch gcc_pcie_link_ahb_clk =3D { - .halt_reg =3D 0x52464, - .halt_check =3D BRANCH_HALT, - .clkr =3D { - .enable_reg =3D 0x52464, - .enable_mask =3D BIT(0), - .hw.init =3D &(const struct clk_init_data) { - .name =3D "gcc_pcie_link_ahb_clk", - .ops =3D &clk_branch2_ops, - }, - }, -}; - -static struct clk_branch gcc_pcie_link_xo_clk =3D { - .halt_reg =3D 0x52468, - .halt_check =3D BRANCH_HALT_VOTED, - .hwcg_reg =3D 0x52468, - .hwcg_bit =3D 1, - .clkr =3D { - .enable_reg =3D 0x52468, - .enable_mask =3D BIT(0), - .hw.init =3D &(const struct clk_init_data) { - .name =3D "gcc_pcie_link_xo_clk", - .ops =3D &clk_branch2_ops, - }, - }, -}; - static struct clk_branch gcc_pcie_noc_async_bridge_clk =3D { .halt_reg =3D 0x52048, .halt_check =3D BRANCH_HALT_SKIP, @@ -1758,8 +1730,6 @@ static struct clk_regmap *gcc_nord_clocks[] =3D { [GCC_PCIE_D_PIPE_CLK_SRC] =3D &gcc_pcie_d_pipe_clk_src.clkr, [GCC_PCIE_D_SLV_AXI_CLK] =3D &gcc_pcie_d_slv_axi_clk.clkr, [GCC_PCIE_D_SLV_Q2A_AXI_CLK] =3D &gcc_pcie_d_slv_q2a_axi_clk.clkr, - [GCC_PCIE_LINK_AHB_CLK] =3D &gcc_pcie_link_ahb_clk.clkr, - [GCC_PCIE_LINK_XO_CLK] =3D &gcc_pcie_link_xo_clk.clkr, [GCC_PCIE_NOC_ASYNC_BRIDGE_CLK] =3D &gcc_pcie_noc_async_bridge_clk.clkr, [GCC_PCIE_NOC_CNOC_SF_QX_CLK] =3D &gcc_pcie_noc_cnoc_sf_qx_clk.clkr, [GCC_PCIE_NOC_M_CFG_CLK] =3D &gcc_pcie_noc_m_cfg_clk.clkr, @@ -1850,9 +1820,16 @@ static const struct regmap_config gcc_nord_regmap_co= nfig =3D { .fast_io =3D true, }; =20 +static const u32 gcc_nord_critical_cbcrs[] =3D { + 0x52464, /* GCC_PCIE_LINK_AHB_CLK */ + 0x52468, /* GCC_PCIE_LINK_XO_CLK */ +}; + static const struct qcom_cc_driver_data gcc_nord_driver_data =3D { .dfs_rcgs =3D gcc_nord_dfs_clocks, .num_dfs_rcgs =3D ARRAY_SIZE(gcc_nord_dfs_clocks), + .clk_cbcrs =3D gcc_nord_critical_cbcrs, + .num_clk_cbcrs =3D ARRAY_SIZE(gcc_nord_critical_cbcrs), }; =20 static const struct qcom_cc_desc gcc_nord_desc =3D { --=20 2.34.1 From nobody Fri Jul 24 21:30:56 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 E0A8F42BEB9 for ; Fri, 24 Jul 2026 10:55:28 +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=1784890530; cv=none; b=KqfjVpxMYlE9yuc27NXyOOxBuL79yi4J1fAWGMD3JONtnjgtYsG9DytPATnE7aN/oFH9Iaib1MghIpjdotaC1F0j/69nPtBPRIf0VEBIxdQ5rlSp1ZM4vr1943oU+ql0vncNVT5LwbKEFeMcNF5BQ7DIqm6WuIgWuyTjVHIIm5I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784890530; c=relaxed/simple; bh=6/SrIvu511Ew8yNShOQH0A6hfHtttk9gaoPCPnFUUf4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=c8FDFpkBBmy5JX4YaK/DXUSw5Em3p3IYiKowIKBDYT4AyRL1R0bxglDkmrRVszylFETryLEdtRTmUzArPs4Gl+7nL8vDVgqmr+QtX1gpuwumprpYLwPI/pmHe18k835zG2Ot1iI+SfyO8sNniEtRqdBG22CLHuGLM/bXcZp6fPs= 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=gw0sO2ap; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Bm9DubYW; 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="gw0sO2ap"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Bm9DubYW" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66OAE48j3032989 for ; Fri, 24 Jul 2026 10:55:28 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= sIBkVPY+a7xVOM4Mf5JfZsERfdUtWfBKPUsQLf4y5n4=; b=gw0sO2apOmjhL/hK XNE1gX0sK1SgPT6cWnLj9RmOEHChp8AyhpPfV5OTMDC+XwV7J9ES2+iCFxX/jjNc xGXPdSHB+Iin3ESZfjTvNHLWPOcfGw1XYWcxI5TDLiOApvuDOXCfaWKGi44U0Whs qQXETDMUnwg1qjnhC3orxOcB9q2WGSTfBkiWBrVmqYmeOWT4yvh0hXT5Mv+O1W1G r+0IL2Jq+4tWKpsyKWrBOKnG+HXL85xMZfO6TEDtkSczb2Snxe2Q8cYwFos3JCqA H+LA5QJFPqo5rn/Bkzuj/RnC2Hum4HBKW4fB8iJx1QUNslEombMQZF51HzMzPjjZ zIszGg== Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fkqa0bde3-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 24 Jul 2026 10:55:28 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2cacd6d37edso4950235ad.0 for ; Fri, 24 Jul 2026 03:55:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784890527; x=1785495327; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=sIBkVPY+a7xVOM4Mf5JfZsERfdUtWfBKPUsQLf4y5n4=; b=Bm9DubYW9QVinN7d97PqfdkYuELyeffVUruFK9e2kpJnTu3SLMxnkCMv1MunJy/kOY s1RxvQHnFRpfFZ1MlkHAt6oWmZ9PKro6KAqLvbdAuLDctdzdY3srKZLDLBf/8KotMSbB 38l2Z+Zo+/Q6jkjb0EMwJdF+EEn3gY2aLkONtN0AKclJ7pRvlPlaVmEXdIts4ZYRV9YI xXJZ4O+rR/zqQlLlANnD41XxgKRzzrI2NTEi6XnS1naV/LV8OwUJTbvmks1MvJtMtX47 OSY/WV41zED/TmC1CcejvAESXWRio4+0mJA0H48Tr4LGtm4zc2Q8SGLTgokLr9DuB6uv 2Opw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784890527; x=1785495327; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=sIBkVPY+a7xVOM4Mf5JfZsERfdUtWfBKPUsQLf4y5n4=; b=H/+h0yLm/LSGC/u82T0btDWmpLIdMKiTiYtEWPSmxVlksy82WOUAECTh5DAJYpkweb RHBR9ZuNdwUS779p6pKxVmdgvutOqYF2AtGpaDwGEKa7ZPHOc3Lu5fHInMTB3mC8ZciO 2JVrWNZkWKNV9hKvO8Z+8KuN16OzR5Chj69lXrPEL7Ty8rFJd91jkawkpFGDcMEXxT7+ I+I2RSqa57c9BpjeviDfKp0aw17NX0NnWThK7TtGZ0XLxC+XxbgupRvGeTPdhVTAFDQe FTpxGdhSuHnM1Z2wkek9gW7Rjpd5+hrG6CqNUsIxHLDbSDYYl4ZHpab1HQZO7Znfa+Fr S0Jg== X-Forwarded-Encrypted: i=1; AHgh+Rrf58f0dh8YRsdV20aXYcF6LPW4Zs2o7PCh7Wd9Z6m0jBaC3HR8rTKomVMZqjvYaVuVnsSTYJLiBrGEEX0=@vger.kernel.org X-Gm-Message-State: AOJu0Yx3rRhA1H6rurg+j0SgI7KdKBFuElVFr0qnpoi9IYlSkIrkuNny 2upxStHdpO4pSQ55SgHRlMAL2t7uP21S1ww3EpZpdyfCYJGExXCgj2kmiDkuX69+YNQLYHnQ0Cb w06znN4lrGgx7/RXdIjme9EoVsLrUAZjQcivD7RzRSTafuQ4utF+ZAmMfrrOUS6oZsJnLsnWx8E A= X-Gm-Gg: AR+sD10m5nH/shZpDFs65nrc2e6ErW+zwoMhrpBvwS18I9WNoWx+UW1D6XUll82jwgC po3xygzwyU6ue2bzkPD5FvLMfmATBTAHk9nZ6mZC1z4AXINisVF5YoDGinQmoYEz/ULaxC3i1xc bZtRyJ/xGqk7pNsqn/+eWsD57Lmb0CCKlH5Z4wJ8kHxn4XNC9PD5uAHAlQ4o2XkraaiQETgCkSa uzRbacgKWDvsYfBn2uZoi16Ah/VPutj9/m/xNgtm7przWPp3WsuX2iDxAEG399wJM/Vofg3L1SI AGKSLaVyEg3PEjewgkSlN0Dw4FB8dSn7pNULKLtfI3DYnONtzX2l32t0M8V+srMyDcCaSB1RUhR pLfoELzcVRzpRckMEiq0fz1Aw X-Received: by 2002:a17:903:2351:b0:2cf:906c:7d1 with SMTP id d9443c01a7336-2cfa71de7c3mr78543615ad.20.1784890527467; Fri, 24 Jul 2026 03:55:27 -0700 (PDT) X-Received: by 2002:a17:903:2351:b0:2cf:906c:7d1 with SMTP id d9443c01a7336-2cfa71de7c3mr78543505ad.20.1784890527067; Fri, 24 Jul 2026 03:55:27 -0700 (PDT) Received: from hu-tdas-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2cf8f310644sm49314775ad.55.2026.07.24.03.55.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jul 2026 03:55:26 -0700 (PDT) From: Taniya Das Date: Fri, 24 Jul 2026 16:25:06 +0530 Subject: [PATCH v3 2/6] clk: qcom: negcc-nord: keep GPU2 CFG clock enabled via critical CBCR 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: <20260724-nords_mm_v1-v3-2-32b45232217f@oss.qualcomm.com> References: <20260724-nords_mm_v1-v3-0-32b45232217f@oss.qualcomm.com> In-Reply-To: <20260724-nords_mm_v1-v3-0-32b45232217f@oss.qualcomm.com> To: Bjorn Andersson , Michael Turquette , Stephen Boyd , Brian Masney , Shawn Guo , Bartosz Golaszewski , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Neil Armstrong , Konrad Dybcio Cc: Ajit Pandey , Imran Shaik , Jagadeesh Kona , linux-arm-msm@vger.kernel.org, linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Taniya Das , Konrad Dybcio , Alexandre Mergnat X-Mailer: b4 0.15-dev-aa3f6 X-Proofpoint-ORIG-GUID: 3PmAZj3bhOq2Q-wxpf4UCC4sBXDnBvZ7 X-Proofpoint-GUID: 3PmAZj3bhOq2Q-wxpf4UCC4sBXDnBvZ7 X-Authority-Analysis: v=2.4 cv=e/k2j6p/ c=1 sm=1 tr=0 ts=6a6344a0 cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=IpJZQVW2AAAA:8 a=mEVXwad1GdBeBoogAroA:9 a=QEXdDO2ut3YA:10 a=1OuFwYUASf3TG4hYMiVC:22 a=IawgGOuG5U0WyFbmm1f5:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzI0MDA5OSBTYWx0ZWRfXzq2TN1/ujgLJ fS9CrGSgP9IbRNdvA1C8Ar6Xzui8PXoPlCJkYGPMLqAHnupPsUHRn8pKuYOvfHAzWzde8+rwfSU AUgGb8pZB8ZX0QKxFMF46Z/i9d9ADD0GeUjcb9fg0mHBpeySC0YhlPQL14PgodCJg88A/5VnfHr ekLRxppY1+RjeXoohX02F2h8BSGd57QqUo4kXKSJjnb9Kk4mPCmeU0mDoNx/rUYqVqQogiBXab0 UuwDv4nUgnZJCYHP5yMN4PCk76QymkdrG70uYXlMY08ASsoAbxb/imD1YVBULvsab5uQQfxAxBr Og/U7ORI8tiOYFVD6rx4BTOxhOVxmu9XyTqK9V6LWbFIHdcbD3ho0hFzDmmEfBEu5QfSJWlt+Lt cF4YtfVprMqYkTTuolUAcOYc1W4ql8jrZHzulmNSUFNVQTsCvtOaasBVL10GNLtD1jh9JysPx1L Ewuy2/kJTThV8ryH2jg== X-Proofpoint-Spam-Info: AW1haW4tMjYwNzI0MDA5OSBTYWx0ZWRfX84H9l5AVfJU9 WbQ3JZB31FUrG9M5xcCfI3nb8XnPHDRjZm/sxWE4iZ/MTpA8cCfeWV1VCcR+HxSoRj8MvQXZhfG NPQmsVjtGpSrEY00aYd5MP1vO0EGy+c= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-24_02,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 priorityscore=1501 lowpriorityscore=0 impostorscore=0 malwarescore=0 clxscore=1015 spamscore=0 phishscore=0 bulkscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607240099 The GPU2 CFG clock must remain enabled for correct operation and should not be exposed as a controllable clk_branch. Remove the clk_branch and mark its CBCR as critical instead to prevent unintended gating. This follows the same approach as 'nw_gcc_gpu_cfg_ahb_clk' and aligns with other always-on clocks in Qualcomm CC drivers. Fixes: a4f780cd5c7a ("clk: qcom: gcc: Add multiple global clock controller = driver for Nord SoC") Reviewed-by: Konrad Dybcio Reviewed-by: Alexandre Mergnat Signed-off-by: Taniya Das --- drivers/clk/qcom/negcc-nord.c | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/drivers/clk/qcom/negcc-nord.c b/drivers/clk/qcom/negcc-nord.c index 2e653ef0fe0e304f09ed354d5578fdbed9151d20..bc4d478d5606ad7478431573f98= b62f6f9b7d9fb 100644 --- a/drivers/clk/qcom/negcc-nord.c +++ b/drivers/clk/qcom/negcc-nord.c @@ -952,21 +952,6 @@ static struct clk_branch ne_gcc_gp2_clk =3D { }, }; =20 -static struct clk_branch ne_gcc_gpu_2_cfg_clk =3D { - .halt_reg =3D 0x34004, - .halt_check =3D BRANCH_HALT_VOTED, - .hwcg_reg =3D 0x34004, - .hwcg_bit =3D 1, - .clkr =3D { - .enable_reg =3D 0x34004, - .enable_mask =3D BIT(0), - .hw.init =3D &(const struct clk_init_data) { - .name =3D "ne_gcc_gpu_2_cfg_clk", - .ops =3D &clk_branch2_ops, - }, - }, -}; - static struct clk_branch ne_gcc_gpu_2_gpll0_clk_src =3D { .halt_check =3D BRANCH_HALT_DELAY, .clkr =3D { @@ -1817,7 +1802,6 @@ static struct clk_regmap *ne_gcc_nord_clocks[] =3D { [NE_GCC_GPLL0] =3D &ne_gcc_gpll0.clkr, [NE_GCC_GPLL0_OUT_EVEN] =3D &ne_gcc_gpll0_out_even.clkr, [NE_GCC_GPLL2] =3D &ne_gcc_gpll2.clkr, - [NE_GCC_GPU_2_CFG_CLK] =3D &ne_gcc_gpu_2_cfg_clk.clkr, [NE_GCC_GPU_2_GPLL0_CLK_SRC] =3D &ne_gcc_gpu_2_gpll0_clk_src.clkr, [NE_GCC_GPU_2_GPLL0_DIV_CLK_SRC] =3D &ne_gcc_gpu_2_gpll0_div_clk_src.clkr, [NE_GCC_GPU_2_HSCNOC_GFX_CLK] =3D &ne_gcc_gpu_2_hscnoc_gfx_clk.clkr, @@ -1946,10 +1930,16 @@ static void clk_nord_regs_configure(struct device *= dev, struct regmap *regmap) qcom_branch_set_force_mem_core(regmap, ne_gcc_ufs_phy_axi_clk, true); } =20 +static const u32 ne_gcc_nord_critical_cbcrs[] =3D { + 0x34004, /* NE_GCC_GPU_2_CFG_CLK */ +}; + static const struct qcom_cc_driver_data ne_gcc_nord_driver_data =3D { .dfs_rcgs =3D ne_gcc_nord_dfs_clocks, .num_dfs_rcgs =3D ARRAY_SIZE(ne_gcc_nord_dfs_clocks), .clk_regs_configure =3D clk_nord_regs_configure, + .clk_cbcrs =3D ne_gcc_nord_critical_cbcrs, + .num_clk_cbcrs =3D ARRAY_SIZE(ne_gcc_nord_critical_cbcrs), }; =20 static const struct qcom_cc_desc ne_gcc_nord_desc =3D { --=20 2.34.1 From nobody Fri Jul 24 21:30:56 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 97A3F42AFA7 for ; Fri, 24 Jul 2026 10:55:35 +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=1784890537; cv=none; b=RiupYXTv7EOjVc+JfrYROSHpFQk7wAEGQonflOsn0/s0vZSpMf3/bjUec9EaQEcqrqGcX+KOiPF0R51hO5ofNkRA8q3Q2VdrGhtefpTggfO3HftaZ3ObB1U80iRi2ptM/jLa9cBURKHAW+m6E2LJr44tDkVM2GKrhg+mjs6KGuI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784890537; c=relaxed/simple; bh=GrYP3ZqYO0jYWeOo85HrswVqxCeLX0OVmXBIbiit/Q0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Kxa6CVwP54NTPbhzACq0+TjL5kpX2mQhfxt0DHx7ZVKQI8Vhwyj2P9+Ab43AnIyfA++wj0LL2kilz1yC/NOTP1mjTKTbwtL89AVgsQkUwUEAfZnODyM7W8fDLT1UclTyH1AHCgn/yKhcPqYVx0JM1VUKFr7D3tqLdSvCsFVOUSs= 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=XInfHPHg; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=H/CTKQEB; 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="XInfHPHg"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="H/CTKQEB" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66OADeBC2629873 for ; Fri, 24 Jul 2026 10:55:34 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= RoOY8YH4kuwLEUEm8Fg8BmxI8udeSnUu1861YN530P0=; b=XInfHPHgoYIQHsGr UfYn0mfVKDJlK0QZqTm1ei27j5CqONzDYie0Ai5zmsCPJN1cJvvonVlHiE3Twddp kgQdXENG5QoqlYQ5YwB1PPcHX1EJaChQiSNhqLv5eoW0E28m8hkAsXeutrlQa2Se Fxuy+Tw3s+m0EbCE9nBmNIooj/hPN9T6jzP0dE7e6+ULMBvdnUQYVVBc0B1YnI58 2wi30BzkolQh4kiQ1nxUb4WL4MiUUHlj6CiuWDbG6pEsjj/IaSInmao/+K8uHise 21QcUie7RFGIfzSuW6Kj6B6YFQcuNv1rH1EHp/kR1lBDqn9ZPELQ5DOacV/OpEZK yp5xLA== Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fm1em98ur-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 24 Jul 2026 10:55:34 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2cce870a060so6335765ad.2 for ; Fri, 24 Jul 2026 03:55:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784890534; x=1785495334; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=RoOY8YH4kuwLEUEm8Fg8BmxI8udeSnUu1861YN530P0=; b=H/CTKQEBRZdXcYYInBNdaqxPwDwg7twRqlyC5EnB72t2duMNd+buCfxoc+RHzN+TUS VaL43v83uF3tdCuW9WI7JfdidHR0vfxztnfNESSDYsv4Dc37/HuN66QqK19PCdoBDZhG D/M9oTGk1Fn27GASLlkq9bfH+ZBcPs//OP0Zf7eC6ldK0qLTB4f05esEZcJmZ65G+tVP 4qvgdCAPvmTKdvGgNihdGxyE4G0Q8BLLD+CHqI5/LtLjb9HO8kRehKIaZStyYewX/cdt nEOlWGN8e8VdPjSVWnR/0na3XCFiEQbkgagCePXNcmDsru5vZqz0zIzITiMkod+TTzFk m9Iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784890534; x=1785495334; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=RoOY8YH4kuwLEUEm8Fg8BmxI8udeSnUu1861YN530P0=; b=CNW77NJsiK3zrnVTef4FIGTxGIc0Sg80Q+N9f/BjgGchJz5tteD2tUVDa+HySa79Ut +JBMB/eg9Mx6ANyX+fTO84ubaTgpKz4AOwDyPdUc7hT2xTlLfeufFtAZ3UJib/D7Rh0n 7xnFF9dPAfphDKnqBURgZMiIjEpC1tlCso9ywNhyjNuj21Q6qAAwerDAZEB13nuWxZPg YKghCK8tUNDZK5OMjN8BLxGtgLumyFN+b+WEMPcII4+J9Iha1sUHud2GOUQZnLv+OfOd Q4lSlqqqG1LHuBq382TSiINWrdLdnU0Vn2P6ejKbOMCAjrTaatluzjydBOmUxZt/CFx+ rlpA== X-Forwarded-Encrypted: i=1; AHgh+RpBFSrc3sC3zobpfUPtBANQdF2+02QavwmxGbdq1fxSE9sch5yRlJ0ovdKsaMbRFkBUM22ycWlAgaN8kAw=@vger.kernel.org X-Gm-Message-State: AOJu0YyPo+eFB3PHRZSOnOn2xcse1z7AZcsUIXH4H+ahILTCJ2xU5SHV guwUFxD0IFxgtU2dK0JXtzckHhf0zSoFuhxii1PzXmcjrC0eGAgoU0gqZ7gY3PHpdfw1C+oCM7R ytqp0/cVNi48A3cBjWADhwBb09BRld/f2fS0rVgQv0xxhVTijyebBHA2uxRapLAvzGs8= X-Gm-Gg: AR+sD10yhfZlvP8Rb1Qb1HRCydic/kNXXYRuxumAi+VMk7UP0MxlltPmQZb6G0PAoF5 g7j8W4FY0vn2G5fzbbPWgKqvW+YVP2lrxlYW1FlusQ/wYtdW00i80ceNDJ/5yjcD+dG1NJjyYup Wbui1DSU5EhH3MjJPDGsaWJvTI9TOQsc1paW1mivokdB2NUwu0i/4k2Wz1munIUC+QqVXrhc/x7 gBpYlIExa2fTbnZnBFzG9nxsAMWDkrXTq1TbWUfnaZmpSWgVAFzVjZLLSzorgYfhIaMF9Q+/lEU oTxIX3WRvqxkfrRXU9Idx7tUnXOJwgTVMQzx/VN9ZoW9amrX1FpIezzZiRIqV9NjcS2sOFOtd41 p8KyvtQ4gHESOHzTByHg3xwR7 X-Received: by 2002:a17:902:f68b:b0:2ca:bba:b35c with SMTP id d9443c01a7336-2cfa6c51b55mr74231555ad.31.1784890533765; Fri, 24 Jul 2026 03:55:33 -0700 (PDT) X-Received: by 2002:a17:902:f68b:b0:2ca:bba:b35c with SMTP id d9443c01a7336-2cfa6c51b55mr74231265ad.31.1784890533312; Fri, 24 Jul 2026 03:55:33 -0700 (PDT) Received: from hu-tdas-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2cf8f310644sm49314775ad.55.2026.07.24.03.55.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jul 2026 03:55:32 -0700 (PDT) From: Taniya Das Date: Fri, 24 Jul 2026 16:25:07 +0530 Subject: [PATCH v3 3/6] dt-bindings: clock: qcom: Document Nord display clock controller 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: <20260724-nords_mm_v1-v3-3-32b45232217f@oss.qualcomm.com> References: <20260724-nords_mm_v1-v3-0-32b45232217f@oss.qualcomm.com> In-Reply-To: <20260724-nords_mm_v1-v3-0-32b45232217f@oss.qualcomm.com> To: Bjorn Andersson , Michael Turquette , Stephen Boyd , Brian Masney , Shawn Guo , Bartosz Golaszewski , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Neil Armstrong , Konrad Dybcio Cc: Ajit Pandey , Imran Shaik , Jagadeesh Kona , linux-arm-msm@vger.kernel.org, linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Taniya Das , Alexandre Mergnat , Krzysztof Kozlowski X-Mailer: b4 0.15-dev-aa3f6 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzI0MDA5OSBTYWx0ZWRfX9Rqq9yU0H3da 24dnPUm6IHQv/GW4FQH3MyGwCoVT7r+yrxVTP+SkespUFlezQFmFNa2oduthsyV8KR/5WehRMcJ BAg+81OGOV1UZhQW6YSEz6QbKylJCRs= X-Authority-Analysis: v=2.4 cv=BIODalQG c=1 sm=1 tr=0 ts=6a6344a6 cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=IpJZQVW2AAAA:8 a=EUspDBNiAAAA:8 a=IMvGRSTzsc0YZ_F2ARAA:9 a=QEXdDO2ut3YA:10 a=1OuFwYUASf3TG4hYMiVC:22 a=IawgGOuG5U0WyFbmm1f5:22 X-Proofpoint-ORIG-GUID: Bs4PooIOf3iSpOmy98NBqB0IIAUQ8UGb X-Proofpoint-GUID: Bs4PooIOf3iSpOmy98NBqB0IIAUQ8UGb X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzI0MDA5OSBTYWx0ZWRfX6YHlGJwQJDR1 VDovmS5URvvkYRDXadi24aUhVj+76NLR30AevHYZk/7v++AdU20O7/KXG1kFsw0uLs+odJqx4bt 4gPJzt8pJPBJnaP7R2u77fCync9YsXehyApSSNSRxJzbtNSOhClnmFb0R6YuqEPVhPD5YAv9JSr WNHBRbsHrsvEp6f6sqS4qG9LgiWF+SgnrQ8OHQhf2RX4Xb9GXYOCSQsVhmZewSYsiMPEADlrReO EPFoRIrdSRSw2bNiwxcQ6Skr+zYrIp2Npth32OiIP2D5eNnGlAUoJUvPA+VlN9pVktwh020+xRT /O0RNZQEZr6qgdjgmFHVRgzyyDyVex/K0tVgFGwXiZiBfPGGXd8YL5pSI7ao8pDu0DdSq27pbOo cL80xhARVjl3P324sbscMEqxQHhdPkb8cCcsh/ewPSV9EGBE2pNrTXAcya1X7L4AazOGl4snaK+ fZaOamqgiSqIIWgNpYg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-24_02,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 priorityscore=1501 malwarescore=0 bulkscore=0 impostorscore=0 phishscore=0 clxscore=1015 lowpriorityscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607240099 Add Device Tree binding documentation for the display clock controller on the Qualcomm Nord SoC. The Nord platform contains two instances of the display clock controller, DISPCC_0 and DISPCC_1. Update the bindings to include compatible strings for both instances. Reviewed-by: Alexandre Mergnat Reviewed-by: Krzysztof Kozlowski Reviewed-by: Shawn Guo Signed-off-by: Taniya Das --- .../bindings/clock/qcom,sm8550-dispcc.yaml | 3 + include/dt-bindings/clock/qcom,nord-dispcc.h | 115 +++++++++++++++++= ++++ 2 files changed, 118 insertions(+) diff --git a/Documentation/devicetree/bindings/clock/qcom,sm8550-dispcc.yam= l b/Documentation/devicetree/bindings/clock/qcom,sm8550-dispcc.yaml index 591ce91b8d54dd6f78a66d029882bcd94b53beda..61f58fbd5bd21c7f36081e7ae06= 6176fd19a5811 100644 --- a/Documentation/devicetree/bindings/clock/qcom,sm8550-dispcc.yaml +++ b/Documentation/devicetree/bindings/clock/qcom,sm8550-dispcc.yaml @@ -16,6 +16,7 @@ description: | =20 See also: - include/dt-bindings/clock/qcom,kaanapali-dispcc.h + - include/dt-bindings/clock/qcom,nord-dispcc.h - include/dt-bindings/clock/qcom,sm8550-dispcc.h - include/dt-bindings/clock/qcom,sm8650-dispcc.h - include/dt-bindings/clock/qcom,sm8750-dispcc.h @@ -25,6 +26,8 @@ properties: compatible: enum: - qcom,kaanapali-dispcc + - qcom,nord-dispcc0 + - qcom,nord-dispcc1 - qcom,sar2130p-dispcc - qcom,sm8550-dispcc - qcom,sm8650-dispcc diff --git a/include/dt-bindings/clock/qcom,nord-dispcc.h b/include/dt-bind= ings/clock/qcom,nord-dispcc.h new file mode 100644 index 0000000000000000000000000000000000000000..219facbbda106488d3f00391c9e= 14cb584fd12ff --- /dev/null +++ b/include/dt-bindings/clock/qcom,nord-dispcc.h @@ -0,0 +1,115 @@ +/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + */ + +#ifndef _DT_BINDINGS_CLK_QCOM_DISP_CC_NORD_H +#define _DT_BINDINGS_CLK_QCOM_DISP_CC_NORD_H + +/* DISP_CC_0 and DISP_CC_1 clocks */ +#define MDSS_DISP_CC_ACMU_CLK 0 +#define MDSS_DISP_CC_MDSS_ACCU_SHIFT_CLK 1 +#define MDSS_DISP_CC_MDSS_AHB1_CLK 2 +#define MDSS_DISP_CC_MDSS_AHB_CLK 3 +#define MDSS_DISP_CC_MDSS_AHB_CLK_SRC 4 +#define MDSS_DISP_CC_MDSS_BYTE0_CLK 5 +#define MDSS_DISP_CC_MDSS_BYTE0_CLK_SRC 6 +#define MDSS_DISP_CC_MDSS_BYTE0_DIV_CLK_SRC 7 +#define MDSS_DISP_CC_MDSS_BYTE0_INTF_CLK 8 +#define MDSS_DISP_CC_MDSS_BYTE1_CLK 9 +#define MDSS_DISP_CC_MDSS_BYTE1_CLK_SRC 10 +#define MDSS_DISP_CC_MDSS_BYTE1_DIV_CLK_SRC 11 +#define MDSS_DISP_CC_MDSS_BYTE1_INTF_CLK 12 +#define MDSS_DISP_CC_MDSS_DPTX0_AUX_CLK 13 +#define MDSS_DISP_CC_MDSS_DPTX0_AUX_CLK_SRC 14 +#define MDSS_DISP_CC_MDSS_DPTX0_CRYPTO_CLK 15 +#define MDSS_DISP_CC_MDSS_DPTX0_LINK_CLK 16 +#define MDSS_DISP_CC_MDSS_DPTX0_LINK_CLK_SRC 17 +#define MDSS_DISP_CC_MDSS_DPTX0_LINK_DIV_CLK_SRC 18 +#define MDSS_DISP_CC_MDSS_DPTX0_LINK_INTF_CLK 19 +#define MDSS_DISP_CC_MDSS_DPTX0_PIXEL0_CLK 20 +#define MDSS_DISP_CC_MDSS_DPTX0_PIXEL0_CLK_SRC 21 +#define MDSS_DISP_CC_MDSS_DPTX0_PIXEL1_CLK 22 +#define MDSS_DISP_CC_MDSS_DPTX0_PIXEL1_CLK_SRC 23 +#define MDSS_DISP_CC_MDSS_DPTX0_PIXEL2_CLK 24 +#define MDSS_DISP_CC_MDSS_DPTX0_PIXEL2_CLK_SRC 25 +#define MDSS_DISP_CC_MDSS_DPTX0_PIXEL3_CLK 26 +#define MDSS_DISP_CC_MDSS_DPTX0_PIXEL3_CLK_SRC 27 +#define MDSS_DISP_CC_MDSS_DPTX0_USB_ROUTER_LINK_INTF_CLK 28 +#define MDSS_DISP_CC_MDSS_DPTX1_AUX_CLK 29 +#define MDSS_DISP_CC_MDSS_DPTX1_AUX_CLK_SRC 30 +#define MDSS_DISP_CC_MDSS_DPTX1_CRYPTO_CLK 31 +#define MDSS_DISP_CC_MDSS_DPTX1_LINK_CLK 32 +#define MDSS_DISP_CC_MDSS_DPTX1_LINK_CLK_SRC 33 +#define MDSS_DISP_CC_MDSS_DPTX1_LINK_DIV_CLK_SRC 34 +#define MDSS_DISP_CC_MDSS_DPTX1_LINK_INTF_CLK 35 +#define MDSS_DISP_CC_MDSS_DPTX1_PIXEL0_CLK 36 +#define MDSS_DISP_CC_MDSS_DPTX1_PIXEL0_CLK_SRC 37 +#define MDSS_DISP_CC_MDSS_DPTX1_PIXEL1_CLK 38 +#define MDSS_DISP_CC_MDSS_DPTX1_PIXEL1_CLK_SRC 39 +#define MDSS_DISP_CC_MDSS_DPTX1_PIXEL2_CLK 40 +#define MDSS_DISP_CC_MDSS_DPTX1_PIXEL2_CLK_SRC 41 +#define MDSS_DISP_CC_MDSS_DPTX1_PIXEL3_CLK 42 +#define MDSS_DISP_CC_MDSS_DPTX1_PIXEL3_CLK_SRC 43 +#define MDSS_DISP_CC_MDSS_DPTX1_USB_ROUTER_LINK_INTF_CLK 44 +#define MDSS_DISP_CC_MDSS_DPTX2_AUX_CLK 45 +#define MDSS_DISP_CC_MDSS_DPTX2_AUX_CLK_SRC 46 +#define MDSS_DISP_CC_MDSS_DPTX2_CRYPTO_CLK 47 +#define MDSS_DISP_CC_MDSS_DPTX2_LINK_CLK 48 +#define MDSS_DISP_CC_MDSS_DPTX2_LINK_CLK_SRC 49 +#define MDSS_DISP_CC_MDSS_DPTX2_LINK_DIV_CLK_SRC 50 +#define MDSS_DISP_CC_MDSS_DPTX2_LINK_INTF_CLK 51 +#define MDSS_DISP_CC_MDSS_DPTX2_PIXEL0_CLK 52 +#define MDSS_DISP_CC_MDSS_DPTX2_PIXEL0_CLK_SRC 53 +#define MDSS_DISP_CC_MDSS_DPTX2_PIXEL1_CLK 54 +#define MDSS_DISP_CC_MDSS_DPTX2_PIXEL1_CLK_SRC 55 +#define MDSS_DISP_CC_MDSS_DPTX3_AUX_CLK 56 +#define MDSS_DISP_CC_MDSS_DPTX3_AUX_CLK_SRC 57 +#define MDSS_DISP_CC_MDSS_DPTX3_CRYPTO_CLK 58 +#define MDSS_DISP_CC_MDSS_DPTX3_LINK_CLK 59 +#define MDSS_DISP_CC_MDSS_DPTX3_LINK_CLK_SRC 60 +#define MDSS_DISP_CC_MDSS_DPTX3_LINK_DIV_CLK_SRC 61 +#define MDSS_DISP_CC_MDSS_DPTX3_LINK_INTF_CLK 62 +#define MDSS_DISP_CC_MDSS_DPTX3_PIXEL0_CLK 63 +#define MDSS_DISP_CC_MDSS_DPTX3_PIXEL0_CLK_SRC 64 +#define MDSS_DISP_CC_MDSS_ESC0_CLK 65 +#define MDSS_DISP_CC_MDSS_ESC0_CLK_SRC 66 +#define MDSS_DISP_CC_MDSS_ESC1_CLK 67 +#define MDSS_DISP_CC_MDSS_ESC1_CLK_SRC 68 +#define MDSS_DISP_CC_MDSS_MDP1_CLK 69 +#define MDSS_DISP_CC_MDSS_MDP_CLK 70 +#define MDSS_DISP_CC_MDSS_MDP_CLK_SRC 71 +#define MDSS_DISP_CC_MDSS_MDP_LUT1_CLK 72 +#define MDSS_DISP_CC_MDSS_MDP_LUT_CLK 73 +#define MDSS_DISP_CC_MDSS_NON_GDSC_AHB_CLK 74 +#define MDSS_DISP_CC_MDSS_PCLK0_CLK 75 +#define MDSS_DISP_CC_MDSS_PCLK0_CLK_SRC 76 +#define MDSS_DISP_CC_MDSS_PCLK1_CLK 77 +#define MDSS_DISP_CC_MDSS_PCLK1_CLK_SRC 78 +#define MDSS_DISP_CC_MDSS_PCLK2_CLK 79 +#define MDSS_DISP_CC_MDSS_PCLK2_CLK_SRC 80 +#define MDSS_DISP_CC_MDSS_RSCC_AHB_CLK 81 +#define MDSS_DISP_CC_MDSS_RSCC_VSYNC_CLK 82 +#define MDSS_DISP_CC_MDSS_VSYNC1_CLK 83 +#define MDSS_DISP_CC_MDSS_VSYNC_CLK 84 +#define MDSS_DISP_CC_MDSS_VSYNC_CLK_SRC 85 +#define MDSS_DISP_CC_PLL0 86 +#define MDSS_DISP_CC_PLL1 87 +#define MDSS_DISP_CC_PLL2 88 +#define MDSS_DISP_CC_PLL3 89 +#define MDSS_DISP_CC_SLEEP_CLK 90 +#define MDSS_DISP_CC_SLEEP_CLK_SRC 91 +#define MDSS_DISP_CC_SM_DIV_CLK_SRC 92 +#define MDSS_DISP_CC_XO_CLK 93 +#define MDSS_DISP_CC_XO_CLK_SRC 94 + +/* DISP_CC_0 and DISP_CC_1 power domains */ +#define MDSS_DISP_CC_MDSS_CORE_GDSC 0 +#define MDSS_DISP_CC_MDSS_CORE_INT2_GDSC 1 + +/* DISP_CC_0 and DISP_CC_1 resets */ +#define MDSS_DISP_CC_MDSS_CORE_BCR 0 +#define MDSS_DISP_CC_MDSS_CORE_INT2_BCR 1 +#define MDSS_DISP_CC_MDSS_RSCC_BCR 2 + +#endif --=20 2.34.1 From nobody Fri Jul 24 21:30:56 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 B46E7430304 for ; Fri, 24 Jul 2026 10:55:44 +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=1784890551; cv=none; b=nac90j7qXbogb7kFR4+SJejBFzc9pjIOiSF87OhFVu33g6c8Sn/arzMwNRo0Stp8sRrevr9elXx3u+2WcGW4kH6e5tcrA6TZCo94MswriX5X0uBCiw1F4OVTuYGxXrFw29/A/3U2GqioUDAzWC3FLlHuHrPwBQaOveYwoCfpMvk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784890551; c=relaxed/simple; bh=MWjzxWf6RN/BKC2ejBw8Au2VspkopXTJJ1fkXhC9WYU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RlnH43iGvKZv+9JUhXMVb0w7BHE1uJSKb58LehdtP04rqgl10mW59RvWOWjWqNCkWhAgRGUqPdkd79SYZRjaHNmzYsfpESAl1MbkXSYqneg/rIyIScCxXy7+sKBQCdVxc2MwQwVfiesrbd9jI1/14PSpggLU85nStmXPNKbE3tc= 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=Wd4dq6fC; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=NXkUp7FP; 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="Wd4dq6fC"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="NXkUp7FP" 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 66OADbeS2875766 for ; Fri, 24 Jul 2026 10:55:43 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= FvsgJ0eHCB+9yO8Pcb19oT+/q6qxEJi6OWR6SuHWbUc=; b=Wd4dq6fCUzESxUqB zYnDVmHf4vXtHvlbnK/OdUWl8Q9xk2EhUFuGjszUCMiHZbUZ2ThHLrwWeZ1v5K1r NUWe26SK7W9grm3mAXkBhY9u/aHcH6bXxv7WY8fjTnx4AvcyL1Jm7d/Id/yR8cbk 28PjOD1Vk4smCUyMLyTpXdBZJZsgKP5p7vdSxXU6e3twz43HynpasWsR0+zvzS75 Eaqa+zwvdbXdmf2Q1MJ1lIu0Y1iQztfEvzOB1lO1e+fBPkMeJSKPF2kB5riBaH2f sdjdlz7VDRGzTMj410vQRByVnCxZYrHw+L5IRBakoVsgORwGdAzxhW3Dp1vM47Ju dlzBjQ== Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fm5byrbdp-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 24 Jul 2026 10:55:43 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2cfc52ddc55so4704415ad.3 for ; Fri, 24 Jul 2026 03:55:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784890542; x=1785495342; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=FvsgJ0eHCB+9yO8Pcb19oT+/q6qxEJi6OWR6SuHWbUc=; b=NXkUp7FPTz9V2Eznd+K6kL2xef4RyhtsEnts2u05nxhNKo9gvTAKurkYZWoWYIgWub 8fJ4Ch6VdKioFrSdYmLJvnrsnmYdJx8plcHHffroNQParNlpD//gbn0AP8Fju4Dslfpc HqfYWPp2gR8H3JW+pnTsvnMnA21ACIhkTI3IQXEpUw5GNL8Og0kLyfqDKmo4obHpMUG6 6udRHOVEhOEYiUILeZ5tCTJ5WDQC/DZ6T6uXJC2FZKS/w2I5s274kQ5dXh08x0r3L5j9 PNG2ur4cbGqAtLCR9kLpFQ1vCBubXHQTBcJlVlehfPQhS7a4J/fCLWEP8wemqVcZWMtT o2uw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784890542; x=1785495342; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=FvsgJ0eHCB+9yO8Pcb19oT+/q6qxEJi6OWR6SuHWbUc=; b=O/uJi07rpHyP6oKwV1vUJA87Cz55FAXBvsRRXFrkrOckjL6eSTGNZy0jiHy+vzVwQ/ sjZfJO57qYpnCHkYAGTRzmzFMczth5y7NAqkNmBoirL0eknueNAqRfpDEoh5gzUJ+Hec Fs03eCrUt/qBNGXwDo6zLjg2ePLuK+WO+bntOylyIpFFV38WEH83895yBlybIgFV9fI5 jUkVOYO2p8hsUWbPGd9ju5MGMedyim75GYnM5WGM/qk3OCj//thyX4UtTQYr2y92qY7O oQj0AhD/umY9ZMbCnF/QOo6FXsPD9NRyoKNGqF91uLJsACN/OrTjOsKADGHf00aKhlO9 QCMQ== X-Forwarded-Encrypted: i=1; AHgh+Ro0i6Ew44Mkl5XtnIabaLsUD6gvXBc2sBjeBYG6tZOcHzs2XYGikhmFXecu7wxsYJK4gIRTExXxVMAiakM=@vger.kernel.org X-Gm-Message-State: AOJu0Yyz7vl62JRu1BnaMPa9lAj95sJOqaYAVLTNnldC3jYXUj2oGUfp 9R1knBFEqyzqSGQpbyPbPQWXTssapeHK+WoKT2HO6Tj5ua+E5xNHdzQ7jaCqx7qn/+tRsbosyZm jkWge1nBeU0ftvni0KU+PhpuBE5ZT8V1lwuIVz3+s8oyRvJmn/WKUSQrZxHKV0/kc/PA= X-Gm-Gg: AR+sD12k33OsG0+SzbwNY7+rYE7KDbevbttLN2nyo17a68xJC2giMbvHkOZiUBVjGQR nTGuJIE+T/RIpitE1odv0XbeUWA4dtlGe0u8eiw4sQ3Hx3yAuR4HpL8+PM/A2gQmf+xmkvtz6F1 av4O2wksPHrcKM3KN8GB+QtTydQkO+Ie3dS+C+ivH8+II9gqicSG9yMza4+WrD5V/QjFNqvzJpq ZCAGw9MDDhJ981Cgkz5LVyiMUXcPwoX0SsADhED+ZrR9WkzFiUomPb0rvvnmHqnh2j1put0zdsP nRqtL5G1fII7QcAoRh+f6Wv+gGj4s119uhIi136wmfBzQ73TmKZSmlpDqYtw4sXSp/Q8IcUQ6Il vG+5NG0LBT+BrYJUddB3ASKIQ X-Received: by 2002:a17:903:1aeb:b0:2ca:660:b1d with SMTP id d9443c01a7336-2cfa6b73ba7mr79434015ad.11.1784890541063; Fri, 24 Jul 2026 03:55:41 -0700 (PDT) X-Received: by 2002:a17:903:1aeb:b0:2ca:660:b1d with SMTP id d9443c01a7336-2cfa6b73ba7mr79433475ad.11.1784890539978; Fri, 24 Jul 2026 03:55:39 -0700 (PDT) Received: from hu-tdas-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2cf8f310644sm49314775ad.55.2026.07.24.03.55.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jul 2026 03:55:39 -0700 (PDT) From: Taniya Das Date: Fri, 24 Jul 2026 16:25:08 +0530 Subject: [PATCH v3 4/6] clk: qcom: Add Nord display clock controller support 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: <20260724-nords_mm_v1-v3-4-32b45232217f@oss.qualcomm.com> References: <20260724-nords_mm_v1-v3-0-32b45232217f@oss.qualcomm.com> In-Reply-To: <20260724-nords_mm_v1-v3-0-32b45232217f@oss.qualcomm.com> To: Bjorn Andersson , Michael Turquette , Stephen Boyd , Brian Masney , Shawn Guo , Bartosz Golaszewski , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Neil Armstrong , Konrad Dybcio Cc: Ajit Pandey , Imran Shaik , Jagadeesh Kona , linux-arm-msm@vger.kernel.org, linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Taniya Das , Konrad Dybcio X-Mailer: b4 0.15-dev-aa3f6 X-Proofpoint-ORIG-GUID: lUgG7gElAaSl278J7T9rFi_f-Nhi_InA X-Proofpoint-Spam-Info: AW1haW4tMjYwNzI0MDA5OSBTYWx0ZWRfX3712oV9L0rL/ /XBVkLT/fWWaFXgQLH1VvNrha3XG4QerHao6d6OgoPkupcg4fzP/LvqfAQmuDc18SlQ6yXANCMS xDzl5v0gMDgWHroTAL0spurZLUYllhk= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzI0MDA5OSBTYWx0ZWRfX6sCVE9tCbqjO fM9adt0yjVhrJQw6ENBXgxZ2mi+ugTVCUpNpdTHyU+ik1mfoPvgjJLgPFCnHRGbU7DGtxh3wruo UHgMZ25zC/I444sOE2HDxejeNDpR8RrVRDsdc7SCg/JdlhAxVr5q4VEYxvIq01k0+od92i4L8/h UD0x1J9aoAbC2+7ox3LyNUBZYSJZKn27uOZet7zhu9WO4Zh45+KLo2LIxPQiABjbUoh6bKStwmF VRk5hIeJxB+aUXsB6EFRgeOEzZiIaZKwroHVrRaLvDjen28YDfEVTRNguwzFkI1al64TPpx2+5E nI6y0PF0uT9ioqyZ3EpExIKxOLQVei9BJppuXO7H6wFPyZN9xBNGyJfDENIKN8ZoJ/kBvmQgNqE eVt6hZjCBq5vZ/U1xAU/J5ewUUiw+6IASSdGI1GqmCixMXmAw+gE41qWZ47Q1DnFk8Uvefn6vsV ihh77EAXn1i8b0OW0Pg== X-Proofpoint-GUID: lUgG7gElAaSl278J7T9rFi_f-Nhi_InA X-Authority-Analysis: v=2.4 cv=GMA41ONK c=1 sm=1 tr=0 ts=6a6344af cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=EUspDBNiAAAA:8 a=N9uIJh8cW-Q2sVI0eSAA:9 a=QEXdDO2ut3YA:10 a=1OuFwYUASf3TG4hYMiVC:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-24_02,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 impostorscore=0 phishscore=0 lowpriorityscore=0 priorityscore=1501 suspectscore=0 bulkscore=0 adultscore=0 malwarescore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607240099 Add support for the display clock controllers (DISPCC) on the Qualcomm Nord platform. The platform includes two display clock controller instances, display0 and display1. Register support for both controllers. Reviewed-by: Konrad Dybcio Reviewed-by: Shawn Guo Signed-off-by: Taniya Das --- drivers/clk/qcom/Kconfig | 11 + drivers/clk/qcom/Makefile | 1 + drivers/clk/qcom/dispcc0-nord.c | 2004 +++++++++++++++++++++++++++++++++++= ++++ drivers/clk/qcom/dispcc1-nord.c | 2004 +++++++++++++++++++++++++++++++++++= ++++ 4 files changed, 4020 insertions(+) diff --git a/drivers/clk/qcom/Kconfig b/drivers/clk/qcom/Kconfig index 7d84c2f1d911a35430bba7670409f59972dcca0f..874136a2ad9aaa117df2c7ad5c8= abc5280b76339 100644 --- a/drivers/clk/qcom/Kconfig +++ b/drivers/clk/qcom/Kconfig @@ -145,6 +145,17 @@ config CLK_KAANAPALI_VIDEOCC Say Y if you want to support video devices and functionality such as video encode/decode. =20 +config CLK_NORD_DISPCC + tristate "Nord Display Clock Controller" + depends on ARM64 || COMPILE_TEST + select CLK_NORD_GCC + default m if ARCH_QCOM + help + Support for the display clock controllers on Qualcomm Technologies, Inc + Nord devices. There are two display clock controllers on Nord SoC. + Say Y if you want to support display devices and functionality such as + splash screen. + config CLK_NORD_GCC tristate "Nord Global Clock Controller" depends on ARM64 || COMPILE_TEST diff --git a/drivers/clk/qcom/Makefile b/drivers/clk/qcom/Makefile index 58f9a5eb6fd7fc457607a179d8bab5623fedf706..4282f43e7078f1fe0dde6f94204= 0eb6bd122d7ce 100644 --- a/drivers/clk/qcom/Makefile +++ b/drivers/clk/qcom/Makefile @@ -37,6 +37,7 @@ obj-$(CONFIG_CLK_KAANAPALI_GCC) +=3D gcc-kaanapali.o obj-$(CONFIG_CLK_KAANAPALI_GPUCC) +=3D gpucc-kaanapali.o gxclkctl-kaanapal= i.o obj-$(CONFIG_CLK_KAANAPALI_TCSRCC) +=3D tcsrcc-kaanapali.o obj-$(CONFIG_CLK_KAANAPALI_VIDEOCC) +=3D videocc-kaanapali.o +obj-$(CONFIG_CLK_NORD_DISPCC) +=3D dispcc0-nord.o dispcc1-nord.o obj-$(CONFIG_CLK_NORD_GCC) +=3D gcc-nord.o negcc-nord.o nwgcc-nord.o segcc= -nord.o obj-$(CONFIG_CLK_NORD_TCSRCC) +=3D tcsrcc-nord.o obj-$(CONFIG_CLK_X1E80100_CAMCC) +=3D camcc-x1e80100.o diff --git a/drivers/clk/qcom/dispcc0-nord.c b/drivers/clk/qcom/dispcc0-nor= d.c new file mode 100644 index 0000000000000000000000000000000000000000..835aba15961366c8336be91e10c= 39824cfd34b22 --- /dev/null +++ b/drivers/clk/qcom/dispcc0-nord.c @@ -0,0 +1,2004 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + */ + +#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 "gdsc.h" +#include "reset.h" + +enum { + DT_BI_TCXO, + DT_BI_TCXO_AO, + DT_AHB_CLK, + DT_SLEEP_CLK, + + DT_DSI0_PHY_PLL_OUT_BYTECLK, + DT_DSI0_PHY_PLL_OUT_DSICLK, + DT_DSI1_PHY_PLL_OUT_BYTECLK, + DT_DSI1_PHY_PLL_OUT_DSICLK, + + DT_DP0_PHY_PLL_LINK_CLK, + DT_DP0_PHY_PLL_VCO_DIV_CLK, + DT_DP1_PHY_PLL_LINK_CLK, + DT_DP1_PHY_PLL_VCO_DIV_CLK, + DT_DP2_PHY_PLL_LINK_CLK, + DT_DP2_PHY_PLL_VCO_DIV_CLK, + DT_DP3_PHY_PLL_LINK_CLK, + DT_DP3_PHY_PLL_VCO_DIV_CLK, +}; + +enum { + P_BI_TCXO, + P_MDSS_0_DISP_CC_PLL0_OUT_MAIN, + P_MDSS_0_DISP_CC_PLL1_OUT_EVEN, + P_MDSS_0_DISP_CC_PLL1_OUT_MAIN, + P_MDSS_0_DISP_CC_PLL2_OUT_MAIN, + P_MDSS_0_DISP_CC_PLL3_OUT_MAIN, + P_DP0_PHY_PLL_LINK_CLK, + P_DP0_PHY_PLL_VCO_DIV_CLK, + P_DP1_PHY_PLL_LINK_CLK, + P_DP1_PHY_PLL_VCO_DIV_CLK, + P_DP2_PHY_PLL_LINK_CLK, + P_DP2_PHY_PLL_VCO_DIV_CLK, + P_DP3_PHY_PLL_LINK_CLK, + P_DP3_PHY_PLL_VCO_DIV_CLK, + P_DSI0_PHY_PLL_OUT_BYTECLK, + P_DSI0_PHY_PLL_OUT_DSICLK, + P_DSI1_PHY_PLL_OUT_BYTECLK, + P_DSI1_PHY_PLL_OUT_DSICLK, + P_SLEEP_CLK, +}; + +static const struct pll_vco lucid_ole_vco[] =3D { + { 249600000, 2300000000, 0 }, +}; + +static const struct pll_vco zonda_ole_vco[] =3D { + { 700000000, 3600000000, 0 }, +}; + +/* 900.0 MHz Configuration */ +static const struct alpha_pll_config mdss_0_disp_cc_pll0_config =3D { + .l =3D 0x2e, + .alpha =3D 0xe000, + .config_ctl_val =3D 0x20485699, + .config_ctl_hi_val =3D 0x00182261, + .config_ctl_hi1_val =3D 0x82aa299c, + .test_ctl_val =3D 0x00000000, + .test_ctl_hi_val =3D 0x00000003, + .test_ctl_hi1_val =3D 0x00009000, + .test_ctl_hi2_val =3D 0x00000034, + .user_ctl_val =3D 0x00000000, + .user_ctl_hi_val =3D 0x00400005, +}; + +static struct clk_alpha_pll mdss_0_disp_cc_pll0 =3D { + .offset =3D 0x0, + .config =3D &mdss_0_disp_cc_pll0_config, + .vco_table =3D lucid_ole_vco, + .num_vco =3D ARRAY_SIZE(lucid_ole_vco), + .regs =3D clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE], + .clkr =3D { + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_pll0", + .parent_data =3D &(const struct clk_parent_data) { + .index =3D DT_BI_TCXO, + }, + .num_parents =3D 1, + .ops =3D &clk_alpha_pll_lucid_evo_ops, + }, + }, +}; + +/* 600.0 MHz Configuration */ +static const struct alpha_pll_config mdss_0_disp_cc_pll1_config =3D { + .l =3D 0x1f, + .alpha =3D 0x4000, + .config_ctl_val =3D 0x20485699, + .config_ctl_hi_val =3D 0x00182261, + .config_ctl_hi1_val =3D 0x82aa299c, + .test_ctl_val =3D 0x00000000, + .test_ctl_hi_val =3D 0x00000003, + .test_ctl_hi1_val =3D 0x00009000, + .test_ctl_hi2_val =3D 0x00000034, + .user_ctl_val =3D 0x00000000, + .user_ctl_hi_val =3D 0x00400005, +}; + +static struct clk_alpha_pll mdss_0_disp_cc_pll1 =3D { + .offset =3D 0x1000, + .config =3D &mdss_0_disp_cc_pll1_config, + .vco_table =3D lucid_ole_vco, + .num_vco =3D ARRAY_SIZE(lucid_ole_vco), + .regs =3D clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE], + .clkr =3D { + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_pll1", + .parent_data =3D &(const struct clk_parent_data) { + .index =3D DT_BI_TCXO, + }, + .num_parents =3D 1, + .ops =3D &clk_alpha_pll_lucid_evo_ops, + }, + }, +}; + +/* 1363.2 MHz Configuration */ +static const struct alpha_pll_config mdss_0_disp_cc_pll2_config =3D { + .l =3D 0x47, + .alpha =3D 0x0, + .config_ctl_val =3D 0x08240800, + .config_ctl_hi_val =3D 0x05008001, + .config_ctl_hi1_val =3D 0x00000000, + .config_ctl_hi2_val =3D 0x00000000, + .user_ctl_val =3D 0x00000000, + .user_ctl_hi_val =3D 0x00000080, +}; + +static struct clk_alpha_pll mdss_0_disp_cc_pll2 =3D { + .offset =3D 0x2000, + .config =3D &mdss_0_disp_cc_pll2_config, + .vco_table =3D zonda_ole_vco, + .num_vco =3D ARRAY_SIZE(zonda_ole_vco), + .regs =3D clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_ZONDA_OLE], + .clkr =3D { + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_pll2", + .parent_data =3D &(const struct clk_parent_data) { + .index =3D DT_BI_TCXO, + }, + .num_parents =3D 1, + .ops =3D &clk_alpha_pll_zonda_ole_ops, + }, + }, +}; + +/* 1363.2 MHz Configuration */ +static const struct alpha_pll_config mdss_0_disp_cc_pll3_config =3D { + .l =3D 0x47, + .alpha =3D 0x0, + .config_ctl_val =3D 0x08240800, + .config_ctl_hi_val =3D 0x05008001, + .config_ctl_hi1_val =3D 0x00000000, + .config_ctl_hi2_val =3D 0x00000000, + .user_ctl_val =3D 0x00000000, + .user_ctl_hi_val =3D 0x00000080, +}; + +static struct clk_alpha_pll mdss_0_disp_cc_pll3 =3D { + .offset =3D 0x3000, + .config =3D &mdss_0_disp_cc_pll3_config, + .vco_table =3D zonda_ole_vco, + .num_vco =3D ARRAY_SIZE(zonda_ole_vco), + .regs =3D clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_ZONDA_OLE], + .clkr =3D { + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_pll3", + .parent_data =3D &(const struct clk_parent_data) { + .index =3D DT_BI_TCXO, + }, + .num_parents =3D 1, + .ops =3D &clk_alpha_pll_zonda_ole_ops, + }, + }, +}; + +static const struct parent_map disp_cc_0_parent_map_0[] =3D { + { P_BI_TCXO, 0 }, + { P_MDSS_0_DISP_CC_PLL2_OUT_MAIN, 1 }, + { P_DP0_PHY_PLL_VCO_DIV_CLK, 2 }, + { P_DP3_PHY_PLL_VCO_DIV_CLK, 3 }, + { P_DP1_PHY_PLL_VCO_DIV_CLK, 4 }, + { P_MDSS_0_DISP_CC_PLL3_OUT_MAIN, 5 }, + { P_DP2_PHY_PLL_VCO_DIV_CLK, 6 }, +}; + +static const struct clk_parent_data disp_cc_0_parent_data_0[] =3D { + { .index =3D DT_BI_TCXO }, + { .hw =3D &mdss_0_disp_cc_pll2.clkr.hw }, + { .index =3D DT_DP0_PHY_PLL_VCO_DIV_CLK }, + { .index =3D DT_DP3_PHY_PLL_VCO_DIV_CLK }, + { .index =3D DT_DP1_PHY_PLL_VCO_DIV_CLK }, + { .hw =3D &mdss_0_disp_cc_pll3.clkr.hw }, + { .index =3D DT_DP2_PHY_PLL_VCO_DIV_CLK }, +}; + +static const struct parent_map disp_cc_0_parent_map_1[] =3D { + { P_BI_TCXO, 0 }, +}; + +static const struct clk_parent_data disp_cc_0_parent_data_1[] =3D { + { .index =3D DT_BI_TCXO }, +}; + +static const struct parent_map disp_cc_0_parent_map_2[] =3D { + { P_BI_TCXO, 0 }, + { P_DSI0_PHY_PLL_OUT_DSICLK, 1 }, + { P_DSI0_PHY_PLL_OUT_BYTECLK, 2 }, + { P_DSI1_PHY_PLL_OUT_DSICLK, 3 }, + { P_DSI1_PHY_PLL_OUT_BYTECLK, 4 }, +}; + +static const struct clk_parent_data disp_cc_0_parent_data_2[] =3D { + { .index =3D DT_BI_TCXO }, + { .index =3D DT_DSI0_PHY_PLL_OUT_DSICLK }, + { .index =3D DT_DSI0_PHY_PLL_OUT_BYTECLK }, + { .index =3D DT_DSI1_PHY_PLL_OUT_DSICLK }, + { .index =3D DT_DSI1_PHY_PLL_OUT_BYTECLK }, +}; + +static const struct parent_map disp_cc_0_parent_map_3[] =3D { + { P_BI_TCXO, 0 }, + { P_MDSS_0_DISP_CC_PLL2_OUT_MAIN, 1 }, + { P_DP3_PHY_PLL_VCO_DIV_CLK, 3 }, + { P_MDSS_0_DISP_CC_PLL3_OUT_MAIN, 5 }, + { P_DP2_PHY_PLL_VCO_DIV_CLK, 6 }, +}; + +static const struct clk_parent_data disp_cc_0_parent_data_3[] =3D { + { .index =3D DT_BI_TCXO }, + { .hw =3D &mdss_0_disp_cc_pll2.clkr.hw }, + { .index =3D DT_DP3_PHY_PLL_VCO_DIV_CLK }, + { .hw =3D &mdss_0_disp_cc_pll3.clkr.hw }, + { .index =3D DT_DP2_PHY_PLL_VCO_DIV_CLK }, +}; + +static const struct parent_map disp_cc_0_parent_map_4[] =3D { + { P_BI_TCXO, 0 }, + { P_DP0_PHY_PLL_LINK_CLK, 1 }, + { P_DP1_PHY_PLL_LINK_CLK, 2 }, + { P_DP2_PHY_PLL_LINK_CLK, 3 }, + { P_DP3_PHY_PLL_LINK_CLK, 4 }, +}; + +static const struct clk_parent_data disp_cc_0_parent_data_4[] =3D { + { .index =3D DT_BI_TCXO }, + { .index =3D DT_DP0_PHY_PLL_LINK_CLK }, + { .index =3D DT_DP1_PHY_PLL_LINK_CLK }, + { .index =3D DT_DP2_PHY_PLL_LINK_CLK }, + { .index =3D DT_DP3_PHY_PLL_LINK_CLK }, +}; + +static const struct parent_map disp_cc_0_parent_map_5[] =3D { + { P_BI_TCXO, 0 }, + { P_DP2_PHY_PLL_LINK_CLK, 3 }, + { P_DP3_PHY_PLL_LINK_CLK, 4 }, +}; + +static const struct clk_parent_data disp_cc_0_parent_data_5[] =3D { + { .index =3D DT_BI_TCXO }, + { .index =3D DT_DP2_PHY_PLL_LINK_CLK }, + { .index =3D DT_DP3_PHY_PLL_LINK_CLK }, +}; + +static const struct parent_map disp_cc_0_parent_map_6[] =3D { + { P_BI_TCXO, 0 }, + { P_DSI0_PHY_PLL_OUT_BYTECLK, 2 }, + { P_DSI1_PHY_PLL_OUT_BYTECLK, 4 }, +}; + +static const struct clk_parent_data disp_cc_0_parent_data_6[] =3D { + { .index =3D DT_BI_TCXO }, + { .index =3D DT_DSI0_PHY_PLL_OUT_BYTECLK }, + { .index =3D DT_DSI1_PHY_PLL_OUT_BYTECLK }, +}; + +static const struct parent_map disp_cc_0_parent_map_7[] =3D { + { P_BI_TCXO, 0 }, + { P_MDSS_0_DISP_CC_PLL1_OUT_MAIN, 4 }, + { P_MDSS_0_DISP_CC_PLL1_OUT_EVEN, 6 }, +}; + +static const struct clk_parent_data disp_cc_0_parent_data_7[] =3D { + { .index =3D DT_BI_TCXO }, + { .hw =3D &mdss_0_disp_cc_pll1.clkr.hw }, + { .hw =3D &mdss_0_disp_cc_pll1.clkr.hw }, +}; + +static const struct parent_map disp_cc_0_parent_map_8[] =3D { + { P_BI_TCXO, 0 }, + { P_MDSS_0_DISP_CC_PLL0_OUT_MAIN, 1 }, + { P_MDSS_0_DISP_CC_PLL1_OUT_MAIN, 4 }, + { P_MDSS_0_DISP_CC_PLL1_OUT_EVEN, 6 }, +}; + +static const struct clk_parent_data disp_cc_0_parent_data_8[] =3D { + { .index =3D DT_BI_TCXO }, + { .hw =3D &mdss_0_disp_cc_pll0.clkr.hw }, + { .hw =3D &mdss_0_disp_cc_pll1.clkr.hw }, + { .hw =3D &mdss_0_disp_cc_pll1.clkr.hw }, +}; + +static const struct parent_map disp_cc_0_parent_map_9[] =3D { + { P_SLEEP_CLK, 0 }, +}; + +static const struct clk_parent_data disp_cc_0_parent_data_9[] =3D { + { .index =3D DT_SLEEP_CLK }, +}; + +static const struct freq_tbl ftbl_mdss_0_disp_cc_mdss_ahb_clk_src[] =3D { + F(37500000, P_MDSS_0_DISP_CC_PLL1_OUT_MAIN, 16, 0, 0), + F(75000000, P_MDSS_0_DISP_CC_PLL1_OUT_MAIN, 8, 0, 0), + { } +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_ahb_clk_src =3D { + .cmd_rcgr =3D 0x837c, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_7, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_ahb_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_ahb_clk_src", + .parent_data =3D disp_cc_0_parent_data_7, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_7), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_shared_ops, + }, +}; + +static const struct freq_tbl ftbl_mdss_0_disp_cc_mdss_byte0_clk_src[] =3D { + F(19200000, P_BI_TCXO, 1, 0, 0), + { } +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_byte0_clk_src =3D { + .cmd_rcgr =3D 0x813c, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_2, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_byte0_clk_src", + .parent_data =3D disp_cc_0_parent_data_2, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_2), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_byte2_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_byte1_clk_src =3D { + .cmd_rcgr =3D 0x8158, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_2, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_byte1_clk_src", + .parent_data =3D disp_cc_0_parent_data_2, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_2), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_byte2_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx0_aux_clk_src =3D { + .cmd_rcgr =3D 0x8220, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_1, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx0_aux_clk_src", + .parent_data =3D disp_cc_0_parent_data_1, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_1), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_shared_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx0_link_clk_src =3D { + .cmd_rcgr =3D 0x81a4, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_4, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx0_link_clk_src", + .parent_data =3D disp_cc_0_parent_data_4, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_4), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_byte2_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx0_pixel0_clk_src =3D { + .cmd_rcgr =3D 0x81c0, + .mnd_width =3D 16, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_0, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx0_pixel0_clk_src", + .parent_data =3D disp_cc_0_parent_data_0, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_0), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_dp_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx0_pixel1_clk_src =3D { + .cmd_rcgr =3D 0x81d8, + .mnd_width =3D 16, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_0, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx0_pixel1_clk_src", + .parent_data =3D disp_cc_0_parent_data_0, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_0), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_dp_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx0_pixel2_clk_src =3D { + .cmd_rcgr =3D 0x81f0, + .mnd_width =3D 16, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_0, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx0_pixel2_clk_src", + .parent_data =3D disp_cc_0_parent_data_0, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_0), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_dp_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx0_pixel3_clk_src =3D { + .cmd_rcgr =3D 0x8208, + .mnd_width =3D 16, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_0, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx0_pixel3_clk_src", + .parent_data =3D disp_cc_0_parent_data_0, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_0), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_dp_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx1_aux_clk_src =3D { + .cmd_rcgr =3D 0x82b4, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_1, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx1_aux_clk_src", + .parent_data =3D disp_cc_0_parent_data_1, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_1), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_shared_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx1_link_clk_src =3D { + .cmd_rcgr =3D 0x8298, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_4, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx1_link_clk_src", + .parent_data =3D disp_cc_0_parent_data_4, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_4), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_byte2_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx1_pixel0_clk_src =3D { + .cmd_rcgr =3D 0x8238, + .mnd_width =3D 16, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_0, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx1_pixel0_clk_src", + .parent_data =3D disp_cc_0_parent_data_0, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_0), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_dp_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx1_pixel1_clk_src =3D { + .cmd_rcgr =3D 0x8250, + .mnd_width =3D 16, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_0, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx1_pixel1_clk_src", + .parent_data =3D disp_cc_0_parent_data_0, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_0), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_dp_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx1_pixel2_clk_src =3D { + .cmd_rcgr =3D 0x8268, + .mnd_width =3D 16, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_0, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx1_pixel2_clk_src", + .parent_data =3D disp_cc_0_parent_data_0, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_0), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_dp_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx1_pixel3_clk_src =3D { + .cmd_rcgr =3D 0x8280, + .mnd_width =3D 16, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_0, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx1_pixel3_clk_src", + .parent_data =3D disp_cc_0_parent_data_0, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_0), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_dp_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx2_aux_clk_src =3D { + .cmd_rcgr =3D 0x8318, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_1, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx2_aux_clk_src", + .parent_data =3D disp_cc_0_parent_data_1, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_1), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_shared_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx2_link_clk_src =3D { + .cmd_rcgr =3D 0x82cc, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_5, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx2_link_clk_src", + .parent_data =3D disp_cc_0_parent_data_5, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_5), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_byte2_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx2_pixel0_clk_src =3D { + .cmd_rcgr =3D 0x82e8, + .mnd_width =3D 16, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_3, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx2_pixel0_clk_src", + .parent_data =3D disp_cc_0_parent_data_3, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_3), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_dp_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx2_pixel1_clk_src =3D { + .cmd_rcgr =3D 0x8300, + .mnd_width =3D 16, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_3, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx2_pixel1_clk_src", + .parent_data =3D disp_cc_0_parent_data_3, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_3), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_dp_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx3_aux_clk_src =3D { + .cmd_rcgr =3D 0x8364, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_1, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx3_aux_clk_src", + .parent_data =3D disp_cc_0_parent_data_1, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_1), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_shared_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx3_link_clk_src =3D { + .cmd_rcgr =3D 0x8348, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_5, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx3_link_clk_src", + .parent_data =3D disp_cc_0_parent_data_5, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_5), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_byte2_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_dptx3_pixel0_clk_src =3D { + .cmd_rcgr =3D 0x8330, + .mnd_width =3D 16, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_3, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx3_pixel0_clk_src", + .parent_data =3D disp_cc_0_parent_data_3, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_3), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_dp_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_esc0_clk_src =3D { + .cmd_rcgr =3D 0x8174, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_6, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_esc0_clk_src", + .parent_data =3D disp_cc_0_parent_data_6, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_6), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_shared_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_esc1_clk_src =3D { + .cmd_rcgr =3D 0x818c, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_6, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_esc1_clk_src", + .parent_data =3D disp_cc_0_parent_data_6, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_6), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_shared_ops, + }, +}; + +static const struct freq_tbl ftbl_mdss_0_disp_cc_mdss_mdp_clk_src[] =3D { + F(300000000, P_MDSS_0_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0), + F(417000000, P_MDSS_0_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0), + F(532000000, P_MDSS_0_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0), + F(650000000, P_MDSS_0_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0), + F(710000000, P_MDSS_0_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0), + { } +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_mdp_clk_src =3D { + .cmd_rcgr =3D 0x810c, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_8, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_mdp_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_mdp_clk_src", + .parent_data =3D disp_cc_0_parent_data_8, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_8), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_shared_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_pclk0_clk_src =3D { + .cmd_rcgr =3D 0x80c4, + .mnd_width =3D 8, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_2, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_pclk0_clk_src", + .parent_data =3D disp_cc_0_parent_data_2, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_2), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_pixel_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_pclk1_clk_src =3D { + .cmd_rcgr =3D 0x80dc, + .mnd_width =3D 8, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_2, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_pclk1_clk_src", + .parent_data =3D disp_cc_0_parent_data_2, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_2), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_pixel_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_pclk2_clk_src =3D { + .cmd_rcgr =3D 0x80f4, + .mnd_width =3D 8, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_2, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_pclk2_clk_src", + .parent_data =3D disp_cc_0_parent_data_2, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_2), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_pixel_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_mdss_vsync_clk_src =3D { + .cmd_rcgr =3D 0x8124, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_1, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_vsync_clk_src", + .parent_data =3D disp_cc_0_parent_data_1, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_1), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_shared_ops, + }, +}; + +static const struct freq_tbl ftbl_mdss_0_disp_cc_sleep_clk_src[] =3D { + F(32000, P_SLEEP_CLK, 1, 0, 0), + { } +}; + +static struct clk_rcg2 mdss_0_disp_cc_sleep_clk_src =3D { + .cmd_rcgr =3D 0xe064, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_9, + .freq_tbl =3D ftbl_mdss_0_disp_cc_sleep_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_sleep_clk_src", + .parent_data =3D disp_cc_0_parent_data_9, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_9), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_ops, + }, +}; + +static struct clk_rcg2 mdss_0_disp_cc_xo_clk_src =3D { + .cmd_rcgr =3D 0xe044, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_0_parent_map_1, + .freq_tbl =3D ftbl_mdss_0_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_xo_clk_src", + .parent_data =3D disp_cc_0_parent_data_1, + .num_parents =3D ARRAY_SIZE(disp_cc_0_parent_data_1), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_ops, + }, +}; + +static struct clk_regmap_div mdss_0_disp_cc_mdss_byte0_div_clk_src =3D { + .reg =3D 0x8154, + .shift =3D 0, + .width =3D 4, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_byte0_div_clk_src", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_byte0_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .ops =3D &clk_regmap_div_ro_ops, + }, +}; + +static struct clk_regmap_div mdss_0_disp_cc_mdss_byte1_div_clk_src =3D { + .reg =3D 0x8170, + .shift =3D 0, + .width =3D 4, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_byte1_div_clk_src", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_byte1_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .ops =3D &clk_regmap_div_ro_ops, + }, +}; + +static struct clk_regmap_div mdss_0_disp_cc_mdss_dptx0_link_div_clk_src = =3D { + .reg =3D 0x81bc, + .shift =3D 0, + .width =3D 4, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx0_link_div_clk_src", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx0_link_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_regmap_div_ro_ops, + }, +}; + +static struct clk_regmap_div mdss_0_disp_cc_mdss_dptx1_link_div_clk_src = =3D { + .reg =3D 0x82b0, + .shift =3D 0, + .width =3D 4, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx1_link_div_clk_src", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx1_link_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_regmap_div_ro_ops, + }, +}; + +static struct clk_regmap_div mdss_0_disp_cc_mdss_dptx2_link_div_clk_src = =3D { + .reg =3D 0x82e4, + .shift =3D 0, + .width =3D 4, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx2_link_div_clk_src", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx2_link_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_regmap_div_ro_ops, + }, +}; + +static struct clk_regmap_div mdss_0_disp_cc_mdss_dptx3_link_div_clk_src = =3D { + .reg =3D 0x8360, + .shift =3D 0, + .width =3D 4, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx3_link_div_clk_src", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx3_link_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_regmap_div_ro_ops, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_accu_shift_clk =3D { + .halt_reg =3D 0xe060, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0xe060, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_accu_shift_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_xo_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_ahb1_clk =3D { + .halt_reg =3D 0xa028, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0xa028, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_ahb1_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_ahb_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_ahb_clk =3D { + .halt_reg =3D 0x80c0, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x80c0, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_ahb_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_ahb_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_byte0_clk =3D { + .halt_reg =3D 0x8034, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8034, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_byte0_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_byte0_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_byte0_intf_clk =3D { + .halt_reg =3D 0x8038, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8038, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_byte0_intf_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_byte0_div_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_byte1_clk =3D { + .halt_reg =3D 0x803c, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x803c, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_byte1_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_byte1_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_byte1_intf_clk =3D { + .halt_reg =3D 0x8040, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8040, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_byte1_intf_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_byte1_div_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx0_aux_clk =3D { + .halt_reg =3D 0x806c, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x806c, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx0_aux_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx0_aux_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx0_crypto_clk =3D { + .halt_reg =3D 0x8058, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0x8058, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx0_crypto_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx0_link_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx0_link_clk =3D { + .halt_reg =3D 0x804c, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x804c, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx0_link_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx0_link_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx0_link_intf_clk =3D { + .halt_reg =3D 0x8054, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8054, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx0_link_intf_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx0_link_div_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx0_pixel0_clk =3D { + .halt_reg =3D 0x805c, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x805c, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx0_pixel0_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx0_pixel0_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx0_pixel1_clk =3D { + .halt_reg =3D 0x8060, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8060, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx0_pixel1_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx0_pixel1_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx0_pixel2_clk =3D { + .halt_reg =3D 0x8064, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8064, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx0_pixel2_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx0_pixel2_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx0_pixel3_clk =3D { + .halt_reg =3D 0x8068, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8068, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx0_pixel3_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx0_pixel3_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx0_usb_router_link_intf_cl= k =3D { + .halt_reg =3D 0x8050, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8050, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx0_usb_router_link_intf_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx0_link_div_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx1_aux_clk =3D { + .halt_reg =3D 0x8090, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8090, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx1_aux_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx1_aux_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx1_crypto_clk =3D { + .halt_reg =3D 0x808c, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0x808c, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx1_crypto_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx1_link_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx1_link_clk =3D { + .halt_reg =3D 0x8080, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8080, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx1_link_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx1_link_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx1_link_intf_clk =3D { + .halt_reg =3D 0x8088, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8088, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx1_link_intf_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx1_link_div_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx1_pixel0_clk =3D { + .halt_reg =3D 0x8070, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8070, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx1_pixel0_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx1_pixel0_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx1_pixel1_clk =3D { + .halt_reg =3D 0x8074, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8074, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx1_pixel1_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx1_pixel1_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx1_pixel2_clk =3D { + .halt_reg =3D 0x8078, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8078, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx1_pixel2_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx1_pixel2_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx1_pixel3_clk =3D { + .halt_reg =3D 0x807c, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x807c, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx1_pixel3_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx1_pixel3_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx1_usb_router_link_intf_cl= k =3D { + .halt_reg =3D 0x8084, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8084, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx1_usb_router_link_intf_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx1_link_div_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx2_aux_clk =3D { + .halt_reg =3D 0x80a8, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x80a8, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx2_aux_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx2_aux_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx2_crypto_clk =3D { + .halt_reg =3D 0x80a4, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0x80a4, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx2_crypto_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx2_link_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx2_link_clk =3D { + .halt_reg =3D 0x809c, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x809c, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx2_link_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx2_link_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx2_link_intf_clk =3D { + .halt_reg =3D 0x80a0, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x80a0, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx2_link_intf_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx2_link_div_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx2_pixel0_clk =3D { + .halt_reg =3D 0x8094, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8094, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx2_pixel0_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx2_pixel0_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx2_pixel1_clk =3D { + .halt_reg =3D 0x8098, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8098, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx2_pixel1_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx2_pixel1_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx3_aux_clk =3D { + .halt_reg =3D 0x80b8, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x80b8, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx3_aux_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx3_aux_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx3_crypto_clk =3D { + .halt_reg =3D 0x80bc, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0x80bc, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx3_crypto_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx3_link_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx3_link_clk =3D { + .halt_reg =3D 0x80b0, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x80b0, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx3_link_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx3_link_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx3_link_intf_clk =3D { + .halt_reg =3D 0x80b4, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x80b4, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx3_link_intf_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx3_link_div_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_dptx3_pixel0_clk =3D { + .halt_reg =3D 0x80ac, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x80ac, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_dptx3_pixel0_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_dptx3_pixel0_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_esc0_clk =3D { + .halt_reg =3D 0x8044, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8044, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_esc0_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_esc0_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_esc1_clk =3D { + .halt_reg =3D 0x8048, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8048, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_esc1_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_esc1_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_mdp1_clk =3D { + .halt_reg =3D 0xa004, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0xa004, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_mdp1_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_mdp_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_mdp_clk =3D { + .halt_reg =3D 0x8010, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8010, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_mdp_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_mdp_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_mdp_lut1_clk =3D { + .halt_reg =3D 0xa014, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0xa014, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_mdp_lut1_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_mdp_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_mdp_lut_clk =3D { + .halt_reg =3D 0x8020, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0x8020, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_mdp_lut_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_mdp_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_non_gdsc_ahb_clk =3D { + .halt_reg =3D 0xc004, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0xc004, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_non_gdsc_ahb_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_ahb_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_pclk0_clk =3D { + .halt_reg =3D 0x8004, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8004, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_pclk0_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_pclk0_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_pclk1_clk =3D { + .halt_reg =3D 0x8008, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8008, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_pclk1_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_pclk1_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_pclk2_clk =3D { + .halt_reg =3D 0x800c, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x800c, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_pclk2_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_pclk2_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_vsync1_clk =3D { + .halt_reg =3D 0xa024, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0xa024, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_vsync1_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_vsync_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_0_disp_cc_mdss_vsync_clk =3D { + .halt_reg =3D 0x8030, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8030, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_0_disp_cc_mdss_vsync_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_0_disp_cc_mdss_vsync_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct gdsc mdss_0_disp_cc_mdss_core_gdsc =3D { + .gdscr =3D 0x9000, + .en_rest_wait_val =3D 0x2, + .en_few_wait_val =3D 0x2, + .clk_dis_wait_val =3D 0xf, + .pd =3D { + .name =3D "mdss_0_disp_cc_mdss_core_gdsc", + }, + .pwrsts =3D PWRSTS_OFF_ON, + .flags =3D HW_CTRL_TRIGGER | POLL_CFG_GDSCR | RETAIN_FF_ENABLE, +}; + +static struct gdsc mdss_0_disp_cc_mdss_core_int2_gdsc =3D { + .gdscr =3D 0xb000, + .en_rest_wait_val =3D 0x2, + .en_few_wait_val =3D 0x2, + .clk_dis_wait_val =3D 0xf, + .pd =3D { + .name =3D "mdss_0_disp_cc_mdss_core_int2_gdsc", + }, + .pwrsts =3D PWRSTS_OFF_ON, + .flags =3D HW_CTRL_TRIGGER | POLL_CFG_GDSCR | RETAIN_FF_ENABLE, +}; + +static struct clk_regmap *disp_cc_0_nord_clocks[] =3D { + [MDSS_DISP_CC_MDSS_ACCU_SHIFT_CLK] =3D &mdss_0_disp_cc_mdss_accu_shift_cl= k.clkr, + [MDSS_DISP_CC_MDSS_AHB1_CLK] =3D &mdss_0_disp_cc_mdss_ahb1_clk.clkr, + [MDSS_DISP_CC_MDSS_AHB_CLK] =3D &mdss_0_disp_cc_mdss_ahb_clk.clkr, + [MDSS_DISP_CC_MDSS_AHB_CLK_SRC] =3D &mdss_0_disp_cc_mdss_ahb_clk_src.clkr, + [MDSS_DISP_CC_MDSS_BYTE0_CLK] =3D &mdss_0_disp_cc_mdss_byte0_clk.clkr, + [MDSS_DISP_CC_MDSS_BYTE0_CLK_SRC] =3D &mdss_0_disp_cc_mdss_byte0_clk_src.= clkr, + [MDSS_DISP_CC_MDSS_BYTE0_DIV_CLK_SRC] =3D &mdss_0_disp_cc_mdss_byte0_div_= clk_src.clkr, + [MDSS_DISP_CC_MDSS_BYTE0_INTF_CLK] =3D &mdss_0_disp_cc_mdss_byte0_intf_cl= k.clkr, + [MDSS_DISP_CC_MDSS_BYTE1_CLK] =3D &mdss_0_disp_cc_mdss_byte1_clk.clkr, + [MDSS_DISP_CC_MDSS_BYTE1_CLK_SRC] =3D &mdss_0_disp_cc_mdss_byte1_clk_src.= clkr, + [MDSS_DISP_CC_MDSS_BYTE1_DIV_CLK_SRC] =3D &mdss_0_disp_cc_mdss_byte1_div_= clk_src.clkr, + [MDSS_DISP_CC_MDSS_BYTE1_INTF_CLK] =3D &mdss_0_disp_cc_mdss_byte1_intf_cl= k.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_AUX_CLK] =3D &mdss_0_disp_cc_mdss_dptx0_aux_clk.= clkr, + [MDSS_DISP_CC_MDSS_DPTX0_AUX_CLK_SRC] =3D &mdss_0_disp_cc_mdss_dptx0_aux_= clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_CRYPTO_CLK] =3D &mdss_0_disp_cc_mdss_dptx0_crypt= o_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_LINK_CLK] =3D &mdss_0_disp_cc_mdss_dptx0_link_cl= k.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_LINK_CLK_SRC] =3D &mdss_0_disp_cc_mdss_dptx0_lin= k_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_LINK_DIV_CLK_SRC] =3D + &mdss_0_disp_cc_mdss_dptx0_link_div_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_LINK_INTF_CLK] =3D &mdss_0_disp_cc_mdss_dptx0_li= nk_intf_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_PIXEL0_CLK] =3D &mdss_0_disp_cc_mdss_dptx0_pixel= 0_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_PIXEL0_CLK_SRC] =3D &mdss_0_disp_cc_mdss_dptx0_p= ixel0_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_PIXEL1_CLK] =3D &mdss_0_disp_cc_mdss_dptx0_pixel= 1_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_PIXEL1_CLK_SRC] =3D &mdss_0_disp_cc_mdss_dptx0_p= ixel1_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_PIXEL2_CLK] =3D &mdss_0_disp_cc_mdss_dptx0_pixel= 2_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_PIXEL2_CLK_SRC] =3D &mdss_0_disp_cc_mdss_dptx0_p= ixel2_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_PIXEL3_CLK] =3D &mdss_0_disp_cc_mdss_dptx0_pixel= 3_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_PIXEL3_CLK_SRC] =3D &mdss_0_disp_cc_mdss_dptx0_p= ixel3_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_USB_ROUTER_LINK_INTF_CLK] =3D + &mdss_0_disp_cc_mdss_dptx0_usb_router_link_intf_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_AUX_CLK] =3D &mdss_0_disp_cc_mdss_dptx1_aux_clk.= clkr, + [MDSS_DISP_CC_MDSS_DPTX1_AUX_CLK_SRC] =3D &mdss_0_disp_cc_mdss_dptx1_aux_= clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_CRYPTO_CLK] =3D &mdss_0_disp_cc_mdss_dptx1_crypt= o_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_LINK_CLK] =3D &mdss_0_disp_cc_mdss_dptx1_link_cl= k.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_LINK_CLK_SRC] =3D &mdss_0_disp_cc_mdss_dptx1_lin= k_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_LINK_DIV_CLK_SRC] =3D + &mdss_0_disp_cc_mdss_dptx1_link_div_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_LINK_INTF_CLK] =3D &mdss_0_disp_cc_mdss_dptx1_li= nk_intf_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_PIXEL0_CLK] =3D &mdss_0_disp_cc_mdss_dptx1_pixel= 0_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_PIXEL0_CLK_SRC] =3D &mdss_0_disp_cc_mdss_dptx1_p= ixel0_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_PIXEL1_CLK] =3D &mdss_0_disp_cc_mdss_dptx1_pixel= 1_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_PIXEL1_CLK_SRC] =3D &mdss_0_disp_cc_mdss_dptx1_p= ixel1_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_PIXEL2_CLK] =3D &mdss_0_disp_cc_mdss_dptx1_pixel= 2_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_PIXEL2_CLK_SRC] =3D &mdss_0_disp_cc_mdss_dptx1_p= ixel2_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_PIXEL3_CLK] =3D &mdss_0_disp_cc_mdss_dptx1_pixel= 3_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_PIXEL3_CLK_SRC] =3D &mdss_0_disp_cc_mdss_dptx1_p= ixel3_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_USB_ROUTER_LINK_INTF_CLK] =3D + &mdss_0_disp_cc_mdss_dptx1_usb_router_link_intf_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX2_AUX_CLK] =3D &mdss_0_disp_cc_mdss_dptx2_aux_clk.= clkr, + [MDSS_DISP_CC_MDSS_DPTX2_AUX_CLK_SRC] =3D &mdss_0_disp_cc_mdss_dptx2_aux_= clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX2_CRYPTO_CLK] =3D &mdss_0_disp_cc_mdss_dptx2_crypt= o_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX2_LINK_CLK] =3D &mdss_0_disp_cc_mdss_dptx2_link_cl= k.clkr, + [MDSS_DISP_CC_MDSS_DPTX2_LINK_CLK_SRC] =3D &mdss_0_disp_cc_mdss_dptx2_lin= k_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX2_LINK_DIV_CLK_SRC] =3D + &mdss_0_disp_cc_mdss_dptx2_link_div_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX2_LINK_INTF_CLK] =3D &mdss_0_disp_cc_mdss_dptx2_li= nk_intf_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX2_PIXEL0_CLK] =3D &mdss_0_disp_cc_mdss_dptx2_pixel= 0_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX2_PIXEL0_CLK_SRC] =3D &mdss_0_disp_cc_mdss_dptx2_p= ixel0_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX2_PIXEL1_CLK] =3D &mdss_0_disp_cc_mdss_dptx2_pixel= 1_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX2_PIXEL1_CLK_SRC] =3D &mdss_0_disp_cc_mdss_dptx2_p= ixel1_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX3_AUX_CLK] =3D &mdss_0_disp_cc_mdss_dptx3_aux_clk.= clkr, + [MDSS_DISP_CC_MDSS_DPTX3_AUX_CLK_SRC] =3D &mdss_0_disp_cc_mdss_dptx3_aux_= clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX3_CRYPTO_CLK] =3D &mdss_0_disp_cc_mdss_dptx3_crypt= o_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX3_LINK_CLK] =3D &mdss_0_disp_cc_mdss_dptx3_link_cl= k.clkr, + [MDSS_DISP_CC_MDSS_DPTX3_LINK_CLK_SRC] =3D &mdss_0_disp_cc_mdss_dptx3_lin= k_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX3_LINK_DIV_CLK_SRC] =3D + &mdss_0_disp_cc_mdss_dptx3_link_div_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX3_LINK_INTF_CLK] =3D &mdss_0_disp_cc_mdss_dptx3_li= nk_intf_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX3_PIXEL0_CLK] =3D &mdss_0_disp_cc_mdss_dptx3_pixel= 0_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX3_PIXEL0_CLK_SRC] =3D &mdss_0_disp_cc_mdss_dptx3_p= ixel0_clk_src.clkr, + [MDSS_DISP_CC_MDSS_ESC0_CLK] =3D &mdss_0_disp_cc_mdss_esc0_clk.clkr, + [MDSS_DISP_CC_MDSS_ESC0_CLK_SRC] =3D &mdss_0_disp_cc_mdss_esc0_clk_src.cl= kr, + [MDSS_DISP_CC_MDSS_ESC1_CLK] =3D &mdss_0_disp_cc_mdss_esc1_clk.clkr, + [MDSS_DISP_CC_MDSS_ESC1_CLK_SRC] =3D &mdss_0_disp_cc_mdss_esc1_clk_src.cl= kr, + [MDSS_DISP_CC_MDSS_MDP1_CLK] =3D &mdss_0_disp_cc_mdss_mdp1_clk.clkr, + [MDSS_DISP_CC_MDSS_MDP_CLK] =3D &mdss_0_disp_cc_mdss_mdp_clk.clkr, + [MDSS_DISP_CC_MDSS_MDP_CLK_SRC] =3D &mdss_0_disp_cc_mdss_mdp_clk_src.clkr, + [MDSS_DISP_CC_MDSS_MDP_LUT1_CLK] =3D &mdss_0_disp_cc_mdss_mdp_lut1_clk.cl= kr, + [MDSS_DISP_CC_MDSS_MDP_LUT_CLK] =3D &mdss_0_disp_cc_mdss_mdp_lut_clk.clkr, + [MDSS_DISP_CC_MDSS_NON_GDSC_AHB_CLK] =3D &mdss_0_disp_cc_mdss_non_gdsc_ah= b_clk.clkr, + [MDSS_DISP_CC_MDSS_PCLK0_CLK] =3D &mdss_0_disp_cc_mdss_pclk0_clk.clkr, + [MDSS_DISP_CC_MDSS_PCLK0_CLK_SRC] =3D &mdss_0_disp_cc_mdss_pclk0_clk_src.= clkr, + [MDSS_DISP_CC_MDSS_PCLK1_CLK] =3D &mdss_0_disp_cc_mdss_pclk1_clk.clkr, + [MDSS_DISP_CC_MDSS_PCLK1_CLK_SRC] =3D &mdss_0_disp_cc_mdss_pclk1_clk_src.= clkr, + [MDSS_DISP_CC_MDSS_PCLK2_CLK] =3D &mdss_0_disp_cc_mdss_pclk2_clk.clkr, + [MDSS_DISP_CC_MDSS_PCLK2_CLK_SRC] =3D &mdss_0_disp_cc_mdss_pclk2_clk_src.= clkr, + [MDSS_DISP_CC_MDSS_VSYNC1_CLK] =3D &mdss_0_disp_cc_mdss_vsync1_clk.clkr, + [MDSS_DISP_CC_MDSS_VSYNC_CLK] =3D &mdss_0_disp_cc_mdss_vsync_clk.clkr, + [MDSS_DISP_CC_MDSS_VSYNC_CLK_SRC] =3D &mdss_0_disp_cc_mdss_vsync_clk_src.= clkr, + [MDSS_DISP_CC_PLL0] =3D &mdss_0_disp_cc_pll0.clkr, + [MDSS_DISP_CC_PLL1] =3D &mdss_0_disp_cc_pll1.clkr, + [MDSS_DISP_CC_PLL2] =3D &mdss_0_disp_cc_pll2.clkr, + [MDSS_DISP_CC_PLL3] =3D &mdss_0_disp_cc_pll3.clkr, + [MDSS_DISP_CC_SLEEP_CLK_SRC] =3D &mdss_0_disp_cc_sleep_clk_src.clkr, + [MDSS_DISP_CC_XO_CLK_SRC] =3D &mdss_0_disp_cc_xo_clk_src.clkr, +}; + +static struct gdsc *disp_cc_0_nord_gdscs[] =3D { + [MDSS_DISP_CC_MDSS_CORE_GDSC] =3D &mdss_0_disp_cc_mdss_core_gdsc, + [MDSS_DISP_CC_MDSS_CORE_INT2_GDSC] =3D &mdss_0_disp_cc_mdss_core_int2_gds= c, +}; + +static const struct qcom_reset_map disp_cc_0_nord_resets[] =3D { + [MDSS_DISP_CC_MDSS_CORE_BCR] =3D { 0x8000 }, + [MDSS_DISP_CC_MDSS_CORE_INT2_BCR] =3D { 0xa000 }, + [MDSS_DISP_CC_MDSS_RSCC_BCR] =3D { 0xc000 }, +}; + +static struct clk_alpha_pll *disp_cc_0_nord_plls[] =3D { + &mdss_0_disp_cc_pll0, + &mdss_0_disp_cc_pll1, + &mdss_0_disp_cc_pll2, + &mdss_0_disp_cc_pll3, +}; + +static const u32 disp_cc_0_nord_critical_cbcrs[] =3D { + 0xc00c, /* MDSS_DISP_CC_RSCC_AHB_CLK */ + 0xc008, /* MDSS_DISP_CC_RSCC_VSYNC_CLK */ + 0xe07c, /* MDSS_DISP_CC_SLEEP_CLK */ + 0xe05c, /* MDSS_DISP_CC_XO_CLK */ +}; + +static const struct regmap_config disp_cc_0_nord_regmap_config =3D { + .reg_bits =3D 32, + .reg_stride =3D 4, + .val_bits =3D 32, + .max_register =3D 0x1a00c, + .fast_io =3D true, +}; + +static const struct qcom_cc_driver_data disp_cc_0_nord_driver_data =3D { + .alpha_plls =3D disp_cc_0_nord_plls, + .num_alpha_plls =3D ARRAY_SIZE(disp_cc_0_nord_plls), + .clk_cbcrs =3D disp_cc_0_nord_critical_cbcrs, + .num_clk_cbcrs =3D ARRAY_SIZE(disp_cc_0_nord_critical_cbcrs), +}; + +static const struct qcom_cc_desc disp_cc_0_nord_desc =3D { + .config =3D &disp_cc_0_nord_regmap_config, + .clks =3D disp_cc_0_nord_clocks, + .num_clks =3D ARRAY_SIZE(disp_cc_0_nord_clocks), + .resets =3D disp_cc_0_nord_resets, + .num_resets =3D ARRAY_SIZE(disp_cc_0_nord_resets), + .gdscs =3D disp_cc_0_nord_gdscs, + .num_gdscs =3D ARRAY_SIZE(disp_cc_0_nord_gdscs), + .use_rpm =3D true, + .driver_data =3D &disp_cc_0_nord_driver_data, +}; + +static const struct of_device_id disp_cc_0_nord_match_table[] =3D { + { .compatible =3D "qcom,nord-dispcc0" }, + { } +}; +MODULE_DEVICE_TABLE(of, disp_cc_0_nord_match_table); + +static int disp_cc_0_nord_probe(struct platform_device *pdev) +{ + return qcom_cc_probe(pdev, &disp_cc_0_nord_desc); +} + +static struct platform_driver disp_cc_0_nord_driver =3D { + .probe =3D disp_cc_0_nord_probe, + .driver =3D { + .name =3D "dispcc0-nord", + .of_match_table =3D disp_cc_0_nord_match_table, + }, +}; + +module_platform_driver(disp_cc_0_nord_driver); + +MODULE_DESCRIPTION("QTI DISPCC0 NORD Driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/clk/qcom/dispcc1-nord.c b/drivers/clk/qcom/dispcc1-nor= d.c new file mode 100644 index 0000000000000000000000000000000000000000..6b4efa735b9e7ab42937ec5a52f= d3c1366f4adf5 --- /dev/null +++ b/drivers/clk/qcom/dispcc1-nord.c @@ -0,0 +1,2004 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + */ + +#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 "gdsc.h" +#include "reset.h" + +enum { + DT_BI_TCXO, + DT_BI_TCXO_AO, + DT_AHB_CLK, + DT_SLEEP_CLK, + + DT_DSI0_PHY_PLL_OUT_BYTECLK, + DT_DSI0_PHY_PLL_OUT_DSICLK, + DT_DSI1_PHY_PLL_OUT_BYTECLK, + DT_DSI1_PHY_PLL_OUT_DSICLK, + + DT_DP0_PHY_PLL_LINK_CLK, + DT_DP0_PHY_PLL_VCO_DIV_CLK, + DT_DP1_PHY_PLL_LINK_CLK, + DT_DP1_PHY_PLL_VCO_DIV_CLK, + DT_DP2_PHY_PLL_LINK_CLK, + DT_DP2_PHY_PLL_VCO_DIV_CLK, + DT_DP3_PHY_PLL_LINK_CLK, + DT_DP3_PHY_PLL_VCO_DIV_CLK, +}; + +enum { + P_BI_TCXO, + P_MDSS_1_DISP_CC_PLL0_OUT_MAIN, + P_MDSS_1_DISP_CC_PLL1_OUT_EVEN, + P_MDSS_1_DISP_CC_PLL1_OUT_MAIN, + P_MDSS_1_DISP_CC_PLL2_OUT_MAIN, + P_MDSS_1_DISP_CC_PLL3_OUT_MAIN, + P_DP0_PHY_PLL_LINK_CLK, + P_DP0_PHY_PLL_VCO_DIV_CLK, + P_DP1_PHY_PLL_LINK_CLK, + P_DP1_PHY_PLL_VCO_DIV_CLK, + P_DP2_PHY_PLL_LINK_CLK, + P_DP2_PHY_PLL_VCO_DIV_CLK, + P_DP3_PHY_PLL_LINK_CLK, + P_DP3_PHY_PLL_VCO_DIV_CLK, + P_DSI0_PHY_PLL_OUT_BYTECLK, + P_DSI0_PHY_PLL_OUT_DSICLK, + P_DSI1_PHY_PLL_OUT_BYTECLK, + P_DSI1_PHY_PLL_OUT_DSICLK, + P_SLEEP_CLK, +}; + +static const struct pll_vco lucid_ole_vco[] =3D { + { 249600000, 2300000000, 0 }, +}; + +static const struct pll_vco zonda_ole_vco[] =3D { + { 700000000, 3600000000, 0 }, +}; + +/* 900.0 MHz Configuration */ +static const struct alpha_pll_config mdss_1_disp_cc_pll0_config =3D { + .l =3D 0x2e, + .alpha =3D 0xe000, + .config_ctl_val =3D 0x20485699, + .config_ctl_hi_val =3D 0x00182261, + .config_ctl_hi1_val =3D 0x82aa299c, + .test_ctl_val =3D 0x00000000, + .test_ctl_hi_val =3D 0x00000003, + .test_ctl_hi1_val =3D 0x00009000, + .test_ctl_hi2_val =3D 0x00000034, + .user_ctl_val =3D 0x00000000, + .user_ctl_hi_val =3D 0x00400005, +}; + +static struct clk_alpha_pll mdss_1_disp_cc_pll0 =3D { + .offset =3D 0x0, + .config =3D &mdss_1_disp_cc_pll0_config, + .vco_table =3D lucid_ole_vco, + .num_vco =3D ARRAY_SIZE(lucid_ole_vco), + .regs =3D clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE], + .clkr =3D { + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_pll0", + .parent_data =3D &(const struct clk_parent_data) { + .index =3D DT_BI_TCXO, + }, + .num_parents =3D 1, + .ops =3D &clk_alpha_pll_lucid_evo_ops, + }, + }, +}; + +/* 600.0 MHz Configuration */ +static const struct alpha_pll_config mdss_1_disp_cc_pll1_config =3D { + .l =3D 0x1f, + .alpha =3D 0x4000, + .config_ctl_val =3D 0x20485699, + .config_ctl_hi_val =3D 0x00182261, + .config_ctl_hi1_val =3D 0x82aa299c, + .test_ctl_val =3D 0x00000000, + .test_ctl_hi_val =3D 0x00000003, + .test_ctl_hi1_val =3D 0x00009000, + .test_ctl_hi2_val =3D 0x00000034, + .user_ctl_val =3D 0x00000000, + .user_ctl_hi_val =3D 0x00400005, +}; + +static struct clk_alpha_pll mdss_1_disp_cc_pll1 =3D { + .offset =3D 0x1000, + .config =3D &mdss_1_disp_cc_pll1_config, + .vco_table =3D lucid_ole_vco, + .num_vco =3D ARRAY_SIZE(lucid_ole_vco), + .regs =3D clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE], + .clkr =3D { + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_pll1", + .parent_data =3D &(const struct clk_parent_data) { + .index =3D DT_BI_TCXO, + }, + .num_parents =3D 1, + .ops =3D &clk_alpha_pll_lucid_evo_ops, + }, + }, +}; + +/* 1363.2 MHz Configuration */ +static const struct alpha_pll_config mdss_1_disp_cc_pll2_config =3D { + .l =3D 0x47, + .alpha =3D 0x0, + .config_ctl_val =3D 0x08240800, + .config_ctl_hi_val =3D 0x05008001, + .config_ctl_hi1_val =3D 0x00000000, + .config_ctl_hi2_val =3D 0x00000000, + .user_ctl_val =3D 0x00000000, + .user_ctl_hi_val =3D 0x00000080, +}; + +static struct clk_alpha_pll mdss_1_disp_cc_pll2 =3D { + .offset =3D 0x2000, + .config =3D &mdss_1_disp_cc_pll2_config, + .vco_table =3D zonda_ole_vco, + .num_vco =3D ARRAY_SIZE(zonda_ole_vco), + .regs =3D clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_ZONDA_OLE], + .clkr =3D { + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_pll2", + .parent_data =3D &(const struct clk_parent_data) { + .index =3D DT_BI_TCXO, + }, + .num_parents =3D 1, + .ops =3D &clk_alpha_pll_zonda_ole_ops, + }, + }, +}; + +/* 1363.2 MHz Configuration */ +static const struct alpha_pll_config mdss_1_disp_cc_pll3_config =3D { + .l =3D 0x47, + .alpha =3D 0x0, + .config_ctl_val =3D 0x08240800, + .config_ctl_hi_val =3D 0x05008001, + .config_ctl_hi1_val =3D 0x00000000, + .config_ctl_hi2_val =3D 0x00000000, + .user_ctl_val =3D 0x00000000, + .user_ctl_hi_val =3D 0x00000080, +}; + +static struct clk_alpha_pll mdss_1_disp_cc_pll3 =3D { + .offset =3D 0x3000, + .config =3D &mdss_1_disp_cc_pll3_config, + .vco_table =3D zonda_ole_vco, + .num_vco =3D ARRAY_SIZE(zonda_ole_vco), + .regs =3D clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_ZONDA_OLE], + .clkr =3D { + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_pll3", + .parent_data =3D &(const struct clk_parent_data) { + .index =3D DT_BI_TCXO, + }, + .num_parents =3D 1, + .ops =3D &clk_alpha_pll_zonda_ole_ops, + }, + }, +}; + +static const struct parent_map disp_cc_1_parent_map_0[] =3D { + { P_BI_TCXO, 0 }, + { P_MDSS_1_DISP_CC_PLL2_OUT_MAIN, 1 }, + { P_DP0_PHY_PLL_VCO_DIV_CLK, 2 }, + { P_DP3_PHY_PLL_VCO_DIV_CLK, 3 }, + { P_DP1_PHY_PLL_VCO_DIV_CLK, 4 }, + { P_MDSS_1_DISP_CC_PLL3_OUT_MAIN, 5 }, + { P_DP2_PHY_PLL_VCO_DIV_CLK, 6 }, +}; + +static const struct clk_parent_data disp_cc_1_parent_data_0[] =3D { + { .index =3D DT_BI_TCXO }, + { .hw =3D &mdss_1_disp_cc_pll2.clkr.hw }, + { .index =3D DT_DP0_PHY_PLL_VCO_DIV_CLK }, + { .index =3D DT_DP3_PHY_PLL_VCO_DIV_CLK }, + { .index =3D DT_DP1_PHY_PLL_VCO_DIV_CLK }, + { .hw =3D &mdss_1_disp_cc_pll3.clkr.hw }, + { .index =3D DT_DP2_PHY_PLL_VCO_DIV_CLK }, +}; + +static const struct parent_map disp_cc_1_parent_map_1[] =3D { + { P_BI_TCXO, 0 }, +}; + +static const struct clk_parent_data disp_cc_1_parent_data_1[] =3D { + { .index =3D DT_BI_TCXO }, +}; + +static const struct parent_map disp_cc_1_parent_map_2[] =3D { + { P_BI_TCXO, 0 }, + { P_DSI0_PHY_PLL_OUT_DSICLK, 1 }, + { P_DSI0_PHY_PLL_OUT_BYTECLK, 2 }, + { P_DSI1_PHY_PLL_OUT_DSICLK, 3 }, + { P_DSI1_PHY_PLL_OUT_BYTECLK, 4 }, +}; + +static const struct clk_parent_data disp_cc_1_parent_data_2[] =3D { + { .index =3D DT_BI_TCXO }, + { .index =3D DT_DSI0_PHY_PLL_OUT_DSICLK }, + { .index =3D DT_DSI0_PHY_PLL_OUT_BYTECLK }, + { .index =3D DT_DSI1_PHY_PLL_OUT_DSICLK }, + { .index =3D DT_DSI1_PHY_PLL_OUT_BYTECLK }, +}; + +static const struct parent_map disp_cc_1_parent_map_3[] =3D { + { P_BI_TCXO, 0 }, + { P_MDSS_1_DISP_CC_PLL2_OUT_MAIN, 1 }, + { P_DP3_PHY_PLL_VCO_DIV_CLK, 3 }, + { P_MDSS_1_DISP_CC_PLL3_OUT_MAIN, 5 }, + { P_DP2_PHY_PLL_VCO_DIV_CLK, 6 }, +}; + +static const struct clk_parent_data disp_cc_1_parent_data_3[] =3D { + { .index =3D DT_BI_TCXO }, + { .hw =3D &mdss_1_disp_cc_pll2.clkr.hw }, + { .index =3D DT_DP3_PHY_PLL_VCO_DIV_CLK }, + { .hw =3D &mdss_1_disp_cc_pll3.clkr.hw }, + { .index =3D DT_DP2_PHY_PLL_VCO_DIV_CLK }, +}; + +static const struct parent_map disp_cc_1_parent_map_4[] =3D { + { P_BI_TCXO, 0 }, + { P_DP0_PHY_PLL_LINK_CLK, 1 }, + { P_DP1_PHY_PLL_LINK_CLK, 2 }, + { P_DP2_PHY_PLL_LINK_CLK, 3 }, + { P_DP3_PHY_PLL_LINK_CLK, 4 }, +}; + +static const struct clk_parent_data disp_cc_1_parent_data_4[] =3D { + { .index =3D DT_BI_TCXO }, + { .index =3D DT_DP0_PHY_PLL_LINK_CLK }, + { .index =3D DT_DP1_PHY_PLL_LINK_CLK }, + { .index =3D DT_DP2_PHY_PLL_LINK_CLK }, + { .index =3D DT_DP3_PHY_PLL_LINK_CLK }, +}; + +static const struct parent_map disp_cc_1_parent_map_5[] =3D { + { P_BI_TCXO, 0 }, + { P_DP2_PHY_PLL_LINK_CLK, 3 }, + { P_DP3_PHY_PLL_LINK_CLK, 4 }, +}; + +static const struct clk_parent_data disp_cc_1_parent_data_5[] =3D { + { .index =3D DT_BI_TCXO }, + { .index =3D DT_DP2_PHY_PLL_LINK_CLK }, + { .index =3D DT_DP3_PHY_PLL_LINK_CLK }, +}; + +static const struct parent_map disp_cc_1_parent_map_6[] =3D { + { P_BI_TCXO, 0 }, + { P_DSI0_PHY_PLL_OUT_BYTECLK, 2 }, + { P_DSI1_PHY_PLL_OUT_BYTECLK, 4 }, +}; + +static const struct clk_parent_data disp_cc_1_parent_data_6[] =3D { + { .index =3D DT_BI_TCXO }, + { .index =3D DT_DSI0_PHY_PLL_OUT_BYTECLK }, + { .index =3D DT_DSI1_PHY_PLL_OUT_BYTECLK }, +}; + +static const struct parent_map disp_cc_1_parent_map_7[] =3D { + { P_BI_TCXO, 0 }, + { P_MDSS_1_DISP_CC_PLL1_OUT_MAIN, 4 }, + { P_MDSS_1_DISP_CC_PLL1_OUT_EVEN, 6 }, +}; + +static const struct clk_parent_data disp_cc_1_parent_data_7[] =3D { + { .index =3D DT_BI_TCXO }, + { .hw =3D &mdss_1_disp_cc_pll1.clkr.hw }, + { .hw =3D &mdss_1_disp_cc_pll1.clkr.hw }, +}; + +static const struct parent_map disp_cc_1_parent_map_8[] =3D { + { P_BI_TCXO, 0 }, + { P_MDSS_1_DISP_CC_PLL0_OUT_MAIN, 1 }, + { P_MDSS_1_DISP_CC_PLL1_OUT_MAIN, 4 }, + { P_MDSS_1_DISP_CC_PLL1_OUT_EVEN, 6 }, +}; + +static const struct clk_parent_data disp_cc_1_parent_data_8[] =3D { + { .index =3D DT_BI_TCXO }, + { .hw =3D &mdss_1_disp_cc_pll0.clkr.hw }, + { .hw =3D &mdss_1_disp_cc_pll1.clkr.hw }, + { .hw =3D &mdss_1_disp_cc_pll1.clkr.hw }, +}; + +static const struct parent_map disp_cc_1_parent_map_9[] =3D { + { P_SLEEP_CLK, 0 }, +}; + +static const struct clk_parent_data disp_cc_1_parent_data_9[] =3D { + { .index =3D DT_SLEEP_CLK }, +}; + +static const struct freq_tbl ftbl_mdss_1_disp_cc_mdss_ahb_clk_src[] =3D { + F(37500000, P_MDSS_1_DISP_CC_PLL1_OUT_MAIN, 16, 0, 0), + F(75000000, P_MDSS_1_DISP_CC_PLL1_OUT_MAIN, 8, 0, 0), + { } +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_ahb_clk_src =3D { + .cmd_rcgr =3D 0x837c, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_7, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_ahb_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_ahb_clk_src", + .parent_data =3D disp_cc_1_parent_data_7, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_7), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_shared_ops, + }, +}; + +static const struct freq_tbl ftbl_mdss_1_disp_cc_mdss_byte0_clk_src[] =3D { + F(19200000, P_BI_TCXO, 1, 0, 0), + { } +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_byte0_clk_src =3D { + .cmd_rcgr =3D 0x813c, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_2, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_byte0_clk_src", + .parent_data =3D disp_cc_1_parent_data_2, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_2), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_byte2_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_byte1_clk_src =3D { + .cmd_rcgr =3D 0x8158, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_2, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_byte1_clk_src", + .parent_data =3D disp_cc_1_parent_data_2, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_2), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_byte2_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx0_aux_clk_src =3D { + .cmd_rcgr =3D 0x8220, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_1, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx0_aux_clk_src", + .parent_data =3D disp_cc_1_parent_data_1, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_1), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_shared_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx0_link_clk_src =3D { + .cmd_rcgr =3D 0x81a4, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_4, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx0_link_clk_src", + .parent_data =3D disp_cc_1_parent_data_4, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_4), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_byte2_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx0_pixel0_clk_src =3D { + .cmd_rcgr =3D 0x81c0, + .mnd_width =3D 16, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_0, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx0_pixel0_clk_src", + .parent_data =3D disp_cc_1_parent_data_0, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_0), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_dp_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx0_pixel1_clk_src =3D { + .cmd_rcgr =3D 0x81d8, + .mnd_width =3D 16, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_0, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx0_pixel1_clk_src", + .parent_data =3D disp_cc_1_parent_data_0, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_0), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_dp_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx0_pixel2_clk_src =3D { + .cmd_rcgr =3D 0x81f0, + .mnd_width =3D 16, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_0, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx0_pixel2_clk_src", + .parent_data =3D disp_cc_1_parent_data_0, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_0), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_dp_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx0_pixel3_clk_src =3D { + .cmd_rcgr =3D 0x8208, + .mnd_width =3D 16, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_0, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx0_pixel3_clk_src", + .parent_data =3D disp_cc_1_parent_data_0, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_0), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_dp_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx1_aux_clk_src =3D { + .cmd_rcgr =3D 0x82b4, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_1, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx1_aux_clk_src", + .parent_data =3D disp_cc_1_parent_data_1, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_1), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_shared_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx1_link_clk_src =3D { + .cmd_rcgr =3D 0x8298, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_4, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx1_link_clk_src", + .parent_data =3D disp_cc_1_parent_data_4, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_4), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_byte2_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx1_pixel0_clk_src =3D { + .cmd_rcgr =3D 0x8238, + .mnd_width =3D 16, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_0, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx1_pixel0_clk_src", + .parent_data =3D disp_cc_1_parent_data_0, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_0), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_dp_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx1_pixel1_clk_src =3D { + .cmd_rcgr =3D 0x8250, + .mnd_width =3D 16, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_0, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx1_pixel1_clk_src", + .parent_data =3D disp_cc_1_parent_data_0, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_0), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_dp_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx1_pixel2_clk_src =3D { + .cmd_rcgr =3D 0x8268, + .mnd_width =3D 16, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_0, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx1_pixel2_clk_src", + .parent_data =3D disp_cc_1_parent_data_0, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_0), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_dp_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx1_pixel3_clk_src =3D { + .cmd_rcgr =3D 0x8280, + .mnd_width =3D 16, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_0, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx1_pixel3_clk_src", + .parent_data =3D disp_cc_1_parent_data_0, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_0), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_dp_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx2_aux_clk_src =3D { + .cmd_rcgr =3D 0x8318, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_1, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx2_aux_clk_src", + .parent_data =3D disp_cc_1_parent_data_1, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_1), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_shared_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx2_link_clk_src =3D { + .cmd_rcgr =3D 0x82cc, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_5, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx2_link_clk_src", + .parent_data =3D disp_cc_1_parent_data_5, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_5), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_byte2_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx2_pixel0_clk_src =3D { + .cmd_rcgr =3D 0x82e8, + .mnd_width =3D 16, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_3, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx2_pixel0_clk_src", + .parent_data =3D disp_cc_1_parent_data_3, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_3), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_dp_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx2_pixel1_clk_src =3D { + .cmd_rcgr =3D 0x8300, + .mnd_width =3D 16, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_3, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx2_pixel1_clk_src", + .parent_data =3D disp_cc_1_parent_data_3, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_3), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_dp_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx3_aux_clk_src =3D { + .cmd_rcgr =3D 0x8364, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_1, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx3_aux_clk_src", + .parent_data =3D disp_cc_1_parent_data_1, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_1), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_shared_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx3_link_clk_src =3D { + .cmd_rcgr =3D 0x8348, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_5, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx3_link_clk_src", + .parent_data =3D disp_cc_1_parent_data_5, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_5), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_byte2_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx3_pixel0_clk_src =3D { + .cmd_rcgr =3D 0x8330, + .mnd_width =3D 16, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_3, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx3_pixel0_clk_src", + .parent_data =3D disp_cc_1_parent_data_3, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_3), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_dp_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_esc0_clk_src =3D { + .cmd_rcgr =3D 0x8174, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_6, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_esc0_clk_src", + .parent_data =3D disp_cc_1_parent_data_6, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_6), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_shared_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_esc1_clk_src =3D { + .cmd_rcgr =3D 0x818c, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_6, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_esc1_clk_src", + .parent_data =3D disp_cc_1_parent_data_6, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_6), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_shared_ops, + }, +}; + +static const struct freq_tbl ftbl_mdss_1_disp_cc_mdss_mdp_clk_src[] =3D { + F(300000000, P_MDSS_1_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0), + F(417000000, P_MDSS_1_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0), + F(532000000, P_MDSS_1_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0), + F(650000000, P_MDSS_1_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0), + F(710000000, P_MDSS_1_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0), + { } +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_mdp_clk_src =3D { + .cmd_rcgr =3D 0x810c, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_8, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_mdp_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_mdp_clk_src", + .parent_data =3D disp_cc_1_parent_data_8, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_8), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_shared_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_pclk0_clk_src =3D { + .cmd_rcgr =3D 0x80c4, + .mnd_width =3D 8, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_2, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_pclk0_clk_src", + .parent_data =3D disp_cc_1_parent_data_2, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_2), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_pixel_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_pclk1_clk_src =3D { + .cmd_rcgr =3D 0x80dc, + .mnd_width =3D 8, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_2, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_pclk1_clk_src", + .parent_data =3D disp_cc_1_parent_data_2, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_2), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_pixel_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_pclk2_clk_src =3D { + .cmd_rcgr =3D 0x80f4, + .mnd_width =3D 8, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_2, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_pclk2_clk_src", + .parent_data =3D disp_cc_1_parent_data_2, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_2), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_pixel_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_mdss_vsync_clk_src =3D { + .cmd_rcgr =3D 0x8124, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_1, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_vsync_clk_src", + .parent_data =3D disp_cc_1_parent_data_1, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_1), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_shared_ops, + }, +}; + +static const struct freq_tbl ftbl_mdss_1_disp_cc_sleep_clk_src[] =3D { + F(32000, P_SLEEP_CLK, 1, 0, 0), + { } +}; + +static struct clk_rcg2 mdss_1_disp_cc_sleep_clk_src =3D { + .cmd_rcgr =3D 0xe064, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_9, + .freq_tbl =3D ftbl_mdss_1_disp_cc_sleep_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_sleep_clk_src", + .parent_data =3D disp_cc_1_parent_data_9, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_9), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_ops, + }, +}; + +static struct clk_rcg2 mdss_1_disp_cc_xo_clk_src =3D { + .cmd_rcgr =3D 0xe044, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D disp_cc_1_parent_map_1, + .freq_tbl =3D ftbl_mdss_1_disp_cc_mdss_byte0_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_xo_clk_src", + .parent_data =3D disp_cc_1_parent_data_1, + .num_parents =3D ARRAY_SIZE(disp_cc_1_parent_data_1), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_ops, + }, +}; + +static struct clk_regmap_div mdss_1_disp_cc_mdss_byte0_div_clk_src =3D { + .reg =3D 0x8154, + .shift =3D 0, + .width =3D 4, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_byte0_div_clk_src", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_byte0_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .ops =3D &clk_regmap_div_ro_ops, + }, +}; + +static struct clk_regmap_div mdss_1_disp_cc_mdss_byte1_div_clk_src =3D { + .reg =3D 0x8170, + .shift =3D 0, + .width =3D 4, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_byte1_div_clk_src", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_byte1_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .ops =3D &clk_regmap_div_ro_ops, + }, +}; + +static struct clk_regmap_div mdss_1_disp_cc_mdss_dptx0_link_div_clk_src = =3D { + .reg =3D 0x81bc, + .shift =3D 0, + .width =3D 4, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx0_link_div_clk_src", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx0_link_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_regmap_div_ro_ops, + }, +}; + +static struct clk_regmap_div mdss_1_disp_cc_mdss_dptx1_link_div_clk_src = =3D { + .reg =3D 0x82b0, + .shift =3D 0, + .width =3D 4, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx1_link_div_clk_src", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx1_link_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_regmap_div_ro_ops, + }, +}; + +static struct clk_regmap_div mdss_1_disp_cc_mdss_dptx2_link_div_clk_src = =3D { + .reg =3D 0x82e4, + .shift =3D 0, + .width =3D 4, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx2_link_div_clk_src", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx2_link_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_regmap_div_ro_ops, + }, +}; + +static struct clk_regmap_div mdss_1_disp_cc_mdss_dptx3_link_div_clk_src = =3D { + .reg =3D 0x8360, + .shift =3D 0, + .width =3D 4, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx3_link_div_clk_src", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx3_link_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_regmap_div_ro_ops, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_accu_shift_clk =3D { + .halt_reg =3D 0xe060, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0xe060, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_accu_shift_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_xo_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_ahb1_clk =3D { + .halt_reg =3D 0xa028, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0xa028, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_ahb1_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_ahb_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_ahb_clk =3D { + .halt_reg =3D 0x80c0, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x80c0, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_ahb_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_ahb_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_byte0_clk =3D { + .halt_reg =3D 0x8034, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8034, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_byte0_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_byte0_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_byte0_intf_clk =3D { + .halt_reg =3D 0x8038, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8038, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_byte0_intf_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_byte0_div_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_byte1_clk =3D { + .halt_reg =3D 0x803c, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x803c, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_byte1_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_byte1_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_byte1_intf_clk =3D { + .halt_reg =3D 0x8040, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8040, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_byte1_intf_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_byte1_div_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx0_aux_clk =3D { + .halt_reg =3D 0x806c, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x806c, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx0_aux_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx0_aux_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx0_crypto_clk =3D { + .halt_reg =3D 0x8058, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0x8058, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx0_crypto_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx0_link_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx0_link_clk =3D { + .halt_reg =3D 0x804c, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x804c, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx0_link_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx0_link_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx0_link_intf_clk =3D { + .halt_reg =3D 0x8054, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8054, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx0_link_intf_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx0_link_div_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx0_pixel0_clk =3D { + .halt_reg =3D 0x805c, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x805c, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx0_pixel0_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx0_pixel0_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx0_pixel1_clk =3D { + .halt_reg =3D 0x8060, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8060, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx0_pixel1_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx0_pixel1_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx0_pixel2_clk =3D { + .halt_reg =3D 0x8064, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8064, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx0_pixel2_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx0_pixel2_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx0_pixel3_clk =3D { + .halt_reg =3D 0x8068, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8068, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx0_pixel3_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx0_pixel3_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx0_usb_router_link_intf_cl= k =3D { + .halt_reg =3D 0x8050, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8050, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx0_usb_router_link_intf_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx0_link_div_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx1_aux_clk =3D { + .halt_reg =3D 0x8090, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8090, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx1_aux_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx1_aux_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx1_crypto_clk =3D { + .halt_reg =3D 0x808c, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0x808c, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx1_crypto_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx1_link_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx1_link_clk =3D { + .halt_reg =3D 0x8080, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8080, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx1_link_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx1_link_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx1_link_intf_clk =3D { + .halt_reg =3D 0x8088, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8088, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx1_link_intf_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx1_link_div_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx1_pixel0_clk =3D { + .halt_reg =3D 0x8070, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8070, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx1_pixel0_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx1_pixel0_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx1_pixel1_clk =3D { + .halt_reg =3D 0x8074, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8074, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx1_pixel1_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx1_pixel1_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx1_pixel2_clk =3D { + .halt_reg =3D 0x8078, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8078, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx1_pixel2_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx1_pixel2_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx1_pixel3_clk =3D { + .halt_reg =3D 0x807c, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x807c, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx1_pixel3_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx1_pixel3_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx1_usb_router_link_intf_cl= k =3D { + .halt_reg =3D 0x8084, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8084, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx1_usb_router_link_intf_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx1_link_div_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx2_aux_clk =3D { + .halt_reg =3D 0x80a8, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x80a8, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx2_aux_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx2_aux_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx2_crypto_clk =3D { + .halt_reg =3D 0x80a4, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0x80a4, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx2_crypto_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx2_link_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx2_link_clk =3D { + .halt_reg =3D 0x809c, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x809c, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx2_link_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx2_link_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx2_link_intf_clk =3D { + .halt_reg =3D 0x80a0, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x80a0, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx2_link_intf_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx2_link_div_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx2_pixel0_clk =3D { + .halt_reg =3D 0x8094, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8094, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx2_pixel0_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx2_pixel0_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx2_pixel1_clk =3D { + .halt_reg =3D 0x8098, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8098, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx2_pixel1_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx2_pixel1_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx3_aux_clk =3D { + .halt_reg =3D 0x80b8, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x80b8, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx3_aux_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx3_aux_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx3_crypto_clk =3D { + .halt_reg =3D 0x80bc, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0x80bc, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx3_crypto_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx3_link_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx3_link_clk =3D { + .halt_reg =3D 0x80b0, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x80b0, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx3_link_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx3_link_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx3_link_intf_clk =3D { + .halt_reg =3D 0x80b4, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x80b4, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx3_link_intf_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx3_link_div_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_dptx3_pixel0_clk =3D { + .halt_reg =3D 0x80ac, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x80ac, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_dptx3_pixel0_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_dptx3_pixel0_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_esc0_clk =3D { + .halt_reg =3D 0x8044, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8044, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_esc0_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_esc0_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_esc1_clk =3D { + .halt_reg =3D 0x8048, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8048, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_esc1_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_esc1_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_mdp1_clk =3D { + .halt_reg =3D 0xa004, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0xa004, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_mdp1_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_mdp_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_mdp_clk =3D { + .halt_reg =3D 0x8010, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8010, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_mdp_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_mdp_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_mdp_lut1_clk =3D { + .halt_reg =3D 0xa014, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0xa014, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_mdp_lut1_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_mdp_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_mdp_lut_clk =3D { + .halt_reg =3D 0x8020, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0x8020, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_mdp_lut_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_mdp_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_non_gdsc_ahb_clk =3D { + .halt_reg =3D 0xc004, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0xc004, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_non_gdsc_ahb_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_ahb_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_pclk0_clk =3D { + .halt_reg =3D 0x8004, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8004, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_pclk0_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_pclk0_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_pclk1_clk =3D { + .halt_reg =3D 0x8008, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8008, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_pclk1_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_pclk1_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_pclk2_clk =3D { + .halt_reg =3D 0x800c, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x800c, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_pclk2_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_pclk2_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_vsync1_clk =3D { + .halt_reg =3D 0xa024, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0xa024, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_vsync1_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_vsync_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch mdss_1_disp_cc_mdss_vsync_clk =3D { + .halt_reg =3D 0x8030, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x8030, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "mdss_1_disp_cc_mdss_vsync_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &mdss_1_disp_cc_mdss_vsync_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct gdsc mdss_1_disp_cc_mdss_core_gdsc =3D { + .gdscr =3D 0x9000, + .en_rest_wait_val =3D 0x2, + .en_few_wait_val =3D 0x2, + .clk_dis_wait_val =3D 0xf, + .pd =3D { + .name =3D "mdss_1_disp_cc_mdss_core_gdsc", + }, + .pwrsts =3D PWRSTS_OFF_ON, + .flags =3D HW_CTRL_TRIGGER | POLL_CFG_GDSCR | RETAIN_FF_ENABLE, +}; + +static struct gdsc mdss_1_disp_cc_mdss_core_int2_gdsc =3D { + .gdscr =3D 0xb000, + .en_rest_wait_val =3D 0x2, + .en_few_wait_val =3D 0x2, + .clk_dis_wait_val =3D 0xf, + .pd =3D { + .name =3D "mdss_1_disp_cc_mdss_core_int2_gdsc", + }, + .pwrsts =3D PWRSTS_OFF_ON, + .flags =3D HW_CTRL_TRIGGER | POLL_CFG_GDSCR | RETAIN_FF_ENABLE, +}; + +static struct clk_regmap *disp_cc_1_nord_clocks[] =3D { + [MDSS_DISP_CC_MDSS_ACCU_SHIFT_CLK] =3D &mdss_1_disp_cc_mdss_accu_shift_cl= k.clkr, + [MDSS_DISP_CC_MDSS_AHB1_CLK] =3D &mdss_1_disp_cc_mdss_ahb1_clk.clkr, + [MDSS_DISP_CC_MDSS_AHB_CLK] =3D &mdss_1_disp_cc_mdss_ahb_clk.clkr, + [MDSS_DISP_CC_MDSS_AHB_CLK_SRC] =3D &mdss_1_disp_cc_mdss_ahb_clk_src.clkr, + [MDSS_DISP_CC_MDSS_BYTE0_CLK] =3D &mdss_1_disp_cc_mdss_byte0_clk.clkr, + [MDSS_DISP_CC_MDSS_BYTE0_CLK_SRC] =3D &mdss_1_disp_cc_mdss_byte0_clk_src.= clkr, + [MDSS_DISP_CC_MDSS_BYTE0_DIV_CLK_SRC] =3D &mdss_1_disp_cc_mdss_byte0_div_= clk_src.clkr, + [MDSS_DISP_CC_MDSS_BYTE0_INTF_CLK] =3D &mdss_1_disp_cc_mdss_byte0_intf_cl= k.clkr, + [MDSS_DISP_CC_MDSS_BYTE1_CLK] =3D &mdss_1_disp_cc_mdss_byte1_clk.clkr, + [MDSS_DISP_CC_MDSS_BYTE1_CLK_SRC] =3D &mdss_1_disp_cc_mdss_byte1_clk_src.= clkr, + [MDSS_DISP_CC_MDSS_BYTE1_DIV_CLK_SRC] =3D &mdss_1_disp_cc_mdss_byte1_div_= clk_src.clkr, + [MDSS_DISP_CC_MDSS_BYTE1_INTF_CLK] =3D &mdss_1_disp_cc_mdss_byte1_intf_cl= k.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_AUX_CLK] =3D &mdss_1_disp_cc_mdss_dptx0_aux_clk.= clkr, + [MDSS_DISP_CC_MDSS_DPTX0_AUX_CLK_SRC] =3D &mdss_1_disp_cc_mdss_dptx0_aux_= clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_CRYPTO_CLK] =3D &mdss_1_disp_cc_mdss_dptx0_crypt= o_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_LINK_CLK] =3D &mdss_1_disp_cc_mdss_dptx0_link_cl= k.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_LINK_CLK_SRC] =3D &mdss_1_disp_cc_mdss_dptx0_lin= k_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_LINK_DIV_CLK_SRC] =3D + &mdss_1_disp_cc_mdss_dptx0_link_div_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_LINK_INTF_CLK] =3D &mdss_1_disp_cc_mdss_dptx0_li= nk_intf_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_PIXEL0_CLK] =3D &mdss_1_disp_cc_mdss_dptx0_pixel= 0_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_PIXEL0_CLK_SRC] =3D &mdss_1_disp_cc_mdss_dptx0_p= ixel0_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_PIXEL1_CLK] =3D &mdss_1_disp_cc_mdss_dptx0_pixel= 1_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_PIXEL1_CLK_SRC] =3D &mdss_1_disp_cc_mdss_dptx0_p= ixel1_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_PIXEL2_CLK] =3D &mdss_1_disp_cc_mdss_dptx0_pixel= 2_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_PIXEL2_CLK_SRC] =3D &mdss_1_disp_cc_mdss_dptx0_p= ixel2_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_PIXEL3_CLK] =3D &mdss_1_disp_cc_mdss_dptx0_pixel= 3_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_PIXEL3_CLK_SRC] =3D &mdss_1_disp_cc_mdss_dptx0_p= ixel3_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX0_USB_ROUTER_LINK_INTF_CLK] =3D + &mdss_1_disp_cc_mdss_dptx0_usb_router_link_intf_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_AUX_CLK] =3D &mdss_1_disp_cc_mdss_dptx1_aux_clk.= clkr, + [MDSS_DISP_CC_MDSS_DPTX1_AUX_CLK_SRC] =3D &mdss_1_disp_cc_mdss_dptx1_aux_= clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_CRYPTO_CLK] =3D &mdss_1_disp_cc_mdss_dptx1_crypt= o_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_LINK_CLK] =3D &mdss_1_disp_cc_mdss_dptx1_link_cl= k.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_LINK_CLK_SRC] =3D &mdss_1_disp_cc_mdss_dptx1_lin= k_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_LINK_DIV_CLK_SRC] =3D + &mdss_1_disp_cc_mdss_dptx1_link_div_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_LINK_INTF_CLK] =3D &mdss_1_disp_cc_mdss_dptx1_li= nk_intf_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_PIXEL0_CLK] =3D &mdss_1_disp_cc_mdss_dptx1_pixel= 0_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_PIXEL0_CLK_SRC] =3D &mdss_1_disp_cc_mdss_dptx1_p= ixel0_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_PIXEL1_CLK] =3D &mdss_1_disp_cc_mdss_dptx1_pixel= 1_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_PIXEL1_CLK_SRC] =3D &mdss_1_disp_cc_mdss_dptx1_p= ixel1_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_PIXEL2_CLK] =3D &mdss_1_disp_cc_mdss_dptx1_pixel= 2_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_PIXEL2_CLK_SRC] =3D &mdss_1_disp_cc_mdss_dptx1_p= ixel2_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_PIXEL3_CLK] =3D &mdss_1_disp_cc_mdss_dptx1_pixel= 3_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_PIXEL3_CLK_SRC] =3D &mdss_1_disp_cc_mdss_dptx1_p= ixel3_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX1_USB_ROUTER_LINK_INTF_CLK] =3D + &mdss_1_disp_cc_mdss_dptx1_usb_router_link_intf_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX2_AUX_CLK] =3D &mdss_1_disp_cc_mdss_dptx2_aux_clk.= clkr, + [MDSS_DISP_CC_MDSS_DPTX2_AUX_CLK_SRC] =3D &mdss_1_disp_cc_mdss_dptx2_aux_= clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX2_CRYPTO_CLK] =3D &mdss_1_disp_cc_mdss_dptx2_crypt= o_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX2_LINK_CLK] =3D &mdss_1_disp_cc_mdss_dptx2_link_cl= k.clkr, + [MDSS_DISP_CC_MDSS_DPTX2_LINK_CLK_SRC] =3D &mdss_1_disp_cc_mdss_dptx2_lin= k_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX2_LINK_DIV_CLK_SRC] =3D + &mdss_1_disp_cc_mdss_dptx2_link_div_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX2_LINK_INTF_CLK] =3D &mdss_1_disp_cc_mdss_dptx2_li= nk_intf_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX2_PIXEL0_CLK] =3D &mdss_1_disp_cc_mdss_dptx2_pixel= 0_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX2_PIXEL0_CLK_SRC] =3D &mdss_1_disp_cc_mdss_dptx2_p= ixel0_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX2_PIXEL1_CLK] =3D &mdss_1_disp_cc_mdss_dptx2_pixel= 1_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX2_PIXEL1_CLK_SRC] =3D &mdss_1_disp_cc_mdss_dptx2_p= ixel1_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX3_AUX_CLK] =3D &mdss_1_disp_cc_mdss_dptx3_aux_clk.= clkr, + [MDSS_DISP_CC_MDSS_DPTX3_AUX_CLK_SRC] =3D &mdss_1_disp_cc_mdss_dptx3_aux_= clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX3_CRYPTO_CLK] =3D &mdss_1_disp_cc_mdss_dptx3_crypt= o_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX3_LINK_CLK] =3D &mdss_1_disp_cc_mdss_dptx3_link_cl= k.clkr, + [MDSS_DISP_CC_MDSS_DPTX3_LINK_CLK_SRC] =3D &mdss_1_disp_cc_mdss_dptx3_lin= k_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX3_LINK_DIV_CLK_SRC] =3D + &mdss_1_disp_cc_mdss_dptx3_link_div_clk_src.clkr, + [MDSS_DISP_CC_MDSS_DPTX3_LINK_INTF_CLK] =3D &mdss_1_disp_cc_mdss_dptx3_li= nk_intf_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX3_PIXEL0_CLK] =3D &mdss_1_disp_cc_mdss_dptx3_pixel= 0_clk.clkr, + [MDSS_DISP_CC_MDSS_DPTX3_PIXEL0_CLK_SRC] =3D &mdss_1_disp_cc_mdss_dptx3_p= ixel0_clk_src.clkr, + [MDSS_DISP_CC_MDSS_ESC0_CLK] =3D &mdss_1_disp_cc_mdss_esc0_clk.clkr, + [MDSS_DISP_CC_MDSS_ESC0_CLK_SRC] =3D &mdss_1_disp_cc_mdss_esc0_clk_src.cl= kr, + [MDSS_DISP_CC_MDSS_ESC1_CLK] =3D &mdss_1_disp_cc_mdss_esc1_clk.clkr, + [MDSS_DISP_CC_MDSS_ESC1_CLK_SRC] =3D &mdss_1_disp_cc_mdss_esc1_clk_src.cl= kr, + [MDSS_DISP_CC_MDSS_MDP1_CLK] =3D &mdss_1_disp_cc_mdss_mdp1_clk.clkr, + [MDSS_DISP_CC_MDSS_MDP_CLK] =3D &mdss_1_disp_cc_mdss_mdp_clk.clkr, + [MDSS_DISP_CC_MDSS_MDP_CLK_SRC] =3D &mdss_1_disp_cc_mdss_mdp_clk_src.clkr, + [MDSS_DISP_CC_MDSS_MDP_LUT1_CLK] =3D &mdss_1_disp_cc_mdss_mdp_lut1_clk.cl= kr, + [MDSS_DISP_CC_MDSS_MDP_LUT_CLK] =3D &mdss_1_disp_cc_mdss_mdp_lut_clk.clkr, + [MDSS_DISP_CC_MDSS_NON_GDSC_AHB_CLK] =3D &mdss_1_disp_cc_mdss_non_gdsc_ah= b_clk.clkr, + [MDSS_DISP_CC_MDSS_PCLK0_CLK] =3D &mdss_1_disp_cc_mdss_pclk0_clk.clkr, + [MDSS_DISP_CC_MDSS_PCLK0_CLK_SRC] =3D &mdss_1_disp_cc_mdss_pclk0_clk_src.= clkr, + [MDSS_DISP_CC_MDSS_PCLK1_CLK] =3D &mdss_1_disp_cc_mdss_pclk1_clk.clkr, + [MDSS_DISP_CC_MDSS_PCLK1_CLK_SRC] =3D &mdss_1_disp_cc_mdss_pclk1_clk_src.= clkr, + [MDSS_DISP_CC_MDSS_PCLK2_CLK] =3D &mdss_1_disp_cc_mdss_pclk2_clk.clkr, + [MDSS_DISP_CC_MDSS_PCLK2_CLK_SRC] =3D &mdss_1_disp_cc_mdss_pclk2_clk_src.= clkr, + [MDSS_DISP_CC_MDSS_VSYNC1_CLK] =3D &mdss_1_disp_cc_mdss_vsync1_clk.clkr, + [MDSS_DISP_CC_MDSS_VSYNC_CLK] =3D &mdss_1_disp_cc_mdss_vsync_clk.clkr, + [MDSS_DISP_CC_MDSS_VSYNC_CLK_SRC] =3D &mdss_1_disp_cc_mdss_vsync_clk_src.= clkr, + [MDSS_DISP_CC_PLL0] =3D &mdss_1_disp_cc_pll0.clkr, + [MDSS_DISP_CC_PLL1] =3D &mdss_1_disp_cc_pll1.clkr, + [MDSS_DISP_CC_PLL2] =3D &mdss_1_disp_cc_pll2.clkr, + [MDSS_DISP_CC_PLL3] =3D &mdss_1_disp_cc_pll3.clkr, + [MDSS_DISP_CC_SLEEP_CLK_SRC] =3D &mdss_1_disp_cc_sleep_clk_src.clkr, + [MDSS_DISP_CC_XO_CLK_SRC] =3D &mdss_1_disp_cc_xo_clk_src.clkr, +}; + +static struct gdsc *disp_cc_1_nord_gdscs[] =3D { + [MDSS_DISP_CC_MDSS_CORE_GDSC] =3D &mdss_1_disp_cc_mdss_core_gdsc, + [MDSS_DISP_CC_MDSS_CORE_INT2_GDSC] =3D &mdss_1_disp_cc_mdss_core_int2_gds= c, +}; + +static const struct qcom_reset_map disp_cc_1_nord_resets[] =3D { + [MDSS_DISP_CC_MDSS_CORE_BCR] =3D { 0x8000 }, + [MDSS_DISP_CC_MDSS_CORE_INT2_BCR] =3D { 0xa000 }, + [MDSS_DISP_CC_MDSS_RSCC_BCR] =3D { 0xc000 }, +}; + +static struct clk_alpha_pll *disp_cc_1_nord_plls[] =3D { + &mdss_1_disp_cc_pll0, + &mdss_1_disp_cc_pll1, + &mdss_1_disp_cc_pll2, + &mdss_1_disp_cc_pll3, +}; + +static const u32 disp_cc_1_nord_critical_cbcrs[] =3D { + 0xc00c, /* MDSS_DISP_CC_RSCC_AHB_CLK */ + 0xc008, /* MDSS_DISP_CC_RSCC_VSYNC CLK */ + 0xe07c, /* MDSS_DISP_CC_SLEEP_CLK */ + 0xe05c, /* MDSS_DISP_CC_XO_CLK */ +}; + +static const struct regmap_config disp_cc_1_nord_regmap_config =3D { + .reg_bits =3D 32, + .reg_stride =3D 4, + .val_bits =3D 32, + .max_register =3D 0x1a00c, + .fast_io =3D true, +}; + +static const struct qcom_cc_driver_data disp_cc_1_nord_driver_data =3D { + .alpha_plls =3D disp_cc_1_nord_plls, + .num_alpha_plls =3D ARRAY_SIZE(disp_cc_1_nord_plls), + .clk_cbcrs =3D disp_cc_1_nord_critical_cbcrs, + .num_clk_cbcrs =3D ARRAY_SIZE(disp_cc_1_nord_critical_cbcrs), +}; + +static const struct qcom_cc_desc disp_cc_1_nord_desc =3D { + .config =3D &disp_cc_1_nord_regmap_config, + .clks =3D disp_cc_1_nord_clocks, + .num_clks =3D ARRAY_SIZE(disp_cc_1_nord_clocks), + .resets =3D disp_cc_1_nord_resets, + .num_resets =3D ARRAY_SIZE(disp_cc_1_nord_resets), + .gdscs =3D disp_cc_1_nord_gdscs, + .num_gdscs =3D ARRAY_SIZE(disp_cc_1_nord_gdscs), + .use_rpm =3D true, + .driver_data =3D &disp_cc_1_nord_driver_data, +}; + +static const struct of_device_id disp_cc_1_nord_match_table[] =3D { + { .compatible =3D "qcom,nord-dispcc1" }, + { } +}; +MODULE_DEVICE_TABLE(of, disp_cc_1_nord_match_table); + +static int disp_cc_1_nord_probe(struct platform_device *pdev) +{ + return qcom_cc_probe(pdev, &disp_cc_1_nord_desc); +} + +static struct platform_driver disp_cc_1_nord_driver =3D { + .probe =3D disp_cc_1_nord_probe, + .driver =3D { + .name =3D "dispcc1-nord", + .of_match_table =3D disp_cc_1_nord_match_table, + }, +}; + +module_platform_driver(disp_cc_1_nord_driver); + +MODULE_DESCRIPTION("QTI DISPCC1 NORD Driver"); +MODULE_LICENSE("GPL"); --=20 2.34.1 From nobody Fri Jul 24 21:30:56 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 90E4B42FCB7 for ; Fri, 24 Jul 2026 10:55:48 +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=1784890550; cv=none; b=Bsm1QJ0U5qxonwtFCRHXtXKBd0y/3ll/tq7Xijc9sm0Tf29CvEOUxs93QcXJbm6jN+EUiAwQgBE6gHIi9rBKKIiyY2Zp3e50f8j6WOilmMLrDIVEQP/1KBkt1DsmODhPgu2u69Zk9BE6QG5uTyKmcoPrLcWoqeQvDAigXQtERnI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784890550; c=relaxed/simple; bh=y7MzUxivN8IflynT9hy1YGmbVOEJxdnihqOzfFWrxh4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=W1YEp23Zvm2lwkTWNfmPQiNLFRRNPiryrSbjWFXo23fogqIT65+WWR6v8NZtcokL+LXhvUYXSprV+GqK0C0XrByqUSESXUclTckDlayIR+ZLtpZXwprhhxb4FtzNE3QNeiwpItKq5jtNZNGLnakHkApA2iAY1UAfg0ixNMA0ODA= 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=Ps1MUgDL; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=O5FHDPn4; 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="Ps1MUgDL"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="O5FHDPn4" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66OADrXl2742615 for ; Fri, 24 Jul 2026 10:55:47 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= ibjH4CiFgCSEqizCNmb428mh36ODutLz9Cd3c/id100=; b=Ps1MUgDLGeRkS81L cWardftW4Gtm6LpX3GvR4pLkqKHfRDHG0rjG4/0DrFHC/nk1EC9V1H9aE/IqATNE bfyNkLrgm2NO/KZk2gRrhgJpKLd1npYzpkVSf+1B1fn6P/2y4eiryB1hxZYmSy2z V6jLGv2fmXPQRWFLcsnwSy+8czO3id0S4xuhsYdFOJ+I4/bVFOCoStOvD18RRucL ugqQ7M2iEt26vL4lMTrBlo6lFbg0bk2MLlMbeN9mFUiPN7iNuUnDk2qfScgATxh6 qP6QYK2TUohySMyfMNvcF2NJh2vSeh7p68NSg1k266JNTtvwQ5dRpL7ER9yq2KcL Upqv/g== Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fm0p51ebj-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 24 Jul 2026 10:55:47 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2cc640dfde3so4900815ad.1 for ; Fri, 24 Jul 2026 03:55:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784890546; x=1785495346; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ibjH4CiFgCSEqizCNmb428mh36ODutLz9Cd3c/id100=; b=O5FHDPn43yvot0toLXp1UWsk5asG3BGSh1I5XQRsCArt9ACcwCK3ztMxXf56LMDkyI QlhcqUBpUNQz/VWxz8ne1zOYKkC0bIiISQ5A1Zmrvz6uCpMA21NP93otoaEUTOErTBq8 46ykHEhcv3JgREmi6OJlQNeASVXDROgjszkgaOH4XAmnZnOplkjRZc8I7scvx9hTrvH/ 55TxCiYT7nnJNK9C245LO87DAnQTduQwhspBHKznPkf2q4f6lvb3sFEWdfxEMESsUyoe AJJDuSvdf7DlBjPK2nJKj35uk1CmhBg5nrP3RKgm56jjmkaakldzdzNW2O3U0xZxwQjj 2S2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784890546; x=1785495346; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=ibjH4CiFgCSEqizCNmb428mh36ODutLz9Cd3c/id100=; b=mSAOWv/vB9pTyxS2CGL7DZEQ2j8dqgDFwuEZAzPtuk9guYS++7c+ZFNtm/6W092peT aFP17jvZUpL1q8GW5v8idfEO5TXPliIoD42twsVT1kDunCpt4IA92zC45s2YTlBtuEcE 9HkpzI3TLlyB410lvjjPfMdF2nu9pc/9y4JJljnJFbcXkD0tVMNI4XkPjAj7XGuvNtds WekNLrv6D6kyPZ4xwvSg03kO5cvyfV1B5NdLgSR7jiiz3M5cUgNVA/MRX+nyZX19SiNo nf3qid5wLSuO7B+lwu6Ks0g4N6EY+iZW+gE/kP2wp1bhDmF40f9nK0cNWw9ojCaQ2a4J PrEg== X-Forwarded-Encrypted: i=1; AHgh+RpGmg651JlPYY+aVoo5x0nAPmpweO1EG/ds/eqc8Ei1MrDyErmSFrko98nlRADoVFXk1hVY23vE1dJuOq0=@vger.kernel.org X-Gm-Message-State: AOJu0Yyy13UqzaZn8ECWBs54r+l5xqT1lQwtnRwjIPKHm5bvisFQ2LKn uzSLqaJSjtYu8hBiE+aJUTl22JY6NYzsOwohKlNp8iVhvHzGu4U1/V4EShyDakWt7DGVLOUrLwt 2IdYUpYRhyrtzuMsX+E4LDjARWZDMO3Fzb/CbrtpkkPIG/Yf1zY4iW87tKQLKRz4Gml8= X-Gm-Gg: AR+sD12LXyEDKuwVYJipSlqVV2Vz/SqdG8HnChJeEDh9oF2JPhNmxqDbItXTStK1SWh ShZONmDDLDu+NUvKvE1SrZf3Eif5/ssNKbnhjwAUsD7g4IvnLCsmI2IaqdnirR4ZFFkUDasImvt PY8kS0jVLaQEtozGB+CQBC5Cck9OQVBnqiUSLGJLHITYh+CzG0uN7HSxBGJ0SNHoIwztcNGlPqr Cxvy7ohEKhrjcT0lXafT6YL4WiIZJyROzybfjY9xtpSOjhyxsQORTnVER0iD6zdm9zEhD7qGmF0 xnzeFwyBkiL6naf8BdQKIuBvEvxF+Aqwl8DQIXlhThZ5UauX9GsBLPmTYI2wf0jKROBrOyfPUpy pEgACT8P7qO6R0FYQXIvRetJ3 X-Received: by 2002:a17:903:32d2:b0:2ca:d873:3b34 with SMTP id d9443c01a7336-2cfa6c79450mr83250505ad.36.1784890546424; Fri, 24 Jul 2026 03:55:46 -0700 (PDT) X-Received: by 2002:a17:903:32d2:b0:2ca:d873:3b34 with SMTP id d9443c01a7336-2cfa6c79450mr83250325ad.36.1784890546016; Fri, 24 Jul 2026 03:55:46 -0700 (PDT) Received: from hu-tdas-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2cf8f310644sm49314775ad.55.2026.07.24.03.55.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jul 2026 03:55:45 -0700 (PDT) From: Taniya Das Date: Fri, 24 Jul 2026 16:25:09 +0530 Subject: [PATCH v3 5/6] dt-bindings: clock: qcom: Document Nord GPU clock controllers 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: <20260724-nords_mm_v1-v3-5-32b45232217f@oss.qualcomm.com> References: <20260724-nords_mm_v1-v3-0-32b45232217f@oss.qualcomm.com> In-Reply-To: <20260724-nords_mm_v1-v3-0-32b45232217f@oss.qualcomm.com> To: Bjorn Andersson , Michael Turquette , Stephen Boyd , Brian Masney , Shawn Guo , Bartosz Golaszewski , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Neil Armstrong , Konrad Dybcio Cc: Ajit Pandey , Imran Shaik , Jagadeesh Kona , linux-arm-msm@vger.kernel.org, linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Taniya Das , Alexandre Mergnat , Krzysztof Kozlowski X-Mailer: b4 0.15-dev-aa3f6 X-Authority-Analysis: v=2.4 cv=Pq6jqQM3 c=1 sm=1 tr=0 ts=6a6344b3 cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=IpJZQVW2AAAA:8 a=EUspDBNiAAAA:8 a=bOuFlZkiYT1K-aWiZo8A:9 a=QEXdDO2ut3YA:10 a=1OuFwYUASf3TG4hYMiVC:22 a=IawgGOuG5U0WyFbmm1f5:22 X-Proofpoint-GUID: fxTkSRIsZEZyzWv9KSg4luJLi2zHCAQM X-Proofpoint-ORIG-GUID: fxTkSRIsZEZyzWv9KSg4luJLi2zHCAQM X-Proofpoint-Spam-Info: AW1haW4tMjYwNzI0MDA5OSBTYWx0ZWRfXwRyx2qQ69w83 wVRe+o/YpcXhPxsu3fSMi2hKlQ7D0iyk7oKpWYUWPZV+G0SiNNUj3SSysy0cUJvYJ9Y82KiFnjv xcEn7/TlIIm0QO8xlC9eC48AGo28gKU= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzI0MDA5OSBTYWx0ZWRfX8TaAfQx+DBc8 f+uXHDeaUceFILVghI5QtWXf0YzuTJepOucFQheRMq/kydI/8cvaHuzo8kzHQ7AmSKp8HMxZfCn 6So0MfUHQH7uIw5AcjvhutrUr6jmwzul+TfwywscgHcn8bVK0MFBepn74lfohdgT4R0TB9/ysK+ Dkd5aAskiaEV/AEk8sO7lIQ0i0XVZi6cN8cRo6XUV8VmCTdmt+6McIUYzqPDpm+Ct8O7Jw391WY FtWFDXSlcxFO5nfGAPT6Ds170Wj5q0ExuBRDiSQ8Uy/1WfFb4PcrnbmRO3HCMiNgYJwaoERvPLv 62yIwCa2zQaZyqnWCwZ3al2+X9eswZQB4L0b3dhb3EPgw1PeZB6RC3Ci4hdd+uCJq02pJOly7Xj YNW25B6r05IqhecqfHozLaSgqosf1a820/522C+S10Hv80zMhLxF+aj/b141NEg/ftbQ156p8Gb dqOcJaYTVIymHcxvMng== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-24_02,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 spamscore=0 lowpriorityscore=0 adultscore=0 bulkscore=0 clxscore=1015 impostorscore=0 suspectscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607240099 Add Device Tree binding documentation for the GPU clock controllers on the Qualcomm Nord platform. The platform includes two GPU clock controller instances, GPUCC and GPU2CC. Document the compatible strings for both controllers. Reviewed-by: Alexandre Mergnat Reviewed-by: Krzysztof Kozlowski Reviewed-by: Shawn Guo Signed-off-by: Taniya Das --- .../bindings/clock/qcom,sm8450-gpucc.yaml | 4 ++ include/dt-bindings/clock/qcom,nord-gpu2cc.h | 47 ++++++++++++++++++= +++ include/dt-bindings/clock/qcom,nord-gpucc.h | 48 ++++++++++++++++++= ++++ 3 files changed, 99 insertions(+) diff --git a/Documentation/devicetree/bindings/clock/qcom,sm8450-gpucc.yaml= b/Documentation/devicetree/bindings/clock/qcom,sm8450-gpucc.yaml index fdbdf605ee695637512ce4f98c9b6fcfacb9154f..2a2d37c59442de427874dfe4284= 9cd0ec1a8b752 100644 --- a/Documentation/devicetree/bindings/clock/qcom,sm8450-gpucc.yaml +++ b/Documentation/devicetree/bindings/clock/qcom,sm8450-gpucc.yaml @@ -18,6 +18,8 @@ description: | include/dt-bindings/clock/qcom,glymur-gpucc.h include/dt-bindings/clock/qcom,kaanapali-gpucc.h include/dt-bindings/clock/qcom,milos-gpucc.h + include/dt-bindings/clock/qcom,nord-gpu2cc.h + include/dt-bindings/clock/qcom,nord-gpucc.h include/dt-bindings/clock/qcom,sar2130p-gpucc.h include/dt-bindings/clock/qcom,sm4450-gpucc.h include/dt-bindings/clock/qcom,sm8450-gpucc.h @@ -33,6 +35,8 @@ properties: - qcom,glymur-gpucc - qcom,kaanapali-gpucc - qcom,milos-gpucc + - qcom,nord-gpu2cc + - qcom,nord-gpucc - qcom,sar2130p-gpucc - qcom,sm4450-gpucc - qcom,sm8450-gpucc diff --git a/include/dt-bindings/clock/qcom,nord-gpu2cc.h b/include/dt-bind= ings/clock/qcom,nord-gpu2cc.h new file mode 100644 index 0000000000000000000000000000000000000000..3886af669c61003f71e2da28f93= 9f273e761c653 --- /dev/null +++ b/include/dt-bindings/clock/qcom,nord-gpu2cc.h @@ -0,0 +1,47 @@ +/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + */ + +#ifndef _DT_BINDINGS_CLK_QCOM_GPU_2_CC_NORD_H +#define _DT_BINDINGS_CLK_QCOM_GPU_2_CC_NORD_H + +/* GPU_2_CC clocks */ +#define GPU_2_CC_AHB_CLK 0 +#define GPU_2_CC_CRC_AHB_CLK 1 +#define GPU_2_CC_CX_ACCU_SHIFT_CLK 2 +#define GPU_2_CC_CX_FF_CLK 3 +#define GPU_2_CC_CX_GMU_CLK 4 +#define GPU_2_CC_CXO_AON_CLK 5 +#define GPU_2_CC_CXO_CLK 6 +#define GPU_2_CC_DEMET_CLK 7 +#define GPU_2_CC_FF_CLK_SRC 8 +#define GPU_2_CC_FREQ_MEASURE_CLK 9 +#define GPU_2_CC_GMU_CLK_SRC 10 +#define GPU_2_CC_GPU_SMMU_VOTE_CLK 11 +#define GPU_2_CC_HUB_AON_CLK 12 +#define GPU_2_CC_HUB_CLK_SRC 13 +#define GPU_2_CC_HUB_CX_INT_CLK 14 +#define GPU_2_CC_MEMNOC_GFX_CLK 15 +#define GPU_2_CC_MND1X_0_GFX3D_CLK 16 +#define GPU_2_CC_MND1X_1_GFX3D_CLK 17 +#define GPU_2_CC_PLL0 18 +#define GPU_2_CC_PLL1 19 +#define GPU_2_CC_SLEEP_CLK 20 + +/* GPU_2_CC power domains */ +#define GPU_2_CC_CX_GDSC 0 +#define GPU_2_CC_GX_GDSC 1 + +/* GPU_2_CC resets */ +#define GPU_2_CC_ACD_BCR 0 +#define GPU_2_CC_CB_BCR 1 +#define GPU_2_CC_CX_BCR 2 +#define GPU_2_CC_FAST_HUB_BCR 3 +#define GPU_2_CC_FF_BCR 4 +#define GPU_2_CC_GFX3D_AON_BCR 5 +#define GPU_2_CC_GMU_BCR 6 +#define GPU_2_CC_GX_BCR 7 +#define GPU_2_CC_XO_BCR 8 + +#endif diff --git a/include/dt-bindings/clock/qcom,nord-gpucc.h b/include/dt-bindi= ngs/clock/qcom,nord-gpucc.h new file mode 100644 index 0000000000000000000000000000000000000000..3cc348be5668b309a151665fc29= bdcb30c480740 --- /dev/null +++ b/include/dt-bindings/clock/qcom,nord-gpucc.h @@ -0,0 +1,48 @@ +/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + */ + +#ifndef _DT_BINDINGS_CLK_QCOM_GPU_CC_NORD_H +#define _DT_BINDINGS_CLK_QCOM_GPU_CC_NORD_H + +/* GPU_CC clocks */ +#define GPU_CC_ACD_GFX3D_CLK 0 +#define GPU_CC_ACMU_CLK 1 +#define GPU_CC_AHB_CLK 2 +#define GPU_CC_CRC_AHB_CLK 3 +#define GPU_CC_CX_ACCU_SHIFT_CLK 4 +#define GPU_CC_CX_FF_CLK 5 +#define GPU_CC_CX_GMU_CLK 6 +#define GPU_CC_CXO_AON_CLK 7 +#define GPU_CC_CXO_CLK 8 +#define GPU_CC_DEMET_CLK 9 +#define GPU_CC_DPM_CLK 10 +#define GPU_CC_FF_CLK_SRC 11 +#define GPU_CC_FREQ_MEASURE_CLK 12 +#define GPU_CC_GMU_CLK_SRC 13 +#define GPU_CC_GPU_SMMU_VOTE_CLK 14 +#define GPU_CC_HUB_AON_CLK 15 +#define GPU_CC_HUB_CLK_SRC 16 +#define GPU_CC_HUB_CX_INT_CLK 17 +#define GPU_CC_HUB_DIV_CLK_SRC 18 +#define GPU_CC_MEMNOC_GFX_CLK 19 +#define GPU_CC_MND1X_GFX3D_CLK 20 +#define GPU_CC_PLL0 21 +#define GPU_CC_PLL1 22 +#define GPU_CC_SLEEP_CLK 23 + +/* GPU_CC power domains */ +#define GPU_CC_CX_GDSC 0 +#define GPU_CC_GX_GDSC 1 + +/* GPU_CC resets */ +#define GPU_CC_ACD_BCR 0 +#define GPU_CC_CB_BCR 1 +#define GPU_CC_CX_BCR 2 +#define GPU_CC_FAST_HUB_BCR 3 +#define GPU_CC_GFX3D_AON_BCR 4 +#define GPU_CC_GX_BCR 5 +#define GPU_CC_XO_BCR 6 + +#endif --=20 2.34.1 From nobody Fri Jul 24 21:30:56 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 72235432312 for ; Fri, 24 Jul 2026 10:55:55 +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=1784890559; cv=none; b=ifyN9SgXEqsGuJI9N0WgX8zZ58XnIpus5A473LhrEfbrzLgCmK4nQKuOiYwSKPXob1rOwyfYsuyorwkrpdYVO7LNnohSFwZk+sZeK3j/lT7gZixGKykhqHxLdMIYI4OOfRNuFl9AmuLHY0cjHxO2mnv7rUY9LhFTP1wi+qN4jtA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784890559; c=relaxed/simple; bh=XkrSJOrUMXrqM0jErKidhMLRA3MusR2SXKbu2qcNAV0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kYzdI+Mwwo71yAEOZcPSGEcm3RPrNj8J0gGFuFwmrt5gMQg8PXhf+F0CjIWXugynmv7mLA+LbGvyMu52a04O6F1rSjaVsCxfMq4U5HJWfgTFXtYE//bHOSPOwEvlZkyYX4yTR5L/+gDjNku1nb/7zLZREf+PjhP6iMBakf5X3ww= 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=SLZ/394A; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=UcCuApGz; 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="SLZ/394A"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="UcCuApGz" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66OADqWY2616190 for ; Fri, 24 Jul 2026 10:55:54 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= En7X/0vxCX7bXKmBPPslDv+A+U5gNa1lX1RqN8slhCU=; b=SLZ/394AEtYP7xlQ i2KSYYMzJcLTiLebgiY1qMl+JUS5YzmRtGhYylx+1sgUtxomDR5oQHXVW6TD5EN8 uFDdfm+fzlhGMxEbqF0j8EWQ9zsjgTLSSeN9nGi6BvqmKRu8IJVUIMolhUdTMlgm HEpzQi4WoWHjOtZTfBGuBEL6qtyiMsEz+Y/di3vnYVB7gHjzaXE0v0jd84KyY4XI uK7SjmMtaOjwPbZa8dRLll+VO0GT4s1j7bmW1ett0dEA+3XCgrcjYucXriL/ONdN vwU0CZSJgn6vvwftsAnIRoSAXbor+8F4E1ggbnQ/CQPtzhKqJOgQwEtw68fcFHSI RqqICA== 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 4fm0pw9dyy-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 24 Jul 2026 10:55:54 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2cf1c86963bso14890135ad.0 for ; Fri, 24 Jul 2026 03:55:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784890553; x=1785495353; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=En7X/0vxCX7bXKmBPPslDv+A+U5gNa1lX1RqN8slhCU=; b=UcCuApGzq60WK5lTbrTdhF+plv86XPZXqAtCqnXp5DIJSudhecaS/wq5LrFr/mFosB G+ikJ2+b5sEdzEdSSyfonYWgU58ocFkvN1gr1lcFSatcsxBdEAcFoGY3MWOpIi0Pq1ps pdSXRgYHBESIsVklFFcGwsB5AlI1BSVw72SAE/LsYDdoYiCFiPSn9gvb2AJwReZLanfe bEaIinpCoEz6MtVsIHfq5xSoOuVtHce/JGRRcXxjEnR9Zbwb/5XLwgkTQYd/SUU9vXWF K5ysBbRMr0WkQNFO68K+evCg5GOPdEgTAX8eOwKhiD2tU6N8LtFBBI0aVeNDfJpZm87e Ha7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784890553; x=1785495353; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=En7X/0vxCX7bXKmBPPslDv+A+U5gNa1lX1RqN8slhCU=; b=H0+RM/74+F/rd8rNx4SbrA7d7oiWnY/rsSpAQwj7W/75eDWubCH+36xoia02jKrpZV 0NTgwX/gJy+MVyxWlhV1o/xOD5I1npXWFPNebtnnb37dphE2glEnlJy0uCgsBv6Sf5Xu c5tZv5qU70KftBBWa739Mt0HziA1rtI0Hx+Fg8LXNJVQmlIWsCXiOhDwUsDHMett+OyI Jqj3Fls9bnxCWV0Z1/gNaQl6USe+T6vsmVATRvCu8F6udcuTy62wROYdfW7BZKblkFRT RsuxSElyroJfbpu2XwFZOzXeSJyw5zztMul4QeNiodXLJ1/YhFpTkni7Zu5MGaFxLgn6 oweQ== X-Forwarded-Encrypted: i=1; AHgh+Rq/PSfkbDLso2Etty558Ek0I5552FAipOLspF/M3hPwD8jDEGJBH8gQwEFbbRirRqSR1TgqNxDBLNZM4A8=@vger.kernel.org X-Gm-Message-State: AOJu0Ywhrn9HC3xMqubfTpyoLcgsxJxi/kxr9cS9cPyBQL9x1dko2KNV 7V/uokFKOQ/9uCmhhW3vNIG+zOVDD0xVnVTxzGKMFhmdi1oxJOrJDVExTX8A4blEqdOMlYmD9S9 9ApQUyhy2bbmi5Vc0PKcaGkBxwsRdprmRzruKBSZvPY1S/34Fl6KY/JbZMshSN+nzMvQ= X-Gm-Gg: AR+sD13/IJ9EvXOquCdSJKlzs2ys75zs9pZQraQxAz0wTANVXu6qT1y+IEO1cndZgT8 zv/msdPqSf1tJ2fuG8o+cGjldA3Xiqekv4kOG46iZl8E1T+dQvq6eud6wZygshgPDf7i+S8iaer Brjb/QYRvjlrcAYaNJVnmyD/QfZc9bVzBZsHwaweT9I68mmLwX+436Ah+RUuVoCDklPsRao+Hz0 mG1+y0CnZMe6LpECOREb1xeXlNVdHdfr6Z/uJl8bSVISxZGsjJzbG+trJxgf8ABv1+Z1SQJOKQI VcrKyCUZi3GzgNlUXUb2QxD92fcukkrK17uO5v8NlvVPDlx+ZdUAlp4A1QDyQRQEBvmyg/dc9oh NHGXuBQCMkgXUOhD0ci4lpari X-Received: by 2002:a17:902:d4d1:b0:2ca:d4f:adab with SMTP id d9443c01a7336-2cfd71750bdmr431115ad.19.1784890552736; Fri, 24 Jul 2026 03:55:52 -0700 (PDT) X-Received: by 2002:a17:902:d4d1:b0:2ca:d4f:adab with SMTP id d9443c01a7336-2cfd71750bdmr430705ad.19.1784890552029; Fri, 24 Jul 2026 03:55:52 -0700 (PDT) Received: from hu-tdas-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2cf8f310644sm49314775ad.55.2026.07.24.03.55.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jul 2026 03:55:51 -0700 (PDT) From: Taniya Das Date: Fri, 24 Jul 2026 16:25:10 +0530 Subject: [PATCH v3 6/6] clk: qcom: gpucc: Add Nord graphics clock controller support 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: <20260724-nords_mm_v1-v3-6-32b45232217f@oss.qualcomm.com> References: <20260724-nords_mm_v1-v3-0-32b45232217f@oss.qualcomm.com> In-Reply-To: <20260724-nords_mm_v1-v3-0-32b45232217f@oss.qualcomm.com> To: Bjorn Andersson , Michael Turquette , Stephen Boyd , Brian Masney , Shawn Guo , Bartosz Golaszewski , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Neil Armstrong , Konrad Dybcio Cc: Ajit Pandey , Imran Shaik , Jagadeesh Kona , linux-arm-msm@vger.kernel.org, linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Taniya Das , Alexandre Mergnat X-Mailer: b4 0.15-dev-aa3f6 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzI0MDA5OSBTYWx0ZWRfX8FGzVO0hOLIH 7/Ay7BXwThBt1xgvaPHVgq+r8d2uXope/hyEuD8cHIXu4E9fw/VdyaqLrC4Lk+CkxDbisZvFL/W g7PyGb9WdLakydPEcMDDfCtY1mST+SQ0McM83vihO8PkAnbgJ+RGMZiGLgOTMw/nRolfGve7baX Wf7DBrF2UjkSX6ngY5naz+9ouVRRr7eWW2KG+pkOBg6EDzLfUUw0v8k5OvBhKbc3NKgZXUK8hcc THTIqKBZCUk5MmnG8Ui2uJ4AapvvjxywUZIdW4YpLPUrvtSpl+j4Qslwu3snKiu+Xrzae4ai9Z2 0BKnDpgveBvV8mW4FgpJgX2hnuSfmIu9pEb2wrXMB4a73a5P5JWDr/Jfp+jCNIEkXDID2c/FuC7 HAhIUk6DSUsxWLGkqGtNoZNGO3fU+JLzAD+FkaGq4p28PcfE8zJA05sikBqtpJ02kP0iRdDUumz CNvRic5ZIpwSBAdPGIQ== X-Authority-Analysis: v=2.4 cv=RJeD2Yi+ c=1 sm=1 tr=0 ts=6a6344ba cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=IpJZQVW2AAAA:8 a=EUspDBNiAAAA:8 a=F3NrMrZ0Zf_nGyolyosA:9 a=QEXdDO2ut3YA:10 a=uG9DUKGECoFWVXl0Dc02:22 a=IawgGOuG5U0WyFbmm1f5:22 X-Proofpoint-ORIG-GUID: vFbfQEYdMLOE3IUK0WmJR7Clbny9s9z5 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzI0MDA5OSBTYWx0ZWRfX00D4WA2M1VxA rV1mbt9rvytdB5i7She0yAfbmSu/dtIYAe3820i5T2EH3+NOTBEJZakXSk+5aXAt4mk8i/UPWAf eYziiinXYwZRFeAuYP5Crjqy6eqKAxg= X-Proofpoint-GUID: vFbfQEYdMLOE3IUK0WmJR7Clbny9s9z5 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-24_02,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 spamscore=0 phishscore=0 bulkscore=0 impostorscore=0 clxscore=1015 adultscore=0 lowpriorityscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607240099 Add support for the GPU clock controllers (GPUCC) on the Qualcomm Nord platform. The platform includes two GPU clock controller instances,GPUCC and GPU2CC. Register support for both controllers, which provide clocks required for the graphics subsystem. Reviewed-by: Alexandre Mergnat Reviewed-by: Shawn Guo Signed-off-by: Taniya Das --- drivers/clk/qcom/Kconfig | 11 + drivers/clk/qcom/Makefile | 1 + drivers/clk/qcom/gpu2cc-nord.c | 545 +++++++++++++++++++++++++++++++++++++ drivers/clk/qcom/gpucc-nord.c | 593 +++++++++++++++++++++++++++++++++++++= ++++ 4 files changed, 1150 insertions(+) diff --git a/drivers/clk/qcom/Kconfig b/drivers/clk/qcom/Kconfig index 874136a2ad9aaa117df2c7ad5c8abc5280b76339..10dcfa72a0bd3bdd70e2bee0596= 4e8c275ceb07d 100644 --- a/drivers/clk/qcom/Kconfig +++ b/drivers/clk/qcom/Kconfig @@ -166,6 +166,17 @@ config CLK_NORD_GCC SPI, I2C, USB, SD/UFS, PCIe etc. The clock controller is a combination of GCC, SE_GCC, NE_GCC and NW_GCC. =20 +config CLK_NORD_GPUCC + tristate "Nord Graphics Clock Controller" + depends on ARM64 || COMPILE_TEST + select CLK_NORD_GCC + default m if ARCH_QCOM + help + Support for the graphics clock controllers on Nord devices. There are t= wo + graphics clock controllers on Nord SoC. + Say Y if you want to support graphics controller devices and + functionality such as 3D graphics. + config CLK_X1E80100_CAMCC tristate "X1E80100 Camera Clock Controller" depends on ARM64 || COMPILE_TEST diff --git a/drivers/clk/qcom/Makefile b/drivers/clk/qcom/Makefile index 4282f43e7078f1fe0dde6f942040eb6bd122d7ce..fb0a5bc94e32b2dc1d56268aa87= f455b20d779eb 100644 --- a/drivers/clk/qcom/Makefile +++ b/drivers/clk/qcom/Makefile @@ -39,6 +39,7 @@ obj-$(CONFIG_CLK_KAANAPALI_TCSRCC) +=3D tcsrcc-kaanapali.o obj-$(CONFIG_CLK_KAANAPALI_VIDEOCC) +=3D videocc-kaanapali.o obj-$(CONFIG_CLK_NORD_DISPCC) +=3D dispcc0-nord.o dispcc1-nord.o obj-$(CONFIG_CLK_NORD_GCC) +=3D gcc-nord.o negcc-nord.o nwgcc-nord.o segcc= -nord.o +obj-$(CONFIG_CLK_NORD_GPUCC) +=3D gpucc-nord.o gpu2cc-nord.o obj-$(CONFIG_CLK_NORD_TCSRCC) +=3D tcsrcc-nord.o obj-$(CONFIG_CLK_X1E80100_CAMCC) +=3D camcc-x1e80100.o obj-$(CONFIG_CLK_X1E80100_DISPCC) +=3D dispcc-x1e80100.o diff --git a/drivers/clk/qcom/gpu2cc-nord.c b/drivers/clk/qcom/gpu2cc-nord.c new file mode 100644 index 0000000000000000000000000000000000000000..a05ff9fa1506e9d63b789127866= ea5c37e5a1e2f --- /dev/null +++ b/drivers/clk/qcom/gpu2cc-nord.c @@ -0,0 +1,545 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + */ + +#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 "gdsc.h" +#include "reset.h" + +enum { + DT_BI_TCXO, + DT_GPLL0_OUT_MAIN, + DT_GPLL0_OUT_MAIN_DIV, +}; + +enum { + P_BI_TCXO, + P_GPLL0_OUT_MAIN, + P_GPLL0_OUT_MAIN_DIV, + P_GPU_2_CC_PLL0_OUT_MAIN, + P_GPU_2_CC_PLL1_OUT_MAIN, +}; + +static const struct pll_vco lucid_ole_vco[] =3D { + { 249600000, 2300000000, 0 }, +}; + +/* 934.0 MHz Configuration */ +static const struct alpha_pll_config gpu_2_cc_pll0_config =3D { + .l =3D 0x30, + .alpha =3D 0xa555, + .config_ctl_val =3D 0x20485699, + .config_ctl_hi_val =3D 0x00182261, + .config_ctl_hi1_val =3D 0x82aa299c, + .test_ctl_val =3D 0x00000000, + .test_ctl_hi_val =3D 0x00000003, + .test_ctl_hi1_val =3D 0x00009000, + .test_ctl_hi2_val =3D 0x00000034, + .user_ctl_val =3D 0x00000000, + .user_ctl_hi_val =3D 0x00400005, +}; + +static struct clk_alpha_pll gpu_2_cc_pll0 =3D { + .offset =3D 0x0, + .config =3D &gpu_2_cc_pll0_config, + .vco_table =3D lucid_ole_vco, + .num_vco =3D ARRAY_SIZE(lucid_ole_vco), + .regs =3D clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE], + .clkr =3D { + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_2_cc_pll0", + .parent_data =3D &(const struct clk_parent_data) { + .index =3D DT_BI_TCXO, + }, + .num_parents =3D 1, + .ops =3D &clk_alpha_pll_lucid_evo_ops, + }, + }, +}; + +/* 1100.0 MHz Configuration */ +static const struct alpha_pll_config gpu_2_cc_pll1_config =3D { + .l =3D 0x39, + .alpha =3D 0x4aaa, + .config_ctl_val =3D 0x20485699, + .config_ctl_hi_val =3D 0x00182261, + .config_ctl_hi1_val =3D 0x82aa299c, + .test_ctl_val =3D 0x00000000, + .test_ctl_hi_val =3D 0x00000003, + .test_ctl_hi1_val =3D 0x00009000, + .test_ctl_hi2_val =3D 0x00000034, + .user_ctl_val =3D 0x00000000, + .user_ctl_hi_val =3D 0x00400005, +}; + +static struct clk_alpha_pll gpu_2_cc_pll1 =3D { + .offset =3D 0x1000, + .config =3D &gpu_2_cc_pll1_config, + .vco_table =3D lucid_ole_vco, + .num_vco =3D ARRAY_SIZE(lucid_ole_vco), + .regs =3D clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE], + .clkr =3D { + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_2_cc_pll1", + .parent_data =3D &(const struct clk_parent_data) { + .index =3D DT_BI_TCXO, + }, + .num_parents =3D 1, + .ops =3D &clk_alpha_pll_lucid_evo_ops, + }, + }, +}; + +static const struct parent_map gpu_2_cc_parent_map_0[] =3D { + { P_BI_TCXO, 0 }, + { P_GPLL0_OUT_MAIN, 5 }, + { P_GPLL0_OUT_MAIN_DIV, 6 }, +}; + +static const struct clk_parent_data gpu_2_cc_parent_data_0[] =3D { + { .index =3D DT_BI_TCXO }, + { .index =3D DT_GPLL0_OUT_MAIN }, + { .index =3D DT_GPLL0_OUT_MAIN_DIV }, +}; + +static const struct parent_map gpu_2_cc_parent_map_1[] =3D { + { P_BI_TCXO, 0 }, + { P_GPU_2_CC_PLL0_OUT_MAIN, 1 }, + { P_GPU_2_CC_PLL1_OUT_MAIN, 3 }, + { P_GPLL0_OUT_MAIN, 5 }, + { P_GPLL0_OUT_MAIN_DIV, 6 }, +}; + +static const struct clk_parent_data gpu_2_cc_parent_data_1[] =3D { + { .index =3D DT_BI_TCXO }, + { .hw =3D &gpu_2_cc_pll0.clkr.hw }, + { .hw =3D &gpu_2_cc_pll1.clkr.hw }, + { .index =3D DT_GPLL0_OUT_MAIN }, + { .index =3D DT_GPLL0_OUT_MAIN_DIV }, +}; + +static const struct parent_map gpu_2_cc_parent_map_2[] =3D { + { P_BI_TCXO, 0 }, + { P_GPU_2_CC_PLL1_OUT_MAIN, 3 }, + { P_GPLL0_OUT_MAIN, 5 }, + { P_GPLL0_OUT_MAIN_DIV, 6 }, +}; + +static const struct clk_parent_data gpu_2_cc_parent_data_2[] =3D { + { .index =3D DT_BI_TCXO }, + { .hw =3D &gpu_2_cc_pll1.clkr.hw }, + { .index =3D DT_GPLL0_OUT_MAIN }, + { .index =3D DT_GPLL0_OUT_MAIN_DIV }, +}; + +static const struct freq_tbl ftbl_gpu_2_cc_ff_clk_src[] =3D { + F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0), + { } +}; + +static struct clk_rcg2 gpu_2_cc_ff_clk_src =3D { + .cmd_rcgr =3D 0x91c4, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D gpu_2_cc_parent_map_0, + .freq_tbl =3D ftbl_gpu_2_cc_ff_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_2_cc_ff_clk_src", + .parent_data =3D gpu_2_cc_parent_data_0, + .num_parents =3D ARRAY_SIZE(gpu_2_cc_parent_data_0), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_shared_ops, + }, +}; + +static const struct freq_tbl ftbl_gpu_2_cc_gmu_clk_src[] =3D { + F(550000000, P_GPU_2_CC_PLL1_OUT_MAIN, 2, 0, 0), + { } +}; + +static struct clk_rcg2 gpu_2_cc_gmu_clk_src =3D { + .cmd_rcgr =3D 0x9174, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D gpu_2_cc_parent_map_1, + .freq_tbl =3D ftbl_gpu_2_cc_gmu_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_2_cc_gmu_clk_src", + .parent_data =3D gpu_2_cc_parent_data_1, + .num_parents =3D ARRAY_SIZE(gpu_2_cc_parent_data_1), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_shared_ops, + }, +}; + +static struct clk_rcg2 gpu_2_cc_hub_clk_src =3D { + .cmd_rcgr =3D 0x91a8, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D gpu_2_cc_parent_map_2, + .freq_tbl =3D ftbl_gpu_2_cc_ff_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_2_cc_hub_clk_src", + .parent_data =3D gpu_2_cc_parent_data_2, + .num_parents =3D ARRAY_SIZE(gpu_2_cc_parent_data_2), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_shared_ops, + }, +}; + +static struct clk_branch gpu_2_cc_ahb_clk =3D { + .halt_reg =3D 0x90cc, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0x90cc, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_2_cc_ahb_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &gpu_2_cc_hub_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch gpu_2_cc_crc_ahb_clk =3D { + .halt_reg =3D 0x90d0, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0x90d0, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_2_cc_crc_ahb_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &gpu_2_cc_hub_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch gpu_2_cc_cx_accu_shift_clk =3D { + .halt_reg =3D 0x9114, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0x9114, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_2_cc_cx_accu_shift_clk", + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch gpu_2_cc_cx_ff_clk =3D { + .halt_reg =3D 0x9100, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x9100, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_2_cc_cx_ff_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &gpu_2_cc_ff_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch gpu_2_cc_cx_gmu_clk =3D { + .halt_reg =3D 0x90e8, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0x90e8, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_2_cc_cx_gmu_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &gpu_2_cc_gmu_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_aon_ops, + }, + }, +}; + +static struct clk_branch gpu_2_cc_cxo_clk =3D { + .halt_reg =3D 0x90f8, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x90f8, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_2_cc_cxo_clk", + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch gpu_2_cc_freq_measure_clk =3D { + .halt_reg =3D 0x9008, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x9008, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_2_cc_freq_measure_clk", + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch gpu_2_cc_gpu_smmu_vote_clk =3D { + .halt_reg =3D 0x7000, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0x7000, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_2_cc_gpu_smmu_vote_clk", + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch gpu_2_cc_hub_aon_clk =3D { + .halt_reg =3D 0x91a4, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x91a4, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_2_cc_hub_aon_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &gpu_2_cc_hub_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_aon_ops, + }, + }, +}; + +static struct clk_branch gpu_2_cc_hub_cx_int_clk =3D { + .halt_reg =3D 0x90fc, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0x90fc, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_2_cc_hub_cx_int_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &gpu_2_cc_hub_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_aon_ops, + }, + }, +}; + +static struct clk_branch gpu_2_cc_memnoc_gfx_clk =3D { + .halt_reg =3D 0x9104, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0x9104, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_2_cc_memnoc_gfx_clk", + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch gpu_2_cc_mnd1x_0_gfx3d_clk =3D { + .halt_reg =3D 0x9164, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x9164, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_2_cc_mnd1x_0_gfx3d_clk", + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch gpu_2_cc_mnd1x_1_gfx3d_clk =3D { + .halt_reg =3D 0x9168, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x9168, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_2_cc_mnd1x_1_gfx3d_clk", + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch gpu_2_cc_sleep_clk =3D { + .halt_reg =3D 0x90e0, + .halt_check =3D BRANCH_HALT_SKIP, + .clkr =3D { + .enable_reg =3D 0x90e0, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_2_cc_sleep_clk", + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct gdsc gpu_2_cc_cx_gdsc =3D { + .gdscr =3D 0x9090, + .gds_hw_ctrl =3D 0x90a4, + .en_rest_wait_val =3D 0x2, + .en_few_wait_val =3D 0x2, + .clk_dis_wait_val =3D 0xf, + .pd =3D { + .name =3D "gpu_2_cc_cx_gdsc", + }, + .pwrsts =3D PWRSTS_OFF_ON, + .flags =3D VOTABLE | RETAIN_FF_ENABLE, +}; + +static struct gdsc gpu_2_cc_gx_gdsc =3D { + .gdscr =3D 0x9034, + .clamp_io_ctrl =3D 0x9504, + .en_rest_wait_val =3D 0x2, + .en_few_wait_val =3D 0x2, + .clk_dis_wait_val =3D 0xf, + .pd =3D { + .name =3D "gpu_2_cc_gx_gdsc", + .power_on =3D gdsc_gx_do_nothing_enable, + }, + .pwrsts =3D PWRSTS_OFF_ON, + .flags =3D CLAMP_IO | POLL_CFG_GDSCR | RETAIN_FF_ENABLE, +}; + +static struct clk_regmap *gpu_2_cc_nord_clocks[] =3D { + [GPU_2_CC_AHB_CLK] =3D &gpu_2_cc_ahb_clk.clkr, + [GPU_2_CC_CRC_AHB_CLK] =3D &gpu_2_cc_crc_ahb_clk.clkr, + [GPU_2_CC_CX_ACCU_SHIFT_CLK] =3D &gpu_2_cc_cx_accu_shift_clk.clkr, + [GPU_2_CC_CX_FF_CLK] =3D &gpu_2_cc_cx_ff_clk.clkr, + [GPU_2_CC_CX_GMU_CLK] =3D &gpu_2_cc_cx_gmu_clk.clkr, + [GPU_2_CC_CXO_CLK] =3D &gpu_2_cc_cxo_clk.clkr, + [GPU_2_CC_FF_CLK_SRC] =3D &gpu_2_cc_ff_clk_src.clkr, + [GPU_2_CC_FREQ_MEASURE_CLK] =3D &gpu_2_cc_freq_measure_clk.clkr, + [GPU_2_CC_GMU_CLK_SRC] =3D &gpu_2_cc_gmu_clk_src.clkr, + [GPU_2_CC_GPU_SMMU_VOTE_CLK] =3D &gpu_2_cc_gpu_smmu_vote_clk.clkr, + [GPU_2_CC_HUB_AON_CLK] =3D &gpu_2_cc_hub_aon_clk.clkr, + [GPU_2_CC_HUB_CLK_SRC] =3D &gpu_2_cc_hub_clk_src.clkr, + [GPU_2_CC_HUB_CX_INT_CLK] =3D &gpu_2_cc_hub_cx_int_clk.clkr, + [GPU_2_CC_MEMNOC_GFX_CLK] =3D &gpu_2_cc_memnoc_gfx_clk.clkr, + [GPU_2_CC_MND1X_0_GFX3D_CLK] =3D &gpu_2_cc_mnd1x_0_gfx3d_clk.clkr, + [GPU_2_CC_MND1X_1_GFX3D_CLK] =3D &gpu_2_cc_mnd1x_1_gfx3d_clk.clkr, + [GPU_2_CC_PLL0] =3D &gpu_2_cc_pll0.clkr, + [GPU_2_CC_PLL1] =3D &gpu_2_cc_pll1.clkr, + [GPU_2_CC_SLEEP_CLK] =3D &gpu_2_cc_sleep_clk.clkr, +}; + +static struct gdsc *gpu_2_cc_nord_gdscs[] =3D { + [GPU_2_CC_CX_GDSC] =3D &gpu_2_cc_cx_gdsc, + [GPU_2_CC_GX_GDSC] =3D &gpu_2_cc_gx_gdsc, +}; + +static const struct qcom_reset_map gpu_2_cc_nord_resets[] =3D { + [GPU_2_CC_ACD_BCR] =3D { 0x918c }, + [GPU_2_CC_CB_BCR] =3D { 0x9198 }, + [GPU_2_CC_CX_BCR] =3D { 0x908c }, + [GPU_2_CC_FAST_HUB_BCR] =3D { 0x91a0 }, + [GPU_2_CC_FF_BCR] =3D { 0x91c0 }, + [GPU_2_CC_GFX3D_AON_BCR] =3D { 0x9118 }, + [GPU_2_CC_GMU_BCR] =3D { 0x9170 }, + [GPU_2_CC_GX_BCR] =3D { 0x9030 }, + [GPU_2_CC_XO_BCR] =3D { 0x9000 }, +}; + +static struct clk_alpha_pll *gpu_2_cc_nord_plls[] =3D { + &gpu_2_cc_pll0, + &gpu_2_cc_pll1, +}; + +static const u32 gpu_2_cc_nord_critical_cbcrs[] =3D { + 0x9004, /* GPU_2_CC_CXO_AON_CLK */ + 0x900c, /* GPU_2_CC_DEMET_CLK */ +}; + +static const struct regmap_config gpu_2_cc_nord_regmap_config =3D { + .reg_bits =3D 32, + .reg_stride =3D 4, + .val_bits =3D 32, + .max_register =3D 0x9ff0, + .fast_io =3D true, +}; + +static const struct qcom_cc_driver_data gpu_2_cc_nord_driver_data =3D { + .alpha_plls =3D gpu_2_cc_nord_plls, + .num_alpha_plls =3D ARRAY_SIZE(gpu_2_cc_nord_plls), + .clk_cbcrs =3D gpu_2_cc_nord_critical_cbcrs, + .num_clk_cbcrs =3D ARRAY_SIZE(gpu_2_cc_nord_critical_cbcrs), +}; + +static const struct qcom_cc_desc gpu_2_cc_nord_desc =3D { + .config =3D &gpu_2_cc_nord_regmap_config, + .clks =3D gpu_2_cc_nord_clocks, + .num_clks =3D ARRAY_SIZE(gpu_2_cc_nord_clocks), + .resets =3D gpu_2_cc_nord_resets, + .num_resets =3D ARRAY_SIZE(gpu_2_cc_nord_resets), + .gdscs =3D gpu_2_cc_nord_gdscs, + .num_gdscs =3D ARRAY_SIZE(gpu_2_cc_nord_gdscs), + .use_rpm =3D true, + .driver_data =3D &gpu_2_cc_nord_driver_data, +}; + +static const struct of_device_id gpu_2_cc_nord_match_table[] =3D { + { .compatible =3D "qcom,nord-gpu2cc" }, + { } +}; +MODULE_DEVICE_TABLE(of, gpu_2_cc_nord_match_table); + +static int gpu_2_cc_nord_probe(struct platform_device *pdev) +{ + return qcom_cc_probe(pdev, &gpu_2_cc_nord_desc); +} + +static struct platform_driver gpu_2_cc_nord_driver =3D { + .probe =3D gpu_2_cc_nord_probe, + .driver =3D { + .name =3D "gpu2cc-nord", + .of_match_table =3D gpu_2_cc_nord_match_table, + }, +}; + +module_platform_driver(gpu_2_cc_nord_driver); + +MODULE_DESCRIPTION("QTI GPU2CC Nord Driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/clk/qcom/gpucc-nord.c b/drivers/clk/qcom/gpucc-nord.c new file mode 100644 index 0000000000000000000000000000000000000000..f37bc32e80ff66915108c241fc0= e46b2e8a5f8bb --- /dev/null +++ b/drivers/clk/qcom/gpucc-nord.c @@ -0,0 +1,593 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + */ + +#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 "gdsc.h" +#include "reset.h" + +enum { + DT_BI_TCXO, + DT_GPLL0_OUT_MAIN, + DT_GPLL0_OUT_MAIN_DIV, +}; + +enum { + P_BI_TCXO, + P_GPLL0_OUT_MAIN, + P_GPLL0_OUT_MAIN_DIV, + P_GPU_CC_PLL0_OUT_MAIN, + P_GPU_CC_PLL1_OUT_MAIN, +}; + +static const struct pll_vco lucid_ole_vco[] =3D { + { 249600000, 2300000000, 0 }, +}; + +/* 936.0 MHz Configuration */ +static const struct alpha_pll_config gpu_cc_pll0_config =3D { + .l =3D 0x30, + .alpha =3D 0xc000, + .config_ctl_val =3D 0x20485699, + .config_ctl_hi_val =3D 0x00182261, + .config_ctl_hi1_val =3D 0x82aa299c, + .test_ctl_val =3D 0x00000000, + .test_ctl_hi_val =3D 0x00000003, + .test_ctl_hi1_val =3D 0x00009000, + .test_ctl_hi2_val =3D 0x00000034, + .user_ctl_val =3D 0x00000000, + .user_ctl_hi_val =3D 0x00400005, +}; + +static struct clk_alpha_pll gpu_cc_pll0 =3D { + .offset =3D 0x0, + .config =3D &gpu_cc_pll0_config, + .vco_table =3D lucid_ole_vco, + .num_vco =3D ARRAY_SIZE(lucid_ole_vco), + .regs =3D clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE], + .clkr =3D { + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_cc_pll0", + .parent_data =3D &(const struct clk_parent_data) { + .index =3D DT_BI_TCXO, + }, + .num_parents =3D 1, + .ops =3D &clk_alpha_pll_lucid_evo_ops, + }, + }, +}; + +/* 1250.0 MHz Configuration */ +static const struct alpha_pll_config gpu_cc_pll1_config =3D { + .l =3D 0x41, + .alpha =3D 0x1aaa, + .config_ctl_val =3D 0x20485699, + .config_ctl_hi_val =3D 0x00182261, + .config_ctl_hi1_val =3D 0x82aa299c, + .test_ctl_val =3D 0x00000000, + .test_ctl_hi_val =3D 0x00000003, + .test_ctl_hi1_val =3D 0x00009000, + .test_ctl_hi2_val =3D 0x00000034, + .user_ctl_val =3D 0x00000000, + .user_ctl_hi_val =3D 0x00400005, +}; + +static struct clk_alpha_pll gpu_cc_pll1 =3D { + .offset =3D 0x1000, + .config =3D &gpu_cc_pll1_config, + .vco_table =3D lucid_ole_vco, + .num_vco =3D ARRAY_SIZE(lucid_ole_vco), + .regs =3D clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE], + .clkr =3D { + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_cc_pll1", + .parent_data =3D &(const struct clk_parent_data) { + .index =3D DT_BI_TCXO, + }, + .num_parents =3D 1, + .ops =3D &clk_alpha_pll_lucid_evo_ops, + }, + }, +}; + +static const struct parent_map gpu_cc_parent_map_0[] =3D { + { P_BI_TCXO, 0 }, + { P_GPLL0_OUT_MAIN, 5 }, + { P_GPLL0_OUT_MAIN_DIV, 6 }, +}; + +static const struct clk_parent_data gpu_cc_parent_data_0[] =3D { + { .index =3D DT_BI_TCXO }, + { .index =3D DT_GPLL0_OUT_MAIN }, + { .index =3D DT_GPLL0_OUT_MAIN_DIV }, +}; + +static const struct parent_map gpu_cc_parent_map_1[] =3D { + { P_BI_TCXO, 0 }, + { P_GPU_CC_PLL0_OUT_MAIN, 1 }, + { P_GPU_CC_PLL1_OUT_MAIN, 3 }, + { P_GPLL0_OUT_MAIN, 5 }, + { P_GPLL0_OUT_MAIN_DIV, 6 }, +}; + +static const struct clk_parent_data gpu_cc_parent_data_1[] =3D { + { .index =3D DT_BI_TCXO }, + { .hw =3D &gpu_cc_pll0.clkr.hw }, + { .hw =3D &gpu_cc_pll1.clkr.hw }, + { .index =3D DT_GPLL0_OUT_MAIN }, + { .index =3D DT_GPLL0_OUT_MAIN_DIV }, +}; + +static const struct parent_map gpu_cc_parent_map_2[] =3D { + { P_BI_TCXO, 0 }, + { P_GPU_CC_PLL1_OUT_MAIN, 3 }, + { P_GPLL0_OUT_MAIN, 5 }, + { P_GPLL0_OUT_MAIN_DIV, 6 }, +}; + +static const struct clk_parent_data gpu_cc_parent_data_2[] =3D { + { .index =3D DT_BI_TCXO }, + { .hw =3D &gpu_cc_pll1.clkr.hw }, + { .index =3D DT_GPLL0_OUT_MAIN }, + { .index =3D DT_GPLL0_OUT_MAIN_DIV }, +}; + +static const struct freq_tbl ftbl_gpu_cc_ff_clk_src[] =3D { + F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0), + { } +}; + +static struct clk_rcg2 gpu_cc_ff_clk_src =3D { + .cmd_rcgr =3D 0x93d4, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D gpu_cc_parent_map_0, + .freq_tbl =3D ftbl_gpu_cc_ff_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_cc_ff_clk_src", + .parent_data =3D gpu_cc_parent_data_0, + .num_parents =3D ARRAY_SIZE(gpu_cc_parent_data_0), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_shared_ops, + }, +}; + +static const struct freq_tbl ftbl_gpu_cc_gmu_clk_src[] =3D { + F(416666667, P_GPU_CC_PLL1_OUT_MAIN, 3, 0, 0), + F(625000000, P_GPU_CC_PLL1_OUT_MAIN, 2, 0, 0), + { } +}; + +static struct clk_rcg2 gpu_cc_gmu_clk_src =3D { + .cmd_rcgr =3D 0x92b8, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D gpu_cc_parent_map_1, + .freq_tbl =3D ftbl_gpu_cc_gmu_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_cc_gmu_clk_src", + .parent_data =3D gpu_cc_parent_data_1, + .num_parents =3D ARRAY_SIZE(gpu_cc_parent_data_1), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_shared_ops, + }, +}; + +static const struct freq_tbl ftbl_gpu_cc_hub_clk_src[] =3D { + F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0), + { } +}; + +static struct clk_rcg2 gpu_cc_hub_clk_src =3D { + .cmd_rcgr =3D 0x938c, + .mnd_width =3D 0, + .hid_width =3D 5, + .parent_map =3D gpu_cc_parent_map_2, + .freq_tbl =3D ftbl_gpu_cc_hub_clk_src, + .hw_clk_ctrl =3D true, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_cc_hub_clk_src", + .parent_data =3D gpu_cc_parent_data_2, + .num_parents =3D ARRAY_SIZE(gpu_cc_parent_data_2), + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_rcg2_shared_ops, + }, +}; + +static struct clk_regmap_div gpu_cc_hub_div_clk_src =3D { + .reg =3D 0x93cc, + .shift =3D 0, + .width =3D 4, + .clkr.hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_cc_hub_div_clk_src", + .parent_hws =3D (const struct clk_hw*[]) { + &gpu_cc_hub_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_regmap_div_ro_ops, + }, +}; + +static struct clk_branch gpu_cc_acd_gfx3d_clk =3D { + .halt_reg =3D 0x92a8, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x92a8, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_cc_acd_gfx3d_clk", + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch gpu_cc_acmu_clk =3D { + .halt_reg =3D 0x9294, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x9294, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_cc_acmu_clk", + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch gpu_cc_ahb_clk =3D { + .halt_reg =3D 0x9150, + .halt_check =3D BRANCH_HALT_DELAY, + .clkr =3D { + .enable_reg =3D 0x9150, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_cc_ahb_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &gpu_cc_hub_div_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch gpu_cc_crc_ahb_clk =3D { + .halt_reg =3D 0x9154, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0x9154, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_cc_crc_ahb_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &gpu_cc_hub_div_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch gpu_cc_cx_accu_shift_clk =3D { + .halt_reg =3D 0x91a4, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0x91a4, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_cc_cx_accu_shift_clk", + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch gpu_cc_cx_ff_clk =3D { + .halt_reg =3D 0x9184, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x9184, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_cc_cx_ff_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &gpu_cc_ff_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch gpu_cc_cx_gmu_clk =3D { + .halt_reg =3D 0x916c, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0x916c, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_cc_cx_gmu_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &gpu_cc_gmu_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_aon_ops, + }, + }, +}; + +static struct clk_branch gpu_cc_cxo_clk =3D { + .halt_reg =3D 0x917c, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x917c, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_cc_cxo_clk", + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch gpu_cc_dpm_clk =3D { + .halt_reg =3D 0x91a8, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x91a8, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_cc_dpm_clk", + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch gpu_cc_freq_measure_clk =3D { + .halt_reg =3D 0x9008, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x9008, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_cc_freq_measure_clk", + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch gpu_cc_gpu_smmu_vote_clk =3D { + .halt_reg =3D 0x7000, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0x7000, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_cc_gpu_smmu_vote_clk", + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch gpu_cc_hub_aon_clk =3D { + .halt_reg =3D 0x9388, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0x9388, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_cc_hub_aon_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &gpu_cc_hub_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_aon_ops, + }, + }, +}; + +static struct clk_branch gpu_cc_hub_cx_int_clk =3D { + .halt_reg =3D 0x9180, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0x9180, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_cc_hub_cx_int_clk", + .parent_hws =3D (const struct clk_hw*[]) { + &gpu_cc_hub_clk_src.clkr.hw, + }, + .num_parents =3D 1, + .flags =3D CLK_SET_RATE_PARENT, + .ops =3D &clk_branch2_aon_ops, + }, + }, +}; + +static struct clk_branch gpu_cc_memnoc_gfx_clk =3D { + .halt_reg =3D 0x9188, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0x9188, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_cc_memnoc_gfx_clk", + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch gpu_cc_mnd1x_gfx3d_clk =3D { + .halt_reg =3D 0x92ac, + .halt_check =3D BRANCH_HALT, + .clkr =3D { + .enable_reg =3D 0x92ac, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_cc_mnd1x_gfx3d_clk", + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct clk_branch gpu_cc_sleep_clk =3D { + .halt_reg =3D 0x9164, + .halt_check =3D BRANCH_HALT_VOTED, + .clkr =3D { + .enable_reg =3D 0x9164, + .enable_mask =3D BIT(0), + .hw.init =3D &(const struct clk_init_data) { + .name =3D "gpu_cc_sleep_clk", + .ops =3D &clk_branch2_ops, + }, + }, +}; + +static struct gdsc gpu_cc_cx_gdsc =3D { + .gdscr =3D 0x90e8, + .gds_hw_ctrl =3D 0x9128, + .en_rest_wait_val =3D 0x2, + .en_few_wait_val =3D 0x2, + .clk_dis_wait_val =3D 0xf, + .pd =3D { + .name =3D "gpu_cc_cx_gdsc", + }, + .pwrsts =3D PWRSTS_OFF_ON, + .flags =3D VOTABLE | RETAIN_FF_ENABLE, +}; + +static struct gdsc gpu_cc_gx_gdsc =3D { + .gdscr =3D 0x905c, + .clamp_io_ctrl =3D 0x9504, + .en_rest_wait_val =3D 0x2, + .en_few_wait_val =3D 0x2, + .clk_dis_wait_val =3D 0xf, + .pd =3D { + .name =3D "gpu_cc_gx_gdsc", + .power_on =3D gdsc_gx_do_nothing_enable, + }, + .pwrsts =3D PWRSTS_OFF_ON, + .flags =3D CLAMP_IO | POLL_CFG_GDSCR | RETAIN_FF_ENABLE, +}; + +static struct clk_regmap *gpu_cc_nord_clocks[] =3D { + [GPU_CC_ACD_GFX3D_CLK] =3D &gpu_cc_acd_gfx3d_clk.clkr, + [GPU_CC_ACMU_CLK] =3D &gpu_cc_acmu_clk.clkr, + [GPU_CC_AHB_CLK] =3D &gpu_cc_ahb_clk.clkr, + [GPU_CC_CRC_AHB_CLK] =3D &gpu_cc_crc_ahb_clk.clkr, + [GPU_CC_CX_ACCU_SHIFT_CLK] =3D &gpu_cc_cx_accu_shift_clk.clkr, + [GPU_CC_CX_FF_CLK] =3D &gpu_cc_cx_ff_clk.clkr, + [GPU_CC_CX_GMU_CLK] =3D &gpu_cc_cx_gmu_clk.clkr, + [GPU_CC_CXO_CLK] =3D &gpu_cc_cxo_clk.clkr, + [GPU_CC_DPM_CLK] =3D &gpu_cc_dpm_clk.clkr, + [GPU_CC_FF_CLK_SRC] =3D &gpu_cc_ff_clk_src.clkr, + [GPU_CC_FREQ_MEASURE_CLK] =3D &gpu_cc_freq_measure_clk.clkr, + [GPU_CC_GMU_CLK_SRC] =3D &gpu_cc_gmu_clk_src.clkr, + [GPU_CC_GPU_SMMU_VOTE_CLK] =3D &gpu_cc_gpu_smmu_vote_clk.clkr, + [GPU_CC_HUB_AON_CLK] =3D &gpu_cc_hub_aon_clk.clkr, + [GPU_CC_HUB_CLK_SRC] =3D &gpu_cc_hub_clk_src.clkr, + [GPU_CC_HUB_CX_INT_CLK] =3D &gpu_cc_hub_cx_int_clk.clkr, + [GPU_CC_HUB_DIV_CLK_SRC] =3D &gpu_cc_hub_div_clk_src.clkr, + [GPU_CC_MEMNOC_GFX_CLK] =3D &gpu_cc_memnoc_gfx_clk.clkr, + [GPU_CC_MND1X_GFX3D_CLK] =3D &gpu_cc_mnd1x_gfx3d_clk.clkr, + [GPU_CC_PLL0] =3D &gpu_cc_pll0.clkr, + [GPU_CC_PLL1] =3D &gpu_cc_pll1.clkr, + [GPU_CC_SLEEP_CLK] =3D &gpu_cc_sleep_clk.clkr, +}; + +static struct gdsc *gpu_cc_nord_gdscs[] =3D { + [GPU_CC_CX_GDSC] =3D &gpu_cc_cx_gdsc, + [GPU_CC_GX_GDSC] =3D &gpu_cc_gx_gdsc, +}; + +static const struct qcom_reset_map gpu_cc_nord_resets[] =3D { + [GPU_CC_ACD_BCR] =3D { 0x92f8 }, + [GPU_CC_CB_BCR] =3D { 0x9340 }, + [GPU_CC_CX_BCR] =3D { 0x90e4 }, + [GPU_CC_FAST_HUB_BCR] =3D { 0x9384 }, + [GPU_CC_GFX3D_AON_BCR] =3D { 0x91ac }, + [GPU_CC_GX_BCR] =3D { 0x9058 }, + [GPU_CC_XO_BCR] =3D { 0x9000 }, +}; + +static struct clk_alpha_pll *gpu_cc_nord_plls[] =3D { + &gpu_cc_pll0, + &gpu_cc_pll1, +}; + +static const u32 gpu_cc_nord_critical_cbcrs[] =3D { + 0x9004, /* GPU_CC_CXO_AON_CLK */ + 0x900c, /* GPU_CC_DEMET_CLK */ +}; + +static const struct regmap_config gpu_cc_nord_regmap_config =3D { + .reg_bits =3D 32, + .reg_stride =3D 4, + .val_bits =3D 32, + .max_register =3D 0x9660, + .fast_io =3D true, +}; + +static const struct qcom_cc_driver_data gpu_cc_nord_driver_data =3D { + .alpha_plls =3D gpu_cc_nord_plls, + .num_alpha_plls =3D ARRAY_SIZE(gpu_cc_nord_plls), + .clk_cbcrs =3D gpu_cc_nord_critical_cbcrs, + .num_clk_cbcrs =3D ARRAY_SIZE(gpu_cc_nord_critical_cbcrs), +}; + +static const struct qcom_cc_desc gpu_cc_nord_desc =3D { + .config =3D &gpu_cc_nord_regmap_config, + .clks =3D gpu_cc_nord_clocks, + .num_clks =3D ARRAY_SIZE(gpu_cc_nord_clocks), + .resets =3D gpu_cc_nord_resets, + .num_resets =3D ARRAY_SIZE(gpu_cc_nord_resets), + .gdscs =3D gpu_cc_nord_gdscs, + .num_gdscs =3D ARRAY_SIZE(gpu_cc_nord_gdscs), + .use_rpm =3D true, + .driver_data =3D &gpu_cc_nord_driver_data, +}; + +static const struct of_device_id gpu_cc_nord_match_table[] =3D { + { .compatible =3D "qcom,nord-gpucc" }, + { } +}; +MODULE_DEVICE_TABLE(of, gpu_cc_nord_match_table); + +static int gpu_cc_nord_probe(struct platform_device *pdev) +{ + return qcom_cc_probe(pdev, &gpu_cc_nord_desc); +} + +static struct platform_driver gpu_cc_nord_driver =3D { + .probe =3D gpu_cc_nord_probe, + .driver =3D { + .name =3D "gpucc-nord", + .of_match_table =3D gpu_cc_nord_match_table, + }, +}; + +module_platform_driver(gpu_cc_nord_driver); + +MODULE_DESCRIPTION("QTI GPUCC Nord Driver"); +MODULE_LICENSE("GPL"); --=20 2.34.1