forked from marfrit/kernel-agent
patches: migrate remaining misc_patches/genbook into scope-tagged tree (closes #1)
Closes the migration started in #8. The 6 active ampere patches (pwm15, pwm-fan, RK806 power-controller, speaker, USB-C PD, lid switch) landed in #8 under soc/rockchip/rk3588/, module/coolpi-cm5/, and board/coolpi-cm5-genbook/. This commit migrates the remaining 3: * `0006 arm64 Kconfig: do not select HAVE_GCC_PLUGINS` → patches/arch/arm64/. NOT for upstream — local build workaround; README explains the proper fix is gcc-plugin-devel install. * `0009 Bluetooth: btrtl: make RTL_SEC_PROJ read non-fatal` → patches/driver/bluetooth/btrtl/. Benefits ampere (RTL8852BE) and boltzmann (same M.2 family). Cross-host driver/ scope. * `0010 gpio/drm/mfd/input/dts: fix suspend/resume and wakeup on RK3588` → SPLIT into 5 scope-tagged sub-patches as the issue required ("0010 split into ≥2 patches by scope"): - patches/driver/gpio/rockchip/0010a-gpio-rockchip-propagate-irq_set_wake-to-parent-GIC.patch - patches/driver/gpu/drm/bridge/analogix/0010b-drm-bridge-analogix-dp-disable-IRQ-before-clock-gating-in-suspend.patch - patches/driver/mfd/rk8xx/0010c-mfd-rk8xx-spi-add-PM-ops-and-shutdown-callback.patch - patches/driver/input/misc/0010d-input-rk805-pwrkey-register-wake-IRQ-via-dev_pm_set_wake_irq.patch - patches/board/coolpi-cm5-genbook/0010e-arm64-dts-rockchip-rk3588-coolpi-cm5-genbook-add-NPU-power-domain-and-touchpad-wakeup.patch The split is byte-identical to the original 0010 (verified on decompose-0010 branch in marfrit/linux-rk3588-marfrit — sha256 of the combined diff matches the monolithic 0010 commit). All 0010 sub-patches marked WIP in their README and explicitly NOT added to fleet/ampere.yaml includes — suspend/resume thread is still open and Markus hasn't decided the upstream-targeting shape. READMEs added at each new directory documenting per-patch context. Acceptance criteria from #1: [x] Each patch lives at narrowest correct scope [x] 0010 split into ≥2 patches by scope (5 sub-patches) [x] Per-host manifest for ampere references the right scopes + explicit includes (already #8) [ ] github.com/marfrit/misc_patches retained as historical mirror — Markus to decide [x] working-tree dirty state on boltzmann reconciled (decompose-0010 + ampere-minimal-devices branches captured) Generated-by: Claude Opus 4.7 <claude@reauktion.de>
This commit is contained in:
+66
@@ -0,0 +1,66 @@
|
||||
From 3798abbc26fe7ac7da5cf5253d964d299b48d300 Mon Sep 17 00:00:00 2001
|
||||
From: Markus Fritsche <mfritsche@localhost>
|
||||
Date: Thu, 16 Apr 2026 23:53:01 +0200
|
||||
Subject: [PATCH 1/9] gpio: rockchip: propagate irq_set_wake to parent GIC
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The Rockchip GPIO irqchip uses irq_gc_set_wake() which only tracks the
|
||||
wake state locally in gc->wake_active. It never calls irq_set_irq_wake()
|
||||
on the parent GIC interrupt for the GPIO bank. During suspend,
|
||||
suspend_device_irqs() disables all non-wakeup IRQs at the GIC level, so
|
||||
GPIO-based wakeup sources (RTC alarm, PMIC power key) can never reach
|
||||
the CPU — the GPIO controller detects the interrupt but the GIC blocks it.
|
||||
|
||||
Replace irq_gc_set_wake with rockchip_irq_set_wake that propagates the
|
||||
wake setting to the parent bank->irq via irq_set_irq_wake(). On failure,
|
||||
revert the local wake state via irq_gc_set_wake(!on) which handles
|
||||
gc->lock internally.
|
||||
|
||||
Generated-by: Claude Opus 4.6 <noreply@anthropic.com>
|
||||
Signed-off-by: Markus Fritsche <mfritsche@localhost>
|
||||
---
|
||||
drivers/gpio/gpio-rockchip.c | 19 ++++++++++++++++++-
|
||||
1 file changed, 18 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/gpio/gpio-rockchip.c b/drivers/gpio/gpio-rockchip.c
|
||||
index 0fff4a699f12..d3b874251efc 100644
|
||||
--- a/drivers/gpio/gpio-rockchip.c
|
||||
+++ b/drivers/gpio/gpio-rockchip.c
|
||||
@@ -483,6 +483,23 @@ static void rockchip_irq_relres(struct irq_data *d)
|
||||
gpiochip_relres_irq(&bank->gpio_chip, d->hwirq);
|
||||
}
|
||||
|
||||
+static int rockchip_irq_set_wake(struct irq_data *d, unsigned int on)
|
||||
+{
|
||||
+ struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d);
|
||||
+ struct rockchip_pin_bank *bank = gc->private;
|
||||
+ int ret;
|
||||
+
|
||||
+ ret = irq_gc_set_wake(d, on);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ ret = irq_set_irq_wake(bank->irq, on);
|
||||
+ if (ret)
|
||||
+ irq_gc_set_wake(d, !on);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
static void rockchip_irq_suspend(struct irq_data *d)
|
||||
{
|
||||
struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d);
|
||||
@@ -550,7 +567,7 @@ static int rockchip_interrupts_register(struct rockchip_pin_bank *bank)
|
||||
gc->chip_types[0].chip.irq_unmask = irq_gc_mask_clr_bit;
|
||||
gc->chip_types[0].chip.irq_enable = rockchip_irq_enable;
|
||||
gc->chip_types[0].chip.irq_disable = rockchip_irq_disable;
|
||||
- gc->chip_types[0].chip.irq_set_wake = irq_gc_set_wake;
|
||||
+ gc->chip_types[0].chip.irq_set_wake = rockchip_irq_set_wake;
|
||||
gc->chip_types[0].chip.irq_suspend = rockchip_irq_suspend;
|
||||
gc->chip_types[0].chip.irq_resume = rockchip_irq_resume;
|
||||
gc->chip_types[0].chip.irq_set_type = rockchip_irq_set_type;
|
||||
--
|
||||
2.54.0
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
# patches/driver/gpio/rockchip/
|
||||
|
||||
Rockchip GPIO controller (`drivers/gpio/gpio-rockchip.c`) patches.
|
||||
|
||||
## Patches
|
||||
|
||||
### `0010a-gpio-rockchip-propagate-irq_set_wake-to-parent-GIC.patch`
|
||||
|
||||
**WIP — sleep fixes not yet upstream-ready.** Do not include in fleet
|
||||
manifests until Markus closes the suspend/resume thread.
|
||||
|
||||
The Rockchip GPIO irqchip uses `irq_gc_set_wake()` which only tracks
|
||||
the wake state locally in `gc->wake_active`. It never calls
|
||||
`irq_set_irq_wake()` on the parent GIC interrupt for the GPIO bank.
|
||||
During suspend, `suspend_device_irqs()` disables all non-wakeup IRQs
|
||||
at the GIC level, so GPIO-based wakeup sources (RTC alarm, PMIC power
|
||||
key) can never reach the CPU — the GPIO controller detects the
|
||||
interrupt but the GIC blocks it.
|
||||
|
||||
This patch replaces `irq_gc_set_wake` with `rockchip_irq_set_wake`
|
||||
that propagates the wake setting to the parent `bank->irq` via
|
||||
`irq_set_irq_wake()`.
|
||||
|
||||
Source: split from `github.com/marfrit/misc_patches/genbook/kernel/0010`
|
||||
(the monolithic "gpio/drm/mfd/input/dts: fix suspend/resume and wakeup
|
||||
on RK3588" patch). Split commits live on `decompose-0010` branch in
|
||||
`marfrit/linux-rk3588-marfrit`.
|
||||
|
||||
Sister patches (also from 0010):
|
||||
- `patches/driver/gpu/drm/bridge/analogix/0010b-…` (analogix-dp IRQ)
|
||||
- `patches/driver/mfd/rk8xx/0010c-…` (rk8xx-spi PM ops)
|
||||
- `patches/driver/input/misc/0010d-…` (rk805-pwrkey wake-irq)
|
||||
- `patches/board/coolpi-cm5-genbook/0010e-…` (DTS: NPU PD + touchpad wakeup-source)
|
||||
Reference in New Issue
Block a user