diff mbox series

[21/28] dt-bindings: gpio: Convert mrvl-gpio to json-schema

Message ID 20200317093922.20785-22-lkundrak@v3.sk
State Not Applicable
Headers show
Series DT: Improve validation for Marvell SoCs | expand

Commit Message

Lubomir Rintel March 17, 2020, 9:39 a.m. UTC
This converts the mrvl-gpio binding to DT schema format using json-schema.

Various fixes were done during the conversion, such as adding more
properties that are in fact mandatory or extending the examples to
include child nodes with extra GPIO blocks.

The compatible strings are a mess. It is not clear why so many of them
are needed; the driver doesn't really seem to differentiate between the
models. Some of them, like marvell,pxa93x-gpio and marvell,pxa1928-gpio
are not used at all, so it's not known how many interrupts they utilize.
On the other hand, mrvl,pxa-gpio has been seen in the tree, but it
doesn't end up in any actual DTB file.

In any case -- the schema merely copies whatever was in the original
binding document, so it's hopefully no more wrong that the original.

Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
---
 .../devicetree/bindings/gpio/mrvl-gpio.txt    |  48 -----
 .../devicetree/bindings/gpio/mrvl-gpio.yaml   | 173 ++++++++++++++++++
 2 files changed, 173 insertions(+), 48 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/gpio/mrvl-gpio.txt
 create mode 100644 Documentation/devicetree/bindings/gpio/mrvl-gpio.yaml

Comments

Linus Walleij March 27, 2020, 10:04 a.m. UTC | #1
Hi Lubomir!

Excellent work! Just nitpicks:

On Tue, Mar 17, 2020 at 10:40 AM Lubomir Rintel <lkundrak@v3.sk> wrote:

> +++ b/Documentation/devicetree/bindings/gpio/mrvl-gpio.yaml
> @@ -0,0 +1,173 @@
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/gpio/mrvl-gpio.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Marvell PXA GPIO controller

This binding is lacking a license. Please use the dual GPL+BSD license
tag.

> +maintainers:
> +  - devicetree@vger.kernel.org

I don't know if Robert Jarzmik is in on maintaining this, would you accept
it Robert?

Yours,
Linus Walleij
Rob Herring March 27, 2020, 7:28 p.m. UTC | #2
On Tue, Mar 17, 2020 at 10:39:15AM +0100, Lubomir Rintel wrote:
> This converts the mrvl-gpio binding to DT schema format using json-schema.
> 
> Various fixes were done during the conversion, such as adding more
> properties that are in fact mandatory or extending the examples to
> include child nodes with extra GPIO blocks.

Ugg, not how I would have done this. Differences in register layout 
should be implied by the compatible strings. But I guess we have to live 
with it now.

> The compatible strings are a mess. It is not clear why so many of them
> are needed; the driver doesn't really seem to differentiate between the
> models. Some of them, like marvell,pxa93x-gpio and marvell,pxa1928-gpio
> are not used at all, so it's not known how many interrupts they utilize.
> On the other hand, mrvl,pxa-gpio has been seen in the tree, but it
> doesn't end up in any actual DTB file.

I added pxa1928 and then work on it ended. I think it is safe to remove, 
but I dug up dts file and it is 1 irq.

