# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/mtd/partitions/fixed-partitions.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Fixed partitions

description: |
  This binding can be used on platforms which have strong conventions about
  which portions of a flash are used for what purposes, but which don't use an
  on-flash partition table such as RedBoot.

  The partition table should be a node named "partitions". Partitions are then
  defined as subnodes.

maintainers:
  - Rafał Miłecki <rafal@milecki.pl>

properties:
  compatible:
    oneOf:
      - const: fixed-partitions
      - items:
          - const: sercomm,sc-partitions
          - const: fixed-partitions

  "#address-cells": true

  "#size-cells": true

patternProperties:
  "@[0-9a-f]+$":
    allOf:
      - $ref: "partition.yaml#"
      - if:
          properties:
            compatible:
              contains:
                const: sercomm,sc-partitions
        then:
          properties:
            sercomm,scpart-id:
              description: Partition id in Sercomm partition map. Mtd
                parser uses this id to find a record in the partition map
                containing offset and size of the current partition. The
                values from partition map overrides partition offset and
                size defined in reg property of the dts. Frequently these
                values are the same, but may differ if device has bad
                eraseblocks on a flash.
              $ref: /schemas/types.yaml#/definitions/uint32

required:
  - "#address-cells"
  - "#size-cells"

additionalProperties: true

examples:
  - |
    partitions {
        compatible = "fixed-partitions";
        #address-cells = <1>;
        #size-cells = <1>;

        partition@0 {
            label = "u-boot";
            reg = <0x0000000 0x100000>;
            read-only;
        };

        uimage@100000 {
            reg = <0x0100000 0x200000>;
        };
    };

  - |
    partitions {
        compatible = "fixed-partitions";
        #address-cells = <1>;
        #size-cells = <2>;

        /* a 4 GiB partition */
        partition@0 {
            label = "filesystem";
            reg = <0x00000000 0x1 0x00000000>;
        };
    };

  - |
    partitions {
        compatible = "fixed-partitions";
        #address-cells = <2>;
        #size-cells = <2>;

        /* an 8 GiB partition */
        partition@0 {
            label = "filesystem #1";
            reg = <0x0 0x00000000 0x2 0x00000000>;
        };

        /* a 4 GiB partition */
        partition@200000000 {
            label = "filesystem #2";
            reg = <0x2 0x00000000 0x1 0x00000000>;
        };
    };

  - |
    partitions {
        compatible = "fixed-partitions";
        #address-cells = <1>;
        #size-cells = <1>;

        partition@0 {
            label = "bootloader";
            reg = <0x000000 0x100000>;
            read-only;
        };

        firmware@100000 {
            compatible = "brcm,trx";
            label = "firmware";
            reg = <0x100000 0xe00000>;
        };

        calibration@f00000 {
            compatible = "fixed-partitions";
            label = "calibration";
            reg = <0xf00000 0x100000>;
            ranges = <0 0xf00000 0x100000>;
            #address-cells = <1>;
            #size-cells = <1>;

            partition@0 {
                label = "wifi0";
                reg = <0x000000 0x080000>;
            };

            partition@80000 {
                label = "wifi1";
                reg = <0x080000 0x080000>;
            };
        };
    };

  - |
    partitions {
        compatible = "sercomm,sc-partitions", "fixed-partitions";
        #address-cells = <1>;
        #size-cells = <1>;

        partition@0 {
            label = "u-boot";
            reg = <0x0 0x100000>;
            sercomm,scpart-id = <0>;
            read-only;
        };

        partition@100000 {
            label = "dynamic partition map";
            reg = <0x100000 0x100000>;
            sercomm,scpart-id = <1>;
        };

        partition@200000 {
            label = "Factory";
            reg = <0x200000 0x100000>;
            sercomm,scpart-id = <2>;
            read-only;
        };
    };
