.../pinctrl/nxp,s32g2-siul2-pinctrl.yaml | 107 ++- arch/arm64/boot/dts/freescale/s32g2.dtsi | 26 +- arch/arm64/boot/dts/freescale/s32g3.dtsi | 26 +- drivers/pinctrl/nxp/pinctrl-s32.h | 15 +- drivers/pinctrl/nxp/pinctrl-s32cc.c | 646 ++++++++++++++---- drivers/pinctrl/nxp/pinctrl-s32g2.c | 25 +- 6 files changed, 707 insertions(+), 138 deletions(-)
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
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.
v9 -> v8
- remove the SIUL2 syscon child nodes from the
device tree and DT bindings
- remove syscon child handling from the MFD
and pinctrl drivers
- remove the MFD driver and use a single monolithic
pinctrl/gpio/irqchip driver
- add a new compatible for the pinctrl+gpio binding
while keeping the previous compatible for the legacy
pinctrl-only binding
- update bindings to include the PGPDO/PGPDI and
IRQ register regions in the DT node for the
pinctrl/gpio/irq binding
- add IRQ-related entries in the bindings to
document the intended hierarchy; IRQ support
itself will be added in a future patch series
- update DT nodes to match the new hierarchy and
compatible scheme
- fix dtb warnings
- reorder commits: bug fixes, API changes, DT bindings,
driver implementation, DTS changes
- split commits further to separate minor
style-only adjustments
v8 -> v7
- remove all ': true' lines from properties in dt bindings
- remove NVMEM MFD cell from SIUL2 in dtsi
- remove NVMEM driver and configs
- expose SoC information via syscon cells SIUL2_0
and SIUL2_1 in MFD driver
- add SIUL2_0 and SIUL2_1 syscon nodes in dtsi
- add patternProperties for "^siul2_[0-1]$" for syscon nodes
- update example to include syscon cells with proper format
- remove `reg` property from pinctrl node in dt binding
- update Kconfig help text to reflect new syscon structure
instead of NVMEM for SoC information
- squash deprecated SIUL2 pinctrl binding with new MFD binding
- dropped "nxp,s32g3-siul2" from MFD driver match table
- fixed commit messages
- fixed dtb warnings
v7 -> v6
- fixed MAINTAINERS wrong file path
- add unevaluatedProperties, change siul2 node name, remove
jtag_pins label in the device tree schema
- change compatible definition in schema
- change node name in dtsi
- mentioned binding deprecation in commit messages
- split mfd cell conversion commit in two: one for the
previous refactoring, one for the mfd cell conversion
- removed Acked-by: Linus Walleij from commit:
"pinctrl: s32: convert the driver into an mfd cell"
because of changes to that commit
- deprecate the nxp,s32g2-siul2-pinctrl binding
- add NVMEM MFD cell for SIUL2
- made the GPIO driver not export invalid pins
(there are some gaps 102-111, 123-143)
- removed the need for gpio-reserved-ranges
- force initialized pinctrl_desc->num_custom_params to 0
v6 -> v5
- removed description for reg in the dt-bindings and added
maxItems
- dropped label for example in the dt-bindings
- simplified the example in the dt-bindings
- changed dt-bindings filename to nxp,s32g2-siul2.yaml
- changed title in the dt-bindings
- dropped minItmes from gpio-ranges/gpio-reserved-ranges
and added maxItems to gpio-reserved-ranges
- added required block for -grp[0-9]$ nodes
- switch to using "" as quotes
- kernel test robot: fixed frame sizes, added description
for reg_name, fixed typo in gpio_configs_lock, removed
uninitialized ret variable usage
- ordered includes in nxp-siul2.c, switched to dev-err-probe
added a mention that other commits will add nvmem functionality
to the mfd driver
- switched spin_lock_irqsave to scoped_guard statement
- switched dev_err to dev_err_probe in pinctrl-s32cc in places
reached during the probing part
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 (2):
pinctrl: s32cc: change to "devm_pinctrl_register_and_init"
pinctrl: s32cc: implement GPIO functionality
Khristine Andreea Barbulescu (5):
pinctrl: s32cc: use dev_err_probe() and improve error messages
pinctrl: s32cc: add/fix some comments
pinctrl: s32cc: remove inline specifiers
dt-bindings: pinctrl: s32g2-siul2: describe GPIO and EIRQ resources
arm64: dts: s32g: describe GPIO and EIRQ resources in SIUL2 pinctrl
node
.../pinctrl/nxp,s32g2-siul2-pinctrl.yaml | 107 ++-
arch/arm64/boot/dts/freescale/s32g2.dtsi | 26 +-
arch/arm64/boot/dts/freescale/s32g3.dtsi | 26 +-
drivers/pinctrl/nxp/pinctrl-s32.h | 15 +-
drivers/pinctrl/nxp/pinctrl-s32cc.c | 646 ++++++++++++++----
drivers/pinctrl/nxp/pinctrl-s32g2.c | 25 +-
6 files changed, 707 insertions(+), 138 deletions(-)
--
2.34.1
Hi, Thank you to send these patches upstream On Mon, May 4, 2026 at 3:12 PM Khristine Andreea Barbulescu <khristineandreea.barbulescu@oss.nxp.com> wrote: > > 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. > With gpioinfo I see > There are two gaps in the GPIO ranges: > - 102-111(inclusive) are invalid line 102: unnamed input consumer=kernel line 103: unnamed input consumer=kernel line 104: unnamed input consumer=kernel line 105: unnamed input consumer=kernel line 106: unnamed input consumer=kernel line 107: unnamed input consumer=kernel line 108: unnamed input consumer=kernel line 109: unnamed input consumer=kernel line 110: unnamed input consumer=kernel line 111: unnamed input consumer=kernel > - 123-143(inclusive) are invalid > line 123: "PH_11" input consumer="kernel" line 124: "PH_12" input consumer="kernel" line 125: "PH_13" input consumer="kernel" line 126: "PH_14" input consumer="kernel" line 127: "PH_15" input consumer="kernel" line 128: "PI_00" input consumer="kernel" line 129: "PI_01" input consumer="kernel" line 130: "PI_02" input consumer="kernel" line 131: "PI_03" input consumer="kernel" line 132: "PI_04" input consumer="kernel" line 133: "PI_05" input consumer="kernel" line 134: "PI_06" input consumer="kernel" line 135: "PI_07" input consumer="kernel" line 136: "PI_08" input consumer="kernel" line 137: "PI_09" input consumer="kernel" line 138: "PI_10" input consumer="kernel" line 139: "PI_11" input consumer="kernel" line 140: "PI_12" input consumer="kernel" line 141: "PI_13" input consumer="kernel" line 142: "PI_14" input consumer="kernel" line 143: "PI_15" input consumer="kernel" > 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 can also read the correct values from an input pin connected to a external switch. ]# gpioget "PB_05" "PB_05"=inactive ]# gpioget "PB_05" "PB_05"=active # gpiodetect gpiochip0 [4009c240.pinctrl] (191 lines) gpiochip1 [0-0022] (24 lines) So, Tested-by: Enric Balletbo i Serra <eballetb@redhat.com> > v9 -> v8 > - remove the SIUL2 syscon child nodes from the > device tree and DT bindings > - remove syscon child handling from the MFD > and pinctrl drivers > - remove the MFD driver and use a single monolithic > pinctrl/gpio/irqchip driver > - add a new compatible for the pinctrl+gpio binding > while keeping the previous compatible for the legacy > pinctrl-only binding > - update bindings to include the PGPDO/PGPDI and > IRQ register regions in the DT node for the > pinctrl/gpio/irq binding > - add IRQ-related entries in the bindings to > document the intended hierarchy; IRQ support > itself will be added in a future patch series > - update DT nodes to match the new hierarchy and > compatible scheme > - fix dtb warnings > - reorder commits: bug fixes, API changes, DT bindings, > driver implementation, DTS changes > - split commits further to separate minor > style-only adjustments > > v8 -> v7 > - remove all ': true' lines from properties in dt bindings > - remove NVMEM MFD cell from SIUL2 in dtsi > - remove NVMEM driver and configs > - expose SoC information via syscon cells SIUL2_0 > and SIUL2_1 in MFD driver > - add SIUL2_0 and SIUL2_1 syscon nodes in dtsi > - add patternProperties for "^siul2_[0-1]$" for syscon nodes > - update example to include syscon cells with proper format > - remove `reg` property from pinctrl node in dt binding > - update Kconfig help text to reflect new syscon structure > instead of NVMEM for SoC information > - squash deprecated SIUL2 pinctrl binding with new MFD binding > - dropped "nxp,s32g3-siul2" from MFD driver match table > - fixed commit messages > - fixed dtb warnings > > v7 -> v6 > - fixed MAINTAINERS wrong file path > - add unevaluatedProperties, change siul2 node name, remove > jtag_pins label in the device tree schema > - change compatible definition in schema > - change node name in dtsi > - mentioned binding deprecation in commit messages > - split mfd cell conversion commit in two: one for the > previous refactoring, one for the mfd cell conversion > - removed Acked-by: Linus Walleij from commit: > "pinctrl: s32: convert the driver into an mfd cell" > because of changes to that commit > - deprecate the nxp,s32g2-siul2-pinctrl binding > - add NVMEM MFD cell for SIUL2 > - made the GPIO driver not export invalid pins > (there are some gaps 102-111, 123-143) > - removed the need for gpio-reserved-ranges > - force initialized pinctrl_desc->num_custom_params to 0 > > v6 -> v5 > - removed description for reg in the dt-bindings and added > maxItems > - dropped label for example in the dt-bindings > - simplified the example in the dt-bindings > - changed dt-bindings filename to nxp,s32g2-siul2.yaml > - changed title in the dt-bindings > - dropped minItmes from gpio-ranges/gpio-reserved-ranges > and added maxItems to gpio-reserved-ranges > - added required block for -grp[0-9]$ nodes > - switch to using "" as quotes > - kernel test robot: fixed frame sizes, added description > for reg_name, fixed typo in gpio_configs_lock, removed > uninitialized ret variable usage > - ordered includes in nxp-siul2.c, switched to dev-err-probe > added a mention that other commits will add nvmem functionality > to the mfd driver > - switched spin_lock_irqsave to scoped_guard statement > - switched dev_err to dev_err_probe in pinctrl-s32cc in places > reached during the probing part > > 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 (2): > pinctrl: s32cc: change to "devm_pinctrl_register_and_init" > pinctrl: s32cc: implement GPIO functionality > > Khristine Andreea Barbulescu (5): > pinctrl: s32cc: use dev_err_probe() and improve error messages > pinctrl: s32cc: add/fix some comments > pinctrl: s32cc: remove inline specifiers > dt-bindings: pinctrl: s32g2-siul2: describe GPIO and EIRQ resources > arm64: dts: s32g: describe GPIO and EIRQ resources in SIUL2 pinctrl > node > > .../pinctrl/nxp,s32g2-siul2-pinctrl.yaml | 107 ++- > arch/arm64/boot/dts/freescale/s32g2.dtsi | 26 +- > arch/arm64/boot/dts/freescale/s32g3.dtsi | 26 +- > drivers/pinctrl/nxp/pinctrl-s32.h | 15 +- > drivers/pinctrl/nxp/pinctrl-s32cc.c | 646 ++++++++++++++---- > drivers/pinctrl/nxp/pinctrl-s32g2.c | 25 +- > 6 files changed, 707 insertions(+), 138 deletions(-) > > -- > 2.34.1 >
© 2016 - 2026 Red Hat, Inc.