Merge branches 'clk-scmi', 'clk-qcom' and 'clk-broadcom' into clk-next

* clk-scmi:
  clk: scmi: Add duty cycle ops only when duty cycle is supported

* clk-qcom: (27 commits)
  clk: qcom: gcc-sc8280xp: drop obsolete PCIe GDSC comment
  clk: qcom: tcsrcc-x1e80100: Set the bi_tcxo as parent to eDP refclk
  clk: qcom: dispcc-glymur: Constify 'struct qcom_cc_desc'
  clk: qcom: gcc: Add support for Global Clock controller found on MSM8937
  dt-bindings: clock: qcom: Add MSM8937 Global Clock Controller
  clk: qcom: Select the intended config in QCS_DISPCC_615
  clk: qcom: common: Fix NULL vs IS_ERR() check in qcom_cc_icc_register()
  clk: qcom: alpha-pll: convert from round_rate() to determine_rate()
  clk: qcom: milos: Constify 'struct qcom_cc_desc'
  clk: qcom: gcc: Add support for Global Clock Controller
  dt-bindings: clock: qcom: document the Glymur Global Clock Controller
  clk: qcom: clk-alpha-pll: Add support for Taycan EKO_T PLL
  clk: qcom: rpmh: Add support for Glymur rpmh clocks
  clk: qcom: Add TCSR clock driver for Glymur SoC
  dt-bindings: clock: qcom: Document the Glymur SoC TCSR Clock Controller
  dt-bindings: clock: qcom-rpmhcc: Add support for Glymur SoCs
  clk: qcom: dispcc-glymur: Add support for Display Clock Controller
  dt-bindings: clock: Add DISPCC and reset controller for GLYMUR SoC
  clk: qcom: gcc-sdm660: Add missing LPASS/CDSP vote clocks
  dt-bindings: clock: gcc-sdm660: Add LPASS/CDSP vote clocks/GDSCs
  ...

* clk-broadcom:
  clk: bcm: rpi: Maximize V3D clock
  clk: bcm: rpi: Turn firmware clock on/off when preparing/unpreparing
  clk: bcm: rpi: Add missing logs if firmware fails
This commit is contained in:
Stephen Boyd
2025-10-06 12:57:03 -05:00
52 changed files with 13239 additions and 159 deletions

View File

@@ -9,16 +9,21 @@ title: Qualcomm Global Clock & Reset Controller on MSM8953
maintainers:
- Adam Skladowski <a_skl39@protonmail.com>
- Sireesh Kodali <sireeshkodali@protonmail.com>
- Barnabas Czeman <barnabas.czeman@mainlining.org>
description: |
Qualcomm global clock control module provides the clocks, resets and power
domains on MSM8953.
domains on MSM8937 or MSM8953.
See also: include/dt-bindings/clock/qcom,gcc-msm8953.h
See also::
include/dt-bindings/clock/qcom,gcc-msm8917.h
include/dt-bindings/clock/qcom,gcc-msm8953.h
properties:
compatible:
const: qcom,gcc-msm8953
enum:
- qcom,gcc-msm8937
- qcom,gcc-msm8953
clocks:
items:

View File

@@ -0,0 +1,98 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/clock/qcom,glymur-dispcc.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Qualcomm Display Clock & Reset Controller on GLYMUR
maintainers:
- Taniya Das <taniya.das@oss.qualcomm.com>
description: |
Qualcomm display clock control module which supports the clocks, resets and
power domains for the MDSS instances on GLYMUR SoC.
See also:
include/dt-bindings/clock/qcom,dispcc-glymur.h
properties:
compatible:
enum:
- qcom,glymur-dispcc
clocks:
items:
- description: Board CXO clock
- description: Board sleep clock
- description: DisplayPort 0 link clock
- description: DisplayPort 0 VCO div clock
- description: DisplayPort 1 link clock
- description: DisplayPort 1 VCO div clock
- description: DisplayPort 2 link clock
- description: DisplayPort 2 VCO div clock
- description: DisplayPort 3 link clock
- description: DisplayPort 3 VCO div clock
- description: DSI 0 PLL byte clock
- description: DSI 0 PLL DSI clock
- description: DSI 1 PLL byte clock
- description: DSI 1 PLL DSI clock
- description: Standalone PHY 0 PLL link clock
- description: Standalone PHY 0 VCO div clock
- description: Standalone PHY 1 PLL link clock
- description: Standalone PHY 1 VCO div clock
power-domains:
description:
A phandle and PM domain specifier for the MMCX power domain.
maxItems: 1
required-opps:
description:
A phandle to an OPP node describing required MMCX performance point.
maxItems: 1
required:
- compatible
- clocks
- power-domains
- '#power-domain-cells'
allOf:
- $ref: qcom,gcc.yaml#
unevaluatedProperties: false
examples:
- |
#include <dt-bindings/clock/qcom,rpmh.h>
#include <dt-bindings/power/qcom,rpmhpd.h>
clock-controller@af00000 {
compatible = "qcom,glymur-dispcc";
reg = <0x0af00000 0x20000>;
clocks = <&rpmhcc RPMH_CXO_CLK>,
<&sleep_clk>,
<&mdss_dp_phy0 0>,
<&mdss_dp_phy0 1>,
<&mdss_dp_phy1 0>,
<&mdss_dp_phy1 1>,
<&mdss_dp_phy2 0>,
<&mdss_dp_phy2 1>,
<&mdss_dp_phy3 0>,
<&mdss_dp_phy3 1>,
<&mdss_dsi0_phy 0>,
<&mdss_dsi0_phy 1>,
<&mdss_dsi1_phy 0>,
<&mdss_dsi1_phy 1>,
<&mdss_phy0_link 0>,
<&mdss_phy0_vco_div 0>,
<&mdss_phy1_link 1>,
<&mdss_phy1_vco_div 1>;
power-domains = <&rpmhpd RPMHPD_MMCX>;
required-opps = <&rpmhpd_opp_low_svs>;
#clock-cells = <1>;
#reset-cells = <1>;
#power-domain-cells = <1>;
};
...

View File

@@ -0,0 +1,121 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/clock/qcom,glymur-gcc.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Qualcomm Global Clock & Reset Controller on Glymur SoC
maintainers:
- Taniya Das <taniya.das@oss.qualcomm.com>
description: |
Qualcomm global clock control module provides the clocks, resets and power
domains on Glymur SoC.
See also: include/dt-bindings/clock/qcom,glymur-gcc.h
properties:
compatible:
const: qcom,glymur-gcc
clocks:
items:
- description: Board XO source
- description: Board XO_A source
- description: Sleep clock source
- description: USB 0 Phy DP0 GMUX clock source
- description: USB 0 Phy DP1 GMUX clock source
- description: USB 0 Phy PCIE PIPEGMUX clock source
- description: USB 0 Phy PIPEGMUX clock source
- description: USB 0 Phy SYS PCIE PIPEGMUX clock source
- description: USB 1 Phy DP0 GMUX 2 clock source
- description: USB 1 Phy DP1 GMUX 2 clock source
- description: USB 1 Phy PCIE PIPEGMUX clock source
- description: USB 1 Phy PIPEGMUX clock source
- description: USB 1 Phy SYS PCIE PIPEGMUX clock source
- description: USB 2 Phy DP0 GMUX 2 clock source
- description: USB 2 Phy DP1 GMUX 2 clock source
- description: USB 2 Phy PCIE PIPEGMUX clock source
- description: USB 2 Phy PIPEGMUX clock source
- description: USB 2 Phy SYS PCIE PIPEGMUX clock source
- description: PCIe 3a pipe clock
- description: PCIe 3b pipe clock
- description: PCIe 4 pipe clock
- description: PCIe 5 pipe clock
- description: PCIe 6 pipe clock
- description: QUSB4 0 PHY RX 0 clock source
- description: QUSB4 0 PHY RX 1 clock source
- description: QUSB4 1 PHY RX 0 clock source
- description: QUSB4 1 PHY RX 1 clock source
- description: QUSB4 2 PHY RX 0 clock source
- description: QUSB4 2 PHY RX 1 clock source
- description: UFS PHY RX Symbol 0 clock source
- description: UFS PHY RX Symbol 1 clock source
- description: UFS PHY TX Symbol 0 clock source
- description: USB3 PHY 0 pipe clock source
- description: USB3 PHY 1 pipe clock source
- description: USB3 PHY 2 pipe clock source
- description: USB3 UNI PHY pipe 0 clock source
- description: USB3 UNI PHY pipe 1 clock source
- description: USB4 PHY 0 pcie pipe clock source
- description: USB4 PHY 0 Max pipe clock source
- description: USB4 PHY 1 pcie pipe clock source
- description: USB4 PHY 1 Max pipe clock source
- description: USB4 PHY 2 pcie pipe clock source
- description: USB4 PHY 2 Max pipe clock source
required:
- compatible
- clocks
- '#power-domain-cells'
allOf:
- $ref: qcom,gcc.yaml#
unevaluatedProperties: false
examples:
- |
#include <dt-bindings/clock/qcom,rpmh.h>
clock-controller@100000 {
compatible = "qcom,glymur-gcc";
reg = <0x100000 0x1f9000>;
clocks = <&rpmhcc RPMH_CXO_CLK>,
<&rpmhcc RPMH_CXO_CLK_A>,
<&sleep_clk>,
<&usb_0_phy_dp0_gmux>,
<&usb_0_phy_dp1_gmux>,
<&usb_0_phy_pcie_pipegmux>,
<&usb_0_phy_pipegmux>,
<&usb_0_phy_sys_pcie_pipegmux>,
<&usb_1_phy_dp0_gmux_2>,
<&usb_1_phy_dp1_gmux_2>,
<&usb_1_phy_pcie_pipegmux>,
<&usb_1_phy_pipegmux>,
<&usb_1_phy_sys_pcie_pipegmux>,
<&usb_2_phy_dp0_gmux 2>,
<&usb_2_phy_dp1_gmux 2>,
<&usb_2_phy_pcie_pipegmux>,
<&usb_2_phy_pipegmux>,
<&usb_2_phy_sys_pcie_pipegmux>,
<&pcie_3a_pipe>, <&pcie_3b_pipe>,
<&pcie_4_pipe>, <&pcie_5_pipe>,
<&pcie_6_pipe>,
<&qusb4_0_phy_rx_0>, <&qusb4_0_phy_rx_1>,
<&qusb4_1_phy_rx_0>, <&qusb4_1_phy_rx_1>,
<&qusb4_2_phy_rx_0>, <&qusb4_2_phy_rx_1>,
<&ufs_phy_rx_symbol_0>, <&ufs_phy_rx_symbol_1>,
<&ufs_phy_tx_symbol_0>,
<&usb3_phy_0_pipe>, <&usb3_phy_1_pipe>,
<&usb3_phy_2_pipe>,
<&usb3_uni_phy_pipe_0>, <&usb3_uni_phy_pipe_1>,
<&usb4_phy_0_pcie_pipe>, <&usb4_phy_0_max_pipe>,
<&usb4_phy_1_pcie_pipe>, <&usb4_phy_1_max_pipe>,
<&usb4_phy_2_pcie_pipe>, <&usb4_phy_2_max_pipe>;
#clock-cells = <1>;
#reset-cells = <1>;
#power-domain-cells = <1>;
};
...

View File

@@ -0,0 +1,55 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/clock/qcom,ipq5424-apss-clk.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Qualcomm APSS IPQ5424 Clock Controller
maintainers:
- Varadarajan Narayanan <quic_varada@quicinc.com>
description:
The CPU core in ipq5424 is clocked by a huayra PLL with RCG support.
The RCG and PLL have a separate register space from the GCC.
properties:
compatible:
enum:
- qcom,ipq5424-apss-clk
reg:
maxItems: 1
clocks:
items:
- description: Reference to the XO clock.
- description: Reference to the GPLL0 clock.
'#clock-cells':
const: 1
'#interconnect-cells':
const: 1
required:
- compatible
- reg
- clocks
- '#clock-cells'
- '#interconnect-cells'
additionalProperties: false
examples:
- |
#include <dt-bindings/clock/qcom,ipq5424-gcc.h>
apss_clk: clock-controller@fa80000 {
compatible = "qcom,ipq5424-apss-clk";
reg = <0x0fa80000 0x20000>;
clocks = <&xo_board>,
<&gcc GPLL0>;
#clock-cells = <1>;
#interconnect-cells = <1>;
};

View File

@@ -17,6 +17,7 @@ description: |
properties:
compatible:
enum:
- qcom,glymur-rpmh-clk
- qcom,milos-rpmh-clk
- qcom,qcs615-rpmh-clk
- qcom,qdu1000-rpmh-clk

View File

@@ -8,12 +8,14 @@ title: Qualcomm TCSR Clock Controller on SM8550
maintainers:
- Bjorn Andersson <andersson@kernel.org>
- Taniya Das <taniya.das@oss.qualcomm.com>
description: |
Qualcomm TCSR clock control module provides the clocks, resets and
power domains on SM8550
See also:
- include/dt-bindings/clock/qcom,glymur-tcsr.h
- include/dt-bindings/clock/qcom,sm8550-tcsr.h
- include/dt-bindings/clock/qcom,sm8650-tcsr.h
- include/dt-bindings/clock/qcom,sm8750-tcsr.h
@@ -22,6 +24,7 @@ properties:
compatible:
items:
- enum:
- qcom,glymur-tcsr
- qcom,milos-tcsr
- qcom,sar2130p-tcsr
- qcom,sm8550-tcsr

View File

@@ -23,13 +23,17 @@ description: |
properties:
compatible:
enum:
- qcom,sc7180-videocc
- qcom,sc7280-videocc
- qcom,sdm845-videocc
- qcom,sm6350-videocc
- qcom,sm8150-videocc
- qcom,sm8250-videocc
oneOf:
- enum:
- qcom,sc7180-videocc
- qcom,sc7280-videocc
- qcom,sdm845-videocc
- qcom,sm6350-videocc
- qcom,sm8150-videocc
- qcom,sm8250-videocc
- items:
- const: qcom,sc8180x-videocc
- const: qcom,sm8150-videocc
clocks:
minItems: 1
@@ -110,8 +114,9 @@ allOf:
- if:
properties:
compatible:
enum:
- qcom,sm8150-videocc
contains:
enum:
- qcom,sm8150-videocc
then:
properties:
clocks:

View File

