# Copyright (c) 2022 Meta
# SPDX-License-Identifier: Apache-2.0

description: Lattice iCE40 FPGA

compatible: "lattice,ice40-fpga"

include: spi-device.yaml

properties:
    load-mode:
      type: int
      required: true
      description: |
        Configure the method used to load the bitstream.
        The bitstream may be loaded via 2 separate methods:
        0 := load the FPGA via SPI transfer
        1 := load the FPGA via bit-banged GPIO
        Option 0 may be suitable for some high-end microcontrollers.
        Option 1 is suitable for low-end microcontrollers. This option
        requires clk-gpios, pico-gpios, gpios-set-reg, and gpios-clear-reg
        to be defined.
        Example usage:
        load-mode = <0>;
    cdone-gpios:
      type: phandle-array
      required: true
      description: |
        Configuration Done output from iCE40.
        Example usage:
        cdone-gpios = <&gpio0 0 0>;
    creset-gpios:
      type: phandle-array
      required: true
      description: |
        Configuration Reset input on iCE40.
        Example usage:
        creset-gpios = <&gpio0 1 GPIO_PUSH_PULL);
    clk-gpios:
      type: phandle-array
      description: |
        SPI Clock GPIO input on iCE40.
        Example usage:
        clk-gpios = <&gpio0 5 GPIO_PUSH_PULL>;
    pico-gpios:
      type: phandle-array
      description: |
        Peripheral-In Controller-Out GPIO input on iCE40.
        Example usage:
        pico-gpios = <&gpio0 7 GPIO_PUSH_PULL>;
    gpios-set-reg:
      type: int
      description: |
        Register address for setting a GPIO.
        Example usage:
        gpios-set-reg = <0x60004008>;
    gpios-clear-reg:
      type: int
      description: |
        Register address for clearing a GPIO.
        Example usage:
        gpios-clear-reg = <0x6000400c>;
    mhz-delay-count:
      type: int
      description: |
        in order to create a 1 MHz square wave in the following
        process.
        while(true) {
          *gpios_set_reg |= BIT(n);
          for(int i = mhz_delay_count; i > 0; --i);
          *gpios_clear_reg |= BIT(n);
          for(int i = mhz_delay_count; i > 0; --i);
        }
        Example usage / default:
        mhz-delay-count = <0>;
    creset-delay-ns:
      type: int
      description: |
        Delay (in nanoseconds) between asserting CRESET_B and releasing CRESET_B.
        Example usage / default:
        creset-delay-ns = <200>;
    config-delay-us:
      type: int
      description: |
        Delay (in microseconds) after releasing CRESET_B to clear internal configuration memory.
        Example usage / default:
        config-delay-us = <300>;
    leading-clocks:
      type: int
      description: |
        Prior to sending the bitstream, issue this number of leading clocks with SPI_CS pulled high.
        Example usage / default:
        leading-clocks = <8>;
    trailing-clocks:
      type: int
      description: |
        After sending the bitstream, issue this number of trailing clocks with SPI_CS pulled high.
        Example usage / default:
        trailing-clocks = <49>;
