diff mbox series

[v4,11/23] dt-bindings: ata: ahci: Add platform capability properties

Message ID 20220610081801.11854-12-Sergey.Semin@baikalelectronics.ru
State Superseded
Headers show
Series ata: ahci: Add DWC/Baikal-T1 AHCI SATA support | expand

Commit Message

Serge Semin June 10, 2022, 8:17 a.m. UTC
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>

---

Changelog v4:
- Fix some misspelling in the patch log.
- Convert the boolean properties to the bitfield properties. (@Rob)
- Remove Hannes' rb tag due to the patch content change.
---
 .../devicetree/bindings/ata/ahci-common.yaml  | 16 +++++++++++++++
 .../bindings/ata/ahci-platform.yaml           | 10 ++++++++++
 include/dt-bindings/ata/ahci.h                | 20 +++++++++++++++++++
 3 files changed, 46 insertions(+)
 create mode 100644 include/dt-bindings/ata/ahci.h

Comments

Rob Herring June 14, 2022, 10:19 p.m. UTC | #1
On Fri, Jun 10, 2022 at 11:17:49AM +0300, Serge Semin wrote:
> 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>
> 
> ---
> 
> Changelog v4:
> - Fix some misspelling in the patch log.
> - Convert the boolean properties to the bitfield properties. (@Rob)
> - Remove Hannes' rb tag due to the patch content change.
> ---
>  .../devicetree/bindings/ata/ahci-common.yaml  | 16 +++++++++++++++
>  .../bindings/ata/ahci-platform.yaml           | 10 ++++++++++
>  include/dt-bindings/ata/ahci.h                | 20 +++++++++++++++++++
>  3 files changed, 46 insertions(+)
>  create mode 100644 include/dt-bindings/ata/ahci.h
> 
> diff --git a/Documentation/devicetree/bindings/ata/ahci-common.yaml b/Documentation/devicetree/bindings/ata/ahci-common.yaml
> index 12a97b56226f..94d72aeaad0f 100644
> --- a/Documentation/devicetree/bindings/ata/ahci-common.yaml
> +++ b/Documentation/devicetree/bindings/ata/ahci-common.yaml
> @@ -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:
> @@ -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
>  
> diff --git a/Documentation/devicetree/bindings/ata/ahci-platform.yaml b/Documentation/devicetree/bindings/ata/ahci-platform.yaml
> index 15be98e0385b..e19cf9828e68 100644
> --- a/Documentation/devicetree/bindings/ata/ahci-platform.yaml
> +++ b/Documentation/devicetree/bindings/ata/ahci-platform.yaml
> @@ -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>;
> @@ -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)>;
>          };
>      };
> diff --git a/include/dt-bindings/ata/ahci.h b/include/dt-bindings/ata/ahci.h
> new file mode 100644
> index 000000000000..6841caebcedf
> --- /dev/null
> +++ b/include/dt-bindings/ata/ahci.h
> @@ -0,0 +1,20 @@
> +/* SPDX-License-Identifier: GPL-2.0 */

Dual license.

With that,

Reviewed-by: Rob Herring <robh@kernel.org>

> +/*
> + * 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
> -- 
> 2.35.1
> 
>
Serge Semin June 15, 2022, 9:56 p.m. UTC | #2
On Tue, Jun 14, 2022 at 04:19:17PM -0600, Rob Herring wrote:
> On Fri, Jun 10, 2022 at 11:17:49AM +0300, Serge Semin wrote:
> > 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>
> > 
> > ---
> > 
> > Changelog v4:
> > - Fix some misspelling in the patch log.
> > - Convert the boolean properties to the bitfield properties. (@Rob)
> > - Remove Hannes' rb tag due to the patch content change.
> > ---
> >  .../devicetree/bindings/ata/ahci-common.yaml  | 16 +++++++++++++++
> >  .../bindings/ata/ahci-platform.yaml           | 10 ++++++++++
> >  include/dt-bindings/ata/ahci.h                | 20 +++++++++++++++++++
> >  3 files changed, 46 insertions(+)
> >  create mode 100644 include/dt-bindings/ata/ahci.h
> > 
> > diff --git a/Documentation/devicetree/bindings/ata/ahci-common.yaml b/Documentation/devicetree/bindings/ata/ahci-common.yaml
> > index 12a97b56226f..94d72aeaad0f 100644
> > --- a/Documentation/devicetree/bindings/ata/ahci-common.yaml
> > +++ b/Documentation/devicetree/bindings/ata/ahci-common.yaml
> > @@ -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:
> > @@ -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
> >  
> > diff --git a/Documentation/devicetree/bindings/ata/ahci-platform.yaml b/Documentation/devicetree/bindings/ata/ahci-platform.yaml
> > index 15be98e0385b..e19cf9828e68 100644
> > --- a/Documentation/devicetree/bindings/ata/ahci-platform.yaml
> > +++ b/Documentation/devicetree/bindings/ata/ahci-platform.yaml
> > @@ -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>;
> > @@ -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)>;
> >          };
> >      };
> > diff --git a/include/dt-bindings/ata/ahci.h b/include/dt-bindings/ata/ahci.h
> > new file mode 100644
> > index 000000000000..6841caebcedf
> > --- /dev/null
> > +++ b/include/dt-bindings/ata/ahci.h
> > @@ -0,0 +1,20 @@
> > +/* SPDX-License-Identifier: GPL-2.0 */
> 

> Dual license.

Ok.

> 
> With that,
> 
> Reviewed-by: Rob Herring <robh@kernel.org>

Thanks.

-Sergey

> 
> > +/*
> > + * 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
> > -- 
> > 2.35.1
> > 
> >
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/ata/ahci-common.yaml b/Documentation/devicetree/bindings/ata/ahci-common.yaml
index 12a97b56226f..94d72aeaad0f 100644
--- a/Documentation/devicetree/bindings/ata/ahci-common.yaml
+++ b/Documentation/devicetree/bindings/ata/ahci-common.yaml
@@ -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:
@@ -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
 
diff --git a/Documentation/devicetree/bindings/ata/ahci-platform.yaml b/Documentation/devicetree/bindings/ata/ahci-platform.yaml
index 15be98e0385b..e19cf9828e68 100644
--- a/Documentation/devicetree/bindings/ata/ahci-platform.yaml
+++ b/Documentation/devicetree/bindings/ata/ahci-platform.yaml
@@ -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>;
@@ -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)>;
         };
     };
diff --git a/include/dt-bindings/ata/ahci.h b/include/dt-bindings/ata/ahci.h
new file mode 100644
index 000000000000..6841caebcedf
--- /dev/null
+++ b/include/dt-bindings/ata/ahci.h
@@ -0,0 +1,20 @@ 
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * 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