# Copyright (c) 2021, Linaro ltd
# SPDX-License-Identifier: Apache-2.0

description: |
  PLL node binding for STM32H7 devices

  It can be used to describe 3 different PLLs: PLL1 (Main PLL), PLL2 and PLL3.
  Only PLL1 and PLL3 are supported for now.

  These PLLs could take one of clk_hse, clk_hsi or clk_csi as input clock, with
  an input frequency from 1 to 16 MHz. PLLM factor is used to set the input
  clock in this acceptable range.

  Each PLL can have up to 3 output clocks and for each output clock, the
  frequency can be computed with the following formulae:

    f(PLL_Px) = f(VCOx clock) / PLLPx   -> pllx_p_ck ((pll1_p_ck : sys_ck))
    f(PLL_Qx) = f(VCOx clock) / PLLQx   -> pllx_q_ck
    f(PLL_Rx) = f(VCOx clock) / PLLRx   -> pllx_r_ck

      with f(VCOx clock) = f(REFx_CK) × (PLLNx / PLLMx)

  The PLL output frequency must not exceed 80 MHz.

compatible: "st,stm32h7-pll-clock"

include: [clock-controller.yaml, base.yaml]

properties:
    "#clock-cells":
      const: 0

    clocks:
      required: true

    div-m:
      type: int
      required: true
      description: |
          Division factor for PLLx
          input clock
          Valid range: 0 - 63

    mul-n:
      type: int
      required: true
      description: |
          Main PLL multiplication factor for VCOx
          Valid range: 4 - 512

    div-p:
      type: int
      required: false
      description: |
          PLL division factor for pllx_p_ck
          Valid range: 1 - 128

    div-q:
      type: int
      required: false
      description: |
          PLL division factor for pllx_q_ck
          Valid range: 1 - 128

    div-r:
      type: int
      required: false
      description: |
          PLL division factor for pllx_r_ck
          Valid range: 1 - 128
