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

description: |
  STM32 Reset and Clock controller node for STM32H7 devices
  This node is in charge of system clock ('SYSCLK') source selection and
  System Clock Generation.

  Configuring STM32 Reset and Clock controller node:

  System clock source should be selected amongst the clock nodes available in "clocks"
  node (typically 'clk_hse, clk_csi', 'pll', ...).
  As part of this node configuration, SYSCLK frequency should also be defined, using
  "clock-frequency" property.
  Last, bus clocks (typically HCLK, PCLK1, PCLK2) should be configured using matching
  prescaler properties.
  Here is an example of correctly configured rcc node:
  &rcc {
           clocks = <&pll>;  /* Set pll as SYSCLK source */
           clock-frequency = <DT_FREQ_M(480)>; /* SYSCLK runs at 480MHz */
           d1cpre = <1>;
           hpre = <1>;
           d1ppre = <1>;
           d2ppre1 = <1>;
           d2ppre2 = <1>;
           d3ppre = <1>;
  }

  Specifying a gated clock:

  To specify a gated clock, a peripheral should define a "clocks" property encoded
  in the following way:
  ... {
           ...
           clocks = <&rcc STM32_CLOCK_BUS_APB2 0x00000020>;
           ...
  }
  After the phandle referring to rcc node, the first index specifies the registers of
  the bus controlling the peripheral and the second index specifies the bit used to
  control the peripheral clock in that bus register.

  Note 1: No additional specifier means gating clock is also the clock source (ie
          'PCLK/PCLK1/PCLK2' depending on the device). There is no need to add a second
          cell to explicitly set it.
  Note 2: Default peripheral clock configuration (ie the one provided in *.dsti files)
          should be the one matching SoC reset state. Confere reference manual to check
          what is the reset value of the kernel clock source for each peripheral.

compatible: "st,stm32h7-rcc"

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

properties:
    reg:
      required: true

    "#clock-cells":
      const: 2

    clock-frequency:
      required: true
      type: int
      description: |
        default frequency in Hz for clock output

    d1cpre:
      type: int
      required: true
      enum:
        - 1
      description: |
          D1 Domain, CPU1 clock prescaler. Sets a HCLK frequency (feeding Cortex-M Systick)
          lower than SYSCLK frequency (actual core frequency).
          Zephyr doesn't make a difference today between these two clocks.
          Changing this prescaler is not allowed until it is made possible to
          use them independently in Zephyr clock subsystem.

    hpre:
      type: int
      required: true
      description: |
          D2 domain, CPU2 core clock and AHB(1/2/3/4) peripheral prescaler
      enum:
        - 1
        - 2
        - 4
        - 8
        - 16
        - 64
        - 128
        - 256
        - 512

    d1ppre:
      type: int
      required: true
      description: |
          D1 domain, APB3 peripheral prescaler
      enum:
        - 1
        - 2
        - 4
        - 8
        - 16

    d2ppre1:
      type: int
      required: true
      description: |
          D2 domain, APB1 peripheral prescaler
      enum:
        - 1
        - 2
        - 4
        - 8
        - 16

    d2ppre2:
      type: int
      required: true
      description: |
          D2 domain, APB2 peripheral prescaler
      enum:
        - 1
        - 2
        - 4
        - 8
        - 16

    d3ppre:
      type: int
      required: true
      description: |
          D3 domain, APB4 peripheral prescaler
      enum:
        - 1
        - 2
        - 4
        - 8
        - 16

clock-cells:
  - bus
  - bits
