108 lines
3.8 KiB
YAML
108 lines
3.8 KiB
YAML
|
|
# 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>;
|
||
|
|
};
|
||
|
|
|