mbox series

[v5,0/2] Add iop driver for Sunplus SP7021

Message ID cover.1640332430.git.tonyhuang.sunplus@gmail.com
Headers show
Series Add iop driver for Sunplus SP7021 | expand

Message

Tony Huang Dec. 24, 2021, 8:35 a.m. UTC
Add iop driver for Sunplus SP7021 SOC

This is a patch series for iop driver for Sunplus SP7021 SOC.

Sunplus SP7021 is an ARM Cortex A7 (4 cores) based SoC. It integrates
many peripherals (ex: UART, I2C, SPI, SDIO, eMMC, USB, SD card and
etc.) into a single chip. It is designed for industrial control.

Refer to:
https://sunplus-tibbo.atlassian.net/wiki/spaces/doc/overview
https://tibbo.com/store/plus1.html

Tony Huang (2):
  dt-binding: misc: Add iop yaml file for Sunplus SP7021
  misc: Add iop driver for Sunplus SP7021

 Documentation/ABI/testing/sysfs-platform-soc@B     |  18 +
 .../devicetree/bindings/misc/sunplus-iop.yaml      |  72 +++
 MAINTAINERS                                        |   7 +
 drivers/misc/Kconfig                               |  12 +
 drivers/misc/Makefile                              |   1 +
 drivers/misc/sunplus_iop.c                         | 481 +++++++++++++++++++++
 6 files changed, 591 insertions(+)
 create mode 100644 Documentation/ABI/testing/sysfs-platform-soc@B
 create mode 100644 Documentation/devicetree/bindings/misc/sunplus-iop.yaml
 create mode 100644 drivers/misc/sunplus_iop.c

Comments

Rob Herring Dec. 27, 2021, 4:43 p.m. UTC | #1
On Fri, Dec 24, 2021 at 04:35:55PM +0800, Tony Huang wrote:
> Add iop yaml file for Sunplus SP7021
> 
> Signed-off-by: Tony Huang <tonyhuang.sunplus@gmail.com>
> ---
> Changes in v5:
> -Add iop-wakeup pin for 8051 to wake up the Linux kernel in shutdown mode.
> 
>  .../devicetree/bindings/misc/sunplus-iop.yaml      | 72 ++++++++++++++++++++++
>  MAINTAINERS                                        |  5 ++
>  2 files changed, 77 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/misc/sunplus-iop.yaml
> 
> diff --git a/Documentation/devicetree/bindings/misc/sunplus-iop.yaml b/Documentation/devicetree/bindings/misc/sunplus-iop.yaml
> new file mode 100644
> index 0000000..fad0f50
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/misc/sunplus-iop.yaml
> @@ -0,0 +1,72 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +# Copyright (C) Sunplus Ltd. Co. 2021
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/misc/sunplus-iop.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Sunplus IOP(8051) controller
> +
> +maintainers:
> +  - Tony Huang <tonyhuang.sunplus@gmail.com>
> +
> +description: |
> +  Processor for I/O control, RTC wake-up procedure management,
> +  and cooperation with CPU&PMC in power management.
> +
> +properties:
> +  compatible:
> +    enum:
> +      - sunplus,sp7021-iop
> +
> +  reg:
> +    items:
> +      - description: IOP registers regions
> +      - description: PMC registers regions
> +      - description: MOON0 registers regions
> +
> +  reg-names:
> +    items:
> +      - const: iop
> +      - const: iop_pmc
> +      - const: moon0
> +
> +  interrupts:
> +    items:
> +      - description: IOP_INT0. IOP to system Interrupt 0.
> +                     Sent by IOP to system RISC.
> +      - description: IOP_INT1. IOP to System Interrupt 1.
> +                     Sent by IOP to system RISC.
> +
> +  memory-region:
> +    maxItems: 1
> +
> +  iop-wakeup:
> +    description: Notify 8051 to wake up the Linux kernel.

What does that mean? What's the type? Does the standard 'wakeup-source' 
property not work here?

> +
> +required:
> +  - compatible
> +  - reg
> +  - reg-names
> +  - interrupts
> +  - memory-region
> +
> +additionalProperties: false
> +
> +examples:
> +  - |
> +    #include <dt-bindings/interrupt-controller/irq.h>
> +    #include <dt-bindings/interrupt-controller/arm-gic.h>
> +    #include <dt-bindings/gpio/gpio.h>
> +    iop: iop@9c000400 {
> +        compatible = "sunplus,sp7021-iop";
> +        reg = <0x9c000400 0x80>, <0x9c003100 0x80>, <0x9c000000 0x80>;
> +        reg-names = "iop", "iop_pmc", "moon0";
> +        interrupt-parent = <&intc>;
> +        interrupts = <41 IRQ_TYPE_LEVEL_HIGH>, <42 IRQ_TYPE_LEVEL_HIGH>;
> +        memory-region = <&iop_reserve>;
> +        pinctrl-names = "default";
> +        pinctrl-0 = <&iop_pins>;
> +        iop-wakeup = <&pctl 1 GPIO_ACTIVE_HIGH>;

That's not how the GPIO binding works.

> +    };
> +...
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 3b79fd4..071b5e6 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -17945,6 +17945,11 @@ L:	netdev@vger.kernel.org
>  S:	Maintained
>  F:	drivers/net/ethernet/dlink/sundance.c
>  
> +SUNPLUS IOP DRIVER
> +M:	Tony Huang <tonyhuang.sunplus@gmail.com>
> +S:	Maintained
> +F:	Documentation/devicetree/bindings/misc/sunplu-iop.yaml
> +
>  SUPERH
>  M:	Yoshinori Sato <ysato@users.sourceforge.jp>
>  M:	Rich Felker <dalias@libc.org>
> -- 
> 2.7.4
> 
>
Tony Huang 黃懷厚 Dec. 29, 2021, 1:57 a.m. UTC | #2
Dear Rob:

