Documentation / devicetree / bindings / mtd / denali,nand.yaml


Based on kernel version 6.11. Page generated on 2024-09-24 08:21 EST.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/mtd/denali,nand.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Denali NAND controller

maintainers:
  - Masahiro Yamada <yamada.masahiro@socionext.com>

properties:
  compatible:
    enum:
      - altr,socfpga-denali-nand
      - socionext,uniphier-denali-nand-v5a
      - socionext,uniphier-denali-nand-v5b

  reg-names:
    description: |
      There are two register regions:
        nand_data:  host data/command interface
        denali_reg: register interface
    items:
      - const: nand_data
      - const: denali_reg

  reg:
    minItems: 2
    maxItems: 2

  interrupts:
    maxItems: 1

  clock-names:
    description: |
      There are three clocks:
        nand:   controller core clock
        nand_x: bus interface clock
        ecc:    ECC circuit clock
    items:
      - const: nand
      - const: nand_x
      - const: ecc

  clocks:
    minItems: 3
    maxItems: 3

  reset-names:
    description: |
      There are two optional resets:
        nand: controller core reset
        reg:  register reset
    oneOf:
      - items:
          - const: nand
          - const: reg
      - const: nand
      - const: reg

  resets:
    minItems: 1
    maxItems: 2

patternProperties:
  "^nand@[a-f0-9]$":
    type: object
    $ref: raw-nand-chip.yaml
    unevaluatedProperties: false

allOf:
  - $ref: nand-controller.yaml

  - if:
      properties:
        compatible:
          contains:
            const: altr,socfpga-denali-nand
    then:
      patternProperties:
        "^nand@[a-f0-9]$":
          properties:
            nand-ecc-strength:
              enum:
                - 8
                - 15
            nand-ecc-step-size:
              enum:
                - 512

  - if:
      properties:
        compatible:
          contains:
            const: socionext,uniphier-denali-nand-v5a
    then:
      patternProperties:
        "^nand@[a-f0-9]$":
          properties:
            nand-ecc-strength:
              enum:
                - 8
                - 16
                - 24
            nand-ecc-step-size:
              enum:
                - 1024

  - if:
      properties:
        compatible:
          contains:
            const: socionext,uniphier-denali-nand-v5b
    then:
      patternProperties:
        "^nand@[a-f0-9]$":
          properties:
            nand-ecc-strength:
              enum:
                - 8
                - 16
            nand-ecc-step-size:
              enum:
                - 1024

required:
  - compatible
  - reg
  - interrupts
  - clock-names
  - clocks

unevaluatedProperties: false

examples:
  - |
    nand-controller@ff900000 {
        compatible = "altr,socfpga-denali-nand";
        reg-names = "nand_data", "denali_reg";
        reg = <0xff900000 0x20>, <0xffb80000 0x1000>;
        interrupts = <0 144 4>;
        clock-names = "nand", "nand_x", "ecc";
        clocks = <&nand_clk>, <&nand_x_clk>, <&nand_ecc_clk>;
        reset-names = "nand", "reg";
        resets = <&nand_rst>, <&nand_reg_rst>;
        #address-cells = <1>;
        #size-cells = <0>;
 
        nand@0 {
            reg = <0>;
        };
    };