> In any case -- the schema merely copies whatever was in the original
> binding document, so it's hopefully no more wrong that the original.
> 
> Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
> ---
>  .../devicetree/bindings/gpio/mrvl-gpio.txt    |  48 -----
>  .../devicetree/bindings/gpio/mrvl-gpio.yaml   | 173 ++++++++++++++++++
>  2 files changed, 173 insertions(+), 48 deletions(-)
>  delete mode 100644 Documentation/devicetree/bindings/gpio/mrvl-gpio.txt
>  create mode 100644 Documentation/devicetree/bindings/gpio/mrvl-gpio.yaml
> 
> diff --git a/Documentation/devicetree/bindings/gpio/mrvl-gpio.txt b/Documentation/devicetree/bindings/gpio/mrvl-gpio.txt
> deleted file mode 100644
> index 30fd2201b3d4c..0000000000000
> --- a/Documentation/devicetree/bindings/gpio/mrvl-gpio.txt
> +++ /dev/null
> @@ -1,48 +0,0 @@
> -* Marvell PXA GPIO controller
> -
> -Required properties:
> -- compatible : Should be "intel,pxa25x-gpio", "intel,pxa26x-gpio",
> -		"intel,pxa27x-gpio", "intel,pxa3xx-gpio",
> -		"marvell,pxa93x-gpio", "marvell,mmp-gpio",
> -		"marvell,mmp2-gpio" or marvell,pxa1928-gpio.
> -- reg : Address and length of the register set for the device
> -- interrupts : Should be the port interrupt shared by all gpio pins.
> -  There're three gpio interrupts in arch-pxa, and they're gpio0,
> -  gpio1 and gpio_mux. There're only one gpio interrupt in arch-mmp,
> -  gpio_mux.
> -- interrupt-names : Should be the names of irq resources. Each interrupt
> -  uses its own interrupt name, so there should be as many interrupt names
> -  as referenced interrupts.
> -- interrupt-controller : Identifies the node as an interrupt controller.
> -- #interrupt-cells: Specifies the number of cells needed to encode an
> -  interrupt source.
> -- gpio-controller : Marks the device node as a gpio controller.
> -- #gpio-cells : Should be two.  The first cell is the pin number and
> -  the second cell is used to specify flags. See gpio.txt for possible
> -  values.
> -
> -Example for a MMP platform:
> -
> -	gpio: gpio@d4019000 {
> -		compatible = "marvell,mmp-gpio";
> -		reg = <0xd4019000 0x1000>;
> -		interrupts = <49>;
> -		interrupt-names = "gpio_mux";
> -		gpio-controller;
> -		#gpio-cells = <2>;
> -		interrupt-controller;
> -		#interrupt-cells = <1>;
> -      };
> -
> -Example for a PXA3xx platform:
> -
> -	gpio: gpio@40e00000 {
> -		compatible = "intel,pxa3xx-gpio";
> -		reg = <0x40e00000 0x10000>;
> -		interrupt-names = "gpio0", "gpio1", "gpio_mux";
> -		interrupts = <8 9 10>;
> -		gpio-controller;
> -		#gpio-cells = <0x2>;
> -		interrupt-controller;
> -		#interrupt-cells = <0x2>;
> -	};
> diff --git a/Documentation/devicetree/bindings/gpio/mrvl-gpio.yaml b/Documentation/devicetree/bindings/gpio/mrvl-gpio.yaml
> new file mode 100644
> index 0000000000000..5c713bf59b06d
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/gpio/mrvl-gpio.yaml
> @@ -0,0 +1,173 @@
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/gpio/mrvl-gpio.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Marvell PXA GPIO controller
> +
> +maintainers:
> +  - devicetree@vger.kernel.org

Needs to be a real person that cares about this h/w.

> +
> +allOf:
> +  - if:
> +      properties:
> +        compatible:
> +          contains:
> +            enum:
> +              - intel,pxa25x-gpio
> +              - intel,pxa26x-gpio
> +              - intel,pxa27x-gpio
> +              - intel,pxa3xx-gpio
> +    then:
> +      properties:
> +        interrupts:
> +          minItems: 3
> +          maxItems: 3
> +        interrupt-names:
> +          items:
> +            - const: gpio0
> +            - const: gpio1
> +            - const: gpio_mux
> +  - if:
> +      properties:
> +        compatible:
> +          contains:
> +            enum:
> +              - marvell,mmp-gpio
> +              - marvell,mmp2-gpio

I'd make this an else clause.

> +    then:
> +      properties:
> +        interrupts:
> +          maxItems: 1
> +        interrupt-names:
> +          items:
> +            - const: gpio_mux
> +
> +properties:
> +  $nodename:
> +    pattern: '^gpio@[0-9a-f]+$'
> +
> +  compatible:
> +    enum:
> +      - intel,pxa25x-gpio
> +      - intel,pxa26x-gpio
> +      - intel,pxa27x-gpio
> +      - intel,pxa3xx-gpio
> +      - marvell,mmp-gpio
> +      - marvell,mmp2-gpio
> +      - marvell,pxa93x-gpio
> +      - marvell,pxa1928-gpio
> +
> +  reg:
> +    maxItems: 1
> +
> +  clocks:
> +    maxItems: 1
> +
> +  resets:
> +    maxItems: 1
> +
> +  ranges: true
> +
> +  '#address-cells':
> +    const: 1
> +
> +  '#size-cells':
> +    const: 1
> +
> +  gpio-controller: true
> +
> +  '#gpio-cells':
> +    const: 2
> +
> +  gpio-ranges:
> +    maxItems: 1

