Subject: Re: [PATCH 04/10] dt-bindings: treewide: add feature-domains description in binding files

From: Rob Herring <[email-masked]>
Date: Mon, 10 Jul 2023 08:42:35 -0600

On Mon, Jul 10, 2023 at 10:22:10AM +0200, Gatien CHEVALLIER wrote:
> 
> 
> On 7/7/23 17:20, Rob Herring wrote:
> > On Fri, Jul 07, 2023 at 02:28:28PM +0200, Gatien CHEVALLIER wrote:
> > > Hello Rob,
> > > 
> > > On 7/6/23 16:51, Rob Herring wrote:
> > > > On Wed, Jul 05, 2023 at 07:27:53PM +0200, Gatien Chevallier wrote:
> > > > > feature-domains is an optional property that allows a peripheral to
> > > > > refer to one or more feature domain controller(s).
> > > > > 
> > > > > Description of this property is added to all peripheral binding files of
> > > > > the peripheral under the STM32 firewall controllers. It allows an accurate
> > > > > representation of the hardware, where various peripherals are connected
> > > > > to this firewall bus. The firewall can then check the peripheral accesses
> > > > > before allowing it to probe.
> > > > > 
> > > > > Signed-off-by: Gatien Chevallier <[email-masked]>
> > > > > ---
> > > > > 
> > > > > Disclaimer: Some error with dtbs_check will be observed as I've
> > > > > considered the property to be generic, as Rob asked
> > > > > 
> > > > >    Documentation/devicetree/bindings/crypto/st,stm32-hash.yaml  | 4 ++++
> > > > >    Documentation/devicetree/bindings/dma/st,stm32-dma.yaml      | 4 ++++
> > > > >    Documentation/devicetree/bindings/dma/st,stm32-dmamux.yaml   | 4 ++++
> > > > >    Documentation/devicetree/bindings/i2c/st,stm32-i2c.yaml      | 4 ++++
> > > > >    Documentation/devicetree/bindings/iio/adc/st,stm32-adc.yaml  | 4 ++++
> > > > >    .../devicetree/bindings/iio/adc/st,stm32-dfsdm-adc.yaml      | 4 ++++
> > > > >    Documentation/devicetree/bindings/iio/dac/st,stm32-dac.yaml  | 4 ++++
> > > > >    .../devicetree/bindings/media/cec/st,stm32-cec.yaml          | 4 ++++
> > > > >    Documentation/devicetree/bindings/media/st,stm32-dcmi.yaml   | 4 ++++
> > > > >    .../bindings/memory-controllers/st,stm32-fmc2-ebi.yaml       | 4 ++++
> > > > >    Documentation/devicetree/bindings/mfd/st,stm32-lptimer.yaml  | 4 ++++
> > > > >    Documentation/devicetree/bindings/mfd/st,stm32-timers.yaml   | 5 +++++
> > > > >    Documentation/devicetree/bindings/mmc/arm,pl18x.yaml         | 4 ++++
> > > > >    Documentation/devicetree/bindings/net/stm32-dwmac.yaml       | 4 ++++
> > > > >    Documentation/devicetree/bindings/phy/phy-stm32-usbphyc.yaml | 4 ++++
> > > > >    .../devicetree/bindings/regulator/st,stm32-vrefbuf.yaml      | 4 ++++
> > > > >    Documentation/devicetree/bindings/rng/st,stm32-rng.yaml      | 4 ++++
> > > > >    Documentation/devicetree/bindings/serial/st,stm32-uart.yaml  | 4 ++++
> > > > >    Documentation/devicetree/bindings/sound/st,stm32-i2s.yaml    | 4 ++++
> > > > >    Documentation/devicetree/bindings/sound/st,stm32-sai.yaml    | 4 ++++
> > > > >    .../devicetree/bindings/sound/st,stm32-spdifrx.yaml          | 4 ++++
> > > > >    Documentation/devicetree/bindings/spi/st,stm32-qspi.yaml     | 4 ++++
> > > > >    Documentation/devicetree/bindings/spi/st,stm32-spi.yaml      | 4 ++++
> > > > >    Documentation/devicetree/bindings/usb/dwc2.yaml              | 4 ++++
> > > > >    24 files changed, 97 insertions(+)
> > > > > 
> > > > > diff --git a/Documentation/devicetree/bindings/crypto/st,stm32-hash.yaml b/Documentation/devicetree/bindings/crypto/st,stm32-hash.yaml
> > > > > index b767ec72a999..daf8dcaef627 100644
> > > > > --- a/Documentation/devicetree/bindings/crypto/st,stm32-hash.yaml
> > > > > +++ b/Documentation/devicetree/bindings/crypto/st,stm32-hash.yaml
> > > > > @@ -50,6 +50,10 @@ properties:
> > > > >      power-domains:
> > > > >        maxItems: 1
> > > > > +  feature-domains:
> > > > > +    minItems: 1
> > > > > +    maxItems: 3
> > > > 
> > > > What are the 3 entries?
> > > > 
> > > > Rob
> > > 
> > > I thought I was benefiting from the description of the pattern-property in
> > > the RIFSC YAML file. But yes anyway, it seems like it needs some description
> > > here as the dependency does not appear in this file.
> > 
> > Humm, that should limit the maximum entries to 2, so 3 would never work
> > (if RIFSC is the parent).
> > 
> > > I picked 3 as a maxItems for our ST needs, I'll give it some more thought
> > > when coming back with something clearer.
> > 
> > I'd expect you have 1 entry for register bus and 1 entry for DMA bus if
> > there is one. It's block specific for how many entries, so the RIFSC
> > schema should not be setting that. You could possibly say that
> > 'feature-domains' is required for all the child nodes though.
> 
> Ok, I will change to not specifying the number of entries in the
> RIFSC YAML file for V2.
> 
> > 
> > Rob
> Some hardware blocks may have a firewall ID for their device part and
> another ID for their master part as well. In the end, the number of
> entries could very well vary between different platforms. And the YAML
> files are common to these platforms.

A given device has a fixed number of buses. Usually 1 or 2. That does 
*not* vary by platform (unless the device is modified). You could have 
the same firewall controller and id for multiple buses, but that 
should not change the number of entries for the device. Now maybe a bus 
has no firewall on some platforms. In that case, you should make the 
optional firewall entry the last one, have a null phandle (0 or -1), or 
use -names to distinguish the entries.

> This property could be used for "extra" arguments as well, that are not
> firewall IDs.

The arg cells are dictated by the provider and opaque to the client.

> What do you suggest between picking a high maxItems value that would
> (hopefully) cover all cases and not specifying maxItems at all? Or maybe
> another property dedicated to such arguments?

You should not specify maxItems in the firewall controller binding.

Rob