| # 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 <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 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>; | |
| }; |