My pxa1928 dts has this in the child nodes. Sure this is right?

> +
> +  interrupts: true
> +
> +  interrupt-names: true
> +
> +  interrupt-controller: true
> +
> +  '#interrupt-cells':
> +    const: 2
> +
> +patternProperties:
> +  '^gpio@[0-9a-f]*$':
> +    type: object
> +    properties:
> +      reg:
> +        maxItems: 1
> +
> +    required:
> +      - reg
> +
> +    additionalProperties: false
> +
> +required:
> +  - compatible
> +  - '#address-cells'
> +  - '#size-cells'
> +  - reg
> +  - gpio-controller
> +  - '#gpio-cells'
> +  - interrupts
> +  - interrupt-names
> +  - interrupt-controller
> +  - '#interrupt-cells'
> +  - ranges
> +
> +additionalProperties: false
> +
> +examples:
> +  - |
> +    #include <dt-bindings/clock/pxa-clock.h>
> +    gpio@40e00000 {
> +        compatible = "intel,pxa3xx-gpio";
> +        #address-cells = <1>;
> +        #size-cells = <1>;
> +        reg = <0x40e00000 0x10000>;
> +        gpio-controller;
> +        #gpio-cells = <2>;
> +        interrupts = <8>, <9>, <10>;
> +        interrupt-names = "gpio0", "gpio1", "gpio_mux";
> +        clocks = <&clks CLK_GPIO>;
> +        interrupt-controller;
> +        #interrupt-cells = <2>;
> +        ranges;

No child, so there should be no ranges here.

> +    };
> +  - |
> +    #include <dt-bindings/clock/marvell,pxa910.h>
> +    gpio@d4019000 {
> +        compatible = "marvell,mmp-gpio";
> +        #address-cells = <1>;
> +        #size-cells = <1>;
> +        reg = <0xd4019000 0x1000>;
> +        gpio-controller;
> +        #gpio-cells = <2>;
> +        interrupts = <49>;
> +        interrupt-names = "gpio_mux";
> +        clocks = <&soc_clocks PXA910_CLK_GPIO>;
> +        resets = <&soc_clocks PXA910_CLK_GPIO>;
> +        interrupt-controller;
> +        #interrupt-cells = <2>;
> +        ranges;
> +
> +        gpio@d4019000 {
> +            reg = <0xd4019000 0x4>;
> +        };
> +
> +        gpio@d4019004 {
> +            reg = <0xd4019004 0x4>;
> +        };
> +
> +        gpio@d4019008 {
> +            reg = <0xd4019008 0x4>;
> +        };
> +
> +        gpio@d4019100 {
> +            reg = <0xd4019100 0x4>;
> +        };
> +     };
> +
> +...
> -- 
> 2.25.1
>
Rob Herring March 27, 2020, 7:29 p.m. UTC | #3
On Fri, Mar 27, 2020 at 11:04:00AM +0100, Linus Walleij wrote:
> Hi Lubomir!
> 
> Excellent work! Just nitpicks:
> 
> On Tue, Mar 17, 2020 at 10:40 AM Lubomir Rintel <lkundrak@v3.sk> wrote:
> 
> > +++ b/Documentation/devicetree/bindings/gpio/mrvl-gpio.yaml
> > @@ -0,0 +1,173 @@
> > +%YAML 1.2
> > +---
> > +$id: http://devicetree.org/schemas/gpio/mrvl-gpio.yaml#
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: Marvell PXA GPIO controller
> 
> This binding is lacking a license. Please use the dual GPL+BSD license
> tag.

That is preferred, but should only be dual if you have rights on the old 
binding file or get relicensing permissions.

