Re: [PATCH v8 0/5] riscv: spacemit: add gpio support for K1 SoC

From: Yixun Lan
Date: Mon Apr 14 2025 - 22:32:49 EST


Hi Bartosz,
I think this version is good to go, if you agree,
can you take patch [1,2 / 5] through gpio tree?

Hi Palmer,
I believe the change to riscv's defconfig file should
go via riscv tree?

thanks

On 07:31 Sat 12 Apr , Yixun Lan wrote:
> The gpio controller of K1 support basic GPIO functions,
> which capable of enabling as input, output. It can also be used
> as GPIO interrupt which able to detect rising edge, falling edge,
> or both. There are four GPIO ports, each consisting of 32 pins and
> has indepedent register sets, while still sharing IRQ line and clocks.
> The GPIO controller request the two clock sources from APBC block.
>
> Due to first three GPIO ports has interleave register settings, some
> resources (IRQ, clock) are shared by all pins.
>
> The GPIO docs of K1 SoC can be found here, chapter 16.4 GPIO [1]
>
> This patch series has been tested on Bananapi-F3 board,
> with following GPIO cases passed:
> 1) gpio input
> 2) gpio output - set to high, low
> 3) gpio interrupt - rising trigger, falling trigger, both edge trigger
>
> This version should resolve DT related concern in V4, and register each bank as
> indepedent gpio chip in driver, no more sub children gpio DT node needed.
>
> Please notice in this version, the reset property is added, but optional.
> as I see no need to activate it in driver, instead I suspect it may
> break cases if bootloader did some prerequisite settings, so I'm leaving
> it for future implementation if really necessary.
>
> The DT part (patches 4, 5) has no clock property populated which result
> some DT warnings, I will fix it and re-spin the DT part once clock driver merged,
> so it's included here for completeness only, please ignore these warnings.
>
> Link: https://developer.spacemit.com/documentation?token=Rn9Kw3iFHirAMgkIpTAcV2Arnkf [1]
> Link: https://lore.kernel.org/all/20240730-k1-01-basic-dt-v5-0-98263aae83be@xxxxxxxxxx [2]
> Link: https://lore.kernel.org/all/20241016-02-k1-pinctrl-v5-0-03d395222e4f@xxxxxxxxxx/ [3]
> Link: https://lore.kernel.org/all/20250218-gpio-ranges-fourcell-v1-0-b1f3db6c8036@xxxxxxxxxx [4]
> Link: https://lore.kernel.org/all/20250225-gpio-ranges-fourcell-v3-0-860382ba4713@xxxxxxxxxx [5]
> Signed-off-by: Yixun Lan <dlan@xxxxxxxxxx>
> ---
> Changes in v8:
> - rebased to v6.15-rc1
> - adjust dt-binding/code to request clocks
> - add reset property
> - call irq_domain_update_bus_token() to support threecells interrupt mode
> - use devm_platform_ioremap_resource(), so drop "struct resource"
> - fix Kconfig
> - select GPIO_GENERIC as calling bgpio_init()
> - change to tristate, make it possible to build as module
> - adjust defconfig to enable gpio
> - Link to v7: https://lore.kernel.org/r/20250226-03-k1-gpio-v7-0-be489c4a609b@xxxxxxxxxx
>
> Changes in v7:
> - dt-binding: fix 80 column, drop unneeded dependencies
> - tested with patch v3 of "gpiolib: of: Handle threecell gpios" [5]
> - collect review tags
> - Link to v6: https://lore.kernel.org/r/20250223-03-k1-gpio-v6-0-db2e4adeef1c@xxxxxxxxxx
>
> Changes in v6:
> - rebase to threecell gpio patch which proposed by LinusW at [4],
> drop unneeded *xlate(), *add_pin_range() function
> - add SPACEMIT prefix to macro
> - adjust register comments
> - drop 'index' member, instead calculate from offset
> - add IRQCHIP_SKIP_SET_WAKE as gpio doesn't support irq wake up
> - drop #ifdef CONFIG_OF_GPIO
> - move interrupt mask disabling/enabling into irq_*mask()
> - Link to v5: https://lore.kernel.org/r/20250217-03-k1-gpio-v5-0-2863ec3e7b67@xxxxxxxxxx
>
> Changes in v5:
> - export add_pin_range() from gpio core, support to add custom version
> - change to 3 gpio cells, model to <bank number>, <bank offset>, <gpio flag>
> - fold children DT nodes into parent
> - Link to v4: https://lore.kernel.org/r/20250121-03-k1-gpio-v4-0-4641c95c0194@xxxxxxxxxx
>
> Changes in v4:
> - gpio: re-construct gpio as four independent ports, also leverage gpio mmio API
> - gpio interrupt: convert to generic gpio irqchip
> - Link to v3: https://lore.kernel.org/r/20241225-03-k1-gpio-v3-0-27bb7b441d62@xxxxxxxxxx
>
> Changes in v3:
> - dt: drop ranges, interrupt-names property
> - Link to v2: https://lore.kernel.org/r/20241219-03-k1-gpio-v2-0-28444fd221cd@xxxxxxxxxx
>
> Changes in v2:
> - address dt-bindings comments, simplify example
> - rebase to 6.13-rc3
> - Link to v1: https://lore.kernel.org/r/20240904-03-k1-gpio-v1-0-6072ebeecae0@xxxxxxxxxx
>
> ---
> Yixun Lan (5):
> dt-bindings: gpio: spacemit: add support for K1 SoC
> gpio: spacemit: add support for K1 SoC
> riscv: defconfig: spacemit: enable gpio support for K1 SoC
> riscv: dts: spacemit: add gpio support for K1 SoC
> riscv: dts: spacemit: add gpio LED for system heartbeat
>
> .../devicetree/bindings/gpio/spacemit,k1-gpio.yaml | 96 +++++++
> arch/riscv/boot/dts/spacemit/k1-bananapi-f3.dts | 11 +
> arch/riscv/boot/dts/spacemit/k1-pinctrl.dtsi | 3 +
> arch/riscv/boot/dts/spacemit/k1.dtsi | 15 ++
> arch/riscv/configs/defconfig | 1 +
> drivers/gpio/Kconfig | 9 +
> drivers/gpio/Makefile | 1 +
> drivers/gpio/gpio-spacemit-k1.c | 293 +++++++++++++++++++++
> 8 files changed, 429 insertions(+)
> ---
> base-commit: 0af2f6be1b4281385b618cb86ad946eded089ac8
> change-id: 20240828-03-k1-gpio-61bf92f9032c
>
> Best regards,
> --
> Yixun Lan
>

--
Yixun Lan (dlan)
Gentoo Linux Developer
GPG Key ID AABEFD55