mbox series

[v5,0/7] gpio: siul2-s32g2: add initial GPIO driver

Message ID 20241101080614.1070819-1-andrei.stefanescu@oss.nxp.com (mailing list archive)
Headers show
Series gpio: siul2-s32g2: add initial GPIO driver | expand

Message

Andrei Stefanescu Nov. 1, 2024, 8:06 a.m. UTC
This patch series adds support for basic GPIO
operations(set, get, direction_output/input, set_config).

There are two SIUL2 hardware modules: SIUL2_0 and SIUL2_1.
However, this driver exports both as a single GPIO driver.
This is because the interrupt registers are located only
in SIUL2_1, even for GPIOs that are part of SIUL2_0.

There are two gaps in the GPIO ranges:
- 102-111(inclusive) are invalid
- 123-143(inclusive) are invalid

These will be excluded via the `gpio-reserved-ranges`
property.

Writing and reading GPIO values is done via the PGPDO/PGPDI
registers(Parallel GPIO Pad Data Output/Input) which are
16 bit registers, each bit corresponding to a GPIO.

Note that the PGPDO order is similar to a big-endian grouping
of two registers:
PGPDO1, PGPDO0, PGPDO3, PGPDO2, PGPDO5, PGPDO4, gap, PGPDO6.

I have other patches for this driver:
- interrupt support
- power management callbacks

which I plan to upstream after this series gets merged
in order to simplify the review process.

v5 -> v4
- fixed di_div error
- fixed dt-bindings error
- added Co-developed-by tags
- added new MFD driver nxp-siul2.c
- made the old pinctrl driver an MFD cell
- added the GPIO driver in the existing SIUL2 pinctrl one
- Switch from "devm_pinctrl_register" to
  "devm_pinctrl_register_and_init"

v4 -> v3
- removed useless parentheses
- added S32G3 fallback compatible
- fixed comment alignment
- fixed dt-bindings license
- fixed modpost: "__udivdi3"
- moved MAINTAINERS entry to have the new GPIO driver
  together with other files related to S32G

v3 -> v2
- fix dt-bindings schema id
- add maxItems to gpio-ranges
- removed gpio label from dt-bindings example
- added changelog for the MAINTAINERS commit and
  added separate entry for the SIUL2 GPIO driver
- added guard(raw_spinlock_irqsave) in
  'siul2_gpio_set_direction'
- updated the description for
  'devm_platform_get_and_ioremap_resource_byname'

v2 -> v1
dt-bindings:
- changed filename to match compatible
- fixed commit messages
- removed dt-bindings unnecessary properties descriptions
- added minItems for the interrupts property
driver:
- added depends on ARCH_S32 || COMPILE_TEST to Kconfig
- added select REGMAP_MMIO to Kconfig
- remove unnecessary include
- add of_node_put after `siul2_get_gpio_pinspec`
- removed inline from function definitions
- removed match data and moved the previous platdata
  definition to the top of the file to be visible
- replace bitmap_set/clear with __clear_bit/set_bit
  and devm_bitmap_zalloc with devm_kzalloc
- switched to gpiochip_generic_request/free/config
- fixed dev_err format for size_t reported by
  kernel test robot
- add platform_get_and_ioremap_resource_byname wrapper

Andrei Stefanescu (7):
  dt-bindings: mfd: add support for the NXP SIUL2 module
  mfd: nxp-siul2: add support for NXP SIUL2
  arm64: dts: s32g: make pinctrl part of mfd node
  pinctrl: s32: convert the driver into an mfd cell
  pinctrl: s32cc: change to "devm_pinctrl_register_and_init"
  pinctrl: s32cc: add driver for GPIO functionality
  MAINTAINERS: add MAINTAINER for NXP SIUL2 MFD driver

 .../devicetree/bindings/mfd/nxp,siul2.yaml    | 191 +++++++
 MAINTAINERS                                   |   2 +
 arch/arm64/boot/dts/freescale/s32g2.dtsi      |  26 +-
 arch/arm64/boot/dts/freescale/s32g3.dtsi      |  26 +-
 drivers/mfd/Kconfig                           |  12 +
 drivers/mfd/Makefile                          |   1 +
 drivers/mfd/nxp-siul2.c                       | 411 +++++++++++++++
 drivers/pinctrl/nxp/pinctrl-s32.h             |   1 +
 drivers/pinctrl/nxp/pinctrl-s32cc.c           | 498 ++++++++++++++----
 drivers/pinctrl/nxp/pinctrl-s32g2.c           |  23 +-
 include/linux/mfd/nxp-siul2.h                 |  55 ++
 11 files changed, 1086 insertions(+), 160 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/mfd/nxp,siul2.yaml
 create mode 100644 drivers/mfd/nxp-siul2.c
 create mode 100644 include/linux/mfd/nxp-siul2.h

Comments

Linus Walleij Nov. 1, 2024, 11:56 a.m. UTC | #1
On Fri, Nov 1, 2024 at 9:06 AM Andrei Stefanescu
<andrei.stefanescu@oss.nxp.com> wrote:

> Andrei Stefanescu (7):
>   dt-bindings: mfd: add support for the NXP SIUL2 module
>   mfd: nxp-siul2: add support for NXP SIUL2
>   arm64: dts: s32g: make pinctrl part of mfd node
>   pinctrl: s32: convert the driver into an mfd cell
>   pinctrl: s32cc: change to "devm_pinctrl_register_and_init"
>   pinctrl: s32cc: add driver for GPIO functionality
>   MAINTAINERS: add MAINTAINER for NXP SIUL2 MFD driver

How do you want to merge this?

Can the MFD and pinctrl parts be merged separately, or shall
it all go into MFD or all into pinctrl?

I can certainly merge it if Lee ACKs the MFD patch.

Yours,
Linus Walleij
Andrei Stefanescu Nov. 1, 2024, 12:10 p.m. UTC | #2
Hi Linus,

On 01/11/2024 13:56, Linus Walleij wrote:
> On Fri, Nov 1, 2024 at 9:06 AM Andrei Stefanescu
> <andrei.stefanescu@oss.nxp.com> wrote:
> 
>> Andrei Stefanescu (7):
>>   dt-bindings: mfd: add support for the NXP SIUL2 module
>>   mfd: nxp-siul2: add support for NXP SIUL2
>>   arm64: dts: s32g: make pinctrl part of mfd node
>>   pinctrl: s32: convert the driver into an mfd cell
>>   pinctrl: s32cc: change to "devm_pinctrl_register_and_init"
>>   pinctrl: s32cc: add driver for GPIO functionality
>>   MAINTAINERS: add MAINTAINER for NXP SIUL2 MFD driver
> 
> How do you want to merge this?
> 
> Can the MFD and pinctrl parts be merged separately, or shall
> it all go into MFD or all into pinctrl?
> 
> I can certainly merge it if Lee ACKs the MFD patch.

Thank you very much for the quick review! I am not sure which
tree to merge into. If possible, it would be great to have all
of them merged together.

I plan to send further patches to the GPIO driver so it would
be easier to have them all in one place.

Best regards,
Andrei

> 
> Yours,
> Linus Walleij