All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rob Herring <robh@kernel.org>
To: Serge Semin <fancer.lancer@gmail.com>
Cc: Serge Semin <Sergey.Semin@baikalelectronics.ru>,
	Damien Le Moal <damien.lemoal@opensource.wdc.com>,
	Hans de Goede <hdegoede@redhat.com>, Jens Axboe <axboe@kernel.dk>,
	Hannes Reinecke <hare@suse.de>,
	Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
	Alexey Malahov <Alexey.Malahov@baikalelectronics.ru>,
	Pavel Parkhomenko <Pavel.Parkhomenko@baikalelectronics.ru>,
	linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org,
	devicetree@vger.kernel.org
Subject: Re: [PATCH v4 17/23] dt-bindings: ata: ahci: Add DWC AHCI SATA controller DT schema
Date: Tue, 12 Jul 2022 14:13:42 -0600	[thread overview]
Message-ID: <20220712201342.GM1823936-robh@kernel.org> (raw)
In-Reply-To: <20220707152539.tktdo4qnvwormkqk@mobilestation>

On Thu, Jul 07, 2022 at 06:25:39PM +0300, Serge Semin wrote:
> On Wed, Jul 06, 2022 at 04:36:42PM -0600, Rob Herring wrote:
> > On Fri, Jun 17, 2022 at 10:37:44PM +0300, Serge Semin wrote:
> > > On Tue, Jun 14, 2022 at 04:27:54PM -0600, Rob Herring wrote:
> > > > On Fri, Jun 10, 2022 at 11:17:55AM +0300, Serge Semin wrote:
> > > > > Synopsys AHCI SATA controller is mainly compatible with the generic AHCI
> > > > > SATA controller except a few peculiarities and the platform environment
> > > > > requirements. In particular it can have one or two reference clocks to
> > > > > feed up its AXI/AHB interface and SATA PHYs domain and at least one reset
> > > > > control for the application clock domain. In addition to that the DMA
> > > > > interface of each port can be tuned up to work with the predefined maximum
> > > > > data chunk size. Note unlike generic AHCI controller DWC AHCI can't have
> > > > > more than 8 ports. All of that is reflected in the new DWC AHCI SATA
> > > > > device DT binding.
> > > > > 
> > > > > Note the DWC AHCI SATA controller DT-schema has been created in a way so
> > > > > to be reused for the vendor-specific DT-schemas (see for example the
> > > > > "snps,dwc-ahci" compatible string binding). One of which we are about to
> > > > > introduce.
> > > > > 
> > > > > Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru>
> > > > > 
> > > > > ---
> > > > > 
> > > > > Changelog v2:
> > > > > - Replace min/max constraints of the snps,{tx,rx}-ts-max property with
> > > > >   enum [ 1, 2, 4, ..., 1024 ]. (@Rob)
> > > > > 
> > > > > Changelog v4:
> > > > > - Decrease the "additionalProperties" property identation otherwise it's
> > > > >   percieved as the node property instead of the key one. (@Rob)
> > > > > - Use the ahci-port properties definition from the AHCI common schema
> > > > >   in order to extend it with DWC AHCI SATA port properties. (@Rob)
> > > > > - Remove the Hannes' rb tag since the patch content has changed.
> > > > > ---
> > > > >  .../bindings/ata/ahci-platform.yaml           |   8 --
> > > > >  .../bindings/ata/snps,dwc-ahci.yaml           | 129 ++++++++++++++++++
> > > > >  2 files changed, 129 insertions(+), 8 deletions(-)
> > > > >  create mode 100644 Documentation/devicetree/bindings/ata/snps,dwc-ahci.yaml
> > > > > 
> > > > > diff --git a/Documentation/devicetree/bindings/ata/ahci-platform.yaml b/Documentation/devicetree/bindings/ata/ahci-platform.yaml
> > > > > index e19cf9828e68..7dc2a2e8f598 100644
> > > > > --- a/Documentation/devicetree/bindings/ata/ahci-platform.yaml
> > > > > +++ b/Documentation/devicetree/bindings/ata/ahci-platform.yaml
> > > > > @@ -30,8 +30,6 @@ select:
> > > > >            - marvell,armada-3700-ahci
> > > > >            - marvell,armada-8k-ahci
> > > > >            - marvell,berlin2q-ahci
> > > > > -          - snps,dwc-ahci
> > > > > -          - snps,spear-ahci
> > > > >    required:
> > > > >      - compatible
> > > > >  
> > > > > @@ -48,17 +46,11 @@ properties:
> > > > >                - marvell,berlin2-ahci
> > > > >                - marvell,berlin2q-ahci
> > > > >            - const: generic-ahci
> > > > > -      - items:
> > > > > -          - enum:
> > > > > -              - rockchip,rk3568-dwc-ahci
> > > > > -          - const: snps,dwc-ahci
> > > > >        - enum:
> > > > >            - cavium,octeon-7130-ahci
> > > > >            - hisilicon,hisi-ahci
> > > > >            - ibm,476gtr-ahci
> > > > >            - marvell,armada-3700-ahci
> > > > > -          - snps,dwc-ahci
> > > > > -          - snps,spear-ahci
> > > > >  
> > > > >    reg:
> > > > >      minItems: 1
> > > > > diff --git a/Documentation/devicetree/bindings/ata/snps,dwc-ahci.yaml b/Documentation/devicetree/bindings/ata/snps,dwc-ahci.yaml
> > > > > new file mode 100644
> > > > > index 000000000000..af78f6c9b857
> > > > > --- /dev/null
> > > > > +++ b/Documentation/devicetree/bindings/ata/snps,dwc-ahci.yaml
> > > > > @@ -0,0 +1,129 @@
> > > > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > > > > +%YAML 1.2
> > > > > +---
> > > > > +$id: http://devicetree.org/schemas/ata/snps,dwc-ahci.yaml#
> > > > > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > > > > +
> > > > > +title: Synopsys DWC AHCI SATA controller
> > > > > +
> > > > > +maintainers:
> > > > > +  - Serge Semin <fancer.lancer@gmail.com>
> > > > > +
> > > > > +description:
> > > > > +  This document defines device tree bindings for the Synopsys DWC
> > > > > +  implementation of the AHCI SATA controller.
> > > > > +
> > > > > +allOf:
> > > > > +  - $ref: ahci-common.yaml#
> > > > > +
> > > > > +properties:
> > > > > +  compatible:
> > > > > +    oneOf:
> > > > > +      - description: Synopsys AHCI SATA-compatible devices
> > > > > +        contains:
> > > > > +          const: snps,dwc-ahci
> > > > > +      - description: SPEAr1340 AHCI SATA device
> > > > > +        const: snps,spear-ahci
> > > > > +      - description: Rockhip RK3568 ahci controller
> > > > > +        const: rockchip,rk3568-dwc-ahci
> > > > 
> > > 
> > > > This is never true because there is a fallback. We should keep what we 
> > > > had before.
> > > 
> > > Could you be more specific what you meant? I don't see
> > > "snps,spear-ahci" and "rockchip,rk3568-dwc-ahci" used with the fallback
> > > string so modification is correct in that case.
> > 
> 
> > Spear does not, just rockchip:
> > 
> > arch/arm64/boot/dts/rockchip/rk3568.dtsi:               compatible = "rockchip,rk3568-dwc-ahci", "snps,dwc-ahci";
> > arch/arm64/boot/dts/rockchip/rk356x.dtsi:               compatible = "rockchip,rk3568-dwc-ahci", "snps,dwc-ahci";
> > arch/arm64/boot/dts/rockchip/rk356x.dtsi:               compatible = "rockchip,rk3568-dwc-ahci", "snps,dwc-ahci";
> > 
> > So the 3rd entry is never true.
> 
> Then I'll have to split the schema up into two bindings:
> 1. snps,dwc-ahci-common.yaml: generic DW SATA AHCI properties and no "compatible"
> property constraint since you said fallback was useless.
> 2. snps,dwc-ahci.yaml: generic DW SATA AHCI DT-schema with
> competibles: ("snps,dwc-ahci"), ("snps,spear-ahci"),
> ("rockchip,rk3568-dwc-ahci","snps,dwc-ahci").
> 
> Are you ok with this?

