162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci%YAML 1.2
362306a36Sopenharmony_ci---
462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/ata/ahci-platform.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: AHCI SATA Controller
862306a36Sopenharmony_ci
962306a36Sopenharmony_cidescription: |
1062306a36Sopenharmony_ci  SATA nodes are defined to describe on-chip Serial ATA controllers.
1162306a36Sopenharmony_ci  Each SATA controller should have its own node.
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci  It is possible, but not required, to represent each port as a sub-node.
1462306a36Sopenharmony_ci  It allows to enable each port independently when dealing with multiple
1562306a36Sopenharmony_ci  PHYs.
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_cimaintainers:
1862306a36Sopenharmony_ci  - Hans de Goede <hdegoede@redhat.com>
1962306a36Sopenharmony_ci  - Jens Axboe <axboe@kernel.dk>
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ciselect:
2262306a36Sopenharmony_ci  properties:
2362306a36Sopenharmony_ci    compatible:
2462306a36Sopenharmony_ci      contains:
2562306a36Sopenharmony_ci        enum:
2662306a36Sopenharmony_ci          - brcm,iproc-ahci
2762306a36Sopenharmony_ci          - cavium,octeon-7130-ahci
2862306a36Sopenharmony_ci          - hisilicon,hisi-ahci
2962306a36Sopenharmony_ci          - ibm,476gtr-ahci
3062306a36Sopenharmony_ci          - marvell,armada-3700-ahci
3162306a36Sopenharmony_ci          - marvell,armada-8k-ahci
3262306a36Sopenharmony_ci          - marvell,berlin2q-ahci
3362306a36Sopenharmony_ci          - socionext,uniphier-pro4-ahci
3462306a36Sopenharmony_ci          - socionext,uniphier-pxs2-ahci
3562306a36Sopenharmony_ci          - socionext,uniphier-pxs3-ahci
3662306a36Sopenharmony_ci  required:
3762306a36Sopenharmony_ci    - compatible
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ciproperties:
4062306a36Sopenharmony_ci  compatible:
4162306a36Sopenharmony_ci    oneOf:
4262306a36Sopenharmony_ci      - items:
4362306a36Sopenharmony_ci          - enum:
4462306a36Sopenharmony_ci              - brcm,iproc-ahci
4562306a36Sopenharmony_ci              - marvell,armada-8k-ahci
4662306a36Sopenharmony_ci              - marvell,berlin2-ahci
4762306a36Sopenharmony_ci              - marvell,berlin2q-ahci
4862306a36Sopenharmony_ci              - socionext,uniphier-pro4-ahci
4962306a36Sopenharmony_ci              - socionext,uniphier-pxs2-ahci
5062306a36Sopenharmony_ci              - socionext,uniphier-pxs3-ahci
5162306a36Sopenharmony_ci          - const: generic-ahci
5262306a36Sopenharmony_ci      - enum:
5362306a36Sopenharmony_ci          - cavium,octeon-7130-ahci
5462306a36Sopenharmony_ci          - hisilicon,hisi-ahci
5562306a36Sopenharmony_ci          - ibm,476gtr-ahci
5662306a36Sopenharmony_ci          - marvell,armada-3700-ahci
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci  reg:
5962306a36Sopenharmony_ci    minItems: 1
6062306a36Sopenharmony_ci    maxItems: 2
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci  reg-names:
6362306a36Sopenharmony_ci    maxItems: 1
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ci  clocks:
6662306a36Sopenharmony_ci    minItems: 1
6762306a36Sopenharmony_ci    maxItems: 3
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ci  clock-names:
7062306a36Sopenharmony_ci    minItems: 1
7162306a36Sopenharmony_ci    maxItems: 3
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_ci  interrupts:
7462306a36Sopenharmony_ci    maxItems: 1
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_ci  power-domains:
7762306a36Sopenharmony_ci    maxItems: 1
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ci  resets:
8062306a36Sopenharmony_ci    minItems: 1
8162306a36Sopenharmony_ci    maxItems: 3
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_cipatternProperties:
8462306a36Sopenharmony_ci  "^sata-port@[0-9a-f]+$":
8562306a36Sopenharmony_ci    $ref: /schemas/ata/ahci-common.yaml#/$defs/ahci-port
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ci    anyOf:
8862306a36Sopenharmony_ci      - required: [ phys ]
8962306a36Sopenharmony_ci      - required: [ target-supply ]
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci    unevaluatedProperties: false
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_cirequired:
9462306a36Sopenharmony_ci  - compatible
9562306a36Sopenharmony_ci  - reg
9662306a36Sopenharmony_ci  - interrupts
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ciallOf:
9962306a36Sopenharmony_ci  - $ref: ahci-common.yaml#
10062306a36Sopenharmony_ci  - if:
10162306a36Sopenharmony_ci      properties:
10262306a36Sopenharmony_ci        compatible:
10362306a36Sopenharmony_ci          contains:
10462306a36Sopenharmony_ci            const: socionext,uniphier-pro4-ahci
10562306a36Sopenharmony_ci    then:
10662306a36Sopenharmony_ci      properties:
10762306a36Sopenharmony_ci        resets:
10862306a36Sopenharmony_ci          items:
10962306a36Sopenharmony_ci            - description: reset line for the parent
11062306a36Sopenharmony_ci            - description: reset line for the glue logic
11162306a36Sopenharmony_ci            - description: reset line for the controller
11262306a36Sopenharmony_ci      required:
11362306a36Sopenharmony_ci        - resets
11462306a36Sopenharmony_ci    else:
11562306a36Sopenharmony_ci      if:
11662306a36Sopenharmony_ci        properties:
11762306a36Sopenharmony_ci          compatible:
11862306a36Sopenharmony_ci            contains:
11962306a36Sopenharmony_ci              enum:
12062306a36Sopenharmony_ci                - socionext,uniphier-pxs2-ahci
12162306a36Sopenharmony_ci                - socionext,uniphier-pxs3-ahci
12262306a36Sopenharmony_ci      then:
12362306a36Sopenharmony_ci        properties:
12462306a36Sopenharmony_ci          resets:
12562306a36Sopenharmony_ci            items:
12662306a36Sopenharmony_ci              - description: reset for the glue logic
12762306a36Sopenharmony_ci              - description: reset for the controller
12862306a36Sopenharmony_ci        required:
12962306a36Sopenharmony_ci          - resets
13062306a36Sopenharmony_ci      else:
13162306a36Sopenharmony_ci        properties:
13262306a36Sopenharmony_ci          resets:
13362306a36Sopenharmony_ci            maxItems: 1
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_ciunevaluatedProperties: false
13662306a36Sopenharmony_ci
13762306a36Sopenharmony_ciexamples:
13862306a36Sopenharmony_ci  - |
13962306a36Sopenharmony_ci    sata@ffe08000 {
14062306a36Sopenharmony_ci        compatible = "snps,spear-ahci";
14162306a36Sopenharmony_ci        reg = <0xffe08000 0x1000>;
14262306a36Sopenharmony_ci        interrupts = <115>;
14362306a36Sopenharmony_ci    };
14462306a36Sopenharmony_ci  - |
14562306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/arm-gic.h>
14662306a36Sopenharmony_ci    #include <dt-bindings/clock/berlin2q.h>
14762306a36Sopenharmony_ci    #include <dt-bindings/ata/ahci.h>
14862306a36Sopenharmony_ci
14962306a36Sopenharmony_ci    sata@f7e90000 {
15062306a36Sopenharmony_ci        compatible = "marvell,berlin2q-ahci", "generic-ahci";
15162306a36Sopenharmony_ci        reg = <0xf7e90000 0x1000>;
15262306a36Sopenharmony_ci        interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
15362306a36Sopenharmony_ci        clocks = <&chip CLKID_SATA>;
15462306a36Sopenharmony_ci        #address-cells = <1>;
15562306a36Sopenharmony_ci        #size-cells = <0>;
15662306a36Sopenharmony_ci
15762306a36Sopenharmony_ci        hba-cap = <HBA_SMPS>;
15862306a36Sopenharmony_ci
15962306a36Sopenharmony_ci        sata0: sata-port@0 {
16062306a36Sopenharmony_ci            reg = <0>;
16162306a36Sopenharmony_ci
16262306a36Sopenharmony_ci            phys = <&sata_phy 0>;
16362306a36Sopenharmony_ci            target-supply = <&reg_sata0>;
16462306a36Sopenharmony_ci
16562306a36Sopenharmony_ci            hba-port-cap = <(HBA_PORT_FBSCP | HBA_PORT_ESP)>;
16662306a36Sopenharmony_ci        };
16762306a36Sopenharmony_ci
16862306a36Sopenharmony_ci        sata1: sata-port@1 {
16962306a36Sopenharmony_ci            reg = <1>;
17062306a36Sopenharmony_ci
17162306a36Sopenharmony_ci            phys = <&sata_phy 1>;
17262306a36Sopenharmony_ci            target-supply = <&reg_sata1>;
17362306a36Sopenharmony_ci
17462306a36Sopenharmony_ci            hba-port-cap = <(HBA_PORT_HPCP | HBA_PORT_MPSP | HBA_PORT_FBSCP)>;
17562306a36Sopenharmony_ci        };
17662306a36Sopenharmony_ci    };
177