Skip to content

Commit

Permalink
dt-bindings: ata: ahci: Add platform capability properties
Browse files Browse the repository at this point in the history
In case if the platform doesn't have BIOS or a comprehensive firmware
installed then the HBA capability flags will be left uninitialized. As a
good alternative we suggest to define the DT-properties with the AHCI
platform capabilities describing all the HW-init flags of the
corresponding capability register. Luckily there aren't too many of them.
SSS - Staggered Spin-up support and MPS - Mechanical Presence Switch
support determine the corresponding feature availability for the whole HBA
by means of the "hba-cap" property. Each port can have the "hba-port-cap"
property initialized indicating that the port supports some of the next
functionalities: HPCP - HotPlug capable port, MPSP - Mechanical Presence
Switch attached to a port, CPD - Cold Plug detection, ESP - External SATA
Port (eSATA), FBSCP - FIS-based switching capable port.

Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru>
Reviewed-by: Rob Herring <robh@kernel.org>
Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
  • Loading branch information
Serge Semin authored and Damien Le Moal committed Sep 16, 2022
1 parent f67f12f commit 03f1076
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 0 deletions.
16 changes: 16 additions & 0 deletions Documentation/devicetree/bindings/ata/ahci-common.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,14 @@ properties:
phy-names:
const: sata-phy

hba-cap:
$ref: '/schemas/types.yaml#/definitions/uint32'
description:
Bitfield of the HBA generic platform capabilities like Staggered
Spin-up or Mechanical Presence Switch support. It can be used to
appropriately initialize the HWinit fields of the HBA CAP register
in case if the system firmware hasn't done it.

ports-implemented:
$ref: '/schemas/types.yaml#/definitions/uint32'
description:
Expand Down Expand Up @@ -101,6 +109,14 @@ $defs:
target-supply:
description: Power regulator for SATA port target device

hba-port-cap:
$ref: '/schemas/types.yaml#/definitions/uint32'
description:
Bitfield of the HBA port-specific platform capabilities like Hot
plugging, eSATA, FIS-based Switching, etc (see AHCI specification
for details). It can be used to initialize the HWinit fields of
the PxCMD register in case if the system firmware hasn't done it.

required:
- reg

Expand Down
10 changes: 10 additions & 0 deletions Documentation/devicetree/bindings/ata/ahci-platform.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,8 @@ examples:
- |
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/clock/berlin2q.h>
#include <dt-bindings/ata/ahci.h>
sata@f7e90000 {
compatible = "marvell,berlin2q-ahci", "generic-ahci";
reg = <0xf7e90000 0x1000>;
Expand All @@ -119,15 +121,23 @@ examples:
#address-cells = <1>;
#size-cells = <0>;
hba-cap = <HBA_SMPS>;
sata0: sata-port@0 {
reg = <0>;
phys = <&sata_phy 0>;
target-supply = <&reg_sata0>;
hba-port-cap = <(HBA_PORT_FBSCP | HBA_PORT_ESP)>;
};
sata1: sata-port@1 {
reg = <1>;
phys = <&sata_phy 1>;
target-supply = <&reg_sata1>;
hba-port-cap = <(HBA_PORT_HPCP | HBA_PORT_MPSP | HBA_PORT_FBSCP)>;
};
};
20 changes: 20 additions & 0 deletions include/dt-bindings/ata/ahci.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/* SPDX-License-Identifier: GPL-2.0-only or BSD-2-Clause */
/*
* This header provides constants for most AHCI bindings.
*/

#ifndef _DT_BINDINGS_ATA_AHCI_H
#define _DT_BINDINGS_ATA_AHCI_H

/* Host Bus Adapter generic platform capabilities */
#define HBA_SSS (1 << 27)
#define HBA_SMPS (1 << 28)

/* Host Bus Adapter port-specific platform capabilities */
#define HBA_PORT_HPCP (1 << 18)
#define HBA_PORT_MPSP (1 << 19)
#define HBA_PORT_CPD (1 << 20)
#define HBA_PORT_ESP (1 << 21)
#define HBA_PORT_FBSCP (1 << 22)

#endif

0 comments on commit 03f1076

Please sign in to comment.