Yes.

> BTW if we had the fallback required the splitting up couldn't have
> been needed.

We generally end up needing a split like this anyways.


> > > My idea was to have the compatible strings with the required generic
> > > fallback "snps,dwc-ahci" for all new devices thus identifying the
> > > controller IP-core origin. But later you said "The generic IP block
> > > fallbacks have proven to be useless." I do agree that functionally it
> > > isn't that often used, but in some cases it can be handy for instance
> > > to implement quirks in the generic code or use the fallback as an
> > > additional info regarding the IP-core origin/version. So if I were you
> > > I wouldn't be that strict about dropping the generic IP-core fallback
> > > identifier. It's much easier to have it specified from the very
> > > beginning than adding it after it has been declared as not required.
> > 
> > I wish they were useful, but experience has shown they are not.
> 
> So what to do with the generic fallback compatibles then? Please
> answer to the next questions so I would correct all my currently
> stashed patches in accordance with it.
> 
> 1) Do you want all the new DT-binding schemas refusing to have the
> fallback compatibles except for the nodes which bindings have already
> been defined that way?

Yes. I wouldn't go quite as far as 'refusing'. I'm okay with a fallback 
in cases that are simple enough to actually work without platform 
specific code. As soon as the clocks, resets, phys, etc. aren't 
standard, that goes out the window. Based on experience, that pretty 
much never happens except on the IP vendor's FPGA.