@@ -68,6 +68,8 @@ struct raspberrypi_clk_variant {
char *clkdev;
unsigned long min_rate;
bool minimize;
bool maximize;
u32 flags;
};
static struct raspberrypi_clk_variant
@@ -75,6 +77,7 @@ raspberrypi_clk_variants[RPI_FIRMWARE_NUM_CLK_ID] = {
[RPI_FIRMWARE_ARM_CLK_ID] = {
.export = true,
.clkdev = "cpu0",
.flags = CLK_IS_CRITICAL,
},
[RPI_FIRMWARE_CORE_CLK_ID] = {
.export = true,
@@ -90,6 +93,12 @@ raspberrypi_clk_variants[RPI_FIRMWARE_NUM_CLK_ID] = {
* always use the minimum the drivers will let us.
*/
.minimize = true,
/*
* It should never be disabled as it drives the bus for
* everything else.
*/
.flags = CLK_IS_CRITICAL,
},
[RPI_FIRMWARE_M2MC_CLK_ID] = {
.export = true,
@@ -115,18 +124,29 @@ raspberrypi_clk_variants[RPI_FIRMWARE_NUM_CLK_ID] = {
* drivers will let us.
*/
.minimize = true,
/*
* As mentioned above, this clock is disabled during boot,
* the firmware will skip the HSM initialization, resulting
* in a bus lockup. Therefore, make sure it's enabled
* during boot, but after it, it can be enabled/disabled
* by the driver.
*/
.flags = CLK_IGNORE_UNUSED,
},
[RPI_FIRMWARE_V3D_CLK_ID] = {
.export = true,
.minimize = true,
.maximize = true,
},
[RPI_FIRMWARE_PIXEL_CLK_ID] = {
.export = true,
.minimize = true,
.flags = CLK_IS_CRITICAL,
},
[RPI_FIRMWARE_HEVC_CLK_ID] = {
.export = true,
.minimize = true,
.flags = CLK_IS_CRITICAL,
},
[RPI_FIRMWARE_ISP_CLK_ID] = {
.export = true,
@@ -135,6 +155,7 @@ raspberrypi_clk_variants[RPI_FIRMWARE_NUM_CLK_ID] = {
[RPI_FIRMWARE_PIXEL_BVB_CLK_ID] = {
.export = true,
.minimize = true,
.flags = CLK_IS_CRITICAL,
},
[RPI_FIRMWARE_VEC_CLK_ID] = {
.export = true,
@@ -194,8 +215,11 @@ static int raspberrypi_fw_is_prepared(struct clk_hw *hw)
ret = raspberrypi_clock_property(rpi->firmware, data,
RPI_FIRMWARE_GET_CLOCK_STATE, &val);
if (ret)
if (ret) {
dev_err_ratelimited(rpi->dev, "Failed to get %s state: %d\n",
clk_hw_get_name(hw), ret);
return 0;
}
return !!(val & RPI_FIRMWARE_STATE_ENABLE_BIT);
}
@@ -211,8 +235,11 @@ static unsigned long raspberrypi_fw_get_rate(struct clk_hw *hw,
ret = raspberrypi_clock_property(rpi->firmware, data,
RPI_FIRMWARE_GET_CLOCK_RATE, &val);
if (ret)
if (ret) {
dev_err_ratelimited(rpi->dev, "Failed to get %s frequency: %d\n",
clk_hw_get_name(hw), ret);
return 0;
}
return val;
}
@@ -259,7 +286,41 @@ static int raspberrypi_fw_dumb_determine_rate(struct clk_hw *hw,
return 0;
}
static int raspberrypi_fw_prepare(struct clk_hw *hw)
{
const struct raspberrypi_clk_data *data = clk_hw_to_data(hw);
struct raspberrypi_clk *rpi = data->rpi;
u32 state = RPI_FIRMWARE_STATE_ENABLE_BIT;
int ret;
ret = raspberrypi_clock_property(rpi->firmware, data,
RPI_FIRMWARE_SET_CLOCK_STATE, &state);
if (ret)
dev_err_ratelimited(rpi->dev,
"Failed to set clock %s state to on: %d\n",
clk_hw_get_name(hw), ret);
return ret;
}
static void raspberrypi_fw_unprepare(struct clk_hw *hw)
{
const struct raspberrypi_clk_data *data = clk_hw_to_data(hw);
struct raspberrypi_clk *rpi = data->rpi;
u32 state = 0;
int ret;
ret = raspberrypi_clock_property(rpi->firmware, data,
RPI_FIRMWARE_SET_CLOCK_STATE, &state);
if (ret)
dev_err_ratelimited(rpi->dev,
"Failed to set clock %s state to off: %d\n",
clk_hw_get_name(hw), ret);
}
static const struct clk_ops raspberrypi_firmware_clk_ops = {
.prepare = raspberrypi_fw_prepare,
.unprepare = raspberrypi_fw_unprepare,
.is_prepared = raspberrypi_fw_is_prepared,
.recalc_rate = raspberrypi_fw_get_rate,
.determine_rate = raspberrypi_fw_dumb_determine_rate,
@@ -289,7 +350,7 @@ static struct clk_hw *raspberrypi_clk_register(struct raspberrypi_clk *rpi,
if (!init.name)
return ERR_PTR(-ENOMEM);
init.ops = &raspberrypi_firmware_clk_ops;
init.flags = CLK_GET_RATE_NOCACHE;
init.flags = variant->flags | CLK_GET_RATE_NOCACHE;
data->hw.init = &init;
@@ -326,6 +387,9 @@ static struct clk_hw *raspberrypi_clk_register(struct raspberrypi_clk *rpi,
}
}
if (variant->maximize)
variant->min_rate = max_rate;
if (variant->min_rate) {
unsigned long rate;

View File

@@ -349,6 +349,8 @@ scmi_clk_ops_select(struct scmi_clk *sclk, bool atomic_capable,
unsigned int atomic_threshold_us,
const struct clk_ops **clk_ops_db, size_t db_size)
{
int ret;
u32 val;
const struct scmi_clock_info *ci = sclk->info;
unsigned int feats_key = 0;
const struct clk_ops *ops;
@@ -370,8 +372,13 @@ scmi_clk_ops_select(struct scmi_clk *sclk, bool atomic_capable,
if (!ci->parent_ctrl_forbidden)
feats_key |= BIT(SCMI_CLK_PARENT_CTRL_SUPPORTED);
if (ci->extended_config)
feats_key |= BIT(SCMI_CLK_DUTY_CYCLE_SUPPORTED);
if (ci->extended_config) {
ret = scmi_proto_clk_ops->config_oem_get(sclk->ph, sclk->id,
SCMI_CLOCK_CFG_DUTY_CYCLE,
&val, NULL, false);
if (!ret)
feats_key |= BIT(SCMI_CLK_DUTY_CYCLE_SUPPORTED);
}
if (WARN_ON(feats_key >= db_size))
return NULL;

View File

@@ -19,6 +19,33 @@ menuconfig COMMON_CLK_QCOM
if COMMON_CLK_QCOM
config CLK_GLYMUR_DISPCC
tristate "GLYMUR Display Clock Controller"
depends on ARM64 || COMPILE_TEST
select CLK_GLYMUR_GCC
help
Support for the display clock controllers on Qualcomm
Technologies, Inc. GLYMUR devices.
Say Y if you want to support display devices and functionality such as
splash screen.
config CLK_GLYMUR_GCC
tristate "GLYMUR Global Clock Controller"
depends on ARM64 || COMPILE_TEST
select QCOM_GDSC
help
Support for the global clock controller on GLYMUR devices.
Say Y if you want to use peripheral devices such as UART, SPI,
I2C, USB, UFS, SDCC, etc.
config CLK_GLYMUR_TCSRCC
tristate "GLYMUR TCSR Clock Controller"
depends on ARM64 || COMPILE_TEST
select QCOM_GDSC
help
Support for the TCSR clock controller on GLYMUR devices.
Say Y if you want to use peripheral devices such as USB/PCIe/EDP.
config CLK_X1E80100_CAMCC
tristate "X1E80100 Camera Clock Controller"
depends on ARM64 || COMPILE_TEST
@@ -187,6 +214,15 @@ config IPQ_APSS_PLL
Say Y if you want to support CPU frequency scaling on ipq based
devices.
config IPQ_APSS_5424
tristate "IPQ APSS Clock Controller"
select IPQ_APSS_PLL
default y if IPQ_GCC_5424
help
Support for APSS Clock controller on Qualcom IPQ5424 platform.
Say Y if you want to support CPU frequency scaling on ipq based
devices.
config IPQ_APSS_6018
tristate "IPQ APSS Clock Controller"
select IPQ_APSS_PLL
@@ -323,12 +359,12 @@ config MSM_GCC_8916
SD/eMMC, display, graphics, camera etc.
config MSM_GCC_8917
tristate "MSM8917/QM215 Global Clock Controller"
tristate "MSM89(17/37)/QM215 Global Clock Controller"
depends on ARM64 || COMPILE_TEST
select QCOM_GDSC
help
Support for the global clock controller on msm8917 and qm215
devices.
Support for the global clock controller on msm8917, msm8937
and qm215 devices.
Say Y if you want to use devices such as UART, SPI i2c, USB,
SD/eMMC, display, graphics, camera etc.
@@ -495,7 +531,7 @@ config QCM_DISPCC_2290
config QCS_DISPCC_615
tristate "QCS615 Display Clock Controller"
select QCM_GCC_615
select QCS_GCC_615
help
Support for the display clock controller on Qualcomm Technologies, Inc
QCS615 devices.

View File

@@ -21,6 +21,9 @@ clk-qcom-$(CONFIG_QCOM_GDSC) += gdsc.o
obj-$(CONFIG_APQ_GCC_8084) += gcc-apq8084.o
obj-$(CONFIG_APQ_MMCC_8084) += mmcc-apq8084.o
obj-$(CONFIG_CLK_GFM_LPASS_SM8250) += lpass-gfm-sm8250.o
obj-$(CONFIG_CLK_GLYMUR_DISPCC) += dispcc-glymur.o
obj-$(CONFIG_CLK_GLYMUR_GCC) += gcc-glymur.o
obj-$(CONFIG_CLK_GLYMUR_TCSRCC) += tcsrcc-glymur.o
obj-$(CONFIG_CLK_X1E80100_CAMCC) += camcc-x1e80100.o
obj-$(CONFIG_CLK_X1E80100_DISPCC) += dispcc-x1e80100.o
obj-$(CONFIG_CLK_X1E80100_GCC) += gcc-x1e80100.o
@@ -29,6 +32,7 @@ obj-$(CONFIG_CLK_X1E80100_TCSRCC) += tcsrcc-x1e80100.o
obj-$(CONFIG_CLK_X1P42100_GPUCC) += gpucc-x1p42100.o
obj-$(CONFIG_CLK_QCM2290_GPUCC) += gpucc-qcm2290.o
obj-$(CONFIG_IPQ_APSS_PLL) += apss-ipq-pll.o
obj-$(CONFIG_IPQ_APSS_5424) += apss-ipq5424.o
obj-$(CONFIG_IPQ_APSS_6018) += apss-ipq6018.o
obj-$(CONFIG_IPQ_CMN_PLL) += ipq-cmn-pll.o
obj-$(CONFIG_IPQ_GCC_4019) += gcc-ipq4019.o

View File

@@ -27,7 +27,7 @@ static struct clk_alpha_pll a7pll = {
.clkr = {
.hw.init = &(struct clk_init_data){
.name = "a7pll",
.parent_data = &(const struct clk_parent_data){
.parent_data = &(const struct clk_parent_data){
.fw_name = "bi_tcxo",
},
.num_parents = 1,

View File

@@ -0,0 +1,265 @@
// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (c) 2018, The Linux Foundation. All rights reserved.
* Copyright (c) 2025, Qualcomm Innovation Center, Inc. All rights reserved.
*/
#include <linux/clk.h>
#include <linux/clk-provider.h>
#include <linux/err.h>
#include <linux/interconnect-provider.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>
#include <dt-bindings/arm/qcom,ids.h>
#include <dt-bindings/clock/qcom,apss-ipq.h>
#include <dt-bindings/interconnect/qcom,ipq5424.h>
#include "clk-alpha-pll.h"
#include "clk-branch.h"
#include "clk-rcg.h"
#include "clk-regmap.h"
#include "common.h"
enum {
DT_XO,
DT_CLK_REF,
};
enum {
P_XO,
P_GPLL0,
P_APSS_PLL_EARLY,
P_L3_PLL,
};
struct apss_clk {
struct notifier_block cpu_clk_notifier;
struct clk_hw *hw;
struct device *dev;
struct clk *l3_clk;
};
static const struct alpha_pll_config apss_pll_config = {
.l = 0x3b,
.config_ctl_val = 0x08200920,
.config_ctl_hi_val = 0x05008001,
.config_ctl_hi1_val = 0x04000000,
.user_ctl_val = 0xf,
};
static struct clk_alpha_pll ipq5424_apss_pll = {
.offset = 0x0,
.config = &apss_pll_config,
.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_HUAYRA_2290],
.flags = SUPPORTS_DYNAMIC_UPDATE,
.clkr = {
.enable_reg = 0x0,
.enable_mask = BIT(0),
.hw.init = &(struct clk_init_data){
.name = "apss_pll",
.parent_data = &(const struct clk_parent_data) {
.index = DT_XO,
},
.num_parents = 1,
.ops = &clk_alpha_pll_huayra_ops,
},
},
};
static const struct clk_parent_data parents_apss_silver_clk_src[] = {
{ .index = DT_XO },
{ .index = DT_CLK_REF },
{ .hw = &ipq5424_apss_pll.clkr.hw },
};
static const struct parent_map parents_apss_silver_clk_src_map[] = {
{ P_XO, 0 },
{ P_GPLL0, 4 },
{ P_APSS_PLL_EARLY, 5 },
};
static const struct freq_tbl ftbl_apss_clk_src[] = {
F(816000000, P_APSS_PLL_EARLY, 1, 0, 0),
F(1416000000, P_APSS_PLL_EARLY, 1, 0, 0),
F(1800000000, P_APSS_PLL_EARLY, 1, 0, 0),
{ }
};
static struct clk_rcg2 apss_silver_clk_src = {
.cmd_rcgr = 0x0080,
.freq_tbl = ftbl_apss_clk_src,
.hid_width = 5,
.parent_map = parents_apss_silver_clk_src_map,
.clkr.hw.init = &(struct clk_init_data) {
.name = "apss_silver_clk_src",
.parent_data = parents_apss_silver_clk_src,
.num_parents = ARRAY_SIZE(parents_apss_silver_clk_src),
.ops = &clk_rcg2_ops,
.flags = CLK_SET_RATE_PARENT,
},
};
static struct clk_branch apss_silver_core_clk = {
.halt_reg = 0x008c,
.clkr = {
.enable_reg = 0x008c,
.enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) {
.name = "apss_silver_core_clk",
.parent_hws = (const struct clk_hw *[]) {
&apss_silver_clk_src.clkr.hw
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
.ops = &clk_branch2_ops,
},
},
};
static const struct alpha_pll_config l3_pll_config = {
.l = 0x29,
.config_ctl_val = 0x08200920,
.config_ctl_hi_val = 0x05008001,
.config_ctl_hi1_val = 0x04000000,
.user_ctl_val = 0xf,
};
static struct clk_alpha_pll ipq5424_l3_pll = {
.offset = 0x10000,
.config = &l3_pll_config,
.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_HUAYRA_2290],
.flags = SUPPORTS_DYNAMIC_UPDATE,
.clkr = {
.enable_reg = 0x0,
.enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) {
.name = "l3_pll",
.parent_data = &(const struct clk_parent_data) {
.index = DT_XO,
},
.num_parents = 1,
.ops = &clk_alpha_pll_huayra_ops,
},
},
};
static const struct clk_parent_data parents_l3_clk_src[] = {
{ .index = DT_XO },
{ .index = DT_CLK_REF },
{ .hw = &ipq5424_l3_pll.clkr.hw },
};
static const struct parent_map parents_l3_clk_src_map[] = {
{ P_XO, 0 },
{ P_GPLL0, 4 },
{ P_L3_PLL, 5 },
};
static const struct freq_tbl ftbl_l3_clk_src[] = {
F(816000000, P_L3_PLL, 1, 0, 0),
F(984000000, P_L3_PLL, 1, 0, 0),
F(1272000000, P_L3_PLL, 1, 0, 0),
{ }
};
static struct clk_rcg2 l3_clk_src = {
.cmd_rcgr = 0x10080,
.freq_tbl = ftbl_l3_clk_src,
.hid_width = 5,
.parent_map = parents_l3_clk_src_map,
.clkr.hw.init = &(struct clk_init_data) {
.name = "l3_clk_src",
.parent_data = parents_l3_clk_src,
.num_parents = ARRAY_SIZE(parents_l3_clk_src),
.ops = &clk_rcg2_ops,
.flags = CLK_SET_RATE_PARENT,
},
};
static struct clk_branch l3_core_clk = {
.halt_reg = 0x1008c,
.clkr = {
.enable_reg = 0x1008c,
.enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) {
.name = "l3_clk",
.parent_hws = (const struct clk_hw *[]) {
&l3_clk_src.clkr.hw
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
.ops = &clk_branch2_ops,
},
},
};
static const struct regmap_config apss_ipq5424_regmap_config = {
.reg_bits = 32,
.reg_stride = 4,
.val_bits = 32,
.max_register = 0x20000,
.fast_io = true,
};
static struct clk_regmap *apss_ipq5424_clks[] = {
[APSS_PLL_EARLY] = &ipq5424_apss_pll.clkr,
[APSS_SILVER_CLK_SRC] = &apss_silver_clk_src.clkr,
[APSS_SILVER_CORE_CLK] = &apss_silver_core_clk.clkr,
[L3_PLL] = &ipq5424_l3_pll.clkr,
[L3_CLK_SRC] = &l3_clk_src.clkr,
[L3_CORE_CLK] = &l3_core_clk.clkr,
};
static struct clk_alpha_pll *ipa5424_apss_plls[] = {
&ipq5424_l3_pll,
&ipq5424_apss_pll,
};
static struct qcom_cc_driver_data ipa5424_apss_driver_data = {
.alpha_plls = ipa5424_apss_plls,
.num_alpha_plls = ARRAY_SIZE(ipa5424_apss_plls),
};
#define IPQ_APPS_PLL_ID (5424 * 3) /* some unique value */
static const struct qcom_icc_hws_data icc_ipq5424_cpu_l3[] = {
{ MASTER_CPU, SLAVE_L3, L3_CORE_CLK },
};
static const struct qcom_cc_desc apss_ipq5424_desc = {
.config = &apss_ipq5424_regmap_config,
.clks = apss_ipq5424_clks,
.num_clks = ARRAY_SIZE(apss_ipq5424_clks),
.icc_hws = icc_ipq5424_cpu_l3,
.num_icc_hws = ARRAY_SIZE(icc_ipq5424_cpu_l3),
.icc_first_node_id = IPQ_APPS_PLL_ID,
.driver_data = &ipa5424_apss_driver_data,
};
static int apss_ipq5424_probe(struct platform_device *pdev)
{
return qcom_cc_probe(pdev, &apss_ipq5424_desc);
}
static const struct of_device_id apss_ipq5424_match_table[] = {
{ .compatible = "qcom,ipq5424-apss-clk" },
{ }
};
MODULE_DEVICE_TABLE(of, apss_ipq5424_match_table);
static struct platform_driver apss_ipq5424_driver = {
.probe = apss_ipq5424_probe,
.driver = {
.name = "apss-ipq5424-clk",
.of_match_table = apss_ipq5424_match_table,
.sync_state = icc_sync_state,
},
};
module_platform_driver(apss_ipq5424_driver);
MODULE_DESCRIPTION("QCOM APSS IPQ5424 CLK Driver");
MODULE_LICENSE("GPL");

View File

@@ -2124,7 +2124,7 @@ static struct qcom_cc_driver_data cam_cc_milos_driver_data = {
.num_clk_cbcrs = ARRAY_SIZE(cam_cc_milos_critical_cbcrs),
};
static struct qcom_cc_desc cam_cc_milos_desc = {
static const struct qcom_cc_desc cam_cc_milos_desc = {
.config = &cam_cc_milos_regmap_config,
.clks = cam_cc_milos_clocks,
.num_clks = ARRAY_SIZE(cam_cc_milos_clocks),

View File

@@ -66,7 +66,7 @@
#define GET_PLL_TYPE(pll) (((pll)->regs - clk_alpha_pll_regs[0]) / PLL_OFF_MAX_REGS)
const u8 clk_alpha_pll_regs[][PLL_OFF_MAX_REGS] = {
[CLK_ALPHA_PLL_TYPE_DEFAULT] = {
[CLK_ALPHA_PLL_TYPE_DEFAULT] = {
[PLL_OFF_L_VAL] = 0x04,
[PLL_OFF_ALPHA_VAL] = 0x08,
[PLL_OFF_ALPHA_VAL_U] = 0x0c,
@@ -77,7 +77,7 @@ const u8 clk_alpha_pll_regs[][PLL_OFF_MAX_REGS] = {
[PLL_OFF_TEST_CTL_U] = 0x20,
[PLL_OFF_STATUS] = 0x24,
},
[CLK_ALPHA_PLL_TYPE_HUAYRA] = {
[CLK_ALPHA_PLL_TYPE_HUAYRA] = {
[PLL_OFF_L_VAL] = 0x04,
[PLL_OFF_ALPHA_VAL] = 0x08,
[PLL_OFF_USER_CTL] = 0x10,
@@ -87,7 +87,7 @@ const u8 clk_alpha_pll_regs[][PLL_OFF_MAX_REGS] = {
[PLL_OFF_TEST_CTL_U] = 0x20,
[PLL_OFF_STATUS] = 0x24,
},
[CLK_ALPHA_PLL_TYPE_HUAYRA_APSS] = {
[CLK_ALPHA_PLL_TYPE_HUAYRA_APSS] = {
[PLL_OFF_L_VAL] = 0x08,
[PLL_OFF_ALPHA_VAL] = 0x10,
[PLL_OFF_USER_CTL] = 0x18,
@@ -97,7 +97,7 @@ const u8 clk_alpha_pll_regs[][PLL_OFF_MAX_REGS] = {
[PLL_OFF_TEST_CTL] = 0x30,
[PLL_OFF_TEST_CTL_U] = 0x34,
},
[CLK_ALPHA_PLL_TYPE_HUAYRA_2290] = {
[CLK_ALPHA_PLL_TYPE_HUAYRA_2290] = {
[PLL_OFF_L_VAL] = 0x04,
[PLL_OFF_ALPHA_VAL] = 0x08,
[PLL_OFF_USER_CTL] = 0x0c,
@@ -110,7 +110,7 @@ const u8 clk_alpha_pll_regs[][PLL_OFF_MAX_REGS] = {
[PLL_OFF_OPMODE] = 0x28,
[PLL_OFF_STATUS] = 0x38,
},
[CLK_ALPHA_PLL_TYPE_BRAMMO] = {
[CLK_ALPHA_PLL_TYPE_BRAMMO] = {
[PLL_OFF_L_VAL] = 0x04,
[PLL_OFF_ALPHA_VAL] = 0x08,
[PLL_OFF_ALPHA_VAL_U] = 0x0c,
@@ -119,7 +119,7 @@ const u8 clk_alpha_pll_regs[][PLL_OFF_MAX_REGS] = {
[PLL_OFF_TEST_CTL] = 0x1c,
[PLL_OFF_STATUS] = 0x24,
},
[CLK_ALPHA_PLL_TYPE_FABIA] = {
[CLK_ALPHA_PLL_TYPE_FABIA] = {
[PLL_OFF_L_VAL] = 0x04,
[PLL_OFF_USER_CTL] = 0x0c,
[PLL_OFF_USER_CTL_U] = 0x10,
@@ -147,7 +147,7 @@ const u8 clk_alpha_pll_regs[][PLL_OFF_MAX_REGS] = {
[PLL_OFF_OPMODE] = 0x38,
[PLL_OFF_ALPHA_VAL] = 0x40,
},
[CLK_ALPHA_PLL_TYPE_AGERA] = {
[CLK_ALPHA_PLL_TYPE_AGERA] = {
[PLL_OFF_L_VAL] = 0x04,
[PLL_OFF_ALPHA_VAL] = 0x08,
[PLL_OFF_USER_CTL] = 0x0c,
@@ -157,7 +157,7 @@ const u8 clk_alpha_pll_regs[][PLL_OFF_MAX_REGS] = {
[PLL_OFF_TEST_CTL_U] = 0x1c,
[PLL_OFF_STATUS] = 0x2c,
},
[CLK_ALPHA_PLL_TYPE_ZONDA] = {
[CLK_ALPHA_PLL_TYPE_ZONDA] = {
[PLL_OFF_L_VAL] = 0x04,
[PLL_OFF_ALPHA_VAL] = 0x08,
[PLL_OFF_USER_CTL] = 0x0c,
@@ -243,7 +243,7 @@ const u8 clk_alpha_pll_regs[][PLL_OFF_MAX_REGS] = {
[PLL_OFF_TEST_CTL] = 0x28,
[PLL_OFF_TEST_CTL_U] = 0x2c,
},
[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO] = {
[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO] = {
[PLL_OFF_L_VAL] = 0x04,
[PLL_OFF_ALPHA_VAL] = 0x08,
[PLL_OFF_ALPHA_VAL_U] = 0x0c,
@@ -254,7 +254,7 @@ const u8 clk_alpha_pll_regs[][PLL_OFF_MAX_REGS] = {
[PLL_OFF_CONFIG_CTL] = 0x20,
[PLL_OFF_STATUS] = 0x24,
},
[CLK_ALPHA_PLL_TYPE_BRAMMO_EVO] = {
[CLK_ALPHA_PLL_TYPE_BRAMMO_EVO] = {
[PLL_OFF_L_VAL] = 0x04,
[PLL_OFF_ALPHA_VAL] = 0x08,
[PLL_OFF_ALPHA_VAL_U] = 0x0c,
@@ -275,7 +275,7 @@ const u8 clk_alpha_pll_regs[][PLL_OFF_MAX_REGS] = {
[PLL_OFF_TEST_CTL] = 0x30,
[PLL_OFF_TEST_CTL_U] = 0x34,
},
[CLK_ALPHA_PLL_TYPE_STROMER_PLUS] = {
[CLK_ALPHA_PLL_TYPE_STROMER_PLUS] = {
[PLL_OFF_L_VAL] = 0x04,
[PLL_OFF_USER_CTL] = 0x08,
[PLL_OFF_USER_CTL_U] = 0x0c,
@@ -286,7 +286,7 @@ const u8 clk_alpha_pll_regs[][PLL_OFF_MAX_REGS] = {
[PLL_OFF_ALPHA_VAL] = 0x24,
[PLL_OFF_ALPHA_VAL_U] = 0x28,
},
[CLK_ALPHA_PLL_TYPE_ZONDA_OLE] = {
[CLK_ALPHA_PLL_TYPE_ZONDA_OLE] = {
[PLL_OFF_L_VAL] = 0x04,
[PLL_OFF_ALPHA_VAL] = 0x08,
[PLL_OFF_USER_CTL] = 0x0c,
@@ -301,7 +301,7 @@ const u8 clk_alpha_pll_regs[][PLL_OFF_MAX_REGS] = {
[PLL_OFF_OPMODE] = 0x30,
[PLL_OFF_STATUS] = 0x3c,
},
[CLK_ALPHA_PLL_TYPE_NSS_HUAYRA] = {
[CLK_ALPHA_PLL_TYPE_NSS_HUAYRA] = {
[PLL_OFF_L_VAL] = 0x04,
[PLL_OFF_ALPHA_VAL] = 0x08,
[PLL_OFF_TEST_CTL] = 0x0c,
@@ -849,22 +849,25 @@ static int clk_alpha_pll_hwfsm_set_rate(struct clk_hw *hw, unsigned long rate,
clk_alpha_pll_hwfsm_is_enabled);
}
static long clk_alpha_pll_round_rate(struct clk_hw *hw, unsigned long rate,
unsigned long *prate)
static int clk_alpha_pll_determine_rate(struct clk_hw *hw,
struct clk_rate_request *req)
{
struct clk_alpha_pll *pll = to_clk_alpha_pll(hw);
u32 l, alpha_width = pll_alpha_width(pll);
u64 a;
unsigned long min_freq, max_freq;
rate = alpha_pll_round_rate(rate, *prate, &l, &a, alpha_width);
if (!pll->vco_table || alpha_pll_find_vco(pll, rate))
return rate;
req->rate = alpha_pll_round_rate(req->rate, req->best_parent_rate, &l,
&a, alpha_width);
if (!pll->vco_table || alpha_pll_find_vco(pll, req->rate))
return 0;
min_freq = pll->vco_table[0].min_freq;
max_freq = pll->vco_table[pll->num_vco - 1].max_freq;
return clamp(rate, min_freq, max_freq);
req->rate = clamp(req->rate, min_freq, max_freq);
return 0;
}
void clk_huayra_2290_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap,
@@ -1048,12 +1051,15 @@ static int alpha_pll_huayra_set_rate(struct clk_hw *hw, unsigned long rate,
return 0;
}
static long alpha_pll_huayra_round_rate(struct clk_hw *hw, unsigned long rate,
unsigned long *prate)
static int alpha_pll_huayra_determine_rate(struct clk_hw *hw,
struct clk_rate_request *req)
{
u32 l, a;
return alpha_huayra_pll_round_rate(rate, *prate, &l, &a);
req->rate = alpha_huayra_pll_round_rate(req->rate,
req->best_parent_rate, &l, &a);
return 0;
}
static int trion_pll_is_enabled(struct clk_alpha_pll *pll,
@@ -1175,7 +1181,7 @@ const struct clk_ops clk_alpha_pll_ops = {
.disable = clk_alpha_pll_disable,
.is_enabled = clk_alpha_pll_is_enabled,
.recalc_rate = clk_alpha_pll_recalc_rate,
.round_rate = clk_alpha_pll_round_rate,
.determine_rate = clk_alpha_pll_determine_rate,
.set_rate = clk_alpha_pll_set_rate,
};
EXPORT_SYMBOL_GPL(clk_alpha_pll_ops);
@@ -1185,7 +1191,7 @@ const struct clk_ops clk_alpha_pll_huayra_ops = {
.disable = clk_alpha_pll_disable,
.is_enabled = clk_alpha_pll_is_enabled,
.recalc_rate = alpha_pll_huayra_recalc_rate,
.round_rate = alpha_pll_huayra_round_rate,
.determine_rate = alpha_pll_huayra_determine_rate,
.set_rate = alpha_pll_huayra_set_rate,
};
EXPORT_SYMBOL_GPL(clk_alpha_pll_huayra_ops);
@@ -1195,7 +1201,7 @@ const struct clk_ops clk_alpha_pll_hwfsm_ops = {
.disable = clk_alpha_pll_hwfsm_disable,
.is_enabled = clk_alpha_pll_hwfsm_is_enabled,
.recalc_rate = clk_alpha_pll_recalc_rate,
.round_rate = clk_alpha_pll_round_rate,
.determine_rate = clk_alpha_pll_determine_rate,
.set_rate = clk_alpha_pll_hwfsm_set_rate,
};
EXPORT_SYMBOL_GPL(clk_alpha_pll_hwfsm_ops);
@@ -1205,7 +1211,7 @@ const struct clk_ops clk_alpha_pll_fixed_trion_ops = {
.disable = clk_trion_pll_disable,
.is_enabled = clk_trion_pll_is_enabled,
.recalc_rate = clk_trion_pll_recalc_rate,
.round_rate = clk_alpha_pll_round_rate,
.determine_rate = clk_alpha_pll_determine_rate,
};
EXPORT_SYMBOL_GPL(clk_alpha_pll_fixed_trion_ops);
@@ -1240,9 +1246,8 @@ static const struct clk_div_table clk_alpha_2bit_div_table[] = {
{ }
};
static long
clk_alpha_pll_postdiv_round_rate(struct clk_hw *hw, unsigned long rate,
unsigned long *prate)
static int clk_alpha_pll_postdiv_determine_rate(struct clk_hw *hw,
struct clk_rate_request *req)
{
struct clk_alpha_pll_postdiv *pll = to_clk_alpha_pll_postdiv(hw);
const struct clk_div_table *table;
@@ -1252,13 +1257,15 @@ clk_alpha_pll_postdiv_round_rate(struct clk_hw *hw, unsigned long rate,
else
table = clk_alpha_div_table;
return divider_round_rate(hw, rate, prate, table,
pll->width, CLK_DIVIDER_POWER_OF_TWO);
req->rate = divider_round_rate(hw, req->rate, &req->best_parent_rate,
table, pll->width,
CLK_DIVIDER_POWER_OF_TWO);
return 0;
}
static long
clk_alpha_pll_postdiv_round_ro_rate(struct clk_hw *hw, unsigned long rate,
unsigned long *prate)
static int clk_alpha_pll_postdiv_ro_determine_rate(struct clk_hw *hw,
struct clk_rate_request *req)
{
struct clk_alpha_pll_postdiv *pll = to_clk_alpha_pll_postdiv(hw);
u32 ctl, div;
@@ -1270,9 +1277,12 @@ clk_alpha_pll_postdiv_round_ro_rate(struct clk_hw *hw, unsigned long rate,
div = 1 << fls(ctl);
if (clk_hw_get_flags(hw) & CLK_SET_RATE_PARENT)
*prate = clk_hw_round_rate(clk_hw_get_parent(hw), div * rate);
req->best_parent_rate = clk_hw_round_rate(clk_hw_get_parent(hw),
div * req->rate);
return DIV_ROUND_UP_ULL((u64)*prate, div);
req->rate = DIV_ROUND_UP_ULL((u64)req->best_parent_rate, div);
return 0;
}
static int clk_alpha_pll_postdiv_set_rate(struct clk_hw *hw, unsigned long rate,
@@ -1291,13 +1301,13 @@ static int clk_alpha_pll_postdiv_set_rate(struct clk_hw *hw, unsigned long rate,
const struct clk_ops clk_alpha_pll_postdiv_ops = {
.recalc_rate = clk_alpha_pll_postdiv_recalc_rate,
.round_rate = clk_alpha_pll_postdiv_round_rate,
.determine_rate = clk_alpha_pll_postdiv_determine_rate,
.set_rate = clk_alpha_pll_postdiv_set_rate,
};
EXPORT_SYMBOL_GPL(clk_alpha_pll_postdiv_ops);
const struct clk_ops clk_alpha_pll_postdiv_ro_ops = {
.round_rate = clk_alpha_pll_postdiv_round_ro_rate,
.determine_rate = clk_alpha_pll_postdiv_ro_determine_rate,
.recalc_rate = clk_alpha_pll_postdiv_recalc_rate,
};
EXPORT_SYMBOL_GPL(clk_alpha_pll_postdiv_ro_ops);
@@ -1542,7 +1552,7 @@ const struct clk_ops clk_alpha_pll_fabia_ops = {
.is_enabled = clk_alpha_pll_is_enabled,
.set_rate = alpha_pll_fabia_set_rate,
.recalc_rate = alpha_pll_fabia_recalc_rate,
.round_rate = clk_alpha_pll_round_rate,
.determine_rate = clk_alpha_pll_determine_rate,
};
EXPORT_SYMBOL_GPL(clk_alpha_pll_fabia_ops);
@@ -1551,7 +1561,7 @@ const struct clk_ops clk_alpha_pll_fixed_fabia_ops = {
.disable = alpha_pll_fabia_disable,
.is_enabled = clk_alpha_pll_is_enabled,
.recalc_rate = alpha_pll_fabia_recalc_rate,
.round_rate = clk_alpha_pll_round_rate,
.determine_rate = clk_alpha_pll_determine_rate,
};
EXPORT_SYMBOL_GPL(clk_alpha_pll_fixed_fabia_ops);
@@ -1602,14 +1612,16 @@ clk_trion_pll_postdiv_recalc_rate(struct clk_hw *hw, unsigned long parent_rate)
return (parent_rate / div);
}
static long
clk_trion_pll_postdiv_round_rate(struct clk_hw *hw, unsigned long rate,
unsigned long *prate)
static int clk_trion_pll_postdiv_determine_rate(struct clk_hw *hw,
struct clk_rate_request *req)
{
struct clk_alpha_pll_postdiv *pll = to_clk_alpha_pll_postdiv(hw);
return divider_round_rate(hw, rate, prate, pll->post_div_table,
pll->width, CLK_DIVIDER_ROUND_CLOSEST);
req->rate = divider_round_rate(hw, req->rate, &req->best_parent_rate,
pll->post_div_table,
pll->width, CLK_DIVIDER_ROUND_CLOSEST);
return 0;
};
static int
@@ -1635,18 +1647,21 @@ clk_trion_pll_postdiv_set_rate(struct clk_hw *hw, unsigned long rate,
const struct clk_ops clk_alpha_pll_postdiv_trion_ops = {
.recalc_rate = clk_trion_pll_postdiv_recalc_rate,
.round_rate = clk_trion_pll_postdiv_round_rate,
.determine_rate = clk_trion_pll_postdiv_determine_rate,
.set_rate = clk_trion_pll_postdiv_set_rate,
};
EXPORT_SYMBOL_GPL(clk_alpha_pll_postdiv_trion_ops);
static long clk_alpha_pll_postdiv_fabia_round_rate(struct clk_hw *hw,
unsigned long rate, unsigned long *prate)
static int clk_alpha_pll_postdiv_fabia_determine_rate(struct clk_hw *hw,
struct clk_rate_request *req)
{
struct clk_alpha_pll_postdiv *pll = to_clk_alpha_pll_postdiv(hw);
return divider_round_rate(hw, rate, prate, pll->post_div_table,
pll->width, CLK_DIVIDER_ROUND_CLOSEST);
req->rate = divider_round_rate(hw, req->rate, &req->best_parent_rate,
pll->post_div_table,
pll->width, CLK_DIVIDER_ROUND_CLOSEST);
return 0;
}
static int clk_alpha_pll_postdiv_fabia_set_rate(struct clk_hw *hw,
@@ -1681,7 +1696,7 @@ static int clk_alpha_pll_postdiv_fabia_set_rate(struct clk_hw *hw,
const struct clk_ops clk_alpha_pll_postdiv_fabia_ops = {
.recalc_rate = clk_alpha_pll_postdiv_fabia_recalc_rate,
.round_rate = clk_alpha_pll_postdiv_fabia_round_rate,
.determine_rate = clk_alpha_pll_postdiv_fabia_determine_rate,
.set_rate = clk_alpha_pll_postdiv_fabia_set_rate,
};
EXPORT_SYMBOL_GPL(clk_alpha_pll_postdiv_fabia_ops);
@@ -1833,7 +1848,7 @@ const struct clk_ops clk_alpha_pll_trion_ops = {
.disable = clk_trion_pll_disable,
.is_enabled = clk_trion_pll_is_enabled,
.recalc_rate = clk_trion_pll_recalc_rate,
.round_rate = clk_alpha_pll_round_rate,
.determine_rate = clk_alpha_pll_determine_rate,
.set_rate = alpha_pll_trion_set_rate,
};
EXPORT_SYMBOL_GPL(clk_alpha_pll_trion_ops);
@@ -1844,14 +1859,14 @@ const struct clk_ops clk_alpha_pll_lucid_ops = {
.disable = clk_trion_pll_disable,
.is_enabled = clk_trion_pll_is_enabled,
.recalc_rate = clk_trion_pll_recalc_rate,
.round_rate = clk_alpha_pll_round_rate,
.determine_rate = clk_alpha_pll_determine_rate,
.set_rate = alpha_pll_trion_set_rate,
};
EXPORT_SYMBOL_GPL(clk_alpha_pll_lucid_ops);
const struct clk_ops clk_alpha_pll_postdiv_lucid_ops = {
.recalc_rate = clk_alpha_pll_postdiv_fabia_recalc_rate,
.round_rate = clk_alpha_pll_postdiv_fabia_round_rate,
.determine_rate = clk_alpha_pll_postdiv_fabia_determine_rate,
.set_rate = clk_alpha_pll_postdiv_fabia_set_rate,
};
EXPORT_SYMBOL_GPL(clk_alpha_pll_postdiv_lucid_ops);
@@ -1903,7 +1918,7 @@ const struct clk_ops clk_alpha_pll_agera_ops = {
.disable = clk_alpha_pll_disable,
.is_enabled = clk_alpha_pll_is_enabled,
.recalc_rate = alpha_pll_fabia_recalc_rate,
.round_rate = clk_alpha_pll_round_rate,
.determine_rate = clk_alpha_pll_determine_rate,
.set_rate = clk_alpha_pll_agera_set_rate,
};
EXPORT_SYMBOL_GPL(clk_alpha_pll_agera_ops);
@@ -2119,7 +2134,7 @@ const struct clk_ops clk_alpha_pll_lucid_5lpe_ops = {
.disable = alpha_pll_lucid_5lpe_disable,
.is_enabled = clk_trion_pll_is_enabled,
.recalc_rate = clk_trion_pll_recalc_rate,
.round_rate = clk_alpha_pll_round_rate,
.determine_rate = clk_alpha_pll_determine_rate,
.set_rate = alpha_pll_lucid_5lpe_set_rate,
};
EXPORT_SYMBOL_GPL(clk_alpha_pll_lucid_5lpe_ops);
@@ -2129,13 +2144,13 @@ const struct clk_ops clk_alpha_pll_fixed_lucid_5lpe_ops = {
.disable = alpha_pll_lucid_5lpe_disable,
.is_enabled = clk_trion_pll_is_enabled,
.recalc_rate = clk_trion_pll_recalc_rate,
.round_rate = clk_alpha_pll_round_rate,
.determine_rate = clk_alpha_pll_determine_rate,
};
EXPORT_SYMBOL_GPL(clk_alpha_pll_fixed_lucid_5lpe_ops);
const struct clk_ops clk_alpha_pll_postdiv_lucid_5lpe_ops = {
.recalc_rate = clk_alpha_pll_postdiv_fabia_recalc_rate,
.round_rate = clk_alpha_pll_postdiv_fabia_round_rate,
.determine_rate = clk_alpha_pll_postdiv_fabia_determine_rate,
.set_rate = clk_lucid_5lpe_pll_postdiv_set_rate,
};
EXPORT_SYMBOL_GPL(clk_alpha_pll_postdiv_lucid_5lpe_ops);
@@ -2304,7 +2319,7 @@ const struct clk_ops clk_alpha_pll_zonda_ops = {
.disable = clk_zonda_pll_disable,
.is_enabled = clk_trion_pll_is_enabled,
.recalc_rate = clk_trion_pll_recalc_rate,
.round_rate = clk_alpha_pll_round_rate,
.determine_rate = clk_alpha_pll_determine_rate,
.set_rate = clk_zonda_pll_set_rate,
};
EXPORT_SYMBOL_GPL(clk_alpha_pll_zonda_ops);
@@ -2529,13 +2544,13 @@ const struct clk_ops clk_alpha_pll_fixed_lucid_evo_ops = {
.disable = alpha_pll_lucid_evo_disable,
.is_enabled = clk_trion_pll_is_enabled,
.recalc_rate = alpha_pll_lucid_evo_recalc_rate,
.round_rate = clk_alpha_pll_round_rate,
.determine_rate = clk_alpha_pll_determine_rate,
};
EXPORT_SYMBOL_GPL(clk_alpha_pll_fixed_lucid_evo_ops);
const struct clk_ops clk_alpha_pll_postdiv_lucid_evo_ops = {
.recalc_rate = clk_alpha_pll_postdiv_fabia_recalc_rate,
.round_rate = clk_alpha_pll_postdiv_fabia_round_rate,
.determine_rate = clk_alpha_pll_postdiv_fabia_determine_rate,
.set_rate = clk_lucid_evo_pll_postdiv_set_rate,
};
EXPORT_SYMBOL_GPL(clk_alpha_pll_postdiv_lucid_evo_ops);
@@ -2546,7 +2561,7 @@ const struct clk_ops clk_alpha_pll_lucid_evo_ops = {
.disable = alpha_pll_lucid_evo_disable,
.is_enabled = clk_trion_pll_is_enabled,
.recalc_rate = alpha_pll_lucid_evo_recalc_rate,
.round_rate = clk_alpha_pll_round_rate,
.determine_rate = clk_alpha_pll_determine_rate,
.set_rate = alpha_pll_lucid_5lpe_set_rate,
};
EXPORT_SYMBOL_GPL(clk_alpha_pll_lucid_evo_ops);
@@ -2557,7 +2572,7 @@ const struct clk_ops clk_alpha_pll_reset_lucid_evo_ops = {
.disable = alpha_pll_reset_lucid_evo_disable,
.is_enabled = clk_trion_pll_is_enabled,
.recalc_rate = alpha_pll_lucid_evo_recalc_rate,
.round_rate = clk_alpha_pll_round_rate,
.determine_rate = clk_alpha_pll_determine_rate,
.set_rate = alpha_pll_lucid_5lpe_set_rate,
};
EXPORT_SYMBOL_GPL(clk_alpha_pll_reset_lucid_evo_ops);
@@ -2732,22 +2747,25 @@ static unsigned long clk_rivian_evo_pll_recalc_rate(struct clk_hw *hw,
return parent_rate * l;
}
static long clk_rivian_evo_pll_round_rate(struct clk_hw *hw, unsigned long rate,
unsigned long *prate)
static int clk_rivian_evo_pll_determine_rate(struct clk_hw *hw,
struct clk_rate_request *req)
{
struct clk_alpha_pll *pll = to_clk_alpha_pll(hw);
unsigned long min_freq, max_freq;
u32 l;
u64 a;
rate = alpha_pll_round_rate(rate, *prate, &l, &a, 0);
if (!pll->vco_table || alpha_pll_find_vco(pll, rate))
return rate;
req->rate = alpha_pll_round_rate(req->rate, req->best_parent_rate, &l,
&a, 0);
if (!pll->vco_table || alpha_pll_find_vco(pll, req->rate))
return 0;
min_freq = pll->vco_table[0].min_freq;
max_freq = pll->vco_table[pll->num_vco - 1].max_freq;
return clamp(rate, min_freq, max_freq);
req->rate = clamp(req->rate, min_freq, max_freq);
return 0;
}
const struct clk_ops clk_alpha_pll_rivian_evo_ops = {
@@ -2755,7 +2773,7 @@ const struct clk_ops clk_alpha_pll_rivian_evo_ops = {
.disable = alpha_pll_lucid_5lpe_disable,
.is_enabled = clk_trion_pll_is_enabled,
.recalc_rate = clk_rivian_evo_pll_recalc_rate,
.round_rate = clk_rivian_evo_pll_round_rate,
.determine_rate = clk_rivian_evo_pll_determine_rate,
};
EXPORT_SYMBOL_GPL(clk_alpha_pll_rivian_evo_ops);
@@ -2964,7 +2982,7 @@ const struct clk_ops clk_alpha_pll_regera_ops = {
.disable = clk_zonda_pll_disable,
.is_enabled = clk_alpha_pll_is_enabled,
.recalc_rate = clk_trion_pll_recalc_rate,
.round_rate = clk_alpha_pll_round_rate,
.determine_rate = clk_alpha_pll_determine_rate,
.set_rate = clk_zonda_pll_set_rate,
};
EXPORT_SYMBOL_GPL(clk_alpha_pll_regera_ops);
@@ -3169,7 +3187,7 @@ const struct clk_ops clk_alpha_pll_slew_ops = {
.enable = clk_alpha_pll_slew_enable,
.disable = clk_alpha_pll_disable,
.recalc_rate = clk_alpha_pll_recalc_rate,
.round_rate = clk_alpha_pll_round_rate,
.determine_rate = clk_alpha_pll_determine_rate,
.set_rate = clk_alpha_pll_slew_set_rate,
};
EXPORT_SYMBOL(clk_alpha_pll_slew_ops);

View File

@@ -29,6 +29,7 @@ enum {
CLK_ALPHA_PLL_TYPE_LUCID_OLE,
CLK_ALPHA_PLL_TYPE_PONGO_ELU,
CLK_ALPHA_PLL_TYPE_TAYCAN_ELU,
CLK_ALPHA_PLL_TYPE_TAYCAN_EKO_T = CLK_ALPHA_PLL_TYPE_TAYCAN_ELU,
CLK_ALPHA_PLL_TYPE_RIVIAN_EVO,
CLK_ALPHA_PLL_TYPE_DEFAULT_EVO,
CLK_ALPHA_PLL_TYPE_BRAMMO_EVO,
@@ -192,14 +193,17 @@ extern const struct clk_ops clk_alpha_pll_zonda_ops;
extern const struct clk_ops clk_alpha_pll_lucid_evo_ops;
#define clk_alpha_pll_taycan_elu_ops clk_alpha_pll_lucid_evo_ops
#define clk_alpha_pll_taycan_eko_t_ops clk_alpha_pll_lucid_evo_ops
extern const struct clk_ops clk_alpha_pll_reset_lucid_evo_ops;
#define clk_alpha_pll_reset_lucid_ole_ops clk_alpha_pll_reset_lucid_evo_ops
extern const struct clk_ops clk_alpha_pll_fixed_lucid_evo_ops;
#define clk_alpha_pll_fixed_lucid_ole_ops clk_alpha_pll_fixed_lucid_evo_ops
#define clk_alpha_pll_fixed_taycan_elu_ops clk_alpha_pll_fixed_lucid_evo_ops
#define clk_alpha_pll_fixed_taycan_eko_t_ops clk_alpha_pll_fixed_lucid_evo_ops
extern const struct clk_ops clk_alpha_pll_postdiv_lucid_evo_ops;
#define clk_alpha_pll_postdiv_lucid_ole_ops clk_alpha_pll_postdiv_lucid_evo_ops
#define clk_alpha_pll_postdiv_taycan_elu_ops clk_alpha_pll_postdiv_lucid_evo_ops
#define clk_alpha_pll_postdiv_taycan_eko_t_ops clk_alpha_pll_postdiv_lucid_evo_ops
extern const struct clk_ops clk_alpha_pll_pongo_elu_ops;
extern const struct clk_ops clk_alpha_pll_rivian_evo_ops;
@@ -233,6 +237,8 @@ void clk_pongo_elu_pll_configure(struct clk_alpha_pll *pll, struct regmap *regma
const struct alpha_pll_config *config);
#define clk_taycan_elu_pll_configure(pll, regmap, config) \
clk_lucid_evo_pll_configure(pll, regmap, config)
#define clk_taycan_eko_t_pll_configure(pll, regmap, config) \
clk_lucid_evo_pll_configure(pll, regmap, config)
void clk_rivian_evo_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap,
const struct alpha_pll_config *config);

View File

@@ -423,7 +423,7 @@ static int _freq_tbl_determine_rate(struct clk_hw *hw, const struct freq_tbl *f,
rate = tmp;
}
} else {
rate = clk_hw_get_rate(p);
rate = clk_hw_get_rate(p);
}
req->best_parent_hw = p;
req->best_parent_rate = rate;

View File

@@ -201,7 +201,7 @@ __clk_rcg2_recalc_rate(struct clk_hw *hw, unsigned long parent_rate, u32 cfg)
regmap_read(rcg->clkr.regmap, RCG_M_OFFSET(rcg), &m);
m &= mask;
regmap_read(rcg->clkr.regmap, RCG_N_OFFSET(rcg), &n);
n = ~n;
n = ~n;
n &= mask;
n += m;
mode = cfg & CFG_MODE_MASK;
@@ -274,7 +274,7 @@ static int _freq_tbl_determine_rate(struct clk_hw *hw, const struct freq_tbl *f,
rate = tmp;
}
} else {
rate = clk_hw_get_rate(p);
rate = clk_hw_get_rate(p);
}
req->best_parent_hw = p;
req->best_parent_rate = rate;
@@ -311,7 +311,7 @@ __clk_rcg2_select_conf(struct clk_hw *hw, const struct freq_multi_tbl *f,
if (!p)
continue;
parent_rate = clk_hw_get_rate(p);
parent_rate = clk_hw_get_rate(p);
rate = calc_rate(parent_rate, conf->n, conf->m, conf->n, conf->pre_div);
if (rate == req_rate) {
@@ -382,7 +382,7 @@ static int _freq_tbl_fm_determine_rate(struct clk_hw *hw, const struct freq_mult
rate = tmp;
}
} else {
rate = clk_hw_get_rate(p);
rate = clk_hw_get_rate(p);
}
req->best_parent_hw = p;

View File

@@ -87,7 +87,7 @@ static DEFINE_MUTEX(rpmh_clk_lock);
.hw.init = &(struct clk_init_data){ \
.ops = &clk_rpmh_ops, \
.name = #_name, \
.parent_data = &(const struct clk_parent_data){ \
.parent_data = &(const struct clk_parent_data){ \
.fw_name = "xo", \
.name = "xo_board", \
}, \
@@ -105,7 +105,7 @@ static DEFINE_MUTEX(rpmh_clk_lock);
.hw.init = &(struct clk_init_data){ \
.ops = &clk_rpmh_ops, \
.name = #_name "_ao", \
.parent_data = &(const struct clk_parent_data){ \
.parent_data = &(const struct clk_parent_data){ \
.fw_name = "xo", \
.name = "xo_board", \
}, \
@@ -182,7 +182,7 @@ static int clk_rpmh_send_aggregate_command(struct clk_rpmh *c)
}
c->last_sent_aggr_state = c->aggr_state;
c->peer->last_sent_aggr_state = c->last_sent_aggr_state;
c->peer->last_sent_aggr_state = c->last_sent_aggr_state;
return 0;
}
@@ -390,6 +390,11 @@ DEFINE_CLK_RPMH_VRM(clk7, _a4, "clka7", 4);
DEFINE_CLK_RPMH_VRM(div_clk1, _div2, "divclka1", 2);
DEFINE_CLK_RPMH_VRM(clk3, _a, "C3A_E0", 1);
DEFINE_CLK_RPMH_VRM(clk4, _a, "C4A_E0", 1);
DEFINE_CLK_RPMH_VRM(clk5, _a, "C5A_E0", 1);
DEFINE_CLK_RPMH_VRM(clk8, _a, "C8A_E0", 1);
DEFINE_CLK_RPMH_BCM(ce, "CE0");
DEFINE_CLK_RPMH_BCM(hwkm, "HK0");
DEFINE_CLK_RPMH_BCM(ipa, "IP0");
@@ -879,6 +884,22 @@ static const struct clk_rpmh_desc clk_rpmh_sm8750 = {
.clka_optional = true,
};
static struct clk_hw *glymur_rpmh_clocks[] = {
[RPMH_CXO_CLK] = &clk_rpmh_bi_tcxo_div2.hw,
[RPMH_CXO_CLK_A] = &clk_rpmh_bi_tcxo_div2_ao.hw,
[RPMH_RF_CLK3] = &clk_rpmh_clk3_a.hw,
[RPMH_RF_CLK3_A] = &clk_rpmh_clk3_a_ao.hw,
[RPMH_RF_CLK4] = &clk_rpmh_clk4_a.hw,
[RPMH_RF_CLK4_A] = &clk_rpmh_clk4_a_ao.hw,
[RPMH_RF_CLK5] = &clk_rpmh_clk5_a.hw,
[RPMH_RF_CLK5_A] = &clk_rpmh_clk5_a_ao.hw,
};
static const struct clk_rpmh_desc clk_rpmh_glymur = {
.clks = glymur_rpmh_clocks,
.num_clks = ARRAY_SIZE(glymur_rpmh_clocks),
};
static struct clk_hw *of_clk_rpmh_hw_get(struct of_phandle_args *clkspec,
void *data)
{
@@ -968,6 +989,7 @@ static int clk_rpmh_probe(struct platform_device *pdev)
}
static const struct of_device_id clk_rpmh_match_table[] = {
{ .compatible = "qcom,glymur-rpmh-clk", .data = &clk_rpmh_glymur},
{ .compatible = "qcom,milos-rpmh-clk", .data = &clk_rpmh_milos},
{ .compatible = "qcom,qcs615-rpmh-clk", .data = &clk_rpmh_qcs615},
{ .compatible = "qcom,qdu1000-rpmh-clk", .data = &clk_rpmh_qdu1000},

View File

@@ -30,7 +30,7 @@
.hw.init = &(struct clk_init_data){ \
.ops = &clk_smd_rpm_ops, \
.name = #_name, \
.parent_data = &(const struct clk_parent_data){ \
.parent_data = &(const struct clk_parent_data){ \
.fw_name = "xo", \
.name = "xo_board", \
}, \
@@ -47,7 +47,7 @@
.hw.init = &(struct clk_init_data){ \
.ops = &clk_smd_rpm_ops, \
.name = #_active, \
.parent_data = &(const struct clk_parent_data){ \
.parent_data = &(const struct clk_parent_data){ \
.fw_name = "xo", \
.name = "xo_board", \
}, \
@@ -74,7 +74,7 @@
.hw.init = &(struct clk_init_data){ \
.ops = &clk_smd_rpm_branch_ops, \
.name = #_name, \
.parent_data = &(const struct clk_parent_data){ \
.parent_data = &(const struct clk_parent_data){ \
.fw_name = "xo", \
.name = "xo_board", \
}, \
@@ -92,7 +92,7 @@
.hw.init = &(struct clk_init_data){ \
.ops = &clk_smd_rpm_branch_ops, \
.name = #_active, \
.parent_data = &(const struct clk_parent_data){ \
.parent_data = &(const struct clk_parent_data){ \
.fw_name = "xo", \
.name = "xo_board", \
}, \

View File

@@ -277,8 +277,8 @@ static int qcom_cc_icc_register(struct device *dev,
icd[i].slave_id = desc->icc_hws[i].slave_id;
hws = &desc->clks[desc->icc_hws[i].clk_id]->hw;
icd[i].clk = devm_clk_hw_get_clk(dev, hws, "icc");
if (!icd[i].clk)
return dev_err_probe(dev, -ENOENT,
if (IS_ERR(icd[i].clk))
return dev_err_probe(dev, PTR_ERR(icd[i].clk),
"(%d) clock entry is null\n", i);
icd[i].name = clk_hw_get_name(hws);
}

File diff suppressed because it is too large Load Diff

View File

@@ -937,7 +937,7 @@ static struct qcom_cc_driver_data disp_cc_milos_driver_data = {
.clk_regs_configure = disp_cc_milos_clk_regs_configure,
};
static struct qcom_cc_desc disp_cc_milos_desc = {
static const struct qcom_cc_desc disp_cc_milos_desc = {
.config = &disp_cc_milos_regmap_config,
.clks = disp_cc_milos_clocks,
.num_clks = ARRAY_SIZE(disp_cc_milos_clocks),

View File

@@ -17,6 +17,7 @@
#include "clk-regmap-divider.h"
#include "common.h"
#include "gdsc.h"
#include "reset.h"
enum {
P_BI_TCXO,
@@ -847,6 +848,11 @@ static struct gdsc *disp_cc_sc7280_gdscs[] = {
[DISP_CC_MDSS_CORE_GDSC] = &disp_cc_mdss_core_gdsc,
};
static const struct qcom_reset_map disp_cc_sc7280_resets[] = {
[DISP_CC_MDSS_CORE_BCR] = { 0x1000 },
[DISP_CC_MDSS_RSCC_BCR] = { 0x2000 },
};
static const struct regmap_config disp_cc_sc7280_regmap_config = {
.reg_bits = 32,
.reg_stride = 4,
@@ -861,6 +867,8 @@ static const struct qcom_cc_desc disp_cc_sc7280_desc = {
.num_clks = ARRAY_SIZE(disp_cc_sc7280_clocks),
.gdscs = disp_cc_sc7280_gdscs,
.num_gdscs = ARRAY_SIZE(disp_cc_sc7280_gdscs),
.resets = disp_cc_sc7280_resets,
.num_resets = ARRAY_SIZE(disp_cc_sc7280_resets),
};
static const struct of_device_id disp_cc_sc7280_match_table[] = {

File diff suppressed because it is too large Load Diff

View File

@@ -511,15 +511,23 @@ static struct clk_rcg2 apss_ahb_clk_src = {
},
};
static const struct freq_tbl ftbl_nss_port5_rx_clk_src[] = {
F(24000000, P_XO, 1, 0, 0),
F(25000000, P_UNIPHY1_RX, 12.5, 0, 0),
F(25000000, P_UNIPHY0_RX, 5, 0, 0),
F(78125000, P_UNIPHY1_RX, 4, 0, 0),
F(125000000, P_UNIPHY1_RX, 2.5, 0, 0),
F(125000000, P_UNIPHY0_RX, 1, 0, 0),
F(156250000, P_UNIPHY1_RX, 2, 0, 0),
F(312500000, P_UNIPHY1_RX, 1, 0, 0),
static const struct freq_conf ftbl_nss_port5_rx_clk_src_25[] = {
C(P_UNIPHY1_RX, 12.5, 0, 0),
C(P_UNIPHY0_RX, 5, 0, 0),
};
static const struct freq_conf ftbl_nss_port5_rx_clk_src_125[] = {
C(P_UNIPHY1_RX, 2.5, 0, 0),
C(P_UNIPHY0_RX, 1, 0, 0),
};
static const struct freq_multi_tbl ftbl_nss_port5_rx_clk_src[] = {
FMS(24000000, P_XO, 1, 0, 0),
FM(25000000, ftbl_nss_port5_rx_clk_src_25),
FMS(78125000, P_UNIPHY1_RX, 4, 0, 0),
FM(125000000, ftbl_nss_port5_rx_clk_src_125),
FMS(156250000, P_UNIPHY1_RX, 2, 0, 0),
FMS(312500000, P_UNIPHY1_RX, 1, 0, 0),
{ }
};
@@ -547,26 +555,34 @@ gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias_map[] = {
static struct clk_rcg2 nss_port5_rx_clk_src = {
.cmd_rcgr = 0x68060,
.freq_tbl = ftbl_nss_port5_rx_clk_src,
.freq_multi_tbl = ftbl_nss_port5_rx_clk_src,
.hid_width = 5,
.parent_map = gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias_map,
.clkr.hw.init = &(struct clk_init_data){
.name = "nss_port5_rx_clk_src",
.parent_data = gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias,
.num_parents = 7,
.ops = &clk_rcg2_ops,
.ops = &clk_rcg2_fm_ops,
},
};
static const struct freq_tbl ftbl_nss_port5_tx_clk_src[] = {
F(24000000, P_XO, 1, 0, 0),
F(25000000, P_UNIPHY1_TX, 12.5, 0, 0),
F(25000000, P_UNIPHY0_TX, 5, 0, 0),
F(78125000, P_UNIPHY1_TX, 4, 0, 0),
F(125000000, P_UNIPHY1_TX, 2.5, 0, 0),
F(125000000, P_UNIPHY0_TX, 1, 0, 0),
F(156250000, P_UNIPHY1_TX, 2, 0, 0),
F(312500000, P_UNIPHY1_TX, 1, 0, 0),
static const struct freq_conf ftbl_nss_port5_tx_clk_src_25[] = {
C(P_UNIPHY1_TX, 12.5, 0, 0),
C(P_UNIPHY0_TX, 5, 0, 0),
};
static const struct freq_conf ftbl_nss_port5_tx_clk_src_125[] = {
C(P_UNIPHY1_TX, 2.5, 0, 0),
C(P_UNIPHY0_TX, 1, 0, 0),
};
static const struct freq_multi_tbl ftbl_nss_port5_tx_clk_src[] = {
FMS(24000000, P_XO, 1, 0, 0),
FM(25000000, ftbl_nss_port5_tx_clk_src_25),
FMS(78125000, P_UNIPHY1_TX, 4, 0, 0),
FM(125000000, ftbl_nss_port5_tx_clk_src_125),
FMS(156250000, P_UNIPHY1_TX, 2, 0, 0),
FMS(312500000, P_UNIPHY1_TX, 1, 0, 0),
{ }
};
@@ -594,14 +610,14 @@ gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias_map[] = {
static struct clk_rcg2 nss_port5_tx_clk_src = {
.cmd_rcgr = 0x68068,
.freq_tbl = ftbl_nss_port5_tx_clk_src,
.freq_multi_tbl = ftbl_nss_port5_tx_clk_src,
.hid_width = 5,
.parent_map = gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias_map,
.clkr.hw.init = &(struct clk_init_data){
.name = "nss_port5_tx_clk_src",
.parent_data = gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias,
.num_parents = 7,
.ops = &clk_rcg2_ops,
.ops = &clk_rcg2_fm_ops,
},
};

View File

@@ -37,6 +37,8 @@ enum {
DT_SLEEP_CLK,
DT_DSI0PLL,
DT_DSI0PLL_BYTE,
DT_DSI1PLL,
DT_DSI1PLL_BYTE,
};
enum {
@@ -48,6 +50,8 @@ enum {
P_GPLL6,
P_DSI0PLL,
P_DSI0PLL_BYTE,
P_DSI1PLL,
P_DSI1PLL_BYTE,
};
static struct clk_alpha_pll gpll0_sleep_clk_src = {
@@ -102,7 +106,11 @@ static const struct pll_vco gpll3_p_vco[] = {
{ 700000000, 1400000000, 0 },
};
static const struct alpha_pll_config gpll3_early_config = {
static const struct pll_vco gpll3_p_vco_msm8937[] = {
{ 525000000, 1066000000, 0 },
};
static struct alpha_pll_config gpll3_early_config = {
.l = 63,
.config_ctl_val = 0x4001055b,
.early_output_mask = 0,
@@ -273,6 +281,19 @@ static const struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = {
{ }
};
static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
.cmd_rcgr = 0x0200c,
.hid_width = 5,
.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
.parent_map = gcc_xo_gpll0_map,
.clkr.hw.init = &(struct clk_init_data){
.name = "blsp1_qup1_i2c_apps_clk_src",
.parent_data = gcc_xo_gpll0_data,
.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
.ops = &clk_rcg2_ops,
},
};
static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
.cmd_rcgr = 0x03000,
.hid_width = 5,
@@ -351,6 +372,19 @@ static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
}
};
static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
.cmd_rcgr = 0x18000,
.hid_width = 5,
.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
.parent_map = gcc_xo_gpll0_map,
.clkr.hw.init = &(struct clk_init_data){
.name = "blsp2_qup4_i2c_apps_clk_src",
.parent_data = gcc_xo_gpll0_data,
.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
.ops = &clk_rcg2_ops,
},
};
static const struct freq_tbl ftbl_blsp_spi_apps_clk_src[] = {
F(960000, P_XO, 10, 1, 2),
F(4800000, P_XO, 4, 0, 0),
@@ -362,6 +396,20 @@ static const struct freq_tbl ftbl_blsp_spi_apps_clk_src[] = {
{ }
};
static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
.cmd_rcgr = 0x02024,
.mnd_width = 8,
.hid_width = 5,
.freq_tbl = ftbl_blsp_spi_apps_clk_src,
.parent_map = gcc_xo_gpll0_map,
.clkr.hw.init = &(struct clk_init_data){
.name = "blsp1_qup1_spi_apps_clk_src",
.parent_data = gcc_xo_gpll0_data,
.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
.ops = &clk_rcg2_ops,
},
};
static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
.cmd_rcgr = 0x03014,
.hid_width = 5,
@@ -446,6 +494,20 @@ static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
}
};
static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
.cmd_rcgr = 0x18024,
.mnd_width = 8,
.hid_width = 5,
.freq_tbl = ftbl_blsp_spi_apps_clk_src,
.parent_map = gcc_xo_gpll0_map,
.clkr.hw.init = &(struct clk_init_data){
.name = "blsp2_qup4_spi_apps_clk_src",
.parent_data = gcc_xo_gpll0_data,
.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
.ops = &clk_rcg2_ops,
},
};
static const struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = {
F(3686400, P_GPLL0, 1, 72, 15625),
F(7372800, P_GPLL0, 1, 144, 15625),
@@ -525,11 +587,19 @@ static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
static const struct parent_map gcc_byte0_map[] = {
{ P_XO, 0 },
{ P_DSI0PLL_BYTE, 1 },
{ P_DSI1PLL_BYTE, 3 },
};
static const struct parent_map gcc_byte1_map[] = {
{ P_XO, 0 },
{ P_DSI0PLL_BYTE, 3 },
{ P_DSI1PLL_BYTE, 1 },
};
static const struct clk_parent_data gcc_byte_data[] = {
{ .index = DT_XO },
{ .index = DT_DSI0PLL_BYTE },
{ .index = DT_DSI1PLL_BYTE },
};
static struct clk_rcg2 byte0_clk_src = {
@@ -545,6 +615,19 @@ static struct clk_rcg2 byte0_clk_src = {
}
};
static struct clk_rcg2 byte1_clk_src = {
.cmd_rcgr = 0x4d0b0,
.hid_width = 5,
.parent_map = gcc_byte1_map,
.clkr.hw.init = &(struct clk_init_data){
.name = "byte1_clk_src",
.parent_data = gcc_byte_data,
.num_parents = ARRAY_SIZE(gcc_byte_data),
.ops = &clk_byte2_ops,
.flags = CLK_SET_RATE_PARENT,
},
};
static const struct freq_tbl ftbl_camss_gp_clk_src[] = {
F(100000000, P_GPLL0, 8, 0, 0),
F(160000000, P_GPLL0, 5, 0, 0),
@@ -642,6 +725,17 @@ static const struct freq_tbl ftbl_cpp_clk_src[] = {
{ }
};
static const struct freq_tbl ftbl_cpp_clk_src_msm8937[] = {
F(133330000, P_GPLL0, 6, 0, 0),
F(160000000, P_GPLL0, 5, 0, 0),
F(200000000, P_GPLL0, 5, 0, 0),
F(266666667, P_GPLL0, 3, 0, 0),
F(308570000, P_GPLL6, 3.5, 0, 0),
F(320000000, P_GPLL0, 2.5, 0, 0),
F(360000000, P_GPLL6, 3, 0, 0),
{ }
};
static struct clk_rcg2 cpp_clk_src = {
.cmd_rcgr = 0x58018,
.hid_width = 5,
@@ -655,6 +749,13 @@ static struct clk_rcg2 cpp_clk_src = {
}
};
static struct clk_init_data vcodec0_clk_src_init_msm8937 = {
.name = "vcodec0_clk_src",
.parent_data = gcc_cpp_data,
.num_parents = ARRAY_SIZE(gcc_cpp_data),
.ops = &clk_rcg2_ops,
};
static const struct freq_tbl ftbl_crypto_clk_src[] = {
F(50000000, P_GPLL0, 16, 0, 0),
F(80000000, P_GPLL0, 10, 0, 0),
@@ -730,6 +831,13 @@ static const struct freq_tbl ftbl_csi_phytimer_clk_src[] = {
{ }
};
static const struct freq_tbl ftbl_csi_phytimer_clk_src_msm8937[] = {
F(100000000, P_GPLL0, 8, 0, 0),
F(160000000, P_GPLL0, 5, 0, 0),
F(200000000, P_GPLL0, 4, 0, 0),
{ }
};
static struct clk_rcg2 csi0phytimer_clk_src = {
.cmd_rcgr = 0x4e000,
.hid_width = 5,
@@ -774,6 +882,19 @@ static struct clk_rcg2 esc0_clk_src = {
}
};
static struct clk_rcg2 esc1_clk_src = {
.cmd_rcgr = 0x4d0a8,
.hid_width = 5,
.freq_tbl = ftbl_esc0_1_clk_src,
.parent_map = gcc_xo_gpll0_out_aux_map,
.clkr.hw.init = &(struct clk_init_data){
.name = "esc1_clk_src",
.parent_data = gcc_xo_gpll0_data,
.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
.ops = &clk_rcg2_ops,
},
};
static const struct parent_map gcc_gfx3d_map[] = {
{ P_XO, 0 },
{ P_GPLL0, 1 },
@@ -817,6 +938,25 @@ static const struct freq_tbl ftbl_gfx3d_clk_src[] = {
{ }
};
static const struct freq_tbl ftbl_gfx3d_clk_src_msm8937[] = {
F(19200000, P_XO, 1, 0, 0),
F(50000000, P_GPLL0, 16, 0, 0),
F(80000000, P_GPLL0, 10, 0, 0),
F(100000000, P_GPLL0, 8, 0, 0),
F(160000000, P_GPLL0, 5, 0, 0),
F(200000000, P_GPLL0, 4, 0, 0),
F(216000000, P_GPLL6, 5, 0, 0),
F(228570000, P_GPLL0, 3.5, 0, 0),
F(240000000, P_GPLL6, 4.5, 0, 0),
F(266670000, P_GPLL0, 3, 0, 0),
F(300000000, P_GPLL3, 1, 0, 0),
F(320000000, P_GPLL0, 2.5, 0, 0),
F(375000000, P_GPLL3, 1, 0, 0),
F(400000000, P_GPLL0, 2, 0, 0),
F(450000000, P_GPLL3, 1, 0, 0),
{ }
};
static struct clk_rcg2 gfx3d_clk_src = {
.cmd_rcgr = 0x59000,
.hid_width = 5,
@@ -973,21 +1113,29 @@ static struct clk_rcg2 mdp_clk_src = {
}
};
static const struct parent_map gcc_pclk_map[] = {
static const struct parent_map gcc_pclk0_map[] = {
{ P_XO, 0 },
{ P_DSI0PLL, 1 },
{ P_DSI1PLL, 3 },
};
static const struct parent_map gcc_pclk1_map[] = {
{ P_XO, 0 },
{ P_DSI0PLL, 3 },
{ P_DSI1PLL, 1 },
};
static const struct clk_parent_data gcc_pclk_data[] = {
{ .index = DT_XO },
{ .index = DT_DSI0PLL },
{ .index = DT_DSI1PLL },
};
static struct clk_rcg2 pclk0_clk_src = {
.cmd_rcgr = 0x4d000,
.hid_width = 5,
.mnd_width = 8,
.parent_map = gcc_pclk_map,
.parent_map = gcc_pclk0_map,
.clkr.hw.init = &(struct clk_init_data) {
.name = "pclk0_clk_src",
.parent_data = gcc_pclk_data,
@@ -997,6 +1145,20 @@ static struct clk_rcg2 pclk0_clk_src = {
}
};
static struct clk_rcg2 pclk1_clk_src = {
.cmd_rcgr = 0x4d0b8,
.hid_width = 5,
.mnd_width = 8,
.parent_map = gcc_pclk1_map,
.clkr.hw.init = &(struct clk_init_data){
.name = "pclk1_clk_src",
.parent_data = gcc_pclk_data,
.num_parents = ARRAY_SIZE(gcc_pclk_data),
.ops = &clk_pixel_ops,
.flags = CLK_SET_RATE_PARENT,
},
};
static const struct freq_tbl ftbl_pdm2_clk_src[] = {
F(64000000, P_GPLL0, 12.5, 0, 0),
{ }
@@ -1108,6 +1270,14 @@ static const struct freq_tbl ftbl_usb_hs_system_clk_src[] = {
{ }
};
static const struct freq_tbl ftbl_usb_hs_system_clk_src_msm8937[] = {
F(57142857, P_GPLL0, 14, 0, 0),
F(100000000, P_GPLL0, 8, 0, 0),
F(133333333, P_GPLL0, 6, 0, 0),
F(177777778, P_GPLL0, 4.5, 0, 0),
{ }
};
static struct clk_rcg2 usb_hs_system_clk_src = {
.cmd_rcgr = 0x41010,
.hid_width = 5,
@@ -1132,6 +1302,15 @@ static const struct freq_tbl ftbl_vcodec0_clk_src[] = {
{ }
};
static const struct freq_tbl ftbl_vcodec0_clk_src_msm8937[] = {
F(166150000, P_GPLL6, 6.5, 0, 0),
F(240000000, P_GPLL6, 4.5, 0, 0),
F(308571428, P_GPLL6, 3.5, 0, 0),
F(320000000, P_GPLL0, 2.5, 0, 0),
F(360000000, P_GPLL6, 3, 0, 0),
{ }
};
static struct clk_rcg2 vcodec0_clk_src = {
.cmd_rcgr = 0x4c000,
.hid_width = 5,
@@ -1160,6 +1339,23 @@ static const struct freq_tbl ftbl_vfe_clk_src[] = {
{ }
};
static const struct freq_tbl ftbl_vfe_clk_src_msm8937[] = {
F(50000000, P_GPLL0, 16, 0, 0),
F(80000000, P_GPLL0, 10, 0, 0),
F(100000000, P_GPLL0, 8, 0, 0),
F(133333333, P_GPLL0, 6, 0, 0),
F(160000000, P_GPLL0, 5, 0, 0),
F(177777778, P_GPLL0, 4.5, 0, 0),
F(200000000, P_GPLL0, 4, 0, 0),
F(266666667, P_GPLL0, 3, 0, 0),
F(308571428, P_GPLL6, 3.5, 0, 0),
F(320000000, P_GPLL0, 2.5, 0, 0),
F(360000000, P_GPLL6, 3, 0, 0),
F(400000000, P_GPLL0, 2, 0, 0),
F(432000000, P_GPLL6, 2.5, 0, 0),
{ }
};
static struct clk_rcg2 vfe0_clk_src = {
.cmd_rcgr = 0x58000,
.hid_width = 5,
@@ -1269,6 +1465,24 @@ static struct clk_branch gcc_blsp2_ahb_clk = {
}
};
static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
.halt_reg = 0x02008,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x02008,
.enable_mask = BIT(0),
.hw.init = &(struct clk_init_data){
.name = "gcc_blsp1_qup1_i2c_apps_clk",
.parent_hws = (const struct clk_hw*[]){
&blsp1_qup1_i2c_apps_clk_src.clkr.hw,
},
.num_parents = 1,
.ops = &clk_branch2_ops,
.flags = CLK_SET_RATE_PARENT,
},
},
};
static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
.halt_reg = 0x03010,
.halt_check = BRANCH_HALT,
@@ -1377,6 +1591,42 @@ static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
}
};
static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
.halt_reg = 0x18020,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x18020,
.enable_mask = BIT(0),
.hw.init = &(struct clk_init_data){
.name = "gcc_blsp2_qup4_i2c_apps_clk",
.parent_hws = (const struct clk_hw*[]){
&blsp2_qup4_i2c_apps_clk_src.clkr.hw,
},
.num_parents = 1,
.ops = &clk_branch2_ops,
.flags = CLK_SET_RATE_PARENT,
},
},
};
static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
.halt_reg = 0x02004,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x02004,
.enable_mask = BIT(0),
.hw.init = &(struct clk_init_data){
.name = "gcc_blsp1_qup1_spi_apps_clk",
.parent_hws = (const struct clk_hw*[]){
&blsp1_qup1_spi_apps_clk_src.clkr.hw,
},
.num_parents = 1,
.ops = &clk_branch2_ops,
.flags = CLK_SET_RATE_PARENT,
},
},
};
static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
.halt_reg = 0x0300c,
.halt_check = BRANCH_HALT,
@@ -1485,6 +1735,24 @@ static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
}
};
static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
.halt_reg = 0x1801c,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x1801c,
.enable_mask = BIT(0),
.hw.init = &(struct clk_init_data){
.name = "gcc_blsp2_qup4_spi_apps_clk",
.parent_hws = (const struct clk_hw*[]){
&blsp2_qup4_spi_apps_clk_src.clkr.hw,
},
.num_parents = 1,
.ops = &clk_branch2_ops,
.flags = CLK_SET_RATE_PARENT,
},
},
};
static struct clk_branch gcc_blsp1_uart1_apps_clk = {
.halt_reg = 0x0203c,
.halt_check = BRANCH_HALT,
@@ -2521,6 +2789,24 @@ static struct clk_branch gcc_mdss_byte0_clk = {
}
};
static struct clk_branch gcc_mdss_byte1_clk = {
.halt_reg = 0x4d0a0,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x4d0a0,
.enable_mask = BIT(0),
.hw.init = &(struct clk_init_data){
.name = "gcc_mdss_byte1_clk",
.parent_hws = (const struct clk_hw*[]){
&byte1_clk_src.clkr.hw,
},
.num_parents = 1,
.ops = &clk_branch2_ops,
.flags = CLK_SET_RATE_PARENT,
},
},
};
static struct clk_branch gcc_mdss_esc0_clk = {
.halt_reg = 0x4d098,
.halt_check = BRANCH_HALT,
@@ -2539,6 +2825,24 @@ static struct clk_branch gcc_mdss_esc0_clk = {
}
};
static struct clk_branch gcc_mdss_esc1_clk = {
.halt_reg = 0x4d09c,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x4d09c,
.enable_mask = BIT(0),
.hw.init = &(struct clk_init_data){
.name = "gcc_mdss_esc1_clk",
.parent_hws = (const struct clk_hw*[]){
&esc1_clk_src.clkr.hw,
},
.num_parents = 1,
.ops = &clk_branch2_ops,
.flags = CLK_SET_RATE_PARENT,
},
},
};
static struct clk_branch gcc_mdss_mdp_clk = {
.halt_reg = 0x4d088,
.halt_check = BRANCH_HALT,
@@ -2575,6 +2879,24 @@ static struct clk_branch gcc_mdss_pclk0_clk = {
}
};
static struct clk_branch gcc_mdss_pclk1_clk = {
.halt_reg = 0x4d0a4,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x4d0a4,
.enable_mask = BIT(0),
.hw.init = &(struct clk_init_data){
.name = "gcc_mdss_pclk1_clk",
.parent_hws = (const struct clk_hw*[]){
&pclk1_clk_src.clkr.hw,
},
.num_parents = 1,
.ops = &clk_branch2_ops,
.flags = CLK_SET_RATE_PARENT,
},
},
};
static struct clk_branch gcc_mdss_vsync_clk = {
.halt_reg = 0x4d090,
.halt_check = BRANCH_HALT,
@@ -2632,6 +2954,24 @@ static struct clk_branch gcc_oxili_ahb_clk = {
}
};
static struct clk_branch gcc_oxili_aon_clk = {
.halt_reg = 0x5904c,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x5904c,
.enable_mask = BIT(0),
.hw.init = &(struct clk_init_data){
.name = "gcc_oxili_aon_clk",
.parent_hws = (const struct clk_hw*[]){
&gfx3d_clk_src.clkr.hw,
},
.num_parents = 1,
.ops = &clk_branch2_ops,
.flags = CLK_SET_RATE_PARENT,
},
},
};
static struct clk_branch gcc_oxili_gfx3d_clk = {
.halt_reg = 0x59020,
.halt_check = BRANCH_HALT,
@@ -2650,6 +2990,19 @@ static struct clk_branch gcc_oxili_gfx3d_clk = {
}
};
static struct clk_branch gcc_oxili_timer_clk = {
.halt_reg = 0x59040,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x59040,
.enable_mask = BIT(0),
.hw.init = &(struct clk_init_data){
.name = "gcc_oxili_timer_clk",
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch gcc_pdm2_clk = {
.halt_reg = 0x4400c,
.halt_check = BRANCH_HALT,
@@ -3027,6 +3380,28 @@ static struct gdsc oxili_gx_gdsc = {
.flags = CLAMP_IO,
};
static struct gdsc oxili_gx_gdsc_msm8937 = {
.gdscr = 0x5901c,
.clamp_io_ctrl = 0x5b00c,
.cxcs = (unsigned int []){ 0x59000 },
.cxc_count = 1,
.pd = {
.name = "oxili_gx_gdsc",
},
.pwrsts = PWRSTS_OFF_ON,
.flags = CLAMP_IO,
};
static struct gdsc oxili_cx_gdsc = {
.gdscr = 0x59044,
.cxcs = (unsigned int []){ 0x59020 },
.cxc_count = 1,
.pd = {
.name = "oxili_cx_gdsc",
},
.pwrsts = PWRSTS_OFF_ON,
};
static struct gdsc cpp_gdsc = {
.gdscr = 0x58078,
.cxcs = (unsigned int []){ 0x5803c, 0x58064 },
@@ -3207,6 +3582,188 @@ static struct clk_regmap *gcc_msm8917_clocks[] = {
[GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,
};
static struct clk_regmap *gcc_msm8937_clocks[] = {
[GPLL0] = &gpll0.clkr,
[GPLL0_EARLY] = &gpll0_early.clkr,
[GPLL0_SLEEP_CLK_SRC] = &gpll0_sleep_clk_src.clkr,
[GPLL3] = &gpll3.clkr,
[GPLL3_EARLY] = &gpll3_early.clkr,
[GPLL4] = &gpll4.clkr,
[GPLL4_EARLY] = &gpll4_early.clkr,
[GPLL6] = &gpll6,
[GPLL6_EARLY] = &gpll6_early.clkr,
[APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
[MSM8937_BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
[MSM8937_BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
[BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
[BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
[BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
[BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
[BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
[BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
[MSM8937_BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
[MSM8937_BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
[BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
[BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
[BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
[MSM8937_BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
[CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
[CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
[CAMSS_TOP_AHB_CLK_SRC] = &camss_top_ahb_clk_src.clkr,
[CCI_CLK_SRC] = &cci_clk_src.clkr,
[CPP_CLK_SRC] = &cpp_clk_src.clkr,
[CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
[CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
[CSI0_CLK_SRC] = &csi0_clk_src.clkr,
[CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
[CSI1_CLK_SRC] = &csi1_clk_src.clkr,
[CSI2_CLK_SRC] = &csi2_clk_src.clkr,
[ESC0_CLK_SRC] = &esc0_clk_src.clkr,
[MSM8937_ESC1_CLK_SRC] = &esc1_clk_src.clkr,
[GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
[GP1_CLK_SRC] = &gp1_clk_src.clkr,
[GP2_CLK_SRC] = &gp2_clk_src.clkr,
[GP3_CLK_SRC] = &gp3_clk_src.clkr,
[JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
[MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
[MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
[MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
[MDP_CLK_SRC] = &mdp_clk_src.clkr,
[PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
[MSM8937_PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
[PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
[SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
[SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
[USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
[VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
[VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
[VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
[VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
[GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,
[GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
[GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,
[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
[MSM8937_GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
[MSM8937_GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
[GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
[GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
[GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
[GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
[GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
[GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
[GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
[MSM8937_GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
[MSM8937_GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
[GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
[GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
[GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr,
[GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr,
[GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr,
[GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr,
[GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr,
[GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
[GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr,
[GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,
[GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,
[GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,
[GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,
[GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
[GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr,
[GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,
[GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,
[GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,
[GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,
[GCC_CAMSS_CSI2PHY_CLK] = &gcc_camss_csi2phy_clk.clkr,
[GCC_CAMSS_CSI2PIX_CLK] = &gcc_camss_csi2pix_clk.clkr,
[GCC_CAMSS_CSI2RDI_CLK] = &gcc_camss_csi2rdi_clk.clkr,
[GCC_CAMSS_CSI2_AHB_CLK] = &gcc_camss_csi2_ahb_clk.clkr,
[GCC_CAMSS_CSI2_CLK] = &gcc_camss_csi2_clk.clkr,
[GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,
[GCC_CAMSS_CSI_VFE1_CLK] = &gcc_camss_csi_vfe1_clk.clkr,
[GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,
[GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,
[GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,
[GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr,
[GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr,
[GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr,
[GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
[GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
[GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,
[GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr,
[GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
[GCC_CAMSS_VFE0_AHB_CLK] = &gcc_camss_vfe0_ahb_clk.clkr,
[GCC_CAMSS_VFE0_AXI_CLK] = &gcc_camss_vfe0_axi_clk.clkr,
[GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,
[GCC_CAMSS_VFE1_AHB_CLK] = &gcc_camss_vfe1_ahb_clk.clkr,
[GCC_CAMSS_VFE1_AXI_CLK] = &gcc_camss_vfe1_axi_clk.clkr,
[GCC_CAMSS_VFE1_CLK] = &gcc_camss_vfe1_clk.clkr,
[GCC_CPP_TBU_CLK] = &gcc_cpp_tbu_clk.clkr,
[GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
[GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
[GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
[GCC_DCC_CLK] = &gcc_dcc_clk.clkr,
[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
[GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr,
[GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,
[GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,
[GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,
[GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,
[MSM8937_GCC_MDSS_BYTE1_CLK] = &gcc_mdss_byte1_clk.clkr,
[GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,
[MSM8937_GCC_MDSS_ESC1_CLK] = &gcc_mdss_esc1_clk.clkr,
[GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,
[GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,
[MSM8937_GCC_MDSS_PCLK1_CLK] = &gcc_mdss_pclk1_clk.clkr,
[GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,
[GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
[GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
[GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,
[MSM8937_GCC_OXILI_AON_CLK] = &gcc_oxili_aon_clk.clkr,
[GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,
[MSM8937_GCC_OXILI_TIMER_CLK] = &gcc_oxili_timer_clk.clkr,
[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
[GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,
[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
[GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
[GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
[GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
[GCC_USB_HS_PHY_CFG_AHB_CLK] = &gcc_usb_hs_phy_cfg_ahb_clk.clkr,
[GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
[GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr,
[GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr,
[GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr,
[GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr,
[GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr,
[GCC_VFE1_TBU_CLK] = &gcc_vfe1_tbu_clk.clkr,
[GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,
};
static const struct qcom_reset_map gcc_msm8917_resets[] = {
[GCC_CAMSS_MICRO_BCR] = { 0x56008 },
[GCC_MSS_BCR] = { 0x71000 },
@@ -3234,6 +3791,18 @@ static struct gdsc *gcc_msm8917_gdscs[] = {
[VFE1_GDSC] = &vfe1_gdsc,
};
static struct gdsc *gcc_msm8937_gdscs[] = {
[CPP_GDSC] = &cpp_gdsc,
[JPEG_GDSC] = &jpeg_gdsc,
[MDSS_GDSC] = &mdss_gdsc,
[OXILI_GX_GDSC] = &oxili_gx_gdsc_msm8937,
[MSM8937_OXILI_CX_GDSC] = &oxili_cx_gdsc,
[VENUS_CORE0_GDSC] = &venus_core0_gdsc,
[VENUS_GDSC] = &venus_gdsc,
[VFE0_GDSC] = &vfe0_gdsc,
[VFE1_GDSC] = &vfe1_gdsc,
};
static const struct qcom_cc_desc gcc_msm8917_desc = {
.config = &gcc_msm8917_regmap_config,
.clks = gcc_msm8917_clocks,
@@ -3254,6 +3823,41 @@ static const struct qcom_cc_desc gcc_qm215_desc = {
.num_gdscs = ARRAY_SIZE(gcc_msm8917_gdscs),
};
static const struct qcom_cc_desc gcc_msm8937_desc = {
.config = &gcc_msm8917_regmap_config,
.clks = gcc_msm8937_clocks,
.num_clks = ARRAY_SIZE(gcc_msm8937_clocks),
.resets = gcc_msm8917_resets,
.num_resets = ARRAY_SIZE(gcc_msm8917_resets),
.gdscs = gcc_msm8937_gdscs,
.num_gdscs = ARRAY_SIZE(gcc_msm8937_gdscs),
};
static void msm8937_clock_override(void)
{
/* GPLL3 750MHz configuration */
gpll3_early_config.l = 47;
gpll3_early.vco_table = gpll3_p_vco_msm8937;
gpll3_early.num_vco = ARRAY_SIZE(gpll3_p_vco_msm8937);
/*
* Set below clocks for use specific msm8937 parent map.
*/
vcodec0_clk_src.parent_map = gcc_cpp_map;
vcodec0_clk_src.clkr.hw.init = &vcodec0_clk_src_init_msm8937;
/*
* Set below clocks for use specific msm8937 freq table.
*/
vfe0_clk_src.freq_tbl = ftbl_vfe_clk_src_msm8937;
vfe1_clk_src.freq_tbl = ftbl_vfe_clk_src_msm8937;
cpp_clk_src.freq_tbl = ftbl_cpp_clk_src_msm8937;
vcodec0_clk_src.freq_tbl = ftbl_vcodec0_clk_src_msm8937;
csi0phytimer_clk_src.freq_tbl = ftbl_csi_phytimer_clk_src_msm8937;
csi1phytimer_clk_src.freq_tbl = ftbl_csi_phytimer_clk_src_msm8937;
usb_hs_system_clk_src.freq_tbl = ftbl_usb_hs_system_clk_src_msm8937;
}
static int gcc_msm8917_probe(struct platform_device *pdev)
{
struct regmap *regmap;
@@ -3261,8 +3865,12 @@ static int gcc_msm8917_probe(struct platform_device *pdev)
gcc_desc = of_device_get_match_data(&pdev->dev);
if (gcc_desc == &gcc_qm215_desc)
if (gcc_desc == &gcc_qm215_desc) {
gfx3d_clk_src.parent_map = gcc_gfx3d_map_qm215;
} else if (gcc_desc == &gcc_msm8937_desc) {
msm8937_clock_override();
gfx3d_clk_src.freq_tbl = ftbl_gfx3d_clk_src_msm8937;
}
regmap = qcom_cc_map(pdev, gcc_desc);
if (IS_ERR(regmap))
@@ -3276,6 +3884,7 @@ static int gcc_msm8917_probe(struct platform_device *pdev)
static const struct of_device_id gcc_msm8917_match_table[] = {
{ .compatible = "qcom,gcc-msm8917", .data = &gcc_msm8917_desc },
{ .compatible = "qcom,gcc-qm215", .data = &gcc_qm215_desc },
{ .compatible = "qcom,gcc-msm8937", .data = &gcc_msm8937_desc },
{},
};
MODULE_DEVICE_TABLE(of, gcc_msm8917_match_table);

View File

@@ -2754,7 +2754,7 @@ static struct clk_regmap *gcc_qcs404_clocks[] = {
[GCC_DCC_CLK] = &gcc_dcc_clk.clkr,
[GCC_DCC_XO_CLK] = &gcc_dcc_xo_clk.clkr,
[GCC_WCSS_Q6_AHB_CLK] = &gcc_wdsp_q6ss_ahbs_clk.clkr,
[GCC_WCSS_Q6_AXIM_CLK] = &gcc_wdsp_q6ss_axim_clk.clkr,
[GCC_WCSS_Q6_AXIM_CLK] = &gcc_wdsp_q6ss_axim_clk.clkr,
};

View File

@@ -6775,10 +6775,6 @@ static struct gdsc pcie_1_tunnel_gdsc = {
.flags = VOTABLE | RETAIN_FF_ENABLE,
};
/*
* The Qualcomm PCIe driver does not yet implement suspend so to keep the
* PCIe power domains always-on for now.
*/
static struct gdsc pcie_2a_gdsc = {
.gdscr = 0x9d004,
.collapse_ctrl = 0x52128,

View File

@@ -2247,6 +2247,45 @@ static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = {
},
};
static struct clk_branch hlos1_vote_lpass_adsp_smmu_clk = {
.halt_reg = 0x7d014,
.halt_check = BRANCH_VOTED,
.clkr = {
.enable_reg = 0x7d014,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "hlos1_vote_lpass_adsp_smmu_clk",
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch hlos1_vote_turing_adsp_smmu_clk = {
.halt_reg = 0x7d048,
.halt_check = BRANCH_VOTED,
.clkr = {
.enable_reg = 0x7d048,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "hlos1_vote_turing_adsp_smmu_clk",
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch hlos2_vote_turing_adsp_smmu_clk = {
.halt_reg = 0x7e048,
.halt_check = BRANCH_VOTED,
.clkr = {
.enable_reg = 0x7e048,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "hlos2_vote_turing_adsp_smmu_clk",
.ops = &clk_branch2_ops,
},
},
};
static struct gdsc ufs_gdsc = {
.gdscr = 0x75004,
.gds_hw_ctrl = 0x0,
@@ -2277,6 +2316,33 @@ static struct gdsc pcie_0_gdsc = {
.flags = VOTABLE,
};
static struct gdsc hlos1_vote_turing_adsp_gdsc = {
.gdscr = 0x7d04c,
.pd = {
.name = "hlos1_vote_turing_adsp_gdsc",
},
.pwrsts = PWRSTS_OFF_ON,
.flags = VOTABLE,
};
static struct gdsc hlos2_vote_turing_adsp_gdsc = {
.gdscr = 0x7e04c,
.pd = {
.name = "hlos2_vote_turing_adsp_gdsc",
},
.pwrsts = PWRSTS_OFF_ON,
.flags = VOTABLE,
};
static struct gdsc hlos1_vote_lpass_adsp_gdsc = {
.gdscr = 0x7d034,
.pd = {
.name = "hlos1_vote_lpass_adsp_gdsc",
},
.pwrsts = PWRSTS_OFF_ON,
.flags = VOTABLE,
};
static struct clk_hw *gcc_sdm660_hws[] = {
&xo.hw,
&gpll0_early_div.hw,
@@ -2409,12 +2475,18 @@ static struct clk_regmap *gcc_sdm660_clocks[] = {
[USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
[USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
[USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr,
[GCC_HLOS1_VOTE_LPASS_ADSP_SMMU_CLK] = &hlos1_vote_lpass_adsp_smmu_clk.clkr,
[GCC_HLOS1_VOTE_TURING_ADSP_SMMU_CLK] = &hlos1_vote_turing_adsp_smmu_clk.clkr,
[GCC_HLOS2_VOTE_TURING_ADSP_SMMU_CLK] = &hlos2_vote_turing_adsp_smmu_clk.clkr,
};
static struct gdsc *gcc_sdm660_gdscs[] = {
[UFS_GDSC] = &ufs_gdsc,
[USB_30_GDSC] = &usb_30_gdsc,
[PCIE_0_GDSC] = &pcie_0_gdsc,
[HLOS1_VOTE_TURING_ADSP_GDSC] = &hlos1_vote_turing_adsp_gdsc,
[HLOS2_VOTE_TURING_ADSP_GDSC] = &hlos2_vote_turing_adsp_gdsc,
[HLOS1_VOTE_LPASS_ADSP_GDSC] = &hlos1_vote_lpass_adsp_gdsc,
};
static const struct qcom_reset_map gcc_sdm660_resets[] = {

View File

@@ -365,7 +365,7 @@ static struct clk_branch gpu_cc_cx_gmu_clk = {
&gpu_cc_gmu_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_aon_ops,
},
},
@@ -414,7 +414,7 @@ static struct clk_branch gpu_cc_cxo_clk = {
&gpu_cc_xo_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
@@ -499,7 +499,7 @@ static struct clk_branch gpu_cc_hub_cx_int_clk = {
&gpu_cc_hub_cx_int_div_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_aon_ops,
},
},

View File

@@ -42,7 +42,7 @@ static struct clk_alpha_pll gpu_cc_pll1 = {
.clkr = {
.hw.init = &(struct clk_init_data){
.name = "gpu_cc_pll1",
.parent_data = &(const struct clk_parent_data){
.parent_data = &(const struct clk_parent_data){
.fw_name = "bi_tcxo",
},
.num_parents = 1,

View File

@@ -67,7 +67,7 @@ static struct clk_alpha_pll gpu_cc_pll0 = {
.clkr = {
.hw.init = &(struct clk_init_data){
.name = "gpu_cc_pll0",
.parent_data = &(const struct clk_parent_data){
.parent_data = &(const struct clk_parent_data){
.index = DT_BI_TCXO,
.fw_name = "bi_tcxo",
},
@@ -111,7 +111,7 @@ static struct clk_alpha_pll gpu_cc_pll1 = {
.clkr = {
.hw.init = &(struct clk_init_data){
.name = "gpu_cc_pll1",
.parent_data = &(const struct clk_parent_data){
.parent_data = &(const struct clk_parent_data){
.index = DT_BI_TCXO,
.fw_name = "bi_tcxo",
},

View File

@@ -53,7 +53,7 @@ static struct clk_alpha_pll gpu_cc_pll1 = {
.clkr = {
.hw.init = &(struct clk_init_data){
.name = "gpu_cc_pll1",
.parent_data = &(const struct clk_parent_data){
.parent_data = &(const struct clk_parent_data){
.fw_name = "bi_tcxo",
},
.num_parents = 1,

View File

@@ -56,7 +56,7 @@ static struct clk_alpha_pll gpu_cc_pll1 = {
.clkr = {
.hw.init = &(struct clk_init_data){
.name = "gpu_cc_pll1",
.parent_data = &(const struct clk_parent_data){
.parent_data = &(const struct clk_parent_data){
.fw_name = "bi_tcxo",
},
.num_parents = 1,

View File

@@ -709,8 +709,8 @@ static const struct qcom_cc_desc lpass_audio_cc_sc7280_desc = {
};
static const struct qcom_reset_map lpass_audio_cc_sc7280_resets[] = {
[LPASS_AUDIO_SWR_RX_CGCR] = { 0xa0, 1 },
[LPASS_AUDIO_SWR_TX_CGCR] = { 0xa8, 1 },
[LPASS_AUDIO_SWR_RX_CGCR] = { 0xa0, 1 },
[LPASS_AUDIO_SWR_TX_CGCR] = { 0xa8, 1 },
[LPASS_AUDIO_SWR_WSA_CGCR] = { 0xb0, 1 },
};

View File

@@ -18,9 +18,9 @@
#include "reset.h"
static const struct qcom_reset_map lpass_audiocc_sc8280xp_resets[] = {
[LPASS_AUDIO_SWR_RX_CGCR] = { 0xa0, 1 },
[LPASS_AUDIO_SWR_RX_CGCR] = { 0xa0, 1 },
[LPASS_AUDIO_SWR_WSA_CGCR] = { 0xb0, 1 },
[LPASS_AUDIO_SWR_WSA2_CGCR] = { 0xd8, 1 },
[LPASS_AUDIO_SWR_WSA2_CGCR] = { 0xd8, 1 },
};
static const struct regmap_config lpass_audiocc_sc8280xp_regmap_config = {

View File

@@ -17,7 +17,7 @@
#include "reset.h"
static const struct qcom_reset_map lpass_audiocc_sm6115_resets[] = {
[LPASS_AUDIO_SWR_RX_CGCR] = { .reg = 0x98, .bit = 1, .udelay = 500 },
[LPASS_AUDIO_SWR_RX_CGCR] = { .reg = 0x98, .bit = 1, .udelay = 500 },
};
static struct regmap_config lpass_audiocc_sm6115_regmap_config = {

View File

@@ -42,7 +42,7 @@ static const struct alpha_pll_config lpass_lpaaudio_dig_pll_config = {
};
static const u8 clk_alpha_pll_regs_offset[][PLL_OFF_MAX_REGS] = {
[CLK_ALPHA_PLL_TYPE_FABIA] = {
[CLK_ALPHA_PLL_TYPE_FABIA] = {
[PLL_OFF_L_VAL] = 0x04,
[PLL_OFF_CAL_L_VAL] = 0x8,
[PLL_OFF_USER_CTL] = 0x0c,

View File

@@ -74,7 +74,7 @@ static struct clk_alpha_pll mmpll0 = {
},
};
static struct clk_alpha_pll mmpll6 = {
static struct clk_alpha_pll mmpll6 = {
.offset = 0xf0,
.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
.clkr = {

View File

@@ -3016,7 +3016,7 @@ static const struct qcom_reset_map nss_cc_ipq9574_resets[] = {
[NSSPORT4_RESET] = { .reg = 0x28a24, .bitmask = GENMASK(5, 4) },
[NSSPORT5_RESET] = { .reg = 0x28a24, .bitmask = GENMASK(3, 2) },
[NSSPORT6_RESET] = { .reg = 0x28a24, .bitmask = GENMASK(1, 0) },
[EDMA_HW_RESET] = { .reg = 0x28a08, .bitmask = GENMASK(16, 15) },
[EDMA_HW_RESET] = { .reg = 0x28a08, .bitmask = GENMASK(16, 15) },
};
static const struct regmap_config nss_cc_ipq9574_regmap_config = {

View File

@@ -0,0 +1,313 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2025, Qualcomm Technologies, Inc. and/or its subsidiaries.
*/
#include <linux/clk-provider.h>
#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>
#include <dt-bindings/clock/qcom,glymur-tcsr.h>
#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_PAD,
};
static struct clk_branch tcsr_edp_clkref_en = {
.halt_reg = 0x1c,
.halt_check = BRANCH_HALT_DELAY,
.clkr = {
.enable_reg = 0x1c,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "tcsr_edp_clkref_en",
.parent_data = &(const struct clk_parent_data){
.index = DT_BI_TCXO_PAD,
},
.num_parents = 1,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch tcsr_pcie_1_clkref_en = {
.halt_reg = 0x4,
.halt_check = BRANCH_HALT_DELAY,
.clkr = {
.enable_reg = 0x4,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "tcsr_pcie_1_clkref_en",
.parent_data = &(const struct clk_parent_data){
.index = DT_BI_TCXO_PAD,
},
.num_parents = 1,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch tcsr_pcie_2_clkref_en = {
.halt_reg = 0x8,
.halt_check = BRANCH_HALT_DELAY,
.clkr = {
.enable_reg = 0x8,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "tcsr_pcie_2_clkref_en",
.parent_data = &(const struct clk_parent_data){
.index = DT_BI_TCXO_PAD,
},
.num_parents = 1,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch tcsr_pcie_3_clkref_en = {
.halt_reg = 0x10,
.halt_check = BRANCH_HALT_DELAY,
.clkr = {
.enable_reg = 0x10,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "tcsr_pcie_3_clkref_en",
.parent_data = &(const struct clk_parent_data){
.index = DT_BI_TCXO_PAD,
},
.num_parents = 1,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch tcsr_pcie_4_clkref_en = {
.halt_reg = 0x14,
.halt_check = BRANCH_HALT_DELAY,
.clkr = {
.enable_reg = 0x14,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "tcsr_pcie_4_clkref_en",
.parent_data = &(const struct clk_parent_data){
.index = DT_BI_TCXO_PAD,
},
.num_parents = 1,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch tcsr_usb2_1_clkref_en = {
.halt_reg = 0x28,
.halt_check = BRANCH_HALT_DELAY,
.clkr = {
.enable_reg = 0x28,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "tcsr_usb2_1_clkref_en",
.parent_data = &(const struct clk_parent_data){
.index = DT_BI_TCXO_PAD,
},
.num_parents = 1,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch tcsr_usb2_2_clkref_en = {
.halt_reg = 0x2c,
.halt_check = BRANCH_HALT_DELAY,
.clkr = {
.enable_reg = 0x2c,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "tcsr_usb2_2_clkref_en",
.parent_data = &(const struct clk_parent_data){
.index = DT_BI_TCXO_PAD,
},
.num_parents = 1,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch tcsr_usb2_3_clkref_en = {
.halt_reg = 0x30,
.halt_check = BRANCH_HALT_DELAY,
.clkr = {
.enable_reg = 0x30,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "tcsr_usb2_3_clkref_en",
.parent_data = &(const struct clk_parent_data){
.index = DT_BI_TCXO_PAD,
},
.num_parents = 1,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch tcsr_usb2_4_clkref_en = {
.halt_reg = 0x44,
.halt_check = BRANCH_HALT_DELAY,
.clkr = {
.enable_reg = 0x44,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "tcsr_usb2_4_clkref_en",
.parent_data = &(const struct clk_parent_data){
.index = DT_BI_TCXO_PAD,
},
.num_parents = 1,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch tcsr_usb3_0_clkref_en = {
.halt_reg = 0x20,
.halt_check = BRANCH_HALT_DELAY,
.clkr = {
.enable_reg = 0x20,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "tcsr_usb3_0_clkref_en",
.parent_data = &(const struct clk_parent_data){
.index = DT_BI_TCXO_PAD,
},
.num_parents = 1,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch tcsr_usb3_1_clkref_en = {
.halt_reg = 0x24,
.halt_check = BRANCH_HALT_DELAY,
.clkr = {
.enable_reg = 0x24,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "tcsr_usb3_1_clkref_en",
.parent_data = &(const struct clk_parent_data){
.index = DT_BI_TCXO_PAD,
},
.num_parents = 1,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch tcsr_usb4_1_clkref_en = {
.halt_reg = 0x0,
.halt_check = BRANCH_HALT_DELAY,
.clkr = {
.enable_reg = 0x0,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "tcsr_usb4_1_clkref_en",
.parent_data = &(const struct clk_parent_data){
.index = DT_BI_TCXO_PAD,
},
.num_parents = 1,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch tcsr_usb4_2_clkref_en = {
.halt_reg = 0x18,
.halt_check = BRANCH_HALT_DELAY,
.clkr = {
.enable_reg = 0x18,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "tcsr_usb4_2_clkref_en",
.parent_data = &(const struct clk_parent_data){
.index = DT_BI_TCXO_PAD,
},
.num_parents = 1,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_regmap *tcsr_cc_glymur_clocks[] = {
[TCSR_EDP_CLKREF_EN] = &tcsr_edp_clkref_en.clkr,
[TCSR_PCIE_1_CLKREF_EN] = &tcsr_pcie_1_clkref_en.clkr,
[TCSR_PCIE_2_CLKREF_EN] = &tcsr_pcie_2_clkref_en.clkr,
[TCSR_PCIE_3_CLKREF_EN] = &tcsr_pcie_3_clkref_en.clkr,
[TCSR_PCIE_4_CLKREF_EN] = &tcsr_pcie_4_clkref_en.clkr,
[TCSR_USB2_1_CLKREF_EN] = &tcsr_usb2_1_clkref_en.clkr,
[TCSR_USB2_2_CLKREF_EN] = &tcsr_usb2_2_clkref_en.clkr,
[TCSR_USB2_3_CLKREF_EN] = &tcsr_usb2_3_clkref_en.clkr,
[TCSR_USB2_4_CLKREF_EN] = &tcsr_usb2_4_clkref_en.clkr,
[TCSR_USB3_0_CLKREF_EN] = &tcsr_usb3_0_clkref_en.clkr,
[TCSR_USB3_1_CLKREF_EN] = &tcsr_usb3_1_clkref_en.clkr,
[TCSR_USB4_1_CLKREF_EN] = &tcsr_usb4_1_clkref_en.clkr,
[TCSR_USB4_2_CLKREF_EN] = &tcsr_usb4_2_clkref_en.clkr,
};
static const struct regmap_config tcsr_cc_glymur_regmap_config = {
.reg_bits = 32,
.reg_stride = 4,
.val_bits = 32,
.max_register = 0x44,
.fast_io = true,
};
static const struct qcom_cc_desc tcsr_cc_glymur_desc = {
.config = &tcsr_cc_glymur_regmap_config,
.clks = tcsr_cc_glymur_clocks,
.num_clks = ARRAY_SIZE(tcsr_cc_glymur_clocks),
};
static const struct of_device_id tcsr_cc_glymur_match_table[] = {
{ .compatible = "qcom,glymur-tcsr" },
{ }
};
MODULE_DEVICE_TABLE(of, tcsr_cc_glymur_match_table);
static int tcsr_cc_glymur_probe(struct platform_device *pdev)
{
return qcom_cc_probe(pdev, &tcsr_cc_glymur_desc);
}
static struct platform_driver tcsr_cc_glymur_driver = {
.probe = tcsr_cc_glymur_probe,
.driver = {
.name = "tcsrcc-glymur",
.of_match_table = tcsr_cc_glymur_match_table,
},
};
static int __init tcsr_cc_glymur_init(void)
{
return platform_driver_register(&tcsr_cc_glymur_driver);
}
subsys_initcall(tcsr_cc_glymur_init);
static void __exit tcsr_cc_glymur_exit(void)
{
platform_driver_unregister(&tcsr_cc_glymur_driver);
}
module_exit(tcsr_cc_glymur_exit);
MODULE_DESCRIPTION("QTI TCSRCC GLYMUR Driver");
MODULE_LICENSE("GPL");

View File

@@ -29,6 +29,10 @@ static struct clk_branch tcsr_edp_clkref_en = {
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "tcsr_edp_clkref_en",
.parent_data = &(const struct clk_parent_data){
.index = DT_BI_TCXO_PAD,
},
.num_parents = 1,
.ops = &clk_branch2_ops,
},
},

View File

@@ -366,7 +366,7 @@ static struct qcom_cc_driver_data video_cc_milos_driver_data = {
.num_clk_cbcrs = ARRAY_SIZE(video_cc_milos_critical_cbcrs),
};
static struct qcom_cc_desc video_cc_milos_desc = {
static const struct qcom_cc_desc video_cc_milos_desc = {
.config = &video_cc_milos_regmap_config,
.clks = video_cc_milos_clocks,
.num_clks = ARRAY_SIZE(video_cc_milos_clocks),

View File

@@ -8,5 +8,11 @@
#define APCS_ALIAS0_CLK_SRC 0
#define APCS_ALIAS0_CORE_CLK 1
#define APSS_PLL_EARLY 2
#define APSS_SILVER_CLK_SRC 3
#define APSS_SILVER_CORE_CLK 4
#define L3_PLL 5
#define L3_CLK_SRC 6
#define L3_CORE_CLK 7
#endif

View File

@@ -52,4 +52,8 @@
/* DISP_CC power domains */
#define DISP_CC_MDSS_CORE_GDSC 0
/* DISPCC resets */
#define DISP_CC_MDSS_CORE_BCR 0
#define DISP_CC_MDSS_RSCC_BCR 1
#endif

View File

@@ -170,6 +170,23 @@
#define VFE1_CLK_SRC 163
#define VSYNC_CLK_SRC 164
#define GPLL0_SLEEP_CLK_SRC 165
/* Addtional MSM8937-specific clocks */
#define MSM8937_BLSP1_QUP1_I2C_APPS_CLK_SRC 166
#define MSM8937_BLSP1_QUP1_SPI_APPS_CLK_SRC 167
#define MSM8937_BLSP2_QUP4_I2C_APPS_CLK_SRC 168
#define MSM8937_BLSP2_QUP4_SPI_APPS_CLK_SRC 169
#define MSM8937_BYTE1_CLK_SRC 170
#define MSM8937_ESC1_CLK_SRC 171
#define MSM8937_PCLK1_CLK_SRC 172
#define MSM8937_GCC_BLSP1_QUP1_I2C_APPS_CLK 173
#define MSM8937_GCC_BLSP1_QUP1_SPI_APPS_CLK 174
#define MSM8937_GCC_BLSP2_QUP4_I2C_APPS_CLK 175
#define MSM8937_GCC_BLSP2_QUP4_SPI_APPS_CLK 176
#define MSM8937_GCC_MDSS_BYTE1_CLK 177
#define MSM8937_GCC_MDSS_ESC1_CLK 178
#define MSM8937_GCC_MDSS_PCLK1_CLK 179
#define MSM8937_GCC_OXILI_AON_CLK 180
#define MSM8937_GCC_OXILI_TIMER_CLK 181
/* GCC block resets */
#define GCC_CAMSS_MICRO_BCR 0
@@ -187,5 +204,7 @@
#define VENUS_GDSC 5
#define VFE0_GDSC 6
#define VFE1_GDSC 7
/* Additional MSM8937-specific GDSCs */
#define MSM8937_OXILI_CX_GDSC 8
#endif

View File

@@ -138,10 +138,16 @@
#define GCC_UFS_UNIPRO_CORE_HW_CTL_CLK 128
#define GCC_RX0_USB2_CLKREF_CLK 129
#define GCC_RX1_USB2_CLKREF_CLK 130
#define GCC_HLOS1_VOTE_LPASS_ADSP_SMMU_CLK 131
#define GCC_HLOS1_VOTE_TURING_ADSP_SMMU_CLK 132
#define GCC_HLOS2_VOTE_TURING_ADSP_SMMU_CLK 133
#define PCIE_0_GDSC 0
#define UFS_GDSC 1
#define USB_30_GDSC 2
#define HLOS1_VOTE_TURING_ADSP_GDSC 3
#define HLOS2_VOTE_TURING_ADSP_GDSC 4
#define HLOS1_VOTE_LPASS_ADSP_GDSC 5
#define GCC_QUSB2PHY_PRIM_BCR 0
#define GCC_QUSB2PHY_SEC_BCR 1

View File

@@ -0,0 +1,114 @@
/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
/*
* Copyright (c) 2025, Qualcomm Technologies, Inc. and/or its subsidiaries.
*/
#ifndef _DT_BINDINGS_CLK_QCOM_DISP_CC_GLYMUR_H
#define _DT_BINDINGS_CLK_QCOM_DISP_CC_GLYMUR_H
/* DISP_CC clocks */
#define DISP_CC_ESYNC0_CLK 0
#define DISP_CC_ESYNC0_CLK_SRC 1
#define DISP_CC_ESYNC1_CLK 2
#define DISP_CC_ESYNC1_CLK_SRC 3
#define DISP_CC_MDSS_ACCU_SHIFT_CLK 4
#define DISP_CC_MDSS_AHB1_CLK 5
#define DISP_CC_MDSS_AHB_CLK 6
#define DISP_CC_MDSS_AHB_CLK_SRC 7
#define DISP_CC_MDSS_BYTE0_CLK 8
#define DISP_CC_MDSS_BYTE0_CLK_SRC 9
#define DISP_CC_MDSS_BYTE0_DIV_CLK_SRC 10
#define DISP_CC_MDSS_BYTE0_INTF_CLK 11
#define DISP_CC_MDSS_BYTE1_CLK 12
#define DISP_CC_MDSS_BYTE1_CLK_SRC 13
#define DISP_CC_MDSS_BYTE1_DIV_CLK_SRC 14
#define DISP_CC_MDSS_BYTE1_INTF_CLK 15
#define DISP_CC_MDSS_DPTX0_AUX_CLK 16
#define DISP_CC_MDSS_DPTX0_AUX_CLK_SRC 17
#define DISP_CC_MDSS_DPTX0_LINK_CLK 18
#define DISP_CC_MDSS_DPTX0_LINK_CLK_SRC 19
#define DISP_CC_MDSS_DPTX0_LINK_DIV_CLK_SRC 20
#define DISP_CC_MDSS_DPTX0_LINK_DPIN_CLK 21
#define DISP_CC_MDSS_DPTX0_LINK_DPIN_DIV_CLK_SRC 22
#define DISP_CC_MDSS_DPTX0_LINK_INTF_CLK 23
#define DISP_CC_MDSS_DPTX0_PIXEL0_CLK 24
#define DISP_CC_MDSS_DPTX0_PIXEL0_CLK_SRC 25
#define DISP_CC_MDSS_DPTX0_PIXEL1_CLK 26
#define DISP_CC_MDSS_DPTX0_PIXEL1_CLK_SRC 27
#define DISP_CC_MDSS_DPTX0_USB_ROUTER_LINK_INTF_CLK 28
#define DISP_CC_MDSS_DPTX1_AUX_CLK 29
#define DISP_CC_MDSS_DPTX1_AUX_CLK_SRC 30
#define DISP_CC_MDSS_DPTX1_LINK_CLK 31
#define DISP_CC_MDSS_DPTX1_LINK_CLK_SRC 32
#define DISP_CC_MDSS_DPTX1_LINK_DIV_CLK_SRC 33
#define DISP_CC_MDSS_DPTX1_LINK_DPIN_CLK 34
#define DISP_CC_MDSS_DPTX1_LINK_DPIN_DIV_CLK_SRC 35
#define DISP_CC_MDSS_DPTX1_LINK_INTF_CLK 36
#define DISP_CC_MDSS_DPTX1_PIXEL0_CLK 37
#define DISP_CC_MDSS_DPTX1_PIXEL0_CLK_SRC 38
#define DISP_CC_MDSS_DPTX1_PIXEL1_CLK 39
#define DISP_CC_MDSS_DPTX1_PIXEL1_CLK_SRC 40
#define DISP_CC_MDSS_DPTX1_USB_ROUTER_LINK_INTF_CLK 41
#define DISP_CC_MDSS_DPTX2_AUX_CLK 42
#define DISP_CC_MDSS_DPTX2_AUX_CLK_SRC 43
#define DISP_CC_MDSS_DPTX2_LINK_CLK 44
#define DISP_CC_MDSS_DPTX2_LINK_CLK_SRC 45
#define DISP_CC_MDSS_DPTX2_LINK_DIV_CLK_SRC 46
#define DISP_CC_MDSS_DPTX2_LINK_DPIN_CLK 47
#define DISP_CC_MDSS_DPTX2_LINK_DPIN_DIV_CLK_SRC 48
#define DISP_CC_MDSS_DPTX2_LINK_INTF_CLK 49
#define DISP_CC_MDSS_DPTX2_PIXEL0_CLK 50
#define DISP_CC_MDSS_DPTX2_PIXEL0_CLK_SRC 51
#define DISP_CC_MDSS_DPTX2_PIXEL1_CLK 52
#define DISP_CC_MDSS_DPTX2_PIXEL1_CLK_SRC 53
#define DISP_CC_MDSS_DPTX2_USB_ROUTER_LINK_INTF_CLK 54
#define DISP_CC_MDSS_DPTX3_AUX_CLK 55
#define DISP_CC_MDSS_DPTX3_AUX_CLK_SRC 56
#define DISP_CC_MDSS_DPTX3_LINK_CLK 57
#define DISP_CC_MDSS_DPTX3_LINK_CLK_SRC 58
#define DISP_CC_MDSS_DPTX3_LINK_DIV_CLK_SRC 59
#define DISP_CC_MDSS_DPTX3_LINK_DPIN_CLK 60
#define DISP_CC_MDSS_DPTX3_LINK_DPIN_DIV_CLK_SRC 61
#define DISP_CC_MDSS_DPTX3_LINK_INTF_CLK 62
#define DISP_CC_MDSS_DPTX3_PIXEL0_CLK 63
#define DISP_CC_MDSS_DPTX3_PIXEL0_CLK_SRC 64
#define DISP_CC_MDSS_ESC0_CLK 65
#define DISP_CC_MDSS_ESC0_CLK_SRC 66
#define DISP_CC_MDSS_ESC1_CLK 67
#define DISP_CC_MDSS_ESC1_CLK_SRC 68
#define DISP_CC_MDSS_MDP1_CLK 69
#define DISP_CC_MDSS_MDP_CLK 70
#define DISP_CC_MDSS_MDP_CLK_SRC 71
#define DISP_CC_MDSS_MDP_LUT1_CLK 72
#define DISP_CC_MDSS_MDP_LUT_CLK 73
#define DISP_CC_MDSS_NON_GDSC_AHB_CLK 74
#define DISP_CC_MDSS_PCLK0_CLK 75
#define DISP_CC_MDSS_PCLK0_CLK_SRC 76
#define DISP_CC_MDSS_PCLK1_CLK 77
#define DISP_CC_MDSS_PCLK1_CLK_SRC 78
#define DISP_CC_MDSS_PCLK2_CLK 79
#define DISP_CC_MDSS_PCLK2_CLK_SRC 80
#define DISP_CC_MDSS_RSCC_AHB_CLK 81
#define DISP_CC_MDSS_RSCC_VSYNC_CLK 82
#define DISP_CC_MDSS_VSYNC1_CLK 83
#define DISP_CC_MDSS_VSYNC_CLK 84
#define DISP_CC_MDSS_VSYNC_CLK_SRC 85
#define DISP_CC_OSC_CLK 86
#define DISP_CC_OSC_CLK_SRC 87
#define DISP_CC_PLL0 88
#define DISP_CC_PLL1 89
#define DISP_CC_SLEEP_CLK 90
#define DISP_CC_SLEEP_CLK_SRC 91
#define DISP_CC_XO_CLK 92
#define DISP_CC_XO_CLK_SRC 93
/* DISP_CC power domains */
#define DISP_CC_MDSS_CORE_GDSC 0
#define DISP_CC_MDSS_CORE_INT2_GDSC 1
/* DISP_CC resets */
#define DISP_CC_MDSS_CORE_BCR 0
#define DISP_CC_MDSS_CORE_INT2_BCR 1
#define DISP_CC_MDSS_RSCC_BCR 2
#endif

View File

@@ -0,0 +1,578 @@
/* 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_GCC_GLYMUR_H
#define _DT_BINDINGS_CLK_QCOM_GCC_GLYMUR_H
/* GCC clocks */
#define GCC_GPLL0 0
#define GCC_GPLL0_OUT_EVEN 1
#define GCC_GPLL1 2
#define GCC_GPLL14 3
#define GCC_GPLL14_OUT_EVEN 4
#define GCC_GPLL4 5
#define GCC_GPLL5 6
#define GCC_GPLL7 7
#define GCC_GPLL8 8
#define GCC_GPLL9 9
#define GCC_AGGRE_NOC_PCIE_3A_WEST_SF_AXI_CLK 10
#define GCC_AGGRE_NOC_PCIE_3B_WEST_SF_AXI_CLK 11
#define GCC_AGGRE_NOC_PCIE_4_WEST_SF_AXI_CLK 12
#define GCC_AGGRE_NOC_PCIE_5_EAST_SF_AXI_CLK 13
#define GCC_AGGRE_NOC_PCIE_6_WEST_SF_AXI_CLK 14
#define GCC_AGGRE_UFS_PHY_AXI_CLK 15
#define GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK 16
#define GCC_AGGRE_USB2_PRIM_AXI_CLK 17
#define GCC_AGGRE_USB3_MP_AXI_CLK 18
#define GCC_AGGRE_USB3_PRIM_AXI_CLK 19
#define GCC_AGGRE_USB3_SEC_AXI_CLK 20
#define GCC_AGGRE_USB3_TERT_AXI_CLK 21
#define GCC_AGGRE_USB4_0_AXI_CLK 22
#define GCC_AGGRE_USB4_1_AXI_CLK 23
#define GCC_AGGRE_USB4_2_AXI_CLK 24
#define GCC_AV1E_AHB_CLK 25
#define GCC_AV1E_AXI_CLK 26
#define GCC_AV1E_XO_CLK 27
#define GCC_BOOT_ROM_AHB_CLK 28
#define GCC_CAMERA_AHB_CLK 29
#define GCC_CAMERA_HF_AXI_CLK 30
#define GCC_CAMERA_SF_AXI_CLK 31
#define GCC_CAMERA_XO_CLK 32
#define GCC_CFG_NOC_PCIE_ANOC_AHB_CLK 33
#define GCC_CFG_NOC_PCIE_ANOC_SOUTH_AHB_CLK 34
#define GCC_CFG_NOC_USB2_PRIM_AXI_CLK 35
#define GCC_CFG_NOC_USB3_MP_AXI_CLK 36
#define GCC_CFG_NOC_USB3_PRIM_AXI_CLK 37
#define GCC_CFG_NOC_USB3_SEC_AXI_CLK 38
#define GCC_CFG_NOC_USB3_TERT_AXI_CLK 39
#define GCC_CFG_NOC_USB_ANOC_AHB_CLK 40
#define GCC_CFG_NOC_USB_ANOC_SOUTH_AHB_CLK 41
#define GCC_DISP_AHB_CLK 42
#define GCC_DISP_HF_AXI_CLK 43
#define GCC_EVA_AHB_CLK 44
#define GCC_EVA_AXI0_CLK 45
#define GCC_EVA_AXI0C_CLK 46
#define GCC_EVA_XO_CLK 47
#define GCC_GP1_CLK 48
#define GCC_GP1_CLK_SRC 49
#define GCC_GP2_CLK 50
#define GCC_GP2_CLK_SRC 51
#define GCC_GP3_CLK 52
#define GCC_GP3_CLK_SRC 53
#define GCC_GPU_CFG_AHB_CLK 54
#define GCC_GPU_GEMNOC_GFX_CLK 55
#define GCC_GPU_GPLL0_CLK_SRC 56
#define GCC_GPU_GPLL0_DIV_CLK_SRC 57
#define GCC_PCIE_0_AUX_CLK 58
#define GCC_PCIE_0_AUX_CLK_SRC 59
#define GCC_PCIE_0_CFG_AHB_CLK 60
#define GCC_PCIE_0_MSTR_AXI_CLK 61
#define GCC_PCIE_0_PHY_RCHNG_CLK 62
#define GCC_PCIE_0_PHY_RCHNG_CLK_SRC 63
#define GCC_PCIE_0_PIPE_CLK 64
#define GCC_PCIE_0_SLV_AXI_CLK 65
#define GCC_PCIE_0_SLV_Q2A_AXI_CLK 66
#define GCC_PCIE_1_AUX_CLK 67
#define GCC_PCIE_1_AUX_CLK_SRC 68
#define GCC_PCIE_1_CFG_AHB_CLK 69
#define GCC_PCIE_1_MSTR_AXI_CLK 70
#define GCC_PCIE_1_PHY_RCHNG_CLK 71
#define GCC_PCIE_1_PHY_RCHNG_CLK_SRC 72
#define GCC_PCIE_1_PIPE_CLK 73
#define GCC_PCIE_1_SLV_AXI_CLK 74
#define GCC_PCIE_1_SLV_Q2A_AXI_CLK 75
#define GCC_PCIE_2_AUX_CLK 76
#define GCC_PCIE_2_AUX_CLK_SRC 77
#define GCC_PCIE_2_CFG_AHB_CLK 78
#define GCC_PCIE_2_MSTR_AXI_CLK 79
#define GCC_PCIE_2_PHY_RCHNG_CLK 80
#define GCC_PCIE_2_PHY_RCHNG_CLK_SRC 81
#define GCC_PCIE_2_PIPE_CLK 82
#define GCC_PCIE_2_SLV_AXI_CLK 83
#define GCC_PCIE_2_SLV_Q2A_AXI_CLK 84
#define GCC_PCIE_3A_AUX_CLK 85
#define GCC_PCIE_3A_AUX_CLK_SRC 86
#define GCC_PCIE_3A_CFG_AHB_CLK 87
#define GCC_PCIE_3A_MSTR_AXI_CLK 88
#define GCC_PCIE_3A_PHY_RCHNG_CLK 89
#define GCC_PCIE_3A_PHY_RCHNG_CLK_SRC 90
#define GCC_PCIE_3A_PIPE_CLK 91
#define GCC_PCIE_3A_PIPE_CLK_SRC 92
#define GCC_PCIE_3A_SLV_AXI_CLK 93
#define GCC_PCIE_3A_SLV_Q2A_AXI_CLK 94
#define GCC_PCIE_3B_AUX_CLK 95
#define GCC_PCIE_3B_AUX_CLK_SRC 96
#define GCC_PCIE_3B_CFG_AHB_CLK 97
#define GCC_PCIE_3B_MSTR_AXI_CLK 98
#define GCC_PCIE_3B_PHY_RCHNG_CLK 99
#define GCC_PCIE_3B_PHY_RCHNG_CLK_SRC 100
#define GCC_PCIE_3B_PIPE_CLK 101
#define GCC_PCIE_3B_PIPE_CLK_SRC 102
#define GCC_PCIE_3B_PIPE_DIV2_CLK 103
#define GCC_PCIE_3B_PIPE_DIV_CLK_SRC 104
#define GCC_PCIE_3B_SLV_AXI_CLK 105
#define GCC_PCIE_3B_SLV_Q2A_AXI_CLK 106
#define GCC_PCIE_4_AUX_CLK 107
#define GCC_PCIE_4_AUX_CLK_SRC 108
#define GCC_PCIE_4_CFG_AHB_CLK 109
#define GCC_PCIE_4_MSTR_AXI_CLK 110
#define GCC_PCIE_4_PHY_RCHNG_CLK 111
#define GCC_PCIE_4_PHY_RCHNG_CLK_SRC 112
#define GCC_PCIE_4_PIPE_CLK 113
#define GCC_PCIE_4_PIPE_CLK_SRC 114
#define GCC_PCIE_4_PIPE_DIV2_CLK 115
#define GCC_PCIE_4_PIPE_DIV_CLK_SRC 116
#define GCC_PCIE_4_SLV_AXI_CLK 117
#define GCC_PCIE_4_SLV_Q2A_AXI_CLK 118
#define GCC_PCIE_5_AUX_CLK 119
#define GCC_PCIE_5_AUX_CLK_SRC 120
#define GCC_PCIE_5_CFG_AHB_CLK 121
#define GCC_PCIE_5_MSTR_AXI_CLK 122
#define GCC_PCIE_5_PHY_RCHNG_CLK 123
#define GCC_PCIE_5_PHY_RCHNG_CLK_SRC 124
#define GCC_PCIE_5_PIPE_CLK 125
#define GCC_PCIE_5_PIPE_CLK_SRC 126
#define GCC_PCIE_5_PIPE_DIV2_CLK 127
#define GCC_PCIE_5_PIPE_DIV_CLK_SRC 128
#define GCC_PCIE_5_SLV_AXI_CLK 129
#define GCC_PCIE_5_SLV_Q2A_AXI_CLK 130
#define GCC_PCIE_6_AUX_CLK 131
#define GCC_PCIE_6_AUX_CLK_SRC 132
#define GCC_PCIE_6_CFG_AHB_CLK 133
#define GCC_PCIE_6_MSTR_AXI_CLK 134
#define GCC_PCIE_6_PHY_RCHNG_CLK 135
#define GCC_PCIE_6_PHY_RCHNG_CLK_SRC 136
#define GCC_PCIE_6_PIPE_CLK 137
#define GCC_PCIE_6_PIPE_CLK_SRC 138
#define GCC_PCIE_6_PIPE_DIV2_CLK 139
#define GCC_PCIE_6_PIPE_DIV_CLK_SRC 140
#define GCC_PCIE_6_SLV_AXI_CLK 141
#define GCC_PCIE_6_SLV_Q2A_AXI_CLK 142
#define GCC_PCIE_NOC_PWRCTL_CLK 143
#define GCC_PCIE_NOC_QOSGEN_EXTREF_CLK 144
#define GCC_PCIE_NOC_SF_CENTER_CLK 145
#define GCC_PCIE_NOC_SLAVE_SF_EAST_CLK 146
#define GCC_PCIE_NOC_SLAVE_SF_WEST_CLK 147
#define GCC_PCIE_NOC_TSCTR_CLK 148
#define GCC_PCIE_PHY_3A_AUX_CLK 149
#define GCC_PCIE_PHY_3A_AUX_CLK_SRC 150
#define GCC_PCIE_PHY_3B_AUX_CLK 151
#define GCC_PCIE_PHY_3B_AUX_CLK_SRC 152
#define GCC_PCIE_PHY_4_AUX_CLK 153
#define GCC_PCIE_PHY_4_AUX_CLK_SRC 154
#define GCC_PCIE_PHY_5_AUX_CLK 155
#define GCC_PCIE_PHY_5_AUX_CLK_SRC 156
#define GCC_PCIE_PHY_6_AUX_CLK 157
#define GCC_PCIE_PHY_6_AUX_CLK_SRC 158
#define GCC_PCIE_RSCC_CFG_AHB_CLK 159
#define GCC_PCIE_RSCC_XO_CLK 160
#define GCC_PDM2_CLK 161
#define GCC_PDM2_CLK_SRC 162
#define GCC_PDM_AHB_CLK 163
#define GCC_PDM_XO4_CLK 164
#define GCC_QMIP_AV1E_AHB_CLK 165
#define GCC_QMIP_CAMERA_CMD_AHB_CLK 166
#define GCC_QMIP_CAMERA_NRT_AHB_CLK 167
#define GCC_QMIP_CAMERA_RT_AHB_CLK 168
#define GCC_QMIP_GPU_AHB_CLK 169
#define GCC_QMIP_PCIE_3A_AHB_CLK 170
#define GCC_QMIP_PCIE_3B_AHB_CLK 171
#define GCC_QMIP_PCIE_4_AHB_CLK 172
#define GCC_QMIP_PCIE_5_AHB_CLK 173
#define GCC_QMIP_PCIE_6_AHB_CLK 174
#define GCC_QMIP_VIDEO_CV_CPU_AHB_CLK 175
#define GCC_QMIP_VIDEO_CVP_AHB_CLK 176
#define GCC_QMIP_VIDEO_V_CPU_AHB_CLK 177
#define GCC_QMIP_VIDEO_VCODEC1_AHB_CLK 178
#define GCC_QMIP_VIDEO_VCODEC_AHB_CLK 179
#define GCC_QUPV3_OOB_CORE_2X_CLK 180
#define GCC_QUPV3_OOB_CORE_CLK 181
#define GCC_QUPV3_OOB_M_AHB_CLK 182
#define GCC_QUPV3_OOB_QSPI_S0_CLK 183
#define GCC_QUPV3_OOB_QSPI_S0_CLK_SRC 184
#define GCC_QUPV3_OOB_QSPI_S1_CLK 185
#define GCC_QUPV3_OOB_QSPI_S1_CLK_SRC 186
#define GCC_QUPV3_OOB_S0_CLK 187
#define GCC_QUPV3_OOB_S0_CLK_SRC 188
#define GCC_QUPV3_OOB_S1_CLK 189
#define GCC_QUPV3_OOB_S1_CLK_SRC 190
#define GCC_QUPV3_OOB_S_AHB_CLK 191
#define GCC_QUPV3_OOB_TCXO_CLK 192
#define GCC_QUPV3_WRAP0_CORE_2X_CLK 193
#define GCC_QUPV3_WRAP0_CORE_CLK 194
#define GCC_QUPV3_WRAP0_QSPI_S2_CLK 195
#define GCC_QUPV3_WRAP0_QSPI_S2_CLK_SRC 196
#define GCC_QUPV3_WRAP0_QSPI_S3_CLK 197
#define GCC_QUPV3_WRAP0_QSPI_S3_CLK_SRC 198
#define GCC_QUPV3_WRAP0_QSPI_S6_CLK 199
#define GCC_QUPV3_WRAP0_QSPI_S6_CLK_SRC 200
#define GCC_QUPV3_WRAP0_S0_CLK 201
#define GCC_QUPV3_WRAP0_S0_CLK_SRC 202
#define GCC_QUPV3_WRAP0_S1_CLK 203
#define GCC_QUPV3_WRAP0_S1_CLK_SRC 204
#define GCC_QUPV3_WRAP0_S2_CLK 205
#define GCC_QUPV3_WRAP0_S2_CLK_SRC 206
#define GCC_QUPV3_WRAP0_S3_CLK 207
#define GCC_QUPV3_WRAP0_S3_CLK_SRC 208
#define GCC_QUPV3_WRAP0_S4_CLK 209
#define GCC_QUPV3_WRAP0_S4_CLK_SRC 210
#define GCC_QUPV3_WRAP0_S5_CLK 211
#define GCC_QUPV3_WRAP0_S5_CLK_SRC 212
#define GCC_QUPV3_WRAP0_S6_CLK 213
#define GCC_QUPV3_WRAP0_S6_CLK_SRC 214
#define GCC_QUPV3_WRAP0_S7_CLK 215
#define GCC_QUPV3_WRAP0_S7_CLK_SRC 216
#define GCC_QUPV3_WRAP1_CORE_2X_CLK 217
#define GCC_QUPV3_WRAP1_CORE_CLK 218
#define GCC_QUPV3_WRAP1_QSPI_S2_CLK 219
#define GCC_QUPV3_WRAP1_QSPI_S2_CLK_SRC 220
#define GCC_QUPV3_WRAP1_QSPI_S3_CLK 221
#define GCC_QUPV3_WRAP1_QSPI_S3_CLK_SRC 222
#define GCC_QUPV3_WRAP1_QSPI_S6_CLK 223
#define GCC_QUPV3_WRAP1_QSPI_S6_CLK_SRC 224
#define GCC_QUPV3_WRAP1_S0_CLK 225
#define GCC_QUPV3_WRAP1_S0_CLK_SRC 226
#define GCC_QUPV3_WRAP1_S1_CLK 227
#define GCC_QUPV3_WRAP1_S1_CLK_SRC 228
#define GCC_QUPV3_WRAP1_S2_CLK 229
#define GCC_QUPV3_WRAP1_S2_CLK_SRC 230
#define GCC_QUPV3_WRAP1_S3_CLK 231
#define GCC_QUPV3_WRAP1_S3_CLK_SRC 232
#define GCC_QUPV3_WRAP1_S4_CLK 233
#define GCC_QUPV3_WRAP1_S4_CLK_SRC 234
#define GCC_QUPV3_WRAP1_S5_CLK 235
#define GCC_QUPV3_WRAP1_S5_CLK_SRC 236
#define GCC_QUPV3_WRAP1_S6_CLK 237
#define GCC_QUPV3_WRAP1_S6_CLK_SRC 238
#define GCC_QUPV3_WRAP1_S7_CLK 239
#define GCC_QUPV3_WRAP1_S7_CLK_SRC 240
#define GCC_QUPV3_WRAP2_CORE_2X_CLK 241
#define GCC_QUPV3_WRAP2_CORE_CLK 242
#define GCC_QUPV3_WRAP2_QSPI_S2_CLK 243
#define GCC_QUPV3_WRAP2_QSPI_S2_CLK_SRC 244
#define GCC_QUPV3_WRAP2_QSPI_S3_CLK 245
#define GCC_QUPV3_WRAP2_QSPI_S3_CLK_SRC 246
#define GCC_QUPV3_WRAP2_QSPI_S6_CLK 247
#define GCC_QUPV3_WRAP2_QSPI_S6_CLK_SRC 248
#define GCC_QUPV3_WRAP2_S0_CLK 249
#define GCC_QUPV3_WRAP2_S0_CLK_SRC 250
#define GCC_QUPV3_WRAP2_S1_CLK 251
#define GCC_QUPV3_WRAP2_S1_CLK_SRC 252
#define GCC_QUPV3_WRAP2_S2_CLK 253
#define GCC_QUPV3_WRAP2_S2_CLK_SRC 254
#define GCC_QUPV3_WRAP2_S3_CLK 255
#define GCC_QUPV3_WRAP2_S3_CLK_SRC 256
#define GCC_QUPV3_WRAP2_S4_CLK 257
#define GCC_QUPV3_WRAP2_S4_CLK_SRC 258
#define GCC_QUPV3_WRAP2_S5_CLK 259
#define GCC_QUPV3_WRAP2_S5_CLK_SRC 260
#define GCC_QUPV3_WRAP2_S6_CLK 261
#define GCC_QUPV3_WRAP2_S6_CLK_SRC 262
#define GCC_QUPV3_WRAP2_S7_CLK 263
#define GCC_QUPV3_WRAP2_S7_CLK_SRC 264
#define GCC_QUPV3_WRAP_0_M_AHB_CLK 265
#define GCC_QUPV3_WRAP_0_S_AHB_CLK 266
#define GCC_QUPV3_WRAP_1_M_AHB_CLK 267
#define GCC_QUPV3_WRAP_1_S_AHB_CLK 268
#define GCC_QUPV3_WRAP_2_M_AHB_CLK 269
#define GCC_QUPV3_WRAP_2_S_AHB_CLK 270
#define GCC_SDCC2_AHB_CLK 271
#define GCC_SDCC2_APPS_CLK 272
#define GCC_SDCC2_APPS_CLK_SRC 273
#define GCC_SDCC4_AHB_CLK 274
#define GCC_SDCC4_APPS_CLK 275
#define GCC_SDCC4_APPS_CLK_SRC 276
#define GCC_UFS_PHY_AHB_CLK 277
#define GCC_UFS_PHY_AXI_CLK 278
#define GCC_UFS_PHY_AXI_CLK_SRC 279
#define GCC_UFS_PHY_AXI_HW_CTL_CLK 280
#define GCC_UFS_PHY_ICE_CORE_CLK 281
#define GCC_UFS_PHY_ICE_CORE_CLK_SRC 282
#define GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK 283
#define GCC_UFS_PHY_PHY_AUX_CLK 284
#define GCC_UFS_PHY_PHY_AUX_CLK_SRC 285
#define GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK 286
#define GCC_UFS_PHY_RX_SYMBOL_0_CLK 287
#define GCC_UFS_PHY_RX_SYMBOL_0_CLK_SRC 288
#define GCC_UFS_PHY_RX_SYMBOL_1_CLK 289
#define GCC_UFS_PHY_RX_SYMBOL_1_CLK_SRC 290
#define GCC_UFS_PHY_TX_SYMBOL_0_CLK 291
#define GCC_UFS_PHY_TX_SYMBOL_0_CLK_SRC 292
#define GCC_UFS_PHY_UNIPRO_CORE_CLK 293
#define GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC 294
#define GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK 295
#define GCC_USB20_MASTER_CLK 296
#define GCC_USB20_MASTER_CLK_SRC 297
#define GCC_USB20_MOCK_UTMI_CLK 298
#define GCC_USB20_MOCK_UTMI_CLK_SRC 299
#define GCC_USB20_MOCK_UTMI_POSTDIV_CLK_SRC 300
#define GCC_USB20_SLEEP_CLK 301
#define GCC_USB30_MP_MASTER_CLK 302
#define GCC_USB30_MP_MASTER_CLK_SRC 303
#define GCC_USB30_MP_MOCK_UTMI_CLK 304
#define GCC_USB30_MP_MOCK_UTMI_CLK_SRC 305
#define GCC_USB30_MP_MOCK_UTMI_POSTDIV_CLK_SRC 306
#define GCC_USB30_MP_SLEEP_CLK 307
#define GCC_USB30_PRIM_MASTER_CLK 308
#define GCC_USB30_PRIM_MASTER_CLK_SRC 309
#define GCC_USB30_PRIM_MOCK_UTMI_CLK 310
#define GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC 311
#define GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC 312
#define GCC_USB30_PRIM_SLEEP_CLK 313
#define GCC_USB30_SEC_MASTER_CLK 314
#define GCC_USB30_SEC_MASTER_CLK_SRC 315
#define GCC_USB30_SEC_MOCK_UTMI_CLK 316
#define GCC_USB30_SEC_MOCK_UTMI_CLK_SRC 317
#define GCC_USB30_SEC_MOCK_UTMI_POSTDIV_CLK_SRC 318
#define GCC_USB30_SEC_SLEEP_CLK 319
#define GCC_USB30_TERT_MASTER_CLK 320
#define GCC_USB30_TERT_MASTER_CLK_SRC 321
#define GCC_USB30_TERT_MOCK_UTMI_CLK 322
#define GCC_USB30_TERT_MOCK_UTMI_CLK_SRC 323
#define GCC_USB30_TERT_MOCK_UTMI_POSTDIV_CLK_SRC 324
#define GCC_USB30_TERT_SLEEP_CLK 325
#define GCC_USB34_PRIM_PHY_PIPE_CLK_SRC 326
#define GCC_USB34_SEC_PHY_PIPE_CLK_SRC 327
#define GCC_USB34_TERT_PHY_PIPE_CLK_SRC 328
#define GCC_USB3_MP_PHY_AUX_CLK 329
#define GCC_USB3_MP_PHY_AUX_CLK_SRC 330
#define GCC_USB3_MP_PHY_COM_AUX_CLK 331
#define GCC_USB3_MP_PHY_PIPE_0_CLK 332
#define GCC_USB3_MP_PHY_PIPE_0_CLK_SRC 333
#define GCC_USB3_MP_PHY_PIPE_1_CLK 334
#define GCC_USB3_MP_PHY_PIPE_1_CLK_SRC 335
#define GCC_USB3_PRIM_PHY_AUX_CLK 336
#define GCC_USB3_PRIM_PHY_AUX_CLK_SRC 337
#define GCC_USB3_PRIM_PHY_COM_AUX_CLK 338
#define GCC_USB3_PRIM_PHY_PIPE_CLK 339
#define GCC_USB3_PRIM_PHY_PIPE_CLK_SRC 340
#define GCC_USB3_SEC_PHY_AUX_CLK 341
#define GCC_USB3_SEC_PHY_AUX_CLK_SRC 342
#define GCC_USB3_SEC_PHY_COM_AUX_CLK 343
#define GCC_USB3_SEC_PHY_PIPE_CLK 344
#define GCC_USB3_SEC_PHY_PIPE_CLK_SRC 345
#define GCC_USB3_TERT_PHY_AUX_CLK 346
#define GCC_USB3_TERT_PHY_AUX_CLK_SRC 347
#define GCC_USB3_TERT_PHY_COM_AUX_CLK 348
#define GCC_USB3_TERT_PHY_PIPE_CLK 349
#define GCC_USB3_TERT_PHY_PIPE_CLK_SRC 350
#define GCC_USB4_0_CFG_AHB_CLK 351
#define GCC_USB4_0_DP0_CLK 352
#define GCC_USB4_0_DP1_CLK 353
#define GCC_USB4_0_MASTER_CLK 354
#define GCC_USB4_0_MASTER_CLK_SRC 355
#define GCC_USB4_0_PHY_DP0_CLK_SRC 356
#define GCC_USB4_0_PHY_DP0_GMUX_CLK_SRC 357
#define GCC_USB4_0_PHY_DP1_CLK_SRC 358
#define GCC_USB4_0_PHY_DP1_GMUX_CLK_SRC 359
#define GCC_USB4_0_PHY_P2RR2P_PIPE_CLK 360
#define GCC_USB4_0_PHY_P2RR2P_PIPE_CLK_SRC 361
#define GCC_USB4_0_PHY_PCIE_PIPE_CLK 362
#define GCC_USB4_0_PHY_PCIE_PIPE_CLK_SRC 363
#define GCC_USB4_0_PHY_PCIE_PIPE_MUX_CLK_SRC 364
#define GCC_USB4_0_PHY_PCIE_PIPEGMUX_CLK_SRC 365
#define GCC_USB4_0_PHY_PIPEGMUX_CLK_SRC 366
#define GCC_USB4_0_PHY_RX0_CLK 367
#define GCC_USB4_0_PHY_RX0_CLK_SRC 368
#define GCC_USB4_0_PHY_RX1_CLK 369
#define GCC_USB4_0_PHY_RX1_CLK_SRC 370
#define GCC_USB4_0_PHY_SYS_CLK_SRC 371
#define GCC_USB4_0_PHY_SYS_PIPEGMUX_CLK_SRC 372
#define GCC_USB4_0_PHY_USB_PIPE_CLK 373
#define GCC_USB4_0_SB_IF_CLK 374
#define GCC_USB4_0_SB_IF_CLK_SRC 375
#define GCC_USB4_0_SYS_CLK 376
#define GCC_USB4_0_TMU_CLK 377
#define GCC_USB4_0_TMU_CLK_SRC 378
#define GCC_USB4_0_UC_HRR_CLK 379
#define GCC_USB4_1_CFG_AHB_CLK 380
#define GCC_USB4_1_DP0_CLK 381
#define GCC_USB4_1_DP1_CLK 382
#define GCC_USB4_1_MASTER_CLK 383
#define GCC_USB4_1_MASTER_CLK_SRC 384
#define GCC_USB4_1_PHY_DP0_CLK_SRC 385
#define GCC_USB4_1_PHY_DP0_GMUX_2_CLK_SRC 386
#define GCC_USB4_1_PHY_DP1_CLK_SRC 387
#define GCC_USB4_1_PHY_DP1_GMUX_2_CLK_SRC 388
#define GCC_USB4_1_PHY_P2RR2P_PIPE_CLK 389
#define GCC_USB4_1_PHY_P2RR2P_PIPE_CLK_SRC 390
#define GCC_USB4_1_PHY_PCIE_PIPE_CLK 391
#define GCC_USB4_1_PHY_PCIE_PIPE_CLK_SRC 392
#define GCC_USB4_1_PHY_PCIE_PIPE_MUX_CLK_SRC 393
#define GCC_USB4_1_PHY_PCIE_PIPEGMUX_CLK_SRC 394
#define GCC_USB4_1_PHY_PIPEGMUX_CLK_SRC 395
#define GCC_USB4_1_PHY_PLL_PIPE_CLK_SRC 396
#define GCC_USB4_1_PHY_RX0_CLK 397
#define GCC_USB4_1_PHY_RX0_CLK_SRC 398
#define GCC_USB4_1_PHY_RX1_CLK 399
#define GCC_USB4_1_PHY_RX1_CLK_SRC 400
#define GCC_USB4_1_PHY_SYS_CLK_SRC 401
#define GCC_USB4_1_PHY_SYS_PIPEGMUX_CLK_SRC 402
#define GCC_USB4_1_PHY_USB_PIPE_CLK 403
#define GCC_USB4_1_SB_IF_CLK 404
#define GCC_USB4_1_SB_IF_CLK_SRC 405
#define GCC_USB4_1_SYS_CLK 406
#define GCC_USB4_1_TMU_CLK 407
#define GCC_USB4_1_TMU_CLK_SRC 408
#define GCC_USB4_1_UC_HRR_CLK 409
#define GCC_USB4_2_CFG_AHB_CLK 410
#define GCC_USB4_2_DP0_CLK 411
#define GCC_USB4_2_DP1_CLK 412
#define GCC_USB4_2_MASTER_CLK 413
#define GCC_USB4_2_MASTER_CLK_SRC 414
#define GCC_USB4_2_PHY_DP0_CLK_SRC 415
#define GCC_USB4_2_PHY_DP0_GMUX_CLK_SRC 416
#define GCC_USB4_2_PHY_DP1_CLK_SRC 417
#define GCC_USB4_2_PHY_DP1_GMUX_CLK_SRC 418
#define GCC_USB4_2_PHY_P2RR2P_PIPE_CLK 419
#define GCC_USB4_2_PHY_P2RR2P_PIPE_CLK_SRC 420
#define GCC_USB4_2_PHY_PCIE_PIPE_CLK 421
#define GCC_USB4_2_PHY_PCIE_PIPE_CLK_SRC 422
#define GCC_USB4_2_PHY_PCIE_PIPE_MUX_CLK_SRC 423
#define GCC_USB4_2_PHY_PCIE_PIPEGMUX_CLK_SRC 424
#define GCC_USB4_2_PHY_PIPEGMUX_CLK_SRC 425
#define GCC_USB4_2_PHY_RX0_CLK 426
#define GCC_USB4_2_PHY_RX0_CLK_SRC 427
#define GCC_USB4_2_PHY_RX1_CLK 428
#define GCC_USB4_2_PHY_RX1_CLK_SRC 429
#define GCC_USB4_2_PHY_SYS_CLK_SRC 430
#define GCC_USB4_2_PHY_SYS_PIPEGMUX_CLK_SRC 431
#define GCC_USB4_2_PHY_USB_PIPE_CLK 432
#define GCC_USB4_2_SB_IF_CLK 433
#define GCC_USB4_2_SB_IF_CLK_SRC 434
#define GCC_USB4_2_SYS_CLK 435
#define GCC_USB4_2_TMU_CLK 436
#define GCC_USB4_2_TMU_CLK_SRC 437
#define GCC_USB4_2_UC_HRR_CLK 438
#define GCC_VIDEO_AHB_CLK 439
#define GCC_VIDEO_AXI0_CLK 440
#define GCC_VIDEO_AXI0C_CLK 441
#define GCC_VIDEO_AXI1_CLK 442
#define GCC_VIDEO_XO_CLK 443
/* GCC power domains */
#define GCC_PCIE_0_TUNNEL_GDSC 0
#define GCC_PCIE_1_TUNNEL_GDSC 1
#define GCC_PCIE_2_TUNNEL_GDSC 2
#define GCC_PCIE_3A_GDSC 3
#define GCC_PCIE_3A_PHY_GDSC 4
#define GCC_PCIE_3B_GDSC 5
#define GCC_PCIE_3B_PHY_GDSC 6
#define GCC_PCIE_4_GDSC 7
#define GCC_PCIE_4_PHY_GDSC 8
#define GCC_PCIE_5_GDSC 9
#define GCC_PCIE_5_PHY_GDSC 10
#define GCC_PCIE_6_GDSC 11
#define GCC_PCIE_6_PHY_GDSC 12
#define GCC_UFS_PHY_GDSC 13
#define GCC_USB20_PRIM_GDSC 14
#define GCC_USB30_MP_GDSC 15
#define GCC_USB30_PRIM_GDSC 16
#define GCC_USB30_SEC_GDSC 17
#define GCC_USB30_TERT_GDSC 18
#define GCC_USB3_MP_SS0_PHY_GDSC 19
#define GCC_USB3_MP_SS1_PHY_GDSC 20
#define GCC_USB4_0_GDSC 21
#define GCC_USB4_1_GDSC 22
#define GCC_USB4_2_GDSC 23
#define GCC_USB_0_PHY_GDSC 24
#define GCC_USB_1_PHY_GDSC 25
#define GCC_USB_2_PHY_GDSC 26
/* GCC resets */
#define GCC_AV1E_BCR 0
#define GCC_CAMERA_BCR 1
#define GCC_DISPLAY_BCR 2
#define GCC_EVA_BCR 3
#define GCC_GPU_BCR 4
#define GCC_PCIE_0_LINK_DOWN_BCR 5
#define GCC_PCIE_0_NOCSR_COM_PHY_BCR 6
#define GCC_PCIE_0_PHY_BCR 7
#define GCC_PCIE_0_PHY_NOCSR_COM_PHY_BCR 8
#define GCC_PCIE_0_TUNNEL_BCR 9
#define GCC_PCIE_1_LINK_DOWN_BCR 10
#define GCC_PCIE_1_NOCSR_COM_PHY_BCR 11
#define GCC_PCIE_1_PHY_BCR 12
#define GCC_PCIE_1_PHY_NOCSR_COM_PHY_BCR 13
#define GCC_PCIE_1_TUNNEL_BCR 14
#define GCC_PCIE_2_LINK_DOWN_BCR 15
#define GCC_PCIE_2_NOCSR_COM_PHY_BCR 16
#define GCC_PCIE_2_PHY_BCR 17
#define GCC_PCIE_2_PHY_NOCSR_COM_PHY_BCR 18
#define GCC_PCIE_2_TUNNEL_BCR 19
#define GCC_PCIE_3A_BCR 20
#define GCC_PCIE_3A_LINK_DOWN_BCR 21
#define GCC_PCIE_3A_NOCSR_COM_PHY_BCR 22
#define GCC_PCIE_3A_PHY_BCR 23
#define GCC_PCIE_3A_PHY_NOCSR_COM_PHY_BCR 24
#define GCC_PCIE_3B_BCR 25
#define GCC_PCIE_3B_LINK_DOWN_BCR 26
#define GCC_PCIE_3B_NOCSR_COM_PHY_BCR 27
#define GCC_PCIE_3B_PHY_BCR 28
#define GCC_PCIE_3B_PHY_NOCSR_COM_PHY_BCR 29
#define GCC_PCIE_4_BCR 30
#define GCC_PCIE_4_LINK_DOWN_BCR 31
#define GCC_PCIE_4_NOCSR_COM_PHY_BCR 32
#define GCC_PCIE_4_PHY_BCR 33
#define GCC_PCIE_4_PHY_NOCSR_COM_PHY_BCR 34
#define GCC_PCIE_5_BCR 35
#define GCC_PCIE_5_LINK_DOWN_BCR 36
#define GCC_PCIE_5_NOCSR_COM_PHY_BCR 37
#define GCC_PCIE_5_PHY_BCR 38
#define GCC_PCIE_5_PHY_NOCSR_COM_PHY_BCR 39
#define GCC_PCIE_6_BCR 40
#define GCC_PCIE_6_LINK_DOWN_BCR 41
#define GCC_PCIE_6_NOCSR_COM_PHY_BCR 42
#define GCC_PCIE_6_PHY_BCR 43
#define GCC_PCIE_6_PHY_NOCSR_COM_PHY_BCR 44
#define GCC_PCIE_NOC_BCR 45
#define GCC_PCIE_PHY_BCR 46
#define GCC_PCIE_PHY_CFG_AHB_BCR 47
#define GCC_PCIE_PHY_COM_BCR 48
#define GCC_PCIE_RSCC_BCR 49
#define GCC_PDM_BCR 50
#define GCC_QUPV3_WRAPPER_0_BCR 51
#define GCC_QUPV3_WRAPPER_1_BCR 52
#define GCC_QUPV3_WRAPPER_2_BCR 53
#define GCC_QUPV3_WRAPPER_OOB_BCR 54
#define GCC_QUSB2PHY_HS0_MP_BCR 55
#define GCC_QUSB2PHY_HS1_MP_BCR 56
#define GCC_QUSB2PHY_PRIM_BCR 57
#define GCC_QUSB2PHY_SEC_BCR 58
#define GCC_QUSB2PHY_TERT_BCR 59
#define GCC_QUSB2PHY_USB20_HS_BCR 60
#define GCC_SDCC2_BCR 61
#define GCC_SDCC4_BCR 62
#define GCC_TCSR_PCIE_BCR 63
#define GCC_UFS_PHY_BCR 64
#define GCC_USB20_PRIM_BCR 65
#define GCC_USB30_MP_BCR 66
#define GCC_USB30_PRIM_BCR 67
#define GCC_USB30_SEC_BCR 68
#define GCC_USB30_TERT_BCR 69
#define GCC_USB3_MP_SS0_PHY_BCR 70
#define GCC_USB3_MP_SS1_PHY_BCR 71
#define GCC_USB3_PHY_PRIM_BCR 72
#define GCC_USB3_PHY_SEC_BCR 73
#define GCC_USB3_PHY_TERT_BCR 74
#define GCC_USB3_UNIPHY_MP0_BCR 75
#define GCC_USB3_UNIPHY_MP1_BCR 76
#define GCC_USB3PHY_PHY_PRIM_BCR 77
#define GCC_USB3PHY_PHY_SEC_BCR 78
#define GCC_USB3PHY_PHY_TERT_BCR 79
#define GCC_USB3UNIPHY_PHY_MP0_BCR 80
#define GCC_USB3UNIPHY_PHY_MP1_BCR 81
#define GCC_USB4_0_BCR 82
#define GCC_USB4_0_DP0_PHY_PRIM_BCR 83
#define GCC_USB4_1_BCR 84
#define GCC_USB4_2_BCR 85
#define GCC_USB_0_PHY_BCR 86
#define GCC_USB_1_PHY_BCR 87
#define GCC_USB_2_PHY_BCR 88
#define GCC_VIDEO_AXI0_CLK_ARES 89
#define GCC_VIDEO_AXI1_CLK_ARES 90
#define GCC_VIDEO_BCR 91
#endif

View File

@@ -0,0 +1,24 @@
/* 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_TCSR_CC_GLYMUR_H
#define _DT_BINDINGS_CLK_QCOM_TCSR_CC_GLYMUR_H
/* TCSR_CC clocks */
#define TCSR_EDP_CLKREF_EN 0
#define TCSR_PCIE_1_CLKREF_EN 1
#define TCSR_PCIE_2_CLKREF_EN 2
#define TCSR_PCIE_3_CLKREF_EN 3
#define TCSR_PCIE_4_CLKREF_EN 4
#define TCSR_USB2_1_CLKREF_EN 5
#define TCSR_USB2_2_CLKREF_EN 6
#define TCSR_USB2_3_CLKREF_EN 7
#define TCSR_USB2_4_CLKREF_EN 8
#define TCSR_USB3_0_CLKREF_EN 9
#define TCSR_USB3_1_CLKREF_EN 10
#define TCSR_USB4_1_CLKREF_EN 11
#define TCSR_USB4_2_CLKREF_EN 12
#endif

View File

@@ -21,4 +21,7 @@
#define MASTER_CNOC_USB 16
#define SLAVE_CNOC_USB 17
#define MASTER_CPU 0
#define SLAVE_L3 1
#endif /* INTERCONNECT_QCOM_IPQ5424_H */