Re: [PATCH v2] dt-bindings: gpu: Convert Samsung Image Scaler to dt-schema

From: Maciej Falkowski
Date: Thu Sep 26 2019 - 12:54:08 EST



On 9/26/19 5:35 PM, Rob Herring wrote:
> On Thu, Sep 26, 2019 at 9:47 AM Maciej Falkowski
> <m.falkowski@xxxxxxxxxxx> wrote:
>>
>> On 9/26/19 4:03 PM, Krzysztof Kozlowski wrote:
>>> On Thu, Sep 26, 2019 at 02:56:14PM +0200, Marek Szyprowski wrote:
>>>> From: Maciej Falkowski <m.falkowski@xxxxxxxxxxx>
>>>>
>>>> Convert Samsung Image Scaler to newer dt-schema format.
>>>>
>>>> Signed-off-by: Maciej Falkowski <m.falkowski@xxxxxxxxxxx>
>>>> Signed-off-by: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx>
>>>> ---
>>>> v2:
>>>> - Removed quotation marks from string in 'compatible' property
>>>> - Added if-then statement for 'clocks' and 'clock-names' property
>>>> - Added include directive to example
>>>> - Added GIC_SPI macro to example
>>>>
>>>> Best regards,
>>>> Maciej Falkowski
>>>> ---
>>>> .../bindings/gpu/samsung-scaler.txt | 27 -------
>>>> .../bindings/gpu/samsung-scaler.yaml | 71 +++++++++++++++++++
>>>> 2 files changed, 71 insertions(+), 27 deletions(-)
>>>> delete mode 100644 Documentation/devicetree/bindings/gpu/samsung-scaler.txt
>>>> create mode 100644 Documentation/devicetree/bindings/gpu/samsung-scaler.yaml
>>>>
>>>> diff --git a/Documentation/devicetree/bindings/gpu/samsung-scaler.txt b/Documentation/devicetree/bindings/gpu/samsung-scaler.txt
>>>> deleted file mode 100644
>>>> index 9c3d98105dfd..000000000000
>>>> --- a/Documentation/devicetree/bindings/gpu/samsung-scaler.txt
>>>> +++ /dev/null
>>>> @@ -1,27 +0,0 @@
>>>> -* Samsung Exynos Image Scaler
>>>> -
>>>> -Required properties:
>>>> - - compatible : value should be one of the following:
>>>> - (a) "samsung,exynos5420-scaler" for Scaler IP in Exynos5420
>>>> - (b) "samsung,exynos5433-scaler" for Scaler IP in Exynos5433
>>>> -
>>>> - - reg : Physical base address of the IP registers and length of memory
>>>> - mapped region.
>>>> -
>>>> - - interrupts : Interrupt specifier for scaler interrupt, according to format
>>>> - specific to interrupt parent.
>>>> -
>>>> - - clocks : Clock specifier for scaler clock, according to generic clock
>>>> - bindings. (See Documentation/devicetree/bindings/clock/exynos*.txt)
>>>> -
>>>> - - clock-names : Names of clocks. For exynos scaler, it should be "mscl"
>>>> - on 5420 and "pclk", "aclk" and "aclk_xiu" on 5433.
>>>> -
>>>> -Example:
>>>> - scaler@12800000 {
>>>> - compatible = "samsung,exynos5420-scaler";
>>>> - reg = <0x12800000 0x1294>;
>>>> - interrupts = <0 220 IRQ_TYPE_LEVEL_HIGH>;
>>>> - clocks = <&clock CLK_MSCL0>;
>>>> - clock-names = "mscl";
>>>> - };
>>>> diff --git a/Documentation/devicetree/bindings/gpu/samsung-scaler.yaml b/Documentation/devicetree/bindings/gpu/samsung-scaler.yaml
>>>> new file mode 100644
>>>> index 000000000000..af19930d052e
>>>> --- /dev/null
>>>> +++ b/Documentation/devicetree/bindings/gpu/samsung-scaler.yaml
>>>> @@ -0,0 +1,71 @@
>>>> +# SPDX-License-Identifier: GPL-2.0
>>>> +%YAML 1.2
>>>> +---
>>>> +$id: https://protect2.fireeye.com/url?k=1ffa720fd467d028.1ffbf940-9a5a550397b4da2b&u=http://devicetree.org/schemas/gpu/samsung-scaler.yaml#
>>>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>>>> +
>>>> +title: Samsung Exynos SoC Image Scaler
>>>> +
>>>> +maintainers:
>>>> + - Inki Dae <inki.dae@xxxxxxxxxxx>
>>>> +
>>>> +properties:
>>>> + compatible:
>>>> + enum:
>>>> + - samsung,exynos5420-scaler
>>>> + - samsung,exynos5433-scaler
>>>> +
>>>> + reg:
>>>> + maxItems: 1
>>>> +
>>>> + interrupts:
>>>> + maxItems: 1
>>>> +
>> Hi Krzysztof,
> Please work on your quoting. Reply below what you are replying to.
>
>> By "Midgard" I assume that you referred to
>> 'Documentation/devicetree/bindings/gpu/arm,mali-midgard.yaml'.
>>
>> I think that 'clocks' and 'clock-names' properties before if statement
>> serve different purpose in this schema.
>> It totally has about 10 different compatibles grouped in five pairs.
>> Then schema declares for 'clocks' minItems as one and maxItems as two and
>> later it overrides this boundaries with if statement for particular
>> compatibles.
> It's not an override, but an AND. So what's under 'properties' has to
> be the looser constraints than what is under an if/then schema.
Hi Rob,
Thank you for explaining that.
>> Well, then clearly, the purpose is to declare boundaries for all of
>> pairs and
>> not to provide easy-to-find definition for this properties.
>>
>> In my schema I directly set boundaries per compatible with single
>> if-else statement.
>> I didn't know what to put before then as if statement is already
>> self-explanatory.
>>
>> Best regards,
>> Maciej Falkowski
>>
>>> I am repeating myself... leave the clocks and clock-names.
>>>
>>> "I think it is worth to leave the clocks and clock-names here (could be
>>> empty or with min/max values for number of items). This makes it easy to
>>> find the properties by humans.
> I agree.
>
> Let me put it another way. You need to add an 'additionalProperties:
> false' and (I think) to make that work you'll need them listed here.
>
> Rob

So when properties are only defined inside if-then scope,
they are labeled as 'additional' as they are not defined inside
scope of 'properties'. It is mandatory then to mention 'clock' and
'clock-names' there if 'additionalProperties: false' .

However I had not set it intentionally as there are additional
properties in some bindings,
exactly 'iommu' and 'power-domains' are undocumented.
Is it a good way to put them in 'properties' just to be able to forbid
additional properties?

Best regards,
Maciej Falkowski

>