# 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:
  label:
    required: true

  "#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.
