# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) %YAML 1.2 --- $id: http://devicetree.org/schemas/clock/mediatek,mt8196-clock.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml# title: MediaTek Functional Clock Controller for MT8196 maintainers: - Guangjie Song - Laura Nao description: | The clock architecture in MediaTek SoCs is structured like below: PLLs --> dividers --> muxes --> clock gate The device nodes provide clock gate control in different IP blocks. properties: compatible: items: - enum: - mediatek,mt8196-imp-iic-wrap-c - mediatek,mt8196-imp-iic-wrap-e - mediatek,mt8196-imp-iic-wrap-n - mediatek,mt8196-imp-iic-wrap-w - mediatek,mt8196-mdpsys0 - mediatek,mt8196-mdpsys1 - mediatek,mt8196-pericfg-ao - mediatek,mt8196-pextp0cfg-ao - mediatek,mt8196-pextp1cfg-ao - mediatek,mt8196-ufscfg-ao - mediatek,mt8196-vencsys - mediatek,mt8196-vencsys-c1 - mediatek,mt8196-vencsys-c2 - mediatek,mt8196-vdecsys - mediatek,mt8196-vdecsys-soc - mediatek,mt8196-vdisp-ao - const: syscon reg: maxItems: 1 '#clock-cells': const: 1 '#reset-cells': const: 1 description: Reset lines for PEXTP0/1 and UFS blocks. 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: - | pericfg_ao: clock-controller@16640000 { compatible = "mediatek,mt8196-pericfg-ao", "syscon"; reg = <0x16640000 0x1000>; mediatek,hardware-voter = <&scp_hwv>; #clock-cells = <1>; }; - | pextp0cfg_ao: clock-controller@169b0000 { compatible = "mediatek,mt8196-pextp0cfg-ao", "syscon"; reg = <0x169b0000 0x1000>; #clock-cells = <1>; #reset-cells = <1>; };