1*dd240e95SLaura Nao# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) 2*dd240e95SLaura Nao%YAML 1.2 3*dd240e95SLaura Nao--- 4*dd240e95SLaura Nao$id: http://devicetree.org/schemas/clock/mediatek,mt8196-sys-clock.yaml# 5*dd240e95SLaura Nao$schema: http://devicetree.org/meta-schemas/core.yaml# 6*dd240e95SLaura Nao 7*dd240e95SLaura Naotitle: MediaTek System Clock Controller for MT8196 8*dd240e95SLaura Nao 9*dd240e95SLaura Naomaintainers: 10*dd240e95SLaura Nao - Guangjie Song <guangjie.song@mediatek.com> 11*dd240e95SLaura Nao - Laura Nao <laura.nao@collabora.com> 12*dd240e95SLaura Nao 13*dd240e95SLaura Naodescription: | 14*dd240e95SLaura Nao The clock architecture in MediaTek SoCs is structured like below: 15*dd240e95SLaura Nao PLLs --> 16*dd240e95SLaura Nao dividers --> 17*dd240e95SLaura Nao muxes 18*dd240e95SLaura Nao --> 19*dd240e95SLaura Nao clock gate 20*dd240e95SLaura Nao 21*dd240e95SLaura Nao The apmixedsys, apmixedsys_gp2, vlpckgen, armpll, ccipll, mfgpll and ptppll 22*dd240e95SLaura Nao provide most of the PLLs which are generated from the SoC's 26MHZ crystal oscillator. 23*dd240e95SLaura Nao The topckgen, topckgen_gp2 and vlpckgen provide dividers and muxes which 24*dd240e95SLaura Nao provide the clock source to other IP blocks. 25*dd240e95SLaura Nao 26*dd240e95SLaura Naoproperties: 27*dd240e95SLaura Nao compatible: 28*dd240e95SLaura Nao items: 29*dd240e95SLaura Nao - enum: 30*dd240e95SLaura Nao - mediatek,mt8196-apmixedsys 31*dd240e95SLaura Nao - mediatek,mt8196-armpll-b-pll-ctrl 32*dd240e95SLaura Nao - mediatek,mt8196-armpll-bl-pll-ctrl 33*dd240e95SLaura Nao - mediatek,mt8196-armpll-ll-pll-ctrl 34*dd240e95SLaura Nao - mediatek,mt8196-apmixedsys-gp2 35*dd240e95SLaura Nao - mediatek,mt8196-ccipll-pll-ctrl 36*dd240e95SLaura Nao - mediatek,mt8196-mfgpll-pll-ctrl 37*dd240e95SLaura Nao - mediatek,mt8196-mfgpll-sc0-pll-ctrl 38*dd240e95SLaura Nao - mediatek,mt8196-mfgpll-sc1-pll-ctrl 39*dd240e95SLaura Nao - mediatek,mt8196-ptppll-pll-ctrl 40*dd240e95SLaura Nao - mediatek,mt8196-topckgen 41*dd240e95SLaura Nao - mediatek,mt8196-topckgen-gp2 42*dd240e95SLaura Nao - mediatek,mt8196-vlpckgen 43*dd240e95SLaura Nao - const: syscon 44*dd240e95SLaura Nao 45*dd240e95SLaura Nao reg: 46*dd240e95SLaura Nao maxItems: 1 47*dd240e95SLaura Nao 48*dd240e95SLaura Nao '#clock-cells': 49*dd240e95SLaura Nao const: 1 50*dd240e95SLaura Nao 51*dd240e95SLaura Nao mediatek,hardware-voter: 52*dd240e95SLaura Nao $ref: /schemas/types.yaml#/definitions/phandle 53*dd240e95SLaura Nao description: | 54*dd240e95SLaura Nao Phandle to the "Hardware Voter" (HWV), as named in the vendor 55*dd240e95SLaura Nao documentation for MT8196/MT6991. 56*dd240e95SLaura Nao 57*dd240e95SLaura Nao The HWV is a SoC-internal fixed-function MCU used to collect votes from 58*dd240e95SLaura Nao both the Application Processor and other remote processors within the SoC. 59*dd240e95SLaura Nao It is intended to transparently enable or disable hardware resources (such 60*dd240e95SLaura Nao as power domains or clocks) based on internal vote aggregation handled by 61*dd240e95SLaura Nao the MCU's internal state machine. 62*dd240e95SLaura Nao 63*dd240e95SLaura Nao However, in practice, this design is incomplete. While the HWV performs 64*dd240e95SLaura Nao some internal vote aggregation,software is still required to 65*dd240e95SLaura Nao - Manually enable power supplies externally, if present and if required 66*dd240e95SLaura Nao - Manually enable parent clocks via direct MMIO writes to clock controllers 67*dd240e95SLaura Nao - Enable the FENC after the clock has been ungated via direct MMIO 68*dd240e95SLaura Nao writes to clock controllers 69*dd240e95SLaura Nao 70*dd240e95SLaura Nao As such, the HWV behaves more like a hardware-managed clock reference 71*dd240e95SLaura Nao counter than a true voter. Furthermore, it is not a separate 72*dd240e95SLaura Nao controller. It merely serves as an alternative interface to the same 73*dd240e95SLaura Nao underlying clock or power controller. Actual control still requires 74*dd240e95SLaura Nao direct access to the controller's own MMIO register space, in 75*dd240e95SLaura Nao addition to writing to the HWV's MMIO region. 76*dd240e95SLaura Nao 77*dd240e95SLaura Nao For this reason, a custom phandle is used here - drivers need to directly 78*dd240e95SLaura Nao access the HWV MMIO region in a syscon-like fashion, due to how the 79*dd240e95SLaura Nao hardware is wired. This differs from true hardware voting systems, which 80*dd240e95SLaura Nao typically do not require custom phandles and rely instead on generic APIs 81*dd240e95SLaura Nao (clocks, power domains, interconnects). 82*dd240e95SLaura Nao 83*dd240e95SLaura Nao The name "hardware-voter" is retained to match vendor documentation, but 84*dd240e95SLaura Nao this should not be reused or misunderstood as a proper voting mechanism. 85*dd240e95SLaura Nao 86*dd240e95SLaura Naorequired: 87*dd240e95SLaura Nao - compatible 88*dd240e95SLaura Nao - reg 89*dd240e95SLaura Nao - '#clock-cells' 90*dd240e95SLaura Nao 91*dd240e95SLaura NaoadditionalProperties: false 92*dd240e95SLaura Nao 93*dd240e95SLaura Naoexamples: 94*dd240e95SLaura Nao - | 95*dd240e95SLaura Nao apmixedsys_clk: syscon@10000800 { 96*dd240e95SLaura Nao compatible = "mediatek,mt8196-apmixedsys", "syscon"; 97*dd240e95SLaura Nao reg = <0x10000800 0x1000>; 98*dd240e95SLaura Nao #clock-cells = <1>; 99*dd240e95SLaura Nao }; 100*dd240e95SLaura Nao - | 101*dd240e95SLaura Nao topckgen: syscon@10000000 { 102*dd240e95SLaura Nao compatible = "mediatek,mt8196-topckgen", "syscon"; 103*dd240e95SLaura Nao reg = <0x10000000 0x800>; 104*dd240e95SLaura Nao mediatek,hardware-voter = <&scp_hwv>; 105*dd240e95SLaura Nao #clock-cells = <1>; 106*dd240e95SLaura Nao }; 107*dd240e95SLaura Nao 108