# Copyright (c) 2023 Renesas Electronics Corporation
# SPDX-License-Identifier: Apache-2.0

description: Renesas Smartbond(tm) NOR/PSRAM controller

include: base.yaml

compatible: "renesas,smartbond-nor-psram"

properties:
  reg:
    required: true

  is-ram:
    type: boolean
    description: |
      If present, the memory controller will be configured to drive PSRAM devices.

  dev-size:
    type: int
    required: true
    description: |
      Memory size/capacity in bits.

  dev-type:
    type: int
    required: true
    description: |
      Device type, part of device ID, used to verify the memory device used.

  dev-density:
    type: int
    required: true
    description: |
      Device density, part of device ID, used to verify the memory device used.
      [7:0] should reflect the density value itself and [15:8] should reflect
      the mask that should be applied to the returned device ID value.
      This is because part of its byte value might contain invalid bits.

  dev-id:
    type: int
    required: true
    description: |
      Manufacturer ID, part of device ID, used to verify the memory device used.

  reset-delay-us:
    type: int
    required: true
    description: |
      Time in microseconds (us) the memory device can accept the next command following a SW reset.

  read-cs-idle-min-ns:
    type: int
    required: true
    description: |
      Min. time, in nanoseconds, the #CS line should remain inactive between
      the transmission of two different instructions.

  erase-cs-idle-min-ns:
    type: int
    description: |
      Min. time, in nanoseconds, the #CS line should remain inactive after the execution
      of a write enable, erase, erase suspend or erase resume instruction. This setting
      is not used if is-ram property is present.

  enter-qpi-cmd:
    type: int
    description: |
      Command to enter the QPI mode supported by a memory device
      (should be transmitted in single bus mode).

  exit-qpi-cmd:
    type: int
    description: |
      Command to exit the QPI mode supported by a memory device
      (should be transmitted in quad bus mode).

  enter-qpi-mode:
    type: boolean
    description: |
      If present, the memory device will enter the QPI mode which typically reflects that
      all bytes be sent in quad bus mode. It's a pre-requisite that read and write
      commands, that should be read-cmd and write-cmd respectively, reflect the QPI mode.

  read-cmd:
    type: int
    default: 0x03
    description: |
      Read command for single/burst read accesses in auto mode. Default value is the opcode
      for single mode which is supported by all memory devices.

  write-cmd:
    type: int
    default: 0x02
    description: |
      Write command for single/burst write accesses in auto mode. Default value is the opcode
      for single mode which is supported by all memory devices.

  clock-mode:
    type: string
    enum:
      - "spi-mode0"
      - "spi-mode3"
    default: "spi-mode0"
    description: |
      Clock mode when #CS is idle/inactive

      - Mode0: #CLK is low when #CS is inactive
      - Mode3: #CLK is high when #CS is inactive

      Mode0 is selected by default as it should be supported by all memory devices.

  addr-range:
    type: string
    enum:
      - "addr-range-24bit"
      - "addr-range-32bit"
    default: "addr-range-24bit"
    description: |
      Address size to use in auto mode. In 24-bit mode up to 16MB can be
      accessed whilst in 32-bit mode up to 32MB can be accessed which is
      the max. address space supported by QSPICx. Default value is 24-bit
      mode which is supported by all memory devices.

  clock-div:
    type: int
    description: |
      Clock divider for QSPIC2 controller. The clock path of
      this block is always DIV1 which reflects the current
      system clock.

  tcem-max-us:
    type: int
    description: |
      If a non zero value is applied, then Tcem should be taken into
      consideration by QSPIC2 so that it can split a burst read/write
      access in case the total time exceeds the defined value
      (at the cost of extra cycles required for re-sending the instruction,
      address and dummy bytes, if any). This setting is meaningful only if
      is-ram is present. This value reflects the max. time in microseconds
      the #CS line can be driven low in a write/read burst access
      (required for the auto-refresh mechanism, when supported).

  dummy-bytes-count:
    type: string
    required: true
    enum:
      - "dummy-bytes-count0"
      - "dummy-bytes-count1"
      - "dummy-bytes-count2"
      - "dummy-bytes-count4"
    description: |
      Number of dummy bytes to send for single/burst read access in auto mode.

  extra-byte-enable:
    type: boolean
    description: |
      If present, the extra byte will be sent after the dummy bytes, if any.
      This should be useful if 3 dummy bytes are required. In such a case,
      dummy-bytes-count should be set to 2.

  extra-byte:
    type: int
    description: |
      Extra byte to be sent, if extra-byte-enable is present.

  rx-addr-mode:
    type: string
    enum:
      - "single-spi"
      - "dual-spi"
      - "quad-spi"
    default: "single-spi"
    description: |
      Describes the mode of SPI bus during the address phase for single/burst
      read accesses in auto mode. Default value is single mode which should be
      supported by all memory devices.

  rx-inst-mode:
    type: string
    enum:
      - "single-spi"
      - "dual-spi"
      - "quad-spi"
    default: "single-spi"
    description: |
      Describes the mode of SPI bus during the instruction phase for single/burst
      read accesses in auto mode. Default value is single mode which should be
      supported by all memory devices.

  rx-data-mode:
    type: string
    enum:
      - "single-spi"
      - "dual-spi"
      - "quad-spi"
    default: "single-spi"
    description: |
      Describes the mode of SPI bus during the data phase for single/burst
      read accesses in auto mode. Default value is single mode which should
      be supported by all memory devices.

  rx-dummy-mode:
    type: string
    enum:
      - "single-spi"
      - "dual-spi"
      - "quad-spi"
    default: "single-spi"
    description: |
      Describes the mode of SPI bus during the dummy bytes phase for single/burst
      read accesses in auto mode. The single mode should be supported by all
      memory devices.

  rx-extra-mode:
    type: string
    enum:
      - "single-spi"
      - "dual-spi"
      - "quad-spi"
    description: |
      Describes the mode of SPI bus during the extra byte phase for single/burst
      read accesses in auto mode. Default value is single mode which should be
      supported by all memory devices.

  tx-addr-mode:
    type: string
    enum:
      - "single-spi"
      - "dual-spi"
      - "quad-spi"
    default: "single-spi"
    description: |
      Describes the mode of SPI bus during the address phase for single/burst
      write accesses in auto mode. Default value is single mode which should
      be supported by all memory devices.

  tx-inst-mode:
    type: string
    enum:
      - "single-spi"
      - "dual-spi"
      - "quad-spi"
    default: "single-spi"
    description: |
      Describes the mode of SPI bus during the instruction phase for single/burst
      write accesses in auto mode. The single mode should be supported by all
      memory devices.

  tx-data-mode:
    type: string
    enum:
      - "single-spi"
      - "dual-spi"
      - "quad-spi"
    default: "single-spi"
    description: |
      Describes the mode of SPI bus during the data phase for single/burst
      write accesses in auto mode. Default value is single mode which should
      be supported by all memory devices.