> 2) What if a device IP-core has some versioning, but it's either
> not auto-detectable at runtime or can be auto-detected but starting
> from some IP-core version? Do we need it being specified in addition
> to the vendor-specific compatible string?

By the time you are probing the device, you know the specific SoC and 
can just set a version variable easily. Why have a string to parse that 
doesn't work for version comparisons (e.g GT/GE/LT).

Also, what if you don't know the exact IP version? Maybe you can guess 
that it is at least at certain version based on knowing the features, so 
you set that version. Would you really want to put that guess in DT when 
later on you might need to change it?

> 3) The same as 2), but shall it have a generic version-less fallback
> compatible string too?

If the device can function without the version specific compatible.

> 4) The same as 2), but what if it concerns a device which driver
> relies on the versioning?
> 
> 5) The same as 2), but what if it concerns the device which currently
> doesn't have a driver relying on the IP-core version?

Again, let the driver set the version based on the platform specific 
compatible.

> 6) What if we don't have the generic fallback compatible string
> required, but at some point a kernel would need it to
> implement a version/IP-core-specific quirk? If we had the generic
> fallback specified in dts the older systems would have been supported
> out-of-box, otherwise the firmware update would also needed.

Again, when you start probing the device, you already know the specific 
platform implementation. From that, you can easily imply the IP vendor 
and version. No DT change needed.

> IMO having the IP-core version + generic compatibles give many
> benefits and it's much easier to have them required from the very
> beginning instead of adding afterwards when then a need arises.

Certainly adding afterwards is broken. That's why we insist on SoC 
specific compatibles. Adding them when we have some platform specific 
quirk doesn't work.

