# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/nvmem/layouts/onie,tlv-layout.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: NVMEM layout of the ONIE tlv table

maintainers:
  - Miquel Raynal <miquel.raynal@bootlin.com>

description:
  Modern networking hardware implementing the Open Compute Project ONIE
  infrastructure shall provide a non-volatile memory with a table whose the
  content is well specified and gives many information about the manufacturer
  (name, country of manufacture, etc) as well as device caracteristics (serial
  number, hardware version, mac addresses, etc). The underlying device type
  (flash, EEPROM,...) is not specified. The exact location of each value is also
  dynamic and should be discovered at run time because it depends on the
  parameters the manufacturer decided to embed.

select: false

properties:
  compatible:
    const: onie,tlv-layout

  product-name:
    type: object
    additionalProperties: false

  part-number:
    type: object
    additionalProperties: false

  serial-number:
    type: object
    additionalProperties: false

  mac-address:
    type: object
    description:
      Base MAC address for all on-module network interfaces. The first
      argument of the phandle will be treated as an offset.

    properties:
      "#nvmem-cell-cells":
        const: 1

    additionalProperties: false

  manufacture-date:
    type: object
    additionalProperties: false

  device-version:
    type: object
    additionalProperties: false

  label-revision:
    type: object
    additionalProperties: false

  platform-name:
    type: object
    additionalProperties: false

  onie-version:
    type: object
    additionalProperties: false

  num-macs:
    type: object
    additionalProperties: false

  manufacturer:
    type: object
    additionalProperties: false

  country-code:
    type: object
    additionalProperties: false

  vendor:
    type: object
    additionalProperties: false

  diag-version:
    type: object
    additionalProperties: false

  service-tag:
    type: object
    additionalProperties: false

  vendor-extension:
    type: object
    additionalProperties: false

required:
  - compatible

additionalProperties: false

examples:
  - |
    spi {
        #address-cells = <1>;
        #size-cells = <0>;

        eeprom@56 {
            compatible = "atmel,24c64";
            read-only;
            reg = <0x56>;

            nvmem-layout {
                compatible = "onie,tlv-layout";

                serial-number {
                };
            };
        };
    };

  - |
    spi {
        #address-cells = <1>;
        #size-cells = <0>;

        flash@0 {
            compatible = "m25p80", "jedec,spi-nor";
            reg = <0>;

            otp {
                compatible = "user-otp";

                nvmem-layout {
                    compatible = "onie,tlv-layout";

                    mac-address {
                        #nvmem-cell-cells = <1>;
                    };
                };
            };
        };
    };
...