> 
> > +maintainers:
> > +  - devicetree@vger.kernel.org
> 
> I don't know if Robert Jarzmik is in on maintaining this, would you accept
> it Robert?
> 
> Yours,
> Linus Walleij
Lubomir Rintel May 17, 2020, 7 p.m. UTC | #4
On Fri, Mar 27, 2020 at 01:28:20PM -0600, Rob Herring wrote:
> On Tue, Mar 17, 2020 at 10:39:15AM +0100, Lubomir Rintel wrote:
> > This converts the mrvl-gpio binding to DT schema format using json-schema.
> > 
> > Various fixes were done during the conversion, such as adding more
> > properties that are in fact mandatory or extending the examples to
> > include child nodes with extra GPIO blocks.
> 
> Ugg, not how I would have done this. Differences in register layout 
> should be implied by the compatible strings. But I guess we have to live 
> with it now.
> 
> > The compatible strings are a mess. It is not clear why so many of them
> > are needed; the driver doesn't really seem to differentiate between the
> > models. Some of them, like marvell,pxa93x-gpio and marvell,pxa1928-gpio
> > are not used at all, so it's not known how many interrupts they utilize.
> > On the other hand, mrvl,pxa-gpio has been seen in the tree, but it
> > doesn't end up in any actual DTB file.
> 
> I added pxa1928 and then work on it ended. I think it is safe to remove, 
> but I dug up dts file and it is 1 irq.
> 
> > In any case -- the schema merely copies whatever was in the original
> > binding document, so it's hopefully no more wrong that the original.
> > 
> > Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
> > ---
> >  .../devicetree/bindings/gpio/mrvl-gpio.txt    |  48 -----
> >  .../devicetree/bindings/gpio/mrvl-gpio.yaml   | 173 ++++++++++++++++++
> >  2 files changed, 173 insertions(+), 48 deletions(-)
> >  delete mode 100644 Documentation/devicetree/bindings/gpio/mrvl-gpio.txt
> >  create mode 100644 Documentation/devicetree/bindings/gpio/mrvl-gpio.yaml
> > 
> > diff --git a/Documentation/devicetree/bindings/gpio/mrvl-gpio.txt b/Documentation/devicetree/bindings/gpio/mrvl-gpio.txt
> > deleted file mode 100644
> > index 30fd2201b3d4c..0000000000000
> > --- a/Documentation/devicetree/bindings/gpio/mrvl-gpio.txt
> > +++ /dev/null
> > @@ -1,48 +0,0 @@
> > -* Marvell PXA GPIO controller
> > -
> > -Required properties:
> > -- compatible : Should be "intel,pxa25x-gpio", "intel,pxa26x-gpio",
> > -		"intel,pxa27x-gpio", "intel,pxa3xx-gpio",
> > -		"marvell,pxa93x-gpio", "marvell,mmp-gpio",
> > -		"marvell,mmp2-gpio" or marvell,pxa1928-gpio.
> > -- reg : Address and length of the register set for the device
> > -- interrupts : Should be the port interrupt shared by all gpio pins.
> > -  There're three gpio interrupts in arch-pxa, and they're gpio0,
> > -  gpio1 and gpio_mux. There're only one gpio interrupt in arch-mmp,
> > -  gpio_mux.
> > -- interrupt-names : Should be the names of irq resources. Each interrupt
> > -  uses its own interrupt name, so there should be as many interrupt names
> > -  as referenced interrupts.
> > -- interrupt-controller : Identifies the node as an interrupt controller.
> > -- #interrupt-cells: Specifies the number of cells needed to encode an
> > -  interrupt source.
> > -- gpio-controller : Marks the device node as a gpio controller.
> > -- #gpio-cells : Should be two.  The first cell is the pin number and
> > -  the second cell is used to specify flags. See gpio.txt for possible
> > -  values.
> > -
> > -Example for a MMP platform:
> > -
> > -	gpio: gpio@d4019000 {
> > -		compatible = "marvell,mmp-gpio";
> > -		reg = <0xd4019000 0x1000>;
> > -		interrupts = <49>;
> > -		interrupt-names = "gpio_mux";
> > -		gpio-controller;
> > -		#gpio-cells = <2>;
> > -		interrupt-controller;
> > -		#interrupt-cells = <1>;
> > -      };
> > -
> > -Example for a PXA3xx platform:
> > -
> > -	gpio: gpio@40e00000 {
> > -		compatible = "intel,pxa3xx-gpio";
> > -		reg = <0x40e00000 0x10000>;
> > -		interrupt-names = "gpio0", "gpio1", "gpio_mux";
> > -		interrupts = <8 9 10>;
> > -		gpio-controller;
> > -		#gpio-cells = <0x2>;
> > -		interrupt-controller;
> > -		#interrupt-cells = <0x2>;
> > -	};
> > diff --git a/Documentation/devicetree/bindings/gpio/mrvl-gpio.yaml b/Documentation/devicetree/bindings/gpio/mrvl-gpio.yaml
> > new file mode 100644
> > index 0000000000000..5c713bf59b06d
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/gpio/mrvl-gpio.yaml
> > @@ -0,0 +1,173 @@
> > +%YAML 1.2
> > +---
> > +$id: http://devicetree.org/schemas/gpio/mrvl-gpio.yaml#
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: Marvell PXA GPIO controller
> > +
> > +maintainers:
> > +  - devicetree@vger.kernel.org
> 
> Needs to be a real person that cares about this h/w.

