# Copyright (c) 2018 Peter Bigot Consulting, LLC
# Copyright (c) 2019-2020 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

# Common properties used by nodes describing serial flash devices that
# are compatible with the JESD216 Serial Flash Discoverable Parameters
# specification.
#
# This allows encoding the entire BFP block in devicetree to avoid
# reading at runtime, while still allowing the driver to pull out extra
# data of interest, such as erase sizes.
#
# Alternatively the BFP block can be absent, but critical fields like
# size can be provided directly along with the JEDEC ID of the expected
# device to verify its presence at runtime.
#
# Only properties supported by parameter tables documented in the
# JESD216 standards should be listed in this binding include file.

properties:
  jedec-id:
    type: uint8-array
    required: false
    description: JEDEC ID as manufacturer ID, memory type, memory density

  size:
    type: int
    required: false
    description: flash capacity in bits

  sfdp-bfp:
    type: uint8-array
    required: false
    description: |
      Contains the 32-bit words in little-endian byte order from the
      JESD216 Serial Flash Discoverable Parameters Basic Flash
      Parameters table.  This provides flash-specific configuration
      information in cases were runtime retrieval of SFDP data
      is not desired.

  quad-enable-requirements:
    type: string
    enum:
      - "NONE"
      - "S2B1v1"
      - "S1B6"
      - "S2B7"
      - "S2B1v4"
      - "S2B1v5"
      - "S2B1v6"
    required: false
    description: |
      Quad Enable Requirements value from JESD216 BFP DW15.

      Use NONE if the device detects 1-1-4 and 1-4-4 modes by the
      instruction.  Use S1B6 if QE is bit 6 of the first status register
      byte, and can be configured by reading then writing one byte with
      RDSR and WRSR.  For other fields see the specification.

  enter-4byte-addr:
    type: int
    required: false
    description: |
      Enter 4-Byte Addressing value from JESD216 BFP DW16

      This property is ignored if the device is configured to use SFDP data
      from the sfdp-bfp property (CONFIG_SPI_NOR_SFDP_DEVICETREE) or to read
      SFDP properties at runtime (CONFIG_SPI_NOR_SFDP_RUNTIME).

      For CONFIG_SPI_NOR_SFDP_MINIMAL this is the 8-bit value from bits 31:24
      of DW16 identifying ways a device can be placed into 4-byte addressing
      mode.  If provided as a non-zero value the driver assumes that 4-byte
      addressing is require to access the full address range, and
      automatically puts the device into 4-byte address mode when the device
      is initialized.
