| # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) | |
| %YAML 1.2 | |
| --- | |
| $id: http://devicetree.org/schemas/clock/mediatek,mt8196-sys-clock.yaml# | |
| $schema: http://devicetree.org/meta-schemas/core.yaml# | |
| title: MediaTek System Clock Controller for MT8196 | |
| maintainers: | |
| - Guangjie Song <guangjie.song@mediatek.com> | |
| - Laura Nao <laura.nao@collabora.com> | |
| description: | | |
| The clock architecture in MediaTek SoCs is structured like below: | |
| PLLs --> | |
| dividers --> | |
| muxes | |
| --> | |
| clock gate | |
| The apmixedsys, apmixedsys_gp2, vlpckgen, armpll, ccipll, mfgpll and ptppll | |
| provide most of the PLLs which are generated from the SoC's 26MHZ crystal oscillator. | |
| The topckgen, topckgen_gp2 and vlpckgen provide dividers and muxes which | |
| provide the clock source to other IP blocks. | |
| properties: | |
| compatible: | |
| items: | |
| - enum: | |
| - mediatek,mt8196-apmixedsys | |
| - mediatek,mt8196-armpll-b-pll-ctrl | |
| - mediatek,mt8196-armpll-bl-pll-ctrl | |
| - mediatek,mt8196-armpll-ll-pll-ctrl | |
| - mediatek,mt8196-apmixedsys-gp2 | |
| - mediatek,mt8196-ccipll-pll-ctrl | |
| - mediatek,mt8196-mfgpll-pll-ctrl | |
| - mediatek,mt8196-mfgpll-sc0-pll-ctrl | |
| - mediatek,mt8196-mfgpll-sc1-pll-ctrl | |
| - mediatek,mt8196-ptppll-pll-ctrl | |
| - mediatek,mt8196-topckgen | |
| - mediatek,mt8196-topckgen-gp2 | |
| - mediatek,mt8196-vlpckgen | |
| - const: syscon | |
| reg: | |
| maxItems: 1 | |
| '#clock-cells': | |
| const: 1 | |
| mediatek,hardware-voter: | |
| $ref: /schemas/types.yaml#/definitions/phandle | |
| description: | | |
| Phandle to the "Hardware Voter" (HWV), as named in the vendor | |
| documentation for MT8196/MT6991. | |
| The HWV is a SoC-internal fixed-function MCU used to collect votes from | |
| both the Application Processor and other remote processors within the SoC. | |
| It is intended to transparently enable or disable hardware resources (such | |
| as power domains or clocks) based on internal vote aggregation handled by | |
| the MCU's internal state machine. | |
| However, in practice, this design is incomplete. While the HWV performs | |
| some internal vote aggregation,software is still required to | |
| - Manually enable power supplies externally, if present and if required | |
| - Manually enable parent clocks via direct MMIO writes to clock controllers | |
| - Enable the FENC after the clock has been ungated via direct MMIO | |
| writes to clock controllers | |
| As such, the HWV behaves more like a hardware-managed clock reference | |
| counter than a true voter. Furthermore, it is not a separate | |
| controller. It merely serves as an alternative interface to the same | |
| underlying clock or power controller. Actual control still requires | |
| direct access to the controller's own MMIO register space, in | |
| addition to writing to the HWV's MMIO region. | |
| For this reason, a custom phandle is used here - drivers need to directly | |
| access the HWV MMIO region in a syscon-like fashion, due to how the | |
| hardware is wired. This differs from true hardware voting systems, which | |
| typically do not require custom phandles and rely instead on generic APIs | |
| (clocks, power domains, interconnects). | |
| The name "hardware-voter" is retained to match vendor documentation, but | |
| this should not be reused or misunderstood as a proper voting mechanism. | |
| required: | |
| - compatible | |
| - reg | |
| - '#clock-cells' | |
| additionalProperties: false | |
| examples: | |
| - | | |
| apmixedsys_clk: syscon@10000800 { | |
| compatible = "mediatek,mt8196-apmixedsys", "syscon"; | |
| reg = <0x10000800 0x1000>; | |
| #clock-cells = <1>; | |
| }; | |
| - | | |
| topckgen: syscon@10000000 { | |
| compatible = "mediatek,mt8196-topckgen", "syscon"; | |
| reg = <0x10000000 0x800>; | |
| mediatek,hardware-voter = <&scp_hwv>; | |
| #clock-cells = <1>; | |
| }; | |