# Copyright (c) 2020, Teslabs Engineering S.L.
# SPDX-License-Identifier: Apache-2.0

description: |
  STM32 Flexible Memory Controller (SDRAM controller).

  The FMC SDRAM controller can be used to interface with external SDRAM
  memories. Up to 2 SDRAM banks are supported with independent configuration. It
  is worth to note that while settings are independent, some are shared or are
  required to be set according to the most constraining device. Refer to the
  properties description or the datasheet for more details.

  The FMC SDRAM controller is defined below the FMC node and SDRAM banks are
  defined as child nodes of the FMC SDRAM node. You can either have bank 1 (@0),
  bank 2 (@1) or both. You can enable the FMC SDRAM controller in your board
  DeviceTree file like this:

  &fmc {
      status = "okay";
      pinctrl-0 = <&fmc_nbl0_pe0 &fmc_nbl1_pe1 &fmc_nbl2_pi4...>;

      sdram {
          status = "okay";

          power-up-delay = <100>;
          num-auto-refresh = <8>;
          mode-register = <0x220>;
          refresh-rate = <603>;

          bank@0 {
              reg = <0>;

              st,sdram-control = <STM32_FMC_SDRAM_NC_9
                                  STM32_FMC_SDRAM_NR_12
                                  STM32_FMC_SDRAM_MWID_32
                                  STM32_FMC_SDRAM_NB_4
                                  STM32_FMC_SDRAM_CAS_2
                                  STM32_FMC_SDRAM_SDCLK_PERIOD_2
                                  STM32_FMC_SDRAM_RBURST_ENABLE
                                  STM32_FMC_SDRAM_RPIPE_0>;
              st,sdram-timing = <2 6 4 6 2 2 2>;
          };

          bank@1 {
              reg = <1>;
              ...
          };
      };
  };

  Note that you will find definitions for the st,sdram-control field at
  dt-bindings/memory-controller/stm32-fmc-sdram.h. This file is already included
  in the SoC DeviceTree files.

  Finally, in order to make the memory available you will need to define new
  memory device/s in DeviceTree:

  sdram1: sdram@c0000000 {
      compatible = "zephyr,memory-region", "mmio-sram";
      device_type = "memory";
      reg = <0xc000000 DT_SIZE_M(X)>;
      zephyr,memory-region = "SDRAM1";
  };

  sdram2: sdram@d0000000 {
      compatible = "zephyr,memory-region", "mmio-sram";
      device_type = "memory";
      reg = <0xd000000 DT_SIZE_M(X)>;
      zephyr,memory-region = "SDRAM2";
  };

  It is important to use sdram1 and sdram2 node labels for bank 1 and bank 2
  respectively. Memory addresses are 0xc0000000 and 0xd0000000 for bank 1 and
  bank 2 respectively.

compatible: "st,stm32-fmc-sdram"

include: base.yaml

properties:
  "#address-cells":
    required: true
    const: 1

  "#size-cells":
    required: true
    const: 0

  power-up-delay:
    type: int
    default: 100
    description: Power-up delay in microseconds.

  num-auto-refresh:
    type: int
    default: 8
    description: Number of auto-refresh commands issued.

  mode-register:
    type: int
    required: true
    description:
      A 14-bit field that defines the SDRAM Mode Register content. The mode
      register bits are also used to program the extended mode register for
      mobile SDRAM.

  refresh-rate:
    type: int
    required: true
    description:
      A 13-bit field defines the refresh rate of the SDRAM device. It is
      expressed in number of memory clock cycles. It must be set at least to
      41 SDRAM clock cycles.

child-binding:
  description: SDRAM bank.

  properties:
    reg:
      type: int
      required: true

    st,sdram-control:
      type: array
      required: true
      description: |
        SDRAM control configuration. Expected fields, in order, are,

        - NC: Number of bits of a column address.
        - NR: Number of bits of a row address.
        - MWID: Memory device width.
        - NB: Number of internal banks.
        - CAS: SDRAM CAS latency in number of memory clock cycles.
        - SDCLK: SDRAM clock period. If two SDRAM devices are used both should
          have the same value.
        - RBURST: Enable burst read mode. If two SDRAM devices are used both
          should have the same value.
        - RPIPE: Delay, in fmc_ker_ck clock cycles, for reading data after CAS
          latency. If two SDRAM devices are used both should have the same
          value.

    st,sdram-timing:
      type: array
      required: true
      description: |
        SDRAM timing configuration. Expected fields, in order, are,

        - TMRD: Delay between a Load Mode Register command and an Active or
          Refresh command in number of memory clock cycles.
        - TXSR: Delay from releasing the Self-refresh command to issuing the
          Activate command in number of memory clock cycles. If two SDRAM
          devices are used, the FMC_SDTR1 and FMC_SDTR2 must be programmed with
          the same TXSR timing corresponding to the slowest SDRAM device
        - TRAS: Minimum Self-refresh period in number of memory clock cycles.
        - TRC: Delay between the Refresh command and the Activate command, as
          well as the delay between two consecutive Refresh commands. It is
          expressed in number of memory clock cycles. If two SDRAM devices are
          used, the TRC must be programmed with the timings of the slowest
          device in both banks.
        - TWP: Delay between a Write and a Precharge command in number of memory
          clock cycles
        - TRP: Delay between a Precharge command and another command in number
          of memory clock cycles. If two SDRAM devices are used, the TRP must be
          programmed with the timing of the slowest device in both banks.
        - TRCD: Delay between the Activate command and a Read/Write command in
          number of memory clock cycles.