As I've said in the cover letter -- it's not clear who would that be.

> > +
> > +allOf:
> > +  - if:
> > +      properties:
> > +        compatible:
> > +          contains:
> > +            enum:
> > +              - intel,pxa25x-gpio
> > +              - intel,pxa26x-gpio
> > +              - intel,pxa27x-gpio
> > +              - intel,pxa3xx-gpio
> > +    then:
> > +      properties:
> > +        interrupts:
> > +          minItems: 3
> > +          maxItems: 3
> > +        interrupt-names:
> > +          items:
> > +            - const: gpio0
> > +            - const: gpio1
> > +            - const: gpio_mux
> > +  - if:
> > +      properties:
> > +        compatible:
> > +          contains:
> > +            enum:
> > +              - marvell,mmp-gpio
> > +              - marvell,mmp2-gpio
> 
> I'd make this an else clause.

This would imply that marvell,pxa93x-gpio has one interrupt and it is
not know whether that is actually the case.

> > +    then:
> > +      properties:
> > +        interrupts:
> > +          maxItems: 1
> > +        interrupt-names:
> > +          items:
> > +            - const: gpio_mux
> > +
> > +properties:
> > +  $nodename:
> > +    pattern: '^gpio@[0-9a-f]+$'
> > +
> > +  compatible:
> > +    enum:
> > +      - intel,pxa25x-gpio
> > +      - intel,pxa26x-gpio
> > +      - intel,pxa27x-gpio
> > +      - intel,pxa3xx-gpio
> > +      - marvell,mmp-gpio
> > +      - marvell,mmp2-gpio
> > +      - marvell,pxa93x-gpio
> > +      - marvell,pxa1928-gpio
> > +
> > +  reg:
> > +    maxItems: 1
> > +
> > +  clocks:
> > +    maxItems: 1
> > +
> > +  resets:
> > +    maxItems: 1
> > +
> > +  ranges: true
> > +
> > +  '#address-cells':
> > +    const: 1
> > +
> > +  '#size-cells':
> > +    const: 1
> > +
> > +  gpio-controller: true
> > +
> > +  '#gpio-cells':
> > +    const: 2
> > +
> > +  gpio-ranges:
> > +    maxItems: 1
> 
> My pxa1928 dts has this in the child nodes. Sure this is right?

I actually don't know anything about pxa1928. pxa27x.dtsi and
pxa3xx.dtsi specify gpio-ranges on main gpio nodes and have no gcb
child nodes.