Rob

  reply	other threads:[~2022-07-12 20:13 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-10  8:17 [PATCH v4 00/23] ata: ahci: Add DWC/Baikal-T1 AHCI SATA support Serge Semin
2022-06-10  8:17 ` [PATCH v4 01/23] dt-bindings: ata: ahci-platform: Move dma-coherent to sata-common.yaml Serge Semin
2022-06-14 22:02   ` Rob Herring
2022-06-14 22:15   ` Florian Fainelli
2022-06-10  8:17 ` [PATCH v4 02/23] dt-bindings: ata: ahci-platform: Detach common AHCI bindings Serge Semin
2022-06-14 22:16   ` Rob Herring
2022-06-10  8:17 ` [PATCH v4 03/23] dt-bindings: ata: ahci-platform: Clarify common AHCI props constraints Serge Semin
2022-06-14 22:17   ` Rob Herring
2022-06-10  8:17 ` [PATCH v4 04/23] dt-bindings: ata: sata: Extend number of SATA ports Serge Semin
2022-06-10  8:17 ` [PATCH v4 05/23] dt-bindings: ata: sata-brcm: Apply common AHCI schema Serge Semin
2022-06-14 22:15   ` Florian Fainelli
2022-06-14 22:17   ` Rob Herring
2022-06-10  8:17 ` [PATCH v4 06/23] ata: libahci_platform: Convert to using platform devm-ioremap methods Serge Semin
2022-06-10  8:17 ` [PATCH v4 07/23] ata: libahci_platform: Convert to using devm bulk clocks API Serge Semin
2022-06-14  8:22   ` Damien Le Moal
2022-06-15 20:45     ` Serge Semin
2022-06-16  0:23       ` Damien Le Moal
2022-06-17 19:54         ` Serge Semin
2022-06-10  8:17 ` [PATCH v4 08/23] ata: libahci_platform: Sanity check the DT child nodes number Serge Semin
2022-06-14  8:23   ` Damien Le Moal
2022-06-15 20:53     ` Serge Semin
2022-06-16  0:25       ` Damien Le Moal
2022-06-17 20:18         ` Serge Semin
2022-06-18  6:49           ` Damien Le Moal
2022-06-10  8:17 ` [PATCH v4 09/23] ata: libahci_platform: Parse ports-implemented property in resources getter Serge Semin
2022-06-10  8:17   ` Serge Semin
2022-06-10  8:17   ` Serge Semin
2022-06-10  8:17 ` [PATCH v4 10/23] ata: libahci_platform: Introduce reset assertion/deassertion methods Serge Semin
2022-06-10  8:17 ` [PATCH v4 11/23] dt-bindings: ata: ahci: Add platform capability properties Serge Semin
2022-06-14 22:19   ` Rob Herring
2022-06-15 21:56     ` Serge Semin
2022-06-10  8:17 ` [PATCH v4 12/23] ata: libahci: Extend port-cmd flags set with port capabilities Serge Semin
2022-06-14  8:32   ` Damien Le Moal
2022-06-15 20:58     ` Serge Semin
2022-06-16  0:28       ` Damien Le Moal
2022-06-17 20:31         ` Serge Semin
2022-06-18  6:52           ` Damien Le Moal
2022-06-18  8:10             ` Serge Semin
2022-06-28 12:08               ` Serge Semin
2022-06-29  1:35                 ` Damien Le Moal
2022-06-29  1:47                   ` Serge Semin
2022-06-10  8:17 ` [PATCH v4 13/23] ata: libahci: Discard redundant force_port_map parameter Serge Semin
2022-06-10  8:17 ` [PATCH v4 14/23] ata: libahci: Don't read AHCI version twice in the save-config method Serge Semin
2022-06-10  8:17 ` [PATCH v4 15/23] ata: ahci: Convert __ahci_port_base to accepting hpriv as arguments Serge Semin
2022-06-14  8:38   ` Damien Le Moal
2022-06-15 21:25     ` Serge Semin
2022-06-10  8:17 ` [PATCH v4 16/23] ata: ahci: Introduce firmware-specific caps initialization Serge Semin
2022-06-14  8:42   ` Damien Le Moal
2022-06-15 21:11     ` Serge Semin
2022-06-16  0:29       ` Damien Le Moal
2022-06-17 20:32         ` Serge Semin
2022-06-10  8:17 ` [PATCH v4 17/23] dt-bindings: ata: ahci: Add DWC AHCI SATA controller DT schema Serge Semin
2022-06-14 22:27   ` Rob Herring
2022-06-17 19:37     ` Serge Semin
2022-06-28 12:10       ` Serge Semin
2022-07-06 22:36       ` Rob Herring
2022-07-07 15:25         ` Serge Semin
2022-07-12 20:13           ` Rob Herring [this message]
2022-07-12 20:43             ` Serge Semin
2022-06-10  8:17 ` [PATCH v4 18/23] ata: libahci_platform: Add function returning a clock-handle by id Serge Semin
2022-06-14  8:45   ` Damien Le Moal
2022-06-15 21:24     ` Serge Semin
2022-06-10  8:17 ` [PATCH v4 19/23] ata: ahci: Add DWC AHCI SATA controller support Serge Semin
2022-06-10 16:34   ` Randy Dunlap
2022-06-10 21:58     ` Serge Semin
2022-06-10 23:34       ` Randy Dunlap
2022-06-15 21:30         ` Serge Semin
2022-06-16  0:31           ` Damien Le Moal
2022-06-17 20:36             ` Serge Semin
2022-06-18  6:54               ` Damien Le Moal
2022-06-14  8:53   ` Damien Le Moal
2022-06-15 21:48     ` Serge Semin
2022-06-16  0:33       ` Damien Le Moal
2022-06-17 20:34         ` Serge Semin
2022-06-10  8:17 ` [PATCH v4 20/23] dt-bindings: ata: ahci: Add Baikal-T1 AHCI SATA controller DT schema Serge Semin
2022-06-14 22:29   ` Rob Herring
2022-06-17 19:49     ` Serge Semin
2022-06-10  8:17 ` [PATCH v4 21/23] ata: ahci-dwc: Add platform-specific quirks support Serge Semin
2022-06-10  8:18 ` [PATCH v4 22/23] ata: ahci-dwc: Add Baikal-T1 AHCI SATA interface support Serge Semin
2022-06-10  8:18 ` [PATCH v4 23/23] MAINTAINERS: Add maintainers for DWC AHCI SATA driver Serge Semin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220712201342.GM1823936-robh@kernel.org \
    --to=robh@kernel.org \
    --cc=Alexey.Malahov@baikalelectronics.ru \
    --cc=Pavel.Parkhomenko@baikalelectronics.ru \
    --cc=Sergey.Semin@baikalelectronics.ru \
    --cc=axboe@kernel.dk \
    --cc=damien.lemoal@opensource.wdc.com \
    --cc=devicetree@vger.kernel.org \
    --cc=fancer.lancer@gmail.com \
    --cc=hare@suse.de \
    --cc=hdegoede@redhat.com \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.