> Subject: Re: [PATCH v5 1/2] dt-binding: misc: Add iop yaml file for Sunplus
> SP7021
> 
> On Fri, Dec 24, 2021 at 04:35:55PM +0800, Tony Huang wrote:
> > Add iop yaml file for Sunplus SP7021
> >
> > Signed-off-by: Tony Huang <tonyhuang.sunplus@gmail.com>
> > ---
> > Changes in v5:
> > -Add iop-wakeup pin for 8051 to wake up the Linux kernel in shutdown
> mode.
> >
> >  .../devicetree/bindings/misc/sunplus-iop.yaml      | 72
> ++++++++++++++++++++++
> >  MAINTAINERS                                        |  5 ++
> >  2 files changed, 77 insertions(+)
> >  create mode 100644
> > Documentation/devicetree/bindings/misc/sunplus-iop.yaml
> >
> > diff --git a/Documentation/devicetree/bindings/misc/sunplus-iop.yaml
> > b/Documentation/devicetree/bindings/misc/sunplus-iop.yaml
> > new file mode 100644
> > index 0000000..fad0f50
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/misc/sunplus-iop.yaml
> > @@ -0,0 +1,72 @@
> > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) # Copyright
> > +(C) Sunplus Ltd. Co. 2021 %YAML 1.2
> > +---
> > +$id: http://devicetree.org/schemas/misc/sunplus-iop.yaml#
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: Sunplus IOP(8051) controller
> > +
> > +maintainers:
> > +  - Tony Huang <tonyhuang.sunplus@gmail.com>
> > +
> > +description: |
> > +  Processor for I/O control, RTC wake-up procedure management,
> > +  and cooperation with CPU&PMC in power management.
> > +
> > +properties:
> > +  compatible:
> > +    enum:
> > +      - sunplus,sp7021-iop
> > +
> > +  reg:
> > +    items:
> > +      - description: IOP registers regions
> > +      - description: PMC registers regions
> > +      - description: MOON0 registers regions
> > +
> > +  reg-names:
> > +    items:
> > +      - const: iop
> > +      - const: iop_pmc
> > +      - const: moon0
> > +
> > +  interrupts:
> > +    items:
> > +      - description: IOP_INT0. IOP to system Interrupt 0.
> > +                     Sent by IOP to system RISC.
> > +      - description: IOP_INT1. IOP to System Interrupt 1.
> > +                     Sent by IOP to system RISC.
> > +
> > +  memory-region:
> > +    maxItems: 1
> > +
> > +  iop-wakeup:
> > +    description: Notify 8051 to wake up the Linux kernel.
> 
> What does that mean? What's the type? Does the standard 'wakeup-source'
> property not work here?
> 

When mounting IOP (8051). We can assign a gpio pin to 8051.
When the linux kernel system is powered off. 8051 is always powered.
8051 can receive external signals according to this gpio pin .
8051 receives external signal through gpio pin. 8051 can power on linux kernel system.

> > +
> > +required:
> > +  - compatible
> > +  - reg
> > +  - reg-names
> > +  - interrupts
> > +  - memory-region
> > +
> > +additionalProperties: false
> > +
> > +examples:
> > +  - |
> > +    #include <dt-bindings/interrupt-controller/irq.h>
> > +    #include <dt-bindings/interrupt-controller/arm-gic.h>
> > +    #include <dt-bindings/gpio/gpio.h>
> > +    iop: iop@9c000400 {
> > +        compatible = "sunplus,sp7021-iop";
> > +        reg = <0x9c000400 0x80>, <0x9c003100 0x80>, <0x9c000000
> 0x80>;
> > +        reg-names = "iop", "iop_pmc", "moon0";
> > +        interrupt-parent = <&intc>;
> > +        interrupts = <41 IRQ_TYPE_LEVEL_HIGH>, <42
> IRQ_TYPE_LEVEL_HIGH>;
> > +        memory-region = <&iop_reserve>;
> > +        pinctrl-names = "default";
> > +        pinctrl-0 = <&iop_pins>;
> > +        iop-wakeup = <&pctl 1 GPIO_ACTIVE_HIGH>;
> 
> That's not how the GPIO binding works.
> 
> > +    };
> > +...
> > diff --git a/MAINTAINERS b/MAINTAINERS index 3b79fd4..071b5e6 100644
> > --- a/MAINTAINERS
> > +++ b/MAINTAINERS
> > @@ -17945,6 +17945,11 @@ L:	netdev@vger.kernel.org
> >  S:	Maintained
> >  F:	drivers/net/ethernet/dlink/sundance.c
> >
> > +SUNPLUS IOP DRIVER
> > +M:	Tony Huang <tonyhuang.sunplus@gmail.com>
> > +S:	Maintained
> > +F:	Documentation/devicetree/bindings/misc/sunplu-iop.yaml
> > +
> >  SUPERH
> >  M:	Yoshinori Sato <ysato@users.sourceforge.jp>
> >  M:	Rich Felker <dalias@libc.org>
> > --
> > 2.7.4
> >
> >