Merge branches 'clk-devm', 'clk-samsung', 'clk-rockchip' and 'clk-qcom' into clk-next

* clk-devm:
  clk: provide devm_clk_get_optional_enabled_with_rate()
  clk: fixed-rate: add devm_clk_hw_register_fixed_rate_parent_data()

* clk-samsung:
  clk: samsung: add top clock support for ExynosAuto v920 SoC
  clk: samsung: clk-pll: Add support for pll_531x
  dt-bindings: clock: add ExynosAuto v920 SoC CMU bindings
  clk: samsung: exynos7885: Add USB related clocks to CMU_FSYS
  clk: samsung: clk-pll: Add support for pll_1418x
  clk: samsung: exynosautov9: add dpum clock support
  dt-bindings: clock: exynosautov9: add dpum clock
  clk: samsung: exynos7885: Add missing MUX clocks from PLLs in CMU_TOP
  clk: samsung: exynos7885: Update CLKS_NR_FSYS after bindings fix
  dt-bindings: clock: exynos7885: Add indices for USB clocks
  dt-bindings: clock: exynos7885: Add CMU_TOP PLL MUX indices
  dt-bindings: clock: exynos7885: Fix duplicated binding
  clk: samsung: exynos850: Add TMU clock
  dt-bindings: clock: exynos850: Add TMU clock

* clk-rockchip:
  dt-bindings: clock, reset: fix top-comment indentation rk3576 headers
  clk: rockchip: remove unused mclk_pdm0_p/pdm0_p definitions
  clk: rockchip: fix error for unknown clocks
  clk: rockchip: rk3588: drop unused code
  clk: rockchip: Add clock controller for the RK3576
  clk: rockchip: Add new pll type pll_rk3588_ddr
  dt-bindings: clock, reset: Add support for rk3576
  dt-bindings: clock: rockchip,rk3588-cru: drop unneeded assigned-clocks
  clk: rockchip: rk3588: Fix 32k clock name for pmu_24m_32k_100m_src_p
  dt-bindings: clock: rockchip: remove CLK_NR_CLKS and CLKPMU_NR_CLKS
  clk: rockchip: rk3399: Drop CLK_NR_CLKS CLKPMU_NR_CLKS usage
  clk: rockchip: rk3368: Drop CLK_NR_CLKS usage
  clk: rockchip: rk3328: Drop CLK_NR_CLKS usage
  clk: rockchip: rk3308: Drop CLK_NR_CLKS usage
  clk: rockchip: rk3288: Drop CLK_NR_CLKS usage
  clk: rockchip: rk3228: Drop CLK_NR_CLKS usage
  clk: rockchip: rk3036: Drop CLK_NR_CLKS usage
  clk: rockchip: px30: Drop CLK_NR_CLKS CLKPMU_NR_CLKS usage
  clk: rockchip: Set parent rate for DCLK_VOP clock on RK3228

* clk-qcom: (47 commits)
  clk: qcom: videocc-sm8550: Use HW_CTRL_TRIGGER flag for video GDSC's
  clk: qcom: dispcc-sm8250: use special function for Lucid 5LPE PLL
  clk: qcom: dispcc-sm8250: use CLK_SET_RATE_PARENT for branch clocks
  clk: qcom: ipq5332: Use icc-clk for enabling NoC related clocks
  clk: qcom: ipq5332: Register gcc_qdss_tsctr_clk_src
  dt-bindings: usb: qcom,dwc3: Update ipq5332 clock details
  dt-bindings: interconnect: Add Qualcomm IPQ5332 support
  clk: qcom: gcc-msm8998: Add Q6 BIMC and LPASS core, ADSP SMMU clocks
  dt-bindings: clock: gcc-msm8998: Add Q6 and LPASS clocks definitions
  clk: qcom: Fix SM_CAMCC_8150 dependencies
  clk: qcom: gcc-sm8150: De-register gcc_cpuss_ahb_clk_src
  clk: qcom: gcc-sc8180x: Fix the sdcc2 and sdcc4 clocks freq table
  clk: qcom: gcc-sc8180x: Add GPLL9 support
  dt-bindings: clock: qcom: Add GPLL9 support on gcc-sc8180x
  clk: qcom: gcc-sc8180x: Register QUPv3 RCGs for DFS on sc8180x
  clk: qcom: clk-rpmh: Fix overflow in BCM vote
  dt-bindings: clock: qcom: Drop required-opps in required on SM8650 camcc
  dt-bindings: clock: qcom: Drop required-opps in required on sm8650 videocc
  dt-bindings: clock: qcom,qcs404-turingcc: convert to dtschema
  dt-bindings: clock: Add x1e80100 LPASSCC reset controller
  ...
This commit is contained in:
Stephen Boyd 2024-09-21 14:11:05 -07:00
98 changed files with 12512 additions and 2493 deletions

View File

@ -21,6 +21,7 @@ properties:
- qcom,ipq6018-a53pll - qcom,ipq6018-a53pll
- qcom,ipq8074-a53pll - qcom,ipq8074-a53pll
- qcom,ipq9574-a73pll - qcom,ipq9574-a73pll
- qcom,msm8226-a7pll
- qcom,msm8916-a53pll - qcom,msm8916-a53pll
- qcom,msm8939-a53pll - qcom,msm8939-a53pll
@ -40,6 +41,9 @@ properties:
operating-points-v2: true operating-points-v2: true
opp-table:
type: object
required: required:
- compatible - compatible
- reg - reg

View File

@ -31,6 +31,8 @@ properties:
- description: USB PCIE wrapper pipe clock source - description: USB PCIE wrapper pipe clock source
'#power-domain-cells': false '#power-domain-cells': false
'#interconnect-cells':
const: 1
required: required:
- compatible - compatible

View File

@ -0,0 +1,47 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/clock/qcom,qcs404-turingcc.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Qualcomm Turing Clock & Reset Controller on QCS404
maintainers:
- Bjorn Andersson <andersson@kernel.org>
properties:
compatible:
const: qcom,qcs404-turingcc
reg:
maxItems: 1
clocks:
maxItems: 1
'#clock-cells':
const: 1
'#reset-cells':
const: 1
required:
- compatible
- reg
- clocks
- '#clock-cells'
- '#reset-cells'
additionalProperties: false
examples:
- |
#include <dt-bindings/clock/qcom,gcc-qcs404.h>
clock-controller@800000 {
compatible = "qcom,qcs404-turingcc";
reg = <0x00800000 0x30000>;
clocks = <&gcc GCC_CDSP_CFG_AHB_CLK>;
#clock-cells = <1>;
#reset-cells = <1>;
};

View File

@ -18,9 +18,16 @@ description: |
properties: properties:
compatible: compatible:
enum: oneOf:
- qcom,sc8280xp-lpassaudiocc - enum:
- qcom,sc8280xp-lpasscc - qcom,sc8280xp-lpassaudiocc
- qcom,sc8280xp-lpasscc
- items:
- const: qcom,x1e80100-lpassaudiocc
- const: qcom,sc8280xp-lpassaudiocc
- items:
- const: qcom,x1e80100-lpasscc
- const: qcom,sc8280xp-lpasscc
reg: reg:
maxItems: 1 maxItems: 1

View File

@ -0,0 +1,63 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/clock/qcom,sm4450-camcc.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Qualcomm Camera Clock & Reset Controller on SM4450
maintainers:
- Ajit Pandey <quic_ajipan@quicinc.com>
- Taniya Das <quic_tdas@quicinc.com>
description: |
Qualcomm camera clock control module provides the clocks, resets and power
domains on SM4450
See also:: include/dt-bindings/clock/qcom,sm4450-camcc.h
properties:
compatible:
const: qcom,sm4450-camcc
reg:
maxItems: 1
clocks:
items:
- description: Board XO source
- description: Camera AHB clock source from GCC
'#clock-cells':
const: 1
'#reset-cells':
const: 1
'#power-domain-cells':
const: 1
required:
- compatible
- reg
- clocks
- '#clock-cells'
- '#reset-cells'
- '#power-domain-cells'
additionalProperties: false
examples:
- |
#include <dt-bindings/clock/qcom,rpmh.h>
#include <dt-bindings/clock/qcom,sm4450-gcc.h>
clock-controller@ade0000 {
compatible = "qcom,sm4450-camcc";
reg = <0x0ade0000 0x20000>;
clocks = <&rpmhcc RPMH_CXO_CLK>,
<&gcc GCC_CAMERA_AHB_CLK>;
#clock-cells = <1>;
#reset-cells = <1>;
#power-domain-cells = <1>;
};
...

View File

@ -0,0 +1,71 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/clock/qcom,sm4450-dispcc.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Qualcomm Display Clock & Reset Controller on SM4450
maintainers:
- Ajit Pandey <quic_ajipan@quicinc.com>
- Taniya Das <quic_tdas@quicinc.com>
description: |
Qualcomm display clock control module provides the clocks, resets and power
domains on SM4450
See also:: include/dt-bindings/clock/qcom,sm4450-dispcc.h
properties:
compatible:
const: qcom,sm4450-dispcc
reg:
maxItems: 1
clocks:
items:
- description: Board XO source
- description: Board active XO source
- description: Display AHB clock source from GCC
- description: sleep clock source
- description: Byte clock from DSI PHY0
- description: Pixel clock from DSI PHY0
'#clock-cells':
const: 1
'#reset-cells':
const: 1
'#power-domain-cells':
const: 1
required:
- compatible
- reg
- clocks
- '#clock-cells'
- '#reset-cells'
- '#power-domain-cells'
additionalProperties: false
examples:
- |
#include <dt-bindings/clock/qcom,rpmh.h>
#include <dt-bindings/clock/qcom,sm4450-gcc.h>
clock-controller@af00000 {
compatible = "qcom,sm4450-dispcc";
reg = <0x0af00000 0x20000>;
clocks = <&rpmhcc RPMH_CXO_CLK>,
<&rpmhcc RPMH_CXO_CLK_A>,
<&gcc GCC_DISP_AHB_CLK>,
<&sleep_clk>,
<&dsi0_phy_pll_out_byteclk>,
<&dsi0_phy_pll_out_dsiclk>;
#clock-cells = <1>;
#reset-cells = <1>;
#power-domain-cells = <1>;
};
...

View File

@ -0,0 +1,77 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/clock/qcom,sm8150-camcc.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Qualcomm Camera Clock & Reset Controller on SM8150
maintainers:
- Satya Priya Kakitapalli <quic_skakitap@quicinc.com>
description: |
Qualcomm camera clock control module provides the clocks, resets and
power domains on SM8150.
See also:: include/dt-bindings/clock/qcom,sm8150-camcc.h
properties:
compatible:
const: qcom,sm8150-camcc
reg:
maxItems: 1
clocks:
items:
- description: Board XO source
- description: Camera AHB clock from GCC
power-domains:
maxItems: 1
description:
A phandle and PM domain specifier for the MMCX power domain.
required-opps:
maxItems: 1
description:
A phandle to an OPP node describing required MMCX performance point.
'#clock-cells':
const: 1
'#reset-cells':
const: 1
'#power-domain-cells':
const: 1
required:
- compatible
- reg
- clocks
- power-domains
- required-opps
- '#clock-cells'
- '#reset-cells'
- '#power-domain-cells'
additionalProperties: false
examples:
- |
#include <dt-bindings/clock/qcom,gcc-sm8150.h>
#include <dt-bindings/clock/qcom,rpmh.h>
#include <dt-bindings/power/qcom-rpmpd.h>
clock-controller@ad00000 {
compatible = "qcom,sm8150-camcc";
reg = <0x0ad00000 0x10000>;
clocks = <&rpmhcc RPMH_CXO_CLK>,
<&gcc GCC_CAMERA_AHB_CLK>;
power-domains = <&rpmhpd SM8150_MMCX>;
required-opps = <&rpmhpd_opp_low_svs>;
#clock-cells = <1>;
#reset-cells = <1>;
#power-domain-cells = <1>;
};
...

View File

@ -21,9 +21,6 @@ description: |
include/dt-bindings/clock/qcom,sm8650-camcc.h include/dt-bindings/clock/qcom,sm8650-camcc.h
include/dt-bindings/clock/qcom,x1e80100-camcc.h include/dt-bindings/clock/qcom,x1e80100-camcc.h
allOf:
- $ref: qcom,gcc.yaml#
properties: properties:
compatible: compatible:
enum: enum:
@ -57,7 +54,21 @@ required:
- compatible - compatible
- clocks - clocks
- power-domains - power-domains
- required-opps
allOf:
- $ref: qcom,gcc.yaml#
- if:
properties:
compatible:
contains:
enum:
- qcom,sc8280xp-camcc
- qcom,sm8450-camcc
- qcom,sm8550-camcc
- qcom,x1e80100-camcc
then:
required:
- required-opps
unevaluatedProperties: false unevaluatedProperties: false

View File

@ -14,6 +14,7 @@ description: |
domains on Qualcomm SoCs. domains on Qualcomm SoCs.
See also:: See also::
include/dt-bindings/clock/qcom,sm4450-gpucc.h
include/dt-bindings/clock/qcom,sm8450-gpucc.h include/dt-bindings/clock/qcom,sm8450-gpucc.h
include/dt-bindings/clock/qcom,sm8550-gpucc.h include/dt-bindings/clock/qcom,sm8550-gpucc.h
include/dt-bindings/reset/qcom,sm8450-gpucc.h include/dt-bindings/reset/qcom,sm8450-gpucc.h
@ -23,6 +24,7 @@ description: |
properties: properties:
compatible: compatible:
enum: enum:
- qcom,sm4450-gpucc
- qcom,sm8450-gpucc - qcom,sm8450-gpucc
- qcom,sm8550-gpucc - qcom,sm8550-gpucc
- qcom,sm8650-gpucc - qcom,sm8650-gpucc

View File

@ -44,11 +44,20 @@ required:
- compatible - compatible
- clocks - clocks
- power-domains - power-domains
- required-opps
- '#power-domain-cells' - '#power-domain-cells'
allOf: allOf:
- $ref: qcom,gcc.yaml# - $ref: qcom,gcc.yaml#
- if:
properties:
compatible:
contains:
enum:
- qcom,sm8450-videocc
- qcom,sm8550-videocc
then:
required:
- required-opps
unevaluatedProperties: false unevaluatedProperties: false

View File

@ -1,19 +0,0 @@
Qualcomm Turing Clock & Reset Controller Binding
------------------------------------------------
Required properties :
- compatible: shall contain "qcom,qcs404-turingcc".
- reg: shall contain base register location and length.
- clocks: ahb clock for the TuringCC
- #clock-cells: from common clock binding, shall contain 1.
- #reset-cells: from common reset binding, shall contain 1.
Example:
turingcc: clock-controller@800000 {
compatible = "qcom,qcs404-turingcc";
reg = <0x00800000 0x30000>;
clocks = <&gcc GCC_CDSP_CFG_AHB_CLK>;
#clock-cells = <1>;
#reset-cells = <1>;
};

View File

@ -0,0 +1,56 @@
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/clock/rockchip,rk3576-cru.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Rockchip rk3576 Family Clock and Reset Control Module
maintainers:
- Elaine Zhang <zhangqing@rock-chips.com>
- Heiko Stuebner <heiko@sntech.de>
- Detlev Casanova <detlev.casanova@collabora.com>
description:
The RK3576 clock controller generates the clock and also implements a reset
controller for SoC peripherals. For example it provides SCLK_UART2 and
PCLK_UART2, as well as SRST_P_UART2 and SRST_S_UART2 for the second UART
module.
properties:
compatible:
const: rockchip,rk3576-cru
reg:
maxItems: 1
"#clock-cells":
const: 1
"#reset-cells":
const: 1
clocks:
maxItems: 2
clock-names:
items:
- const: xin24m
- const: xin32k
required:
- compatible
- reg
- "#clock-cells"
- "#reset-cells"
additionalProperties: false
examples:
- |
clock-controller@27200000 {
compatible = "rockchip,rk3576-cru";
reg = <0xfd7c0000 0x5c000>;
#clock-cells = <1>;
#reset-cells = <1>;
};

View File

@ -42,10 +42,6 @@ properties:
- const: xin24m - const: xin24m
- const: xin32k - const: xin32k
assigned-clocks: true
assigned-clock-rates: true
rockchip,grf: rockchip,grf:
$ref: /schemas/types.yaml#/definitions/phandle $ref: /schemas/types.yaml#/definitions/phandle
description: > description: >

View File

@ -35,6 +35,7 @@ properties:
- samsung,exynosautov9-cmu-top - samsung,exynosautov9-cmu-top
- samsung,exynosautov9-cmu-busmc - samsung,exynosautov9-cmu-busmc
- samsung,exynosautov9-cmu-core - samsung,exynosautov9-cmu-core
- samsung,exynosautov9-cmu-dpum
- samsung,exynosautov9-cmu-fsys0 - samsung,exynosautov9-cmu-fsys0
- samsung,exynosautov9-cmu-fsys1 - samsung,exynosautov9-cmu-fsys1
- samsung,exynosautov9-cmu-fsys2 - samsung,exynosautov9-cmu-fsys2
@ -109,6 +110,24 @@ allOf:
- const: oscclk - const: oscclk
- const: dout_clkcmu_core_bus - const: dout_clkcmu_core_bus
- if:
properties:
compatible:
contains:
const: samsung,exynosautov9-cmu-dpum
then:
properties:
clocks:
items:
- description: External reference clock (26 MHz)
- description: DPU Main bus clock (from CMU_TOP)
clock-names:
items:
- const: oscclk
- const: bus
- if: - if:
properties: properties:
compatible: compatible:

View File

@ -0,0 +1,162 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/clock/samsung,exynosautov920-clock.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Samsung ExynosAuto v920 SoC clock controller
maintainers:
- Sunyeal Hong <sunyeal.hong@samsung.com>
- Chanwoo Choi <cw00.choi@samsung.com>
- Krzysztof Kozlowski <krzk@kernel.org>
- Sylwester Nawrocki <s.nawrocki@samsung.com>
description: |
ExynosAuto v920 clock controller is comprised of several CMU units, generating
clocks for different domains. Those CMU units are modeled as separate device
tree nodes, and might depend on each other. Root clocks in that clock tree are
two external clocks:: OSCCLK/XTCXO (38.4 MHz) and RTCCLK/XrtcXTI (32768 Hz).
The external OSCCLK must be defined as fixed-rate clock in dts.
CMU_TOP is a top-level CMU, where all base clocks are prepared using PLLs and
dividers; all other clocks of function blocks (other CMUs) are usually
derived from CMU_TOP.
Each clock is assigned an identifier and client nodes can use this identifier
to specify the clock which they consume. All clocks available for usage
in clock consumer nodes are defined as preprocessor macros in
'include/dt-bindings/clock/samsung,exynosautov920.h' header.
properties:
compatible:
enum:
- samsung,exynosautov920-cmu-top
- samsung,exynosautov920-cmu-peric0
- samsung,exynosautov920-cmu-peric1
- samsung,exynosautov920-cmu-misc
- samsung,exynosautov920-cmu-hsi0
- samsung,exynosautov920-cmu-hsi1
clocks:
minItems: 1
maxItems: 4
clock-names:
minItems: 1
maxItems: 4
"#clock-cells":
const: 1
reg:
maxItems: 1
allOf:
- if:
properties:
compatible:
contains:
const: samsung,exynosautov920-cmu-top
then:
properties:
clocks:
items:
- description: External reference clock (38.4 MHz)
clock-names:
items:
- const: oscclk
- if:
properties:
compatible:
contains:
enum:
- samsung,exynosautov920-cmu-peric0
- samsung,exynosautov920-cmu-peric1
then:
properties:
clocks:
items:
- description: External reference clock (38.4 MHz)
- description: CMU_PERICn NOC clock (from CMU_TOP)
- description: CMU_PERICn IP clock (from CMU_TOP)
clock-names:
items:
- const: oscclk
- const: noc
- const: ip
- if:
properties:
compatible:
enum:
- samsung,exynosautov920-cmu-misc
- samsung,exynosautov920-cmu-hsi0
then:
properties:
clocks:
items:
- description: External reference clock (38.4 MHz)
- description: CMU_MISC/CMU_HSI0 NOC clock (from CMU_TOP)
clock-names:
items:
- const: oscclk
- const: noc
- if:
properties:
compatible:
contains:
const: samsung,exynosautov920-cmu-hsi1
then:
properties:
clocks:
items:
- description: External reference clock (38.4 MHz)
- description: CMU_HSI1 NOC clock (from CMU_TOP)
- description: CMU_HSI1 USBDRD clock (from CMU_TOP)
- description: CMU_HSI1 MMC_CARD clock (from CMU_TOP)
clock-names:
items:
- const: oscclk
- const: noc
- const: usbdrd
- const: mmc_card
required:
- compatible
- "#clock-cells"
- clocks
- clock-names
- reg
additionalProperties: false
examples:
# Clock controller node for CMU_PERIC0
- |
#include <dt-bindings/clock/samsung,exynosautov920.h>
cmu_peric0: clock-controller@10800000 {
compatible = "samsung,exynosautov920-cmu-peric0";
reg = <0x10800000 0x8000>;
#clock-cells = <1>;
clocks = <&xtcxo>,
<&cmu_top DOUT_CLKCMU_PERIC0_NOC>,
<&cmu_top DOUT_CLKCMU_PERIC0_IP>;
clock-names = "oscclk",
"noc",
"ip";
};
...

View File

@ -164,6 +164,7 @@ allOf:
contains: contains:
enum: enum:
- qcom,ipq4019-dwc3 - qcom,ipq4019-dwc3
- qcom,ipq5332-dwc3
then: then:
properties: properties:
clocks: clocks:
@ -267,7 +268,6 @@ allOf:
contains: contains:
enum: enum:
- qcom,ipq5018-dwc3 - qcom,ipq5018-dwc3
- qcom,ipq5332-dwc3
- qcom,msm8994-dwc3 - qcom,msm8994-dwc3
- qcom,qcs404-dwc3 - qcom,qcs404-dwc3
then: then:

View File

@ -99,6 +99,34 @@ struct clk *devm_clk_get_optional_enabled(struct device *dev, const char *id)
} }
EXPORT_SYMBOL_GPL(devm_clk_get_optional_enabled); EXPORT_SYMBOL_GPL(devm_clk_get_optional_enabled);
struct clk *devm_clk_get_optional_enabled_with_rate(struct device *dev,
const char *id,
unsigned long rate)
{
struct clk *clk;
int ret;
clk = __devm_clk_get(dev, id, clk_get_optional, NULL,
clk_disable_unprepare);
if (IS_ERR(clk))
return ERR_CAST(clk);
ret = clk_set_rate(clk, rate);
if (ret)
goto out_put_clk;
ret = clk_prepare_enable(clk);
if (ret)
goto out_put_clk;
return clk;
out_put_clk:
devm_clk_put(dev, clk);
return ERR_PTR(ret);
}
EXPORT_SYMBOL_GPL(devm_clk_get_optional_enabled_with_rate);
struct clk_bulk_devres { struct clk_bulk_devres {
struct clk_bulk_data *clks; struct clk_bulk_data *clks;
int num_clks; int num_clks;

View File

@ -810,6 +810,14 @@ config SDX_GCC_75
Say Y if you want to use peripheral devices such as UART, Say Y if you want to use peripheral devices such as UART,
SPI, I2C, USB, SD/eMMC, PCIe etc. SPI, I2C, USB, SD/eMMC, PCIe etc.
config SM_CAMCC_4450
tristate "SM4450 Camera Clock Controller"
depends on ARM64 || COMPILE_TEST
select SM_GCC_4450
help
Support for the camera clock controller on SM4450 devices.
Say Y if you want to support camera devices and camera functionality.
config SM_CAMCC_6350 config SM_CAMCC_6350
tristate "SM6350 Camera Clock Controller" tristate "SM6350 Camera Clock Controller"
depends on ARM64 || COMPILE_TEST depends on ARM64 || COMPILE_TEST
@ -826,6 +834,16 @@ config SM_CAMCC_7150
Support for the camera clock controller on SM7150 devices. Support for the camera clock controller on SM7150 devices.
Say Y if you want to support camera devices and camera functionality. Say Y if you want to support camera devices and camera functionality.
config SM_CAMCC_8150
tristate "SM8150 Camera Clock Controller"
depends on ARM64 || COMPILE_TEST
select SM_GCC_8150
help
Support for the camera clock controller on Qualcomm Technologies, Inc
SM8150 devices.
Say Y if you want to support camera devices and functionality such as
capturing pictures.
config SM_CAMCC_8250 config SM_CAMCC_8250
tristate "SM8250 Camera Clock Controller" tristate "SM8250 Camera Clock Controller"
depends on ARM64 || COMPILE_TEST depends on ARM64 || COMPILE_TEST
@ -858,6 +876,16 @@ config SM_CAMCC_8650
Support for the camera clock controller on SM8650 devices. Support for the camera clock controller on SM8650 devices.
Say Y if you want to support camera devices and camera functionality. Say Y if you want to support camera devices and camera functionality.
config SM_DISPCC_4450
tristate "SM4450 Display Clock Controller"
depends on ARM64 || COMPILE_TEST
depends on SM_GCC_4450
help
Support for the display clock controller on Qualcomm Technologies, Inc
SM4450 devices.
Say Y if you want to support display devices and functionality such as
splash screen
config SM_DISPCC_6115 config SM_DISPCC_6115
tristate "SM6115 Display Clock Controller" tristate "SM6115 Display Clock Controller"
depends on ARM64 || COMPILE_TEST depends on ARM64 || COMPILE_TEST
@ -931,20 +959,10 @@ config SM_DISPCC_8450
config SM_DISPCC_8550 config SM_DISPCC_8550
tristate "SM8550 Display Clock Controller" tristate "SM8550 Display Clock Controller"
depends on ARM64 || COMPILE_TEST depends on ARM64 || COMPILE_TEST
depends on SM_GCC_8550 depends on SM_GCC_8550 || SM_GCC_8650
help help
Support for the display clock controller on Qualcomm Technologies, Inc Support for the display clock controller on Qualcomm Technologies, Inc
SM8550 devices. SM8550 or SM8650 devices.
Say Y if you want to support display devices and functionality such as
splash screen.
config SM_DISPCC_8650
tristate "SM8650 Display Clock Controller"
depends on ARM64 || COMPILE_TEST
select SM_GCC_8650
help
Support for the display clock controller on Qualcomm Technologies, Inc
SM8650 devices.
Say Y if you want to support display devices and functionality such as Say Y if you want to support display devices and functionality such as
splash screen. splash screen.
@ -1054,6 +1072,15 @@ config SM_GCC_8650
Say Y if you want to use peripheral devices such as UART, Say Y if you want to use peripheral devices such as UART,
SPI, I2C, USB, SD/UFS, PCIe etc. SPI, I2C, USB, SD/UFS, PCIe etc.
config SM_GPUCC_4450
tristate "SM4450 Graphics Clock Controller"
depends on ARM64 || COMPILE_TEST
select SM_GCC_4450
help
Support for the graphics clock controller on SM4450 devices.
Say Y if you want to support graphics controller devices and
functionality such as 3D graphics.
config SM_GPUCC_6115 config SM_GPUCC_6115
tristate "SM6115 Graphics Clock Controller" tristate "SM6115 Graphics Clock Controller"
select SM_GCC_6115 select SM_GCC_6115

View File

@ -107,12 +107,15 @@ obj-$(CONFIG_SDM_VIDEOCC_845) += videocc-sdm845.o
obj-$(CONFIG_SDX_GCC_55) += gcc-sdx55.o obj-$(CONFIG_SDX_GCC_55) += gcc-sdx55.o
obj-$(CONFIG_SDX_GCC_65) += gcc-sdx65.o obj-$(CONFIG_SDX_GCC_65) += gcc-sdx65.o
obj-$(CONFIG_SDX_GCC_75) += gcc-sdx75.o obj-$(CONFIG_SDX_GCC_75) += gcc-sdx75.o
obj-$(CONFIG_SM_CAMCC_4450) += camcc-sm4450.o
obj-$(CONFIG_SM_CAMCC_6350) += camcc-sm6350.o obj-$(CONFIG_SM_CAMCC_6350) += camcc-sm6350.o
obj-$(CONFIG_SM_CAMCC_7150) += camcc-sm7150.o obj-$(CONFIG_SM_CAMCC_7150) += camcc-sm7150.o
obj-$(CONFIG_SM_CAMCC_8150) += camcc-sm8150.o
obj-$(CONFIG_SM_CAMCC_8250) += camcc-sm8250.o obj-$(CONFIG_SM_CAMCC_8250) += camcc-sm8250.o
obj-$(CONFIG_SM_CAMCC_8450) += camcc-sm8450.o obj-$(CONFIG_SM_CAMCC_8450) += camcc-sm8450.o
obj-$(CONFIG_SM_CAMCC_8550) += camcc-sm8550.o obj-$(CONFIG_SM_CAMCC_8550) += camcc-sm8550.o
obj-$(CONFIG_SM_CAMCC_8650) += camcc-sm8650.o obj-$(CONFIG_SM_CAMCC_8650) += camcc-sm8650.o
obj-$(CONFIG_SM_DISPCC_4450) += dispcc-sm4450.o
obj-$(CONFIG_SM_DISPCC_6115) += dispcc-sm6115.o obj-$(CONFIG_SM_DISPCC_6115) += dispcc-sm6115.o
obj-$(CONFIG_SM_DISPCC_6125) += dispcc-sm6125.o obj-$(CONFIG_SM_DISPCC_6125) += dispcc-sm6125.o
obj-$(CONFIG_SM_DISPCC_6350) += dispcc-sm6350.o obj-$(CONFIG_SM_DISPCC_6350) += dispcc-sm6350.o
@ -121,7 +124,6 @@ obj-$(CONFIG_SM_DISPCC_7150) += dispcc-sm7150.o
obj-$(CONFIG_SM_DISPCC_8250) += dispcc-sm8250.o obj-$(CONFIG_SM_DISPCC_8250) += dispcc-sm8250.o
obj-$(CONFIG_SM_DISPCC_8450) += dispcc-sm8450.o obj-$(CONFIG_SM_DISPCC_8450) += dispcc-sm8450.o
obj-$(CONFIG_SM_DISPCC_8550) += dispcc-sm8550.o obj-$(CONFIG_SM_DISPCC_8550) += dispcc-sm8550.o
obj-$(CONFIG_SM_DISPCC_8650) += dispcc-sm8650.o
obj-$(CONFIG_SM_GCC_4450) += gcc-sm4450.o obj-$(CONFIG_SM_GCC_4450) += gcc-sm4450.o
obj-$(CONFIG_SM_GCC_6115) += gcc-sm6115.o obj-$(CONFIG_SM_GCC_6115) += gcc-sm6115.o
obj-$(CONFIG_SM_GCC_6125) += gcc-sm6125.o obj-$(CONFIG_SM_GCC_6125) += gcc-sm6125.o
@ -134,6 +136,7 @@ obj-$(CONFIG_SM_GCC_8350) += gcc-sm8350.o
obj-$(CONFIG_SM_GCC_8450) += gcc-sm8450.o obj-$(CONFIG_SM_GCC_8450) += gcc-sm8450.o
obj-$(CONFIG_SM_GCC_8550) += gcc-sm8550.o obj-$(CONFIG_SM_GCC_8550) += gcc-sm8550.o
obj-$(CONFIG_SM_GCC_8650) += gcc-sm8650.o obj-$(CONFIG_SM_GCC_8650) += gcc-sm8650.o
obj-$(CONFIG_SM_GPUCC_4450) += gpucc-sm4450.o
obj-$(CONFIG_SM_GPUCC_6115) += gpucc-sm6115.o obj-$(CONFIG_SM_GPUCC_6115) += gpucc-sm6115.o
obj-$(CONFIG_SM_GPUCC_6125) += gpucc-sm6125.o obj-$(CONFIG_SM_GPUCC_6125) += gpucc-sm6125.o
obj-$(CONFIG_SM_GPUCC_6350) += gpucc-sm6350.o obj-$(CONFIG_SM_GPUCC_6350) += gpucc-sm6350.o

View File

@ -151,6 +151,7 @@ static int qcom_a53pll_probe(struct platform_device *pdev)
} }
static const struct of_device_id qcom_a53pll_match_table[] = { static const struct of_device_id qcom_a53pll_match_table[] = {
{ .compatible = "qcom,msm8226-a7pll" },
{ .compatible = "qcom,msm8916-a53pll" }, { .compatible = "qcom,msm8916-a53pll" },
{ .compatible = "qcom,msm8939-a53pll" }, { .compatible = "qcom,msm8939-a53pll" },
{ } { }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-2.0 // SPDX-License-Identifier: GPL-2.0
/* /*
* Copyright (c) 2015, 2018, The Linux Foundation. All rights reserved. * Copyright (c) 2015, 2018, The Linux Foundation. All rights reserved.
* Copyright (c) 2021, 2023, Qualcomm Innovation Center, Inc. All rights reserved. * Copyright (c) 2021, 2023-2024, Qualcomm Innovation Center, Inc. All rights reserved.
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
@ -1712,7 +1712,7 @@ static int __alpha_pll_trion_set_rate(struct clk_hw *hw, unsigned long rate,
if (ret < 0) if (ret < 0)
return ret; return ret;
regmap_write(pll->clkr.regmap, PLL_L_VAL(pll), l); regmap_update_bits(pll->clkr.regmap, PLL_L_VAL(pll), LUCID_EVO_PLL_L_VAL_MASK, l);
regmap_write(pll->clkr.regmap, PLL_ALPHA_VAL(pll), a); regmap_write(pll->clkr.regmap, PLL_ALPHA_VAL(pll), a);
/* Latch the PLL input */ /* Latch the PLL input */
@ -1831,6 +1831,58 @@ const struct clk_ops clk_alpha_pll_agera_ops = {
}; };
EXPORT_SYMBOL_GPL(clk_alpha_pll_agera_ops); EXPORT_SYMBOL_GPL(clk_alpha_pll_agera_ops);
/**
* clk_lucid_5lpe_pll_configure - configure the lucid 5lpe pll
*
* @pll: clk alpha pll
* @regmap: register map
* @config: configuration to apply for pll
*/
void clk_lucid_5lpe_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap,
const struct alpha_pll_config *config)
{
/*
* If the bootloader left the PLL enabled it's likely that there are
* RCGs that will lock up if we disable the PLL below.
*/
if (trion_pll_is_enabled(pll, regmap)) {
pr_debug("Lucid 5LPE PLL is already enabled, skipping configuration\n");
return;
}
clk_alpha_pll_write_config(regmap, PLL_L_VAL(pll), config->l);
regmap_write(regmap, PLL_CAL_L_VAL(pll), TRION_PLL_CAL_VAL);
clk_alpha_pll_write_config(regmap, PLL_ALPHA_VAL(pll), config->alpha);
clk_alpha_pll_write_config(regmap, PLL_CONFIG_CTL(pll),
config->config_ctl_val);
clk_alpha_pll_write_config(regmap, PLL_CONFIG_CTL_U(pll),
config->config_ctl_hi_val);
clk_alpha_pll_write_config(regmap, PLL_CONFIG_CTL_U1(pll),
config->config_ctl_hi1_val);
clk_alpha_pll_write_config(regmap, PLL_USER_CTL(pll),
config->user_ctl_val);
clk_alpha_pll_write_config(regmap, PLL_USER_CTL_U(pll),
config->user_ctl_hi_val);
clk_alpha_pll_write_config(regmap, PLL_USER_CTL_U1(pll),
config->user_ctl_hi1_val);
clk_alpha_pll_write_config(regmap, PLL_TEST_CTL(pll),
config->test_ctl_val);
clk_alpha_pll_write_config(regmap, PLL_TEST_CTL_U(pll),
config->test_ctl_hi_val);
clk_alpha_pll_write_config(regmap, PLL_TEST_CTL_U1(pll),
config->test_ctl_hi1_val);
/* Disable PLL output */
regmap_update_bits(regmap, PLL_MODE(pll), PLL_OUTCTRL, 0);
/* Set operation mode to OFF */
regmap_write(regmap, PLL_OPMODE(pll), PLL_STANDBY);
/* Place the PLL in STANDBY mode */
regmap_update_bits(regmap, PLL_MODE(pll), PLL_RESET_N, PLL_RESET_N);
}
EXPORT_SYMBOL_GPL(clk_lucid_5lpe_pll_configure);
static int alpha_pll_lucid_5lpe_enable(struct clk_hw *hw) static int alpha_pll_lucid_5lpe_enable(struct clk_hw *hw)
{ {
struct clk_alpha_pll *pll = to_clk_alpha_pll(hw); struct clk_alpha_pll *pll = to_clk_alpha_pll(hw);
@ -2657,3 +2709,33 @@ const struct clk_ops clk_alpha_pll_stromer_plus_ops = {
.set_rate = clk_alpha_pll_stromer_plus_set_rate, .set_rate = clk_alpha_pll_stromer_plus_set_rate,
}; };
EXPORT_SYMBOL_GPL(clk_alpha_pll_stromer_plus_ops); EXPORT_SYMBOL_GPL(clk_alpha_pll_stromer_plus_ops);
void clk_regera_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap,
const struct alpha_pll_config *config)
{
clk_alpha_pll_write_config(regmap, PLL_L_VAL(pll), config->l);
clk_alpha_pll_write_config(regmap, PLL_ALPHA_VAL(pll), config->alpha);
clk_alpha_pll_write_config(regmap, PLL_CONFIG_CTL(pll), config->config_ctl_val);
clk_alpha_pll_write_config(regmap, PLL_CONFIG_CTL_U(pll), config->config_ctl_hi_val);
clk_alpha_pll_write_config(regmap, PLL_CONFIG_CTL_U1(pll), config->config_ctl_hi1_val);
clk_alpha_pll_write_config(regmap, PLL_USER_CTL(pll), config->user_ctl_val);
clk_alpha_pll_write_config(regmap, PLL_USER_CTL_U(pll), config->user_ctl_hi_val);
clk_alpha_pll_write_config(regmap, PLL_USER_CTL_U1(pll), config->user_ctl_hi1_val);
clk_alpha_pll_write_config(regmap, PLL_TEST_CTL(pll), config->test_ctl_val);
clk_alpha_pll_write_config(regmap, PLL_TEST_CTL_U(pll), config->test_ctl_hi_val);
clk_alpha_pll_write_config(regmap, PLL_TEST_CTL_U1(pll), config->test_ctl_hi1_val);
/* Set operation mode to STANDBY */
regmap_write(regmap, PLL_OPMODE(pll), PLL_STANDBY);
}
EXPORT_SYMBOL_GPL(clk_regera_pll_configure);
const struct clk_ops clk_alpha_pll_regera_ops = {
.enable = clk_zonda_pll_enable,
.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,
.set_rate = clk_zonda_pll_set_rate,
};
EXPORT_SYMBOL_GPL(clk_alpha_pll_regera_ops);

View File

@ -23,6 +23,7 @@ enum {
CLK_ALPHA_PLL_TYPE_LUCID = CLK_ALPHA_PLL_TYPE_TRION, CLK_ALPHA_PLL_TYPE_LUCID = CLK_ALPHA_PLL_TYPE_TRION,
CLK_ALPHA_PLL_TYPE_AGERA, CLK_ALPHA_PLL_TYPE_AGERA,
CLK_ALPHA_PLL_TYPE_ZONDA, CLK_ALPHA_PLL_TYPE_ZONDA,
CLK_ALPHA_PLL_TYPE_REGERA = CLK_ALPHA_PLL_TYPE_ZONDA,
CLK_ALPHA_PLL_TYPE_ZONDA_OLE, CLK_ALPHA_PLL_TYPE_ZONDA_OLE,
CLK_ALPHA_PLL_TYPE_LUCID_EVO, CLK_ALPHA_PLL_TYPE_LUCID_EVO,
CLK_ALPHA_PLL_TYPE_LUCID_OLE, CLK_ALPHA_PLL_TYPE_LUCID_OLE,
@ -193,6 +194,8 @@ extern const struct clk_ops clk_alpha_pll_postdiv_lucid_evo_ops;
extern const struct clk_ops clk_alpha_pll_rivian_evo_ops; extern const struct clk_ops clk_alpha_pll_rivian_evo_ops;
#define clk_alpha_pll_postdiv_rivian_evo_ops clk_alpha_pll_postdiv_fabia_ops #define clk_alpha_pll_postdiv_rivian_evo_ops clk_alpha_pll_postdiv_fabia_ops
extern const struct clk_ops clk_alpha_pll_regera_ops;
void clk_alpha_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap, void clk_alpha_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap,
const struct alpha_pll_config *config); const struct alpha_pll_config *config);
void clk_huayra_2290_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap, void clk_huayra_2290_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap,
@ -208,6 +211,8 @@ void clk_agera_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap,
void clk_zonda_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap, void clk_zonda_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap,
const struct alpha_pll_config *config); const struct alpha_pll_config *config);
void clk_lucid_5lpe_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap,
const struct alpha_pll_config *config);
void clk_lucid_evo_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap, void clk_lucid_evo_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap,
const struct alpha_pll_config *config); const struct alpha_pll_config *config);
void clk_lucid_ole_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap, void clk_lucid_ole_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap,
@ -216,5 +221,7 @@ void clk_rivian_evo_pll_configure(struct clk_alpha_pll *pll, struct regmap *regm
const struct alpha_pll_config *config); const struct alpha_pll_config *config);
void clk_stromer_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap, void clk_stromer_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap,
const struct alpha_pll_config *config); const struct alpha_pll_config *config);
void clk_regera_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap,
const struct alpha_pll_config *config);
#endif #endif

View File

@ -263,6 +263,8 @@ static int clk_rpmh_bcm_send_cmd(struct clk_rpmh *c, bool enable)
cmd_state = 0; cmd_state = 0;
} }
cmd_state = min(cmd_state, BCM_TCS_CMD_VOTE_MASK);
if (c->last_sent_aggr_state != cmd_state) { if (c->last_sent_aggr_state != cmd_state) {
cmd.addr = c->res_addr; cmd.addr = c->res_addr;
cmd.data = BCM_TCS_CMD(1, enable, 0, cmd_state); cmd.data = BCM_TCS_CMD(1, enable, 0, cmd_state);

View File

@ -0,0 +1,770 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved.
*/
#include <linux/clk-provider.h>
#include <linux/module.h>
#include <linux/mod_devicetable.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>
#include <dt-bindings/clock/qcom,sm4450-dispcc.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 "common.h"
#include "gdsc.h"
#include "reset.h"
enum {
DT_BI_TCXO,
DT_BI_TCXO_AO,
DT_AHB_CLK,
DT_SLEEP_CLK,
DT_DSI0_PHY_PLL_OUT_BYTECLK,
DT_DSI0_PHY_PLL_OUT_DSICLK,
};
enum {
P_BI_TCXO,
P_DISP_CC_PLL0_OUT_MAIN,
P_DISP_CC_PLL1_OUT_EVEN,
P_DISP_CC_PLL1_OUT_MAIN,
P_DSI0_PHY_PLL_OUT_BYTECLK,
P_DSI0_PHY_PLL_OUT_DSICLK,
P_SLEEP_CLK,
};
static const struct pll_vco lucid_evo_vco[] = {
{ 249600000, 2020000000, 0 },
};
/* 600.0 MHz Configuration */
static const struct alpha_pll_config disp_cc_pll0_config = {
.l = 0x1f,
.alpha = 0x4000,
.config_ctl_val = 0x20485699,
.config_ctl_hi_val = 0x00182261,
.config_ctl_hi1_val = 0x32aa299c,
.user_ctl_val = 0x00000000,
.user_ctl_hi_val = 0x00000805,
};
static struct clk_alpha_pll disp_cc_pll0 = {
.offset = 0x0,
.vco_table = lucid_evo_vco,
.num_vco = ARRAY_SIZE(lucid_evo_vco),
.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
.clkr = {
.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_pll0",
.parent_data = &(const struct clk_parent_data) {
.index = DT_BI_TCXO,
},
.num_parents = 1,
.ops = &clk_alpha_pll_lucid_evo_ops,
},
},
};
static struct clk_alpha_pll disp_cc_pll1 = {
.offset = 0x1000,
.vco_table = lucid_evo_vco,
.num_vco = ARRAY_SIZE(lucid_evo_vco),
.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
.clkr = {
.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_pll1",
.parent_data = &(const struct clk_parent_data) {
.index = DT_BI_TCXO,
},
.num_parents = 1,
.ops = &clk_alpha_pll_lucid_evo_ops,
},
},
};
static const struct parent_map disp_cc_parent_map_0[] = {
{ P_BI_TCXO, 0 },
{ P_DSI0_PHY_PLL_OUT_DSICLK, 1 },
{ P_DSI0_PHY_PLL_OUT_BYTECLK, 2 },
};
static const struct clk_parent_data disp_cc_parent_data_0[] = {
{ .index = DT_BI_TCXO },
{ .index = DT_DSI0_PHY_PLL_OUT_DSICLK },
{ .index = DT_DSI0_PHY_PLL_OUT_BYTECLK },
};
static const struct parent_map disp_cc_parent_map_1[] = {
{ P_BI_TCXO, 0 },
{ P_DISP_CC_PLL0_OUT_MAIN, 1 },
{ P_DISP_CC_PLL1_OUT_MAIN, 4 },
{ P_DISP_CC_PLL1_OUT_EVEN, 6 },
};
static const struct clk_parent_data disp_cc_parent_data_1[] = {
{ .index = DT_BI_TCXO },
{ .hw = &disp_cc_pll0.clkr.hw },
{ .hw = &disp_cc_pll1.clkr.hw },
{ .hw = &disp_cc_pll1.clkr.hw },
};
static const struct parent_map disp_cc_parent_map_2[] = {
{ P_BI_TCXO, 0 },
};
static const struct clk_parent_data disp_cc_parent_data_2[] = {
{ .index = DT_BI_TCXO },
};
static const struct clk_parent_data disp_cc_parent_data_2_ao[] = {
{ .index = DT_BI_TCXO_AO },
};
static const struct parent_map disp_cc_parent_map_3[] = {
{ P_BI_TCXO, 0 },
{ P_DISP_CC_PLL1_OUT_MAIN, 4 },
{ P_DISP_CC_PLL1_OUT_EVEN, 6 },
};
static const struct clk_parent_data disp_cc_parent_data_3[] = {
{ .index = DT_BI_TCXO },
{ .hw = &disp_cc_pll1.clkr.hw },
{ .hw = &disp_cc_pll1.clkr.hw },
};
static const struct parent_map disp_cc_parent_map_4[] = {
{ P_BI_TCXO, 0 },
{ P_DSI0_PHY_PLL_OUT_BYTECLK, 2 },
};
static const struct clk_parent_data disp_cc_parent_data_4[] = {
{ .index = DT_BI_TCXO },
{ .index = DT_DSI0_PHY_PLL_OUT_BYTECLK },
};
static const struct parent_map disp_cc_parent_map_5[] = {
{ P_SLEEP_CLK, 0 },
};
static const struct clk_parent_data disp_cc_parent_data_5[] = {
{ .index = DT_SLEEP_CLK },
};
static const struct freq_tbl ftbl_disp_cc_mdss_ahb_clk_src[] = {
F(19200000, P_BI_TCXO, 1, 0, 0),
F(37500000, P_DISP_CC_PLL1_OUT_MAIN, 16, 0, 0),
F(75000000, P_DISP_CC_PLL1_OUT_MAIN, 8, 0, 0),
{ }
};
static struct clk_rcg2 disp_cc_mdss_ahb_clk_src = {
.cmd_rcgr = 0x82a4,
.mnd_width = 0,
.hid_width = 5,
.parent_map = disp_cc_parent_map_3,
.freq_tbl = ftbl_disp_cc_mdss_ahb_clk_src,
.clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_ahb_clk_src",
.parent_data = disp_cc_parent_data_3,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_shared_ops,
},
};
static const struct freq_tbl ftbl_disp_cc_mdss_byte0_clk_src[] = {
F(19200000, P_BI_TCXO, 1, 0, 0),
{ }
};
static struct clk_rcg2 disp_cc_mdss_byte0_clk_src = {
.cmd_rcgr = 0x80f8,
.mnd_width = 0,
.hid_width = 5,
.parent_map = disp_cc_parent_map_0,
.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
.clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_byte0_clk_src",
.parent_data = disp_cc_parent_data_0,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_byte2_ops,
},
};
static struct clk_rcg2 disp_cc_mdss_esc0_clk_src = {
.cmd_rcgr = 0x8114,
.mnd_width = 0,
.hid_width = 5,
.parent_map = disp_cc_parent_map_4,
.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
.clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_esc0_clk_src",
.parent_data = disp_cc_parent_data_4,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_4),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_shared_ops,
},
};
static const struct freq_tbl ftbl_disp_cc_mdss_mdp_clk_src[] = {
F(200000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
F(325000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
F(380000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
F(506000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
F(608000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
{ }
};
static struct clk_rcg2 disp_cc_mdss_mdp_clk_src = {
.cmd_rcgr = 0x80b0,
.mnd_width = 0,
.hid_width = 5,
.parent_map = disp_cc_parent_map_1,
.freq_tbl = ftbl_disp_cc_mdss_mdp_clk_src,
.clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_mdp_clk_src",
.parent_data = disp_cc_parent_data_1,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_shared_ops,
},
};
static struct clk_rcg2 disp_cc_mdss_pclk0_clk_src = {
.cmd_rcgr = 0x8098,
.mnd_width = 8,
.hid_width = 5,
.parent_map = disp_cc_parent_map_0,
.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
.clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_pclk0_clk_src",
.parent_data = disp_cc_parent_data_0,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_pixel_ops,
},
};
static const struct freq_tbl ftbl_disp_cc_mdss_rot_clk_src[] = {
F(200000000, P_DISP_CC_PLL1_OUT_MAIN, 3, 0, 0),
F(300000000, P_DISP_CC_PLL1_OUT_MAIN, 2, 0, 0),
{ }
};
static struct clk_rcg2 disp_cc_mdss_rot_clk_src = {
.cmd_rcgr = 0x80c8,
.mnd_width = 0,
.hid_width = 5,
.parent_map = disp_cc_parent_map_1,
.freq_tbl = ftbl_disp_cc_mdss_rot_clk_src,
.clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_rot_clk_src",
.parent_data = disp_cc_parent_data_1,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_shared_ops,
},
};
static struct clk_rcg2 disp_cc_mdss_vsync_clk_src = {
.cmd_rcgr = 0x80e0,
.mnd_width = 0,
.hid_width = 5,
.parent_map = disp_cc_parent_map_2,
.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
.clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_vsync_clk_src",
.parent_data = disp_cc_parent_data_2,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_2),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_shared_ops,
},
};
static const struct freq_tbl ftbl_disp_cc_sleep_clk_src[] = {
F(32000, P_SLEEP_CLK, 1, 0, 0),
{ }
};
static struct clk_rcg2 disp_cc_sleep_clk_src = {
.cmd_rcgr = 0xe058,
.mnd_width = 0,
.hid_width = 5,
.parent_map = disp_cc_parent_map_5,
.freq_tbl = ftbl_disp_cc_sleep_clk_src,
.clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_sleep_clk_src",
.parent_data = disp_cc_parent_data_5,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_5),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_shared_ops,
},
};
static struct clk_rcg2 disp_cc_xo_clk_src = {
.cmd_rcgr = 0xe03c,
.mnd_width = 0,
.hid_width = 5,
.parent_map = disp_cc_parent_map_2,
.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
.clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_xo_clk_src",
.parent_data = disp_cc_parent_data_2_ao,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_2_ao),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_shared_ops,
},
};
static struct clk_regmap_div disp_cc_mdss_byte0_div_clk_src = {
.reg = 0x8110,
.shift = 0,
.width = 4,
.clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_byte0_div_clk_src",
.parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_byte0_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_regmap_div_ops,
},
};
static struct clk_branch disp_cc_mdss_ahb1_clk = {
.halt_reg = 0xa020,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0xa020,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_ahb1_clk",
.parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_ahb_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch disp_cc_mdss_ahb_clk = {
.halt_reg = 0x8094,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x8094,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_ahb_clk",
.parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_ahb_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch disp_cc_mdss_byte0_clk = {
.halt_reg = 0x8024,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x8024,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_byte0_clk",
.parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_byte0_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch disp_cc_mdss_byte0_intf_clk = {
.halt_reg = 0x8028,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x8028,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_byte0_intf_clk",
.parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_byte0_div_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch disp_cc_mdss_esc0_clk = {
.halt_reg = 0x802c,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x802c,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_esc0_clk",
.parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_esc0_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch disp_cc_mdss_mdp1_clk = {
.halt_reg = 0xa004,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0xa004,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_mdp1_clk",
.parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_mdp_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch disp_cc_mdss_mdp_clk = {
.halt_reg = 0x8008,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x8008,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_mdp_clk",
.parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_mdp_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch disp_cc_mdss_mdp_lut1_clk = {
.halt_reg = 0xa014,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0xa014,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_mdp_lut1_clk",
.parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_mdp_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch disp_cc_mdss_mdp_lut_clk = {
.halt_reg = 0x8018,
.halt_check = BRANCH_HALT_VOTED,
.clkr = {
.enable_reg = 0x8018,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_mdp_lut_clk",
.parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_mdp_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch disp_cc_mdss_non_gdsc_ahb_clk = {
.halt_reg = 0xc004,
.halt_check = BRANCH_HALT_VOTED,
.clkr = {
.enable_reg = 0xc004,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_non_gdsc_ahb_clk",
.parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_ahb_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch disp_cc_mdss_pclk0_clk = {
.halt_reg = 0x8004,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x8004,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_pclk0_clk",
.parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_pclk0_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch disp_cc_mdss_rot1_clk = {
.halt_reg = 0xa00c,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0xa00c,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_rot1_clk",
.parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_rot_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch disp_cc_mdss_rot_clk = {
.halt_reg = 0x8010,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x8010,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_rot_clk",
.parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_rot_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch disp_cc_mdss_rscc_ahb_clk = {
.halt_reg = 0xc00c,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0xc00c,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_rscc_ahb_clk",
.parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_ahb_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch disp_cc_mdss_rscc_vsync_clk = {
.halt_reg = 0xc008,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0xc008,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_rscc_vsync_clk",
.parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_vsync_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch disp_cc_mdss_vsync1_clk = {
.halt_reg = 0xa01c,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0xa01c,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_vsync1_clk",
.parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_vsync_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch disp_cc_mdss_vsync_clk = {
.halt_reg = 0x8020,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x8020,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_vsync_clk",
.parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_vsync_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct gdsc disp_cc_mdss_core_gdsc = {
.gdscr = 0x9000,
.en_rest_wait_val = 0x2,
.en_few_wait_val = 0x2,
.clk_dis_wait_val = 0xf,
.pd = {
.name = "disp_cc_mdss_core_gdsc",
},
.pwrsts = PWRSTS_OFF_ON,
.flags = HW_CTRL | POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
};
static struct gdsc disp_cc_mdss_core_int2_gdsc = {
.gdscr = 0xb000,
.en_rest_wait_val = 0x2,
.en_few_wait_val = 0x2,
.clk_dis_wait_val = 0xf,
.pd = {
.name = "disp_cc_mdss_core_int2_gdsc",
},
.pwrsts = PWRSTS_OFF_ON,
.flags = HW_CTRL | POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
};
static struct clk_regmap *disp_cc_sm4450_clocks[] = {
[DISP_CC_MDSS_AHB1_CLK] = &disp_cc_mdss_ahb1_clk.clkr,
[DISP_CC_MDSS_AHB_CLK] = &disp_cc_mdss_ahb_clk.clkr,
[DISP_CC_MDSS_AHB_CLK_SRC] = &disp_cc_mdss_ahb_clk_src.clkr,
[DISP_CC_MDSS_BYTE0_CLK] = &disp_cc_mdss_byte0_clk.clkr,
[DISP_CC_MDSS_BYTE0_CLK_SRC] = &disp_cc_mdss_byte0_clk_src.clkr,
[DISP_CC_MDSS_BYTE0_DIV_CLK_SRC] = &disp_cc_mdss_byte0_div_clk_src.clkr,
[DISP_CC_MDSS_BYTE0_INTF_CLK] = &disp_cc_mdss_byte0_intf_clk.clkr,
[DISP_CC_MDSS_ESC0_CLK] = &disp_cc_mdss_esc0_clk.clkr,
[DISP_CC_MDSS_ESC0_CLK_SRC] = &disp_cc_mdss_esc0_clk_src.clkr,
[DISP_CC_MDSS_MDP1_CLK] = &disp_cc_mdss_mdp1_clk.clkr,
[DISP_CC_MDSS_MDP_CLK] = &disp_cc_mdss_mdp_clk.clkr,
[DISP_CC_MDSS_MDP_CLK_SRC] = &disp_cc_mdss_mdp_clk_src.clkr,
[DISP_CC_MDSS_MDP_LUT1_CLK] = &disp_cc_mdss_mdp_lut1_clk.clkr,
[DISP_CC_MDSS_MDP_LUT_CLK] = &disp_cc_mdss_mdp_lut_clk.clkr,
[DISP_CC_MDSS_NON_GDSC_AHB_CLK] = &disp_cc_mdss_non_gdsc_ahb_clk.clkr,
[DISP_CC_MDSS_PCLK0_CLK] = &disp_cc_mdss_pclk0_clk.clkr,
[DISP_CC_MDSS_PCLK0_CLK_SRC] = &disp_cc_mdss_pclk0_clk_src.clkr,
[DISP_CC_MDSS_ROT1_CLK] = &disp_cc_mdss_rot1_clk.clkr,
[DISP_CC_MDSS_ROT_CLK] = &disp_cc_mdss_rot_clk.clkr,
[DISP_CC_MDSS_ROT_CLK_SRC] = &disp_cc_mdss_rot_clk_src.clkr,
[DISP_CC_MDSS_RSCC_AHB_CLK] = &disp_cc_mdss_rscc_ahb_clk.clkr,
[DISP_CC_MDSS_RSCC_VSYNC_CLK] = &disp_cc_mdss_rscc_vsync_clk.clkr,
[DISP_CC_MDSS_VSYNC1_CLK] = &disp_cc_mdss_vsync1_clk.clkr,
[DISP_CC_MDSS_VSYNC_CLK] = &disp_cc_mdss_vsync_clk.clkr,
[DISP_CC_MDSS_VSYNC_CLK_SRC] = &disp_cc_mdss_vsync_clk_src.clkr,
[DISP_CC_PLL0] = &disp_cc_pll0.clkr,
[DISP_CC_PLL1] = &disp_cc_pll1.clkr,
[DISP_CC_SLEEP_CLK_SRC] = &disp_cc_sleep_clk_src.clkr,
[DISP_CC_XO_CLK_SRC] = &disp_cc_xo_clk_src.clkr,
};
static struct gdsc *disp_cc_sm4450_gdscs[] = {
[DISP_CC_MDSS_CORE_GDSC] = &disp_cc_mdss_core_gdsc,
[DISP_CC_MDSS_CORE_INT2_GDSC] = &disp_cc_mdss_core_int2_gdsc,
};
static const struct qcom_reset_map disp_cc_sm4450_resets[] = {
[DISP_CC_MDSS_CORE_BCR] = { 0x8000 },
[DISP_CC_MDSS_CORE_INT2_BCR] = { 0xa000 },
[DISP_CC_MDSS_RSCC_BCR] = { 0xc000 },
};
static const struct regmap_config disp_cc_sm4450_regmap_config = {
.reg_bits = 32,
.reg_stride = 4,
.val_bits = 32,
.max_register = 0x11008,
.fast_io = true,
};
static struct qcom_cc_desc disp_cc_sm4450_desc = {
.config = &disp_cc_sm4450_regmap_config,
.clks = disp_cc_sm4450_clocks,
.num_clks = ARRAY_SIZE(disp_cc_sm4450_clocks),
.resets = disp_cc_sm4450_resets,
.num_resets = ARRAY_SIZE(disp_cc_sm4450_resets),
.gdscs = disp_cc_sm4450_gdscs,
.num_gdscs = ARRAY_SIZE(disp_cc_sm4450_gdscs),
};
static const struct of_device_id disp_cc_sm4450_match_table[] = {
{ .compatible = "qcom,sm4450-dispcc" },
{ }
};
MODULE_DEVICE_TABLE(of, disp_cc_sm4450_match_table);
static int disp_cc_sm4450_probe(struct platform_device *pdev)
{
struct regmap *regmap;
regmap = qcom_cc_map(pdev, &disp_cc_sm4450_desc);
if (IS_ERR(regmap))
return PTR_ERR(regmap);
clk_lucid_evo_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config);
clk_lucid_evo_pll_configure(&disp_cc_pll1, regmap, &disp_cc_pll0_config);
/* Keep some clocks always enabled */
qcom_branch_set_clk_en(regmap, 0xe070); /* DISP_CC_SLEEP_CLK */
qcom_branch_set_clk_en(regmap, 0xe054); /* DISP_CC_XO_CLK */
return qcom_cc_really_probe(&pdev->dev, &disp_cc_sm4450_desc, regmap);
}
static struct platform_driver disp_cc_sm4450_driver = {
.probe = disp_cc_sm4450_probe,
.driver = {
.name = "dispcc-sm4450",
.of_match_table = disp_cc_sm4450_match_table,
},
};
module_platform_driver(disp_cc_sm4450_driver);
MODULE_DESCRIPTION("QTI DISPCC SM4450 Driver");
MODULE_LICENSE("GPL");

View File

@ -849,6 +849,7 @@ static struct clk_branch disp_cc_mdss_dp_link1_intf_clk = {
&disp_cc_mdss_dp_link1_div_clk_src.clkr.hw, &disp_cc_mdss_dp_link1_div_clk_src.clkr.hw,
}, },
.num_parents = 1, .num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops, .ops = &clk_branch2_ops,
}, },
}, },
@ -884,6 +885,7 @@ static struct clk_branch disp_cc_mdss_dp_link_intf_clk = {
&disp_cc_mdss_dp_link_div_clk_src.clkr.hw, &disp_cc_mdss_dp_link_div_clk_src.clkr.hw,
}, },
.num_parents = 1, .num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops, .ops = &clk_branch2_ops,
}, },
}, },
@ -1009,6 +1011,7 @@ static struct clk_branch disp_cc_mdss_mdp_lut_clk = {
&disp_cc_mdss_mdp_clk_src.clkr.hw, &disp_cc_mdss_mdp_clk_src.clkr.hw,
}, },
.num_parents = 1, .num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops, .ops = &clk_branch2_ops,
}, },
}, },
@ -1357,8 +1360,13 @@ static int disp_cc_sm8250_probe(struct platform_device *pdev)
disp_cc_sm8250_clocks[DISP_CC_MDSS_EDP_GTC_CLK_SRC] = NULL; disp_cc_sm8250_clocks[DISP_CC_MDSS_EDP_GTC_CLK_SRC] = NULL;
} }
clk_lucid_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config); if (of_device_is_compatible(pdev->dev.of_node, "qcom,sm8350-dispcc")) {
clk_lucid_pll_configure(&disp_cc_pll1, regmap, &disp_cc_pll1_config); clk_lucid_5lpe_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config);
clk_lucid_5lpe_pll_configure(&disp_cc_pll1, regmap, &disp_cc_pll1_config);
} else {
clk_lucid_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config);
clk_lucid_pll_configure(&disp_cc_pll1, regmap, &disp_cc_pll1_config);
}
/* Enable clock gating for MDP clocks */ /* Enable clock gating for MDP clocks */
regmap_update_bits(regmap, 0x8000, 0x10, 0x10); regmap_update_bits(regmap, 0x8000, 0x10, 0x10);

View File

@ -71,7 +71,7 @@ enum {
P_SLEEP_CLK, P_SLEEP_CLK,
}; };
static const struct pll_vco lucid_ole_vco[] = { static struct pll_vco lucid_ole_vco[] = {
{ 249600000, 2000000000, 0 }, { 249600000, 2000000000, 0 },
}; };
@ -95,7 +95,7 @@ static struct clk_alpha_pll disp_cc_pll0 = {
.num_vco = ARRAY_SIZE(lucid_ole_vco), .num_vco = ARRAY_SIZE(lucid_ole_vco),
.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE], .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
.clkr = { .clkr = {
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_pll0", .name = "disp_cc_pll0",
.parent_data = &(const struct clk_parent_data) { .parent_data = &(const struct clk_parent_data) {
.index = DT_BI_TCXO, .index = DT_BI_TCXO,
@ -126,7 +126,7 @@ static struct clk_alpha_pll disp_cc_pll1 = {
.num_vco = ARRAY_SIZE(lucid_ole_vco), .num_vco = ARRAY_SIZE(lucid_ole_vco),
.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE], .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
.clkr = { .clkr = {
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_pll1", .name = "disp_cc_pll1",
.parent_data = &(const struct clk_parent_data) { .parent_data = &(const struct clk_parent_data) {
.index = DT_BI_TCXO, .index = DT_BI_TCXO,
@ -196,7 +196,7 @@ static const struct clk_parent_data disp_cc_parent_data_3[] = {
static const struct parent_map disp_cc_parent_map_4[] = { static const struct parent_map disp_cc_parent_map_4[] = {
{ P_BI_TCXO, 0 }, { P_BI_TCXO, 0 },
{ P_DP0_PHY_PLL_LINK_CLK, 1 }, { P_DP0_PHY_PLL_LINK_CLK, 1 },
{ P_DP1_PHY_PLL_VCO_DIV_CLK, 2 }, { P_DP0_PHY_PLL_VCO_DIV_CLK, 2 },
{ P_DP3_PHY_PLL_VCO_DIV_CLK, 3 }, { P_DP3_PHY_PLL_VCO_DIV_CLK, 3 },
{ P_DP1_PHY_PLL_VCO_DIV_CLK, 4 }, { P_DP1_PHY_PLL_VCO_DIV_CLK, 4 },
{ P_DP2_PHY_PLL_VCO_DIV_CLK, 6 }, { P_DP2_PHY_PLL_VCO_DIV_CLK, 6 },
@ -213,7 +213,7 @@ static const struct clk_parent_data disp_cc_parent_data_4[] = {
static const struct parent_map disp_cc_parent_map_5[] = { static const struct parent_map disp_cc_parent_map_5[] = {
{ P_BI_TCXO, 0 }, { P_BI_TCXO, 0 },
{ P_DSI0_PHY_PLL_OUT_BYTECLK, 4 }, { P_DSI0_PHY_PLL_OUT_BYTECLK, 2 },
{ P_DSI1_PHY_PLL_OUT_BYTECLK, 4 }, { P_DSI1_PHY_PLL_OUT_BYTECLK, 4 },
}; };
@ -286,7 +286,7 @@ static struct clk_rcg2 disp_cc_mdss_ahb_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_6, .parent_map = disp_cc_parent_map_6,
.freq_tbl = ftbl_disp_cc_mdss_ahb_clk_src, .freq_tbl = ftbl_disp_cc_mdss_ahb_clk_src,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_ahb_clk_src", .name = "disp_cc_mdss_ahb_clk_src",
.parent_data = disp_cc_parent_data_6, .parent_data = disp_cc_parent_data_6,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_6), .num_parents = ARRAY_SIZE(disp_cc_parent_data_6),
@ -306,7 +306,7 @@ static struct clk_rcg2 disp_cc_mdss_byte0_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_2, .parent_map = disp_cc_parent_map_2,
.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src, .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_byte0_clk_src", .name = "disp_cc_mdss_byte0_clk_src",
.parent_data = disp_cc_parent_data_2, .parent_data = disp_cc_parent_data_2,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_2), .num_parents = ARRAY_SIZE(disp_cc_parent_data_2),
@ -321,7 +321,7 @@ static struct clk_rcg2 disp_cc_mdss_byte1_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_2, .parent_map = disp_cc_parent_map_2,
.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src, .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_byte1_clk_src", .name = "disp_cc_mdss_byte1_clk_src",
.parent_data = disp_cc_parent_data_2, .parent_data = disp_cc_parent_data_2,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_2), .num_parents = ARRAY_SIZE(disp_cc_parent_data_2),
@ -336,7 +336,7 @@ static struct clk_rcg2 disp_cc_mdss_dptx0_aux_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_0, .parent_map = disp_cc_parent_map_0,
.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src, .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx0_aux_clk_src", .name = "disp_cc_mdss_dptx0_aux_clk_src",
.parent_data = disp_cc_parent_data_0, .parent_data = disp_cc_parent_data_0,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_0), .num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
@ -350,7 +350,7 @@ static struct clk_rcg2 disp_cc_mdss_dptx0_link_clk_src = {
.mnd_width = 0, .mnd_width = 0,
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_7, .parent_map = disp_cc_parent_map_7,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx0_link_clk_src", .name = "disp_cc_mdss_dptx0_link_clk_src",
.parent_data = disp_cc_parent_data_7, .parent_data = disp_cc_parent_data_7,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_7), .num_parents = ARRAY_SIZE(disp_cc_parent_data_7),
@ -365,7 +365,7 @@ static struct clk_rcg2 disp_cc_mdss_dptx0_pixel0_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_4, .parent_map = disp_cc_parent_map_4,
.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src, .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx0_pixel0_clk_src", .name = "disp_cc_mdss_dptx0_pixel0_clk_src",
.parent_data = disp_cc_parent_data_4, .parent_data = disp_cc_parent_data_4,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_4), .num_parents = ARRAY_SIZE(disp_cc_parent_data_4),
@ -380,7 +380,7 @@ static struct clk_rcg2 disp_cc_mdss_dptx0_pixel1_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_4, .parent_map = disp_cc_parent_map_4,
.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src, .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx0_pixel1_clk_src", .name = "disp_cc_mdss_dptx0_pixel1_clk_src",
.parent_data = disp_cc_parent_data_4, .parent_data = disp_cc_parent_data_4,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_4), .num_parents = ARRAY_SIZE(disp_cc_parent_data_4),
@ -395,12 +395,12 @@ static struct clk_rcg2 disp_cc_mdss_dptx1_aux_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_0, .parent_map = disp_cc_parent_map_0,
.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src, .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx1_aux_clk_src", .name = "disp_cc_mdss_dptx1_aux_clk_src",
.parent_data = disp_cc_parent_data_0, .parent_data = disp_cc_parent_data_0,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_0), .num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
.flags = CLK_SET_RATE_PARENT, .flags = CLK_SET_RATE_PARENT,
.ops = &clk_dp_ops, .ops = &clk_rcg2_ops,
}, },
}; };
@ -409,7 +409,7 @@ static struct clk_rcg2 disp_cc_mdss_dptx1_link_clk_src = {
.mnd_width = 0, .mnd_width = 0,
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_3, .parent_map = disp_cc_parent_map_3,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx1_link_clk_src", .name = "disp_cc_mdss_dptx1_link_clk_src",
.parent_data = disp_cc_parent_data_3, .parent_data = disp_cc_parent_data_3,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_3), .num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
@ -424,7 +424,7 @@ static struct clk_rcg2 disp_cc_mdss_dptx1_pixel0_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_1, .parent_map = disp_cc_parent_map_1,
.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src, .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx1_pixel0_clk_src", .name = "disp_cc_mdss_dptx1_pixel0_clk_src",
.parent_data = disp_cc_parent_data_1, .parent_data = disp_cc_parent_data_1,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_1), .num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
@ -439,7 +439,7 @@ static struct clk_rcg2 disp_cc_mdss_dptx1_pixel1_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_1, .parent_map = disp_cc_parent_map_1,
.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src, .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx1_pixel1_clk_src", .name = "disp_cc_mdss_dptx1_pixel1_clk_src",
.parent_data = disp_cc_parent_data_1, .parent_data = disp_cc_parent_data_1,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_1), .num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
@ -454,7 +454,7 @@ static struct clk_rcg2 disp_cc_mdss_dptx2_aux_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_0, .parent_map = disp_cc_parent_map_0,
.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src, .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx2_aux_clk_src", .name = "disp_cc_mdss_dptx2_aux_clk_src",
.parent_data = disp_cc_parent_data_0, .parent_data = disp_cc_parent_data_0,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_0), .num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
@ -468,7 +468,7 @@ static struct clk_rcg2 disp_cc_mdss_dptx2_link_clk_src = {
.mnd_width = 0, .mnd_width = 0,
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_3, .parent_map = disp_cc_parent_map_3,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx2_link_clk_src", .name = "disp_cc_mdss_dptx2_link_clk_src",
.parent_data = disp_cc_parent_data_3, .parent_data = disp_cc_parent_data_3,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_3), .num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
@ -483,7 +483,7 @@ static struct clk_rcg2 disp_cc_mdss_dptx2_pixel0_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_1, .parent_map = disp_cc_parent_map_1,
.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src, .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx2_pixel0_clk_src", .name = "disp_cc_mdss_dptx2_pixel0_clk_src",
.parent_data = disp_cc_parent_data_1, .parent_data = disp_cc_parent_data_1,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_1), .num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
@ -498,7 +498,7 @@ static struct clk_rcg2 disp_cc_mdss_dptx2_pixel1_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_1, .parent_map = disp_cc_parent_map_1,
.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src, .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx2_pixel1_clk_src", .name = "disp_cc_mdss_dptx2_pixel1_clk_src",
.parent_data = disp_cc_parent_data_1, .parent_data = disp_cc_parent_data_1,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_1), .num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
@ -513,7 +513,7 @@ static struct clk_rcg2 disp_cc_mdss_dptx3_aux_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_0, .parent_map = disp_cc_parent_map_0,
.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src, .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx3_aux_clk_src", .name = "disp_cc_mdss_dptx3_aux_clk_src",
.parent_data = disp_cc_parent_data_0, .parent_data = disp_cc_parent_data_0,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_0), .num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
@ -527,7 +527,7 @@ static struct clk_rcg2 disp_cc_mdss_dptx3_link_clk_src = {
.mnd_width = 0, .mnd_width = 0,
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_3, .parent_map = disp_cc_parent_map_3,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx3_link_clk_src", .name = "disp_cc_mdss_dptx3_link_clk_src",
.parent_data = disp_cc_parent_data_3, .parent_data = disp_cc_parent_data_3,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_3), .num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
@ -542,7 +542,7 @@ static struct clk_rcg2 disp_cc_mdss_dptx3_pixel0_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_1, .parent_map = disp_cc_parent_map_1,
.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src, .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx3_pixel0_clk_src", .name = "disp_cc_mdss_dptx3_pixel0_clk_src",
.parent_data = disp_cc_parent_data_1, .parent_data = disp_cc_parent_data_1,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_1), .num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
@ -557,12 +557,12 @@ static struct clk_rcg2 disp_cc_mdss_esc0_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_5, .parent_map = disp_cc_parent_map_5,
.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src, .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_esc0_clk_src", .name = "disp_cc_mdss_esc0_clk_src",
.parent_data = disp_cc_parent_data_5, .parent_data = disp_cc_parent_data_5,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_5), .num_parents = ARRAY_SIZE(disp_cc_parent_data_5),
.flags = CLK_SET_RATE_PARENT, .flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops, .ops = &clk_rcg2_shared_ops,
}, },
}; };
@ -572,12 +572,12 @@ static struct clk_rcg2 disp_cc_mdss_esc1_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_5, .parent_map = disp_cc_parent_map_5,
.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src, .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_esc1_clk_src", .name = "disp_cc_mdss_esc1_clk_src",
.parent_data = disp_cc_parent_data_5, .parent_data = disp_cc_parent_data_5,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_5), .num_parents = ARRAY_SIZE(disp_cc_parent_data_5),
.flags = CLK_SET_RATE_PARENT, .flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops, .ops = &clk_rcg2_shared_ops,
}, },
}; };
@ -594,13 +594,25 @@ static const struct freq_tbl ftbl_disp_cc_mdss_mdp_clk_src[] = {
{ } { }
}; };
static const struct freq_tbl ftbl_disp_cc_mdss_mdp_clk_src_sm8650[] = {
F(19200000, P_BI_TCXO, 1, 0, 0),
F(85714286, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
F(100000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
F(150000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
F(200000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
F(325000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
F(402000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
F(514000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
{ }
};
static struct clk_rcg2 disp_cc_mdss_mdp_clk_src = { static struct clk_rcg2 disp_cc_mdss_mdp_clk_src = {
.cmd_rcgr = 0x80d8, .cmd_rcgr = 0x80d8,
.mnd_width = 0, .mnd_width = 0,
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_8, .parent_map = disp_cc_parent_map_8,
.freq_tbl = ftbl_disp_cc_mdss_mdp_clk_src, .freq_tbl = ftbl_disp_cc_mdss_mdp_clk_src,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_mdp_clk_src", .name = "disp_cc_mdss_mdp_clk_src",
.parent_data = disp_cc_parent_data_8, .parent_data = disp_cc_parent_data_8,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_8), .num_parents = ARRAY_SIZE(disp_cc_parent_data_8),
@ -615,7 +627,7 @@ static struct clk_rcg2 disp_cc_mdss_pclk0_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_2, .parent_map = disp_cc_parent_map_2,
.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src, .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_pclk0_clk_src", .name = "disp_cc_mdss_pclk0_clk_src",
.parent_data = disp_cc_parent_data_2, .parent_data = disp_cc_parent_data_2,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_2), .num_parents = ARRAY_SIZE(disp_cc_parent_data_2),
@ -630,7 +642,7 @@ static struct clk_rcg2 disp_cc_mdss_pclk1_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_2, .parent_map = disp_cc_parent_map_2,
.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src, .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_pclk1_clk_src", .name = "disp_cc_mdss_pclk1_clk_src",
.parent_data = disp_cc_parent_data_2, .parent_data = disp_cc_parent_data_2,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_2), .num_parents = ARRAY_SIZE(disp_cc_parent_data_2),
@ -645,7 +657,7 @@ static struct clk_rcg2 disp_cc_mdss_vsync_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_0, .parent_map = disp_cc_parent_map_0,
.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src, .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_vsync_clk_src", .name = "disp_cc_mdss_vsync_clk_src",
.parent_data = disp_cc_parent_data_0, .parent_data = disp_cc_parent_data_0,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_0), .num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
@ -665,7 +677,7 @@ static struct clk_rcg2 disp_cc_sleep_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_9, .parent_map = disp_cc_parent_map_9,
.freq_tbl = ftbl_disp_cc_sleep_clk_src, .freq_tbl = ftbl_disp_cc_sleep_clk_src,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_sleep_clk_src", .name = "disp_cc_sleep_clk_src",
.parent_data = disp_cc_parent_data_9, .parent_data = disp_cc_parent_data_9,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_9), .num_parents = ARRAY_SIZE(disp_cc_parent_data_9),
@ -680,7 +692,7 @@ static struct clk_rcg2 disp_cc_xo_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_0, .parent_map = disp_cc_parent_map_0,
.freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src, .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_xo_clk_src", .name = "disp_cc_xo_clk_src",
.parent_data = disp_cc_parent_data_0_ao, .parent_data = disp_cc_parent_data_0_ao,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_0_ao), .num_parents = ARRAY_SIZE(disp_cc_parent_data_0_ao),
@ -693,7 +705,7 @@ static struct clk_regmap_div disp_cc_mdss_byte0_div_clk_src = {
.reg = 0x8120, .reg = 0x8120,
.shift = 0, .shift = 0,
.width = 4, .width = 4,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_byte0_div_clk_src", .name = "disp_cc_mdss_byte0_div_clk_src",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_byte0_clk_src.clkr.hw, &disp_cc_mdss_byte0_clk_src.clkr.hw,
@ -707,7 +719,7 @@ static struct clk_regmap_div disp_cc_mdss_byte1_div_clk_src = {
.reg = 0x813c, .reg = 0x813c,
.shift = 0, .shift = 0,
.width = 4, .width = 4,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_byte1_div_clk_src", .name = "disp_cc_mdss_byte1_div_clk_src",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_byte1_clk_src.clkr.hw, &disp_cc_mdss_byte1_clk_src.clkr.hw,
@ -721,7 +733,7 @@ static struct clk_regmap_div disp_cc_mdss_dptx0_link_div_clk_src = {
.reg = 0x8188, .reg = 0x8188,
.shift = 0, .shift = 0,
.width = 4, .width = 4,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx0_link_div_clk_src", .name = "disp_cc_mdss_dptx0_link_div_clk_src",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx0_link_clk_src.clkr.hw, &disp_cc_mdss_dptx0_link_clk_src.clkr.hw,
@ -736,7 +748,7 @@ static struct clk_regmap_div disp_cc_mdss_dptx1_link_div_clk_src = {
.reg = 0x821c, .reg = 0x821c,
.shift = 0, .shift = 0,
.width = 4, .width = 4,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx1_link_div_clk_src", .name = "disp_cc_mdss_dptx1_link_div_clk_src",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx1_link_clk_src.clkr.hw, &disp_cc_mdss_dptx1_link_clk_src.clkr.hw,
@ -751,7 +763,7 @@ static struct clk_regmap_div disp_cc_mdss_dptx2_link_div_clk_src = {
.reg = 0x8250, .reg = 0x8250,
.shift = 0, .shift = 0,
.width = 4, .width = 4,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx2_link_div_clk_src", .name = "disp_cc_mdss_dptx2_link_div_clk_src",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx2_link_clk_src.clkr.hw, &disp_cc_mdss_dptx2_link_clk_src.clkr.hw,
@ -766,7 +778,7 @@ static struct clk_regmap_div disp_cc_mdss_dptx3_link_div_clk_src = {
.reg = 0x82cc, .reg = 0x82cc,
.shift = 0, .shift = 0,
.width = 4, .width = 4,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx3_link_div_clk_src", .name = "disp_cc_mdss_dptx3_link_div_clk_src",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx3_link_clk_src.clkr.hw, &disp_cc_mdss_dptx3_link_clk_src.clkr.hw,
@ -783,7 +795,7 @@ static struct clk_branch disp_cc_mdss_accu_clk = {
.clkr = { .clkr = {
.enable_reg = 0xe058, .enable_reg = 0xe058,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data){ .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_accu_clk", .name = "disp_cc_mdss_accu_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_xo_clk_src.clkr.hw, &disp_cc_xo_clk_src.clkr.hw,
@ -801,7 +813,7 @@ static struct clk_branch disp_cc_mdss_ahb1_clk = {
.clkr = { .clkr = {
.enable_reg = 0xa020, .enable_reg = 0xa020,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_ahb1_clk", .name = "disp_cc_mdss_ahb1_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_ahb_clk_src.clkr.hw, &disp_cc_mdss_ahb_clk_src.clkr.hw,
@ -819,7 +831,7 @@ static struct clk_branch disp_cc_mdss_ahb_clk = {
.clkr = { .clkr = {
.enable_reg = 0x80a4, .enable_reg = 0x80a4,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_ahb_clk", .name = "disp_cc_mdss_ahb_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_ahb_clk_src.clkr.hw, &disp_cc_mdss_ahb_clk_src.clkr.hw,
@ -837,7 +849,7 @@ static struct clk_branch disp_cc_mdss_byte0_clk = {
.clkr = { .clkr = {
.enable_reg = 0x8028, .enable_reg = 0x8028,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_byte0_clk", .name = "disp_cc_mdss_byte0_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_byte0_clk_src.clkr.hw, &disp_cc_mdss_byte0_clk_src.clkr.hw,
@ -855,7 +867,7 @@ static struct clk_branch disp_cc_mdss_byte0_intf_clk = {
.clkr = { .clkr = {
.enable_reg = 0x802c, .enable_reg = 0x802c,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_byte0_intf_clk", .name = "disp_cc_mdss_byte0_intf_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_byte0_div_clk_src.clkr.hw, &disp_cc_mdss_byte0_div_clk_src.clkr.hw,
@ -873,7 +885,7 @@ static struct clk_branch disp_cc_mdss_byte1_clk = {
.clkr = { .clkr = {
.enable_reg = 0x8030, .enable_reg = 0x8030,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_byte1_clk", .name = "disp_cc_mdss_byte1_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_byte1_clk_src.clkr.hw, &disp_cc_mdss_byte1_clk_src.clkr.hw,
@ -891,7 +903,7 @@ static struct clk_branch disp_cc_mdss_byte1_intf_clk = {
.clkr = { .clkr = {
.enable_reg = 0x8034, .enable_reg = 0x8034,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_byte1_intf_clk", .name = "disp_cc_mdss_byte1_intf_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_byte1_div_clk_src.clkr.hw, &disp_cc_mdss_byte1_div_clk_src.clkr.hw,
@ -909,7 +921,7 @@ static struct clk_branch disp_cc_mdss_dptx0_aux_clk = {
.clkr = { .clkr = {
.enable_reg = 0x8058, .enable_reg = 0x8058,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx0_aux_clk", .name = "disp_cc_mdss_dptx0_aux_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx0_aux_clk_src.clkr.hw, &disp_cc_mdss_dptx0_aux_clk_src.clkr.hw,
@ -927,7 +939,7 @@ static struct clk_branch disp_cc_mdss_dptx0_crypto_clk = {
.clkr = { .clkr = {
.enable_reg = 0x804c, .enable_reg = 0x804c,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx0_crypto_clk", .name = "disp_cc_mdss_dptx0_crypto_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx0_link_clk_src.clkr.hw, &disp_cc_mdss_dptx0_link_clk_src.clkr.hw,
@ -945,7 +957,7 @@ static struct clk_branch disp_cc_mdss_dptx0_link_clk = {
.clkr = { .clkr = {
.enable_reg = 0x8040, .enable_reg = 0x8040,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx0_link_clk", .name = "disp_cc_mdss_dptx0_link_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx0_link_clk_src.clkr.hw, &disp_cc_mdss_dptx0_link_clk_src.clkr.hw,
@ -963,7 +975,7 @@ static struct clk_branch disp_cc_mdss_dptx0_link_intf_clk = {
.clkr = { .clkr = {
.enable_reg = 0x8048, .enable_reg = 0x8048,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx0_link_intf_clk", .name = "disp_cc_mdss_dptx0_link_intf_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx0_link_div_clk_src.clkr.hw, &disp_cc_mdss_dptx0_link_div_clk_src.clkr.hw,
@ -981,7 +993,7 @@ static struct clk_branch disp_cc_mdss_dptx0_pixel0_clk = {
.clkr = { .clkr = {
.enable_reg = 0x8050, .enable_reg = 0x8050,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx0_pixel0_clk", .name = "disp_cc_mdss_dptx0_pixel0_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx0_pixel0_clk_src.clkr.hw, &disp_cc_mdss_dptx0_pixel0_clk_src.clkr.hw,
@ -999,7 +1011,7 @@ static struct clk_branch disp_cc_mdss_dptx0_pixel1_clk = {
.clkr = { .clkr = {
.enable_reg = 0x8054, .enable_reg = 0x8054,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx0_pixel1_clk", .name = "disp_cc_mdss_dptx0_pixel1_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx0_pixel1_clk_src.clkr.hw, &disp_cc_mdss_dptx0_pixel1_clk_src.clkr.hw,
@ -1017,7 +1029,7 @@ static struct clk_branch disp_cc_mdss_dptx0_usb_router_link_intf_clk = {
.clkr = { .clkr = {
.enable_reg = 0x8044, .enable_reg = 0x8044,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx0_usb_router_link_intf_clk", .name = "disp_cc_mdss_dptx0_usb_router_link_intf_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx0_link_div_clk_src.clkr.hw, &disp_cc_mdss_dptx0_link_div_clk_src.clkr.hw,
@ -1035,7 +1047,7 @@ static struct clk_branch disp_cc_mdss_dptx1_aux_clk = {
.clkr = { .clkr = {
.enable_reg = 0x8074, .enable_reg = 0x8074,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx1_aux_clk", .name = "disp_cc_mdss_dptx1_aux_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx1_aux_clk_src.clkr.hw, &disp_cc_mdss_dptx1_aux_clk_src.clkr.hw,
@ -1053,7 +1065,7 @@ static struct clk_branch disp_cc_mdss_dptx1_crypto_clk = {
.clkr = { .clkr = {
.enable_reg = 0x8070, .enable_reg = 0x8070,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx1_crypto_clk", .name = "disp_cc_mdss_dptx1_crypto_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx1_link_clk_src.clkr.hw, &disp_cc_mdss_dptx1_link_clk_src.clkr.hw,
@ -1071,7 +1083,7 @@ static struct clk_branch disp_cc_mdss_dptx1_link_clk = {
.clkr = { .clkr = {
.enable_reg = 0x8064, .enable_reg = 0x8064,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx1_link_clk", .name = "disp_cc_mdss_dptx1_link_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx1_link_clk_src.clkr.hw, &disp_cc_mdss_dptx1_link_clk_src.clkr.hw,
@ -1089,7 +1101,7 @@ static struct clk_branch disp_cc_mdss_dptx1_link_intf_clk = {
.clkr = { .clkr = {
.enable_reg = 0x806c, .enable_reg = 0x806c,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx1_link_intf_clk", .name = "disp_cc_mdss_dptx1_link_intf_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx1_link_div_clk_src.clkr.hw, &disp_cc_mdss_dptx1_link_div_clk_src.clkr.hw,
@ -1107,7 +1119,7 @@ static struct clk_branch disp_cc_mdss_dptx1_pixel0_clk = {
.clkr = { .clkr = {
.enable_reg = 0x805c, .enable_reg = 0x805c,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx1_pixel0_clk", .name = "disp_cc_mdss_dptx1_pixel0_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx1_pixel0_clk_src.clkr.hw, &disp_cc_mdss_dptx1_pixel0_clk_src.clkr.hw,
@ -1125,7 +1137,7 @@ static struct clk_branch disp_cc_mdss_dptx1_pixel1_clk = {
.clkr = { .clkr = {
.enable_reg = 0x8060, .enable_reg = 0x8060,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx1_pixel1_clk", .name = "disp_cc_mdss_dptx1_pixel1_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx1_pixel1_clk_src.clkr.hw, &disp_cc_mdss_dptx1_pixel1_clk_src.clkr.hw,
@ -1143,7 +1155,7 @@ static struct clk_branch disp_cc_mdss_dptx1_usb_router_link_intf_clk = {
.clkr = { .clkr = {
.enable_reg = 0x8068, .enable_reg = 0x8068,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx1_usb_router_link_intf_clk", .name = "disp_cc_mdss_dptx1_usb_router_link_intf_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx0_link_div_clk_src.clkr.hw, &disp_cc_mdss_dptx0_link_div_clk_src.clkr.hw,
@ -1161,7 +1173,7 @@ static struct clk_branch disp_cc_mdss_dptx2_aux_clk = {
.clkr = { .clkr = {
.enable_reg = 0x808c, .enable_reg = 0x808c,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx2_aux_clk", .name = "disp_cc_mdss_dptx2_aux_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx2_aux_clk_src.clkr.hw, &disp_cc_mdss_dptx2_aux_clk_src.clkr.hw,
@ -1179,7 +1191,7 @@ static struct clk_branch disp_cc_mdss_dptx2_crypto_clk = {
.clkr = { .clkr = {
.enable_reg = 0x8088, .enable_reg = 0x8088,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx2_crypto_clk", .name = "disp_cc_mdss_dptx2_crypto_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx2_link_clk_src.clkr.hw, &disp_cc_mdss_dptx2_link_clk_src.clkr.hw,
@ -1197,7 +1209,7 @@ static struct clk_branch disp_cc_mdss_dptx2_link_clk = {
.clkr = { .clkr = {
.enable_reg = 0x8080, .enable_reg = 0x8080,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx2_link_clk", .name = "disp_cc_mdss_dptx2_link_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx2_link_clk_src.clkr.hw, &disp_cc_mdss_dptx2_link_clk_src.clkr.hw,
@ -1215,7 +1227,7 @@ static struct clk_branch disp_cc_mdss_dptx2_link_intf_clk = {
.clkr = { .clkr = {
.enable_reg = 0x8084, .enable_reg = 0x8084,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx2_link_intf_clk", .name = "disp_cc_mdss_dptx2_link_intf_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx2_link_div_clk_src.clkr.hw, &disp_cc_mdss_dptx2_link_div_clk_src.clkr.hw,
@ -1233,7 +1245,7 @@ static struct clk_branch disp_cc_mdss_dptx2_pixel0_clk = {
.clkr = { .clkr = {
.enable_reg = 0x8078, .enable_reg = 0x8078,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx2_pixel0_clk", .name = "disp_cc_mdss_dptx2_pixel0_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx2_pixel0_clk_src.clkr.hw, &disp_cc_mdss_dptx2_pixel0_clk_src.clkr.hw,
@ -1251,7 +1263,7 @@ static struct clk_branch disp_cc_mdss_dptx2_pixel1_clk = {
.clkr = { .clkr = {
.enable_reg = 0x807c, .enable_reg = 0x807c,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx2_pixel1_clk", .name = "disp_cc_mdss_dptx2_pixel1_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx2_pixel1_clk_src.clkr.hw, &disp_cc_mdss_dptx2_pixel1_clk_src.clkr.hw,
@ -1269,7 +1281,7 @@ static struct clk_branch disp_cc_mdss_dptx3_aux_clk = {
.clkr = { .clkr = {
.enable_reg = 0x809c, .enable_reg = 0x809c,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx3_aux_clk", .name = "disp_cc_mdss_dptx3_aux_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx3_aux_clk_src.clkr.hw, &disp_cc_mdss_dptx3_aux_clk_src.clkr.hw,
@ -1287,7 +1299,7 @@ static struct clk_branch disp_cc_mdss_dptx3_crypto_clk = {
.clkr = { .clkr = {
.enable_reg = 0x80a0, .enable_reg = 0x80a0,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx3_crypto_clk", .name = "disp_cc_mdss_dptx3_crypto_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx3_link_clk_src.clkr.hw, &disp_cc_mdss_dptx3_link_clk_src.clkr.hw,
@ -1305,7 +1317,7 @@ static struct clk_branch disp_cc_mdss_dptx3_link_clk = {
.clkr = { .clkr = {
.enable_reg = 0x8094, .enable_reg = 0x8094,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx3_link_clk", .name = "disp_cc_mdss_dptx3_link_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx3_link_clk_src.clkr.hw, &disp_cc_mdss_dptx3_link_clk_src.clkr.hw,
@ -1323,7 +1335,7 @@ static struct clk_branch disp_cc_mdss_dptx3_link_intf_clk = {
.clkr = { .clkr = {
.enable_reg = 0x8098, .enable_reg = 0x8098,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx3_link_intf_clk", .name = "disp_cc_mdss_dptx3_link_intf_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx3_link_div_clk_src.clkr.hw, &disp_cc_mdss_dptx3_link_div_clk_src.clkr.hw,
@ -1341,7 +1353,7 @@ static struct clk_branch disp_cc_mdss_dptx3_pixel0_clk = {
.clkr = { .clkr = {
.enable_reg = 0x8090, .enable_reg = 0x8090,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_dptx3_pixel0_clk", .name = "disp_cc_mdss_dptx3_pixel0_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_dptx3_pixel0_clk_src.clkr.hw, &disp_cc_mdss_dptx3_pixel0_clk_src.clkr.hw,
@ -1359,7 +1371,7 @@ static struct clk_branch disp_cc_mdss_esc0_clk = {
.clkr = { .clkr = {
.enable_reg = 0x8038, .enable_reg = 0x8038,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_esc0_clk", .name = "disp_cc_mdss_esc0_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_esc0_clk_src.clkr.hw, &disp_cc_mdss_esc0_clk_src.clkr.hw,
@ -1377,7 +1389,7 @@ static struct clk_branch disp_cc_mdss_esc1_clk = {
.clkr = { .clkr = {
.enable_reg = 0x803c, .enable_reg = 0x803c,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_esc1_clk", .name = "disp_cc_mdss_esc1_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_esc1_clk_src.clkr.hw, &disp_cc_mdss_esc1_clk_src.clkr.hw,
@ -1395,7 +1407,7 @@ static struct clk_branch disp_cc_mdss_mdp1_clk = {
.clkr = { .clkr = {
.enable_reg = 0xa004, .enable_reg = 0xa004,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_mdp1_clk", .name = "disp_cc_mdss_mdp1_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_mdp_clk_src.clkr.hw, &disp_cc_mdss_mdp_clk_src.clkr.hw,
@ -1413,7 +1425,7 @@ static struct clk_branch disp_cc_mdss_mdp_clk = {
.clkr = { .clkr = {
.enable_reg = 0x800c, .enable_reg = 0x800c,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_mdp_clk", .name = "disp_cc_mdss_mdp_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_mdp_clk_src.clkr.hw, &disp_cc_mdss_mdp_clk_src.clkr.hw,
@ -1431,7 +1443,7 @@ static struct clk_branch disp_cc_mdss_mdp_lut1_clk = {
.clkr = { .clkr = {
.enable_reg = 0xa010, .enable_reg = 0xa010,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_mdp_lut1_clk", .name = "disp_cc_mdss_mdp_lut1_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_mdp_clk_src.clkr.hw, &disp_cc_mdss_mdp_clk_src.clkr.hw,
@ -1449,7 +1461,7 @@ static struct clk_branch disp_cc_mdss_mdp_lut_clk = {
.clkr = { .clkr = {
.enable_reg = 0x8018, .enable_reg = 0x8018,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_mdp_lut_clk", .name = "disp_cc_mdss_mdp_lut_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_mdp_clk_src.clkr.hw, &disp_cc_mdss_mdp_clk_src.clkr.hw,
@ -1467,7 +1479,7 @@ static struct clk_branch disp_cc_mdss_non_gdsc_ahb_clk = {
.clkr = { .clkr = {
.enable_reg = 0xc004, .enable_reg = 0xc004,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_non_gdsc_ahb_clk", .name = "disp_cc_mdss_non_gdsc_ahb_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_ahb_clk_src.clkr.hw, &disp_cc_mdss_ahb_clk_src.clkr.hw,
@ -1485,7 +1497,7 @@ static struct clk_branch disp_cc_mdss_pclk0_clk = {
.clkr = { .clkr = {
.enable_reg = 0x8004, .enable_reg = 0x8004,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_pclk0_clk", .name = "disp_cc_mdss_pclk0_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_pclk0_clk_src.clkr.hw, &disp_cc_mdss_pclk0_clk_src.clkr.hw,
@ -1503,7 +1515,7 @@ static struct clk_branch disp_cc_mdss_pclk1_clk = {
.clkr = { .clkr = {
.enable_reg = 0x8008, .enable_reg = 0x8008,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_pclk1_clk", .name = "disp_cc_mdss_pclk1_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_pclk1_clk_src.clkr.hw, &disp_cc_mdss_pclk1_clk_src.clkr.hw,
@ -1521,7 +1533,7 @@ static struct clk_branch disp_cc_mdss_rscc_ahb_clk = {
.clkr = { .clkr = {
.enable_reg = 0xc00c, .enable_reg = 0xc00c,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_rscc_ahb_clk", .name = "disp_cc_mdss_rscc_ahb_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_ahb_clk_src.clkr.hw, &disp_cc_mdss_ahb_clk_src.clkr.hw,
@ -1539,7 +1551,7 @@ static struct clk_branch disp_cc_mdss_rscc_vsync_clk = {
.clkr = { .clkr = {
.enable_reg = 0xc008, .enable_reg = 0xc008,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_rscc_vsync_clk", .name = "disp_cc_mdss_rscc_vsync_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_vsync_clk_src.clkr.hw, &disp_cc_mdss_vsync_clk_src.clkr.hw,
@ -1557,7 +1569,7 @@ static struct clk_branch disp_cc_mdss_vsync1_clk = {
.clkr = { .clkr = {
.enable_reg = 0xa01c, .enable_reg = 0xa01c,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_vsync1_clk", .name = "disp_cc_mdss_vsync1_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_vsync_clk_src.clkr.hw, &disp_cc_mdss_vsync_clk_src.clkr.hw,
@ -1575,7 +1587,7 @@ static struct clk_branch disp_cc_mdss_vsync_clk = {
.clkr = { .clkr = {
.enable_reg = 0x8024, .enable_reg = 0x8024,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_mdss_vsync_clk", .name = "disp_cc_mdss_vsync_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_mdss_vsync_clk_src.clkr.hw, &disp_cc_mdss_vsync_clk_src.clkr.hw,
@ -1593,7 +1605,7 @@ static struct clk_branch disp_cc_sleep_clk = {
.clkr = { .clkr = {
.enable_reg = 0xe074, .enable_reg = 0xe074,
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) { .hw.init = &(const struct clk_init_data) {
.name = "disp_cc_sleep_clk", .name = "disp_cc_sleep_clk",
.parent_hws = (const struct clk_hw*[]) { .parent_hws = (const struct clk_hw*[]) {
&disp_cc_sleep_clk_src.clkr.hw, &disp_cc_sleep_clk_src.clkr.hw,
@ -1611,7 +1623,7 @@ static struct gdsc mdss_gdsc = {
.name = "mdss_gdsc", .name = "mdss_gdsc",
}, },
.pwrsts = PWRSTS_OFF_ON, .pwrsts = PWRSTS_OFF_ON,
.flags = HW_CTRL | RETAIN_FF_ENABLE, .flags = POLL_CFG_GDSCR | HW_CTRL | RETAIN_FF_ENABLE,
}; };
static struct gdsc mdss_int2_gdsc = { static struct gdsc mdss_int2_gdsc = {
@ -1620,7 +1632,7 @@ static struct gdsc mdss_int2_gdsc = {
.name = "mdss_int2_gdsc", .name = "mdss_int2_gdsc",
}, },
.pwrsts = PWRSTS_OFF_ON, .pwrsts = PWRSTS_OFF_ON,
.flags = HW_CTRL | RETAIN_FF_ENABLE, .flags = POLL_CFG_GDSCR | HW_CTRL | RETAIN_FF_ENABLE,
}; };
static struct clk_regmap *disp_cc_sm8550_clocks[] = { static struct clk_regmap *disp_cc_sm8550_clocks[] = {
@ -1739,6 +1751,7 @@ static struct qcom_cc_desc disp_cc_sm8550_desc = {
static const struct of_device_id disp_cc_sm8550_match_table[] = { static const struct of_device_id disp_cc_sm8550_match_table[] = {
{ .compatible = "qcom,sm8550-dispcc" }, { .compatible = "qcom,sm8550-dispcc" },
{ .compatible = "qcom,sm8650-dispcc" },
{ } { }
}; };
MODULE_DEVICE_TABLE(of, disp_cc_sm8550_match_table); MODULE_DEVICE_TABLE(of, disp_cc_sm8550_match_table);
@ -1762,6 +1775,13 @@ static int disp_cc_sm8550_probe(struct platform_device *pdev)
goto err_put_rpm; goto err_put_rpm;
} }
if (of_device_is_compatible(pdev->dev.of_node, "qcom,sm8650-dispcc")) {
lucid_ole_vco[0].max_freq = 2100000000;
disp_cc_mdss_mdp_clk_src.freq_tbl = ftbl_disp_cc_mdss_mdp_clk_src_sm8650;
disp_cc_mdss_dptx1_usb_router_link_intf_clk.clkr.hw.init->parent_hws[0] =
&disp_cc_mdss_dptx1_link_div_clk_src.clkr.hw;
}
clk_lucid_ole_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config); clk_lucid_ole_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config);
clk_lucid_ole_pll_configure(&disp_cc_pll1, regmap, &disp_cc_pll1_config); clk_lucid_ole_pll_configure(&disp_cc_pll1, regmap, &disp_cc_pll1_config);
@ -1795,5 +1815,5 @@ static struct platform_driver disp_cc_sm8550_driver = {
module_platform_driver(disp_cc_sm8550_driver); module_platform_driver(disp_cc_sm8550_driver);
MODULE_DESCRIPTION("QTI DISPCC SM8550 Driver"); MODULE_DESCRIPTION("QTI DISPCC SM8550 / SM8650 Driver");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");

File diff suppressed because it is too large Load Diff

View File

@ -4,12 +4,14 @@
*/ */
#include <linux/clk-provider.h> #include <linux/clk-provider.h>
#include <linux/interconnect-provider.h>
#include <linux/mod_devicetable.h> #include <linux/mod_devicetable.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/regmap.h> #include <linux/regmap.h>
#include <dt-bindings/clock/qcom,ipq5332-gcc.h> #include <dt-bindings/clock/qcom,ipq5332-gcc.h>
#include <dt-bindings/interconnect/qcom,ipq5332.h>
#include "clk-alpha-pll.h" #include "clk-alpha-pll.h"
#include "clk-branch.h" #include "clk-branch.h"
@ -126,17 +128,6 @@ static struct clk_alpha_pll gpll4_main = {
.parent_data = &gcc_parent_data_xo, .parent_data = &gcc_parent_data_xo,
.num_parents = 1, .num_parents = 1,
.ops = &clk_alpha_pll_stromer_ops, .ops = &clk_alpha_pll_stromer_ops,
/*
* There are no consumers for this GPLL in kernel yet,
* (will be added soon), so the clock framework
* disables this source. But some of the clocks
* initialized by boot loaders uses this source. So we
* need to keep this clock ON. Add the
* CLK_IGNORE_UNUSED flag so the clock will not be
* disabled. Once the consumer in kernel is added, we
* can get rid of this flag.
*/
.flags = CLK_IGNORE_UNUSED,
}, },
}, },
}; };
@ -3388,6 +3379,7 @@ static struct clk_regmap *gcc_ipq5332_clocks[] = {
[GCC_QDSS_DAP_DIV_CLK_SRC] = &gcc_qdss_dap_div_clk_src.clkr, [GCC_QDSS_DAP_DIV_CLK_SRC] = &gcc_qdss_dap_div_clk_src.clkr,
[GCC_QDSS_ETR_USB_CLK] = &gcc_qdss_etr_usb_clk.clkr, [GCC_QDSS_ETR_USB_CLK] = &gcc_qdss_etr_usb_clk.clkr,
[GCC_QDSS_EUD_AT_CLK] = &gcc_qdss_eud_at_clk.clkr, [GCC_QDSS_EUD_AT_CLK] = &gcc_qdss_eud_at_clk.clkr,
[GCC_QDSS_TSCTR_CLK_SRC] = &gcc_qdss_tsctr_clk_src.clkr,
[GCC_QPIC_AHB_CLK] = &gcc_qpic_ahb_clk.clkr, [GCC_QPIC_AHB_CLK] = &gcc_qpic_ahb_clk.clkr,
[GCC_QPIC_CLK] = &gcc_qpic_clk.clkr, [GCC_QPIC_CLK] = &gcc_qpic_clk.clkr,
[GCC_QPIC_IO_MACRO_CLK] = &gcc_qpic_io_macro_clk.clkr, [GCC_QPIC_IO_MACRO_CLK] = &gcc_qpic_io_macro_clk.clkr,
@ -3628,6 +3620,24 @@ static const struct qcom_reset_map gcc_ipq5332_resets[] = {
[GCC_UNIPHY1_XPCS_ARES] = { 0x16060 }, [GCC_UNIPHY1_XPCS_ARES] = { 0x16060 },
}; };
#define IPQ_APPS_ID 5332 /* some unique value */
static struct qcom_icc_hws_data icc_ipq5332_hws[] = {
{ MASTER_SNOC_PCIE3_1_M, SLAVE_SNOC_PCIE3_1_M, GCC_SNOC_PCIE3_1LANE_M_CLK },
{ MASTER_ANOC_PCIE3_1_S, SLAVE_ANOC_PCIE3_1_S, GCC_SNOC_PCIE3_1LANE_S_CLK },
{ MASTER_SNOC_PCIE3_2_M, SLAVE_SNOC_PCIE3_2_M, GCC_SNOC_PCIE3_2LANE_M_CLK },
{ MASTER_ANOC_PCIE3_2_S, SLAVE_ANOC_PCIE3_2_S, GCC_SNOC_PCIE3_2LANE_S_CLK },
{ MASTER_SNOC_USB, SLAVE_SNOC_USB, GCC_SNOC_USB_CLK },
{ MASTER_NSSNOC_NSSCC, SLAVE_NSSNOC_NSSCC, GCC_NSSNOC_NSSCC_CLK },
{ MASTER_NSSNOC_SNOC_0, SLAVE_NSSNOC_SNOC_0, GCC_NSSNOC_SNOC_CLK },
{ MASTER_NSSNOC_SNOC_1, SLAVE_NSSNOC_SNOC_1, GCC_NSSNOC_SNOC_1_CLK },
{ MASTER_NSSNOC_ATB, SLAVE_NSSNOC_ATB, GCC_NSSNOC_ATB_CLK },
{ MASTER_NSSNOC_PCNOC_1, SLAVE_NSSNOC_PCNOC_1, GCC_NSSNOC_PCNOC_1_CLK },
{ MASTER_NSSNOC_QOSGEN_REF, SLAVE_NSSNOC_QOSGEN_REF, GCC_NSSNOC_QOSGEN_REF_CLK },
{ MASTER_NSSNOC_TIMEOUT_REF, SLAVE_NSSNOC_TIMEOUT_REF, GCC_NSSNOC_TIMEOUT_REF_CLK },
{ MASTER_NSSNOC_XO_DCD, SLAVE_NSSNOC_XO_DCD, GCC_NSSNOC_XO_DCD_CLK },
};
static const struct regmap_config gcc_ipq5332_regmap_config = { static const struct regmap_config gcc_ipq5332_regmap_config = {
.reg_bits = 32, .reg_bits = 32,
.reg_stride = 4, .reg_stride = 4,
@ -3656,6 +3666,9 @@ static const struct qcom_cc_desc gcc_ipq5332_desc = {
.num_resets = ARRAY_SIZE(gcc_ipq5332_resets), .num_resets = ARRAY_SIZE(gcc_ipq5332_resets),
.clk_hws = gcc_ipq5332_hws, .clk_hws = gcc_ipq5332_hws,
.num_clk_hws = ARRAY_SIZE(gcc_ipq5332_hws), .num_clk_hws = ARRAY_SIZE(gcc_ipq5332_hws),
.icc_hws = icc_ipq5332_hws,
.num_icc_hws = ARRAY_SIZE(icc_ipq5332_hws),
.icc_first_node_id = IPQ_APPS_ID,
}; };
static int gcc_ipq5332_probe(struct platform_device *pdev) static int gcc_ipq5332_probe(struct platform_device *pdev)
@ -3674,6 +3687,7 @@ static struct platform_driver gcc_ipq5332_driver = {
.driver = { .driver = {
.name = "gcc-ipq5332", .name = "gcc-ipq5332",
.of_match_table = gcc_ipq5332_match_table, .of_match_table = gcc_ipq5332_match_table,
.sync_state = icc_sync_state,
}, },
}; };

View File

@ -2684,7 +2684,7 @@ static struct clk_rcg2 lpass_q6_axim_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_rbcpr_wcss_clk_src[] = { static const struct freq_tbl ftbl_rbcpr_wcss_clk_src[] = {
F(24000000, P_XO, 1, 0, 0), F(24000000, P_XO, 1, 0, 0),
F(50000000, P_GPLL0, 16, 0, 0), F(50000000, P_GPLL0, 16, 0, 0),
{ } { }

View File

@ -390,7 +390,7 @@ static const struct clk_parent_data gcc_pxo_pll3_pll0_pll14_pll18_pll11[] = {
}; };
static struct freq_tbl clk_tbl_gsbi_uart[] = { static const struct freq_tbl clk_tbl_gsbi_uart[] = {
{ 1843200, P_PLL8, 2, 6, 625 }, { 1843200, P_PLL8, 2, 6, 625 },
{ 3686400, P_PLL8, 2, 12, 625 }, { 3686400, P_PLL8, 2, 12, 625 },
{ 7372800, P_PLL8, 2, 24, 625 }, { 7372800, P_PLL8, 2, 24, 625 },
@ -714,7 +714,7 @@ static struct clk_branch gsbi7_uart_clk = {
}, },
}; };
static struct freq_tbl clk_tbl_gsbi_qup[] = { static const struct freq_tbl clk_tbl_gsbi_qup[] = {
{ 1100000, P_PXO, 1, 2, 49 }, { 1100000, P_PXO, 1, 2, 49 },
{ 5400000, P_PXO, 1, 1, 5 }, { 5400000, P_PXO, 1, 1, 5 },
{ 10800000, P_PXO, 1, 2, 5 }, { 10800000, P_PXO, 1, 2, 5 },

View File

@ -1947,7 +1947,7 @@ static struct clk_regmap_div nss_port6_tx_div_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_crypto_clk_src[] = { static const struct freq_tbl ftbl_crypto_clk_src[] = {
F(40000000, P_GPLL0_DIV2, 10, 0, 0), F(40000000, P_GPLL0_DIV2, 10, 0, 0),
F(80000000, P_GPLL0, 10, 0, 0), F(80000000, P_GPLL0, 10, 0, 0),
F(100000000, P_GPLL0, 8, 0, 0), F(100000000, P_GPLL0, 8, 0, 0),
@ -1968,7 +1968,7 @@ static struct clk_rcg2 crypto_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_gp_clk_src[] = { static const struct freq_tbl ftbl_gp_clk_src[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
{ } { }
}; };

View File

@ -164,7 +164,7 @@ static const struct clk_parent_data gcc_cxo_pll14[] = {
{ .hw = &pll14_vote.hw }, { .hw = &pll14_vote.hw },
}; };
static struct freq_tbl clk_tbl_gsbi_uart[] = { static const struct freq_tbl clk_tbl_gsbi_uart[] = {
{ 1843200, P_PLL8, 2, 6, 625 }, { 1843200, P_PLL8, 2, 6, 625 },
{ 3686400, P_PLL8, 2, 12, 625 }, { 3686400, P_PLL8, 2, 12, 625 },
{ 7372800, P_PLL8, 2, 24, 625 }, { 7372800, P_PLL8, 2, 24, 625 },
@ -437,7 +437,7 @@ static struct clk_branch gsbi5_uart_clk = {
}, },
}; };
static struct freq_tbl clk_tbl_gsbi_qup[] = { static const struct freq_tbl clk_tbl_gsbi_qup[] = {
{ 960000, P_CXO, 4, 1, 5 }, { 960000, P_CXO, 4, 1, 5 },
{ 4800000, P_CXO, 4, 0, 1 }, { 4800000, P_CXO, 4, 0, 1 },
{ 9600000, P_CXO, 2, 0, 1 }, { 9600000, P_CXO, 2, 0, 1 },

View File

@ -82,7 +82,7 @@ static const struct clk_parent_data gcc_pxo_pll8_cxo[] = {
{ .fw_name = "cxo", .name = "cxo_board" }, { .fw_name = "cxo", .name = "cxo_board" },
}; };
static struct freq_tbl clk_tbl_gsbi_uart[] = { static const struct freq_tbl clk_tbl_gsbi_uart[] = {
{ 1843200, P_PLL8, 2, 6, 625 }, { 1843200, P_PLL8, 2, 6, 625 },
{ 3686400, P_PLL8, 2, 12, 625 }, { 3686400, P_PLL8, 2, 12, 625 },
{ 7372800, P_PLL8, 2, 24, 625 }, { 7372800, P_PLL8, 2, 24, 625 },
@ -712,7 +712,7 @@ static struct clk_branch gsbi12_uart_clk = {
}, },
}; };
static struct freq_tbl clk_tbl_gsbi_qup[] = { static const struct freq_tbl clk_tbl_gsbi_qup[] = {
{ 1100000, P_PXO, 1, 2, 49 }, { 1100000, P_PXO, 1, 2, 49 },
{ 5400000, P_PXO, 1, 1, 5 }, { 5400000, P_PXO, 1, 1, 5 },
{ 10800000, P_PXO, 1, 2, 5 }, { 10800000, P_PXO, 1, 2, 5 },

View File

@ -328,7 +328,7 @@ static const struct clk_parent_data gcc_pxo_pll8_pll3[] = {
{ .hw = &pll3.clkr.hw }, { .hw = &pll3.clkr.hw },
}; };
static struct freq_tbl clk_tbl_gsbi_uart[] = { static const struct freq_tbl clk_tbl_gsbi_uart[] = {
{ 1843200, P_PLL8, 2, 6, 625 }, { 1843200, P_PLL8, 2, 6, 625 },
{ 3686400, P_PLL8, 2, 12, 625 }, { 3686400, P_PLL8, 2, 12, 625 },
{ 7372800, P_PLL8, 2, 24, 625 }, { 7372800, P_PLL8, 2, 24, 625 },
@ -958,7 +958,7 @@ static struct clk_branch gsbi12_uart_clk = {
}, },
}; };
static struct freq_tbl clk_tbl_gsbi_qup[] = { static const struct freq_tbl clk_tbl_gsbi_qup[] = {
{ 1100000, P_PXO, 1, 2, 49 }, { 1100000, P_PXO, 1, 2, 49 },
{ 5400000, P_PXO, 1, 1, 5 }, { 5400000, P_PXO, 1, 1, 5 },
{ 10800000, P_PXO, 1, 2, 5 }, { 10800000, P_PXO, 1, 2, 5 },
@ -2940,7 +2940,7 @@ static struct clk_branch adm0_pbus_clk = {
}, },
}; };
static struct freq_tbl clk_tbl_ce3[] = { static const struct freq_tbl clk_tbl_ce3[] = {
{ 48000000, P_PLL8, 8 }, { 48000000, P_PLL8, 8 },
{ 100000000, P_PLL3, 12 }, { 100000000, P_PLL3, 12 },
{ 120000000, P_PLL3, 10 }, { 120000000, P_PLL3, 10 },

View File

@ -112,7 +112,7 @@ static const struct clk_parent_data gcc_xo_gpll0_gpll4[] = {
{ .hw = &gpll4.clkr.hw }, { .hw = &gpll4.clkr.hw },
}; };
static struct freq_tbl ftbl_ufs_axi_clk_src[] = { static const struct freq_tbl ftbl_ufs_axi_clk_src[] = {
F(50000000, P_GPLL0, 12, 0, 0), F(50000000, P_GPLL0, 12, 0, 0),
F(100000000, P_GPLL0, 6, 0, 0), F(100000000, P_GPLL0, 6, 0, 0),
F(150000000, P_GPLL0, 4, 0, 0), F(150000000, P_GPLL0, 4, 0, 0),
@ -136,7 +136,7 @@ static struct clk_rcg2 ufs_axi_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_usb30_master_clk_src[] = { static const struct freq_tbl ftbl_usb30_master_clk_src[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
F(125000000, P_GPLL0, 1, 5, 24), F(125000000, P_GPLL0, 1, 5, 24),
{ } { }
@ -156,7 +156,7 @@ static struct clk_rcg2 usb30_master_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = { static const struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
F(50000000, P_GPLL0, 12, 0, 0), F(50000000, P_GPLL0, 12, 0, 0),
{ } { }
@ -175,7 +175,7 @@ static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_blsp1_qup1_spi_apps_clk_src[] = { static const struct freq_tbl ftbl_blsp1_qup1_spi_apps_clk_src[] = {
F(960000, P_XO, 10, 1, 2), F(960000, P_XO, 10, 1, 2),
F(4800000, P_XO, 4, 0, 0), F(4800000, P_XO, 4, 0, 0),
F(9600000, P_XO, 2, 0, 0), F(9600000, P_XO, 2, 0, 0),
@ -188,7 +188,7 @@ static struct freq_tbl ftbl_blsp1_qup1_spi_apps_clk_src[] = {
{ } { }
}; };
static struct freq_tbl ftbl_blsp1_qup_spi_apps_clk_src_8992[] = { static const struct freq_tbl ftbl_blsp1_qup_spi_apps_clk_src_8992[] = {
F(960000, P_XO, 10, 1, 2), F(960000, P_XO, 10, 1, 2),
F(4800000, P_XO, 4, 0, 0), F(4800000, P_XO, 4, 0, 0),
F(9600000, P_XO, 2, 0, 0), F(9600000, P_XO, 2, 0, 0),
@ -226,7 +226,7 @@ static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_blsp1_qup2_spi_apps_clk_src[] = { static const struct freq_tbl ftbl_blsp1_qup2_spi_apps_clk_src[] = {
F(960000, P_XO, 10, 1, 2), F(960000, P_XO, 10, 1, 2),
F(4800000, P_XO, 4, 0, 0), F(4800000, P_XO, 4, 0, 0),
F(9600000, P_XO, 2, 0, 0), F(9600000, P_XO, 2, 0, 0),
@ -266,7 +266,7 @@ static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_blsp1_qup3_4_spi_apps_clk_src[] = { static const struct freq_tbl ftbl_blsp1_qup3_4_spi_apps_clk_src[] = {
F(960000, P_XO, 10, 1, 2), F(960000, P_XO, 10, 1, 2),
F(4800000, P_XO, 4, 0, 0), F(4800000, P_XO, 4, 0, 0),
F(9600000, P_XO, 2, 0, 0), F(9600000, P_XO, 2, 0, 0),
@ -333,7 +333,7 @@ static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_blsp1_qup5_spi_apps_clk_src[] = { static const struct freq_tbl ftbl_blsp1_qup5_spi_apps_clk_src[] = {
F(960000, P_XO, 10, 1, 2), F(960000, P_XO, 10, 1, 2),
F(4800000, P_XO, 4, 0, 0), F(4800000, P_XO, 4, 0, 0),
F(9600000, P_XO, 2, 0, 0), F(9600000, P_XO, 2, 0, 0),
@ -373,7 +373,7 @@ static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_blsp1_qup6_spi_apps_clk_src[] = { static const struct freq_tbl ftbl_blsp1_qup6_spi_apps_clk_src[] = {
F(960000, P_XO, 10, 1, 2), F(960000, P_XO, 10, 1, 2),
F(4800000, P_XO, 4, 0, 0), F(4800000, P_XO, 4, 0, 0),
F(9600000, P_XO, 2, 0, 0), F(9600000, P_XO, 2, 0, 0),
@ -400,7 +400,7 @@ static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = { static const struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = {
F(3686400, P_GPLL0, 1, 96, 15625), F(3686400, P_GPLL0, 1, 96, 15625),
F(7372800, P_GPLL0, 1, 192, 15625), F(7372800, P_GPLL0, 1, 192, 15625),
F(14745600, P_GPLL0, 1, 384, 15625), F(14745600, P_GPLL0, 1, 384, 15625),
@ -516,7 +516,7 @@ static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_blsp2_qup1_2_spi_apps_clk_src[] = { static const struct freq_tbl ftbl_blsp2_qup1_2_spi_apps_clk_src[] = {
F(960000, P_XO, 10, 1, 2), F(960000, P_XO, 10, 1, 2),
F(4800000, P_XO, 4, 0, 0), F(4800000, P_XO, 4, 0, 0),
F(9600000, P_XO, 2, 0, 0), F(9600000, P_XO, 2, 0, 0),
@ -570,7 +570,7 @@ static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_blsp2_qup3_4_spi_apps_clk_src[] = { static const struct freq_tbl ftbl_blsp2_qup3_4_spi_apps_clk_src[] = {
F(960000, P_XO, 10, 1, 2), F(960000, P_XO, 10, 1, 2),
F(4800000, P_XO, 4, 0, 0), F(4800000, P_XO, 4, 0, 0),
F(9600000, P_XO, 2, 0, 0), F(9600000, P_XO, 2, 0, 0),
@ -678,7 +678,7 @@ static struct clk_rcg2 blsp2_qup6_i2c_apps_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_blsp2_qup6_spi_apps_clk_src[] = { static const struct freq_tbl ftbl_blsp2_qup6_spi_apps_clk_src[] = {
F(960000, P_XO, 10, 1, 2), F(960000, P_XO, 10, 1, 2),
F(4800000, P_XO, 4, 0, 0), F(4800000, P_XO, 4, 0, 0),
F(9600000, P_XO, 2, 0, 0), F(9600000, P_XO, 2, 0, 0),
@ -789,7 +789,7 @@ static struct clk_rcg2 blsp2_uart6_apps_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_gp1_clk_src[] = { static const struct freq_tbl ftbl_gp1_clk_src[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
F(100000000, P_GPLL0, 6, 0, 0), F(100000000, P_GPLL0, 6, 0, 0),
F(200000000, P_GPLL0, 3, 0, 0), F(200000000, P_GPLL0, 3, 0, 0),
@ -810,7 +810,7 @@ static struct clk_rcg2 gp1_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_gp2_clk_src[] = { static const struct freq_tbl ftbl_gp2_clk_src[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
F(100000000, P_GPLL0, 6, 0, 0), F(100000000, P_GPLL0, 6, 0, 0),
F(200000000, P_GPLL0, 3, 0, 0), F(200000000, P_GPLL0, 3, 0, 0),
@ -831,7 +831,7 @@ static struct clk_rcg2 gp2_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_gp3_clk_src[] = { static const struct freq_tbl ftbl_gp3_clk_src[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
F(100000000, P_GPLL0, 6, 0, 0), F(100000000, P_GPLL0, 6, 0, 0),
F(200000000, P_GPLL0, 3, 0, 0), F(200000000, P_GPLL0, 3, 0, 0),
@ -852,7 +852,7 @@ static struct clk_rcg2 gp3_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_pcie_0_aux_clk_src[] = { static const struct freq_tbl ftbl_pcie_0_aux_clk_src[] = {
F(1011000, P_XO, 1, 1, 19), F(1011000, P_XO, 1, 1, 19),
{ } { }
}; };
@ -872,7 +872,7 @@ static struct clk_rcg2 pcie_0_aux_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_pcie_pipe_clk_src[] = { static const struct freq_tbl ftbl_pcie_pipe_clk_src[] = {
F(125000000, P_XO, 1, 0, 0), F(125000000, P_XO, 1, 0, 0),
{ } { }
}; };
@ -891,7 +891,7 @@ static struct clk_rcg2 pcie_0_pipe_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_pcie_1_aux_clk_src[] = { static const struct freq_tbl ftbl_pcie_1_aux_clk_src[] = {
F(1011000, P_XO, 1, 1, 19), F(1011000, P_XO, 1, 1, 19),
{ } { }
}; };
@ -925,7 +925,7 @@ static struct clk_rcg2 pcie_1_pipe_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_pdm2_clk_src[] = { static const struct freq_tbl ftbl_pdm2_clk_src[] = {
F(60000000, P_GPLL0, 10, 0, 0), F(60000000, P_GPLL0, 10, 0, 0),
{ } { }
}; };
@ -943,7 +943,7 @@ static struct clk_rcg2 pdm2_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_sdcc1_apps_clk_src[] = { static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
F(144000, P_XO, 16, 3, 25), F(144000, P_XO, 16, 3, 25),
F(400000, P_XO, 12, 1, 4), F(400000, P_XO, 12, 1, 4),
F(20000000, P_GPLL0, 15, 1, 2), F(20000000, P_GPLL0, 15, 1, 2),
@ -955,7 +955,7 @@ static struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
{ } { }
}; };
static struct freq_tbl ftbl_sdcc1_apps_clk_src_8992[] = { static const struct freq_tbl ftbl_sdcc1_apps_clk_src_8992[] = {
F(144000, P_XO, 16, 3, 25), F(144000, P_XO, 16, 3, 25),
F(400000, P_XO, 12, 1, 4), F(400000, P_XO, 12, 1, 4),
F(20000000, P_GPLL0, 15, 1, 2), F(20000000, P_GPLL0, 15, 1, 2),
@ -981,7 +981,7 @@ static struct clk_rcg2 sdcc1_apps_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_sdcc2_4_apps_clk_src[] = { static const struct freq_tbl ftbl_sdcc2_4_apps_clk_src[] = {
F(144000, P_XO, 16, 3, 25), F(144000, P_XO, 16, 3, 25),
F(400000, P_XO, 12, 1, 4), F(400000, P_XO, 12, 1, 4),
F(20000000, P_GPLL0, 15, 1, 2), F(20000000, P_GPLL0, 15, 1, 2),
@ -1034,7 +1034,7 @@ static struct clk_rcg2 sdcc4_apps_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_tsif_ref_clk_src[] = { static const struct freq_tbl ftbl_tsif_ref_clk_src[] = {
F(105500, P_XO, 1, 1, 182), F(105500, P_XO, 1, 1, 182),
{ } { }
}; };
@ -1054,7 +1054,7 @@ static struct clk_rcg2 tsif_ref_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = { static const struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
F(60000000, P_GPLL0, 10, 0, 0), F(60000000, P_GPLL0, 10, 0, 0),
{ } { }
@ -1073,7 +1073,7 @@ static struct clk_rcg2 usb30_mock_utmi_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_usb3_phy_aux_clk_src[] = { static const struct freq_tbl ftbl_usb3_phy_aux_clk_src[] = {
F(1200000, P_XO, 16, 0, 0), F(1200000, P_XO, 16, 0, 0),
{ } { }
}; };
@ -1092,7 +1092,7 @@ static struct clk_rcg2 usb3_phy_aux_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_usb_hs_system_clk_src[] = { static const struct freq_tbl ftbl_usb_hs_system_clk_src[] = {
F(75000000, P_GPLL0, 8, 0, 0), F(75000000, P_GPLL0, 8, 0, 0),
{ } { }
}; };

View File

@ -359,7 +359,7 @@ static struct clk_rcg2 sdcc1_apps_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = { static const struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
F(150000000, P_GPLL0, 4, 0, 0), F(150000000, P_GPLL0, 4, 0, 0),
F(300000000, P_GPLL0, 2, 0, 0), F(300000000, P_GPLL0, 2, 0, 0),

View File

@ -2242,7 +2242,7 @@ static struct clk_branch gcc_hmss_trig_clk = {
}, },
}; };
static struct freq_tbl ftbl_hmss_gpll0_clk_src[] = { static const struct freq_tbl ftbl_hmss_gpll0_clk_src[] = {
F( 300000000, P_GPLL0_OUT_MAIN, 2, 0, 0), F( 300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
F( 600000000, P_GPLL0_OUT_MAIN, 1, 0, 0), F( 600000000, P_GPLL0_OUT_MAIN, 1, 0, 0),
{ } { }
@ -2922,6 +2922,43 @@ static struct clk_branch ssc_cnoc_ahbs_clk = {
}, },
}; };
static struct clk_branch hlos1_vote_lpass_core_smmu_clk = {
.halt_reg = 0x7D010,
.clkr = {
.enable_reg = 0x7D010,
.enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) {
.name = "hlos1_vote_lpass_core_smmu_clk",
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch hlos1_vote_lpass_adsp_smmu_clk = {
.halt_reg = 0x7D014,
.clkr = {
.enable_reg = 0x7D014,
.enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) {
.name = "hlos1_vote_lpass_adsp_smmu_clk",
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
.halt_reg = 0x8A040,
.clkr = {
.enable_reg = 0x8A040,
.enable_mask = BIT(0),
.hw.init = &(struct clk_init_data) {
.name = "gcc_mss_q6_bimc_axi_clk",
.flags = CLK_IS_CRITICAL,
.ops = &clk_branch2_ops,
},
},
};
static struct gdsc pcie_0_gdsc = { static struct gdsc pcie_0_gdsc = {
.gdscr = 0x6b004, .gdscr = 0x6b004,
.gds_hw_ctrl = 0x0, .gds_hw_ctrl = 0x0,
@ -2953,6 +2990,26 @@ static struct gdsc usb_30_gdsc = {
.flags = VOTABLE, .flags = VOTABLE,
}; };
static struct gdsc hlos1_vote_lpass_adsp = {
.gdscr = 0x7d034,
.gds_hw_ctrl = 0x0,
.pd = {
.name = "lpass_adsp_gdsc",
},
.pwrsts = PWRSTS_OFF_ON,
.flags = VOTABLE,
};
static struct gdsc hlos1_vote_lpass_core = {
.gdscr = 0x7d038,
.gds_hw_ctrl = 0x0,
.pd = {
.name = "lpass_core_gdsc",
},
.pwrsts = PWRSTS_OFF_ON,
.flags = ALWAYS_ON,
};
static struct clk_regmap *gcc_msm8998_clocks[] = { static struct clk_regmap *gcc_msm8998_clocks[] = {
[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr, [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr, [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
@ -3133,12 +3190,17 @@ static struct clk_regmap *gcc_msm8998_clocks[] = {
[GCC_MMSS_GPLL0_DIV_CLK] = &gcc_mmss_gpll0_div_clk.clkr, [GCC_MMSS_GPLL0_DIV_CLK] = &gcc_mmss_gpll0_div_clk.clkr,
[GCC_GPU_GPLL0_DIV_CLK] = &gcc_gpu_gpll0_div_clk.clkr, [GCC_GPU_GPLL0_DIV_CLK] = &gcc_gpu_gpll0_div_clk.clkr,
[GCC_GPU_GPLL0_CLK] = &gcc_gpu_gpll0_clk.clkr, [GCC_GPU_GPLL0_CLK] = &gcc_gpu_gpll0_clk.clkr,
[HLOS1_VOTE_LPASS_CORE_SMMU_CLK] = &hlos1_vote_lpass_core_smmu_clk.clkr,
[HLOS1_VOTE_LPASS_ADSP_SMMU_CLK] = &hlos1_vote_lpass_adsp_smmu_clk.clkr,
[GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
}; };
static struct gdsc *gcc_msm8998_gdscs[] = { static struct gdsc *gcc_msm8998_gdscs[] = {
[PCIE_0_GDSC] = &pcie_0_gdsc, [PCIE_0_GDSC] = &pcie_0_gdsc,
[UFS_GDSC] = &ufs_gdsc, [UFS_GDSC] = &ufs_gdsc,
[USB_30_GDSC] = &usb_30_gdsc, [USB_30_GDSC] = &usb_30_gdsc,
[LPASS_ADSP_GDSC] = &hlos1_vote_lpass_adsp,
[LPASS_CORE_GDSC] = &hlos1_vote_lpass_core,
}; };
static const struct qcom_reset_map gcc_msm8998_resets[] = { static const struct qcom_reset_map gcc_msm8998_resets[] = {

View File

@ -142,6 +142,23 @@ static struct clk_alpha_pll gpll7 = {
}, },
}; };
static struct clk_alpha_pll gpll9 = {
.offset = 0x1c000,
.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
.clkr = {
.enable_reg = 0x52000,
.enable_mask = BIT(9),
.hw.init = &(const struct clk_init_data) {
.name = "gpll9",
.parent_data = &(const struct clk_parent_data) {
.fw_name = "bi_tcxo",
},
.num_parents = 1,
.ops = &clk_alpha_pll_fixed_trion_ops,
},
},
};
static const struct parent_map gcc_parent_map_0[] = { static const struct parent_map gcc_parent_map_0[] = {
{ P_BI_TCXO, 0 }, { P_BI_TCXO, 0 },
{ P_GPLL0_OUT_MAIN, 1 }, { P_GPLL0_OUT_MAIN, 1 },
@ -241,7 +258,7 @@ static const struct parent_map gcc_parent_map_7[] = {
static const struct clk_parent_data gcc_parents_7[] = { static const struct clk_parent_data gcc_parents_7[] = {
{ .fw_name = "bi_tcxo", }, { .fw_name = "bi_tcxo", },
{ .hw = &gpll0.clkr.hw }, { .hw = &gpll0.clkr.hw },
{ .name = "gppl9" }, { .hw = &gpll9.clkr.hw },
{ .hw = &gpll4.clkr.hw }, { .hw = &gpll4.clkr.hw },
{ .hw = &gpll0_out_even.clkr.hw }, { .hw = &gpll0_out_even.clkr.hw },
}; };
@ -260,28 +277,6 @@ static const struct clk_parent_data gcc_parents_8[] = {
{ .hw = &gpll0_out_even.clkr.hw }, { .hw = &gpll0_out_even.clkr.hw },
}; };
static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = {
F(19200000, P_BI_TCXO, 1, 0, 0),
F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
{ }
};
static struct clk_rcg2 gcc_cpuss_ahb_clk_src = {
.cmd_rcgr = 0x48014,
.mnd_width = 0,
.hid_width = 5,
.parent_map = gcc_parent_map_0,
.freq_tbl = ftbl_gcc_cpuss_ahb_clk_src,
.clkr.hw.init = &(struct clk_init_data){
.name = "gcc_cpuss_ahb_clk_src",
.parent_data = gcc_parents_0,
.num_parents = ARRAY_SIZE(gcc_parents_0),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops,
},
};
static const struct freq_tbl ftbl_gcc_emac_ptp_clk_src[] = { static const struct freq_tbl ftbl_gcc_emac_ptp_clk_src[] = {
F(19200000, P_BI_TCXO, 1, 0, 0), F(19200000, P_BI_TCXO, 1, 0, 0),
F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0), F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
@ -609,19 +604,29 @@ static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
{ } { }
}; };
static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
.name = "gcc_qupv3_wrap0_s0_clk_src",
.parent_data = gcc_parents_0,
.num_parents = ARRAY_SIZE(gcc_parents_0),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops,
};
static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = { static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
.cmd_rcgr = 0x17148, .cmd_rcgr = 0x17148,
.mnd_width = 16, .mnd_width = 16,
.hid_width = 5, .hid_width = 5,
.parent_map = gcc_parent_map_0, .parent_map = gcc_parent_map_0,
.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
.clkr.hw.init = &(struct clk_init_data){ .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
.name = "gcc_qupv3_wrap0_s0_clk_src", };
.parent_data = gcc_parents_0,
.num_parents = ARRAY_SIZE(gcc_parents_0), static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
.flags = CLK_SET_RATE_PARENT, .name = "gcc_qupv3_wrap0_s1_clk_src",
.ops = &clk_rcg2_ops, .parent_data = gcc_parents_0,
}, .num_parents = ARRAY_SIZE(gcc_parents_0),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops,
}; };
static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = { static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
@ -630,13 +635,15 @@ static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = gcc_parent_map_0, .parent_map = gcc_parent_map_0,
.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
.clkr.hw.init = &(struct clk_init_data){ .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
.name = "gcc_qupv3_wrap0_s1_clk_src", };
.parent_data = gcc_parents_0,
.num_parents = ARRAY_SIZE(gcc_parents_0), static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
.flags = CLK_SET_RATE_PARENT, .name = "gcc_qupv3_wrap0_s2_clk_src",
.ops = &clk_rcg2_ops, .parent_data = gcc_parents_0,
}, .num_parents = ARRAY_SIZE(gcc_parents_0),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops,
}; };
static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = { static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
@ -645,13 +652,15 @@ static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = gcc_parent_map_0, .parent_map = gcc_parent_map_0,
.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
.clkr.hw.init = &(struct clk_init_data){ .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
.name = "gcc_qupv3_wrap0_s2_clk_src", };
.parent_data = gcc_parents_0,
.num_parents = ARRAY_SIZE(gcc_parents_0), static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
.flags = CLK_SET_RATE_PARENT, .name = "gcc_qupv3_wrap0_s3_clk_src",
.ops = &clk_rcg2_ops, .parent_data = gcc_parents_0,
}, .num_parents = ARRAY_SIZE(gcc_parents_0),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops,
}; };
static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = { static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
@ -660,13 +669,15 @@ static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = gcc_parent_map_0, .parent_map = gcc_parent_map_0,
.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
.clkr.hw.init = &(struct clk_init_data){ .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
.name = "gcc_qupv3_wrap0_s3_clk_src", };
.parent_data = gcc_parents_0,
.num_parents = ARRAY_SIZE(gcc_parents_0), static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
.flags = CLK_SET_RATE_PARENT, .name = "gcc_qupv3_wrap0_s4_clk_src",
.ops = &clk_rcg2_ops, .parent_data = gcc_parents_0,
}, .num_parents = ARRAY_SIZE(gcc_parents_0),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops,
}; };
static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = { static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
@ -675,13 +686,15 @@ static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = gcc_parent_map_0, .parent_map = gcc_parent_map_0,
.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
.clkr.hw.init = &(struct clk_init_data){ .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
.name = "gcc_qupv3_wrap0_s4_clk_src", };
.parent_data = gcc_parents_0,
.num_parents = ARRAY_SIZE(gcc_parents_0), static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
.flags = CLK_SET_RATE_PARENT, .name = "gcc_qupv3_wrap0_s5_clk_src",
.ops = &clk_rcg2_ops, .parent_data = gcc_parents_0,
}, .num_parents = ARRAY_SIZE(gcc_parents_0),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops,
}; };
static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = { static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
@ -690,13 +703,15 @@ static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = gcc_parent_map_0, .parent_map = gcc_parent_map_0,
.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
.clkr.hw.init = &(struct clk_init_data){ .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
.name = "gcc_qupv3_wrap0_s5_clk_src", };
.parent_data = gcc_parents_0,
.num_parents = ARRAY_SIZE(gcc_parents_0), static struct clk_init_data gcc_qupv3_wrap0_s6_clk_src_init = {
.flags = CLK_SET_RATE_PARENT, .name = "gcc_qupv3_wrap0_s6_clk_src",
.ops = &clk_rcg2_ops, .parent_data = gcc_parents_0,
}, .num_parents = ARRAY_SIZE(gcc_parents_0),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops,
}; };
static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = { static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
@ -705,13 +720,15 @@ static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = gcc_parent_map_0, .parent_map = gcc_parent_map_0,
.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
.clkr.hw.init = &(struct clk_init_data){ .clkr.hw.init = &gcc_qupv3_wrap0_s6_clk_src_init,
.name = "gcc_qupv3_wrap0_s6_clk_src", };
.parent_data = gcc_parents_0,
.num_parents = ARRAY_SIZE(gcc_parents_0), static struct clk_init_data gcc_qupv3_wrap0_s7_clk_src_init = {
.flags = CLK_SET_RATE_PARENT, .name = "gcc_qupv3_wrap0_s7_clk_src",
.ops = &clk_rcg2_ops, .parent_data = gcc_parents_0,
}, .num_parents = ARRAY_SIZE(gcc_parents_0),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops,
}; };
static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = { static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
@ -720,13 +737,15 @@ static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = gcc_parent_map_0, .parent_map = gcc_parent_map_0,
.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
.clkr.hw.init = &(struct clk_init_data){ .clkr.hw.init = &gcc_qupv3_wrap0_s7_clk_src_init,
.name = "gcc_qupv3_wrap0_s7_clk_src", };
.parent_data = gcc_parents_0,
.num_parents = ARRAY_SIZE(gcc_parents_0), static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
.flags = CLK_SET_RATE_PARENT, .name = "gcc_qupv3_wrap1_s0_clk_src",
.ops = &clk_rcg2_ops, .parent_data = gcc_parents_0,
}, .num_parents = ARRAY_SIZE(gcc_parents_0),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops,
}; };
static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = { static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
@ -735,13 +754,15 @@ static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = gcc_parent_map_0, .parent_map = gcc_parent_map_0,
.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
.clkr.hw.init = &(struct clk_init_data){ .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
.name = "gcc_qupv3_wrap1_s0_clk_src", };
.parent_data = gcc_parents_0,
.num_parents = ARRAY_SIZE(gcc_parents_0), static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
.flags = CLK_SET_RATE_PARENT, .name = "gcc_qupv3_wrap1_s1_clk_src",
.ops = &clk_rcg2_ops, .parent_data = gcc_parents_0,
}, .num_parents = ARRAY_SIZE(gcc_parents_0),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops,
}; };
static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = { static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
@ -750,13 +771,15 @@ static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = gcc_parent_map_0, .parent_map = gcc_parent_map_0,
.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
.clkr.hw.init = &(struct clk_init_data){ .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
.name = "gcc_qupv3_wrap1_s1_clk_src", };
.parent_data = gcc_parents_0,
.num_parents = ARRAY_SIZE(gcc_parents_0), static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
.flags = CLK_SET_RATE_PARENT, .name = "gcc_qupv3_wrap1_s2_clk_src",
.ops = &clk_rcg2_ops, .parent_data = gcc_parents_0,
}, .num_parents = ARRAY_SIZE(gcc_parents_0),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops,
}; };
static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = { static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
@ -765,13 +788,15 @@ static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = gcc_parent_map_0, .parent_map = gcc_parent_map_0,
.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
.clkr.hw.init = &(struct clk_init_data){ .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
.name = "gcc_qupv3_wrap1_s2_clk_src", };
.parent_data = gcc_parents_0,
.num_parents = ARRAY_SIZE(gcc_parents_0), static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
.flags = CLK_SET_RATE_PARENT, .name = "gcc_qupv3_wrap1_s3_clk_src",
.ops = &clk_rcg2_ops, .parent_data = gcc_parents_0,
}, .num_parents = ARRAY_SIZE(gcc_parents_0),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops,
}; };
static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = { static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
@ -780,13 +805,15 @@ static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = gcc_parent_map_0, .parent_map = gcc_parent_map_0,
.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
.clkr.hw.init = &(struct clk_init_data){ .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
.name = "gcc_qupv3_wrap1_s3_clk_src", };
.parent_data = gcc_parents_0,
.num_parents = ARRAY_SIZE(gcc_parents_0), static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
.flags = CLK_SET_RATE_PARENT, .name = "gcc_qupv3_wrap1_s4_clk_src",
.ops = &clk_rcg2_ops, .parent_data = gcc_parents_0,
}, .num_parents = ARRAY_SIZE(gcc_parents_0),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops,
}; };
static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = { static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
@ -795,13 +822,15 @@ static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = gcc_parent_map_0, .parent_map = gcc_parent_map_0,
.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
.clkr.hw.init = &(struct clk_init_data){ .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
.name = "gcc_qupv3_wrap1_s4_clk_src", };
.parent_data = gcc_parents_0,
.num_parents = ARRAY_SIZE(gcc_parents_0), static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
.flags = CLK_SET_RATE_PARENT, .name = "gcc_qupv3_wrap1_s5_clk_src",
.ops = &clk_rcg2_ops, .parent_data = gcc_parents_0,
}, .num_parents = ARRAY_SIZE(gcc_parents_0),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops,
}; };
static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = { static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
@ -810,13 +839,15 @@ static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = gcc_parent_map_0, .parent_map = gcc_parent_map_0,
.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
.clkr.hw.init = &(struct clk_init_data){ .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
.name = "gcc_qupv3_wrap1_s5_clk_src", };
.parent_data = gcc_parents_0,
.num_parents = ARRAY_SIZE(gcc_parents_0), static struct clk_init_data gcc_qupv3_wrap2_s0_clk_src_init = {
.flags = CLK_SET_RATE_PARENT, .name = "gcc_qupv3_wrap2_s0_clk_src",
.ops = &clk_rcg2_ops, .parent_data = gcc_parents_0,
}, .num_parents = ARRAY_SIZE(gcc_parents_0),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops,
}; };
static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = { static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = {
@ -825,13 +856,15 @@ static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = gcc_parent_map_0, .parent_map = gcc_parent_map_0,
.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
.clkr.hw.init = &(struct clk_init_data){ .clkr.hw.init = &gcc_qupv3_wrap2_s0_clk_src_init,
.name = "gcc_qupv3_wrap2_s0_clk_src", };
.parent_data = gcc_parents_0,
.num_parents = ARRAY_SIZE(gcc_parents_0), static struct clk_init_data gcc_qupv3_wrap2_s1_clk_src_init = {
.flags = CLK_SET_RATE_PARENT, .name = "gcc_qupv3_wrap2_s1_clk_src",
.ops = &clk_rcg2_ops, .parent_data = gcc_parents_0,
}, .num_parents = ARRAY_SIZE(gcc_parents_0),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops,
}; };
static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = { static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = {
@ -840,28 +873,33 @@ static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = gcc_parent_map_0, .parent_map = gcc_parent_map_0,
.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
.clkr.hw.init = &(struct clk_init_data){ .clkr.hw.init = &gcc_qupv3_wrap2_s1_clk_src_init,
.name = "gcc_qupv3_wrap2_s1_clk_src",
.parent_data = gcc_parents_0,
.num_parents = ARRAY_SIZE(gcc_parents_0),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops,
},
}; };
static struct clk_init_data gcc_qupv3_wrap2_s2_clk_src_init = {
.name = "gcc_qupv3_wrap2_s2_clk_src",
.parent_data = gcc_parents_0,
.num_parents = ARRAY_SIZE(gcc_parents_0),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops,
};
static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = { static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = {
.cmd_rcgr = 0x1e3a8, .cmd_rcgr = 0x1e3a8,
.mnd_width = 16, .mnd_width = 16,
.hid_width = 5, .hid_width = 5,
.parent_map = gcc_parent_map_0, .parent_map = gcc_parent_map_0,
.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
.clkr.hw.init = &(struct clk_init_data){ .clkr.hw.init = &gcc_qupv3_wrap2_s2_clk_src_init,
.name = "gcc_qupv3_wrap2_s2_clk_src", };
.parent_data = gcc_parents_0,
.num_parents = ARRAY_SIZE(gcc_parents_0), static struct clk_init_data gcc_qupv3_wrap2_s3_clk_src_init = {
.flags = CLK_SET_RATE_PARENT, .name = "gcc_qupv3_wrap2_s3_clk_src",
.ops = &clk_rcg2_ops, .parent_data = gcc_parents_0,
}, .num_parents = ARRAY_SIZE(gcc_parents_0),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops,
}; };
static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = { static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = {
@ -870,13 +908,15 @@ static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = gcc_parent_map_0, .parent_map = gcc_parent_map_0,
.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
.clkr.hw.init = &(struct clk_init_data){ .clkr.hw.init = &gcc_qupv3_wrap2_s3_clk_src_init,
.name = "gcc_qupv3_wrap2_s3_clk_src", };
.parent_data = gcc_parents_0,
.num_parents = ARRAY_SIZE(gcc_parents_0), static struct clk_init_data gcc_qupv3_wrap2_s4_clk_src_init = {
.flags = CLK_SET_RATE_PARENT, .name = "gcc_qupv3_wrap2_s4_clk_src",
.ops = &clk_rcg2_ops, .parent_data = gcc_parents_0,
}, .num_parents = ARRAY_SIZE(gcc_parents_0),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops,
}; };
static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = { static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = {
@ -885,13 +925,15 @@ static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = gcc_parent_map_0, .parent_map = gcc_parent_map_0,
.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
.clkr.hw.init = &(struct clk_init_data){ .clkr.hw.init = &gcc_qupv3_wrap2_s4_clk_src_init,
.name = "gcc_qupv3_wrap2_s4_clk_src", };
.parent_data = gcc_parents_0,
.num_parents = ARRAY_SIZE(gcc_parents_0), static struct clk_init_data gcc_qupv3_wrap2_s5_clk_src_init = {
.flags = CLK_SET_RATE_PARENT, .name = "gcc_qupv3_wrap2_s5_clk_src",
.ops = &clk_rcg2_ops, .parent_data = gcc_parents_0,
}, .num_parents = ARRAY_SIZE(gcc_parents_0),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops,
}; };
static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = { static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = {
@ -900,13 +942,7 @@ static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = {
.hid_width = 5, .hid_width = 5,
.parent_map = gcc_parent_map_0, .parent_map = gcc_parent_map_0,
.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
.clkr.hw.init = &(struct clk_init_data){ .clkr.hw.init = &gcc_qupv3_wrap2_s5_clk_src_init,
.name = "gcc_qupv3_wrap2_s5_clk_src",
.parent_data = gcc_parents_0,
.num_parents = ARRAY_SIZE(gcc_parents_0),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops,
},
}; };
static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = { static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
@ -916,7 +952,7 @@ static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2), F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2),
F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0), F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0), F(202000000, P_GPLL9_OUT_MAIN, 4, 0, 0),
{ } { }
}; };
@ -939,9 +975,8 @@ static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
F(400000, P_BI_TCXO, 12, 1, 4), F(400000, P_BI_TCXO, 12, 1, 4),
F(9600000, P_BI_TCXO, 2, 0, 0), F(9600000, P_BI_TCXO, 2, 0, 0),
F(19200000, P_BI_TCXO, 1, 0, 0), F(19200000, P_BI_TCXO, 1, 0, 0),
F(37500000, P_GPLL0_OUT_MAIN, 16, 0, 0),
F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0), F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
F(75000000, P_GPLL0_OUT_MAIN, 8, 0, 0), F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
{ } { }
}; };
@ -1599,25 +1634,6 @@ static struct clk_branch gcc_cfg_noc_usb3_sec_axi_clk = {
}, },
}; };
/* For CPUSS functionality the AHB clock needs to be left enabled */
static struct clk_branch gcc_cpuss_ahb_clk = {
.halt_reg = 0x48000,
.halt_check = BRANCH_HALT_VOTED,
.clkr = {
.enable_reg = 0x52004,
.enable_mask = BIT(21),
.hw.init = &(struct clk_init_data){
.name = "gcc_cpuss_ahb_clk",
.parent_hws = (const struct clk_hw *[]){
&gcc_cpuss_ahb_clk_src.clkr.hw
},
.num_parents = 1,
.flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch gcc_cpuss_rbcpr_clk = { static struct clk_branch gcc_cpuss_rbcpr_clk = {
.halt_reg = 0x48008, .halt_reg = 0x48008,
.halt_check = BRANCH_HALT, .halt_check = BRANCH_HALT,
@ -3150,25 +3166,6 @@ static struct clk_branch gcc_sdcc4_apps_clk = {
}, },
}; };
/* For CPUSS functionality the SYS NOC clock needs to be left enabled */
static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
.halt_reg = 0x4819c,
.halt_check = BRANCH_HALT_VOTED,
.clkr = {
.enable_reg = 0x52004,
.enable_mask = BIT(0),
.hw.init = &(struct clk_init_data){
.name = "gcc_sys_noc_cpuss_ahb_clk",
.parent_hws = (const struct clk_hw *[]){
&gcc_cpuss_ahb_clk_src.clkr.hw
},
.num_parents = 1,
.flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch gcc_tsif_ahb_clk = { static struct clk_branch gcc_tsif_ahb_clk = {
.halt_reg = 0x36004, .halt_reg = 0x36004,
.halt_check = BRANCH_HALT, .halt_check = BRANCH_HALT,
@ -4284,8 +4281,6 @@ static struct clk_regmap *gcc_sc8180x_clocks[] = {
[GCC_CFG_NOC_USB3_MP_AXI_CLK] = &gcc_cfg_noc_usb3_mp_axi_clk.clkr, [GCC_CFG_NOC_USB3_MP_AXI_CLK] = &gcc_cfg_noc_usb3_mp_axi_clk.clkr,
[GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr, [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
[GCC_CFG_NOC_USB3_SEC_AXI_CLK] = &gcc_cfg_noc_usb3_sec_axi_clk.clkr, [GCC_CFG_NOC_USB3_SEC_AXI_CLK] = &gcc_cfg_noc_usb3_sec_axi_clk.clkr,
[GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr,
[GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr,
[GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr, [GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr,
[GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr, [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
[GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr, [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
@ -4422,7 +4417,6 @@ static struct clk_regmap *gcc_sc8180x_clocks[] = {
[GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr, [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
[GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr, [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
[GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr, [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
[GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
[GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr, [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
[GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr, [GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr,
[GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr, [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
@ -4511,6 +4505,7 @@ static struct clk_regmap *gcc_sc8180x_clocks[] = {
[GPLL1] = &gpll1.clkr, [GPLL1] = &gpll1.clkr,
[GPLL4] = &gpll4.clkr, [GPLL4] = &gpll4.clkr,
[GPLL7] = &gpll7.clkr, [GPLL7] = &gpll7.clkr,
[GPLL9] = &gpll9.clkr,
}; };
static const struct qcom_reset_map gcc_sc8180x_resets[] = { static const struct qcom_reset_map gcc_sc8180x_resets[] = {
@ -4546,6 +4541,10 @@ static const struct qcom_reset_map gcc_sc8180x_resets[] = {
[GCC_USB3_PHY_SEC_BCR] = { 0x50018 }, [GCC_USB3_PHY_SEC_BCR] = { 0x50018 },
[GCC_USB3PHY_PHY_SEC_BCR] = { 0x5001c }, [GCC_USB3PHY_PHY_SEC_BCR] = { 0x5001c },
[GCC_USB3_DP_PHY_SEC_BCR] = { 0x50020 }, [GCC_USB3_DP_PHY_SEC_BCR] = { 0x50020 },
[GCC_USB3_UNIPHY_MP0_BCR] = { 0x50024 },
[GCC_USB3_UNIPHY_MP1_BCR] = { 0x50028 },
[GCC_USB3UNIPHY_PHY_MP0_BCR] = { 0x5002c },
[GCC_USB3UNIPHY_PHY_MP1_BCR] = { 0x50030 },
[GCC_SDCC2_BCR] = { 0x14000 }, [GCC_SDCC2_BCR] = { 0x14000 },
[GCC_SDCC4_BCR] = { 0x16000 }, [GCC_SDCC4_BCR] = { 0x16000 },
[GCC_TSIF_BCR] = { 0x36000 }, [GCC_TSIF_BCR] = { 0x36000 },
@ -4561,6 +4560,29 @@ static const struct qcom_reset_map gcc_sc8180x_resets[] = {
[GCC_VIDEO_AXI1_CLK_BCR] = { .reg = 0xb028, .bit = 2, .udelay = 150 }, [GCC_VIDEO_AXI1_CLK_BCR] = { .reg = 0xb028, .bit = 2, .udelay = 150 },
}; };
static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk_src),
DEFINE_RCG_DFS(gcc_qupv3_wrap0_s7_clk_src),
DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
DEFINE_RCG_DFS(gcc_qupv3_wrap2_s0_clk_src),
DEFINE_RCG_DFS(gcc_qupv3_wrap2_s1_clk_src),
DEFINE_RCG_DFS(gcc_qupv3_wrap2_s2_clk_src),
DEFINE_RCG_DFS(gcc_qupv3_wrap2_s3_clk_src),
DEFINE_RCG_DFS(gcc_qupv3_wrap2_s4_clk_src),
DEFINE_RCG_DFS(gcc_qupv3_wrap2_s5_clk_src),
};
static struct gdsc *gcc_sc8180x_gdscs[] = { static struct gdsc *gcc_sc8180x_gdscs[] = {
[EMAC_GDSC] = &emac_gdsc, [EMAC_GDSC] = &emac_gdsc,
[PCIE_0_GDSC] = &pcie_0_gdsc, [PCIE_0_GDSC] = &pcie_0_gdsc,
@ -4602,6 +4624,7 @@ MODULE_DEVICE_TABLE(of, gcc_sc8180x_match_table);
static int gcc_sc8180x_probe(struct platform_device *pdev) static int gcc_sc8180x_probe(struct platform_device *pdev)
{ {
struct regmap *regmap; struct regmap *regmap;
int ret;
regmap = qcom_cc_map(pdev, &gcc_sc8180x_desc); regmap = qcom_cc_map(pdev, &gcc_sc8180x_desc);
if (IS_ERR(regmap)) if (IS_ERR(regmap))
@ -4623,6 +4646,11 @@ static int gcc_sc8180x_probe(struct platform_device *pdev)
regmap_update_bits(regmap, 0x4d110, 0x3, 0x3); regmap_update_bits(regmap, 0x4d110, 0x3, 0x3);
regmap_update_bits(regmap, 0x71028, 0x3, 0x3); regmap_update_bits(regmap, 0x71028, 0x3, 0x3);
ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
ARRAY_SIZE(gcc_dfs_clocks));
if (ret)
return ret;
return qcom_cc_really_probe(&pdev->dev, &gcc_sc8180x_desc, regmap); return qcom_cc_really_probe(&pdev->dev, &gcc_sc8180x_desc, regmap);
} }

View File

@ -3226,7 +3226,7 @@ static struct gdsc pcie_0_gdsc = {
.pd = { .pd = {
.name = "pcie_0_gdsc", .name = "pcie_0_gdsc",
}, },
.pwrsts = PWRSTS_OFF_ON, .pwrsts = PWRSTS_RET_ON,
}; };
static struct gdsc pcie_1_gdsc = { static struct gdsc pcie_1_gdsc = {
@ -3234,7 +3234,7 @@ static struct gdsc pcie_1_gdsc = {
.pd = { .pd = {
.name = "pcie_1_gdsc", .name = "pcie_1_gdsc",
}, },
.pwrsts = PWRSTS_OFF_ON, .pwrsts = PWRSTS_RET_ON,
}; };
static struct gdsc pcie_2_gdsc = { static struct gdsc pcie_2_gdsc = {
@ -3242,7 +3242,7 @@ static struct gdsc pcie_2_gdsc = {
.pd = { .pd = {
.name = "pcie_2_gdsc", .name = "pcie_2_gdsc",
}, },
.pwrsts = PWRSTS_OFF_ON, .pwrsts = PWRSTS_RET_ON,
}; };
static struct gdsc ufs_card_gdsc = { static struct gdsc ufs_card_gdsc = {

View File

@ -2974,7 +2974,7 @@ static struct gdsc pcie_0_gdsc = {
.pd = { .pd = {
.name = "pcie_0_gdsc", .name = "pcie_0_gdsc",
}, },
.pwrsts = PWRSTS_OFF_ON, .pwrsts = PWRSTS_RET_ON,
}; };
static struct gdsc pcie_1_gdsc = { static struct gdsc pcie_1_gdsc = {
@ -2982,7 +2982,7 @@ static struct gdsc pcie_1_gdsc = {
.pd = { .pd = {
.name = "pcie_1_gdsc", .name = "pcie_1_gdsc",
}, },
.pwrsts = PWRSTS_OFF_ON, .pwrsts = PWRSTS_RET_ON,
}; };
static struct gdsc ufs_phy_gdsc = { static struct gdsc ufs_phy_gdsc = {

View File

@ -0,0 +1,805 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved.
*/
#include <linux/clk-provider.h>
#include <linux/module.h>
#include <linux/mod_devicetable.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>
#include <dt-bindings/clock/qcom,sm4450-gpucc.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 "common.h"
#include "gdsc.h"
#include "reset.h"
enum {
DT_BI_TCXO,
DT_GPLL0_OUT_MAIN,
DT_GPLL0_OUT_MAIN_DIV,
};
enum {
P_BI_TCXO,
P_GPLL0_OUT_MAIN,
P_GPLL0_OUT_MAIN_DIV,
P_GPU_CC_PLL0_OUT_EVEN,
P_GPU_CC_PLL0_OUT_MAIN,
P_GPU_CC_PLL0_OUT_ODD,
P_GPU_CC_PLL1_OUT_EVEN,
P_GPU_CC_PLL1_OUT_MAIN,
P_GPU_CC_PLL1_OUT_ODD,
};
static const struct pll_vco lucid_evo_vco[] = {
{ 249600000, 2020000000, 0 },
};
/* 680.0 MHz Configuration */
static const struct alpha_pll_config gpu_cc_pll0_config = {
.l = 0x23,
.alpha = 0x6aaa,
.config_ctl_val = 0x20485699,
.config_ctl_hi_val = 0x00182261,
.config_ctl_hi1_val = 0x32aa299c,
.user_ctl_val = 0x00000000,
.user_ctl_hi_val = 0x00000805,
};
static struct clk_alpha_pll gpu_cc_pll0 = {
.offset = 0x0,
.vco_table = lucid_evo_vco,
.num_vco = ARRAY_SIZE(lucid_evo_vco),
.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
.clkr = {
.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_pll0",
.parent_data = &(const struct clk_parent_data) {
.index = DT_BI_TCXO,
},
.num_parents = 1,
.ops = &clk_alpha_pll_lucid_evo_ops,
},
},
};
/* 500.0 MHz Configuration */
static const struct alpha_pll_config gpu_cc_pll1_config = {
.l = 0x1a,
.alpha = 0xaaa,
.config_ctl_val = 0x20485699,
.config_ctl_hi_val = 0x00182261,
.config_ctl_hi1_val = 0x32aa299c,
.user_ctl_val = 0x00000000,
.user_ctl_hi_val = 0x00000805,
};
static struct clk_alpha_pll gpu_cc_pll1 = {
.offset = 0x1000,
.vco_table = lucid_evo_vco,
.num_vco = ARRAY_SIZE(lucid_evo_vco),
.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
.clkr = {
.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_pll1",
.parent_data = &(const struct clk_parent_data) {
.index = DT_BI_TCXO,
},
.num_parents = 1,
.ops = &clk_alpha_pll_lucid_evo_ops,
},
},
};
static const struct parent_map gpu_cc_parent_map_0[] = {
{ P_BI_TCXO, 0 },
{ P_GPLL0_OUT_MAIN, 5 },
{ P_GPLL0_OUT_MAIN_DIV, 6 },
};
static const struct clk_parent_data gpu_cc_parent_data_0[] = {
{ .index = DT_BI_TCXO },
{ .index = DT_GPLL0_OUT_MAIN },
{ .index = DT_GPLL0_OUT_MAIN_DIV },
};
static const struct parent_map gpu_cc_parent_map_1[] = {
{ P_BI_TCXO, 0 },
{ P_GPU_CC_PLL0_OUT_MAIN, 1 },
{ P_GPU_CC_PLL1_OUT_MAIN, 3 },
{ P_GPLL0_OUT_MAIN, 5 },
{ P_GPLL0_OUT_MAIN_DIV, 6 },
};
static const struct clk_parent_data gpu_cc_parent_data_1[] = {
{ .index = DT_BI_TCXO },
{ .hw = &gpu_cc_pll0.clkr.hw },
{ .hw = &gpu_cc_pll1.clkr.hw },
{ .index = DT_GPLL0_OUT_MAIN },
{ .index = DT_GPLL0_OUT_MAIN_DIV },
};
static const struct parent_map gpu_cc_parent_map_2[] = {
{ P_BI_TCXO, 0 },
{ P_GPU_CC_PLL0_OUT_EVEN, 1 },
{ P_GPU_CC_PLL0_OUT_ODD, 2 },
{ P_GPU_CC_PLL1_OUT_EVEN, 3 },
{ P_GPU_CC_PLL1_OUT_ODD, 4 },
{ P_GPLL0_OUT_MAIN, 5 },
};
static const struct clk_parent_data gpu_cc_parent_data_2[] = {
{ .index = DT_BI_TCXO },
{ .hw = &gpu_cc_pll0.clkr.hw },
{ .hw = &gpu_cc_pll0.clkr.hw },
{ .hw = &gpu_cc_pll1.clkr.hw },
{ .hw = &gpu_cc_pll1.clkr.hw },
{ .index = DT_GPLL0_OUT_MAIN },
};
static const struct parent_map gpu_cc_parent_map_3[] = {
{ P_BI_TCXO, 0 },
{ P_GPU_CC_PLL1_OUT_MAIN, 3 },
{ P_GPLL0_OUT_MAIN, 5 },
{ P_GPLL0_OUT_MAIN_DIV, 6 },
};
static const struct clk_parent_data gpu_cc_parent_data_3[] = {
{ .index = DT_BI_TCXO },
{ .hw = &gpu_cc_pll1.clkr.hw },
{ .index = DT_GPLL0_OUT_MAIN },
{ .index = DT_GPLL0_OUT_MAIN_DIV },
};
static const struct parent_map gpu_cc_parent_map_4[] = {
{ P_BI_TCXO, 0 },
};
static const struct clk_parent_data gpu_cc_parent_data_4[] = {
{ .index = DT_BI_TCXO },
};
static const struct freq_tbl ftbl_gpu_cc_ff_clk_src[] = {
F(200000000, P_GPLL0_OUT_MAIN_DIV, 1.5, 0, 0),
{ }
};
static struct clk_rcg2 gpu_cc_ff_clk_src = {
.cmd_rcgr = 0x9474,
.mnd_width = 0,
.hid_width = 5,
.parent_map = gpu_cc_parent_map_0,
.freq_tbl = ftbl_gpu_cc_ff_clk_src,
.clkr.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_ff_clk_src",
.parent_data = gpu_cc_parent_data_0,
.num_parents = ARRAY_SIZE(gpu_cc_parent_data_0),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_shared_ops,
},
};
static struct clk_rcg2 gpu_cc_gmu_clk_src = {
.cmd_rcgr = 0x9318,
.mnd_width = 0,
.hid_width = 5,
.parent_map = gpu_cc_parent_map_1,
.freq_tbl = ftbl_gpu_cc_ff_clk_src,
.clkr.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_gmu_clk_src",
.parent_data = gpu_cc_parent_data_1,
.num_parents = ARRAY_SIZE(gpu_cc_parent_data_1),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_shared_ops,
},
};
static const struct freq_tbl ftbl_gpu_cc_gx_gfx3d_clk_src[] = {
F(340000000, P_GPU_CC_PLL0_OUT_EVEN, 2, 0, 0),
F(500000000, P_GPU_CC_PLL0_OUT_EVEN, 2, 0, 0),
F(605000000, P_GPU_CC_PLL0_OUT_EVEN, 2, 0, 0),
F(765000000, P_GPU_CC_PLL0_OUT_EVEN, 2, 0, 0),
F(850000000, P_GPU_CC_PLL0_OUT_EVEN, 2, 0, 0),
F(955000000, P_GPU_CC_PLL0_OUT_EVEN, 2, 0, 0),
F(1010000000, P_GPU_CC_PLL0_OUT_EVEN, 2, 0, 0),
{ }
};
static struct clk_rcg2 gpu_cc_gx_gfx3d_clk_src = {
.cmd_rcgr = 0x9070,
.mnd_width = 0,
.hid_width = 5,
.parent_map = gpu_cc_parent_map_2,
.freq_tbl = ftbl_gpu_cc_gx_gfx3d_clk_src,
.clkr.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_gx_gfx3d_clk_src",
.parent_data = gpu_cc_parent_data_2,
.num_parents = ARRAY_SIZE(gpu_cc_parent_data_2),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_shared_ops,
},
};
static const struct freq_tbl ftbl_gpu_cc_hub_clk_src[] = {
F(150000000, P_GPLL0_OUT_MAIN_DIV, 2, 0, 0),
{ }
};
static struct clk_rcg2 gpu_cc_hub_clk_src = {
.cmd_rcgr = 0x93ec,
.mnd_width = 0,
.hid_width = 5,
.parent_map = gpu_cc_parent_map_3,
.freq_tbl = ftbl_gpu_cc_hub_clk_src,
.clkr.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_hub_clk_src",
.parent_data = gpu_cc_parent_data_3,
.num_parents = ARRAY_SIZE(gpu_cc_parent_data_3),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_shared_ops,
},
};
static const struct freq_tbl ftbl_gpu_cc_xo_clk_src[] = {
F(19200000, P_BI_TCXO, 1, 0, 0),
{ }
};
static struct clk_rcg2 gpu_cc_xo_clk_src = {
.cmd_rcgr = 0x9010,
.mnd_width = 0,
.hid_width = 5,
.parent_map = gpu_cc_parent_map_4,
.freq_tbl = ftbl_gpu_cc_xo_clk_src,
.clkr.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_xo_clk_src",
.parent_data = gpu_cc_parent_data_4,
.num_parents = ARRAY_SIZE(gpu_cc_parent_data_4),
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_shared_ops,
},
};
static struct clk_regmap_div gpu_cc_demet_div_clk_src = {
.reg = 0x9054,
.shift = 0,
.width = 4,
.clkr.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_demet_div_clk_src",
.parent_hws = (const struct clk_hw*[]) {
&gpu_cc_xo_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_regmap_div_ro_ops,
},
};
static struct clk_regmap_div gpu_cc_hub_ahb_div_clk_src = {
.reg = 0x9430,
.shift = 0,
.width = 4,
.clkr.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_hub_ahb_div_clk_src",
.parent_hws = (const struct clk_hw*[]) {
&gpu_cc_hub_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_regmap_div_ro_ops,
},
};
static struct clk_regmap_div gpu_cc_hub_cx_int_div_clk_src = {
.reg = 0x942c,
.shift = 0,
.width = 4,
.clkr.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_hub_cx_int_div_clk_src",
.parent_hws = (const struct clk_hw*[]) {
&gpu_cc_hub_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_regmap_div_ro_ops,
},
};
static struct clk_regmap_div gpu_cc_xo_div_clk_src = {
.reg = 0x9050,
.shift = 0,
.width = 4,
.clkr.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_xo_div_clk_src",
.parent_hws = (const struct clk_hw*[]) {
&gpu_cc_xo_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_regmap_div_ro_ops,
},
};
static struct clk_branch gpu_cc_ahb_clk = {
.halt_reg = 0x911c,
.halt_check = BRANCH_HALT_DELAY,
.clkr = {
.enable_reg = 0x911c,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_ahb_clk",
.parent_hws = (const struct clk_hw*[]) {
&gpu_cc_hub_ahb_div_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch gpu_cc_crc_ahb_clk = {
.halt_reg = 0x9120,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x9120,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_crc_ahb_clk",
.parent_hws = (const struct clk_hw*[]) {
&gpu_cc_hub_ahb_div_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch gpu_cc_cx_ff_clk = {
.halt_reg = 0x914c,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x914c,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_cx_ff_clk",
.parent_hws = (const struct clk_hw*[]) {
&gpu_cc_ff_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch gpu_cc_cx_gfx3d_clk = {
.halt_reg = 0x919c,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x919c,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_cx_gfx3d_clk",
.parent_hws = (const struct clk_hw*[]) {
&gpu_cc_gx_gfx3d_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch gpu_cc_cx_gfx3d_slv_clk = {
.halt_reg = 0x91a0,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x91a0,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_cx_gfx3d_slv_clk",
.parent_hws = (const struct clk_hw*[]) {
&gpu_cc_gx_gfx3d_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch gpu_cc_cx_gmu_clk = {
.halt_reg = 0x913c,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x913c,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_cx_gmu_clk",
.parent_hws = (const struct clk_hw*[]) {
&gpu_cc_gmu_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_aon_ops,
},
},
};
static struct clk_branch gpu_cc_cx_snoc_dvm_clk = {
.halt_reg = 0x9130,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x9130,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_cx_snoc_dvm_clk",
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch gpu_cc_cxo_clk = {
.halt_reg = 0x9144,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x9144,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_cxo_clk",
.parent_hws = (const struct clk_hw*[]) {
&gpu_cc_xo_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch gpu_cc_freq_measure_clk = {
.halt_reg = 0x9008,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x9008,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_freq_measure_clk",
.parent_hws = (const struct clk_hw*[]) {
&gpu_cc_xo_div_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch gpu_cc_gx_cxo_clk = {
.halt_reg = 0x90b8,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x90b8,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_gx_cxo_clk",
.parent_hws = (const struct clk_hw*[]) {
&gpu_cc_xo_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch gpu_cc_gx_ff_clk = {
.halt_reg = 0x90c0,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x90c0,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_gx_ff_clk",
.parent_hws = (const struct clk_hw*[]) {
&gpu_cc_ff_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch gpu_cc_gx_gfx3d_clk = {
.halt_reg = 0x90a8,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x90a8,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_gx_gfx3d_clk",
.parent_hws = (const struct clk_hw*[]) {
&gpu_cc_gx_gfx3d_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch gpu_cc_gx_gfx3d_rdvm_clk = {
.halt_reg = 0x90c8,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x90c8,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_gx_gfx3d_rdvm_clk",
.parent_hws = (const struct clk_hw*[]) {
&gpu_cc_gx_gfx3d_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch gpu_cc_gx_gmu_clk = {
.halt_reg = 0x90bc,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x90bc,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_gx_gmu_clk",
.parent_hws = (const struct clk_hw*[]) {
&gpu_cc_gmu_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch gpu_cc_gx_vsense_clk = {
.halt_reg = 0x90b0,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x90b0,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_gx_vsense_clk",
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch gpu_cc_hub_aon_clk = {
.halt_reg = 0x93e8,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x93e8,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_hub_aon_clk",
.parent_hws = (const struct clk_hw*[]) {
&gpu_cc_hub_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_aon_ops,
},
},
};
static struct clk_branch gpu_cc_hub_cx_int_clk = {
.halt_reg = 0x9148,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x9148,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_hub_cx_int_clk",
.parent_hws = (const struct clk_hw*[]) {
&gpu_cc_hub_cx_int_div_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_aon_ops,
},
},
};
static struct clk_branch gpu_cc_memnoc_gfx_clk = {
.halt_reg = 0x9150,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x9150,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_memnoc_gfx_clk",
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch gpu_cc_mnd1x_0_gfx3d_clk = {
.halt_reg = 0x9288,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x9288,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_mnd1x_0_gfx3d_clk",
.parent_hws = (const struct clk_hw*[]) {
&gpu_cc_gx_gfx3d_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
};
static struct clk_branch gpu_cc_sleep_clk = {
.halt_reg = 0x9134,
.halt_check = BRANCH_HALT,
.clkr = {
.enable_reg = 0x9134,
.enable_mask = BIT(0),
.hw.init = &(const struct clk_init_data) {
.name = "gpu_cc_sleep_clk",
.ops = &clk_branch2_ops,
},
},
};
static struct gdsc gpu_cc_cx_gdsc = {
.gdscr = 0x9108,
.gds_hw_ctrl = 0x953c,
.clk_dis_wait_val = 8,
.pd = {
.name = "gpu_cx_gdsc",
},
.pwrsts = PWRSTS_OFF_ON,
.flags = VOTABLE | RETAIN_FF_ENABLE,
};
static struct gdsc gpu_cc_gx_gdsc = {
.gdscr = 0x905c,
.clamp_io_ctrl = 0x9504,
.resets = (unsigned int []){ GPU_CC_GX_BCR,
GPU_CC_ACD_BCR,
GPU_CC_GX_ACD_IROOT_BCR },
.reset_count = 3,
.pd = {
.name = "gpu_gx_gdsc",
.power_on = gdsc_gx_do_nothing_enable,
},
.pwrsts = PWRSTS_OFF_ON,
.flags = CLAMP_IO | AON_RESET | SW_RESET | POLL_CFG_GDSCR,
};
static struct clk_regmap *gpu_cc_sm4450_clocks[] = {
[GPU_CC_AHB_CLK] = &gpu_cc_ahb_clk.clkr,
[GPU_CC_CRC_AHB_CLK] = &gpu_cc_crc_ahb_clk.clkr,
[GPU_CC_CX_FF_CLK] = &gpu_cc_cx_ff_clk.clkr,
[GPU_CC_CX_GFX3D_CLK] = &gpu_cc_cx_gfx3d_clk.clkr,
[GPU_CC_CX_GFX3D_SLV_CLK] = &gpu_cc_cx_gfx3d_slv_clk.clkr,
[GPU_CC_CX_GMU_CLK] = &gpu_cc_cx_gmu_clk.clkr,
[GPU_CC_CX_SNOC_DVM_CLK] = &gpu_cc_cx_snoc_dvm_clk.clkr,
[GPU_CC_CXO_CLK] = &gpu_cc_cxo_clk.clkr,
[GPU_CC_DEMET_DIV_CLK_SRC] = &gpu_cc_demet_div_clk_src.clkr,
[GPU_CC_FF_CLK_SRC] = &gpu_cc_ff_clk_src.clkr,
[GPU_CC_FREQ_MEASURE_CLK] = &gpu_cc_freq_measure_clk.clkr,
[GPU_CC_GMU_CLK_SRC] = &gpu_cc_gmu_clk_src.clkr,
[GPU_CC_GX_CXO_CLK] = &gpu_cc_gx_cxo_clk.clkr,
[GPU_CC_GX_FF_CLK] = &gpu_cc_gx_ff_clk.clkr,
[GPU_CC_GX_GFX3D_CLK] = &gpu_cc_gx_gfx3d_clk.clkr,
[GPU_CC_GX_GFX3D_CLK_SRC] = &gpu_cc_gx_gfx3d_clk_src.clkr,
[GPU_CC_GX_GFX3D_RDVM_CLK] = &gpu_cc_gx_gfx3d_rdvm_clk.clkr,
[GPU_CC_GX_GMU_CLK] = &gpu_cc_gx_gmu_clk.clkr,
[GPU_CC_GX_VSENSE_CLK] = &gpu_cc_gx_vsense_clk.clkr,
[GPU_CC_HUB_AHB_DIV_CLK_SRC] = &gpu_cc_hub_ahb_div_clk_src.clkr,
[GPU_CC_HUB_AON_CLK] = &gpu_cc_hub_aon_clk.clkr,
[GPU_CC_HUB_CLK_SRC] = &gpu_cc_hub_clk_src.clkr,
[GPU_CC_HUB_CX_INT_CLK] = &gpu_cc_hub_cx_int_clk.clkr,
[GPU_CC_HUB_CX_INT_DIV_CLK_SRC] = &gpu_cc_hub_cx_int_div_clk_src.clkr,
[GPU_CC_MEMNOC_GFX_CLK] = &gpu_cc_memnoc_gfx_clk.clkr,
[GPU_CC_MND1X_0_GFX3D_CLK] = &gpu_cc_mnd1x_0_gfx3d_clk.clkr,
[GPU_CC_PLL0] = &gpu_cc_pll0.clkr,
[GPU_CC_PLL1] = &gpu_cc_pll1.clkr,
[GPU_CC_SLEEP_CLK] = &gpu_cc_sleep_clk.clkr,
[GPU_CC_XO_CLK_SRC] = &gpu_cc_xo_clk_src.clkr,
[GPU_CC_XO_DIV_CLK_SRC] = &gpu_cc_xo_div_clk_src.clkr,
};
static struct gdsc *gpu_cc_sm4450_gdscs[] = {
[GPU_CC_CX_GDSC] = &gpu_cc_cx_gdsc,
[GPU_CC_GX_GDSC] = &gpu_cc_gx_gdsc,
};
static const struct qcom_reset_map gpu_cc_sm4450_resets[] = {
[GPU_CC_CB_BCR] = { 0x93a0 },
[GPU_CC_CX_BCR] = { 0x9104 },
[GPU_CC_GX_BCR] = { 0x9058 },
[GPU_CC_FAST_HUB_BCR] = { 0x93e4 },
[GPU_CC_ACD_BCR] = { 0x9358 },
[GPU_CC_FF_BCR] = { 0x9470 },
[GPU_CC_GFX3D_AON_BCR] = { 0x9198 },
[GPU_CC_GMU_BCR] = { 0x9314 },
[GPU_CC_RBCPR_BCR] = { 0x91e0 },
[GPU_CC_XO_BCR] = { 0x9000 },
[GPU_CC_GX_ACD_IROOT_BCR] = { 0x958c },
};
static const struct regmap_config gpu_cc_sm4450_regmap_config = {
.reg_bits = 32,
.reg_stride = 4,
.val_bits = 32,
.max_register = 0x95c0,
.fast_io = true,
};
static const struct qcom_cc_desc gpu_cc_sm4450_desc = {
.config = &gpu_cc_sm4450_regmap_config,
.clks = gpu_cc_sm4450_clocks,
.num_clks = ARRAY_SIZE(gpu_cc_sm4450_clocks),
.resets = gpu_cc_sm4450_resets,
.num_resets = ARRAY_SIZE(gpu_cc_sm4450_resets),
.gdscs = gpu_cc_sm4450_gdscs,
.num_gdscs = ARRAY_SIZE(gpu_cc_sm4450_gdscs),
};
static const struct of_device_id gpu_cc_sm4450_match_table[] = {
{ .compatible = "qcom,sm4450-gpucc" },
{ }
};
MODULE_DEVICE_TABLE(of, gpu_cc_sm4450_match_table);
static int gpu_cc_sm4450_probe(struct platform_device *pdev)
{
struct regmap *regmap;
regmap = qcom_cc_map(pdev, &gpu_cc_sm4450_desc);
if (IS_ERR(regmap))
return PTR_ERR(regmap);
clk_lucid_evo_pll_configure(&gpu_cc_pll0, regmap, &gpu_cc_pll0_config);
clk_lucid_evo_pll_configure(&gpu_cc_pll1, regmap, &gpu_cc_pll1_config);
/* Keep some clocks always enabled */
qcom_branch_set_clk_en(regmap, 0x93a4); /* GPU_CC_CB_CLK */
qcom_branch_set_clk_en(regmap, 0x9004); /* GPU_CC_CXO_AON_CLK */
qcom_branch_set_clk_en(regmap, 0x900c); /* GPU_CC_DEMET_CLK */
return qcom_cc_really_probe(&pdev->dev, &gpu_cc_sm4450_desc, regmap);
}
static struct platform_driver gpu_cc_sm4450_driver = {
.probe = gpu_cc_sm4450_probe,
.driver = {
.name = "gpucc-sm4450",
.of_match_table = gpu_cc_sm4450_match_table,
},
};
module_platform_driver(gpu_cc_sm4450_driver);
MODULE_DESCRIPTION("QTI GPUCC SM4450 Driver");
MODULE_LICENSE("GPL");

View File

@ -70,7 +70,7 @@ static const struct clk_parent_data lcc_pxo_pll4[] = {
{ .fw_name = "pll4_vote", .name = "pll4_vote" }, { .fw_name = "pll4_vote", .name = "pll4_vote" },
}; };
static struct freq_tbl clk_tbl_aif_mi2s[] = { static const struct freq_tbl clk_tbl_aif_mi2s[] = {
{ 1024000, P_PLL4, 4, 1, 96 }, { 1024000, P_PLL4, 4, 1, 96 },
{ 1411200, P_PLL4, 4, 2, 139 }, { 1411200, P_PLL4, 4, 2, 139 },
{ 1536000, P_PLL4, 4, 1, 64 }, { 1536000, P_PLL4, 4, 1, 64 },
@ -214,7 +214,7 @@ static struct clk_regmap_mux mi2s_bit_clk = {
}, },
}; };
static struct freq_tbl clk_tbl_pcm[] = { static const struct freq_tbl clk_tbl_pcm[] = {
{ 64000, P_PLL4, 4, 1, 1536 }, { 64000, P_PLL4, 4, 1, 1536 },
{ 128000, P_PLL4, 4, 1, 768 }, { 128000, P_PLL4, 4, 1, 768 },
{ 256000, P_PLL4, 4, 1, 384 }, { 256000, P_PLL4, 4, 1, 384 },
@ -296,7 +296,7 @@ static struct clk_regmap_mux pcm_clk = {
}, },
}; };
static struct freq_tbl clk_tbl_aif_osr[] = { static const struct freq_tbl clk_tbl_aif_osr[] = {
{ 2822400, P_PLL4, 1, 147, 20480 }, { 2822400, P_PLL4, 1, 147, 20480 },
{ 4096000, P_PLL4, 1, 1, 96 }, { 4096000, P_PLL4, 1, 1, 96 },
{ 5644800, P_PLL4, 1, 147, 10240 }, { 5644800, P_PLL4, 1, 147, 10240 },
@ -360,7 +360,7 @@ static struct clk_branch spdif_clk = {
}, },
}; };
static struct freq_tbl clk_tbl_ahbix[] = { static const struct freq_tbl clk_tbl_ahbix[] = {
{ 131072000, P_PLL4, 1, 1, 3 }, { 131072000, P_PLL4, 1, 1, 3 },
{ }, { },
}; };

View File

@ -57,7 +57,7 @@ static struct clk_parent_data lcc_pxo_pll4[] = {
{ .fw_name = "pll4_vote", .name = "pll4_vote" }, { .fw_name = "pll4_vote", .name = "pll4_vote" },
}; };
static struct freq_tbl clk_tbl_aif_osr_492[] = { static const struct freq_tbl clk_tbl_aif_osr_492[] = {
{ 512000, P_PLL4, 4, 1, 240 }, { 512000, P_PLL4, 4, 1, 240 },
{ 768000, P_PLL4, 4, 1, 160 }, { 768000, P_PLL4, 4, 1, 160 },
{ 1024000, P_PLL4, 4, 1, 120 }, { 1024000, P_PLL4, 4, 1, 120 },
@ -73,7 +73,7 @@ static struct freq_tbl clk_tbl_aif_osr_492[] = {
{ } { }
}; };
static struct freq_tbl clk_tbl_aif_osr_393[] = { static const struct freq_tbl clk_tbl_aif_osr_393[] = {
{ 512000, P_PLL4, 4, 1, 192 }, { 512000, P_PLL4, 4, 1, 192 },
{ 768000, P_PLL4, 4, 1, 128 }, { 768000, P_PLL4, 4, 1, 128 },
{ 1024000, P_PLL4, 4, 1, 96 }, { 1024000, P_PLL4, 4, 1, 96 },
@ -218,7 +218,7 @@ CLK_AIF_OSR_DIV(spare_i2s_mic, 0x78, 0x7c, 0x80);
CLK_AIF_OSR_DIV(codec_i2s_spkr, 0x6c, 0x70, 0x74); CLK_AIF_OSR_DIV(codec_i2s_spkr, 0x6c, 0x70, 0x74);
CLK_AIF_OSR_DIV(spare_i2s_spkr, 0x84, 0x88, 0x8c); CLK_AIF_OSR_DIV(spare_i2s_spkr, 0x84, 0x88, 0x8c);
static struct freq_tbl clk_tbl_pcm_492[] = { static const struct freq_tbl clk_tbl_pcm_492[] = {
{ 256000, P_PLL4, 4, 1, 480 }, { 256000, P_PLL4, 4, 1, 480 },
{ 512000, P_PLL4, 4, 1, 240 }, { 512000, P_PLL4, 4, 1, 240 },
{ 768000, P_PLL4, 4, 1, 160 }, { 768000, P_PLL4, 4, 1, 160 },
@ -235,7 +235,7 @@ static struct freq_tbl clk_tbl_pcm_492[] = {
{ } { }
}; };
static struct freq_tbl clk_tbl_pcm_393[] = { static const struct freq_tbl clk_tbl_pcm_393[] = {
{ 256000, P_PLL4, 4, 1, 384 }, { 256000, P_PLL4, 4, 1, 384 },
{ 512000, P_PLL4, 4, 1, 192 }, { 512000, P_PLL4, 4, 1, 192 },
{ 768000, P_PLL4, 4, 1, 128 }, { 768000, P_PLL4, 4, 1, 128 },

View File

@ -338,7 +338,7 @@ static struct clk_rcg2 mmss_ahb_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_mmss_axi_clk[] = { static const struct freq_tbl ftbl_mmss_axi_clk[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
F(37500000, P_GPLL0, 16, 0, 0), F(37500000, P_GPLL0, 16, 0, 0),
F(50000000, P_GPLL0, 12, 0, 0), F(50000000, P_GPLL0, 12, 0, 0),
@ -364,7 +364,7 @@ static struct clk_rcg2 mmss_axi_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_ocmemnoc_clk[] = { static const struct freq_tbl ftbl_ocmemnoc_clk[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
F(37500000, P_GPLL0, 16, 0, 0), F(37500000, P_GPLL0, 16, 0, 0),
F(50000000, P_GPLL0, 12, 0, 0), F(50000000, P_GPLL0, 12, 0, 0),
@ -389,7 +389,7 @@ static struct clk_rcg2 ocmemnoc_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_camss_csi0_3_clk[] = { static const struct freq_tbl ftbl_camss_csi0_3_clk[] = {
F(100000000, P_GPLL0, 6, 0, 0), F(100000000, P_GPLL0, 6, 0, 0),
F(200000000, P_MMPLL0, 4, 0, 0), F(200000000, P_MMPLL0, 4, 0, 0),
{ } { }
@ -447,7 +447,7 @@ static struct clk_rcg2 csi3_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_camss_vfe_vfe0_1_clk[] = { static const struct freq_tbl ftbl_camss_vfe_vfe0_1_clk[] = {
F(37500000, P_GPLL0, 16, 0, 0), F(37500000, P_GPLL0, 16, 0, 0),
F(50000000, P_GPLL0, 12, 0, 0), F(50000000, P_GPLL0, 12, 0, 0),
F(60000000, P_GPLL0, 10, 0, 0), F(60000000, P_GPLL0, 10, 0, 0),
@ -490,7 +490,7 @@ static struct clk_rcg2 vfe1_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_mdss_mdp_clk[] = { static const struct freq_tbl ftbl_mdss_mdp_clk[] = {
F(37500000, P_GPLL0, 16, 0, 0), F(37500000, P_GPLL0, 16, 0, 0),
F(60000000, P_GPLL0, 10, 0, 0), F(60000000, P_GPLL0, 10, 0, 0),
F(75000000, P_GPLL0, 8, 0, 0), F(75000000, P_GPLL0, 8, 0, 0),
@ -530,7 +530,7 @@ static struct clk_rcg2 gfx3d_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_camss_jpeg_jpeg0_2_clk[] = { static const struct freq_tbl ftbl_camss_jpeg_jpeg0_2_clk[] = {
F(75000000, P_GPLL0, 8, 0, 0), F(75000000, P_GPLL0, 8, 0, 0),
F(133330000, P_GPLL0, 4.5, 0, 0), F(133330000, P_GPLL0, 4.5, 0, 0),
F(200000000, P_GPLL0, 3, 0, 0), F(200000000, P_GPLL0, 3, 0, 0),
@ -607,7 +607,7 @@ static struct clk_rcg2 pclk1_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_venus0_vcodec0_clk[] = { static const struct freq_tbl ftbl_venus0_vcodec0_clk[] = {
F(50000000, P_GPLL0, 12, 0, 0), F(50000000, P_GPLL0, 12, 0, 0),
F(100000000, P_GPLL0, 6, 0, 0), F(100000000, P_GPLL0, 6, 0, 0),
F(133330000, P_GPLL0, 4.5, 0, 0), F(133330000, P_GPLL0, 4.5, 0, 0),
@ -631,7 +631,7 @@ static struct clk_rcg2 vcodec0_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_avsync_vp_clk[] = { static const struct freq_tbl ftbl_avsync_vp_clk[] = {
F(150000000, P_GPLL0, 4, 0, 0), F(150000000, P_GPLL0, 4, 0, 0),
F(320000000, P_MMPLL0, 2.5, 0, 0), F(320000000, P_MMPLL0, 2.5, 0, 0),
{ } { }
@ -650,7 +650,7 @@ static struct clk_rcg2 vp_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_camss_cci_cci_clk[] = { static const struct freq_tbl ftbl_camss_cci_cci_clk[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
{ } { }
}; };
@ -669,7 +669,7 @@ static struct clk_rcg2 cci_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_camss_gp0_1_clk[] = { static const struct freq_tbl ftbl_camss_gp0_1_clk[] = {
F(10000, P_XO, 16, 1, 120), F(10000, P_XO, 16, 1, 120),
F(24000, P_XO, 16, 1, 50), F(24000, P_XO, 16, 1, 50),
F(6000000, P_GPLL0, 10, 1, 10), F(6000000, P_GPLL0, 10, 1, 10),
@ -707,7 +707,7 @@ static struct clk_rcg2 camss_gp1_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_camss_mclk0_3_clk[] = { static const struct freq_tbl ftbl_camss_mclk0_3_clk[] = {
F(4800000, P_XO, 4, 0, 0), F(4800000, P_XO, 4, 0, 0),
F(6000000, P_GPLL0, 10, 1, 10), F(6000000, P_GPLL0, 10, 1, 10),
F(8000000, P_GPLL0, 15, 1, 5), F(8000000, P_GPLL0, 15, 1, 5),
@ -777,7 +777,7 @@ static struct clk_rcg2 mclk3_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_camss_phy0_2_csi0_2phytimer_clk[] = { static const struct freq_tbl ftbl_camss_phy0_2_csi0_2phytimer_clk[] = {
F(100000000, P_GPLL0, 6, 0, 0), F(100000000, P_GPLL0, 6, 0, 0),
F(200000000, P_MMPLL0, 4, 0, 0), F(200000000, P_MMPLL0, 4, 0, 0),
{ } { }
@ -822,7 +822,7 @@ static struct clk_rcg2 csi2phytimer_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_camss_vfe_cpp_clk[] = { static const struct freq_tbl ftbl_camss_vfe_cpp_clk[] = {
F(133330000, P_GPLL0, 4.5, 0, 0), F(133330000, P_GPLL0, 4.5, 0, 0),
F(266670000, P_MMPLL0, 3, 0, 0), F(266670000, P_MMPLL0, 3, 0, 0),
F(320000000, P_MMPLL0, 2.5, 0, 0), F(320000000, P_MMPLL0, 2.5, 0, 0),
@ -871,7 +871,7 @@ static struct clk_rcg2 byte1_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_mdss_edpaux_clk[] = { static const struct freq_tbl ftbl_mdss_edpaux_clk[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
{ } { }
}; };
@ -889,7 +889,7 @@ static struct clk_rcg2 edpaux_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_mdss_edplink_clk[] = { static const struct freq_tbl ftbl_mdss_edplink_clk[] = {
F(135000000, P_EDPLINK, 2, 0, 0), F(135000000, P_EDPLINK, 2, 0, 0),
F(270000000, P_EDPLINK, 11, 0, 0), F(270000000, P_EDPLINK, 11, 0, 0),
{ } { }
@ -909,7 +909,7 @@ static struct clk_rcg2 edplink_clk_src = {
}, },
}; };
static struct freq_tbl edp_pixel_freq_tbl[] = { static const struct freq_tbl edp_pixel_freq_tbl[] = {
{ .src = P_EDPVCO }, { .src = P_EDPVCO },
{ } { }
}; };
@ -928,7 +928,7 @@ static struct clk_rcg2 edppixel_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_mdss_esc0_1_clk[] = { static const struct freq_tbl ftbl_mdss_esc0_1_clk[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
{ } { }
}; };
@ -959,7 +959,7 @@ static struct clk_rcg2 esc1_clk_src = {
}, },
}; };
static struct freq_tbl extpclk_freq_tbl[] = { static const struct freq_tbl extpclk_freq_tbl[] = {
{ .src = P_HDMIPLL }, { .src = P_HDMIPLL },
{ } { }
}; };
@ -978,7 +978,7 @@ static struct clk_rcg2 extpclk_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_mdss_hdmi_clk[] = { static const struct freq_tbl ftbl_mdss_hdmi_clk[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
{ } { }
}; };
@ -996,7 +996,7 @@ static struct clk_rcg2 hdmi_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_mdss_vsync_clk[] = { static const struct freq_tbl ftbl_mdss_vsync_clk[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
{ } { }
}; };
@ -1014,7 +1014,7 @@ static struct clk_rcg2 vsync_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_mmss_rbcpr_clk[] = { static const struct freq_tbl ftbl_mmss_rbcpr_clk[] = {
F(50000000, P_GPLL0, 12, 0, 0), F(50000000, P_GPLL0, 12, 0, 0),
{ } { }
}; };
@ -1032,7 +1032,7 @@ static struct clk_rcg2 rbcpr_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_oxili_rbbmtimer_clk[] = { static const struct freq_tbl ftbl_oxili_rbbmtimer_clk[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
{ } { }
}; };
@ -1050,7 +1050,7 @@ static struct clk_rcg2 rbbmtimer_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_vpu_maple_clk[] = { static const struct freq_tbl ftbl_vpu_maple_clk[] = {
F(50000000, P_GPLL0, 12, 0, 0), F(50000000, P_GPLL0, 12, 0, 0),
F(100000000, P_GPLL0, 6, 0, 0), F(100000000, P_GPLL0, 6, 0, 0),
F(133330000, P_GPLL0, 4.5, 0, 0), F(133330000, P_GPLL0, 4.5, 0, 0),
@ -1073,7 +1073,7 @@ static struct clk_rcg2 maple_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_vpu_vdp_clk[] = { static const struct freq_tbl ftbl_vpu_vdp_clk[] = {
F(50000000, P_GPLL0, 12, 0, 0), F(50000000, P_GPLL0, 12, 0, 0),
F(100000000, P_GPLL0, 6, 0, 0), F(100000000, P_GPLL0, 6, 0, 0),
F(200000000, P_MMPLL0, 4, 0, 0), F(200000000, P_MMPLL0, 4, 0, 0),
@ -1095,7 +1095,7 @@ static struct clk_rcg2 vdp_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_vpu_bus_clk[] = { static const struct freq_tbl ftbl_vpu_bus_clk[] = {
F(40000000, P_GPLL0, 15, 0, 0), F(40000000, P_GPLL0, 15, 0, 0),
F(80000000, P_MMPLL0, 10, 0, 0), F(80000000, P_MMPLL0, 10, 0, 0),
{ } { }

View File

@ -155,7 +155,7 @@ static const struct clk_parent_data mmcc_pxo_dsi1_dsi2_byte[] = {
{ .fw_name = "dsi2pllbyte", .name = "dsi2pllbyte" }, { .fw_name = "dsi2pllbyte", .name = "dsi2pllbyte" },
}; };
static struct freq_tbl clk_tbl_cam[] = { static const struct freq_tbl clk_tbl_cam[] = {
{ 6000000, P_PLL8, 4, 1, 16 }, { 6000000, P_PLL8, 4, 1, 16 },
{ 8000000, P_PLL8, 4, 1, 12 }, { 8000000, P_PLL8, 4, 1, 12 },
{ 12000000, P_PLL8, 4, 1, 8 }, { 12000000, P_PLL8, 4, 1, 8 },
@ -323,7 +323,7 @@ static struct clk_branch camclk2_clk = {
}; };
static struct freq_tbl clk_tbl_csi[] = { static const struct freq_tbl clk_tbl_csi[] = {
{ 27000000, P_PXO, 1, 0, 0 }, { 27000000, P_PXO, 1, 0, 0 },
{ 85330000, P_PLL8, 1, 2, 9 }, { 85330000, P_PLL8, 1, 2, 9 },
{ 177780000, P_PLL2, 1, 2, 9 }, { 177780000, P_PLL2, 1, 2, 9 },
@ -715,7 +715,7 @@ static struct clk_pix_rdi csi_rdi2_clk = {
}, },
}; };
static struct freq_tbl clk_tbl_csiphytimer[] = { static const struct freq_tbl clk_tbl_csiphytimer[] = {
{ 85330000, P_PLL8, 1, 2, 9 }, { 85330000, P_PLL8, 1, 2, 9 },
{ 177780000, P_PLL2, 1, 2, 9 }, { 177780000, P_PLL2, 1, 2, 9 },
{ } { }
@ -808,7 +808,7 @@ static struct clk_branch csiphy2_timer_clk = {
}, },
}; };
static struct freq_tbl clk_tbl_gfx2d[] = { static const struct freq_tbl clk_tbl_gfx2d[] = {
F_MN( 27000000, P_PXO, 1, 0), F_MN( 27000000, P_PXO, 1, 0),
F_MN( 48000000, P_PLL8, 1, 8), F_MN( 48000000, P_PLL8, 1, 8),
F_MN( 54857000, P_PLL8, 1, 7), F_MN( 54857000, P_PLL8, 1, 7),
@ -948,7 +948,7 @@ static struct clk_branch gfx2d1_clk = {
}, },
}; };
static struct freq_tbl clk_tbl_gfx3d[] = { static const struct freq_tbl clk_tbl_gfx3d[] = {
F_MN( 27000000, P_PXO, 1, 0), F_MN( 27000000, P_PXO, 1, 0),
F_MN( 48000000, P_PLL8, 1, 8), F_MN( 48000000, P_PLL8, 1, 8),
F_MN( 54857000, P_PLL8, 1, 7), F_MN( 54857000, P_PLL8, 1, 7),
@ -968,7 +968,7 @@ static struct freq_tbl clk_tbl_gfx3d[] = {
{ } { }
}; };
static struct freq_tbl clk_tbl_gfx3d_8064[] = { static const struct freq_tbl clk_tbl_gfx3d_8064[] = {
F_MN( 27000000, P_PXO, 0, 0), F_MN( 27000000, P_PXO, 0, 0),
F_MN( 48000000, P_PLL8, 1, 8), F_MN( 48000000, P_PLL8, 1, 8),
F_MN( 54857000, P_PLL8, 1, 7), F_MN( 54857000, P_PLL8, 1, 7),
@ -1058,7 +1058,7 @@ static struct clk_branch gfx3d_clk = {
}, },
}; };
static struct freq_tbl clk_tbl_vcap[] = { static const struct freq_tbl clk_tbl_vcap[] = {
F_MN( 27000000, P_PXO, 0, 0), F_MN( 27000000, P_PXO, 0, 0),
F_MN( 54860000, P_PLL8, 1, 7), F_MN( 54860000, P_PLL8, 1, 7),
F_MN( 64000000, P_PLL8, 1, 6), F_MN( 64000000, P_PLL8, 1, 6),
@ -1149,7 +1149,7 @@ static struct clk_branch vcap_npl_clk = {
}, },
}; };
static struct freq_tbl clk_tbl_ijpeg[] = { static const struct freq_tbl clk_tbl_ijpeg[] = {
{ 27000000, P_PXO, 1, 0, 0 }, { 27000000, P_PXO, 1, 0, 0 },
{ 36570000, P_PLL8, 1, 2, 21 }, { 36570000, P_PLL8, 1, 2, 21 },
{ 54860000, P_PLL8, 7, 0, 0 }, { 54860000, P_PLL8, 7, 0, 0 },
@ -1214,7 +1214,7 @@ static struct clk_branch ijpeg_clk = {
}, },
}; };
static struct freq_tbl clk_tbl_jpegd[] = { static const struct freq_tbl clk_tbl_jpegd[] = {
{ 64000000, P_PLL8, 6 }, { 64000000, P_PLL8, 6 },
{ 76800000, P_PLL8, 5 }, { 76800000, P_PLL8, 5 },
{ 96000000, P_PLL8, 4 }, { 96000000, P_PLL8, 4 },
@ -1264,7 +1264,7 @@ static struct clk_branch jpegd_clk = {
}, },
}; };
static struct freq_tbl clk_tbl_mdp[] = { static const struct freq_tbl clk_tbl_mdp[] = {
{ 9600000, P_PLL8, 1, 1, 40 }, { 9600000, P_PLL8, 1, 1, 40 },
{ 13710000, P_PLL8, 1, 1, 28 }, { 13710000, P_PLL8, 1, 1, 28 },
{ 27000000, P_PXO, 1, 0, 0 }, { 27000000, P_PXO, 1, 0, 0 },
@ -1381,7 +1381,7 @@ static struct clk_branch mdp_vsync_clk = {
}, },
}; };
static struct freq_tbl clk_tbl_rot[] = { static const struct freq_tbl clk_tbl_rot[] = {
{ 27000000, P_PXO, 1 }, { 27000000, P_PXO, 1 },
{ 29540000, P_PLL8, 13 }, { 29540000, P_PLL8, 13 },
{ 32000000, P_PLL8, 12 }, { 32000000, P_PLL8, 12 },
@ -1461,7 +1461,7 @@ static const struct clk_parent_data mmcc_pxo_hdmi[] = {
{ .fw_name = "hdmipll", .name = "hdmi_pll" }, { .fw_name = "hdmipll", .name = "hdmi_pll" },
}; };
static struct freq_tbl clk_tbl_tv[] = { static const struct freq_tbl clk_tbl_tv[] = {
{ .src = P_HDMI_PLL, .pre_div = 1 }, { .src = P_HDMI_PLL, .pre_div = 1 },
{ } { }
}; };
@ -1624,7 +1624,7 @@ static struct clk_branch hdmi_app_clk = {
}, },
}; };
static struct freq_tbl clk_tbl_vcodec[] = { static const struct freq_tbl clk_tbl_vcodec[] = {
F_MN( 27000000, P_PXO, 1, 0), F_MN( 27000000, P_PXO, 1, 0),
F_MN( 32000000, P_PLL8, 1, 12), F_MN( 32000000, P_PLL8, 1, 12),
F_MN( 48000000, P_PLL8, 1, 8), F_MN( 48000000, P_PLL8, 1, 8),
@ -1699,7 +1699,7 @@ static struct clk_branch vcodec_clk = {
}, },
}; };
static struct freq_tbl clk_tbl_vpe[] = { static const struct freq_tbl clk_tbl_vpe[] = {
{ 27000000, P_PXO, 1 }, { 27000000, P_PXO, 1 },
{ 34909000, P_PLL8, 11 }, { 34909000, P_PLL8, 11 },
{ 38400000, P_PLL8, 10 }, { 38400000, P_PLL8, 10 },
@ -1752,7 +1752,7 @@ static struct clk_branch vpe_clk = {
}, },
}; };
static struct freq_tbl clk_tbl_vfe[] = { static const struct freq_tbl clk_tbl_vfe[] = {
{ 13960000, P_PLL8, 1, 2, 55 }, { 13960000, P_PLL8, 1, 2, 55 },
{ 27000000, P_PXO, 1, 0, 0 }, { 27000000, P_PXO, 1, 0, 0 },
{ 36570000, P_PLL8, 1, 2, 21 }, { 36570000, P_PLL8, 1, 2, 21 },

View File

@ -268,7 +268,7 @@ static struct clk_rcg2 mmss_ahb_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_mmss_axi_clk_msm8226[] = { static const struct freq_tbl ftbl_mmss_axi_clk_msm8226[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
F(37500000, P_GPLL0, 16, 0, 0), F(37500000, P_GPLL0, 16, 0, 0),
F(50000000, P_GPLL0, 12, 0, 0), F(50000000, P_GPLL0, 12, 0, 0),
@ -280,7 +280,7 @@ static struct freq_tbl ftbl_mmss_axi_clk_msm8226[] = {
{ } { }
}; };
static struct freq_tbl ftbl_mmss_axi_clk[] = { static const struct freq_tbl ftbl_mmss_axi_clk[] = {
F( 19200000, P_XO, 1, 0, 0), F( 19200000, P_XO, 1, 0, 0),
F( 37500000, P_GPLL0, 16, 0, 0), F( 37500000, P_GPLL0, 16, 0, 0),
F( 50000000, P_GPLL0, 12, 0, 0), F( 50000000, P_GPLL0, 12, 0, 0),
@ -306,7 +306,7 @@ static struct clk_rcg2 mmss_axi_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_ocmemnoc_clk[] = { static const struct freq_tbl ftbl_ocmemnoc_clk[] = {
F( 19200000, P_XO, 1, 0, 0), F( 19200000, P_XO, 1, 0, 0),
F( 37500000, P_GPLL0, 16, 0, 0), F( 37500000, P_GPLL0, 16, 0, 0),
F( 50000000, P_GPLL0, 12, 0, 0), F( 50000000, P_GPLL0, 12, 0, 0),
@ -331,7 +331,7 @@ static struct clk_rcg2 ocmemnoc_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_camss_csi0_3_clk[] = { static const struct freq_tbl ftbl_camss_csi0_3_clk[] = {
F(100000000, P_GPLL0, 6, 0, 0), F(100000000, P_GPLL0, 6, 0, 0),
F(200000000, P_MMPLL0, 4, 0, 0), F(200000000, P_MMPLL0, 4, 0, 0),
{ } { }
@ -389,7 +389,7 @@ static struct clk_rcg2 csi3_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_camss_vfe_vfe0_clk_msm8226[] = { static const struct freq_tbl ftbl_camss_vfe_vfe0_clk_msm8226[] = {
F(37500000, P_GPLL0, 16, 0, 0), F(37500000, P_GPLL0, 16, 0, 0),
F(50000000, P_GPLL0, 12, 0, 0), F(50000000, P_GPLL0, 12, 0, 0),
F(60000000, P_GPLL0, 10, 0, 0), F(60000000, P_GPLL0, 10, 0, 0),
@ -406,7 +406,7 @@ static struct freq_tbl ftbl_camss_vfe_vfe0_clk_msm8226[] = {
{ } { }
}; };
static struct freq_tbl ftbl_camss_vfe_vfe0_1_clk[] = { static const struct freq_tbl ftbl_camss_vfe_vfe0_1_clk[] = {
F(37500000, P_GPLL0, 16, 0, 0), F(37500000, P_GPLL0, 16, 0, 0),
F(50000000, P_GPLL0, 12, 0, 0), F(50000000, P_GPLL0, 12, 0, 0),
F(60000000, P_GPLL0, 10, 0, 0), F(60000000, P_GPLL0, 10, 0, 0),
@ -449,7 +449,7 @@ static struct clk_rcg2 vfe1_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_mdss_mdp_clk_msm8226[] = { static const struct freq_tbl ftbl_mdss_mdp_clk_msm8226[] = {
F(37500000, P_GPLL0, 16, 0, 0), F(37500000, P_GPLL0, 16, 0, 0),
F(60000000, P_GPLL0, 10, 0, 0), F(60000000, P_GPLL0, 10, 0, 0),
F(75000000, P_GPLL0, 8, 0, 0), F(75000000, P_GPLL0, 8, 0, 0),
@ -461,7 +461,7 @@ static struct freq_tbl ftbl_mdss_mdp_clk_msm8226[] = {
{ } { }
}; };
static struct freq_tbl ftbl_mdss_mdp_clk[] = { static const struct freq_tbl ftbl_mdss_mdp_clk[] = {
F(37500000, P_GPLL0, 16, 0, 0), F(37500000, P_GPLL0, 16, 0, 0),
F(60000000, P_GPLL0, 10, 0, 0), F(60000000, P_GPLL0, 10, 0, 0),
F(75000000, P_GPLL0, 8, 0, 0), F(75000000, P_GPLL0, 8, 0, 0),
@ -490,7 +490,7 @@ static struct clk_rcg2 mdp_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_camss_jpeg_jpeg0_2_clk[] = { static const struct freq_tbl ftbl_camss_jpeg_jpeg0_2_clk[] = {
F(75000000, P_GPLL0, 8, 0, 0), F(75000000, P_GPLL0, 8, 0, 0),
F(133330000, P_GPLL0, 4.5, 0, 0), F(133330000, P_GPLL0, 4.5, 0, 0),
F(200000000, P_GPLL0, 3, 0, 0), F(200000000, P_GPLL0, 3, 0, 0),
@ -567,7 +567,7 @@ static struct clk_rcg2 pclk1_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_venus0_vcodec0_clk_msm8226[] = { static const struct freq_tbl ftbl_venus0_vcodec0_clk_msm8226[] = {
F(66700000, P_GPLL0, 9, 0, 0), F(66700000, P_GPLL0, 9, 0, 0),
F(100000000, P_GPLL0, 6, 0, 0), F(100000000, P_GPLL0, 6, 0, 0),
F(133330000, P_MMPLL0, 6, 0, 0), F(133330000, P_MMPLL0, 6, 0, 0),
@ -575,7 +575,7 @@ static struct freq_tbl ftbl_venus0_vcodec0_clk_msm8226[] = {
{ } { }
}; };
static struct freq_tbl ftbl_venus0_vcodec0_clk[] = { static const struct freq_tbl ftbl_venus0_vcodec0_clk[] = {
F(50000000, P_GPLL0, 12, 0, 0), F(50000000, P_GPLL0, 12, 0, 0),
F(100000000, P_GPLL0, 6, 0, 0), F(100000000, P_GPLL0, 6, 0, 0),
F(133330000, P_MMPLL0, 6, 0, 0), F(133330000, P_MMPLL0, 6, 0, 0),
@ -599,7 +599,7 @@ static struct clk_rcg2 vcodec0_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_camss_cci_cci_clk[] = { static const struct freq_tbl ftbl_camss_cci_cci_clk[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
{ } { }
}; };
@ -617,7 +617,7 @@ static struct clk_rcg2 cci_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_camss_gp0_1_clk[] = { static const struct freq_tbl ftbl_camss_gp0_1_clk[] = {
F(10000, P_XO, 16, 1, 120), F(10000, P_XO, 16, 1, 120),
F(24000, P_XO, 16, 1, 50), F(24000, P_XO, 16, 1, 50),
F(6000000, P_GPLL0, 10, 1, 10), F(6000000, P_GPLL0, 10, 1, 10),
@ -655,14 +655,14 @@ static struct clk_rcg2 camss_gp1_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_camss_mclk0_3_clk_msm8226[] = { static const struct freq_tbl ftbl_camss_mclk0_3_clk_msm8226[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
F(24000000, P_GPLL0, 5, 1, 5), F(24000000, P_GPLL0, 5, 1, 5),
F(66670000, P_GPLL0, 9, 0, 0), F(66670000, P_GPLL0, 9, 0, 0),
{ } { }
}; };
static struct freq_tbl ftbl_camss_mclk0_3_clk[] = { static const struct freq_tbl ftbl_camss_mclk0_3_clk[] = {
F(4800000, P_XO, 4, 0, 0), F(4800000, P_XO, 4, 0, 0),
F(6000000, P_GPLL0, 10, 1, 10), F(6000000, P_GPLL0, 10, 1, 10),
F(8000000, P_GPLL0, 15, 1, 5), F(8000000, P_GPLL0, 15, 1, 5),
@ -729,7 +729,7 @@ static struct clk_rcg2 mclk3_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_camss_phy0_2_csi0_2phytimer_clk[] = { static const struct freq_tbl ftbl_camss_phy0_2_csi0_2phytimer_clk[] = {
F(100000000, P_GPLL0, 6, 0, 0), F(100000000, P_GPLL0, 6, 0, 0),
F(200000000, P_MMPLL0, 4, 0, 0), F(200000000, P_MMPLL0, 4, 0, 0),
{ } { }
@ -774,7 +774,7 @@ static struct clk_rcg2 csi2phytimer_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_camss_vfe_cpp_clk_msm8226[] = { static const struct freq_tbl ftbl_camss_vfe_cpp_clk_msm8226[] = {
F(133330000, P_GPLL0, 4.5, 0, 0), F(133330000, P_GPLL0, 4.5, 0, 0),
F(150000000, P_GPLL0, 4, 0, 0), F(150000000, P_GPLL0, 4, 0, 0),
F(266670000, P_MMPLL0, 3, 0, 0), F(266670000, P_MMPLL0, 3, 0, 0),
@ -783,7 +783,7 @@ static struct freq_tbl ftbl_camss_vfe_cpp_clk_msm8226[] = {
{ } { }
}; };
static struct freq_tbl ftbl_camss_vfe_cpp_clk[] = { static const struct freq_tbl ftbl_camss_vfe_cpp_clk[] = {
F(133330000, P_GPLL0, 4.5, 0, 0), F(133330000, P_GPLL0, 4.5, 0, 0),
F(266670000, P_MMPLL0, 3, 0, 0), F(266670000, P_MMPLL0, 3, 0, 0),
F(320000000, P_MMPLL0, 2.5, 0, 0), F(320000000, P_MMPLL0, 2.5, 0, 0),
@ -805,7 +805,7 @@ static struct clk_rcg2 cpp_clk_src = {
}, },
}; };
static struct freq_tbl byte_freq_tbl[] = { static const struct freq_tbl byte_freq_tbl[] = {
{ .src = P_DSI0PLL_BYTE }, { .src = P_DSI0PLL_BYTE },
{ } { }
}; };
@ -838,7 +838,7 @@ static struct clk_rcg2 byte1_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_mdss_edpaux_clk[] = { static const struct freq_tbl ftbl_mdss_edpaux_clk[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
{ } { }
}; };
@ -856,7 +856,7 @@ static struct clk_rcg2 edpaux_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_mdss_edplink_clk[] = { static const struct freq_tbl ftbl_mdss_edplink_clk[] = {
F(135000000, P_EDPLINK, 2, 0, 0), F(135000000, P_EDPLINK, 2, 0, 0),
F(270000000, P_EDPLINK, 11, 0, 0), F(270000000, P_EDPLINK, 11, 0, 0),
{ } { }
@ -876,7 +876,7 @@ static struct clk_rcg2 edplink_clk_src = {
}, },
}; };
static struct freq_tbl edp_pixel_freq_tbl[] = { static const struct freq_tbl edp_pixel_freq_tbl[] = {
{ .src = P_EDPVCO }, { .src = P_EDPVCO },
{ } { }
}; };
@ -895,7 +895,7 @@ static struct clk_rcg2 edppixel_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_mdss_esc0_1_clk[] = { static const struct freq_tbl ftbl_mdss_esc0_1_clk[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
{ } { }
}; };
@ -926,7 +926,7 @@ static struct clk_rcg2 esc1_clk_src = {
}, },
}; };
static struct freq_tbl extpclk_freq_tbl[] = { static const struct freq_tbl extpclk_freq_tbl[] = {
{ .src = P_HDMIPLL }, { .src = P_HDMIPLL },
{ } { }
}; };
@ -945,7 +945,7 @@ static struct clk_rcg2 extpclk_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_mdss_hdmi_clk[] = { static const struct freq_tbl ftbl_mdss_hdmi_clk[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
{ } { }
}; };
@ -963,7 +963,7 @@ static struct clk_rcg2 hdmi_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_mdss_vsync_clk[] = { static const struct freq_tbl ftbl_mdss_vsync_clk[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
{ } { }
}; };

View File

@ -974,7 +974,7 @@ static struct clk_rcg2 byte1_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_mdss_esc0_1_clk[] = { static const struct freq_tbl ftbl_mdss_esc0_1_clk[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
{ } { }
}; };
@ -1005,7 +1005,7 @@ static struct clk_rcg2 esc1_clk_src = {
}, },
}; };
static struct freq_tbl extpclk_freq_tbl[] = { static const struct freq_tbl extpclk_freq_tbl[] = {
{ .src = P_HDMIPLL }, { .src = P_HDMIPLL },
{ } { }
}; };
@ -1024,7 +1024,7 @@ static struct clk_rcg2 extpclk_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_hdmi_clk_src[] = { static const struct freq_tbl ftbl_hdmi_clk_src[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
{ } { }
}; };
@ -1042,7 +1042,7 @@ static struct clk_rcg2 hdmi_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_mdss_vsync_clk[] = { static const struct freq_tbl ftbl_mdss_vsync_clk[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
{ } { }
}; };

View File

@ -734,7 +734,7 @@ static struct clk_rcg2 mdp_clk_src = {
}, },
}; };
static struct freq_tbl extpclk_freq_tbl[] = { static const struct freq_tbl extpclk_freq_tbl[] = {
{ .src = P_HDMIPLL }, { .src = P_HDMIPLL },
{ } { }
}; };
@ -753,7 +753,7 @@ static struct clk_rcg2 extpclk_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_mdss_vsync_clk[] = { static const struct freq_tbl ftbl_mdss_vsync_clk[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
{ } { }
}; };
@ -771,7 +771,7 @@ static struct clk_rcg2 vsync_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_mdss_hdmi_clk[] = { static const struct freq_tbl ftbl_mdss_hdmi_clk[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
{ } { }
}; };
@ -815,7 +815,7 @@ static struct clk_rcg2 byte1_clk_src = {
}, },
}; };
static struct freq_tbl ftbl_mdss_esc0_1_clk[] = { static const struct freq_tbl ftbl_mdss_esc0_1_clk[] = {
F(19200000, P_XO, 1, 0, 0), F(19200000, P_XO, 1, 0, 0),
{ } { }
}; };

View File

@ -449,7 +449,7 @@ static struct gdsc video_cc_mvs0_gdsc = {
}, },
.pwrsts = PWRSTS_OFF_ON, .pwrsts = PWRSTS_OFF_ON,
.parent = &video_cc_mvs0c_gdsc.pd, .parent = &video_cc_mvs0c_gdsc.pd,
.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | HW_CTRL, .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | HW_CTRL_TRIGGER,
}; };
static struct gdsc video_cc_mvs1c_gdsc = { static struct gdsc video_cc_mvs1c_gdsc = {
@ -474,7 +474,7 @@ static struct gdsc video_cc_mvs1_gdsc = {
}, },
.pwrsts = PWRSTS_OFF_ON, .pwrsts = PWRSTS_OFF_ON,
.parent = &video_cc_mvs1c_gdsc.pd, .parent = &video_cc_mvs1c_gdsc.pd,
.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | HW_CTRL, .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | HW_CTRL_TRIGGER,
}; };
static struct clk_regmap *video_cc_sm8550_clocks[] = { static struct clk_regmap *video_cc_sm8550_clocks[] = {

View File

@ -100,6 +100,13 @@ config CLK_RK3568
help help
Build the driver for RK3568 Clock Driver. Build the driver for RK3568 Clock Driver.
config CLK_RK3576
bool "Rockchip RK3576 clock controller support"
depends on ARM64 || COMPILE_TEST
default y
help
Build the driver for RK3576 Clock Driver.
config CLK_RK3588 config CLK_RK3588
bool "Rockchip RK3588 clock controller support" bool "Rockchip RK3588 clock controller support"
depends on ARM64 || COMPILE_TEST depends on ARM64 || COMPILE_TEST

View File

@ -28,4 +28,5 @@ obj-$(CONFIG_CLK_RK3328) += clk-rk3328.o
obj-$(CONFIG_CLK_RK3368) += clk-rk3368.o obj-$(CONFIG_CLK_RK3368) += clk-rk3368.o
obj-$(CONFIG_CLK_RK3399) += clk-rk3399.o obj-$(CONFIG_CLK_RK3399) += clk-rk3399.o
obj-$(CONFIG_CLK_RK3568) += clk-rk3568.o obj-$(CONFIG_CLK_RK3568) += clk-rk3568.o
obj-$(CONFIG_CLK_RK3576) += clk-rk3576.o rst-rk3576.o
obj-$(CONFIG_CLK_RK3588) += clk-rk3588.o rst-rk3588.o obj-$(CONFIG_CLK_RK3588) += clk-rk3588.o rst-rk3588.o

View File

@ -914,7 +914,10 @@ static unsigned long rockchip_rk3588_pll_recalc_rate(struct clk_hw *hw, unsigned
} }
rate64 = rate64 >> cur.s; rate64 = rate64 >> cur.s;
return (unsigned long)rate64; if (pll->type == pll_rk3588_ddr)
return (unsigned long)rate64 * 2;
else
return (unsigned long)rate64;
} }
static int rockchip_rk3588_pll_set_params(struct rockchip_clk_pll *pll, static int rockchip_rk3588_pll_set_params(struct rockchip_clk_pll *pll,
@ -1167,6 +1170,7 @@ struct clk *rockchip_clk_register_pll(struct rockchip_clk_provider *ctx,
break; break;
case pll_rk3588: case pll_rk3588:
case pll_rk3588_core: case pll_rk3588_core:
case pll_rk3588_ddr:
if (!pll->rate_table) if (!pll->rate_table)
init.ops = &rockchip_rk3588_pll_clk_norate_ops; init.ops = &rockchip_rk3588_pll_clk_norate_ops;
else else

View File

@ -1002,6 +1002,7 @@ static const char *const px30_cru_critical_clocks[] __initconst = {
static void __init px30_clk_init(struct device_node *np) static void __init px30_clk_init(struct device_node *np)
{ {
struct rockchip_clk_provider *ctx; struct rockchip_clk_provider *ctx;
unsigned long clk_nr_clks;
void __iomem *reg_base; void __iomem *reg_base;
reg_base = of_iomap(np, 0); reg_base = of_iomap(np, 0);
@ -1010,7 +1011,9 @@ static void __init px30_clk_init(struct device_node *np)
return; return;
} }
ctx = rockchip_clk_init(np, reg_base, CLK_NR_CLKS); clk_nr_clks = rockchip_clk_find_max_clk_id(px30_clk_branches,
ARRAY_SIZE(px30_clk_branches)) + 1;
ctx = rockchip_clk_init(np, reg_base, clk_nr_clks);
if (IS_ERR(ctx)) { if (IS_ERR(ctx)) {
pr_err("%s: rockchip clk init failed\n", __func__); pr_err("%s: rockchip clk init failed\n", __func__);
iounmap(reg_base); iounmap(reg_base);
@ -1043,6 +1046,7 @@ CLK_OF_DECLARE(px30_cru, "rockchip,px30-cru", px30_clk_init);
static void __init px30_pmu_clk_init(struct device_node *np) static void __init px30_pmu_clk_init(struct device_node *np)
{ {
struct rockchip_clk_provider *ctx; struct rockchip_clk_provider *ctx;
unsigned long clkpmu_nr_clks;
void __iomem *reg_base; void __iomem *reg_base;
reg_base = of_iomap(np, 0); reg_base = of_iomap(np, 0);
@ -1051,7 +1055,9 @@ static void __init px30_pmu_clk_init(struct device_node *np)
return; return;
} }
ctx = rockchip_clk_init(np, reg_base, CLKPMU_NR_CLKS); clkpmu_nr_clks = rockchip_clk_find_max_clk_id(px30_clk_pmu_branches,
ARRAY_SIZE(px30_clk_pmu_branches)) + 1;
ctx = rockchip_clk_init(np, reg_base, clkpmu_nr_clks);
if (IS_ERR(ctx)) { if (IS_ERR(ctx)) {
pr_err("%s: rockchip pmu clk init failed\n", __func__); pr_err("%s: rockchip pmu clk init failed\n", __func__);
return; return;

View File

@ -436,6 +436,7 @@ static const char *const rk3036_critical_clocks[] __initconst = {
static void __init rk3036_clk_init(struct device_node *np) static void __init rk3036_clk_init(struct device_node *np)
{ {
struct rockchip_clk_provider *ctx; struct rockchip_clk_provider *ctx;
unsigned long clk_nr_clks;
void __iomem *reg_base; void __iomem *reg_base;
struct clk *clk; struct clk *clk;
@ -452,7 +453,9 @@ static void __init rk3036_clk_init(struct device_node *np)
writel_relaxed(HIWORD_UPDATE(0x2, 0x3, 10), writel_relaxed(HIWORD_UPDATE(0x2, 0x3, 10),
reg_base + RK2928_CLKSEL_CON(13)); reg_base + RK2928_CLKSEL_CON(13));
ctx = rockchip_clk_init(np, reg_base, CLK_NR_CLKS); clk_nr_clks = rockchip_clk_find_max_clk_id(rk3036_clk_branches,
ARRAY_SIZE(rk3036_clk_branches)) + 1;
ctx = rockchip_clk_init(np, reg_base, clk_nr_clks);
if (IS_ERR(ctx)) { if (IS_ERR(ctx)) {
pr_err("%s: rockchip clk init failed\n", __func__); pr_err("%s: rockchip clk init failed\n", __func__);
iounmap(reg_base); iounmap(reg_base);

View File

@ -409,7 +409,7 @@ static struct rockchip_clk_branch rk3228_clk_branches[] __initdata = {
RK2928_CLKSEL_CON(29), 0, 3, DFLAGS), RK2928_CLKSEL_CON(29), 0, 3, DFLAGS),
DIV(0, "sclk_vop_pre", "sclk_vop_src", 0, DIV(0, "sclk_vop_pre", "sclk_vop_src", 0,
RK2928_CLKSEL_CON(27), 8, 8, DFLAGS), RK2928_CLKSEL_CON(27), 8, 8, DFLAGS),
MUX(DCLK_VOP, "dclk_vop", mux_dclk_vop_p, 0, MUX(DCLK_VOP, "dclk_vop", mux_dclk_vop_p, CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
RK2928_CLKSEL_CON(27), 1, 1, MFLAGS), RK2928_CLKSEL_CON(27), 1, 1, MFLAGS),
FACTOR(0, "xin12m", "xin24m", 0, 1, 2), FACTOR(0, "xin12m", "xin24m", 0, 1, 2),
@ -683,6 +683,7 @@ static const char *const rk3228_critical_clocks[] __initconst = {
static void __init rk3228_clk_init(struct device_node *np) static void __init rk3228_clk_init(struct device_node *np)
{ {
struct rockchip_clk_provider *ctx; struct rockchip_clk_provider *ctx;
unsigned long clk_nr_clks;
void __iomem *reg_base; void __iomem *reg_base;
reg_base = of_iomap(np, 0); reg_base = of_iomap(np, 0);
@ -691,7 +692,9 @@ static void __init rk3228_clk_init(struct device_node *np)
return; return;
} }
ctx = rockchip_clk_init(np, reg_base, CLK_NR_CLKS); clk_nr_clks = rockchip_clk_find_max_clk_id(rk3228_clk_branches,
ARRAY_SIZE(rk3228_clk_branches)) + 1;
ctx = rockchip_clk_init(np, reg_base, clk_nr_clks);
if (IS_ERR(ctx)) { if (IS_ERR(ctx)) {
pr_err("%s: rockchip clk init failed\n", __func__); pr_err("%s: rockchip clk init failed\n", __func__);
iounmap(reg_base); iounmap(reg_base);

View File

@ -932,6 +932,7 @@ static void __init rk3288_common_init(struct device_node *np,
enum rk3288_variant soc) enum rk3288_variant soc)
{ {
struct rockchip_clk_provider *ctx; struct rockchip_clk_provider *ctx;
unsigned long clk_nr_clks;
rk3288_cru_base = of_iomap(np, 0); rk3288_cru_base = of_iomap(np, 0);
if (!rk3288_cru_base) { if (!rk3288_cru_base) {
@ -939,7 +940,9 @@ static void __init rk3288_common_init(struct device_node *np,
return; return;
} }
ctx = rockchip_clk_init(np, rk3288_cru_base, CLK_NR_CLKS); clk_nr_clks = rockchip_clk_find_max_clk_id(rk3288_clk_branches,
ARRAY_SIZE(rk3288_clk_branches)) + 1;
ctx = rockchip_clk_init(np, rk3288_cru_base, clk_nr_clks);
if (IS_ERR(ctx)) { if (IS_ERR(ctx)) {
pr_err("%s: rockchip clk init failed\n", __func__); pr_err("%s: rockchip clk init failed\n", __func__);
iounmap(rk3288_cru_base); iounmap(rk3288_cru_base);

View File

@ -917,6 +917,7 @@ static const char *const rk3308_critical_clocks[] __initconst = {
static void __init rk3308_clk_init(struct device_node *np) static void __init rk3308_clk_init(struct device_node *np)
{ {
struct rockchip_clk_provider *ctx; struct rockchip_clk_provider *ctx;
unsigned long clk_nr_clks;
void __iomem *reg_base; void __iomem *reg_base;
reg_base = of_iomap(np, 0); reg_base = of_iomap(np, 0);
@ -925,7 +926,9 @@ static void __init rk3308_clk_init(struct device_node *np)
return; return;
} }
ctx = rockchip_clk_init(np, reg_base, CLK_NR_CLKS); clk_nr_clks = rockchip_clk_find_max_clk_id(rk3308_clk_branches,
ARRAY_SIZE(rk3308_clk_branches)) + 1;
ctx = rockchip_clk_init(np, reg_base, clk_nr_clks);
if (IS_ERR(ctx)) { if (IS_ERR(ctx)) {
pr_err("%s: rockchip clk init failed\n", __func__); pr_err("%s: rockchip clk init failed\n", __func__);
iounmap(reg_base); iounmap(reg_base);

View File

@ -881,6 +881,7 @@ static const char *const rk3328_critical_clocks[] __initconst = {
static void __init rk3328_clk_init(struct device_node *np) static void __init rk3328_clk_init(struct device_node *np)
{ {
struct rockchip_clk_provider *ctx; struct rockchip_clk_provider *ctx;
unsigned long clk_nr_clks;
void __iomem *reg_base; void __iomem *reg_base;
reg_base = of_iomap(np, 0); reg_base = of_iomap(np, 0);
@ -889,7 +890,9 @@ static void __init rk3328_clk_init(struct device_node *np)
return; return;
} }
ctx = rockchip_clk_init(np, reg_base, CLK_NR_CLKS); clk_nr_clks = rockchip_clk_find_max_clk_id(rk3328_clk_branches,
ARRAY_SIZE(rk3328_clk_branches)) + 1;
ctx = rockchip_clk_init(np, reg_base, clk_nr_clks);
if (IS_ERR(ctx)) { if (IS_ERR(ctx)) {
pr_err("%s: rockchip clk init failed\n", __func__); pr_err("%s: rockchip clk init failed\n", __func__);
iounmap(reg_base); iounmap(reg_base);

View File

@ -866,6 +866,7 @@ static const char *const rk3368_critical_clocks[] __initconst = {
static void __init rk3368_clk_init(struct device_node *np) static void __init rk3368_clk_init(struct device_node *np)
{ {
struct rockchip_clk_provider *ctx; struct rockchip_clk_provider *ctx;
unsigned long clk_nr_clks;
void __iomem *reg_base; void __iomem *reg_base;
reg_base = of_iomap(np, 0); reg_base = of_iomap(np, 0);
@ -874,7 +875,9 @@ static void __init rk3368_clk_init(struct device_node *np)
return; return;
} }
ctx = rockchip_clk_init(np, reg_base, CLK_NR_CLKS); clk_nr_clks = rockchip_clk_find_max_clk_id(rk3368_clk_branches,
ARRAY_SIZE(rk3368_clk_branches)) + 1;
ctx = rockchip_clk_init(np, reg_base, clk_nr_clks);
if (IS_ERR(ctx)) { if (IS_ERR(ctx)) {
pr_err("%s: rockchip clk init failed\n", __func__); pr_err("%s: rockchip clk init failed\n", __func__);
iounmap(reg_base); iounmap(reg_base);

View File

@ -1531,6 +1531,7 @@ static const char *const rk3399_pmucru_critical_clocks[] __initconst = {
static void __init rk3399_clk_init(struct device_node *np) static void __init rk3399_clk_init(struct device_node *np)
{ {
struct rockchip_clk_provider *ctx; struct rockchip_clk_provider *ctx;
unsigned long clk_nr_clks;
void __iomem *reg_base; void __iomem *reg_base;
reg_base = of_iomap(np, 0); reg_base = of_iomap(np, 0);
@ -1539,7 +1540,9 @@ static void __init rk3399_clk_init(struct device_node *np)
return; return;
} }
ctx = rockchip_clk_init(np, reg_base, CLK_NR_CLKS); clk_nr_clks = rockchip_clk_find_max_clk_id(rk3399_clk_branches,
ARRAY_SIZE(rk3399_clk_branches)) + 1;
ctx = rockchip_clk_init(np, reg_base, clk_nr_clks);
if (IS_ERR(ctx)) { if (IS_ERR(ctx)) {
pr_err("%s: rockchip clk init failed\n", __func__); pr_err("%s: rockchip clk init failed\n", __func__);
iounmap(reg_base); iounmap(reg_base);
@ -1577,6 +1580,7 @@ CLK_OF_DECLARE(rk3399_cru, "rockchip,rk3399-cru", rk3399_clk_init);
static void __init rk3399_pmu_clk_init(struct device_node *np) static void __init rk3399_pmu_clk_init(struct device_node *np)
{ {
struct rockchip_clk_provider *ctx; struct rockchip_clk_provider *ctx;
unsigned long clkpmu_nr_clks;
void __iomem *reg_base; void __iomem *reg_base;
reg_base = of_iomap(np, 0); reg_base = of_iomap(np, 0);
@ -1585,7 +1589,9 @@ static void __init rk3399_pmu_clk_init(struct device_node *np)
return; return;
} }
ctx = rockchip_clk_init(np, reg_base, CLKPMU_NR_CLKS); clkpmu_nr_clks = rockchip_clk_find_max_clk_id(rk3399_clk_pmu_branches,
ARRAY_SIZE(rk3399_clk_pmu_branches)) + 1;
ctx = rockchip_clk_init(np, reg_base, clkpmu_nr_clks);
if (IS_ERR(ctx)) { if (IS_ERR(ctx)) {
pr_err("%s: rockchip pmu clk init failed\n", __func__); pr_err("%s: rockchip pmu clk init failed\n", __func__);
iounmap(reg_base); iounmap(reg_base);

File diff suppressed because it is too large Load Diff

View File

@ -526,7 +526,7 @@ PNAME(pmu_200m_100m_p) = { "clk_pmu1_200m_src", "clk_pmu1_100m_src" };
PNAME(pmu_300m_24m_p) = { "clk_300m_src", "xin24m" }; PNAME(pmu_300m_24m_p) = { "clk_300m_src", "xin24m" };
PNAME(pmu_400m_24m_p) = { "clk_400m_src", "xin24m" }; PNAME(pmu_400m_24m_p) = { "clk_400m_src", "xin24m" };
PNAME(pmu_100m_50m_24m_src_p) = { "clk_pmu1_100m_src", "clk_pmu1_50m_src", "xin24m" }; PNAME(pmu_100m_50m_24m_src_p) = { "clk_pmu1_100m_src", "clk_pmu1_50m_src", "xin24m" };
PNAME(pmu_24m_32k_100m_src_p) = { "xin24m", "32k", "clk_pmu1_100m_src" }; PNAME(pmu_24m_32k_100m_src_p) = { "xin24m", "xin32k", "clk_pmu1_100m_src" };
PNAME(hclk_pmu1_root_p) = { "clk_pmu1_200m_src", "clk_pmu1_100m_src", "clk_pmu1_50m_src", "xin24m" }; PNAME(hclk_pmu1_root_p) = { "clk_pmu1_200m_src", "clk_pmu1_100m_src", "clk_pmu1_50m_src", "xin24m" };
PNAME(hclk_pmu_cm0_root_p) = { "clk_pmu1_400m_src", "clk_pmu1_200m_src", "clk_pmu1_100m_src", "xin24m" }; PNAME(hclk_pmu_cm0_root_p) = { "clk_pmu1_400m_src", "clk_pmu1_200m_src", "clk_pmu1_100m_src", "xin24m" };
PNAME(mclk_pdm0_p) = { "clk_pmu1_300m_src", "clk_pmu1_200m_src" }; PNAME(mclk_pdm0_p) = { "clk_pmu1_300m_src", "clk_pmu1_200m_src" };
@ -2502,43 +2502,3 @@ static void __init rk3588_clk_init(struct device_node *np)
} }
CLK_OF_DECLARE(rk3588_cru, "rockchip,rk3588-cru", rk3588_clk_init); CLK_OF_DECLARE(rk3588_cru, "rockchip,rk3588-cru", rk3588_clk_init);
struct clk_rk3588_inits {
void (*inits)(struct device_node *np);
};
static const struct clk_rk3588_inits clk_3588_cru_init = {
.inits = rk3588_clk_init,
};
static const struct of_device_id clk_rk3588_match_table[] = {
{
.compatible = "rockchip,rk3588-cru",
.data = &clk_3588_cru_init,
},
{ }
};
static int __init clk_rk3588_probe(struct platform_device *pdev)
{
const struct clk_rk3588_inits *init_data;
struct device *dev = &pdev->dev;
init_data = device_get_match_data(dev);
if (!init_data)
return -EINVAL;
if (init_data->inits)
init_data->inits(dev->of_node);
return 0;
}
static struct platform_driver clk_rk3588_driver = {
.driver = {
.name = "clk-rk3588",
.of_match_table = clk_rk3588_match_table,
.suppress_bind_attrs = true,
},
};
builtin_platform_driver_probe(clk_rk3588_driver, clk_rk3588_probe);

View File

@ -450,12 +450,13 @@ void rockchip_clk_register_branches(struct rockchip_clk_provider *ctx,
struct rockchip_clk_branch *list, struct rockchip_clk_branch *list,
unsigned int nr_clk) unsigned int nr_clk)
{ {
struct clk *clk = NULL; struct clk *clk;
unsigned int idx; unsigned int idx;
unsigned long flags; unsigned long flags;
for (idx = 0; idx < nr_clk; idx++, list++) { for (idx = 0; idx < nr_clk; idx++, list++) {
flags = list->flags; flags = list->flags;
clk = NULL;
/* catch simple muxes */ /* catch simple muxes */
switch (list->branch_type) { switch (list->branch_type) {

View File

@ -235,6 +235,58 @@ struct clk;
#define RK3568_PMU_CLKGATE_CON(x) ((x) * 0x4 + 0x180) #define RK3568_PMU_CLKGATE_CON(x) ((x) * 0x4 + 0x180)
#define RK3568_PMU_SOFTRST_CON(x) ((x) * 0x4 + 0x200) #define RK3568_PMU_SOFTRST_CON(x) ((x) * 0x4 + 0x200)
#define RK3576_PHP_CRU_BASE 0x8000
#define RK3576_SECURE_NS_CRU_BASE 0x10000
#define RK3576_PMU_CRU_BASE 0x20000
#define RK3576_BIGCORE_CRU_BASE 0x38000
#define RK3576_LITCORE_CRU_BASE 0x40000
#define RK3576_CCI_CRU_BASE 0x48000
#define RK3576_PLL_CON(x) RK2928_PLL_CON(x)
#define RK3576_MODE_CON0 0x280
#define RK3576_BPLL_MODE_CON0 (RK3576_BIGCORE_CRU_BASE + 0x280)
#define RK3576_LPLL_MODE_CON0 (RK3576_LITCORE_CRU_BASE + 0x280)
#define RK3576_PPLL_MODE_CON0 (RK3576_PHP_CRU_BASE + 0x280)
#define RK3576_CLKSEL_CON(x) ((x) * 0x4 + 0x300)
#define RK3576_CLKGATE_CON(x) ((x) * 0x4 + 0x800)
#define RK3576_SOFTRST_CON(x) ((x) * 0x4 + 0xa00)
#define RK3576_GLB_CNT_TH 0xc00
#define RK3576_GLB_SRST_FST 0xc08
#define RK3576_GLB_SRST_SND 0xc0c
#define RK3576_GLB_RST_CON 0xc10
#define RK3576_GLB_RST_ST 0xc04
#define RK3576_SDIO_CON0 0xC24
#define RK3576_SDIO_CON1 0xC28
#define RK3576_SDMMC_CON0 0xC30
#define RK3576_SDMMC_CON1 0xC34
#define RK3576_PHP_CLKSEL_CON(x) ((x) * 0x4 + RK3576_PHP_CRU_BASE + 0x300)
#define RK3576_PHP_CLKGATE_CON(x) ((x) * 0x4 + RK3576_PHP_CRU_BASE + 0x800)
#define RK3576_PHP_SOFTRST_CON(x) ((x) * 0x4 + RK3576_PHP_CRU_BASE + 0xa00)
#define RK3576_PMU_PLL_CON(x) ((x) * 0x4 + RK3576_PHP_CRU_BASE)
#define RK3576_PMU_CLKSEL_CON(x) ((x) * 0x4 + RK3576_PMU_CRU_BASE + 0x300)
#define RK3576_PMU_CLKGATE_CON(x) ((x) * 0x4 + RK3576_PMU_CRU_BASE + 0x800)
#define RK3576_PMU_SOFTRST_CON(x) ((x) * 0x4 + RK3576_PMU_CRU_BASE + 0xa00)
#define RK3576_SECURE_NS_CLKSEL_CON(x) ((x) * 0x4 + RK3576_SECURE_NS_CRU_BASE + 0x300)
#define RK3576_SECURE_NS_CLKGATE_CON(x) ((x) * 0x4 + RK3576_SECURE_NS_CRU_BASE + 0x800)
#define RK3576_SECURE_NS_SOFTRST_CON(x) ((x) * 0x4 + RK3576_SECURE_NS_CRU_BASE + 0xa00)
#define RK3576_CCI_CLKSEL_CON(x) ((x) * 0x4 + RK3576_CCI_CRU_BASE + 0x300)
#define RK3576_CCI_CLKGATE_CON(x) ((x) * 0x4 + RK3576_CCI_CRU_BASE + 0x800)
#define RK3576_CCI_SOFTRST_CON(x) ((x) * 0x4 + RK3576_CCI_CRU_BASE + 0xa00)
#define RK3576_BPLL_CON(x) ((x) * 0x4 + RK3576_BIGCORE_CRU_BASE)
#define RK3576_BIGCORE_CLKSEL_CON(x) ((x) * 0x4 + RK3576_BIGCORE_CRU_BASE + 0x300)
#define RK3576_BIGCORE_CLKGATE_CON(x) ((x) * 0x4 + RK3576_BIGCORE_CRU_BASE + 0x800)
#define RK3576_BIGCORE_SOFTRST_CON(x) ((x) * 0x4 + RK3576_BIGCORE_CRU_BASE + 0xa00)
#define RK3576_LPLL_CON(x) ((x) * 0x4 + RK3576_CCI_CRU_BASE)
#define RK3576_LITCORE_CLKSEL_CON(x) ((x) * 0x4 + RK3576_LITCORE_CRU_BASE + 0x300)
#define RK3576_LITCORE_CLKGATE_CON(x) ((x) * 0x4 + RK3576_LITCORE_CRU_BASE + 0x800)
#define RK3576_LITCORE_SOFTRST_CON(x) ((x) * 0x4 + RK3576_LITCORE_CRU_BASE + 0xa00)
#define RK3576_NON_SECURE_GATING_CON00 0xc48
#define RK3588_PHP_CRU_BASE 0x8000 #define RK3588_PHP_CRU_BASE 0x8000
#define RK3588_PMU_CRU_BASE 0x30000 #define RK3588_PMU_CRU_BASE 0x30000
#define RK3588_BIGCORE0_CRU_BASE 0x50000 #define RK3588_BIGCORE0_CRU_BASE 0x50000
@ -287,6 +339,7 @@ enum rockchip_pll_type {
pll_rk3399, pll_rk3399,
pll_rk3588, pll_rk3588,
pll_rk3588_core, pll_rk3588_core,
pll_rk3588_ddr,
}; };
#define RK3036_PLL_RATE(_rate, _refdiv, _fbdiv, _postdiv1, \ #define RK3036_PLL_RATE(_rate, _refdiv, _fbdiv, _postdiv1, \
@ -1025,6 +1078,7 @@ static inline void rockchip_register_softrst(struct device_node *np,
return rockchip_register_softrst_lut(np, NULL, num_regs, base, flags); return rockchip_register_softrst_lut(np, NULL, num_regs, base, flags);
} }
void rk3576_rst_init(struct device_node *np, void __iomem *reg_base);
void rk3588_rst_init(struct device_node *np, void __iomem *reg_base); void rk3588_rst_init(struct device_node *np, void __iomem *reg_base);
#endif #endif

View File

@ -0,0 +1,651 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (c) 2021 Rockchip Electronics Co., Ltd.
* Copyright (c) 2024 Collabora Ltd.
* Author: Detlev Casanova <detlev.casanova@collabora.com>
* Based on Sebastien Reichel's implementation for RK3588
*/
#include <linux/module.h>
#include <linux/of.h>
#include <dt-bindings/reset/rockchip,rk3576-cru.h>
#include "clk.h"
/* 0x27200000 + 0x0A00 */
#define RK3576_CRU_RESET_OFFSET(id, reg, bit) [id] = (0 + reg * 16 + bit)
/* 0x27208000 + 0x0A00 */
#define RK3576_PHPCRU_RESET_OFFSET(id, reg, bit) [id] = (0x8000*4 + reg * 16 + bit)
/* 0x27210000 + 0x0A00 */
#define RK3576_SECURENSCRU_RESET_OFFSET(id, reg, bit) [id] = (0x10000*4 + reg * 16 + bit)
/* 0x27220000 + 0x0A00 */
#define RK3576_PMU1CRU_RESET_OFFSET(id, reg, bit) [id] = (0x20000*4 + reg * 16 + bit)
/* mapping table for reset ID to register offset */
static const int rk3576_register_offset[] = {
/* SOFTRST_CON01 */
RK3576_CRU_RESET_OFFSET(SRST_A_TOP_BIU, 1, 3),
RK3576_CRU_RESET_OFFSET(SRST_P_TOP_BIU, 1, 5),
RK3576_CRU_RESET_OFFSET(SRST_A_TOP_MID_BIU, 1, 6),
RK3576_CRU_RESET_OFFSET(SRST_A_SECURE_HIGH_BIU, 1, 7),
RK3576_CRU_RESET_OFFSET(SRST_H_TOP_BIU, 1, 14),
/* SOFTRST_CON02 */
RK3576_CRU_RESET_OFFSET(SRST_H_VO0VOP_CHANNEL_BIU, 2, 0),
RK3576_CRU_RESET_OFFSET(SRST_A_VO0VOP_CHANNEL_BIU, 2, 1),
/* SOFTRST_CON06 */
RK3576_CRU_RESET_OFFSET(SRST_BISRINTF, 6, 2),
/* SOFTRST_CON07 */
RK3576_CRU_RESET_OFFSET(SRST_H_AUDIO_BIU, 7, 2),
RK3576_CRU_RESET_OFFSET(SRST_H_ASRC_2CH_0, 7, 3),
RK3576_CRU_RESET_OFFSET(SRST_H_ASRC_2CH_1, 7, 4),
RK3576_CRU_RESET_OFFSET(SRST_H_ASRC_4CH_0, 7, 5),
RK3576_CRU_RESET_OFFSET(SRST_H_ASRC_4CH_1, 7, 6),
RK3576_CRU_RESET_OFFSET(SRST_ASRC_2CH_0, 7, 7),
RK3576_CRU_RESET_OFFSET(SRST_ASRC_2CH_1, 7, 8),
RK3576_CRU_RESET_OFFSET(SRST_ASRC_4CH_0, 7, 9),
RK3576_CRU_RESET_OFFSET(SRST_ASRC_4CH_1, 7, 10),
RK3576_CRU_RESET_OFFSET(SRST_M_SAI0_8CH, 7, 12),
RK3576_CRU_RESET_OFFSET(SRST_H_SAI0_8CH, 7, 13),
RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_RX0, 7, 14),
RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_RX0, 7, 15),
/* SOFTRST_CON08 */
RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_RX1, 8, 0),
RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_RX1, 8, 1),
RK3576_CRU_RESET_OFFSET(SRST_M_SAI1_8CH, 8, 5),
RK3576_CRU_RESET_OFFSET(SRST_H_SAI1_8CH, 8, 6),
RK3576_CRU_RESET_OFFSET(SRST_M_SAI2_2CH, 8, 8),
RK3576_CRU_RESET_OFFSET(SRST_H_SAI2_2CH, 8, 10),
RK3576_CRU_RESET_OFFSET(SRST_M_SAI3_2CH, 8, 12),
RK3576_CRU_RESET_OFFSET(SRST_H_SAI3_2CH, 8, 14),
/* SOFTRST_CON09 */
RK3576_CRU_RESET_OFFSET(SRST_M_SAI4_2CH, 9, 0),
RK3576_CRU_RESET_OFFSET(SRST_H_SAI4_2CH, 9, 2),
RK3576_CRU_RESET_OFFSET(SRST_H_ACDCDIG_DSM, 9, 3),
RK3576_CRU_RESET_OFFSET(SRST_M_ACDCDIG_DSM, 9, 4),
RK3576_CRU_RESET_OFFSET(SRST_PDM1, 9, 5),
RK3576_CRU_RESET_OFFSET(SRST_H_PDM1, 9, 7),
RK3576_CRU_RESET_OFFSET(SRST_M_PDM1, 9, 8),
RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_TX0, 9, 9),
RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_TX0, 9, 10),
RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_TX1, 9, 11),
RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_TX1, 9, 12),
/* SOFTRST_CON11 */
RK3576_CRU_RESET_OFFSET(SRST_A_BUS_BIU, 11, 3),
RK3576_CRU_RESET_OFFSET(SRST_P_BUS_BIU, 11, 4),
RK3576_CRU_RESET_OFFSET(SRST_P_CRU, 11, 5),
RK3576_CRU_RESET_OFFSET(SRST_H_CAN0, 11, 6),
RK3576_CRU_RESET_OFFSET(SRST_CAN0, 11, 7),
RK3576_CRU_RESET_OFFSET(SRST_H_CAN1, 11, 8),
RK3576_CRU_RESET_OFFSET(SRST_CAN1, 11, 9),
RK3576_CRU_RESET_OFFSET(SRST_P_INTMUX2BUS, 11, 12),
RK3576_CRU_RESET_OFFSET(SRST_P_VCCIO_IOC, 11, 13),
RK3576_CRU_RESET_OFFSET(SRST_H_BUS_BIU, 11, 14),
RK3576_CRU_RESET_OFFSET(SRST_KEY_SHIFT, 11, 15),
/* SOFTRST_CON12 */
RK3576_CRU_RESET_OFFSET(SRST_P_I2C1, 12, 0),
RK3576_CRU_RESET_OFFSET(SRST_P_I2C2, 12, 1),
RK3576_CRU_RESET_OFFSET(SRST_P_I2C3, 12, 2),
RK3576_CRU_RESET_OFFSET(SRST_P_I2C4, 12, 3),
RK3576_CRU_RESET_OFFSET(SRST_P_I2C5, 12, 4),
RK3576_CRU_RESET_OFFSET(SRST_P_I2C6, 12, 5),
RK3576_CRU_RESET_OFFSET(SRST_P_I2C7, 12, 6),
RK3576_CRU_RESET_OFFSET(SRST_P_I2C8, 12, 7),
RK3576_CRU_RESET_OFFSET(SRST_P_I2C9, 12, 8),
RK3576_CRU_RESET_OFFSET(SRST_P_WDT_BUSMCU, 12, 9),
RK3576_CRU_RESET_OFFSET(SRST_T_WDT_BUSMCU, 12, 10),
RK3576_CRU_RESET_OFFSET(SRST_A_GIC, 12, 11),
RK3576_CRU_RESET_OFFSET(SRST_I2C1, 12, 12),
RK3576_CRU_RESET_OFFSET(SRST_I2C2, 12, 13),
RK3576_CRU_RESET_OFFSET(SRST_I2C3, 12, 14),
RK3576_CRU_RESET_OFFSET(SRST_I2C4, 12, 15),
/* SOFTRST_CON13 */
RK3576_CRU_RESET_OFFSET(SRST_I2C5, 13, 0),
RK3576_CRU_RESET_OFFSET(SRST_I2C6, 13, 1),
RK3576_CRU_RESET_OFFSET(SRST_I2C7, 13, 2),
RK3576_CRU_RESET_OFFSET(SRST_I2C8, 13, 3),
RK3576_CRU_RESET_OFFSET(SRST_I2C9, 13, 4),
RK3576_CRU_RESET_OFFSET(SRST_P_SARADC, 13, 6),
RK3576_CRU_RESET_OFFSET(SRST_SARADC, 13, 7),
RK3576_CRU_RESET_OFFSET(SRST_P_TSADC, 13, 8),
RK3576_CRU_RESET_OFFSET(SRST_TSADC, 13, 9),
RK3576_CRU_RESET_OFFSET(SRST_P_UART0, 13, 10),
RK3576_CRU_RESET_OFFSET(SRST_P_UART2, 13, 11),
RK3576_CRU_RESET_OFFSET(SRST_P_UART3, 13, 12),
RK3576_CRU_RESET_OFFSET(SRST_P_UART4, 13, 13),
RK3576_CRU_RESET_OFFSET(SRST_P_UART5, 13, 14),
RK3576_CRU_RESET_OFFSET(SRST_P_UART6, 13, 15),
/* SOFTRST_CON14 */
RK3576_CRU_RESET_OFFSET(SRST_P_UART7, 14, 0),
RK3576_CRU_RESET_OFFSET(SRST_P_UART8, 14, 1),
RK3576_CRU_RESET_OFFSET(SRST_P_UART9, 14, 2),
RK3576_CRU_RESET_OFFSET(SRST_P_UART10, 14, 3),
RK3576_CRU_RESET_OFFSET(SRST_P_UART11, 14, 4),
RK3576_CRU_RESET_OFFSET(SRST_S_UART0, 14, 5),
RK3576_CRU_RESET_OFFSET(SRST_S_UART2, 14, 6),
RK3576_CRU_RESET_OFFSET(SRST_S_UART3, 14, 9),
RK3576_CRU_RESET_OFFSET(SRST_S_UART4, 14, 12),
RK3576_CRU_RESET_OFFSET(SRST_S_UART5, 14, 15),
/* SOFTRST_CON15 */
RK3576_CRU_RESET_OFFSET(SRST_S_UART6, 15, 2),
RK3576_CRU_RESET_OFFSET(SRST_S_UART7, 15, 5),
RK3576_CRU_RESET_OFFSET(SRST_S_UART8, 15, 8),
RK3576_CRU_RESET_OFFSET(SRST_S_UART9, 15, 9),
RK3576_CRU_RESET_OFFSET(SRST_S_UART10, 15, 10),
RK3576_CRU_RESET_OFFSET(SRST_S_UART11, 15, 11),
RK3576_CRU_RESET_OFFSET(SRST_P_SPI0, 15, 13),
RK3576_CRU_RESET_OFFSET(SRST_P_SPI1, 15, 14),
RK3576_CRU_RESET_OFFSET(SRST_P_SPI2, 15, 15),
/* SOFTRST_CON16 */
RK3576_CRU_RESET_OFFSET(SRST_P_SPI3, 16, 0),
RK3576_CRU_RESET_OFFSET(SRST_P_SPI4, 16, 1),
RK3576_CRU_RESET_OFFSET(SRST_SPI0, 16, 2),
RK3576_CRU_RESET_OFFSET(SRST_SPI1, 16, 3),
RK3576_CRU_RESET_OFFSET(SRST_SPI2, 16, 4),
RK3576_CRU_RESET_OFFSET(SRST_SPI3, 16, 5),
RK3576_CRU_RESET_OFFSET(SRST_SPI4, 16, 6),
RK3576_CRU_RESET_OFFSET(SRST_P_WDT0, 16, 7),
RK3576_CRU_RESET_OFFSET(SRST_T_WDT0, 16, 8),
RK3576_CRU_RESET_OFFSET(SRST_P_SYS_GRF, 16, 9),
RK3576_CRU_RESET_OFFSET(SRST_P_PWM1, 16, 10),
RK3576_CRU_RESET_OFFSET(SRST_PWM1, 16, 11),
/* SOFTRST_CON17 */
RK3576_CRU_RESET_OFFSET(SRST_P_BUSTIMER0, 17, 3),
RK3576_CRU_RESET_OFFSET(SRST_P_BUSTIMER1, 17, 4),
RK3576_CRU_RESET_OFFSET(SRST_TIMER0, 17, 6),
RK3576_CRU_RESET_OFFSET(SRST_TIMER1, 17, 7),
RK3576_CRU_RESET_OFFSET(SRST_TIMER2, 17, 8),
RK3576_CRU_RESET_OFFSET(SRST_TIMER3, 17, 9),
RK3576_CRU_RESET_OFFSET(SRST_TIMER4, 17, 10),
RK3576_CRU_RESET_OFFSET(SRST_TIMER5, 17, 11),
RK3576_CRU_RESET_OFFSET(SRST_P_BUSIOC, 17, 12),
RK3576_CRU_RESET_OFFSET(SRST_P_MAILBOX0, 17, 13),
RK3576_CRU_RESET_OFFSET(SRST_P_GPIO1, 17, 15),
/* SOFTRST_CON18 */
RK3576_CRU_RESET_OFFSET(SRST_GPIO1, 18, 0),
RK3576_CRU_RESET_OFFSET(SRST_P_GPIO2, 18, 1),
RK3576_CRU_RESET_OFFSET(SRST_GPIO2, 18, 2),
RK3576_CRU_RESET_OFFSET(SRST_P_GPIO3, 18, 3),
RK3576_CRU_RESET_OFFSET(SRST_GPIO3, 18, 4),
RK3576_CRU_RESET_OFFSET(SRST_P_GPIO4, 18, 5),
RK3576_CRU_RESET_OFFSET(SRST_GPIO4, 18, 6),
RK3576_CRU_RESET_OFFSET(SRST_A_DECOM, 18, 7),
RK3576_CRU_RESET_OFFSET(SRST_P_DECOM, 18, 8),
RK3576_CRU_RESET_OFFSET(SRST_D_DECOM, 18, 9),
RK3576_CRU_RESET_OFFSET(SRST_TIMER6, 18, 11),
RK3576_CRU_RESET_OFFSET(SRST_TIMER7, 18, 12),
RK3576_CRU_RESET_OFFSET(SRST_TIMER8, 18, 13),
RK3576_CRU_RESET_OFFSET(SRST_TIMER9, 18, 14),
RK3576_CRU_RESET_OFFSET(SRST_TIMER10, 18, 15),
/* SOFTRST_CON19 */
RK3576_CRU_RESET_OFFSET(SRST_TIMER11, 19, 0),
RK3576_CRU_RESET_OFFSET(SRST_A_DMAC0, 19, 1),
RK3576_CRU_RESET_OFFSET(SRST_A_DMAC1, 19, 2),
RK3576_CRU_RESET_OFFSET(SRST_A_DMAC2, 19, 3),
RK3576_CRU_RESET_OFFSET(SRST_A_SPINLOCK, 19, 4),
RK3576_CRU_RESET_OFFSET(SRST_REF_PVTPLL_BUS, 19, 5),
RK3576_CRU_RESET_OFFSET(SRST_H_I3C0, 19, 7),
RK3576_CRU_RESET_OFFSET(SRST_H_I3C1, 19, 9),
RK3576_CRU_RESET_OFFSET(SRST_H_BUS_CM0_BIU, 19, 11),
RK3576_CRU_RESET_OFFSET(SRST_F_BUS_CM0_CORE, 19, 12),
RK3576_CRU_RESET_OFFSET(SRST_T_BUS_CM0_JTAG, 19, 13),
/* SOFTRST_CON20 */
RK3576_CRU_RESET_OFFSET(SRST_P_INTMUX2PMU, 20, 0),
RK3576_CRU_RESET_OFFSET(SRST_P_INTMUX2DDR, 20, 1),
RK3576_CRU_RESET_OFFSET(SRST_P_PVTPLL_BUS, 20, 3),
RK3576_CRU_RESET_OFFSET(SRST_P_PWM2, 20, 4),
RK3576_CRU_RESET_OFFSET(SRST_PWM2, 20, 5),
RK3576_CRU_RESET_OFFSET(SRST_FREQ_PWM1, 20, 8),
RK3576_CRU_RESET_OFFSET(SRST_COUNTER_PWM1, 20, 9),
RK3576_CRU_RESET_OFFSET(SRST_I3C0, 20, 12),
RK3576_CRU_RESET_OFFSET(SRST_I3C1, 20, 13),
/* SOFTRST_CON21 */
RK3576_CRU_RESET_OFFSET(SRST_P_DDR_MON_CH0, 21, 1),
RK3576_CRU_RESET_OFFSET(SRST_P_DDR_BIU, 21, 2),
RK3576_CRU_RESET_OFFSET(SRST_P_DDR_UPCTL_CH0, 21, 3),
RK3576_CRU_RESET_OFFSET(SRST_TM_DDR_MON_CH0, 21, 4),
RK3576_CRU_RESET_OFFSET(SRST_A_DDR_BIU, 21, 5),
RK3576_CRU_RESET_OFFSET(SRST_DFI_CH0, 21, 6),
RK3576_CRU_RESET_OFFSET(SRST_DDR_MON_CH0, 21, 10),
RK3576_CRU_RESET_OFFSET(SRST_P_DDR_HWLP_CH0, 21, 13),
RK3576_CRU_RESET_OFFSET(SRST_P_DDR_MON_CH1, 21, 14),
RK3576_CRU_RESET_OFFSET(SRST_P_DDR_HWLP_CH1, 21, 15),
/* SOFTRST_CON22 */
RK3576_CRU_RESET_OFFSET(SRST_P_DDR_UPCTL_CH1, 22, 0),
RK3576_CRU_RESET_OFFSET(SRST_TM_DDR_MON_CH1, 22, 1),
RK3576_CRU_RESET_OFFSET(SRST_DFI_CH1, 22, 2),
RK3576_CRU_RESET_OFFSET(SRST_A_DDR01_MSCH0, 22, 3),
RK3576_CRU_RESET_OFFSET(SRST_A_DDR01_MSCH1, 22, 4),
RK3576_CRU_RESET_OFFSET(SRST_DDR_MON_CH1, 22, 6),
RK3576_CRU_RESET_OFFSET(SRST_DDR_SCRAMBLE_CH0, 22, 9),
RK3576_CRU_RESET_OFFSET(SRST_DDR_SCRAMBLE_CH1, 22, 10),
RK3576_CRU_RESET_OFFSET(SRST_P_AHB2APB, 22, 12),
RK3576_CRU_RESET_OFFSET(SRST_H_AHB2APB, 22, 13),
RK3576_CRU_RESET_OFFSET(SRST_H_DDR_BIU, 22, 14),
RK3576_CRU_RESET_OFFSET(SRST_F_DDR_CM0_CORE, 22, 15),
/* SOFTRST_CON23 */
RK3576_CRU_RESET_OFFSET(SRST_P_DDR01_MSCH0, 23, 1),
RK3576_CRU_RESET_OFFSET(SRST_P_DDR01_MSCH1, 23, 2),
RK3576_CRU_RESET_OFFSET(SRST_DDR_TIMER0, 23, 4),
RK3576_CRU_RESET_OFFSET(SRST_DDR_TIMER1, 23, 5),
RK3576_CRU_RESET_OFFSET(SRST_T_WDT_DDR, 23, 6),
RK3576_CRU_RESET_OFFSET(SRST_P_WDT, 23, 7),
RK3576_CRU_RESET_OFFSET(SRST_P_TIMER, 23, 8),
RK3576_CRU_RESET_OFFSET(SRST_T_DDR_CM0_JTAG, 23, 9),
RK3576_CRU_RESET_OFFSET(SRST_P_DDR_GRF, 23, 11),
/* SOFTRST_CON25 */
RK3576_CRU_RESET_OFFSET(SRST_DDR_UPCTL_CH0, 25, 1),
RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_0_CH0, 25, 2),
RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_1_CH0, 25, 3),
RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_2_CH0, 25, 4),
RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_3_CH0, 25, 5),
RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_4_CH0, 25, 6),
/* SOFTRST_CON26 */
RK3576_CRU_RESET_OFFSET(SRST_DDR_UPCTL_CH1, 26, 1),
RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_0_CH1, 26, 2),
RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_1_CH1, 26, 3),
RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_2_CH1, 26, 4),
RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_3_CH1, 26, 5),
RK3576_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL_4_CH1, 26, 6),
/* SOFTRST_CON27 */
RK3576_CRU_RESET_OFFSET(SRST_REF_PVTPLL_DDR, 27, 0),
RK3576_CRU_RESET_OFFSET(SRST_P_PVTPLL_DDR, 27, 1),
/* SOFTRST_CON28 */
RK3576_CRU_RESET_OFFSET(SRST_A_RKNN0, 28, 9),
RK3576_CRU_RESET_OFFSET(SRST_A_RKNN0_BIU, 28, 11),
RK3576_CRU_RESET_OFFSET(SRST_L_RKNN0_BIU, 28, 12),
/* SOFTRST_CON29 */
RK3576_CRU_RESET_OFFSET(SRST_A_RKNN1, 29, 0),
RK3576_CRU_RESET_OFFSET(SRST_A_RKNN1_BIU, 29, 2),
RK3576_CRU_RESET_OFFSET(SRST_L_RKNN1_BIU, 29, 3),
/* SOFTRST_CON31 */
RK3576_CRU_RESET_OFFSET(SRST_NPU_DAP, 31, 0),
RK3576_CRU_RESET_OFFSET(SRST_L_NPUSUBSYS_BIU, 31, 1),
RK3576_CRU_RESET_OFFSET(SRST_P_NPUTOP_BIU, 31, 9),
RK3576_CRU_RESET_OFFSET(SRST_P_NPU_TIMER, 31, 10),
RK3576_CRU_RESET_OFFSET(SRST_NPUTIMER0, 31, 12),
RK3576_CRU_RESET_OFFSET(SRST_NPUTIMER1, 31, 13),
RK3576_CRU_RESET_OFFSET(SRST_P_NPU_WDT, 31, 14),
RK3576_CRU_RESET_OFFSET(SRST_T_NPU_WDT, 31, 15),
/* SOFTRST_CON32 */
RK3576_CRU_RESET_OFFSET(SRST_A_RKNN_CBUF, 32, 0),
RK3576_CRU_RESET_OFFSET(SRST_A_RVCORE0, 32, 1),
RK3576_CRU_RESET_OFFSET(SRST_P_NPU_GRF, 32, 2),
RK3576_CRU_RESET_OFFSET(SRST_P_PVTPLL_NPU, 32, 3),
RK3576_CRU_RESET_OFFSET(SRST_NPU_PVTPLL, 32, 4),
RK3576_CRU_RESET_OFFSET(SRST_H_NPU_CM0_BIU, 32, 6),
RK3576_CRU_RESET_OFFSET(SRST_F_NPU_CM0_CORE, 32, 7),
RK3576_CRU_RESET_OFFSET(SRST_T_NPU_CM0_JTAG, 32, 8),
RK3576_CRU_RESET_OFFSET(SRST_A_RKNNTOP_BIU, 32, 11),
RK3576_CRU_RESET_OFFSET(SRST_H_RKNN_CBUF, 32, 12),
RK3576_CRU_RESET_OFFSET(SRST_H_RKNNTOP_BIU, 32, 13),
/* SOFTRST_CON33 */
RK3576_CRU_RESET_OFFSET(SRST_H_NVM_BIU, 33, 2),
RK3576_CRU_RESET_OFFSET(SRST_A_NVM_BIU, 33, 3),
RK3576_CRU_RESET_OFFSET(SRST_S_FSPI, 33, 6),
RK3576_CRU_RESET_OFFSET(SRST_H_FSPI, 33, 7),
RK3576_CRU_RESET_OFFSET(SRST_C_EMMC, 33, 8),
RK3576_CRU_RESET_OFFSET(SRST_H_EMMC, 33, 9),
RK3576_CRU_RESET_OFFSET(SRST_A_EMMC, 33, 10),
RK3576_CRU_RESET_OFFSET(SRST_B_EMMC, 33, 11),
RK3576_CRU_RESET_OFFSET(SRST_T_EMMC, 33, 12),
/* SOFTRST_CON34 */
RK3576_CRU_RESET_OFFSET(SRST_P_GRF, 34, 1),
RK3576_CRU_RESET_OFFSET(SRST_P_PHP_BIU, 34, 5),
RK3576_CRU_RESET_OFFSET(SRST_A_PHP_BIU, 34, 9),
RK3576_CRU_RESET_OFFSET(SRST_P_PCIE0, 34, 13),
RK3576_CRU_RESET_OFFSET(SRST_PCIE0_POWER_UP, 34, 15),
/* SOFTRST_CON35 */
RK3576_CRU_RESET_OFFSET(SRST_A_USB3OTG1, 35, 3),
RK3576_CRU_RESET_OFFSET(SRST_A_MMU0, 35, 11),
RK3576_CRU_RESET_OFFSET(SRST_A_SLV_MMU0, 35, 13),
RK3576_CRU_RESET_OFFSET(SRST_A_MMU1, 35, 14),
/* SOFTRST_CON36 */
RK3576_CRU_RESET_OFFSET(SRST_A_SLV_MMU1, 36, 0),
RK3576_CRU_RESET_OFFSET(SRST_P_PCIE1, 36, 7),
RK3576_CRU_RESET_OFFSET(SRST_PCIE1_POWER_UP, 36, 9),
/* SOFTRST_CON37 */
RK3576_CRU_RESET_OFFSET(SRST_RXOOB0, 37, 0),
RK3576_CRU_RESET_OFFSET(SRST_RXOOB1, 37, 1),
RK3576_CRU_RESET_OFFSET(SRST_PMALIVE0, 37, 2),
RK3576_CRU_RESET_OFFSET(SRST_PMALIVE1, 37, 3),
RK3576_CRU_RESET_OFFSET(SRST_A_SATA0, 37, 4),
RK3576_CRU_RESET_OFFSET(SRST_A_SATA1, 37, 5),
RK3576_CRU_RESET_OFFSET(SRST_ASIC1, 37, 6),
RK3576_CRU_RESET_OFFSET(SRST_ASIC0, 37, 7),
/* SOFTRST_CON40 */
RK3576_CRU_RESET_OFFSET(SRST_P_CSIDPHY1, 40, 2),
RK3576_CRU_RESET_OFFSET(SRST_SCAN_CSIDPHY1, 40, 3),
/* SOFTRST_CON42 */
RK3576_CRU_RESET_OFFSET(SRST_P_SDGMAC_GRF, 42, 3),
RK3576_CRU_RESET_OFFSET(SRST_P_SDGMAC_BIU, 42, 4),
RK3576_CRU_RESET_OFFSET(SRST_A_SDGMAC_BIU, 42, 5),
RK3576_CRU_RESET_OFFSET(SRST_H_SDGMAC_BIU, 42, 6),
RK3576_CRU_RESET_OFFSET(SRST_A_GMAC0, 42, 7),
RK3576_CRU_RESET_OFFSET(SRST_A_GMAC1, 42, 8),
RK3576_CRU_RESET_OFFSET(SRST_P_GMAC0, 42, 9),
RK3576_CRU_RESET_OFFSET(SRST_P_GMAC1, 42, 10),
RK3576_CRU_RESET_OFFSET(SRST_H_SDIO, 42, 12),
/* SOFTRST_CON43 */
RK3576_CRU_RESET_OFFSET(SRST_H_SDMMC0, 43, 2),
RK3576_CRU_RESET_OFFSET(SRST_S_FSPI1, 43, 3),
RK3576_CRU_RESET_OFFSET(SRST_H_FSPI1, 43, 4),
RK3576_CRU_RESET_OFFSET(SRST_A_DSMC_BIU, 43, 6),
RK3576_CRU_RESET_OFFSET(SRST_A_DSMC, 43, 7),
RK3576_CRU_RESET_OFFSET(SRST_P_DSMC, 43, 8),
RK3576_CRU_RESET_OFFSET(SRST_H_HSGPIO, 43, 10),
RK3576_CRU_RESET_OFFSET(SRST_HSGPIO, 43, 11),
RK3576_CRU_RESET_OFFSET(SRST_A_HSGPIO, 43, 13),
/* SOFTRST_CON45 */
RK3576_CRU_RESET_OFFSET(SRST_H_RKVDEC, 45, 3),
RK3576_CRU_RESET_OFFSET(SRST_H_RKVDEC_BIU, 45, 5),
RK3576_CRU_RESET_OFFSET(SRST_A_RKVDEC_BIU, 45, 6),
RK3576_CRU_RESET_OFFSET(SRST_RKVDEC_HEVC_CA, 45, 8),
RK3576_CRU_RESET_OFFSET(SRST_RKVDEC_CORE, 45, 9),
/* SOFTRST_CON47 */
RK3576_CRU_RESET_OFFSET(SRST_A_USB_BIU, 47, 3),
RK3576_CRU_RESET_OFFSET(SRST_P_USBUFS_BIU, 47, 4),
RK3576_CRU_RESET_OFFSET(SRST_A_USB3OTG0, 47, 5),
RK3576_CRU_RESET_OFFSET(SRST_A_UFS_BIU, 47, 10),
RK3576_CRU_RESET_OFFSET(SRST_A_MMU2, 47, 12),
RK3576_CRU_RESET_OFFSET(SRST_A_SLV_MMU2, 47, 13),
RK3576_CRU_RESET_OFFSET(SRST_A_UFS_SYS, 47, 15),
/* SOFTRST_CON48 */
RK3576_CRU_RESET_OFFSET(SRST_A_UFS, 48, 0),
RK3576_CRU_RESET_OFFSET(SRST_P_USBUFS_GRF, 48, 1),
RK3576_CRU_RESET_OFFSET(SRST_P_UFS_GRF, 48, 2),
/* SOFTRST_CON49 */
RK3576_CRU_RESET_OFFSET(SRST_H_VPU_BIU, 49, 6),
RK3576_CRU_RESET_OFFSET(SRST_A_JPEG_BIU, 49, 7),
RK3576_CRU_RESET_OFFSET(SRST_A_RGA_BIU, 49, 10),
RK3576_CRU_RESET_OFFSET(SRST_A_VDPP_BIU, 49, 11),
RK3576_CRU_RESET_OFFSET(SRST_A_EBC_BIU, 49, 12),
RK3576_CRU_RESET_OFFSET(SRST_H_RGA2E_0, 49, 13),
RK3576_CRU_RESET_OFFSET(SRST_A_RGA2E_0, 49, 14),
RK3576_CRU_RESET_OFFSET(SRST_CORE_RGA2E_0, 49, 15),
/* SOFTRST_CON50 */
RK3576_CRU_RESET_OFFSET(SRST_A_JPEG, 50, 0),
RK3576_CRU_RESET_OFFSET(SRST_H_JPEG, 50, 1),
RK3576_CRU_RESET_OFFSET(SRST_H_VDPP, 50, 2),
RK3576_CRU_RESET_OFFSET(SRST_A_VDPP, 50, 3),
RK3576_CRU_RESET_OFFSET(SRST_CORE_VDPP, 50, 4),
RK3576_CRU_RESET_OFFSET(SRST_H_RGA2E_1, 50, 5),
RK3576_CRU_RESET_OFFSET(SRST_A_RGA2E_1, 50, 6),
RK3576_CRU_RESET_OFFSET(SRST_CORE_RGA2E_1, 50, 7),
RK3576_CRU_RESET_OFFSET(SRST_H_EBC, 50, 10),
RK3576_CRU_RESET_OFFSET(SRST_A_EBC, 50, 11),
RK3576_CRU_RESET_OFFSET(SRST_D_EBC, 50, 12),
/* SOFTRST_CON51 */
RK3576_CRU_RESET_OFFSET(SRST_H_VEPU0_BIU, 51, 2),
RK3576_CRU_RESET_OFFSET(SRST_A_VEPU0_BIU, 51, 3),
RK3576_CRU_RESET_OFFSET(SRST_H_VEPU0, 51, 4),
RK3576_CRU_RESET_OFFSET(SRST_A_VEPU0, 51, 5),
RK3576_CRU_RESET_OFFSET(SRST_VEPU0_CORE, 51, 6),
/* SOFTRST_CON53 */
RK3576_CRU_RESET_OFFSET(SRST_A_VI_BIU, 53, 3),
RK3576_CRU_RESET_OFFSET(SRST_H_VI_BIU, 53, 4),
RK3576_CRU_RESET_OFFSET(SRST_P_VI_BIU, 53, 5),
RK3576_CRU_RESET_OFFSET(SRST_D_VICAP, 53, 6),
RK3576_CRU_RESET_OFFSET(SRST_A_VICAP, 53, 7),
RK3576_CRU_RESET_OFFSET(SRST_H_VICAP, 53, 8),
RK3576_CRU_RESET_OFFSET(SRST_ISP0, 53, 10),
RK3576_CRU_RESET_OFFSET(SRST_ISP0_VICAP, 53, 11),
/* SOFTRST_CON54 */
RK3576_CRU_RESET_OFFSET(SRST_CORE_VPSS, 54, 1),
RK3576_CRU_RESET_OFFSET(SRST_P_CSI_HOST_0, 54, 4),
RK3576_CRU_RESET_OFFSET(SRST_P_CSI_HOST_1, 54, 5),
RK3576_CRU_RESET_OFFSET(SRST_P_CSI_HOST_2, 54, 6),
RK3576_CRU_RESET_OFFSET(SRST_P_CSI_HOST_3, 54, 7),
RK3576_CRU_RESET_OFFSET(SRST_P_CSI_HOST_4, 54, 8),
/* SOFTRST_CON59 */
RK3576_CRU_RESET_OFFSET(SRST_CIFIN, 59, 0),
RK3576_CRU_RESET_OFFSET(SRST_VICAP_I0CLK, 59, 1),
RK3576_CRU_RESET_OFFSET(SRST_VICAP_I1CLK, 59, 2),
RK3576_CRU_RESET_OFFSET(SRST_VICAP_I2CLK, 59, 3),
RK3576_CRU_RESET_OFFSET(SRST_VICAP_I3CLK, 59, 4),
RK3576_CRU_RESET_OFFSET(SRST_VICAP_I4CLK, 59, 5),
/* SOFTRST_CON61 */
RK3576_CRU_RESET_OFFSET(SRST_A_VOP_BIU, 61, 4),
RK3576_CRU_RESET_OFFSET(SRST_A_VOP2_BIU, 61, 5),
RK3576_CRU_RESET_OFFSET(SRST_H_VOP_BIU, 61, 6),
RK3576_CRU_RESET_OFFSET(SRST_P_VOP_BIU, 61, 7),
RK3576_CRU_RESET_OFFSET(SRST_H_VOP, 61, 8),
RK3576_CRU_RESET_OFFSET(SRST_A_VOP, 61, 9),
RK3576_CRU_RESET_OFFSET(SRST_D_VP0, 61, 13),
/* SOFTRST_CON62 */
RK3576_CRU_RESET_OFFSET(SRST_D_VP1, 62, 0),
RK3576_CRU_RESET_OFFSET(SRST_D_VP2, 62, 1),
RK3576_CRU_RESET_OFFSET(SRST_P_VOP2_BIU, 62, 2),
RK3576_CRU_RESET_OFFSET(SRST_P_VOPGRF, 62, 3),
/* SOFTRST_CON63 */
RK3576_CRU_RESET_OFFSET(SRST_H_VO0_BIU, 63, 5),
RK3576_CRU_RESET_OFFSET(SRST_P_VO0_BIU, 63, 7),
RK3576_CRU_RESET_OFFSET(SRST_A_HDCP0_BIU, 63, 9),
RK3576_CRU_RESET_OFFSET(SRST_P_VO0_GRF, 63, 10),
RK3576_CRU_RESET_OFFSET(SRST_A_HDCP0, 63, 12),
RK3576_CRU_RESET_OFFSET(SRST_H_HDCP0, 63, 13),
RK3576_CRU_RESET_OFFSET(SRST_HDCP0, 63, 14),
/* SOFTRST_CON64 */
RK3576_CRU_RESET_OFFSET(SRST_P_DSIHOST0, 64, 5),
RK3576_CRU_RESET_OFFSET(SRST_DSIHOST0, 64, 6),
RK3576_CRU_RESET_OFFSET(SRST_P_HDMITX0, 64, 7),
RK3576_CRU_RESET_OFFSET(SRST_HDMITX0_REF, 64, 9),
RK3576_CRU_RESET_OFFSET(SRST_P_EDP0, 64, 13),
RK3576_CRU_RESET_OFFSET(SRST_EDP0_24M, 64, 14),
/* SOFTRST_CON65 */
RK3576_CRU_RESET_OFFSET(SRST_M_SAI5_8CH, 65, 4),
RK3576_CRU_RESET_OFFSET(SRST_H_SAI5_8CH, 65, 5),
RK3576_CRU_RESET_OFFSET(SRST_M_SAI6_8CH, 65, 8),
RK3576_CRU_RESET_OFFSET(SRST_H_SAI6_8CH, 65, 9),
RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_TX2, 65, 10),
RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_TX2, 65, 13),
RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_RX2, 65, 14),
RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_RX2, 65, 15),
/* SOFTRST_CON66 */
RK3576_CRU_RESET_OFFSET(SRST_H_SAI8_8CH, 66, 0),
RK3576_CRU_RESET_OFFSET(SRST_M_SAI8_8CH, 66, 2),
/* SOFTRST_CON67 */
RK3576_CRU_RESET_OFFSET(SRST_H_VO1_BIU, 67, 5),
RK3576_CRU_RESET_OFFSET(SRST_P_VO1_BIU, 67, 6),
RK3576_CRU_RESET_OFFSET(SRST_M_SAI7_8CH, 67, 9),
RK3576_CRU_RESET_OFFSET(SRST_H_SAI7_8CH, 67, 10),
RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_TX3, 67, 11),
RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_TX4, 67, 12),
RK3576_CRU_RESET_OFFSET(SRST_H_SPDIF_TX5, 67, 13),
RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_TX3, 67, 14),
/* SOFTRST_CON68 */
RK3576_CRU_RESET_OFFSET(SRST_DP0, 68, 0),
RK3576_CRU_RESET_OFFSET(SRST_P_VO1_GRF, 68, 2),
RK3576_CRU_RESET_OFFSET(SRST_A_HDCP1_BIU, 68, 3),
RK3576_CRU_RESET_OFFSET(SRST_A_HDCP1, 68, 4),
RK3576_CRU_RESET_OFFSET(SRST_H_HDCP1, 68, 5),
RK3576_CRU_RESET_OFFSET(SRST_HDCP1, 68, 6),
RK3576_CRU_RESET_OFFSET(SRST_H_SAI9_8CH, 68, 9),
RK3576_CRU_RESET_OFFSET(SRST_M_SAI9_8CH, 68, 11),
RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_TX4, 68, 12),
RK3576_CRU_RESET_OFFSET(SRST_M_SPDIF_TX5, 68, 13),
/* SOFTRST_CON69 */
RK3576_CRU_RESET_OFFSET(SRST_GPU, 69, 3),
RK3576_CRU_RESET_OFFSET(SRST_A_S_GPU_BIU, 69, 6),
RK3576_CRU_RESET_OFFSET(SRST_A_M0_GPU_BIU, 69, 7),
RK3576_CRU_RESET_OFFSET(SRST_P_GPU_BIU, 69, 9),
RK3576_CRU_RESET_OFFSET(SRST_P_GPU_GRF, 69, 13),
RK3576_CRU_RESET_OFFSET(SRST_GPU_PVTPLL, 69, 14),
RK3576_CRU_RESET_OFFSET(SRST_P_PVTPLL_GPU, 69, 15),
/* SOFTRST_CON72 */
RK3576_CRU_RESET_OFFSET(SRST_A_CENTER_BIU, 72, 4),
RK3576_CRU_RESET_OFFSET(SRST_A_DMA2DDR, 72, 5),
RK3576_CRU_RESET_OFFSET(SRST_A_DDR_SHAREMEM, 72, 6),
RK3576_CRU_RESET_OFFSET(SRST_A_DDR_SHAREMEM_BIU, 72, 7),
RK3576_CRU_RESET_OFFSET(SRST_H_CENTER_BIU, 72, 8),
RK3576_CRU_RESET_OFFSET(SRST_P_CENTER_GRF, 72, 9),
RK3576_CRU_RESET_OFFSET(SRST_P_DMA2DDR, 72, 10),
RK3576_CRU_RESET_OFFSET(SRST_P_SHAREMEM, 72, 11),
RK3576_CRU_RESET_OFFSET(SRST_P_CENTER_BIU, 72, 12),
/* SOFTRST_CON75 */
RK3576_CRU_RESET_OFFSET(SRST_LINKSYM_HDMITXPHY0, 75, 1),
/* SOFTRST_CON78 */
RK3576_CRU_RESET_OFFSET(SRST_DP0_PIXELCLK, 78, 1),
RK3576_CRU_RESET_OFFSET(SRST_PHY_DP0_TX, 78, 2),
RK3576_CRU_RESET_OFFSET(SRST_DP1_PIXELCLK, 78, 3),
RK3576_CRU_RESET_OFFSET(SRST_DP2_PIXELCLK, 78, 4),
/* SOFTRST_CON79 */
RK3576_CRU_RESET_OFFSET(SRST_H_VEPU1_BIU, 79, 1),
RK3576_CRU_RESET_OFFSET(SRST_A_VEPU1_BIU, 79, 2),
RK3576_CRU_RESET_OFFSET(SRST_H_VEPU1, 79, 3),
RK3576_CRU_RESET_OFFSET(SRST_A_VEPU1, 79, 4),
RK3576_CRU_RESET_OFFSET(SRST_VEPU1_CORE, 79, 5),
/* PPLL_SOFTRST_CON00 */
RK3576_PHPCRU_RESET_OFFSET(SRST_P_PHPPHY_CRU, 0, 1),
RK3576_PHPCRU_RESET_OFFSET(SRST_P_APB2ASB_SLV_CHIP_TOP, 0, 3),
RK3576_PHPCRU_RESET_OFFSET(SRST_P_PCIE2_COMBOPHY0, 0, 5),
RK3576_PHPCRU_RESET_OFFSET(SRST_P_PCIE2_COMBOPHY0_GRF, 0, 6),
RK3576_PHPCRU_RESET_OFFSET(SRST_P_PCIE2_COMBOPHY1, 0, 7),
RK3576_PHPCRU_RESET_OFFSET(SRST_P_PCIE2_COMBOPHY1_GRF, 0, 8),
/* PPLL_SOFTRST_CON01 */
RK3576_PHPCRU_RESET_OFFSET(SRST_PCIE0_PIPE_PHY, 1, 5),
RK3576_PHPCRU_RESET_OFFSET(SRST_PCIE1_PIPE_PHY, 1, 8),
/* SECURENS_SOFTRST_CON00 */
RK3576_SECURENSCRU_RESET_OFFSET(SRST_H_CRYPTO_NS, 0, 3),
RK3576_SECURENSCRU_RESET_OFFSET(SRST_H_TRNG_NS, 0, 4),
RK3576_SECURENSCRU_RESET_OFFSET(SRST_P_OTPC_NS, 0, 8),
RK3576_SECURENSCRU_RESET_OFFSET(SRST_OTPC_NS, 0, 9),
/* PMU1_SOFTRST_CON00 */
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_HDPTX_GRF, 0, 0),
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_HDPTX_APB, 0, 1),
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_MIPI_DCPHY, 0, 2),
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_DCPHY_GRF, 0, 3),
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_BOT0_APB2ASB, 0, 4),
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_BOT1_APB2ASB, 0, 5),
RK3576_PMU1CRU_RESET_OFFSET(SRST_USB2DEBUG, 0, 6),
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_CSIPHY_GRF, 0, 7),
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_CSIPHY, 0, 8),
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_USBPHY_GRF_0, 0, 9),
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_USBPHY_GRF_1, 0, 10),
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_USBDP_GRF, 0, 11),
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_USBDPPHY, 0, 12),
RK3576_PMU1CRU_RESET_OFFSET(SRST_USBDP_COMBO_PHY_INIT, 0, 15),
/* PMU1_SOFTRST_CON01 */
RK3576_PMU1CRU_RESET_OFFSET(SRST_USBDP_COMBO_PHY_CMN, 1, 0),
RK3576_PMU1CRU_RESET_OFFSET(SRST_USBDP_COMBO_PHY_LANE, 1, 1),
RK3576_PMU1CRU_RESET_OFFSET(SRST_USBDP_COMBO_PHY_PCS, 1, 2),
RK3576_PMU1CRU_RESET_OFFSET(SRST_M_MIPI_DCPHY, 1, 3),
RK3576_PMU1CRU_RESET_OFFSET(SRST_S_MIPI_DCPHY, 1, 4),
RK3576_PMU1CRU_RESET_OFFSET(SRST_SCAN_CSIPHY, 1, 5),
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_VCCIO6_IOC, 1, 6),
RK3576_PMU1CRU_RESET_OFFSET(SRST_OTGPHY_0, 1, 7),
RK3576_PMU1CRU_RESET_OFFSET(SRST_OTGPHY_1, 1, 8),
RK3576_PMU1CRU_RESET_OFFSET(SRST_HDPTX_INIT, 1, 9),
RK3576_PMU1CRU_RESET_OFFSET(SRST_HDPTX_CMN, 1, 10),
RK3576_PMU1CRU_RESET_OFFSET(SRST_HDPTX_LANE, 1, 11),
RK3576_PMU1CRU_RESET_OFFSET(SRST_HDMITXHDP, 1, 13),
/* PMU1_SOFTRST_CON02 */
RK3576_PMU1CRU_RESET_OFFSET(SRST_MPHY_INIT, 2, 0),
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_MPHY_GRF, 2, 1),
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_VCCIO7_IOC, 2, 3),
/* PMU1_SOFTRST_CON03 */
RK3576_PMU1CRU_RESET_OFFSET(SRST_H_PMU1_BIU, 3, 9),
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_PMU1_NIU, 3, 10),
RK3576_PMU1CRU_RESET_OFFSET(SRST_H_PMU_CM0_BIU, 3, 11),
RK3576_PMU1CRU_RESET_OFFSET(SRST_PMU_CM0_CORE, 3, 12),
RK3576_PMU1CRU_RESET_OFFSET(SRST_PMU_CM0_JTAG, 3, 13),
/* PMU1_SOFTRST_CON04 */
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_CRU_PMU1, 4, 1),
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_PMU1_GRF, 4, 3),
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_PMU1_IOC, 4, 4),
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_PMU1WDT, 4, 5),
RK3576_PMU1CRU_RESET_OFFSET(SRST_T_PMU1WDT, 4, 6),
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_PMUTIMER, 4, 7),
RK3576_PMU1CRU_RESET_OFFSET(SRST_PMUTIMER0, 4, 9),
RK3576_PMU1CRU_RESET_OFFSET(SRST_PMUTIMER1, 4, 10),
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_PMU1PWM, 4, 11),
RK3576_PMU1CRU_RESET_OFFSET(SRST_PMU1PWM, 4, 12),
/* PMU1_SOFTRST_CON05 */
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_I2C0, 5, 1),
RK3576_PMU1CRU_RESET_OFFSET(SRST_I2C0, 5, 2),
RK3576_PMU1CRU_RESET_OFFSET(SRST_S_UART1, 5, 5),
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_UART1, 5, 6),
RK3576_PMU1CRU_RESET_OFFSET(SRST_PDM0, 5, 13),
RK3576_PMU1CRU_RESET_OFFSET(SRST_H_PDM0, 5, 15),
/* PMU1_SOFTRST_CON06 */
RK3576_PMU1CRU_RESET_OFFSET(SRST_M_PDM0, 6, 0),
RK3576_PMU1CRU_RESET_OFFSET(SRST_H_VAD, 6, 1),
/* PMU1_SOFTRST_CON07 */
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_PMU0GRF, 7, 4),
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_PMU0IOC, 7, 5),
RK3576_PMU1CRU_RESET_OFFSET(SRST_P_GPIO0, 7, 6),
RK3576_PMU1CRU_RESET_OFFSET(SRST_DB_GPIO0, 7, 7),
};
void rk3576_rst_init(struct device_node *np, void __iomem *reg_base)
{
rockchip_register_softrst_lut(np,
rk3576_register_offset,
ARRAY_SIZE(rk3576_register_offset),
reg_base + RK3576_SOFTRST_CON(0),
ROCKCHIP_SOFTRST_HIWORD_MASK);
}

View File

@ -21,6 +21,7 @@ obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynos7.o
obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynos7885.o obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynos7885.o
obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynos850.o obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynos850.o
obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynosautov9.o obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynosautov9.o
obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-exynosautov920.o
obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-gs101.o obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK) += clk-gs101.o
obj-$(CONFIG_S3C64XX_COMMON_CLK) += clk-s3c64xx.o obj-$(CONFIG_S3C64XX_COMMON_CLK) += clk-s3c64xx.o
obj-$(CONFIG_S5PV210_COMMON_CLK) += clk-s5pv210.o clk-s5pv210-audss.o obj-$(CONFIG_S5PV210_COMMON_CLK) += clk-s5pv210.o clk-s5pv210-audss.o

View File

@ -17,10 +17,10 @@
#include "clk-exynos-arm64.h" #include "clk-exynos-arm64.h"
/* NOTE: Must be equal to the last clock ID increased by one */ /* NOTE: Must be equal to the last clock ID increased by one */
#define CLKS_NR_TOP (CLK_GOUT_FSYS_USB30DRD + 1) #define CLKS_NR_TOP (CLK_MOUT_SHARED1_PLL + 1)
#define CLKS_NR_CORE (CLK_GOUT_TREX_P_CORE_PCLK_P_CORE + 1) #define CLKS_NR_CORE (CLK_GOUT_TREX_P_CORE_PCLK_P_CORE + 1)
#define CLKS_NR_PERI (CLK_GOUT_WDT1_PCLK + 1) #define CLKS_NR_PERI (CLK_GOUT_WDT1_PCLK + 1)
#define CLKS_NR_FSYS (CLK_GOUT_MMC_SDIO_SDCLKIN + 1) #define CLKS_NR_FSYS (CLK_FSYS_USB30DRD_REF_CLK + 1)
/* ---- CMU_TOP ------------------------------------------------------------- */ /* ---- CMU_TOP ------------------------------------------------------------- */
@ -162,6 +162,10 @@ static const struct samsung_pll_clock top_pll_clks[] __initconst = {
NULL), NULL),
}; };
/* List of parent clocks for Muxes in CMU_TOP */
PNAME(mout_shared0_pll_p) = { "oscclk", "fout_shared0_pll" };
PNAME(mout_shared1_pll_p) = { "oscclk", "fout_shared1_pll" };
/* List of parent clocks for Muxes in CMU_TOP: for CMU_CORE */ /* List of parent clocks for Muxes in CMU_TOP: for CMU_CORE */
PNAME(mout_core_bus_p) = { "dout_shared0_div2", "dout_shared1_div2", PNAME(mout_core_bus_p) = { "dout_shared0_div2", "dout_shared1_div2",
"dout_shared0_div3", "dout_shared0_div3" }; "dout_shared0_div3", "dout_shared0_div3" };
@ -189,6 +193,12 @@ PNAME(mout_fsys_mmc_sdio_p) = { "dout_shared0_div2", "dout_shared1_div2" };
PNAME(mout_fsys_usb30drd_p) = { "dout_shared0_div4", "dout_shared1_div4" }; PNAME(mout_fsys_usb30drd_p) = { "dout_shared0_div4", "dout_shared1_div4" };
static const struct samsung_mux_clock top_mux_clks[] __initconst = { static const struct samsung_mux_clock top_mux_clks[] __initconst = {
/* TOP */
MUX(CLK_MOUT_SHARED0_PLL, "mout_shared0_pll", mout_shared0_pll_p,
PLL_CON0_PLL_SHARED0, 4, 1),
MUX(CLK_MOUT_SHARED1_PLL, "mout_shared1_pll", mout_shared1_pll_p,
PLL_CON0_PLL_SHARED1, 4, 1),
/* CORE */ /* CORE */
MUX(CLK_MOUT_CORE_BUS, "mout_core_bus", mout_core_bus_p, MUX(CLK_MOUT_CORE_BUS, "mout_core_bus", mout_core_bus_p,
CLK_CON_MUX_MUX_CLKCMU_CORE_BUS, 0, 2), CLK_CON_MUX_MUX_CLKCMU_CORE_BUS, 0, 2),
@ -232,17 +242,17 @@ static const struct samsung_mux_clock top_mux_clks[] __initconst = {
static const struct samsung_div_clock top_div_clks[] __initconst = { static const struct samsung_div_clock top_div_clks[] __initconst = {
/* TOP */ /* TOP */
DIV(CLK_DOUT_SHARED0_DIV2, "dout_shared0_div2", "fout_shared0_pll", DIV(CLK_DOUT_SHARED0_DIV2, "dout_shared0_div2", "mout_shared0_pll",
CLK_CON_DIV_PLL_SHARED0_DIV2, 0, 1), CLK_CON_DIV_PLL_SHARED0_DIV2, 0, 1),
DIV(CLK_DOUT_SHARED0_DIV3, "dout_shared0_div3", "fout_shared0_pll", DIV(CLK_DOUT_SHARED0_DIV3, "dout_shared0_div3", "mout_shared0_pll",
CLK_CON_DIV_PLL_SHARED0_DIV3, 0, 2), CLK_CON_DIV_PLL_SHARED0_DIV3, 0, 2),
DIV(CLK_DOUT_SHARED0_DIV4, "dout_shared0_div4", "dout_shared0_div2", DIV(CLK_DOUT_SHARED0_DIV4, "dout_shared0_div4", "dout_shared0_div2",
CLK_CON_DIV_PLL_SHARED0_DIV4, 0, 1), CLK_CON_DIV_PLL_SHARED0_DIV4, 0, 1),
DIV(CLK_DOUT_SHARED0_DIV5, "dout_shared0_div5", "fout_shared0_pll", DIV(CLK_DOUT_SHARED0_DIV5, "dout_shared0_div5", "mout_shared0_pll",
CLK_CON_DIV_PLL_SHARED0_DIV5, 0, 3), CLK_CON_DIV_PLL_SHARED0_DIV5, 0, 3),
DIV(CLK_DOUT_SHARED1_DIV2, "dout_shared1_div2", "fout_shared1_pll", DIV(CLK_DOUT_SHARED1_DIV2, "dout_shared1_div2", "mout_shared1_pll",
CLK_CON_DIV_PLL_SHARED1_DIV2, 0, 1), CLK_CON_DIV_PLL_SHARED1_DIV2, 0, 1),
DIV(CLK_DOUT_SHARED1_DIV3, "dout_shared1_div3", "fout_shared1_pll", DIV(CLK_DOUT_SHARED1_DIV3, "dout_shared1_div3", "mout_shared1_pll",
CLK_CON_DIV_PLL_SHARED1_DIV3, 0, 2), CLK_CON_DIV_PLL_SHARED1_DIV3, 0, 2),
DIV(CLK_DOUT_SHARED1_DIV4, "dout_shared1_div4", "dout_shared1_div2", DIV(CLK_DOUT_SHARED1_DIV4, "dout_shared1_div4", "dout_shared1_div2",
CLK_CON_DIV_PLL_SHARED1_DIV4, 0, 1), CLK_CON_DIV_PLL_SHARED1_DIV4, 0, 1),
@ -676,30 +686,56 @@ static const struct samsung_cmu_info core_cmu_info __initconst = {
/* ---- CMU_FSYS ------------------------------------------------------------ */ /* ---- CMU_FSYS ------------------------------------------------------------ */
/* Register Offset definitions for CMU_FSYS (0x13400000) */ /* Register Offset definitions for CMU_FSYS (0x13400000) */
#define PLL_CON0_MUX_CLKCMU_FSYS_BUS_USER 0x0100 #define PLL_LOCKTIME_PLL_USB 0x0000
#define PLL_CON0_MUX_CLKCMU_FSYS_MMC_CARD_USER 0x0120 #define PLL_CON0_MUX_CLKCMU_FSYS_BUS_USER 0x0100
#define PLL_CON0_MUX_CLKCMU_FSYS_MMC_EMBD_USER 0x0140 #define PLL_CON0_MUX_CLKCMU_FSYS_MMC_CARD_USER 0x0120
#define PLL_CON0_MUX_CLKCMU_FSYS_MMC_SDIO_USER 0x0160 #define PLL_CON0_MUX_CLKCMU_FSYS_MMC_EMBD_USER 0x0140
#define PLL_CON0_MUX_CLKCMU_FSYS_USB30DRD_USER 0x0180 #define PLL_CON0_MUX_CLKCMU_FSYS_MMC_SDIO_USER 0x0160
#define CLK_CON_GAT_GOUT_FSYS_MMC_CARD_I_ACLK 0x2030 #define PLL_CON0_MUX_CLKCMU_FSYS_USB30DRD_USER 0x0180
#define CLK_CON_GAT_GOUT_FSYS_MMC_CARD_SDCLKIN 0x2034 #define PLL_CON0_PLL_USB 0x01a0
#define CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_I_ACLK 0x2038 #define CLK_CON_GAT_CLK_FSYS_USB20PHY_CLKCORE 0x200c
#define CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_SDCLKIN 0x203c #define CLK_CON_GAT_GOUT_FSYS_MMC_CARD_I_ACLK 0x2030
#define CLK_CON_GAT_GOUT_FSYS_MMC_SDIO_I_ACLK 0x2040 #define CLK_CON_GAT_GOUT_FSYS_MMC_CARD_SDCLKIN 0x2034
#define CLK_CON_GAT_GOUT_FSYS_MMC_SDIO_SDCLKIN 0x2044 #define CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_I_ACLK 0x2038
#define CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_SDCLKIN 0x203c
#define CLK_CON_GAT_GOUT_FSYS_MMC_SDIO_I_ACLK 0x2040
#define CLK_CON_GAT_GOUT_FSYS_MMC_SDIO_SDCLKIN 0x2044
#define CLK_CON_GAT_GOUT_FSYS_USB30DRD_ACLK_20PHYCTRL 0x2068
#define CLK_CON_GAT_GOUT_FSYS_USB30DRD_ACLK_30PHYCTRL_0 0x206c
#define CLK_CON_GAT_GOUT_FSYS_USB30DRD_ACLK_30PHYCTRL_1 0x2070
#define CLK_CON_GAT_GOUT_FSYS_USB30DRD_BUS_CLK_EARLY 0x2074
#define CLK_CON_GAT_GOUT_FSYS_USB30DRD_REF_CLK 0x2078
static const unsigned long fsys_clk_regs[] __initconst = { static const unsigned long fsys_clk_regs[] __initconst = {
PLL_LOCKTIME_PLL_USB,
PLL_CON0_MUX_CLKCMU_FSYS_BUS_USER, PLL_CON0_MUX_CLKCMU_FSYS_BUS_USER,
PLL_CON0_MUX_CLKCMU_FSYS_MMC_CARD_USER, PLL_CON0_MUX_CLKCMU_FSYS_MMC_CARD_USER,
PLL_CON0_MUX_CLKCMU_FSYS_MMC_EMBD_USER, PLL_CON0_MUX_CLKCMU_FSYS_MMC_EMBD_USER,
PLL_CON0_MUX_CLKCMU_FSYS_MMC_SDIO_USER, PLL_CON0_MUX_CLKCMU_FSYS_MMC_SDIO_USER,
PLL_CON0_MUX_CLKCMU_FSYS_USB30DRD_USER, PLL_CON0_MUX_CLKCMU_FSYS_USB30DRD_USER,
PLL_CON0_PLL_USB,
CLK_CON_GAT_CLK_FSYS_USB20PHY_CLKCORE,
CLK_CON_GAT_GOUT_FSYS_MMC_CARD_I_ACLK, CLK_CON_GAT_GOUT_FSYS_MMC_CARD_I_ACLK,
CLK_CON_GAT_GOUT_FSYS_MMC_CARD_SDCLKIN, CLK_CON_GAT_GOUT_FSYS_MMC_CARD_SDCLKIN,
CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_I_ACLK, CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_I_ACLK,
CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_SDCLKIN, CLK_CON_GAT_GOUT_FSYS_MMC_EMBD_SDCLKIN,
CLK_CON_GAT_GOUT_FSYS_MMC_SDIO_I_ACLK, CLK_CON_GAT_GOUT_FSYS_MMC_SDIO_I_ACLK,
CLK_CON_GAT_GOUT_FSYS_MMC_SDIO_SDCLKIN, CLK_CON_GAT_GOUT_FSYS_MMC_SDIO_SDCLKIN,
CLK_CON_GAT_GOUT_FSYS_USB30DRD_ACLK_20PHYCTRL,
CLK_CON_GAT_GOUT_FSYS_USB30DRD_ACLK_30PHYCTRL_0,
CLK_CON_GAT_GOUT_FSYS_USB30DRD_ACLK_30PHYCTRL_1,
CLK_CON_GAT_GOUT_FSYS_USB30DRD_BUS_CLK_EARLY,
CLK_CON_GAT_GOUT_FSYS_USB30DRD_REF_CLK,
};
static const struct samsung_pll_rate_table pll_usb_rate_table[] __initconst = {
PLL_35XX_RATE(26 * MHZ, 50000000U, 400, 13, 4),
};
static const struct samsung_pll_clock fsys_pll_clks[] __initconst = {
PLL(pll_1418x, CLK_FOUT_USB_PLL, "fout_usb_pll", "oscclk",
PLL_LOCKTIME_PLL_USB, PLL_CON0_PLL_USB,
pll_usb_rate_table),
}; };
/* List of parent clocks for Muxes in CMU_FSYS */ /* List of parent clocks for Muxes in CMU_FSYS */
@ -708,6 +744,7 @@ PNAME(mout_fsys_mmc_card_user_p) = { "oscclk", "dout_fsys_mmc_card" };
PNAME(mout_fsys_mmc_embd_user_p) = { "oscclk", "dout_fsys_mmc_embd" }; PNAME(mout_fsys_mmc_embd_user_p) = { "oscclk", "dout_fsys_mmc_embd" };
PNAME(mout_fsys_mmc_sdio_user_p) = { "oscclk", "dout_fsys_mmc_sdio" }; PNAME(mout_fsys_mmc_sdio_user_p) = { "oscclk", "dout_fsys_mmc_sdio" };
PNAME(mout_fsys_usb30drd_user_p) = { "oscclk", "dout_fsys_usb30drd" }; PNAME(mout_fsys_usb30drd_user_p) = { "oscclk", "dout_fsys_usb30drd" };
PNAME(mout_usb_pll_p) = { "oscclk", "fout_usb_pll" };
static const struct samsung_mux_clock fsys_mux_clks[] __initconst = { static const struct samsung_mux_clock fsys_mux_clks[] __initconst = {
MUX(CLK_MOUT_FSYS_BUS_USER, "mout_fsys_bus_user", mout_fsys_bus_user_p, MUX(CLK_MOUT_FSYS_BUS_USER, "mout_fsys_bus_user", mout_fsys_bus_user_p,
@ -721,12 +758,16 @@ static const struct samsung_mux_clock fsys_mux_clks[] __initconst = {
MUX_F(CLK_MOUT_FSYS_MMC_SDIO_USER, "mout_fsys_mmc_sdio_user", MUX_F(CLK_MOUT_FSYS_MMC_SDIO_USER, "mout_fsys_mmc_sdio_user",
mout_fsys_mmc_sdio_user_p, PLL_CON0_MUX_CLKCMU_FSYS_MMC_SDIO_USER, mout_fsys_mmc_sdio_user_p, PLL_CON0_MUX_CLKCMU_FSYS_MMC_SDIO_USER,
4, 1, CLK_SET_RATE_PARENT, 0), 4, 1, CLK_SET_RATE_PARENT, 0),
MUX_F(CLK_MOUT_FSYS_USB30DRD_USER, "mout_fsys_usb30drd_user", MUX(CLK_MOUT_FSYS_USB30DRD_USER, "mout_fsys_usb30drd_user",
mout_fsys_usb30drd_user_p, PLL_CON0_MUX_CLKCMU_FSYS_USB30DRD_USER, mout_fsys_usb30drd_user_p, PLL_CON0_MUX_CLKCMU_FSYS_USB30DRD_USER,
4, 1, CLK_SET_RATE_PARENT, 0), 4, 1),
nMUX_F(CLK_MOUT_USB_PLL, "mout_usb_pll", mout_usb_pll_p,
PLL_CON0_PLL_USB, 4, 1, CLK_SET_RATE_PARENT, 0),
}; };
static const struct samsung_gate_clock fsys_gate_clks[] __initconst = { static const struct samsung_gate_clock fsys_gate_clks[] __initconst = {
GATE(CLK_FSYS_USB20PHY_CLKCORE, "clk_fsys_usb20phy_clkcore", "mout_usb_pll",
CLK_CON_GAT_CLK_FSYS_USB20PHY_CLKCORE, 21, CLK_SET_RATE_PARENT, 0),
GATE(CLK_GOUT_MMC_CARD_ACLK, "gout_mmc_card_aclk", "mout_fsys_bus_user", GATE(CLK_GOUT_MMC_CARD_ACLK, "gout_mmc_card_aclk", "mout_fsys_bus_user",
CLK_CON_GAT_GOUT_FSYS_MMC_CARD_I_ACLK, 21, 0, 0), CLK_CON_GAT_GOUT_FSYS_MMC_CARD_I_ACLK, 21, 0, 0),
GATE(CLK_GOUT_MMC_CARD_SDCLKIN, "gout_mmc_card_sdclkin", GATE(CLK_GOUT_MMC_CARD_SDCLKIN, "gout_mmc_card_sdclkin",
@ -742,9 +783,21 @@ static const struct samsung_gate_clock fsys_gate_clks[] __initconst = {
GATE(CLK_GOUT_MMC_SDIO_SDCLKIN, "gout_mmc_sdio_sdclkin", GATE(CLK_GOUT_MMC_SDIO_SDCLKIN, "gout_mmc_sdio_sdclkin",
"mout_fsys_mmc_sdio_user", CLK_CON_GAT_GOUT_FSYS_MMC_SDIO_SDCLKIN, "mout_fsys_mmc_sdio_user", CLK_CON_GAT_GOUT_FSYS_MMC_SDIO_SDCLKIN,
21, CLK_SET_RATE_PARENT, 0), 21, CLK_SET_RATE_PARENT, 0),
GATE(CLK_FSYS_USB30DRD_ACLK_20PHYCTRL, "clk_fsys_usb30drd_aclk_20phyctrl",
"mout_fsys_bus_user", CLK_CON_GAT_GOUT_FSYS_USB30DRD_ACLK_20PHYCTRL, 21, 0, 0),
GATE(CLK_FSYS_USB30DRD_ACLK_30PHYCTRL_0, "clk_fsys_usb30drd_aclk_30phyctrl_0",
"mout_fsys_bus_user", CLK_CON_GAT_GOUT_FSYS_USB30DRD_ACLK_30PHYCTRL_0, 21, 0, 0),
GATE(CLK_FSYS_USB30DRD_ACLK_30PHYCTRL_1, "clk_fsys_usb30drd_aclk_30phyctrl_1",
"mout_fsys_bus_user", CLK_CON_GAT_GOUT_FSYS_USB30DRD_ACLK_30PHYCTRL_1, 21, 0, 0),
GATE(CLK_FSYS_USB30DRD_BUS_CLK_EARLY, "clk_fsys_usb30drd_bus_clk_early",
"mout_fsys_bus_user", CLK_CON_GAT_GOUT_FSYS_USB30DRD_BUS_CLK_EARLY, 21, 0, 0),
GATE(CLK_FSYS_USB30DRD_REF_CLK, "clk_fsys_usb30drd_ref_clk", "mout_fsys_usb30drd_user",
CLK_CON_GAT_GOUT_FSYS_USB30DRD_REF_CLK, 21, 0, 0),
}; };
static const struct samsung_cmu_info fsys_cmu_info __initconst = { static const struct samsung_cmu_info fsys_cmu_info __initconst = {
.pll_clks = fsys_pll_clks,
.nr_pll_clks = ARRAY_SIZE(fsys_pll_clks),
.mux_clks = fsys_mux_clks, .mux_clks = fsys_mux_clks,
.nr_mux_clks = ARRAY_SIZE(fsys_mux_clks), .nr_mux_clks = ARRAY_SIZE(fsys_mux_clks),
.gate_clks = fsys_gate_clks, .gate_clks = fsys_gate_clks,

View File

@ -28,7 +28,7 @@
#define CLKS_NR_HSI (CLK_GOUT_HSI_CMU_HSI_PCLK + 1) #define CLKS_NR_HSI (CLK_GOUT_HSI_CMU_HSI_PCLK + 1)
#define CLKS_NR_IS (CLK_GOUT_IS_SYSREG_PCLK + 1) #define CLKS_NR_IS (CLK_GOUT_IS_SYSREG_PCLK + 1)
#define CLKS_NR_MFCMSCL (CLK_GOUT_MFCMSCL_SYSREG_PCLK + 1) #define CLKS_NR_MFCMSCL (CLK_GOUT_MFCMSCL_SYSREG_PCLK + 1)
#define CLKS_NR_PERI (CLK_GOUT_WDT1_PCLK + 1) #define CLKS_NR_PERI (CLK_GOUT_BUSIF_TMU_PCLK + 1)
#define CLKS_NR_CORE (CLK_GOUT_SPDMA_CORE_ACLK + 1) #define CLKS_NR_CORE (CLK_GOUT_SPDMA_CORE_ACLK + 1)
#define CLKS_NR_DPU (CLK_GOUT_DPU_SYSREG_PCLK + 1) #define CLKS_NR_DPU (CLK_GOUT_DPU_SYSREG_PCLK + 1)
@ -1921,6 +1921,7 @@ static const struct samsung_cmu_info mfcmscl_cmu_info __initconst = {
#define CLK_CON_GAT_GATE_CLK_PERI_HSI2C_0 0x200c #define CLK_CON_GAT_GATE_CLK_PERI_HSI2C_0 0x200c
#define CLK_CON_GAT_GATE_CLK_PERI_HSI2C_1 0x2010 #define CLK_CON_GAT_GATE_CLK_PERI_HSI2C_1 0x2010
#define CLK_CON_GAT_GATE_CLK_PERI_HSI2C_2 0x2014 #define CLK_CON_GAT_GATE_CLK_PERI_HSI2C_2 0x2014
#define CLK_CON_GAT_GOUT_PERI_BUSIF_TMU_PCLK 0x2018
#define CLK_CON_GAT_GOUT_PERI_GPIO_PERI_PCLK 0x2020 #define CLK_CON_GAT_GOUT_PERI_GPIO_PERI_PCLK 0x2020
#define CLK_CON_GAT_GOUT_PERI_HSI2C_0_IPCLK 0x2024 #define CLK_CON_GAT_GOUT_PERI_HSI2C_0_IPCLK 0x2024
#define CLK_CON_GAT_GOUT_PERI_HSI2C_0_PCLK 0x2028 #define CLK_CON_GAT_GOUT_PERI_HSI2C_0_PCLK 0x2028
@ -1957,6 +1958,7 @@ static const unsigned long peri_clk_regs[] __initconst = {
CLK_CON_GAT_GATE_CLK_PERI_HSI2C_0, CLK_CON_GAT_GATE_CLK_PERI_HSI2C_0,
CLK_CON_GAT_GATE_CLK_PERI_HSI2C_1, CLK_CON_GAT_GATE_CLK_PERI_HSI2C_1,
CLK_CON_GAT_GATE_CLK_PERI_HSI2C_2, CLK_CON_GAT_GATE_CLK_PERI_HSI2C_2,
CLK_CON_GAT_GOUT_PERI_BUSIF_TMU_PCLK,
CLK_CON_GAT_GOUT_PERI_GPIO_PERI_PCLK, CLK_CON_GAT_GOUT_PERI_GPIO_PERI_PCLK,
CLK_CON_GAT_GOUT_PERI_HSI2C_0_IPCLK, CLK_CON_GAT_GOUT_PERI_HSI2C_0_IPCLK,
CLK_CON_GAT_GOUT_PERI_HSI2C_0_PCLK, CLK_CON_GAT_GOUT_PERI_HSI2C_0_PCLK,
@ -2068,6 +2070,9 @@ static const struct samsung_gate_clock peri_gate_clks[] __initconst = {
GATE(CLK_GOUT_GPIO_PERI_PCLK, "gout_gpio_peri_pclk", GATE(CLK_GOUT_GPIO_PERI_PCLK, "gout_gpio_peri_pclk",
"mout_peri_bus_user", "mout_peri_bus_user",
CLK_CON_GAT_GOUT_PERI_GPIO_PERI_PCLK, 21, CLK_IGNORE_UNUSED, 0), CLK_CON_GAT_GOUT_PERI_GPIO_PERI_PCLK, 21, CLK_IGNORE_UNUSED, 0),
GATE(CLK_GOUT_BUSIF_TMU_PCLK, "gout_busif_tmu_pclk",
"mout_peri_bus_user",
CLK_CON_GAT_GOUT_PERI_BUSIF_TMU_PCLK, 21, 0, 0),
}; };
static const struct samsung_cmu_info peri_cmu_info __initconst = { static const struct samsung_cmu_info peri_cmu_info __initconst = {

View File

@ -20,6 +20,7 @@
#define CLKS_NR_TOP (GOUT_CLKCMU_PERIS_BUS + 1) #define CLKS_NR_TOP (GOUT_CLKCMU_PERIS_BUS + 1)
#define CLKS_NR_BUSMC (CLK_GOUT_BUSMC_SPDMA_PCLK + 1) #define CLKS_NR_BUSMC (CLK_GOUT_BUSMC_SPDMA_PCLK + 1)
#define CLKS_NR_CORE (CLK_GOUT_CORE_CMU_CORE_PCLK + 1) #define CLKS_NR_CORE (CLK_GOUT_CORE_CMU_CORE_PCLK + 1)
#define CLKS_NR_DPUM (CLK_GOUT_DPUM_SYSMMU_D3_CLK + 1)
#define CLKS_NR_FSYS0 (CLK_GOUT_FSYS0_PCIE_GEN3B_4L_CLK + 1) #define CLKS_NR_FSYS0 (CLK_GOUT_FSYS0_PCIE_GEN3B_4L_CLK + 1)
#define CLKS_NR_FSYS1 (CLK_GOUT_FSYS1_USB30_1_ACLK + 1) #define CLKS_NR_FSYS1 (CLK_GOUT_FSYS1_USB30_1_ACLK + 1)
#define CLKS_NR_FSYS2 (CLK_GOUT_FSYS2_UFS_EMBD1_UNIPRO + 1) #define CLKS_NR_FSYS2 (CLK_GOUT_FSYS2_UFS_EMBD1_UNIPRO + 1)
@ -1076,6 +1077,85 @@ static const struct samsung_cmu_info core_cmu_info __initconst = {
.clk_name = "dout_clkcmu_core_bus", .clk_name = "dout_clkcmu_core_bus",
}; };
/* ---- CMU_DPUM ---------------------------------------------------------- */
/* Register Offset definitions for CMU_DPUM (0x18c00000) */
#define PLL_CON0_MUX_CLKCMU_DPUM_BUS_USER 0x0600
#define CLK_CON_DIV_DIV_CLK_DPUM_BUSP 0x1800
#define CLK_CON_GAT_GOUT_BLK_DPUM_UID_DPUM_IPCLKPORT_ACLK_DECON 0x202c
#define CLK_CON_GAT_GOUT_BLK_DPUM_UID_DPUM_IPCLKPORT_ACLK_DMA 0x2030
#define CLK_CON_GAT_GOUT_BLK_DPUM_UID_DPUM_IPCLKPORT_ACLK_DPP 0x2034
#define CLK_CON_GAT_GOUT_BLK_DPUM_UID_SYSMMU_D0_DPUM_IPCLKPORT_CLK_S1 0x207c
#define CLK_CON_GAT_GOUT_BLK_DPUM_UID_SYSMMU_D1_DPUM_IPCLKPORT_CLK_S1 0x2084
#define CLK_CON_GAT_GOUT_BLK_DPUM_UID_SYSMMU_D2_DPUM_IPCLKPORT_CLK_S1 0x208c
#define CLK_CON_GAT_GOUT_BLK_DPUM_UID_SYSMMU_D3_DPUM_IPCLKPORT_CLK_S1 0x2094
static const unsigned long dpum_clk_regs[] __initconst = {
PLL_CON0_MUX_CLKCMU_DPUM_BUS_USER,
CLK_CON_DIV_DIV_CLK_DPUM_BUSP,
CLK_CON_GAT_GOUT_BLK_DPUM_UID_DPUM_IPCLKPORT_ACLK_DECON,
CLK_CON_GAT_GOUT_BLK_DPUM_UID_DPUM_IPCLKPORT_ACLK_DMA,
CLK_CON_GAT_GOUT_BLK_DPUM_UID_DPUM_IPCLKPORT_ACLK_DPP,
CLK_CON_GAT_GOUT_BLK_DPUM_UID_SYSMMU_D0_DPUM_IPCLKPORT_CLK_S1,
CLK_CON_GAT_GOUT_BLK_DPUM_UID_SYSMMU_D1_DPUM_IPCLKPORT_CLK_S1,
CLK_CON_GAT_GOUT_BLK_DPUM_UID_SYSMMU_D2_DPUM_IPCLKPORT_CLK_S1,
CLK_CON_GAT_GOUT_BLK_DPUM_UID_SYSMMU_D3_DPUM_IPCLKPORT_CLK_S1,
};
PNAME(mout_dpum_bus_user_p) = { "oscclk", "dout_clkcmu_dpum_bus" };
static const struct samsung_mux_clock dpum_mux_clks[] __initconst = {
MUX(CLK_MOUT_DPUM_BUS_USER, "mout_dpum_bus_user",
mout_dpum_bus_user_p, PLL_CON0_MUX_CLKCMU_DPUM_BUS_USER, 4, 1),
};
static const struct samsung_div_clock dpum_div_clks[] __initconst = {
DIV(CLK_DOUT_DPUM_BUSP, "dout_dpum_busp", "mout_dpum_bus_user",
CLK_CON_DIV_DIV_CLK_DPUM_BUSP, 0, 3),
};
static const struct samsung_gate_clock dpum_gate_clks[] __initconst = {
GATE(CLK_GOUT_DPUM_ACLK_DECON, "gout_dpum_decon_aclk",
"mout_dpum_bus_user",
CLK_CON_GAT_GOUT_BLK_DPUM_UID_DPUM_IPCLKPORT_ACLK_DECON, 21,
0, 0),
GATE(CLK_GOUT_DPUM_ACLK_DMA, "gout_dpum_dma_aclk", "mout_dpum_bus_user",
CLK_CON_GAT_GOUT_BLK_DPUM_UID_DPUM_IPCLKPORT_ACLK_DMA, 21,
0, 0),
GATE(CLK_GOUT_DPUM_ACLK_DPP, "gout_dpum_dpp_aclk", "mout_dpum_bus_user",
CLK_CON_GAT_GOUT_BLK_DPUM_UID_DPUM_IPCLKPORT_ACLK_DPP, 21,
0, 0),
GATE(CLK_GOUT_DPUM_SYSMMU_D0_CLK, "gout_dpum_sysmmu_d0_clk",
"mout_dpum_bus_user",
CLK_CON_GAT_GOUT_BLK_DPUM_UID_SYSMMU_D0_DPUM_IPCLKPORT_CLK_S1, 21,
0, 0),
GATE(CLK_GOUT_DPUM_SYSMMU_D1_CLK, "gout_dpum_sysmmu_d1_clk",
"mout_dpum_bus_user",
CLK_CON_GAT_GOUT_BLK_DPUM_UID_SYSMMU_D1_DPUM_IPCLKPORT_CLK_S1, 21,
0, 0),
GATE(CLK_GOUT_DPUM_SYSMMU_D2_CLK, "gout_dpum_sysmmu_d2_clk",
"mout_dpum_bus_user",
CLK_CON_GAT_GOUT_BLK_DPUM_UID_SYSMMU_D2_DPUM_IPCLKPORT_CLK_S1, 21,
0, 0),
GATE(CLK_GOUT_DPUM_SYSMMU_D3_CLK, "gout_dpum_sysmmu_d3_clk",
"mout_dpum_bus_user",
CLK_CON_GAT_GOUT_BLK_DPUM_UID_SYSMMU_D3_DPUM_IPCLKPORT_CLK_S1, 21,
0, 0),
};
static const struct samsung_cmu_info dpum_cmu_info __initconst = {
.mux_clks = dpum_mux_clks,
.nr_mux_clks = ARRAY_SIZE(dpum_mux_clks),
.div_clks = dpum_div_clks,
.nr_div_clks = ARRAY_SIZE(dpum_div_clks),
.gate_clks = dpum_gate_clks,
.nr_gate_clks = ARRAY_SIZE(dpum_gate_clks),
.nr_clk_ids = CLKS_NR_DPUM,
.clk_regs = dpum_clk_regs,
.nr_clk_regs = ARRAY_SIZE(dpum_clk_regs),
.clk_name = "bus",
};
/* ---- CMU_FSYS0 ---------------------------------------------------------- */ /* ---- CMU_FSYS0 ---------------------------------------------------------- */
/* Register Offset definitions for CMU_FSYS2 (0x17700000) */ /* Register Offset definitions for CMU_FSYS2 (0x17700000) */
@ -2085,6 +2165,9 @@ static const struct of_device_id exynosautov9_cmu_of_match[] = {
}, { }, {
.compatible = "samsung,exynosautov9-cmu-core", .compatible = "samsung,exynosautov9-cmu-core",
.data = &core_cmu_info, .data = &core_cmu_info,
}, {
.compatible = "samsung,exynosautov9-cmu-dpum",
.data = &dpum_cmu_info,
}, { }, {
.compatible = "samsung,exynosautov9-cmu-fsys0", .compatible = "samsung,exynosautov9-cmu-fsys0",
.data = &fsys0_cmu_info, .data = &fsys0_cmu_info,

File diff suppressed because it is too large Load Diff

View File

@ -430,6 +430,9 @@ static const struct clk_ops samsung_pll36xx_clk_min_ops = {
#define PLL0822X_LOCK_STAT_SHIFT (29) #define PLL0822X_LOCK_STAT_SHIFT (29)
#define PLL0822X_ENABLE_SHIFT (31) #define PLL0822X_ENABLE_SHIFT (31)
/* PLL1418x is similar to PLL0822x, except that MDIV is one bit smaller */
#define PLL1418X_MDIV_MASK (0x1FF)
static unsigned long samsung_pll0822x_recalc_rate(struct clk_hw *hw, static unsigned long samsung_pll0822x_recalc_rate(struct clk_hw *hw,
unsigned long parent_rate) unsigned long parent_rate)
{ {
@ -438,7 +441,10 @@ static unsigned long samsung_pll0822x_recalc_rate(struct clk_hw *hw,
u64 fvco = parent_rate; u64 fvco = parent_rate;
pll_con3 = readl_relaxed(pll->con_reg); pll_con3 = readl_relaxed(pll->con_reg);
mdiv = (pll_con3 >> PLL0822X_MDIV_SHIFT) & PLL0822X_MDIV_MASK; if (pll->type != pll_1418x)
mdiv = (pll_con3 >> PLL0822X_MDIV_SHIFT) & PLL0822X_MDIV_MASK;
else
mdiv = (pll_con3 >> PLL0822X_MDIV_SHIFT) & PLL1418X_MDIV_MASK;
pdiv = (pll_con3 >> PLL0822X_PDIV_SHIFT) & PLL0822X_PDIV_MASK; pdiv = (pll_con3 >> PLL0822X_PDIV_SHIFT) & PLL0822X_PDIV_MASK;
sdiv = (pll_con3 >> PLL0822X_SDIV_SHIFT) & PLL0822X_SDIV_MASK; sdiv = (pll_con3 >> PLL0822X_SDIV_SHIFT) & PLL0822X_SDIV_MASK;
@ -456,7 +462,12 @@ static int samsung_pll0822x_set_rate(struct clk_hw *hw, unsigned long drate,
{ {
const struct samsung_pll_rate_table *rate; const struct samsung_pll_rate_table *rate;
struct samsung_clk_pll *pll = to_clk_pll(hw); struct samsung_clk_pll *pll = to_clk_pll(hw);
u32 pll_con3; u32 mdiv_mask, pll_con3;
if (pll->type != pll_1418x)
mdiv_mask = PLL0822X_MDIV_MASK;
else
mdiv_mask = PLL1418X_MDIV_MASK;
/* Get required rate settings from table */ /* Get required rate settings from table */
rate = samsung_get_pll_settings(pll, drate); rate = samsung_get_pll_settings(pll, drate);
@ -468,7 +479,7 @@ static int samsung_pll0822x_set_rate(struct clk_hw *hw, unsigned long drate,
/* Change PLL PMS values */ /* Change PLL PMS values */
pll_con3 = readl_relaxed(pll->con_reg); pll_con3 = readl_relaxed(pll->con_reg);
pll_con3 &= ~((PLL0822X_MDIV_MASK << PLL0822X_MDIV_SHIFT) | pll_con3 &= ~((mdiv_mask << PLL0822X_MDIV_SHIFT) |
(PLL0822X_PDIV_MASK << PLL0822X_PDIV_SHIFT) | (PLL0822X_PDIV_MASK << PLL0822X_PDIV_SHIFT) |
(PLL0822X_SDIV_MASK << PLL0822X_SDIV_SHIFT)); (PLL0822X_SDIV_MASK << PLL0822X_SDIV_SHIFT));
pll_con3 |= (rate->mdiv << PLL0822X_MDIV_SHIFT) | pll_con3 |= (rate->mdiv << PLL0822X_MDIV_SHIFT) |
@ -1261,6 +1272,47 @@ static const struct clk_ops samsung_pll2650xx_clk_min_ops = {
.recalc_rate = samsung_pll2650xx_recalc_rate, .recalc_rate = samsung_pll2650xx_recalc_rate,
}; };
/*
* PLL531X Clock Type
*/
/* Maximum lock time can be 500 * PDIV cycles */
#define PLL531X_LOCK_FACTOR (500)
#define PLL531X_MDIV_MASK (0x3FF)
#define PLL531X_PDIV_MASK (0x3F)
#define PLL531X_SDIV_MASK (0x7)
#define PLL531X_FDIV_MASK (0xFFFFFFFF)
#define PLL531X_MDIV_SHIFT (16)
#define PLL531X_PDIV_SHIFT (8)
#define PLL531X_SDIV_SHIFT (0)
static unsigned long samsung_pll531x_recalc_rate(struct clk_hw *hw,
unsigned long parent_rate)
{
struct samsung_clk_pll *pll = to_clk_pll(hw);
u32 pdiv, sdiv, fdiv, pll_con0, pll_con8;
u64 mdiv, fout = parent_rate;
pll_con0 = readl_relaxed(pll->con_reg);
pll_con8 = readl_relaxed(pll->con_reg + 20);
mdiv = (pll_con0 >> PLL531X_MDIV_SHIFT) & PLL531X_MDIV_MASK;
pdiv = (pll_con0 >> PLL531X_PDIV_SHIFT) & PLL531X_PDIV_MASK;
sdiv = (pll_con0 >> PLL531X_SDIV_SHIFT) & PLL531X_SDIV_MASK;
fdiv = (pll_con8 & PLL531X_FDIV_MASK);
if (fdiv >> 31)
mdiv--;
fout *= (mdiv << 24) + (fdiv >> 8);
do_div(fout, (pdiv << sdiv));
fout >>= 24;
return (unsigned long)fout;
}
static const struct clk_ops samsung_pll531x_clk_ops = {
.recalc_rate = samsung_pll531x_recalc_rate,
};
static void __init _samsung_clk_register_pll(struct samsung_clk_provider *ctx, static void __init _samsung_clk_register_pll(struct samsung_clk_provider *ctx,
const struct samsung_pll_clock *pll_clk) const struct samsung_pll_clock *pll_clk)
{ {
@ -1317,6 +1369,7 @@ static void __init _samsung_clk_register_pll(struct samsung_clk_provider *ctx,
init.ops = &samsung_pll35xx_clk_ops; init.ops = &samsung_pll35xx_clk_ops;
break; break;
case pll_1417x: case pll_1417x:
case pll_1418x:
case pll_0818x: case pll_0818x:
case pll_0822x: case pll_0822x:
case pll_0516x: case pll_0516x:
@ -1394,6 +1447,9 @@ static void __init _samsung_clk_register_pll(struct samsung_clk_provider *ctx,
else else
init.ops = &samsung_pll2650xx_clk_ops; init.ops = &samsung_pll2650xx_clk_ops;
break; break;
case pll_531x:
init.ops = &samsung_pll531x_clk_ops;
break;
default: default:
pr_warn("%s: Unknown pll type for pll clk %s\n", pr_warn("%s: Unknown pll type for pll clk %s\n",
__func__, pll_clk->name); __func__, pll_clk->name);

View File

@ -30,6 +30,7 @@ enum samsung_pll_type {
pll_2650x, pll_2650x,
pll_2650xx, pll_2650xx,
pll_1417x, pll_1417x,
pll_1418x,
pll_1450x, pll_1450x,
pll_1451x, pll_1451x,
pll_1452x, pll_1452x,
@ -41,6 +42,7 @@ enum samsung_pll_type {
pll_0516x, pll_0516x,
pll_0517x, pll_0517x,
pll_0518x, pll_0518x,
pll_531x,
}; };
#define PLL_RATE(_fin, _m, _p, _s, _k, _ks) \ #define PLL_RATE(_fin, _m, _p, _s, _k, _ks) \

View File

@ -69,6 +69,8 @@
#define CLK_GOUT_FSYS_MMC_EMBD 58 #define CLK_GOUT_FSYS_MMC_EMBD 58
#define CLK_GOUT_FSYS_MMC_SDIO 59 #define CLK_GOUT_FSYS_MMC_SDIO 59
#define CLK_GOUT_FSYS_USB30DRD 60 #define CLK_GOUT_FSYS_USB30DRD 60
#define CLK_MOUT_SHARED0_PLL 61
#define CLK_MOUT_SHARED1_PLL 62
/* CMU_CORE */ /* CMU_CORE */
#define CLK_MOUT_CORE_BUS_USER 1 #define CLK_MOUT_CORE_BUS_USER 1
@ -132,16 +134,24 @@
#define CLK_GOUT_WDT1_PCLK 43 #define CLK_GOUT_WDT1_PCLK 43
/* CMU_FSYS */ /* CMU_FSYS */
#define CLK_MOUT_FSYS_BUS_USER 1 #define CLK_MOUT_FSYS_BUS_USER 1
#define CLK_MOUT_FSYS_MMC_CARD_USER 2 #define CLK_MOUT_FSYS_MMC_CARD_USER 2
#define CLK_MOUT_FSYS_MMC_EMBD_USER 3 #define CLK_MOUT_FSYS_MMC_EMBD_USER 3
#define CLK_MOUT_FSYS_MMC_SDIO_USER 4 #define CLK_MOUT_FSYS_MMC_SDIO_USER 4
#define CLK_MOUT_FSYS_USB30DRD_USER 4 #define CLK_GOUT_MMC_CARD_ACLK 5
#define CLK_GOUT_MMC_CARD_ACLK 5 #define CLK_GOUT_MMC_CARD_SDCLKIN 6
#define CLK_GOUT_MMC_CARD_SDCLKIN 6 #define CLK_GOUT_MMC_EMBD_ACLK 7
#define CLK_GOUT_MMC_EMBD_ACLK 7 #define CLK_GOUT_MMC_EMBD_SDCLKIN 8
#define CLK_GOUT_MMC_EMBD_SDCLKIN 8 #define CLK_GOUT_MMC_SDIO_ACLK 9
#define CLK_GOUT_MMC_SDIO_ACLK 9 #define CLK_GOUT_MMC_SDIO_SDCLKIN 10
#define CLK_GOUT_MMC_SDIO_SDCLKIN 10 #define CLK_MOUT_FSYS_USB30DRD_USER 11
#define CLK_MOUT_USB_PLL 12
#define CLK_FOUT_USB_PLL 13
#define CLK_FSYS_USB20PHY_CLKCORE 14
#define CLK_FSYS_USB30DRD_ACLK_20PHYCTRL 15
#define CLK_FSYS_USB30DRD_ACLK_30PHYCTRL_0 16
#define CLK_FSYS_USB30DRD_ACLK_30PHYCTRL_1 17
#define CLK_FSYS_USB30DRD_BUS_CLK_EARLY 18
#define CLK_FSYS_USB30DRD_REF_CLK 19
#endif /* _DT_BINDINGS_CLOCK_EXYNOS_7885_H */ #endif /* _DT_BINDINGS_CLOCK_EXYNOS_7885_H */

View File

@ -358,6 +358,7 @@
#define CLK_GOUT_UART_PCLK 32 #define CLK_GOUT_UART_PCLK 32
#define CLK_GOUT_WDT0_PCLK 33 #define CLK_GOUT_WDT0_PCLK 33
#define CLK_GOUT_WDT1_PCLK 34 #define CLK_GOUT_WDT1_PCLK 34
#define CLK_GOUT_BUSIF_TMU_PCLK 35
/* CMU_CORE */ /* CMU_CORE */
#define CLK_MOUT_CORE_BUS_USER 1 #define CLK_MOUT_CORE_BUS_USER 1

View File

@ -175,8 +175,6 @@
#define PCLK_CIF 352 #define PCLK_CIF 352
#define PCLK_OTP_PHY 353 #define PCLK_OTP_PHY 353
#define CLK_NR_CLKS (PCLK_OTP_PHY + 1)
/* pmu-clocks indices */ /* pmu-clocks indices */
#define PLL_GPLL 1 #define PLL_GPLL 1
@ -195,8 +193,6 @@
#define PCLK_GPIO0_PMU 20 #define PCLK_GPIO0_PMU 20
#define PCLK_UART0_PMU 21 #define PCLK_UART0_PMU 21
#define CLKPMU_NR_CLKS (PCLK_UART0_PMU + 1)
/* soft-reset indices */ /* soft-reset indices */
#define SRST_CORE0_PO 0 #define SRST_CORE0_PO 0
#define SRST_CORE1_PO 1 #define SRST_CORE1_PO 1

View File

@ -193,10 +193,15 @@
#define GCC_MMSS_GPLL0_DIV_CLK 184 #define GCC_MMSS_GPLL0_DIV_CLK 184
#define GCC_GPU_GPLL0_DIV_CLK 185 #define GCC_GPU_GPLL0_DIV_CLK 185
#define GCC_GPU_GPLL0_CLK 186 #define GCC_GPU_GPLL0_CLK 186
#define HLOS1_VOTE_LPASS_CORE_SMMU_CLK 187
#define HLOS1_VOTE_LPASS_ADSP_SMMU_CLK 188
#define GCC_MSS_Q6_BIMC_AXI_CLK 189
#define PCIE_0_GDSC 0 #define PCIE_0_GDSC 0
#define UFS_GDSC 1 #define UFS_GDSC 1
#define USB_30_GDSC 2 #define USB_30_GDSC 2
#define LPASS_ADSP_GDSC 3
#define LPASS_CORE_GDSC 4
#define GCC_BLSP1_QUP1_BCR 0 #define GCC_BLSP1_QUP1_BCR 0
#define GCC_BLSP1_QUP2_BCR 1 #define GCC_BLSP1_QUP2_BCR 1

View File

@ -248,6 +248,7 @@
#define GCC_USB3_SEC_CLKREF_CLK 238 #define GCC_USB3_SEC_CLKREF_CLK 238
#define GCC_UFS_MEM_CLKREF_EN 239 #define GCC_UFS_MEM_CLKREF_EN 239
#define GCC_UFS_CARD_CLKREF_EN 240 #define GCC_UFS_CARD_CLKREF_EN 240
#define GPLL9 241
#define GCC_EMAC_BCR 0 #define GCC_EMAC_BCR 0
#define GCC_GPU_BCR 1 #define GCC_GPU_BCR 1
@ -294,6 +295,10 @@
#define GCC_VIDEO_AXI0_CLK_BCR 42 #define GCC_VIDEO_AXI0_CLK_BCR 42
#define GCC_VIDEO_AXI1_CLK_BCR 43 #define GCC_VIDEO_AXI1_CLK_BCR 43
#define GCC_USB3_DP_PHY_SEC_BCR 44 #define GCC_USB3_DP_PHY_SEC_BCR 44
#define GCC_USB3_UNIPHY_MP0_BCR 45
#define GCC_USB3_UNIPHY_MP1_BCR 46
#define GCC_USB3UNIPHY_PHY_MP0_BCR 47
#define GCC_USB3UNIPHY_PHY_MP1_BCR 48
/* GCC GDSCRs */ /* GCC GDSCRs */
#define EMAC_GDSC 0 #define EMAC_GDSC 0

View File

@ -0,0 +1,106 @@
/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
/*
* Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved.
*/
#ifndef _DT_BINDINGS_CLK_QCOM_CAM_CC_SM4450_H
#define _DT_BINDINGS_CLK_QCOM_CAM_CC_SM4450_H
/* CAM_CC clocks */
#define CAM_CC_BPS_AHB_CLK 0
#define CAM_CC_BPS_AREG_CLK 1
#define CAM_CC_BPS_CLK 2
#define CAM_CC_BPS_CLK_SRC 3
#define CAM_CC_CAMNOC_ATB_CLK 4
#define CAM_CC_CAMNOC_AXI_CLK 5
#define CAM_CC_CAMNOC_AXI_CLK_SRC 6
#define CAM_CC_CAMNOC_AXI_HF_CLK 7
#define CAM_CC_CAMNOC_AXI_SF_CLK 8
#define CAM_CC_CCI_0_CLK 9
#define CAM_CC_CCI_0_CLK_SRC 10
#define CAM_CC_CCI_1_CLK 11
#define CAM_CC_CCI_1_CLK_SRC 12
#define CAM_CC_CORE_AHB_CLK 13
#define CAM_CC_CPAS_AHB_CLK 14
#define CAM_CC_CPHY_RX_CLK_SRC 15
#define CAM_CC_CRE_AHB_CLK 16
#define CAM_CC_CRE_CLK 17
#define CAM_CC_CRE_CLK_SRC 18
#define CAM_CC_CSI0PHYTIMER_CLK 19
#define CAM_CC_CSI0PHYTIMER_CLK_SRC 20
#define CAM_CC_CSI1PHYTIMER_CLK 21
#define CAM_CC_CSI1PHYTIMER_CLK_SRC 22
#define CAM_CC_CSI2PHYTIMER_CLK 23
#define CAM_CC_CSI2PHYTIMER_CLK_SRC 24
#define CAM_CC_CSIPHY0_CLK 25
#define CAM_CC_CSIPHY1_CLK 26
#define CAM_CC_CSIPHY2_CLK 27
#define CAM_CC_FAST_AHB_CLK_SRC 28
#define CAM_CC_ICP_ATB_CLK 29
#define CAM_CC_ICP_CLK 30
#define CAM_CC_ICP_CLK_SRC 31
#define CAM_CC_ICP_CTI_CLK 32
#define CAM_CC_ICP_TS_CLK 33
#define CAM_CC_MCLK0_CLK 34
#define CAM_CC_MCLK0_CLK_SRC 35
#define CAM_CC_MCLK1_CLK 36
#define CAM_CC_MCLK1_CLK_SRC 37
#define CAM_CC_MCLK2_CLK 38
#define CAM_CC_MCLK2_CLK_SRC 39
#define CAM_CC_MCLK3_CLK 40
#define CAM_CC_MCLK3_CLK_SRC 41
#define CAM_CC_OPE_0_AHB_CLK 42
#define CAM_CC_OPE_0_AREG_CLK 43
#define CAM_CC_OPE_0_CLK 44
#define CAM_CC_OPE_0_CLK_SRC 45
#define CAM_CC_PLL0 46
#define CAM_CC_PLL0_OUT_EVEN 47
#define CAM_CC_PLL0_OUT_ODD 48
#define CAM_CC_PLL1 49
#define CAM_CC_PLL1_OUT_EVEN 50
#define CAM_CC_PLL2 51
#define CAM_CC_PLL2_OUT_EVEN 52
#define CAM_CC_PLL3 53
#define CAM_CC_PLL3_OUT_EVEN 54
#define CAM_CC_PLL4 55
#define CAM_CC_PLL4_OUT_EVEN 56
#define CAM_CC_SLOW_AHB_CLK_SRC 57
#define CAM_CC_SOC_AHB_CLK 58
#define CAM_CC_SYS_TMR_CLK 59
#define CAM_CC_TFE_0_AHB_CLK 60
#define CAM_CC_TFE_0_CLK 61
#define CAM_CC_TFE_0_CLK_SRC 62
#define CAM_CC_TFE_0_CPHY_RX_CLK 63
#define CAM_CC_TFE_0_CSID_CLK 64
#define CAM_CC_TFE_0_CSID_CLK_SRC 65
#define CAM_CC_TFE_1_AHB_CLK 66
#define CAM_CC_TFE_1_CLK 67
#define CAM_CC_TFE_1_CLK_SRC 68
#define CAM_CC_TFE_1_CPHY_RX_CLK 69
#define CAM_CC_TFE_1_CSID_CLK 70
#define CAM_CC_TFE_1_CSID_CLK_SRC 71
/* CAM_CC power domains */
#define CAM_CC_CAMSS_TOP_GDSC 0
/* CAM_CC resets */
#define CAM_CC_BPS_BCR 0
#define CAM_CC_CAMNOC_BCR 1
#define CAM_CC_CAMSS_TOP_BCR 2
#define CAM_CC_CCI_0_BCR 3
#define CAM_CC_CCI_1_BCR 4
#define CAM_CC_CPAS_BCR 5
#define CAM_CC_CRE_BCR 6
#define CAM_CC_CSI0PHY_BCR 7
#define CAM_CC_CSI1PHY_BCR 8
#define CAM_CC_CSI2PHY_BCR 9
#define CAM_CC_ICP_BCR 10
#define CAM_CC_MCLK0_BCR 11
#define CAM_CC_MCLK1_BCR 12
#define CAM_CC_MCLK2_BCR 13
#define CAM_CC_MCLK3_BCR 14
#define CAM_CC_OPE_0_BCR 15
#define CAM_CC_TFE_0_BCR 16
#define CAM_CC_TFE_1_BCR 17
#endif

View File

@ -0,0 +1,51 @@
/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
/*
* Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved.
*/
#ifndef _DT_BINDINGS_CLK_QCOM_DISP_CC_SM4450_H
#define _DT_BINDINGS_CLK_QCOM_DISP_CC_SM4450_H
/* DISP_CC clocks */
#define DISP_CC_MDSS_AHB1_CLK 0
#define DISP_CC_MDSS_AHB_CLK 1
#define DISP_CC_MDSS_AHB_CLK_SRC 2
#define DISP_CC_MDSS_BYTE0_CLK 3
#define DISP_CC_MDSS_BYTE0_CLK_SRC 4
#define DISP_CC_MDSS_BYTE0_DIV_CLK_SRC 5
#define DISP_CC_MDSS_BYTE0_INTF_CLK 6
#define DISP_CC_MDSS_ESC0_CLK 7
#define DISP_CC_MDSS_ESC0_CLK_SRC 8
#define DISP_CC_MDSS_MDP1_CLK 9
#define DISP_CC_MDSS_MDP_CLK 10
#define DISP_CC_MDSS_MDP_CLK_SRC 11
#define DISP_CC_MDSS_MDP_LUT1_CLK 12
#define DISP_CC_MDSS_MDP_LUT_CLK 13
#define DISP_CC_MDSS_NON_GDSC_AHB_CLK 14
#define DISP_CC_MDSS_PCLK0_CLK 15
#define DISP_CC_MDSS_PCLK0_CLK_SRC 16
#define DISP_CC_MDSS_ROT1_CLK 17
#define DISP_CC_MDSS_ROT_CLK 18
#define DISP_CC_MDSS_ROT_CLK_SRC 19
#define DISP_CC_MDSS_RSCC_AHB_CLK 20
#define DISP_CC_MDSS_RSCC_VSYNC_CLK 21
#define DISP_CC_MDSS_VSYNC1_CLK 22
#define DISP_CC_MDSS_VSYNC_CLK 23
#define DISP_CC_MDSS_VSYNC_CLK_SRC 24
#define DISP_CC_PLL0 25
#define DISP_CC_PLL1 26
#define DISP_CC_SLEEP_CLK 27
#define DISP_CC_SLEEP_CLK_SRC 28
#define DISP_CC_XO_CLK 29
#define DISP_CC_XO_CLK_SRC 30
/* 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,62 @@
/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
/*
* Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved.
*/
#ifndef _DT_BINDINGS_CLK_QCOM_GPU_CC_SM4450_H
#define _DT_BINDINGS_CLK_QCOM_GPU_CC_SM4450_H
/* GPU_CC clocks */
#define GPU_CC_AHB_CLK 0
#define GPU_CC_CB_CLK 1
#define GPU_CC_CRC_AHB_CLK 2
#define GPU_CC_CX_FF_CLK 3
#define GPU_CC_CX_GFX3D_CLK 4
#define GPU_CC_CX_GFX3D_SLV_CLK 5
#define GPU_CC_CX_GMU_CLK 6
#define GPU_CC_CX_SNOC_DVM_CLK 7
#define GPU_CC_CXO_AON_CLK 8
#define GPU_CC_CXO_CLK 9
#define GPU_CC_DEMET_CLK 10
#define GPU_CC_DEMET_DIV_CLK_SRC 11
#define GPU_CC_FF_CLK_SRC 12
#define GPU_CC_FREQ_MEASURE_CLK 13
#define GPU_CC_GMU_CLK_SRC 14
#define GPU_CC_GX_CXO_CLK 15
#define GPU_CC_GX_FF_CLK 16
#define GPU_CC_GX_GFX3D_CLK 17
#define GPU_CC_GX_GFX3D_CLK_SRC 18
#define GPU_CC_GX_GFX3D_RDVM_CLK 19
#define GPU_CC_GX_GMU_CLK 20
#define GPU_CC_GX_VSENSE_CLK 21
#define GPU_CC_HUB_AHB_DIV_CLK_SRC 22
#define GPU_CC_HUB_AON_CLK 23
#define GPU_CC_HUB_CLK_SRC 24
#define GPU_CC_HUB_CX_INT_CLK 25
#define GPU_CC_HUB_CX_INT_DIV_CLK_SRC 26
#define GPU_CC_MEMNOC_GFX_CLK 27
#define GPU_CC_MND1X_0_GFX3D_CLK 28
#define GPU_CC_PLL0 29
#define GPU_CC_PLL1 30
#define GPU_CC_SLEEP_CLK 31
#define GPU_CC_XO_CLK_SRC 32
#define GPU_CC_XO_DIV_CLK_SRC 33
/* GPU_CC power domains */
#define GPU_CC_CX_GDSC 0
#define GPU_CC_GX_GDSC 1
/* GPU_CC resets */
#define GPU_CC_ACD_BCR 0
#define GPU_CC_CB_BCR 1
#define GPU_CC_CX_BCR 2
#define GPU_CC_FAST_HUB_BCR 3
#define GPU_CC_FF_BCR 4
#define GPU_CC_GFX3D_AON_BCR 5
#define GPU_CC_GMU_BCR 6
#define GPU_CC_GX_BCR 7
#define GPU_CC_XO_BCR 8
#define GPU_CC_GX_ACD_IROOT_BCR 9
#define GPU_CC_RBCPR_BCR 10
#endif

View File

@ -0,0 +1,135 @@
/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
/*
* Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved.
*/
#ifndef _DT_BINDINGS_CLK_QCOM_CAM_CC_SM8150_H
#define _DT_BINDINGS_CLK_QCOM_CAM_CC_SM8150_H
/* CAM_CC clocks */
#define CAM_CC_PLL0 0
#define CAM_CC_PLL0_OUT_EVEN 1
#define CAM_CC_PLL0_OUT_ODD 2
#define CAM_CC_PLL1 3
#define CAM_CC_PLL1_OUT_EVEN 4
#define CAM_CC_PLL2 5
#define CAM_CC_PLL2_OUT_MAIN 6
#define CAM_CC_PLL3 7
#define CAM_CC_PLL3_OUT_EVEN 8
#define CAM_CC_PLL4 9
#define CAM_CC_PLL4_OUT_EVEN 10
#define CAM_CC_BPS_AHB_CLK 11
#define CAM_CC_BPS_AREG_CLK 12
#define CAM_CC_BPS_AXI_CLK 13
#define CAM_CC_BPS_CLK 14
#define CAM_CC_BPS_CLK_SRC 15
#define CAM_CC_CAMNOC_AXI_CLK 16
#define CAM_CC_CAMNOC_AXI_CLK_SRC 17
#define CAM_CC_CAMNOC_DCD_XO_CLK 18
#define CAM_CC_CCI_0_CLK 19
#define CAM_CC_CCI_0_CLK_SRC 20
#define CAM_CC_CCI_1_CLK 21
#define CAM_CC_CCI_1_CLK_SRC 22
#define CAM_CC_CORE_AHB_CLK 23
#define CAM_CC_CPAS_AHB_CLK 24
#define CAM_CC_CPHY_RX_CLK_SRC 25
#define CAM_CC_CSI0PHYTIMER_CLK 26
#define CAM_CC_CSI0PHYTIMER_CLK_SRC 27
#define CAM_CC_CSI1PHYTIMER_CLK 28
#define CAM_CC_CSI1PHYTIMER_CLK_SRC 29
#define CAM_CC_CSI2PHYTIMER_CLK 30
#define CAM_CC_CSI2PHYTIMER_CLK_SRC 31
#define CAM_CC_CSI3PHYTIMER_CLK 32
#define CAM_CC_CSI3PHYTIMER_CLK_SRC 33
#define CAM_CC_CSIPHY0_CLK 34
#define CAM_CC_CSIPHY1_CLK 35
#define CAM_CC_CSIPHY2_CLK 36
#define CAM_CC_CSIPHY3_CLK 37
#define CAM_CC_FAST_AHB_CLK_SRC 38
#define CAM_CC_FD_CORE_CLK 39
#define CAM_CC_FD_CORE_CLK_SRC 40
#define CAM_CC_FD_CORE_UAR_CLK 41
#define CAM_CC_GDSC_CLK 42
#define CAM_CC_ICP_AHB_CLK 43
#define CAM_CC_ICP_CLK 44
#define CAM_CC_ICP_CLK_SRC 45
#define CAM_CC_IFE_0_AXI_CLK 46
#define CAM_CC_IFE_0_CLK 47
#define CAM_CC_IFE_0_CLK_SRC 48
#define CAM_CC_IFE_0_CPHY_RX_CLK 49
#define CAM_CC_IFE_0_CSID_CLK 50
#define CAM_CC_IFE_0_CSID_CLK_SRC 51
#define CAM_CC_IFE_0_DSP_CLK 52
#define CAM_CC_IFE_1_AXI_CLK 53
#define CAM_CC_IFE_1_CLK 54
#define CAM_CC_IFE_1_CLK_SRC 55
#define CAM_CC_IFE_1_CPHY_RX_CLK 56
#define CAM_CC_IFE_1_CSID_CLK 57
#define CAM_CC_IFE_1_CSID_CLK_SRC 58
#define CAM_CC_IFE_1_DSP_CLK 59
#define CAM_CC_IFE_LITE_0_CLK 60
#define CAM_CC_IFE_LITE_0_CLK_SRC 61
#define CAM_CC_IFE_LITE_0_CPHY_RX_CLK 62
#define CAM_CC_IFE_LITE_0_CSID_CLK 63
#define CAM_CC_IFE_LITE_0_CSID_CLK_SRC 64
#define CAM_CC_IFE_LITE_1_CLK 65
#define CAM_CC_IFE_LITE_1_CLK_SRC 66
#define CAM_CC_IFE_LITE_1_CPHY_RX_CLK 67
#define CAM_CC_IFE_LITE_1_CSID_CLK 68
#define CAM_CC_IFE_LITE_1_CSID_CLK_SRC 69
#define CAM_CC_IPE_0_AHB_CLK 70
#define CAM_CC_IPE_0_AREG_CLK 71
#define CAM_CC_IPE_0_AXI_CLK 72
#define CAM_CC_IPE_0_CLK 73
#define CAM_CC_IPE_0_CLK_SRC 74
#define CAM_CC_IPE_1_AHB_CLK 75
#define CAM_CC_IPE_1_AREG_CLK 76
#define CAM_CC_IPE_1_AXI_CLK 77
#define CAM_CC_IPE_1_CLK 78
#define CAM_CC_JPEG_CLK 79
#define CAM_CC_JPEG_CLK_SRC 80
#define CAM_CC_LRME_CLK 81
#define CAM_CC_LRME_CLK_SRC 82
#define CAM_CC_MCLK0_CLK 83
#define CAM_CC_MCLK0_CLK_SRC 84
#define CAM_CC_MCLK1_CLK 85
#define CAM_CC_MCLK1_CLK_SRC 86
#define CAM_CC_MCLK2_CLK 87
#define CAM_CC_MCLK2_CLK_SRC 88
#define CAM_CC_MCLK3_CLK 89
#define CAM_CC_MCLK3_CLK_SRC 90
#define CAM_CC_SLOW_AHB_CLK_SRC 91
/* CAM_CC power domains */
#define TITAN_TOP_GDSC 0
#define BPS_GDSC 1
#define IFE_0_GDSC 2
#define IFE_1_GDSC 3
#define IPE_0_GDSC 4
#define IPE_1_GDSC 5
/* CAM_CC resets */
#define CAM_CC_BPS_BCR 0
#define CAM_CC_CAMNOC_BCR 1
#define CAM_CC_CCI_BCR 2
#define CAM_CC_CPAS_BCR 3
#define CAM_CC_CSI0PHY_BCR 4
#define CAM_CC_CSI1PHY_BCR 5
#define CAM_CC_CSI2PHY_BCR 6
#define CAM_CC_CSI3PHY_BCR 7
#define CAM_CC_FD_BCR 8
#define CAM_CC_ICP_BCR 9
#define CAM_CC_IFE_0_BCR 10
#define CAM_CC_IFE_1_BCR 11
#define CAM_CC_IFE_LITE_0_BCR 12
#define CAM_CC_IFE_LITE_1_BCR 13
#define CAM_CC_IPE_0_BCR 14
#define CAM_CC_IPE_1_BCR 15
#define CAM_CC_JPEG_BCR 16
#define CAM_CC_LRME_BCR 17
#define CAM_CC_MCLK0_BCR 18
#define CAM_CC_MCLK1_BCR 19
#define CAM_CC_MCLK2_BCR 20
#define CAM_CC_MCLK3_BCR 21
#endif

View File

@ -1,102 +0,0 @@
/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
/*
* Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved
* Copyright (c) 2023, Linaro Ltd.
*/
#ifndef _DT_BINDINGS_CLK_QCOM_SM8650_DISP_CC_H
#define _DT_BINDINGS_CLK_QCOM_SM8650_DISP_CC_H
/* DISP_CC clocks */
#define DISP_CC_MDSS_ACCU_CLK 0
#define DISP_CC_MDSS_AHB1_CLK 1
#define DISP_CC_MDSS_AHB_CLK 2
#define DISP_CC_MDSS_AHB_CLK_SRC 3
#define DISP_CC_MDSS_BYTE0_CLK 4
#define DISP_CC_MDSS_BYTE0_CLK_SRC 5
#define DISP_CC_MDSS_BYTE0_DIV_CLK_SRC 6
#define DISP_CC_MDSS_BYTE0_INTF_CLK 7
#define DISP_CC_MDSS_BYTE1_CLK 8
#define DISP_CC_MDSS_BYTE1_CLK_SRC 9
#define DISP_CC_MDSS_BYTE1_DIV_CLK_SRC 10
#define DISP_CC_MDSS_BYTE1_INTF_CLK 11
#define DISP_CC_MDSS_DPTX0_AUX_CLK 12
#define DISP_CC_MDSS_DPTX0_AUX_CLK_SRC 13
#define DISP_CC_MDSS_DPTX0_CRYPTO_CLK 14
#define DISP_CC_MDSS_DPTX0_LINK_CLK 15
#define DISP_CC_MDSS_DPTX0_LINK_CLK_SRC 16
#define DISP_CC_MDSS_DPTX0_LINK_DIV_CLK_SRC 17
#define DISP_CC_MDSS_DPTX0_LINK_INTF_CLK 18
#define DISP_CC_MDSS_DPTX0_PIXEL0_CLK 19
#define DISP_CC_MDSS_DPTX0_PIXEL0_CLK_SRC 20
#define DISP_CC_MDSS_DPTX0_PIXEL1_CLK 21
#define DISP_CC_MDSS_DPTX0_PIXEL1_CLK_SRC 22
#define DISP_CC_MDSS_DPTX0_USB_ROUTER_LINK_INTF_CLK 23
#define DISP_CC_MDSS_DPTX1_AUX_CLK 24
#define DISP_CC_MDSS_DPTX1_AUX_CLK_SRC 25
#define DISP_CC_MDSS_DPTX1_CRYPTO_CLK 26
#define DISP_CC_MDSS_DPTX1_LINK_CLK 27
#define DISP_CC_MDSS_DPTX1_LINK_CLK_SRC 28
#define DISP_CC_MDSS_DPTX1_LINK_DIV_CLK_SRC 29
#define DISP_CC_MDSS_DPTX1_LINK_INTF_CLK 30
#define DISP_CC_MDSS_DPTX1_PIXEL0_CLK 31
#define DISP_CC_MDSS_DPTX1_PIXEL0_CLK_SRC 32
#define DISP_CC_MDSS_DPTX1_PIXEL1_CLK 33
#define DISP_CC_MDSS_DPTX1_PIXEL1_CLK_SRC 34
#define DISP_CC_MDSS_DPTX1_USB_ROUTER_LINK_INTF_CLK 35
#define DISP_CC_MDSS_DPTX2_AUX_CLK 36
#define DISP_CC_MDSS_DPTX2_AUX_CLK_SRC 37
#define DISP_CC_MDSS_DPTX2_CRYPTO_CLK 38
#define DISP_CC_MDSS_DPTX2_LINK_CLK 39
#define DISP_CC_MDSS_DPTX2_LINK_CLK_SRC 40
#define DISP_CC_MDSS_DPTX2_LINK_DIV_CLK_SRC 41
#define DISP_CC_MDSS_DPTX2_LINK_INTF_CLK 42
#define DISP_CC_MDSS_DPTX2_PIXEL0_CLK 43
#define DISP_CC_MDSS_DPTX2_PIXEL0_CLK_SRC 44
#define DISP_CC_MDSS_DPTX2_PIXEL1_CLK 45
#define DISP_CC_MDSS_DPTX2_PIXEL1_CLK_SRC 46
#define DISP_CC_MDSS_DPTX3_AUX_CLK 47
#define DISP_CC_MDSS_DPTX3_AUX_CLK_SRC 48
#define DISP_CC_MDSS_DPTX3_CRYPTO_CLK 49
#define DISP_CC_MDSS_DPTX3_LINK_CLK 50
#define DISP_CC_MDSS_DPTX3_LINK_CLK_SRC 51
#define DISP_CC_MDSS_DPTX3_LINK_DIV_CLK_SRC 52
#define DISP_CC_MDSS_DPTX3_LINK_INTF_CLK 53
#define DISP_CC_MDSS_DPTX3_PIXEL0_CLK 54
#define DISP_CC_MDSS_DPTX3_PIXEL0_CLK_SRC 55
#define DISP_CC_MDSS_ESC0_CLK 56
#define DISP_CC_MDSS_ESC0_CLK_SRC 57
#define DISP_CC_MDSS_ESC1_CLK 58
#define DISP_CC_MDSS_ESC1_CLK_SRC 59
#define DISP_CC_MDSS_MDP1_CLK 60
#define DISP_CC_MDSS_MDP_CLK 61
#define DISP_CC_MDSS_MDP_CLK_SRC 62
#define DISP_CC_MDSS_MDP_LUT1_CLK 63
#define DISP_CC_MDSS_MDP_LUT_CLK 64
#define DISP_CC_MDSS_NON_GDSC_AHB_CLK 65
#define DISP_CC_MDSS_PCLK0_CLK 66
#define DISP_CC_MDSS_PCLK0_CLK_SRC 67
#define DISP_CC_MDSS_PCLK1_CLK 68
#define DISP_CC_MDSS_PCLK1_CLK_SRC 69
#define DISP_CC_MDSS_RSCC_AHB_CLK 70
#define DISP_CC_MDSS_RSCC_VSYNC_CLK 71
#define DISP_CC_MDSS_VSYNC1_CLK 72
#define DISP_CC_MDSS_VSYNC_CLK 73
#define DISP_CC_MDSS_VSYNC_CLK_SRC 74
#define DISP_CC_PLL0 75
#define DISP_CC_PLL1 76
#define DISP_CC_SLEEP_CLK 77
#define DISP_CC_SLEEP_CLK_SRC 78
#define DISP_CC_XO_CLK 79
#define DISP_CC_XO_CLK_SRC 80
/* 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
/* DISP_CC GDSCR */
#define MDSS_GDSC 0
#define MDSS_INT2_GDSC 1
#endif

View File

@ -0,0 +1 @@
qcom,sm8550-dispcc.h

View File

@ -94,8 +94,6 @@
#define HCLK_CPU 477 #define HCLK_CPU 477
#define HCLK_PERI 478 #define HCLK_PERI 478
#define CLK_NR_CLKS (HCLK_PERI + 1)
/* soft-reset indices */ /* soft-reset indices */
#define SRST_CORE0 0 #define SRST_CORE0 0
#define SRST_CORE1 1 #define SRST_CORE1 1

View File

@ -146,8 +146,6 @@
#define HCLK_S_CRYPTO 477 #define HCLK_S_CRYPTO 477
#define HCLK_PERI 478 #define HCLK_PERI 478
#define CLK_NR_CLKS (HCLK_PERI + 1)
/* soft-reset indices */ /* soft-reset indices */
#define SRST_CORE0_PO 0 #define SRST_CORE0_PO 0
#define SRST_CORE1_PO 1 #define SRST_CORE1_PO 1

View File

@ -195,8 +195,6 @@
#define HCLK_CPU 477 #define HCLK_CPU 477
#define HCLK_PERI 478 #define HCLK_PERI 478
#define CLK_NR_CLKS (HCLK_PERI + 1)
/* soft-reset indices */ /* soft-reset indices */
#define SRST_CORE0 0 #define SRST_CORE0 0
#define SRST_CORE1 1 #define SRST_CORE1 1

View File

@ -212,8 +212,6 @@
#define PCLK_CAN 233 #define PCLK_CAN 233
#define PCLK_OWIRE 234 #define PCLK_OWIRE 234
#define CLK_NR_CLKS (PCLK_OWIRE + 1)
/* soft-reset indices */ /* soft-reset indices */
/* cru_softrst_con0 */ /* cru_softrst_con0 */

View File

@ -201,8 +201,6 @@
#define HCLK_RGA 340 #define HCLK_RGA 340
#define HCLK_HDCP 341 #define HCLK_HDCP 341
#define CLK_NR_CLKS (HCLK_HDCP + 1)
/* soft-reset indices */ /* soft-reset indices */
#define SRST_CORE0_PO 0 #define SRST_CORE0_PO 0
#define SRST_CORE1_PO 1 #define SRST_CORE1_PO 1

View File

@ -182,8 +182,6 @@
#define HCLK_BUS 477 #define HCLK_BUS 477
#define HCLK_PERI 478 #define HCLK_PERI 478
#define CLK_NR_CLKS (HCLK_PERI + 1)
/* soft-reset indices */ /* soft-reset indices */
#define SRST_CORE_B0 0 #define SRST_CORE_B0 0
#define SRST_CORE_B1 1 #define SRST_CORE_B1 1

View File

@ -335,8 +335,6 @@
#define HCLK_SDIO_NOC 495 #define HCLK_SDIO_NOC 495
#define HCLK_SDIOAUDIO_NOC 496 #define HCLK_SDIOAUDIO_NOC 496
#define CLK_NR_CLKS (HCLK_SDIOAUDIO_NOC + 1)
/* pmu-clocks indices */ /* pmu-clocks indices */
#define PLL_PPLL 1 #define PLL_PPLL 1
@ -378,8 +376,6 @@
#define PCLK_INTR_ARB_PMU 49 #define PCLK_INTR_ARB_PMU 49
#define HCLK_NOC_PMU 50 #define HCLK_NOC_PMU 50
#define CLKPMU_NR_CLKS (HCLK_NOC_PMU + 1)
/* soft-reset indices */ /* soft-reset indices */
/* cru_softrst_con0 */ /* cru_softrst_con0 */

View File

@ -0,0 +1,592 @@
/* SPDX-License-Identifier: (GPL-2.0 OR MIT) */
/*
* Copyright (c) 2023 Rockchip Electronics Co. Ltd.
* Copyright (c) 2024 Collabora Ltd.
*
* Author: Elaine Zhang <zhangqing@rock-chips.com>
* Author: Detlev Casanova <detlev.casanova@collabora.com>
*/
#ifndef _DT_BINDINGS_CLK_ROCKCHIP_RK3576_H
#define _DT_BINDINGS_CLK_ROCKCHIP_RK3576_H
/* cru-clocks indices */
/* cru plls */
#define PLL_BPLL 0
#define PLL_LPLL 1
#define PLL_VPLL 2
#define PLL_AUPLL 3
#define PLL_CPLL 4
#define PLL_GPLL 5
#define PLL_PPLL 6
#define ARMCLK_L 7
#define ARMCLK_B 8
/* cru clocks */
#define CLK_CPLL_DIV20 9
#define CLK_CPLL_DIV10 10
#define CLK_GPLL_DIV8 11
#define CLK_GPLL_DIV6 12
#define CLK_CPLL_DIV4 13
#define CLK_GPLL_DIV4 14
#define CLK_SPLL_DIV2 15
#define CLK_GPLL_DIV3 16
#define CLK_CPLL_DIV2 17
#define CLK_GPLL_DIV2 18
#define CLK_SPLL_DIV1 19
#define PCLK_TOP_ROOT 20
#define ACLK_TOP 21
#define HCLK_TOP 22
#define CLK_AUDIO_FRAC_0 23
#define CLK_AUDIO_FRAC_1 24
#define CLK_AUDIO_FRAC_2 25
#define CLK_AUDIO_FRAC_3 26
#define CLK_UART_FRAC_0 27
#define CLK_UART_FRAC_1 28
#define CLK_UART_FRAC_2 29
#define CLK_UART1_SRC_TOP 30
#define CLK_AUDIO_INT_0 31
#define CLK_AUDIO_INT_1 32
#define CLK_AUDIO_INT_2 33
#define CLK_PDM0_SRC_TOP 34
#define CLK_PDM1_OUT 35
#define CLK_GMAC0_125M_SRC 36
#define CLK_GMAC1_125M_SRC 37
#define LCLK_ASRC_SRC_0 38
#define LCLK_ASRC_SRC_1 39
#define REF_CLK0_OUT_PLL 40
#define REF_CLK1_OUT_PLL 41
#define REF_CLK2_OUT_PLL 42
#define REFCLKO25M_GMAC0_OUT 43
#define REFCLKO25M_GMAC1_OUT 44
#define CLK_CIFOUT_OUT 45
#define CLK_GMAC0_RMII_CRU 46
#define CLK_GMAC1_RMII_CRU 47
#define CLK_OTPC_AUTO_RD_G 48
#define CLK_OTP_PHY_G 49
#define CLK_MIPI_CAMERAOUT_M0 50
#define CLK_MIPI_CAMERAOUT_M1 51
#define CLK_MIPI_CAMERAOUT_M2 52
#define MCLK_PDM0_SRC_TOP 53
#define HCLK_AUDIO_ROOT 54
#define HCLK_ASRC_2CH_0 55
#define HCLK_ASRC_2CH_1 56
#define HCLK_ASRC_4CH_0 57
#define HCLK_ASRC_4CH_1 58
#define CLK_ASRC_2CH_0 59
#define CLK_ASRC_2CH_1 60
#define CLK_ASRC_4CH_0 61
#define CLK_ASRC_4CH_1 62
#define MCLK_SAI0_8CH_SRC 63
#define MCLK_SAI0_8CH 64
#define HCLK_SAI0_8CH 65
#define HCLK_SPDIF_RX0 66
#define MCLK_SPDIF_RX0 67
#define HCLK_SPDIF_RX1 68
#define MCLK_SPDIF_RX1 69
#define MCLK_SAI1_8CH_SRC 70
#define MCLK_SAI1_8CH 71
#define HCLK_SAI1_8CH 72
#define MCLK_SAI2_2CH_SRC 73
#define MCLK_SAI2_2CH 74
#define HCLK_SAI2_2CH 75
#define MCLK_SAI3_2CH_SRC 76
#define MCLK_SAI3_2CH 77
#define HCLK_SAI3_2CH 78
#define MCLK_SAI4_2CH_SRC 79
#define MCLK_SAI4_2CH 80
#define HCLK_SAI4_2CH 81
#define HCLK_ACDCDIG_DSM 82
#define MCLK_ACDCDIG_DSM 83
#define CLK_PDM1 84
#define HCLK_PDM1 85
#define MCLK_PDM1 86
#define HCLK_SPDIF_TX0 87
#define MCLK_SPDIF_TX0 88
#define HCLK_SPDIF_TX1 89
#define MCLK_SPDIF_TX1 90
#define CLK_SAI1_MCLKOUT 91
#define CLK_SAI2_MCLKOUT 92
#define CLK_SAI3_MCLKOUT 93
#define CLK_SAI4_MCLKOUT 94
#define CLK_SAI0_MCLKOUT 95
#define HCLK_BUS_ROOT 96
#define PCLK_BUS_ROOT 97
#define ACLK_BUS_ROOT 98
#define HCLK_CAN0 99
#define CLK_CAN0 100
#define HCLK_CAN1 101
#define CLK_CAN1 102
#define CLK_KEY_SHIFT 103
#define PCLK_I2C1 104
#define PCLK_I2C2 105
#define PCLK_I2C3 106
#define PCLK_I2C4 107
#define PCLK_I2C5 108
#define PCLK_I2C6 109
#define PCLK_I2C7 110
#define PCLK_I2C8 111
#define PCLK_I2C9 112
#define PCLK_WDT_BUSMCU 113
#define TCLK_WDT_BUSMCU 114
#define ACLK_GIC 115
#define CLK_I2C1 116
#define CLK_I2C2 117
#define CLK_I2C3 118
#define CLK_I2C4 119
#define CLK_I2C5 120
#define CLK_I2C6 121
#define CLK_I2C7 122
#define CLK_I2C8 123
#define CLK_I2C9 124
#define PCLK_SARADC 125
#define CLK_SARADC 126
#define PCLK_TSADC 127
#define CLK_TSADC 128
#define PCLK_UART0 129
#define PCLK_UART2 130
#define PCLK_UART3 131
#define PCLK_UART4 132
#define PCLK_UART5 133
#define PCLK_UART6 134
#define PCLK_UART7 135
#define PCLK_UART8 136
#define PCLK_UART9 137
#define PCLK_UART10 138
#define PCLK_UART11 139
#define SCLK_UART0 140
#define SCLK_UART2 141
#define SCLK_UART3 142
#define SCLK_UART4 143
#define SCLK_UART5 144
#define SCLK_UART6 145
#define SCLK_UART7 146
#define SCLK_UART8 147
#define SCLK_UART9 148
#define SCLK_UART10 149
#define SCLK_UART11 150
#define PCLK_SPI0 151
#define PCLK_SPI1 152
#define PCLK_SPI2 153
#define PCLK_SPI3 154
#define PCLK_SPI4 155
#define CLK_SPI0 156
#define CLK_SPI1 157
#define CLK_SPI2 158
#define CLK_SPI3 159
#define CLK_SPI4 160
#define PCLK_WDT0 161
#define TCLK_WDT0 162
#define PCLK_PWM1 163
#define CLK_PWM1 164
#define CLK_OSC_PWM1 165
#define CLK_RC_PWM1 166
#define PCLK_BUSTIMER0 167
#define PCLK_BUSTIMER1 168
#define CLK_TIMER0_ROOT 169
#define CLK_TIMER0 170
#define CLK_TIMER1 171
#define CLK_TIMER2 172
#define CLK_TIMER3 173
#define CLK_TIMER4 174
#define CLK_TIMER5 175
#define PCLK_MAILBOX0 176
#define PCLK_GPIO1 177
#define DBCLK_GPIO1 178
#define PCLK_GPIO2 179
#define DBCLK_GPIO2 180
#define PCLK_GPIO3 181
#define DBCLK_GPIO3 182
#define PCLK_GPIO4 183
#define DBCLK_GPIO4 184
#define ACLK_DECOM 185
#define PCLK_DECOM 186
#define DCLK_DECOM 187
#define CLK_TIMER1_ROOT 188
#define CLK_TIMER6 189
#define CLK_TIMER7 190
#define CLK_TIMER8 191
#define CLK_TIMER9 192
#define CLK_TIMER10 193
#define CLK_TIMER11 194
#define ACLK_DMAC0 195
#define ACLK_DMAC1 196
#define ACLK_DMAC2 197
#define ACLK_SPINLOCK 198
#define HCLK_I3C0 199
#define HCLK_I3C1 200
#define HCLK_BUS_CM0_ROOT 201
#define FCLK_BUS_CM0_CORE 202
#define CLK_BUS_CM0_RTC 203
#define PCLK_PMU2 204
#define PCLK_PWM2 205
#define CLK_PWM2 206
#define CLK_RC_PWM2 207
#define CLK_OSC_PWM2 208
#define CLK_FREQ_PWM1 209
#define CLK_COUNTER_PWM1 210
#define SAI_SCLKIN_FREQ 211
#define SAI_SCLKIN_COUNTER 212
#define CLK_I3C0 213
#define CLK_I3C1 214
#define PCLK_CSIDPHY1 215
#define PCLK_DDR_ROOT 216
#define PCLK_DDR_MON_CH0 217
#define TMCLK_DDR_MON_CH0 218
#define ACLK_DDR_ROOT 219
#define HCLK_DDR_ROOT 220
#define FCLK_DDR_CM0_CORE 221
#define CLK_DDR_TIMER_ROOT 222
#define CLK_DDR_TIMER0 223
#define CLK_DDR_TIMER1 224
#define TCLK_WDT_DDR 225
#define PCLK_WDT 226
#define PCLK_TIMER 227
#define CLK_DDR_CM0_RTC 228
#define ACLK_RKNN0 229
#define ACLK_RKNN1 230
#define HCLK_RKNN_ROOT 231
#define CLK_RKNN_DSU0 232
#define PCLK_NPUTOP_ROOT 233
#define PCLK_NPU_TIMER 234
#define CLK_NPUTIMER_ROOT 235
#define CLK_NPUTIMER0 236
#define CLK_NPUTIMER1 237
#define PCLK_NPU_WDT 238
#define TCLK_NPU_WDT 239
#define ACLK_RKNN_CBUF 240
#define HCLK_NPU_CM0_ROOT 241
#define FCLK_NPU_CM0_CORE 242
#define CLK_NPU_CM0_RTC 243
#define HCLK_RKNN_CBUF 244
#define HCLK_NVM_ROOT 245
#define ACLK_NVM_ROOT 246
#define SCLK_FSPI_X2 247
#define HCLK_FSPI 248
#define CCLK_SRC_EMMC 249
#define HCLK_EMMC 250
#define ACLK_EMMC 251
#define BCLK_EMMC 252
#define TCLK_EMMC 253
#define PCLK_PHP_ROOT 254
#define ACLK_PHP_ROOT 255
#define PCLK_PCIE0 256
#define CLK_PCIE0_AUX 257
#define ACLK_PCIE0_MST 258
#define ACLK_PCIE0_SLV 259
#define ACLK_PCIE0_DBI 260
#define ACLK_USB3OTG1 261
#define CLK_REF_USB3OTG1 262
#define CLK_SUSPEND_USB3OTG1 263
#define ACLK_MMU0 264
#define ACLK_SLV_MMU0 265
#define ACLK_MMU1 266
#define ACLK_SLV_MMU1 267
#define PCLK_PCIE1 268
#define CLK_PCIE1_AUX 269
#define ACLK_PCIE1_MST 270
#define ACLK_PCIE1_SLV 271
#define ACLK_PCIE1_DBI 272
#define CLK_RXOOB0 273
#define CLK_RXOOB1 274
#define CLK_PMALIVE0 275
#define CLK_PMALIVE1 276
#define ACLK_SATA0 277
#define ACLK_SATA1 278
#define CLK_USB3OTG1_PIPE_PCLK 279
#define CLK_USB3OTG1_UTMI 280
#define CLK_USB3OTG0_PIPE_PCLK 281
#define CLK_USB3OTG0_UTMI 282
#define HCLK_SDGMAC_ROOT 283
#define ACLK_SDGMAC_ROOT 284
#define PCLK_SDGMAC_ROOT 285
#define ACLK_GMAC0 286
#define ACLK_GMAC1 287
#define PCLK_GMAC0 288
#define PCLK_GMAC1 289
#define CCLK_SRC_SDIO 290
#define HCLK_SDIO 291
#define CLK_GMAC1_PTP_REF 292
#define CLK_GMAC0_PTP_REF 293
#define CLK_GMAC1_PTP_REF_SRC 294
#define CLK_GMAC0_PTP_REF_SRC 295
#define CCLK_SRC_SDMMC0 296
#define HCLK_SDMMC0 297
#define SCLK_FSPI1_X2 298
#define HCLK_FSPI1 299
#define ACLK_DSMC_ROOT 300
#define ACLK_DSMC 301
#define PCLK_DSMC 302
#define CLK_DSMC_SYS 303
#define HCLK_HSGPIO 304
#define CLK_HSGPIO_TX 305
#define CLK_HSGPIO_RX 306
#define ACLK_HSGPIO 307
#define PCLK_PHPPHY_ROOT 308
#define PCLK_PCIE2_COMBOPHY0 309
#define PCLK_PCIE2_COMBOPHY1 310
#define CLK_PCIE_100M_SRC 311
#define CLK_PCIE_100M_NDUTY_SRC 312
#define CLK_REF_PCIE0_PHY 313
#define CLK_REF_PCIE1_PHY 314
#define CLK_REF_MPHY_26M 315
#define HCLK_RKVDEC_ROOT 316
#define ACLK_RKVDEC_ROOT 317
#define HCLK_RKVDEC 318
#define CLK_RKVDEC_HEVC_CA 319
#define CLK_RKVDEC_CORE 320
#define ACLK_UFS_ROOT 321
#define ACLK_USB_ROOT 322
#define PCLK_USB_ROOT 323
#define ACLK_USB3OTG0 324
#define CLK_REF_USB3OTG0 325
#define CLK_SUSPEND_USB3OTG0 326
#define ACLK_MMU2 327
#define ACLK_SLV_MMU2 328
#define ACLK_UFS_SYS 329
#define ACLK_VPU_ROOT 330
#define ACLK_VPU_MID_ROOT 331
#define HCLK_VPU_ROOT 332
#define ACLK_JPEG_ROOT 333
#define ACLK_VPU_LOW_ROOT 334
#define HCLK_RGA2E_0 335
#define ACLK_RGA2E_0 336
#define CLK_CORE_RGA2E_0 337
#define ACLK_JPEG 338
#define HCLK_JPEG 339
#define HCLK_VDPP 340
#define ACLK_VDPP 341
#define CLK_CORE_VDPP 342
#define HCLK_RGA2E_1 343
#define ACLK_RGA2E_1 344
#define CLK_CORE_RGA2E_1 345
#define DCLK_EBC_FRAC_SRC 346
#define HCLK_EBC 347
#define ACLK_EBC 348
#define DCLK_EBC 349
#define HCLK_VEPU0_ROOT 350
#define ACLK_VEPU0_ROOT 351
#define HCLK_VEPU0 352
#define ACLK_VEPU0 353
#define CLK_VEPU0_CORE 354
#define ACLK_VI_ROOT 355
#define HCLK_VI_ROOT 356
#define PCLK_VI_ROOT 357
#define DCLK_VICAP 358
#define ACLK_VICAP 359
#define HCLK_VICAP 360
#define CLK_ISP_CORE 361
#define CLK_ISP_CORE_MARVIN 362
#define CLK_ISP_CORE_VICAP 363
#define ACLK_ISP 364
#define HCLK_ISP 365
#define ACLK_VPSS 366
#define HCLK_VPSS 367
#define CLK_CORE_VPSS 368
#define PCLK_CSI_HOST_0 369
#define PCLK_CSI_HOST_1 370
#define PCLK_CSI_HOST_2 371
#define PCLK_CSI_HOST_3 372
#define PCLK_CSI_HOST_4 373
#define ICLK_CSIHOST01 374
#define ICLK_CSIHOST0 375
#define CLK_ISP_PVTPLL_SRC 376
#define ACLK_VI_ROOT_INTER 377
#define CLK_VICAP_I0CLK 378
#define CLK_VICAP_I1CLK 379
#define CLK_VICAP_I2CLK 380
#define CLK_VICAP_I3CLK 381
#define CLK_VICAP_I4CLK 382
#define ACLK_VOP_ROOT 383
#define HCLK_VOP_ROOT 384
#define PCLK_VOP_ROOT 385
#define HCLK_VOP 386
#define ACLK_VOP 387
#define DCLK_VP0_SRC 388
#define DCLK_VP1_SRC 389
#define DCLK_VP2_SRC 390
#define DCLK_VP0 391
#define DCLK_VP1 392
#define DCLK_VP2 393
#define PCLK_VOPGRF 394
#define ACLK_VO0_ROOT 395
#define HCLK_VO0_ROOT 396
#define PCLK_VO0_ROOT 397
#define PCLK_VO0_GRF 398
#define ACLK_HDCP0 399
#define HCLK_HDCP0 400
#define PCLK_HDCP0 401
#define CLK_TRNG0_SKP 402
#define PCLK_DSIHOST0 403
#define CLK_DSIHOST0 404
#define PCLK_HDMITX0 405
#define CLK_HDMITX0_EARC 406
#define CLK_HDMITX0_REF 407
#define PCLK_EDP0 408
#define CLK_EDP0_24M 409
#define CLK_EDP0_200M 410
#define MCLK_SAI5_8CH_SRC 411
#define MCLK_SAI5_8CH 412
#define HCLK_SAI5_8CH 413
#define MCLK_SAI6_8CH_SRC 414
#define MCLK_SAI6_8CH 415
#define HCLK_SAI6_8CH 416
#define HCLK_SPDIF_TX2 417
#define MCLK_SPDIF_TX2 418
#define HCLK_SPDIF_RX2 419
#define MCLK_SPDIF_RX2 420
#define HCLK_SAI8_8CH 421
#define MCLK_SAI8_8CH_SRC 422
#define MCLK_SAI8_8CH 423
#define ACLK_VO1_ROOT 424
#define HCLK_VO1_ROOT 425
#define PCLK_VO1_ROOT 426
#define MCLK_SAI7_8CH_SRC 427
#define MCLK_SAI7_8CH 428
#define HCLK_SAI7_8CH 429
#define HCLK_SPDIF_TX3 430
#define HCLK_SPDIF_TX4 431
#define HCLK_SPDIF_TX5 432
#define MCLK_SPDIF_TX3 433
#define CLK_AUX16MHZ_0 434
#define ACLK_DP0 435
#define PCLK_DP0 436
#define PCLK_VO1_GRF 437
#define ACLK_HDCP1 438
#define HCLK_HDCP1 439
#define PCLK_HDCP1 440
#define CLK_TRNG1_SKP 441
#define HCLK_SAI9_8CH 442
#define MCLK_SAI9_8CH_SRC 443
#define MCLK_SAI9_8CH 444
#define MCLK_SPDIF_TX4 445
#define MCLK_SPDIF_TX5 446
#define CLK_GPU_SRC_PRE 447
#define CLK_GPU 448
#define PCLK_GPU_ROOT 449
#define ACLK_CENTER_ROOT 450
#define ACLK_CENTER_LOW_ROOT 451
#define HCLK_CENTER_ROOT 452
#define PCLK_CENTER_ROOT 453
#define ACLK_DMA2DDR 454
#define ACLK_DDR_SHAREMEM 455
#define PCLK_DMA2DDR 456
#define PCLK_SHAREMEM 457
#define HCLK_VEPU1_ROOT 458
#define ACLK_VEPU1_ROOT 459
#define HCLK_VEPU1 460
#define ACLK_VEPU1 461
#define CLK_VEPU1_CORE 462
#define CLK_JDBCK_DAP 463
#define PCLK_MIPI_DCPHY 464
#define CLK_32K_USB2DEBUG 465
#define PCLK_CSIDPHY 466
#define PCLK_USBDPPHY 467
#define CLK_PMUPHY_REF_SRC 468
#define CLK_USBDP_COMBO_PHY_IMMORTAL 469
#define CLK_HDMITXHDP 470
#define PCLK_MPHY 471
#define CLK_REF_OSC_MPHY 472
#define CLK_REF_UFS_CLKOUT 473
#define HCLK_PMU1_ROOT 474
#define HCLK_PMU_CM0_ROOT 475
#define CLK_200M_PMU_SRC 476
#define CLK_100M_PMU_SRC 477
#define CLK_50M_PMU_SRC 478
#define FCLK_PMU_CM0_CORE 479
#define CLK_PMU_CM0_RTC 480
#define PCLK_PMU1 481
#define CLK_PMU1 482
#define PCLK_PMU1WDT 483
#define TCLK_PMU1WDT 484
#define PCLK_PMUTIMER 485
#define CLK_PMUTIMER_ROOT 486
#define CLK_PMUTIMER0 487
#define CLK_PMUTIMER1 488
#define PCLK_PMU1PWM 489
#define CLK_PMU1PWM 490
#define CLK_PMU1PWM_OSC 491
#define PCLK_PMUPHY_ROOT 492
#define PCLK_I2C0 493
#define CLK_I2C0 494
#define SCLK_UART1 495
#define PCLK_UART1 496
#define CLK_PMU1PWM_RC 497
#define CLK_PDM0 498
#define HCLK_PDM0 499
#define MCLK_PDM0 500
#define HCLK_VAD 501
#define CLK_OSCCHK_PVTM 502
#define CLK_PDM0_OUT 503
#define CLK_HPTIMER_SRC 504
#define PCLK_PMU0_ROOT 505
#define PCLK_PMU0 506
#define PCLK_GPIO0 507
#define DBCLK_GPIO0 508
#define CLK_OSC0_PMU1 509
#define PCLK_PMU1_ROOT 510
#define XIN_OSC0_DIV 511
#define ACLK_USB 512
#define ACLK_UFS 513
#define ACLK_SDGMAC 514
#define HCLK_SDGMAC 515
#define PCLK_SDGMAC 516
#define HCLK_VO1 517
#define HCLK_VO0 518
#define PCLK_CCI_ROOT 519
#define ACLK_CCI_ROOT 520
#define HCLK_VO0VOP_CHANNEL 521
#define ACLK_VO0VOP_CHANNEL 522
#define ACLK_TOP_MID 523
#define ACLK_SECURE_HIGH 524
#define CLK_USBPHY_REF_SRC 525
#define CLK_PHY_REF_SRC 526
#define CLK_CPLL_REF_SRC 527
#define CLK_AUPLL_REF_SRC 528
#define PCLK_SECURE_NS 529
#define HCLK_SECURE_NS 530
#define ACLK_SECURE_NS 531
#define PCLK_OTPC_NS 532
#define HCLK_CRYPTO_NS 533
#define HCLK_TRNG_NS 534
#define CLK_OTPC_NS 535
#define SCLK_DSU 536
#define SCLK_DDR 537
#define ACLK_CRYPTO_NS 538
#define CLK_PKA_CRYPTO_NS 539
#define ACLK_RKVDEC_ROOT_BAK 540
#define CLK_AUDIO_FRAC_0_SRC 541
#define CLK_AUDIO_FRAC_1_SRC 542
#define CLK_AUDIO_FRAC_2_SRC 543
#define CLK_AUDIO_FRAC_3_SRC 544
#define PCLK_HDPTX_APB 545
/* secure clk */
#define CLK_STIMER0_ROOT 546
#define CLK_STIMER1_ROOT 547
#define PCLK_SECURE_S 548
#define HCLK_SECURE_S 549
#define ACLK_SECURE_S 550
#define CLK_PKA_CRYPTO_S 551
#define HCLK_VO1_S 552
#define PCLK_VO1_S 553
#define HCLK_VO0_S 554
#define PCLK_VO0_S 555
#define PCLK_KLAD 556
#define HCLK_CRYPTO_S 557
#define HCLK_KLAD 558
#define ACLK_CRYPTO_S 559
#define HCLK_TRNG_S 560
#define PCLK_OTPC_S 561
#define CLK_OTPC_S 562
#define PCLK_WDT_S 563
#define TCLK_WDT_S 564
#define PCLK_HDCP0_TRNG 565
#define PCLK_HDCP1_TRNG 566
#define HCLK_HDCP_KEY0 567
#define HCLK_HDCP_KEY1 568
#define PCLK_EDP_S 569
#define ACLK_KLAD 570
#endif

View File

@ -179,6 +179,17 @@
#define CLK_GOUT_CORE_CCI_PCLK 4 #define CLK_GOUT_CORE_CCI_PCLK 4
#define CLK_GOUT_CORE_CMU_CORE_PCLK 5 #define CLK_GOUT_CORE_CMU_CORE_PCLK 5
/* CMU_DPUM */
#define CLK_MOUT_DPUM_BUS_USER 1
#define CLK_DOUT_DPUM_BUSP 2
#define CLK_GOUT_DPUM_ACLK_DECON 3
#define CLK_GOUT_DPUM_ACLK_DMA 4
#define CLK_GOUT_DPUM_ACLK_DPP 5
#define CLK_GOUT_DPUM_SYSMMU_D0_CLK 6
#define CLK_GOUT_DPUM_SYSMMU_D1_CLK 7
#define CLK_GOUT_DPUM_SYSMMU_D2_CLK 8
#define CLK_GOUT_DPUM_SYSMMU_D3_CLK 9
/* CMU_FSYS0 */ /* CMU_FSYS0 */
#define CLK_MOUT_FSYS0_BUS_USER 1 #define CLK_MOUT_FSYS0_BUS_USER 1
#define CLK_MOUT_FSYS0_PCIE_USER 2 #define CLK_MOUT_FSYS0_PCIE_USER 2

View File

@ -0,0 +1,191 @@
/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
/*
* Copyright (c) 2024 Samsung Electronics Co., Ltd.
* Author: Sunyeal Hong <sunyeal.hong@samsung.com>
*
* Device Tree binding constants for ExynosAuto v920 clock controller.
*/
#ifndef _DT_BINDINGS_CLOCK_EXYNOSAUTOV920_H
#define _DT_BINDINGS_CLOCK_EXYNOSAUTOV920_H
/* CMU_TOP */
#define FOUT_SHARED0_PLL 1
#define FOUT_SHARED1_PLL 2
#define FOUT_SHARED2_PLL 3
#define FOUT_SHARED3_PLL 4
#define FOUT_SHARED4_PLL 5
#define FOUT_SHARED5_PLL 6
#define FOUT_MMC_PLL 7
/* MUX in CMU_TOP */
#define MOUT_SHARED0_PLL 8
#define MOUT_SHARED1_PLL 9
#define MOUT_SHARED2_PLL 10
#define MOUT_SHARED3_PLL 11
#define MOUT_SHARED4_PLL 12
#define MOUT_SHARED5_PLL 13
#define MOUT_MMC_PLL 14
#define MOUT_CLKCMU_CMU_BOOST 15
#define MOUT_CLKCMU_CMU_CMUREF 16
#define MOUT_CLKCMU_ACC_NOC 17
#define MOUT_CLKCMU_ACC_ORB 18
#define MOUT_CLKCMU_APM_NOC 19
#define MOUT_CLKCMU_AUD_CPU 20
#define MOUT_CLKCMU_AUD_NOC 21
#define MOUT_CLKCMU_CPUCL0_SWITCH 22
#define MOUT_CLKCMU_CPUCL0_CLUSTER 23
#define MOUT_CLKCMU_CPUCL0_DBG 24
#define MOUT_CLKCMU_CPUCL1_SWITCH 25
#define MOUT_CLKCMU_CPUCL1_CLUSTER 26
#define MOUT_CLKCMU_CPUCL2_SWITCH 27
#define MOUT_CLKCMU_CPUCL2_CLUSTER 28
#define MOUT_CLKCMU_DNC_NOC 29
#define MOUT_CLKCMU_DPTX_NOC 30
#define MOUT_CLKCMU_DPTX_DPGTC 31
#define MOUT_CLKCMU_DPTX_DPOSC 32
#define MOUT_CLKCMU_DPUB_NOC 33
#define MOUT_CLKCMU_DPUB_DSIM 34
#define MOUT_CLKCMU_DPUF0_NOC 35
#define MOUT_CLKCMU_DPUF1_NOC 36
#define MOUT_CLKCMU_DPUF2_NOC 37
#define MOUT_CLKCMU_DSP_NOC 38
#define MOUT_CLKCMU_G3D_SWITCH 39
#define MOUT_CLKCMU_G3D_NOCP 40
#define MOUT_CLKCMU_GNPU_NOC 41
#define MOUT_CLKCMU_HSI0_NOC 42
#define MOUT_CLKCMU_HSI1_NOC 43
#define MOUT_CLKCMU_HSI1_USBDRD 44
#define MOUT_CLKCMU_HSI1_MMC_CARD 45
#define MOUT_CLKCMU_HSI2_NOC 46
#define MOUT_CLKCMU_HSI2_NOC_UFS 47
#define MOUT_CLKCMU_HSI2_UFS_EMBD 48
#define MOUT_CLKCMU_HSI2_ETHERNET 49
#define MOUT_CLKCMU_ISP_NOC 50
#define MOUT_CLKCMU_M2M_NOC 51
#define MOUT_CLKCMU_M2M_JPEG 52
#define MOUT_CLKCMU_MFC_MFC 53
#define MOUT_CLKCMU_MFC_WFD 54
#define MOUT_CLKCMU_MFD_NOC 55
#define MOUT_CLKCMU_MIF_SWITCH 56
#define MOUT_CLKCMU_MIF_NOCP 57
#define MOUT_CLKCMU_MISC_NOC 58
#define MOUT_CLKCMU_NOCL0_NOC 59
#define MOUT_CLKCMU_NOCL1_NOC 60
#define MOUT_CLKCMU_NOCL2_NOC 61
#define MOUT_CLKCMU_PERIC0_NOC 62
#define MOUT_CLKCMU_PERIC0_IP 63
#define MOUT_CLKCMU_PERIC1_NOC 64
#define MOUT_CLKCMU_PERIC1_IP 65
#define MOUT_CLKCMU_SDMA_NOC 66
#define MOUT_CLKCMU_SNW_NOC 67
#define MOUT_CLKCMU_SSP_NOC 68
#define MOUT_CLKCMU_TAA_NOC 69
/* DIV in CMU_TOP */
#define DOUT_SHARED0_DIV1 70
#define DOUT_SHARED0_DIV2 71
#define DOUT_SHARED0_DIV3 72
#define DOUT_SHARED0_DIV4 73
#define DOUT_SHARED1_DIV1 74
#define DOUT_SHARED1_DIV2 75
#define DOUT_SHARED1_DIV3 76
#define DOUT_SHARED1_DIV4 77
#define DOUT_SHARED2_DIV1 78
#define DOUT_SHARED2_DIV2 79
#define DOUT_SHARED2_DIV3 80
#define DOUT_SHARED2_DIV4 81
#define DOUT_SHARED3_DIV1 82
#define DOUT_SHARED3_DIV2 83
#define DOUT_SHARED3_DIV3 84
#define DOUT_SHARED3_DIV4 85
#define DOUT_SHARED4_DIV1 86
#define DOUT_SHARED4_DIV2 87
#define DOUT_SHARED4_DIV3 88
#define DOUT_SHARED4_DIV4 89
#define DOUT_SHARED5_DIV1 90
#define DOUT_SHARED5_DIV2 91
#define DOUT_SHARED5_DIV3 92
#define DOUT_SHARED5_DIV4 93
#define DOUT_CLKCMU_CMU_BOOST 94
#define DOUT_CLKCMU_ACC_NOC 95
#define DOUT_CLKCMU_ACC_ORB 96
#define DOUT_CLKCMU_APM_NOC 97
#define DOUT_CLKCMU_AUD_CPU 98
#define DOUT_CLKCMU_AUD_NOC 99
#define DOUT_CLKCMU_CPUCL0_SWITCH 100
#define DOUT_CLKCMU_CPUCL0_CLUSTER 101
#define DOUT_CLKCMU_CPUCL0_DBG 102
#define DOUT_CLKCMU_CPUCL1_SWITCH 103
#define DOUT_CLKCMU_CPUCL1_CLUSTER 104
#define DOUT_CLKCMU_CPUCL2_SWITCH 105
#define DOUT_CLKCMU_CPUCL2_CLUSTER 106
#define DOUT_CLKCMU_DNC_NOC 107
#define DOUT_CLKCMU_DPTX_NOC 108
#define DOUT_CLKCMU_DPTX_DPGTC 109
#define DOUT_CLKCMU_DPTX_DPOSC 110
#define DOUT_CLKCMU_DPUB_NOC 111
#define DOUT_CLKCMU_DPUB_DSIM 112
#define DOUT_CLKCMU_DPUF0_NOC 113
#define DOUT_CLKCMU_DPUF1_NOC 114
#define DOUT_CLKCMU_DPUF2_NOC 115
#define DOUT_CLKCMU_DSP_NOC 116
#define DOUT_CLKCMU_G3D_SWITCH 117
#define DOUT_CLKCMU_G3D_NOCP 118
#define DOUT_CLKCMU_GNPU_NOC 119
#define DOUT_CLKCMU_HSI0_NOC 120
#define DOUT_CLKCMU_HSI1_NOC 121
#define DOUT_CLKCMU_HSI1_USBDRD 122
#define DOUT_CLKCMU_HSI1_MMC_CARD 123
#define DOUT_CLKCMU_HSI2_NOC 124
#define DOUT_CLKCMU_HSI2_NOC_UFS 125
#define DOUT_CLKCMU_HSI2_UFS_EMBD 126
#define DOUT_CLKCMU_HSI2_ETHERNET 127
#define DOUT_CLKCMU_ISP_NOC 128
#define DOUT_CLKCMU_M2M_NOC 129
#define DOUT_CLKCMU_M2M_JPEG 130
#define DOUT_CLKCMU_MFC_MFC 131
#define DOUT_CLKCMU_MFC_WFD 132
#define DOUT_CLKCMU_MFD_NOC 133
#define DOUT_CLKCMU_MIF_NOCP 134
#define DOUT_CLKCMU_MISC_NOC 135
#define DOUT_CLKCMU_NOCL0_NOC 136
#define DOUT_CLKCMU_NOCL1_NOC 137
#define DOUT_CLKCMU_NOCL2_NOC 138
#define DOUT_CLKCMU_PERIC0_NOC 139
#define DOUT_CLKCMU_PERIC0_IP 140
#define DOUT_CLKCMU_PERIC1_NOC 141
#define DOUT_CLKCMU_PERIC1_IP 142
#define DOUT_CLKCMU_SDMA_NOC 143
#define DOUT_CLKCMU_SNW_NOC 144
#define DOUT_CLKCMU_SSP_NOC 145
#define DOUT_CLKCMU_TAA_NOC 146
/* CMU_PERIC0 */
#define CLK_MOUT_PERIC0_IP_USER 1
#define CLK_MOUT_PERIC0_NOC_USER 2
#define CLK_MOUT_PERIC0_USI00_USI 3
#define CLK_MOUT_PERIC0_USI01_USI 4
#define CLK_MOUT_PERIC0_USI02_USI 5
#define CLK_MOUT_PERIC0_USI03_USI 6
#define CLK_MOUT_PERIC0_USI04_USI 7
#define CLK_MOUT_PERIC0_USI05_USI 8
#define CLK_MOUT_PERIC0_USI06_USI 9
#define CLK_MOUT_PERIC0_USI07_USI 10
#define CLK_MOUT_PERIC0_USI08_USI 11
#define CLK_MOUT_PERIC0_USI_I2C 12
#define CLK_MOUT_PERIC0_I3C 13
#define CLK_DOUT_PERIC0_USI00_USI 14
#define CLK_DOUT_PERIC0_USI01_USI 15
#define CLK_DOUT_PERIC0_USI02_USI 16
#define CLK_DOUT_PERIC0_USI03_USI 17
#define CLK_DOUT_PERIC0_USI04_USI 18
#define CLK_DOUT_PERIC0_USI05_USI 19
#define CLK_DOUT_PERIC0_USI06_USI 20
#define CLK_DOUT_PERIC0_USI07_USI 21
#define CLK_DOUT_PERIC0_USI08_USI 22
#define CLK_DOUT_PERIC0_USI_I2C 23
#define CLK_DOUT_PERIC0_I3C 24
#endif /* _DT_BINDINGS_CLOCK_EXYNOSAUTOV920_H */

View File

@ -0,0 +1,46 @@
/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
#ifndef INTERCONNECT_QCOM_IPQ5332_H
#define INTERCONNECT_QCOM_IPQ5332_H
#define MASTER_SNOC_PCIE3_1_M 0
#define SLAVE_SNOC_PCIE3_1_M 1
#define MASTER_ANOC_PCIE3_1_S 2
#define SLAVE_ANOC_PCIE3_1_S 3
#define MASTER_SNOC_PCIE3_2_M 4
#define SLAVE_SNOC_PCIE3_2_M 5
#define MASTER_ANOC_PCIE3_2_S 6
#define SLAVE_ANOC_PCIE3_2_S 7
#define MASTER_SNOC_USB 8
#define SLAVE_SNOC_USB 9
#define MASTER_NSSNOC_NSSCC 10
#define SLAVE_NSSNOC_NSSCC 11
#define MASTER_NSSNOC_SNOC_0 12
#define SLAVE_NSSNOC_SNOC_0 13
#define MASTER_NSSNOC_SNOC_1 14
#define SLAVE_NSSNOC_SNOC_1 15
#define MASTER_NSSNOC_ATB 16
#define SLAVE_NSSNOC_ATB 17
#define MASTER_NSSNOC_PCNOC_1 18
#define SLAVE_NSSNOC_PCNOC_1 19
#define MASTER_NSSNOC_QOSGEN_REF 20
#define SLAVE_NSSNOC_QOSGEN_REF 21
#define MASTER_NSSNOC_TIMEOUT_REF 22
#define SLAVE_NSSNOC_TIMEOUT_REF 23
#define MASTER_NSSNOC_XO_DCD 24
#define SLAVE_NSSNOC_XO_DCD 25
#define MASTER_NSSNOC_PPE 0
#define SLAVE_NSSNOC_PPE 1
#define MASTER_NSSNOC_PPE_CFG 2
#define SLAVE_NSSNOC_PPE_CFG 3
#define MASTER_NSSNOC_NSS_CSR 4
#define SLAVE_NSSNOC_NSS_CSR 5
#define MASTER_NSSNOC_CE_APB 6
#define SLAVE_NSSNOC_CE_APB 7
#define MASTER_NSSNOC_CE_AXI 8
#define SLAVE_NSSNOC_CE_AXI 9
#define MASTER_CNOC_AHB 0
#define SLAVE_CNOC_AHB 1
#endif /* INTERCONNECT_QCOM_IPQ5332_H */

View File

@ -0,0 +1,564 @@
/* SPDX-License-Identifier: (GPL-2.0 OR MIT) */
/*
* Copyright (c) 2023 Rockchip Electronics Co. Ltd.
* Copyright (c) 2024 Collabora Ltd.
*
* Author: Elaine Zhang <zhangqing@rock-chips.com>
* Author: Detlev Casanova <detlev.casanova@collabora.com>
*/
#ifndef _DT_BINDINGS_RESET_ROCKCHIP_RK3576_H
#define _DT_BINDINGS_RESET_ROCKCHIP_RK3576_H
#define SRST_A_TOP_BIU 0
#define SRST_P_TOP_BIU 1
#define SRST_A_TOP_MID_BIU 2
#define SRST_A_SECURE_HIGH_BIU 3
#define SRST_H_TOP_BIU 4
#define SRST_H_VO0VOP_CHANNEL_BIU 5
#define SRST_A_VO0VOP_CHANNEL_BIU 6
#define SRST_BISRINTF 7
#define SRST_H_AUDIO_BIU 8
#define SRST_H_ASRC_2CH_0 9
#define SRST_H_ASRC_2CH_1 10
#define SRST_H_ASRC_4CH_0 11
#define SRST_H_ASRC_4CH_1 12
#define SRST_ASRC_2CH_0 13
#define SRST_ASRC_2CH_1 14
#define SRST_ASRC_4CH_0 15
#define SRST_ASRC_4CH_1 16
#define SRST_M_SAI0_8CH 17
#define SRST_H_SAI0_8CH 18
#define SRST_H_SPDIF_RX0 19
#define SRST_M_SPDIF_RX0 20
#define SRST_H_SPDIF_RX1 21
#define SRST_M_SPDIF_RX1 22
#define SRST_M_SAI1_8CH 23
#define SRST_H_SAI1_8CH 24
#define SRST_M_SAI2_2CH 25
#define SRST_H_SAI2_2CH 26
#define SRST_M_SAI3_2CH 27
#define SRST_H_SAI3_2CH 28
#define SRST_M_SAI4_2CH 29
#define SRST_H_SAI4_2CH 30
#define SRST_H_ACDCDIG_DSM 31
#define SRST_M_ACDCDIG_DSM 32
#define SRST_PDM1 33
#define SRST_H_PDM1 34
#define SRST_M_PDM1 35
#define SRST_H_SPDIF_TX0 36
#define SRST_M_SPDIF_TX0 37
#define SRST_H_SPDIF_TX1 38
#define SRST_M_SPDIF_TX1 39
#define SRST_A_BUS_BIU 40
#define SRST_P_BUS_BIU 41
#define SRST_P_CRU 42
#define SRST_H_CAN0 43
#define SRST_CAN0 44
#define SRST_H_CAN1 45
#define SRST_CAN1 46
#define SRST_P_INTMUX2BUS 47
#define SRST_P_VCCIO_IOC 48
#define SRST_H_BUS_BIU 49
#define SRST_KEY_SHIFT 50
#define SRST_P_I2C1 51
#define SRST_P_I2C2 52
#define SRST_P_I2C3 53
#define SRST_P_I2C4 54
#define SRST_P_I2C5 55
#define SRST_P_I2C6 56
#define SRST_P_I2C7 57
#define SRST_P_I2C8 58
#define SRST_P_I2C9 59
#define SRST_P_WDT_BUSMCU 60
#define SRST_T_WDT_BUSMCU 61
#define SRST_A_GIC 62
#define SRST_I2C1 63
#define SRST_I2C2 64
#define SRST_I2C3 65
#define SRST_I2C4 66
#define SRST_I2C5 67
#define SRST_I2C6 68
#define SRST_I2C7 69
#define SRST_I2C8 70
#define SRST_I2C9 71
#define SRST_P_SARADC 72
#define SRST_SARADC 73
#define SRST_P_TSADC 74
#define SRST_TSADC 75
#define SRST_P_UART0 76
#define SRST_P_UART2 77
#define SRST_P_UART3 78
#define SRST_P_UART4 79
#define SRST_P_UART5 80
#define SRST_P_UART6 81
#define SRST_P_UART7 82
#define SRST_P_UART8 83
#define SRST_P_UART9 84
#define SRST_P_UART10 85
#define SRST_P_UART11 86
#define SRST_S_UART0 87
#define SRST_S_UART2 88
#define SRST_S_UART3 89
#define SRST_S_UART4 90
#define SRST_S_UART5 91
#define SRST_S_UART6 92
#define SRST_S_UART7 93
#define SRST_S_UART8 94
#define SRST_S_UART9 95
#define SRST_S_UART10 96
#define SRST_S_UART11 97
#define SRST_P_SPI0 98
#define SRST_P_SPI1 99
#define SRST_P_SPI2 100
#define SRST_P_SPI3 101
#define SRST_P_SPI4 102
#define SRST_SPI0 103
#define SRST_SPI1 104
#define SRST_SPI2 105
#define SRST_SPI3 106
#define SRST_SPI4 107
#define SRST_P_WDT0 108
#define SRST_T_WDT0 109
#define SRST_P_SYS_GRF 110
#define SRST_P_PWM1 111
#define SRST_PWM1 112
#define SRST_P_BUSTIMER0 113
#define SRST_P_BUSTIMER1 114
#define SRST_TIMER0 115
#define SRST_TIMER1 116
#define SRST_TIMER2 117
#define SRST_TIMER3 118
#define SRST_TIMER4 119
#define SRST_TIMER5 120
#define SRST_P_BUSIOC 121
#define SRST_P_MAILBOX0 122
#define SRST_P_GPIO1 123
#define SRST_GPIO1 124
#define SRST_P_GPIO2 125
#define SRST_GPIO2 126
#define SRST_P_GPIO3 127
#define SRST_GPIO3 128
#define SRST_P_GPIO4 129
#define SRST_GPIO4 130
#define SRST_A_DECOM 131
#define SRST_P_DECOM 132
#define SRST_D_DECOM 133
#define SRST_TIMER6 134
#define SRST_TIMER7 135
#define SRST_TIMER8 136
#define SRST_TIMER9 137
#define SRST_TIMER10 138
#define SRST_TIMER11 139
#define SRST_A_DMAC0 140
#define SRST_A_DMAC1 141
#define SRST_A_DMAC2 142
#define SRST_A_SPINLOCK 143
#define SRST_REF_PVTPLL_BUS 144
#define SRST_H_I3C0 145
#define SRST_H_I3C1 146
#define SRST_H_BUS_CM0_BIU 147
#define SRST_F_BUS_CM0_CORE 148
#define SRST_T_BUS_CM0_JTAG 149
#define SRST_P_INTMUX2PMU 150
#define SRST_P_INTMUX2DDR 151
#define SRST_P_PVTPLL_BUS 152
#define SRST_P_PWM2 153
#define SRST_PWM2 154
#define SRST_FREQ_PWM1 155
#define SRST_COUNTER_PWM1 156
#define SRST_I3C0 157
#define SRST_I3C1 158
#define SRST_P_DDR_MON_CH0 159
#define SRST_P_DDR_BIU 160
#define SRST_P_DDR_UPCTL_CH0 161
#define SRST_TM_DDR_MON_CH0 162
#define SRST_A_DDR_BIU 163
#define SRST_DFI_CH0 164
#define SRST_DDR_MON_CH0 165
#define SRST_P_DDR_HWLP_CH0 166
#define SRST_P_DDR_MON_CH1 167
#define SRST_P_DDR_HWLP_CH1 168
#define SRST_P_DDR_UPCTL_CH1 169
#define SRST_TM_DDR_MON_CH1 170
#define SRST_DFI_CH1 171
#define SRST_A_DDR01_MSCH0 172
#define SRST_A_DDR01_MSCH1 173
#define SRST_DDR_MON_CH1 174
#define SRST_DDR_SCRAMBLE_CH0 175
#define SRST_DDR_SCRAMBLE_CH1 176
#define SRST_P_AHB2APB 177
#define SRST_H_AHB2APB 178
#define SRST_H_DDR_BIU 179
#define SRST_F_DDR_CM0_CORE 180
#define SRST_P_DDR01_MSCH0 181
#define SRST_P_DDR01_MSCH1 182
#define SRST_DDR_TIMER0 183
#define SRST_DDR_TIMER1 184
#define SRST_T_WDT_DDR 185
#define SRST_P_WDT 186
#define SRST_P_TIMER 187
#define SRST_T_DDR_CM0_JTAG 188
#define SRST_P_DDR_GRF 189
#define SRST_DDR_UPCTL_CH0 190
#define SRST_A_DDR_UPCTL_0_CH0 191
#define SRST_A_DDR_UPCTL_1_CH0 192
#define SRST_A_DDR_UPCTL_2_CH0 193
#define SRST_A_DDR_UPCTL_3_CH0 194
#define SRST_A_DDR_UPCTL_4_CH0 195
#define SRST_DDR_UPCTL_CH1 196
#define SRST_A_DDR_UPCTL_0_CH1 197
#define SRST_A_DDR_UPCTL_1_CH1 198
#define SRST_A_DDR_UPCTL_2_CH1 199
#define SRST_A_DDR_UPCTL_3_CH1 200
#define SRST_A_DDR_UPCTL_4_CH1 201
#define SRST_REF_PVTPLL_DDR 202
#define SRST_P_PVTPLL_DDR 203
#define SRST_A_RKNN0 204
#define SRST_A_RKNN0_BIU 205
#define SRST_L_RKNN0_BIU 206
#define SRST_A_RKNN1 207
#define SRST_A_RKNN1_BIU 208
#define SRST_L_RKNN1_BIU 209
#define SRST_NPU_DAP 210
#define SRST_L_NPUSUBSYS_BIU 211
#define SRST_P_NPUTOP_BIU 212
#define SRST_P_NPU_TIMER 213
#define SRST_NPUTIMER0 214
#define SRST_NPUTIMER1 215
#define SRST_P_NPU_WDT 216
#define SRST_T_NPU_WDT 217
#define SRST_A_RKNN_CBUF 218
#define SRST_A_RVCORE0 219
#define SRST_P_NPU_GRF 220
#define SRST_P_PVTPLL_NPU 221
#define SRST_NPU_PVTPLL 222
#define SRST_H_NPU_CM0_BIU 223
#define SRST_F_NPU_CM0_CORE 224
#define SRST_T_NPU_CM0_JTAG 225
#define SRST_A_RKNNTOP_BIU 226
#define SRST_H_RKNN_CBUF 227
#define SRST_H_RKNNTOP_BIU 228
#define SRST_H_NVM_BIU 229
#define SRST_A_NVM_BIU 230
#define SRST_S_FSPI 231
#define SRST_H_FSPI 232
#define SRST_C_EMMC 233
#define SRST_H_EMMC 234
#define SRST_A_EMMC 235
#define SRST_B_EMMC 236
#define SRST_T_EMMC 237
#define SRST_P_GRF 238
#define SRST_P_PHP_BIU 239
#define SRST_A_PHP_BIU 240
#define SRST_P_PCIE0 241
#define SRST_PCIE0_POWER_UP 242
#define SRST_A_USB3OTG1 243
#define SRST_A_MMU0 244
#define SRST_A_SLV_MMU0 245
#define SRST_A_MMU1 246
#define SRST_A_SLV_MMU1 247
#define SRST_P_PCIE1 248
#define SRST_PCIE1_POWER_UP 249
#define SRST_RXOOB0 250
#define SRST_RXOOB1 251
#define SRST_PMALIVE0 252
#define SRST_PMALIVE1 253
#define SRST_A_SATA0 254
#define SRST_A_SATA1 255
#define SRST_ASIC1 256
#define SRST_ASIC0 257
#define SRST_P_CSIDPHY1 258
#define SRST_SCAN_CSIDPHY1 259
#define SRST_P_SDGMAC_GRF 260
#define SRST_P_SDGMAC_BIU 261
#define SRST_A_SDGMAC_BIU 262
#define SRST_H_SDGMAC_BIU 263
#define SRST_A_GMAC0 264
#define SRST_A_GMAC1 265
#define SRST_P_GMAC0 266
#define SRST_P_GMAC1 267
#define SRST_H_SDIO 268
#define SRST_H_SDMMC0 269
#define SRST_S_FSPI1 270
#define SRST_H_FSPI1 271
#define SRST_A_DSMC_BIU 272
#define SRST_A_DSMC 273
#define SRST_P_DSMC 274
#define SRST_H_HSGPIO 275
#define SRST_HSGPIO 276
#define SRST_A_HSGPIO 277
#define SRST_H_RKVDEC 278
#define SRST_H_RKVDEC_BIU 279
#define SRST_A_RKVDEC_BIU 280
#define SRST_RKVDEC_HEVC_CA 281
#define SRST_RKVDEC_CORE 282
#define SRST_A_USB_BIU 283
#define SRST_P_USBUFS_BIU 284
#define SRST_A_USB3OTG0 285
#define SRST_A_UFS_BIU 286
#define SRST_A_MMU2 287
#define SRST_A_SLV_MMU2 288
#define SRST_A_UFS_SYS 289
#define SRST_A_UFS 290
#define SRST_P_USBUFS_GRF 291
#define SRST_P_UFS_GRF 292
#define SRST_H_VPU_BIU 293
#define SRST_A_JPEG_BIU 294
#define SRST_A_RGA_BIU 295
#define SRST_A_VDPP_BIU 296
#define SRST_A_EBC_BIU 297
#define SRST_H_RGA2E_0 298
#define SRST_A_RGA2E_0 299
#define SRST_CORE_RGA2E_0 300
#define SRST_A_JPEG 301
#define SRST_H_JPEG 302
#define SRST_H_VDPP 303
#define SRST_A_VDPP 304
#define SRST_CORE_VDPP 305
#define SRST_H_RGA2E_1 306
#define SRST_A_RGA2E_1 307
#define SRST_CORE_RGA2E_1 308
#define SRST_H_EBC 309
#define SRST_A_EBC 310
#define SRST_D_EBC 311
#define SRST_H_VEPU0_BIU 312
#define SRST_A_VEPU0_BIU 313
#define SRST_H_VEPU0 314
#define SRST_A_VEPU0 315
#define SRST_VEPU0_CORE 316
#define SRST_A_VI_BIU 317
#define SRST_H_VI_BIU 318
#define SRST_P_VI_BIU 319
#define SRST_D_VICAP 320
#define SRST_A_VICAP 321
#define SRST_H_VICAP 322
#define SRST_ISP0 323
#define SRST_ISP0_VICAP 324
#define SRST_CORE_VPSS 325
#define SRST_P_CSI_HOST_0 326
#define SRST_P_CSI_HOST_1 327
#define SRST_P_CSI_HOST_2 328
#define SRST_P_CSI_HOST_3 329
#define SRST_P_CSI_HOST_4 330
#define SRST_CIFIN 331
#define SRST_VICAP_I0CLK 332
#define SRST_VICAP_I1CLK 333
#define SRST_VICAP_I2CLK 334
#define SRST_VICAP_I3CLK 335
#define SRST_VICAP_I4CLK 336
#define SRST_A_VOP_BIU 337
#define SRST_A_VOP2_BIU 338
#define SRST_H_VOP_BIU 339
#define SRST_P_VOP_BIU 340
#define SRST_H_VOP 341
#define SRST_A_VOP 342
#define SRST_D_VP0 343
#define SRST_D_VP1 344
#define SRST_D_VP2 345
#define SRST_P_VOP2_BIU 346
#define SRST_P_VOPGRF 347
#define SRST_H_VO0_BIU 348
#define SRST_P_VO0_BIU 349
#define SRST_A_HDCP0_BIU 350
#define SRST_P_VO0_GRF 351
#define SRST_A_HDCP0 352
#define SRST_H_HDCP0 353
#define SRST_HDCP0 354
#define SRST_P_DSIHOST0 355
#define SRST_DSIHOST0 356
#define SRST_P_HDMITX0 357
#define SRST_HDMITX0_REF 358
#define SRST_P_EDP0 359
#define SRST_EDP0_24M 360
#define SRST_M_SAI5_8CH 361
#define SRST_H_SAI5_8CH 362
#define SRST_M_SAI6_8CH 363
#define SRST_H_SAI6_8CH 364
#define SRST_H_SPDIF_TX2 365
#define SRST_M_SPDIF_TX2 366
#define SRST_H_SPDIF_RX2 367
#define SRST_M_SPDIF_RX2 368
#define SRST_H_SAI8_8CH 369
#define SRST_M_SAI8_8CH 370
#define SRST_H_VO1_BIU 371
#define SRST_P_VO1_BIU 372
#define SRST_M_SAI7_8CH 373
#define SRST_H_SAI7_8CH 374
#define SRST_H_SPDIF_TX3 375
#define SRST_H_SPDIF_TX4 376
#define SRST_H_SPDIF_TX5 377
#define SRST_M_SPDIF_TX3 378
#define SRST_DP0 379
#define SRST_P_VO1_GRF 380
#define SRST_A_HDCP1_BIU 381
#define SRST_A_HDCP1 382
#define SRST_H_HDCP1 383
#define SRST_HDCP1 384
#define SRST_H_SAI9_8CH 385
#define SRST_M_SAI9_8CH 386
#define SRST_M_SPDIF_TX4 387
#define SRST_M_SPDIF_TX5 388
#define SRST_GPU 389
#define SRST_A_S_GPU_BIU 390
#define SRST_A_M0_GPU_BIU 391
#define SRST_P_GPU_BIU 392
#define SRST_P_GPU_GRF 393
#define SRST_GPU_PVTPLL 394
#define SRST_P_PVTPLL_GPU 395
#define SRST_A_CENTER_BIU 396
#define SRST_A_DMA2DDR 397
#define SRST_A_DDR_SHAREMEM 398
#define SRST_A_DDR_SHAREMEM_BIU 399
#define SRST_H_CENTER_BIU 400
#define SRST_P_CENTER_GRF 401
#define SRST_P_DMA2DDR 402
#define SRST_P_SHAREMEM 403
#define SRST_P_CENTER_BIU 404
#define SRST_LINKSYM_HDMITXPHY0 405
#define SRST_DP0_PIXELCLK 406
#define SRST_PHY_DP0_TX 407
#define SRST_DP1_PIXELCLK 408
#define SRST_DP2_PIXELCLK 409
#define SRST_H_VEPU1_BIU 410
#define SRST_A_VEPU1_BIU 411
#define SRST_H_VEPU1 412
#define SRST_A_VEPU1 413
#define SRST_VEPU1_CORE 414
#define SRST_P_PHPPHY_CRU 415
#define SRST_P_APB2ASB_SLV_CHIP_TOP 416
#define SRST_P_PCIE2_COMBOPHY0 417
#define SRST_P_PCIE2_COMBOPHY0_GRF 418
#define SRST_P_PCIE2_COMBOPHY1 419
#define SRST_P_PCIE2_COMBOPHY1_GRF 420
#define SRST_PCIE0_PIPE_PHY 421
#define SRST_PCIE1_PIPE_PHY 422
#define SRST_H_CRYPTO_NS 423
#define SRST_H_TRNG_NS 424
#define SRST_P_OTPC_NS 425
#define SRST_OTPC_NS 426
#define SRST_P_HDPTX_GRF 427
#define SRST_P_HDPTX_APB 428
#define SRST_P_MIPI_DCPHY 429
#define SRST_P_DCPHY_GRF 430
#define SRST_P_BOT0_APB2ASB 431
#define SRST_P_BOT1_APB2ASB 432
#define SRST_USB2DEBUG 433
#define SRST_P_CSIPHY_GRF 434
#define SRST_P_CSIPHY 435
#define SRST_P_USBPHY_GRF_0 436
#define SRST_P_USBPHY_GRF_1 437
#define SRST_P_USBDP_GRF 438
#define SRST_P_USBDPPHY 439
#define SRST_USBDP_COMBO_PHY_INIT 440
#define SRST_USBDP_COMBO_PHY_CMN 441
#define SRST_USBDP_COMBO_PHY_LANE 442
#define SRST_USBDP_COMBO_PHY_PCS 443
#define SRST_M_MIPI_DCPHY 444
#define SRST_S_MIPI_DCPHY 445
#define SRST_SCAN_CSIPHY 446
#define SRST_P_VCCIO6_IOC 447
#define SRST_OTGPHY_0 448
#define SRST_OTGPHY_1 449
#define SRST_HDPTX_INIT 450
#define SRST_HDPTX_CMN 451
#define SRST_HDPTX_LANE 452
#define SRST_HDMITXHDP 453
#define SRST_MPHY_INIT 454
#define SRST_P_MPHY_GRF 455
#define SRST_P_VCCIO7_IOC 456
#define SRST_H_PMU1_BIU 457
#define SRST_P_PMU1_NIU 458
#define SRST_H_PMU_CM0_BIU 459
#define SRST_PMU_CM0_CORE 460
#define SRST_PMU_CM0_JTAG 461
#define SRST_P_CRU_PMU1 462
#define SRST_P_PMU1_GRF 463
#define SRST_P_PMU1_IOC 464
#define SRST_P_PMU1WDT 465
#define SRST_T_PMU1WDT 466
#define SRST_P_PMUTIMER 467
#define SRST_PMUTIMER0 468
#define SRST_PMUTIMER1 469
#define SRST_P_PMU1PWM 470
#define SRST_PMU1PWM 471
#define SRST_P_I2C0 472
#define SRST_I2C0 473
#define SRST_S_UART1 474
#define SRST_P_UART1 475
#define SRST_PDM0 476
#define SRST_H_PDM0 477
#define SRST_M_PDM0 478
#define SRST_H_VAD 479
#define SRST_P_PMU0GRF 480
#define SRST_P_PMU0IOC 481
#define SRST_P_GPIO0 482
#define SRST_DB_GPIO0 483
#endif

View File

@ -393,6 +393,20 @@ struct clk *clk_register_fixed_rate(struct device *dev, const char *name,
#define devm_clk_hw_register_fixed_rate(dev, name, parent_name, flags, fixed_rate) \ #define devm_clk_hw_register_fixed_rate(dev, name, parent_name, flags, fixed_rate) \
__clk_hw_register_fixed_rate((dev), NULL, (name), (parent_name), NULL, \ __clk_hw_register_fixed_rate((dev), NULL, (name), (parent_name), NULL, \
NULL, (flags), (fixed_rate), 0, 0, true) NULL, (flags), (fixed_rate), 0, 0, true)
/**
* devm_clk_hw_register_fixed_rate_parent_data - register fixed-rate clock with
* the clock framework
* @dev: device that is registering this clock
* @name: name of this clock
* @parent_data: parent clk data
* @flags: framework-specific flags
* @fixed_rate: non-adjustable clock rate
*/
#define devm_clk_hw_register_fixed_rate_parent_data(dev, name, parent_data, flags, \
fixed_rate) \
__clk_hw_register_fixed_rate((dev), NULL, (name), NULL, NULL, \
(parent_data), (flags), (fixed_rate), 0, \
0, true)
/** /**
* clk_hw_register_fixed_rate_parent_hw - register fixed-rate clock with * clk_hw_register_fixed_rate_parent_hw - register fixed-rate clock with
* the clock framework * the clock framework

View File

@ -640,6 +640,32 @@ struct clk *devm_clk_get_optional_prepared(struct device *dev, const char *id);
*/ */
struct clk *devm_clk_get_optional_enabled(struct device *dev, const char *id); struct clk *devm_clk_get_optional_enabled(struct device *dev, const char *id);
/**
* devm_clk_get_optional_enabled_with_rate - devm_clk_get_optional() +
* clk_set_rate() +
* clk_prepare_enable()
* @dev: device for clock "consumer"
* @id: clock consumer ID
* @rate: new clock rate
*
* Context: May sleep.
*
* Return: a struct clk corresponding to the clock producer, or
* valid IS_ERR() condition containing errno. The implementation
* uses @dev and @id to determine the clock consumer, and thereby
* the clock producer. If no such clk is found, it returns NULL
* which serves as a dummy clk. That's the only difference compared
* to devm_clk_get_enabled().
*
* The returned clk (if valid) is prepared and enabled and rate was set.
*
* The clock will automatically be disabled, unprepared and freed
* when the device is unbound from the bus.
*/
struct clk *devm_clk_get_optional_enabled_with_rate(struct device *dev,
const char *id,
unsigned long rate);
/** /**
* devm_get_clk_from_child - lookup and obtain a managed reference to a * devm_get_clk_from_child - lookup and obtain a managed reference to a
* clock producer from child node. * clock producer from child node.
@ -982,6 +1008,13 @@ static inline struct clk *devm_clk_get_optional_enabled(struct device *dev,
return NULL; return NULL;
} }
static inline struct clk *
devm_clk_get_optional_enabled_with_rate(struct device *dev, const char *id,
unsigned long rate)
{
return NULL;
}
static inline int __must_check devm_clk_bulk_get(struct device *dev, int num_clks, static inline int __must_check devm_clk_bulk_get(struct device *dev, int num_clks,
struct clk_bulk_data *clks) struct clk_bulk_data *clks)
{ {