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

description: |
    STM32 OSPI Flash controller supporting the JEDEC CFI interface

    Representation of a serial flash on a octospi bus:

        mx25lm51245: ospi-nor-flash@0 {
                compatible = "st,stm32-ospi-nor";
                reg = <0>;
                data-mode = <OSPI_OPI_MODE>; /* access on 8 data lines */
                data-rate = <OSPI_DTR_TRANSFER>; /* access in DTR */
                ospi-max-frequency = <DT_FREQ_M(50)>;
                size = <DT_SIZE_M(64*8)>; /* 512 Mbit */
                status = "okay";
        };

compatible: "st,stm32-ospi-nor"

include: ["flash-controller.yaml", "jedec,jesd216.yaml"]

on-bus: ospi

properties:
    reg:
      required: true
    ospi-max-frequency:
      type: int
      required: true
      description: Maximum clock frequency of device's OSPI interface in Hz
    size:
      required: true
      description: Flash Memory size in bits
    reset-gpios:
      type: phandle-array
      description: RESETn pin
    spi-bus-width:
      type: int
      required: true
      description: |
       The width of (Octo)SPI bus to which flash memory is connected.

       Possible values are :
        - OSPI_SPI_MODE  <1> = SPI mode on 1 data line
        - OSPI_DUAL_MODE <2> = Dual mode on 2 data lines
        - OSPI_QUAD_MODE <4> = Quad mode on 4 data lines
        - OSPI_OPI_MODE  <8> = Octo mode on 8 data lines
      enum:
        - 1
        - 2
        - 4
        - 8
    data-rate:
      type: int
      required: true
      description: |
       The SPI data Rate is STR or DTR

       Possible values are :
        - OSPI_STR_TRANSFER <1> = Single Rate Transfer
        - OSPI_DTR_TRANSFER <2> = Dual Rate Transfer (only with OSPI_OPI_MODE)
      enum:
        - 1
        - 2
    writeoc:
      type: string
      enum:
        - "PP"            # Page program, PP (0x02) up to 256 bytes
        - "PP_1_1_2"      # Dual page program, PP 1-1-2 (0xA2)
        - "PP_1_1_4"      # Quad data line SPI, PP 1-1-4 (0x32)
        - "PP_1_4_4"      # Quad data line SPI, PP 1-4-4 (0x38)
      description: |
        The value encodes number of I/O lines used for the opcode,
        address, and data.

        There is no info about quad page program opcodes in the SFDP
        tables, hence it has been assumed that NOR flash memory
        supporting 1-4-4 mode also would support fast page programming.

        Intended for modes other than OSPI_OPI_MODE.

        If absent, then program page opcode is determined by the
        `spi-bus-width`:

        * OSPI_SPI_MODE -> PP 1-1-1 (0x02)
        * OSPI_DUAL_MODE -> PP 1-1-2 (0xA2)
        * OSPI_QUAD_MODE -> PP 1-4-4 (0x38)
    four-byte-opcodes:
      type: boolean
      description: |
        Some NOR-Flash ICs use different opcodes when operating in
        4 byte addressing mode.

        When enabled, then 3 byte opcodes will be converted to
        4 byte opcodes.

        * PP 1-1-1 (0x02) -> PP 1-1-1 4B (0x12)
        * PP 1-1-4 (0x32) -> PP 1-1-4 4B (0x34)
        * PP 1-4-4 (0x38) -> PP 1-4-4 4B (0x3E)

        * READ 1-1-1 (0x03) -> READ 1-1-1 4B (0x13)
        * READ FAST 1-1-1 (0x0B) -> READ FAST 1-1-1 4B (0x0C)
        * DREAD 1-1-2 (0x3B) -> DREAD 1-1-2 4B (0x3C)
        * 2READ 1-2-2 (0xBB) -> 2READ 1-2-2 4B (0xBC)
        * QREAD 1-1-4 (0x6B) -> QREAD 1-1-4 4B (0x6C)
        * 4READ 1-4-4 (0xEB) -> 4READ 1-4-4 4B (0xEC)