> > +
> > +  interrupts: true
> > +
> > +  interrupt-names: true
> > +
> > +  interrupt-controller: true
> > +
> > +  '#interrupt-cells':
> > +    const: 2
> > +
> > +patternProperties:
> > +  '^gpio@[0-9a-f]*$':
> > +    type: object
> > +    properties:
> > +      reg:
> > +        maxItems: 1
> > +
> > +    required:
> > +      - reg
> > +
> > +    additionalProperties: false
> > +
> > +required:
> > +  - compatible
> > +  - '#address-cells'
> > +  - '#size-cells'
> > +  - reg
> > +  - gpio-controller
> > +  - '#gpio-cells'
> > +  - interrupts
> > +  - interrupt-names
> > +  - interrupt-controller
> > +  - '#interrupt-cells'
> > +  - ranges
> > +
> > +additionalProperties: false
> > +
> > +examples:
> > +  - |
> > +    #include <dt-bindings/clock/pxa-clock.h>
> > +    gpio@40e00000 {
> > +        compatible = "intel,pxa3xx-gpio";
> > +        #address-cells = <1>;
> > +        #size-cells = <1>;
> > +        reg = <0x40e00000 0x10000>;
> > +        gpio-controller;
> > +        #gpio-cells = <2>;
> > +        interrupts = <8>, <9>, <10>;
> > +        interrupt-names = "gpio0", "gpio1", "gpio_mux";
> > +        clocks = <&clks CLK_GPIO>;
> > +        interrupt-controller;
> > +        #interrupt-cells = <2>;
> > +        ranges;
> 
> No child, so there should be no ranges here.

Will fix in next version.

> > +    };
> > +  - |
> > +    #include <dt-bindings/clock/marvell,pxa910.h>
> > +    gpio@d4019000 {
> > +        compatible = "marvell,mmp-gpio";
> > +        #address-cells = <1>;
> > +        #size-cells = <1>;
> > +        reg = <0xd4019000 0x1000>;
> > +        gpio-controller;
> > +        #gpio-cells = <2>;
> > +        interrupts = <49>;
> > +        interrupt-names = "gpio_mux";
> > +        clocks = <&soc_clocks PXA910_CLK_GPIO>;
> > +        resets = <&soc_clocks PXA910_CLK_GPIO>;
> > +        interrupt-controller;
> > +        #interrupt-cells = <2>;
> > +        ranges;
> > +
> > +        gpio@d4019000 {
> > +            reg = <0xd4019000 0x4>;
> > +        };
> > +
> > +        gpio@d4019004 {
> > +            reg = <0xd4019004 0x4>;
> > +        };
> > +
> > +        gpio@d4019008 {
> > +            reg = <0xd4019008 0x4>;
> > +        };
> > +
> > +        gpio@d4019100 {
> > +            reg = <0xd4019100 0x4>;
> > +        };
> > +     };
> > +
> > +...
> > -- 
> > 2.25.1
> >
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/gpio/mrvl-gpio.txt b/Documentation/devicetree/bindings/gpio/mrvl-gpio.txt
deleted file mode 100644
index 30fd2201b3d4c..0000000000000
--- a/Documentation/devicetree/bindings/gpio/mrvl-gpio.txt
+++ /dev/null
@@ -1,48 +0,0 @@ 
-* Marvell PXA GPIO controller
-
-Required properties:
-- compatible : Should be "intel,pxa25x-gpio", "intel,pxa26x-gpio",
-		"intel,pxa27x-gpio", "intel,pxa3xx-gpio",
-		"marvell,pxa93x-gpio", "marvell,mmp-gpio",
-		"marvell,mmp2-gpio" or marvell,pxa1928-gpio.
-- reg : Address and length of the register set for the device
-- interrupts : Should be the port interrupt shared by all gpio pins.
-  There're three gpio interrupts in arch-pxa, and they're gpio0,
-  gpio1 and gpio_mux. There're only one gpio interrupt in arch-mmp,
-  gpio_mux.
-- interrupt-names : Should be the names of irq resources. Each interrupt
-  uses its own interrupt name, so there should be as many interrupt names
-  as referenced interrupts.
-- interrupt-controller : Identifies the node as an interrupt controller.
-- #interrupt-cells: Specifies the number of cells needed to encode an
-  interrupt source.
-- gpio-controller : Marks the device node as a gpio controller.
-- #gpio-cells : Should be two.  The first cell is the pin number and
-  the second cell is used to specify flags. See gpio.txt for possible
-  values.
-
-Example for a MMP platform:
-
-	gpio: gpio@d4019000 {
-		compatible = "marvell,mmp-gpio";
-		reg = <0xd4019000 0x1000>;
-		interrupts = <49>;
-		interrupt-names = "gpio_mux";
-		gpio-controller;
-		#gpio-cells = <2>;
-		interrupt-controller;
-		#interrupt-cells = <1>;
-      };
-
-Example for a PXA3xx platform:
-
-	gpio: gpio@40e00000 {
-		compatible = "intel,pxa3xx-gpio";
-		reg = <0x40e00000 0x10000>;
-		interrupt-names = "gpio0", "gpio1", "gpio_mux";
-		interrupts = <8 9 10>;
-		gpio-controller;
-		#gpio-cells = <0x2>;
-		interrupt-controller;
-		#interrupt-cells = <0x2>;
-	};
diff --git a/Documentation/devicetree/bindings/gpio/mrvl-gpio.yaml b/Documentation/devicetree/bindings/gpio/mrvl-gpio.yaml
new file mode 100644
index 0000000000000..5c713bf59b06d
--- /dev/null
+++ b/Documentation/devicetree/bindings/gpio/mrvl-gpio.yaml
@@ -0,0 +1,173 @@ 
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/gpio/mrvl-gpio.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Marvell PXA GPIO controller
+
+maintainers:
+  - devicetree@vger.kernel.org
+
+allOf:
+  - if:
+      properties:
+        compatible:
+          contains:
+            enum:
+              - intel,pxa25x-gpio
+              - intel,pxa26x-gpio
+              - intel,pxa27x-gpio
+              - intel,pxa3xx-gpio
+    then:
+      properties:
+        interrupts:
+          minItems: 3
+          maxItems: 3
+        interrupt-names:
+          items:
+            - const: gpio0
+            - const: gpio1
+            - const: gpio_mux
+  - if:
+      properties:
+        compatible:
+          contains:
+            enum:
+              - marvell,mmp-gpio
+              - marvell,mmp2-gpio
+    then:
+      properties:
+        interrupts:
+          maxItems: 1
+        interrupt-names:
+          items:
+            - const: gpio_mux
+
+properties:
+  $nodename:
+    pattern: '^gpio@[0-9a-f]+$'
+
+  compatible:
+    enum:
+      - intel,pxa25x-gpio
+      - intel,pxa26x-gpio
+      - intel,pxa27x-gpio
+      - intel,pxa3xx-gpio
+      - marvell,mmp-gpio
+      - marvell,mmp2-gpio
+      - marvell,pxa93x-gpio
+      - marvell,pxa1928-gpio
+
+  reg:
+    maxItems: 1
+
+  clocks:
+    maxItems: 1
+
+  resets:
+    maxItems: 1
+
+  ranges: true
+
+  '#address-cells':
+    const: 1
+
+  '#size-cells':
+    const: 1
+
+  gpio-controller: true
+
+  '#gpio-cells':
+    const: 2
+
+  gpio-ranges:
+    maxItems: 1
+
+  interrupts: true
+
+  interrupt-names: true
+
+  interrupt-controller: true
+
+  '#interrupt-cells':
+    const: 2
+
+patternProperties:
+  '^gpio@[0-9a-f]*$':
+    type: object
+    properties:
+      reg:
+        maxItems: 1
+
+    required:
+      - reg
+
+    additionalProperties: false
+
+required:
+  - compatible
+  - '#address-cells'
+  - '#size-cells'
+  - reg
+  - gpio-controller
+  - '#gpio-cells'
+  - interrupts
+  - interrupt-names
+  - interrupt-controller
+  - '#interrupt-cells'
+  - ranges
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/pxa-clock.h>
+    gpio@40e00000 {
+        compatible = "intel,pxa3xx-gpio";
+        #address-cells = <1>;
+        #size-cells = <1>;
+        reg = <0x40e00000 0x10000>;
+        gpio-controller;
+        #gpio-cells = <2>;
+        interrupts = <8>, <9>, <10>;
+        interrupt-names = "gpio0", "gpio1", "gpio_mux";
+        clocks = <&clks CLK_GPIO>;
+        interrupt-controller;
+        #interrupt-cells = <2>;
+        ranges;
+    };
+  - |
+    #include <dt-bindings/clock/marvell,pxa910.h>
+    gpio@d4019000 {
+        compatible = "marvell,mmp-gpio";
+        #address-cells = <1>;
+        #size-cells = <1>;
+        reg = <0xd4019000 0x1000>;
+        gpio-controller;
+        #gpio-cells = <2>;
+        interrupts = <49>;
+        interrupt-names = "gpio_mux";
+        clocks = <&soc_clocks PXA910_CLK_GPIO>;
+        resets = <&soc_clocks PXA910_CLK_GPIO>;
+        interrupt-controller;
+        #interrupt-cells = <2>;
+        ranges;
+
+        gpio@d4019000 {
+            reg = <0xd4019000 0x4>;
+        };
+
+        gpio@d4019004 {
+            reg = <0xd4019004 0x4>;
+        };
+
+        gpio@d4019008 {
+            reg = <0xd4019008 0x4>;
+        };
+
+        gpio@d4019100 {
+            reg = <0xd4019100 0x4>;
+        };
+     };
+
+...