All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: patches@lists.linux.dev, stable@vger.kernel.org
Cc: Biju Das <biju.das.jz@bp.renesas.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Geert Uytterhoeven <geert+renesas@glider.be>,
	Sasha Levin <sashal@kernel.org>,
	linux-kernel@vger.kernel.org
Subject: [PATCH AUTOSEL 6.16 49/85] irqchip/renesas-rzv2h: Enable SKIP_SET_WAKE and MASK_ON_SUSPEND
Date: Sun,  3 Aug 2025 20:22:58 -0400	[thread overview]
Message-ID: <20250804002335.3613254-49-sashal@kernel.org> (raw)
In-Reply-To: <20250804002335.3613254-1-sashal@kernel.org>

From: Biju Das <biju.das.jz@bp.renesas.com>

[ Upstream commit de2942828e7670526289f098df7e50b112e8ff1e ]

The interrupt controller found on RZ/G3E doesn't provide any facility to
configure the wakeup sources. That's the reason why the driver lacks the
irq_set_wake() callback for the interrupt chip.

But this prevent to properly enter power management states like "suspend to
idle".

Enable the flags IRQCHIP_SKIP_SET_WAKE and IRQCHIP_MASK_ON_SUSPEND so the
interrupt suspend logic can handle the chip correctly.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/all/20250701105923.52151-1-biju.das.jz@bp.renesas.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
---

LLM Generated explanations, may be completely bogus:

**Backport Status: YES**

This commit should be backported to stable kernel trees. Here's my
extensive analysis:

## Summary
This commit fixes a real bug where the Renesas RZ/G3E interrupt
controller prevents the system from properly entering power management
states like "suspend to idle" due to missing irqchip flags.

## Detailed Analysis

### 1. **Bug Fix Nature**
The commit clearly fixes a functional bug as stated in the commit
message:
- "But this prevent to properly enter power management states like
  'suspend to idle'"
- The interrupt controller lacks an `irq_set_wake()` callback, which is
  necessary for proper suspend/resume functionality

### 2. **Small and Contained Change**
The code change is minimal and well-contained:
```c
.flags = IRQCHIP_SET_TYPE_MASKED,
```
changed to:
```c
.flags = IRQCHIP_MASK_ON_SUSPEND |
         IRQCHIP_SET_TYPE_MASKED |
         IRQCHIP_SKIP_SET_WAKE,
```

This is a simple addition of two flags to the interrupt chip structure.

### 3. **Clear Understanding of Flags**
From the kernel documentation in include/linux/irq.h:
- **IRQCHIP_MASK_ON_SUSPEND**: "Mask non wake irqs in the suspend path"
  - This ensures interrupts that shouldn't wake the system are properly
  masked during suspend
- **IRQCHIP_SKIP_SET_WAKE**: "Skip chip.irq_set_wake(), for this irq
  chip" - This tells the kernel to skip calling the non-existent
  irq_set_wake() callback

### 4. **Pattern Consistency**
Looking at the similar Renesas driver (irq-renesas-rzg2l.c:446-448), we
can see the same flags are used:
```c
.flags = IRQCHIP_MASK_ON_SUSPEND |
         IRQCHIP_SET_TYPE_MASKED |
         IRQCHIP_SKIP_SET_WAKE,
```
This shows it's a well-established pattern for Renesas interrupt
controllers that lack wakeup source configuration.

### 5. **No Side Effects**
The change only adds flags that:
- Enable proper masking of interrupts during suspend (preventing
  spurious interrupts)
- Tell the kernel to skip calling a non-existent function
- No functional changes beyond fixing the suspend issue
- No API changes or new features

### 6. **Affects Users**
This bug directly affects users trying to use power management features
on RZ/G3E hardware. Without this fix, the system cannot properly enter
suspend states, which impacts:
- Power consumption
- Battery life (on battery-powered devices)
- System reliability during suspend/resume cycles

### 7. **Low Risk**
The change has minimal risk of regression because:
- It only adds standard irqchip flags that are well-tested in the kernel
- The same flags are used in other similar drivers
- It doesn't modify any existing logic, just adds proper flag
  configuration
- The flags only affect suspend/resume paths, not normal operation

### 8. **Driver Maturity**
While this is a relatively new driver (added in 2024), the fix addresses
a clear oversight in the initial implementation. The driver is already
in mainline, so systems using this hardware need this fix for proper
operation.

## Conclusion
This commit meets all the criteria for stable backporting:
- Fixes a real bug that affects users
- Minimal, well-understood change
- No architectural changes or new features
- Low risk of regression
- Follows established patterns in similar drivers

The fix enables proper power management functionality on affected
hardware, which is important for system operation and user experience.

 drivers/irqchip/irq-renesas-rzv2h.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/irqchip/irq-renesas-rzv2h.c b/drivers/irqchip/irq-renesas-rzv2h.c
index 69b32c19e8ff..76fb1354e2aa 100644
--- a/drivers/irqchip/irq-renesas-rzv2h.c
+++ b/drivers/irqchip/irq-renesas-rzv2h.c
@@ -427,7 +427,9 @@ static const struct irq_chip rzv2h_icu_chip = {
 	.irq_retrigger		= irq_chip_retrigger_hierarchy,
 	.irq_set_type		= rzv2h_icu_set_type,
 	.irq_set_affinity	= irq_chip_set_affinity_parent,
-	.flags			= IRQCHIP_SET_TYPE_MASKED,
+	.flags			= IRQCHIP_MASK_ON_SUSPEND |
+				  IRQCHIP_SET_TYPE_MASKED |
+				  IRQCHIP_SKIP_SET_WAKE,
 };
 
 static int rzv2h_icu_alloc(struct irq_domain *domain, unsigned int virq, unsigned int nr_irqs,
-- 
2.39.5


  parent reply	other threads:[~2025-08-04  0:25 UTC|newest]

Thread overview: 95+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-04  0:22 [PATCH AUTOSEL 6.16 01/85] usb: xhci: print xhci->xhc_state when queue_command failed Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 02/85] staging: gpib: Add init response codes for new ni-usb-hs+ Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 03/85] selftests/kexec: fix test_kexec_jump build Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 04/85] platform/x86/amd: pmc: Add Lenovo Yoga 6 13ALC6 to pmc quirk list Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 05/85] cpufreq: CPPC: Mark driver with NEED_UPDATE_LIMITS flag Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 06/85] selftests/futex: Define SYS_futex on 32-bit architectures with 64-bit time_t Sasha Levin
2025-08-04  0:22   ` Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 07/85] usb: typec: ucsi: psy: Set current max to 100mA for BC 1.2 and Default Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 08/85] bus: mhi: host: pci_generic: Add Telit FN990B40 modem support Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 09/85] regulator: core: repeat voltage setting request for stepped regulators Sasha Levin
2025-08-04 11:36   ` Mark Brown
2025-08-16 13:09     ` Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 10/85] bus: mhi: host: pci_generic: Disable runtime PM for QDU100 Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 11/85] usb: xhci: Avoid showing warnings for dying controller Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 12/85] usb: xhci: Set avg_trb_len = 8 for EP0 during Address Device Command Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 13/85] usb: xhci: Avoid showing errors during surprise removal Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 14/85] firmware: qcom: scm: initialize tzmem before marking SCM as available Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 15/85] soc: qcom: rpmh-rsc: Add RSC version 4 support Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 16/85] ACPI: APEI: send SIGBUS to current task if synchronous memory error not recovered Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 17/85] remoteproc: imx_rproc: skip clock enable when M-core is managed by the SCU Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 18/85] binder: Fix selftest page indexing Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 19/85] gpio: loongson-64bit: Extend GPIO irq support Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 20/85] usb: typec: ucsi: Add poll_cci operation to cros_ec_ucsi Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 21/85] usb: typec: tcpm/tcpci_maxim: fix irq wake usage Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 22/85] pmdomain: ti: Select PM_GENERIC_DOMAINS Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 23/85] gpio: wcd934x: check the return value of regmap_update_bits() Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 24/85] cpufreq: Exit governor when failed to start old governor Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 25/85] cpufreq: intel_pstate: Add Granite Rapids support in no-HWP mode Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 26/85] ARM: rockchip: fix kernel hang during smp initialization Sasha Levin
2025-08-04  0:22   ` Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 27/85] PM / devfreq: governor: Replace sscanf() with kstrtoul() in set_freq_store() Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 28/85] EDAC/synopsys: Clear the ECC counters on init Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 29/85] ASoC: soc-dapm: set bias_level if snd_soc_dapm_set_bias_level() was successed Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 30/85] thermal/drivers/qcom-spmi-temp-alarm: Enable stage 2 shutdown when required Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 31/85] tools/nolibc: define time_t in terms of __kernel_old_time_t Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 32/85] iio: adc: ad_sigma_delta: don't overallocate scan buffer Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 33/85] gpio: tps65912: check the return value of regmap_update_bits() Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 34/85] mfd: tps6594: Add TI TPS652G1 support Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 35/85] ARM: tegra: Use I/O memcpy to write to IRAM Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 36/85] tools/build: Fix s390(x) cross-compilation with clang Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 37/85] selftests: tracing: Use mutex_unlock for testing glob filter Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 38/85] ACPI: PRM: Reduce unnecessary printing to avoid user confusion Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 39/85] firmware: arm_scmi: power_control: Ensure SCMI_SYSPOWER_IDLE is set early during resume Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 40/85] firmware: tegra: Fix IVC dependency problems Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 41/85] pwm: sifive: Fix PWM algorithm and clarify inverted compare behavior Sasha Levin
2025-08-04  0:22   ` Sasha Levin
2025-08-04 10:42   ` Uwe Kleine-König
2025-08-04 10:42     ` Uwe Kleine-König
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 42/85] ALSA: hda: add MODULE_FIRMWARE for cs35l41/cs35l56 Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 43/85] PM: runtime: Clear power.needs_force_resume in pm_runtime_reinit() Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 44/85] thermal: sysfs: Return ENODATA instead of EAGAIN for reads Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 45/85] PM: sleep: console: Fix the black screen issue Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 46/85] ACPI: processor: fix acpi_object initialization Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 47/85] mmc: sdhci-msm: Ensure SD card power isn't ON when card removed Sasha Levin
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 48/85] ACPI: APEI: GHES: add TAINT_MACHINE_CHECK on GHES panic path Sasha Levin
2025-08-04  0:22 ` Sasha Levin [this message]
2025-08-04  0:22 ` [PATCH AUTOSEL 6.16 50/85] selftests: vDSO: vdso_test_getrandom: Always print TAP header Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 51/85] pps: clients: gpio: fix interrupt handling order in remove path Sasha Levin
2025-08-04  6:55   ` Rodolfo Giometti
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 52/85] reset: brcmstb: Enable reset drivers for ARCH_BCM2835 Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 53/85] ASoC: SDCA: Add flag for unused IRQs Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 54/85] x86/sev/vc: Fix EFI runtime instruction emulation Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 55/85] char: misc: Fix improper and inaccurate error code returned by misc_init() Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 56/85] mei: bus: Check for still connected devices in mei_cl_bus_dev_release() Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 57/85] mmc: rtsx_usb_sdmmc: Fix error-path in sd_set_power_mode() Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 58/85] mmc: sdhci-esdhc-imx: Don't change pinctrl in suspend if wakeup source Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 59/85] platform/chrome: cros_ec_sensorhub: Retries when a sensor is not ready Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 60/85] ALSA: hda: Handle the jack polling always via a work Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 61/85] ALSA: hda: Disable jack polling at shutdown Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 62/85] EDAC/ie31200: Enable support for Core i5-14600 and i7-14700 Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 63/85] x86/bugs: Avoid warning when overriding return thunk Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 64/85] x86/bugs: Avoid AUTO after the select step in the retbleed mitigation Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 65/85] ASoC: hdac_hdmi: Rate limit logging on connection and disconnection Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 66/85] ALSA: intel8x0: Fix incorrect codec index usage in mixer for ICH4 Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 67/85] irqchip/mips-gic: Allow forced affinity Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 68/85] ASoC: SOF: topology: Parse the dapm_widget_tokens in case of DSPless mode Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 69/85] tty: serial: fix print format specifiers Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 70/85] ASoC: core: Check for rtd == NULL in snd_soc_remove_pcm_runtime() Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 71/85] usb: typec: intel_pmc_mux: Defer probe if SCU IPC isn't present Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 72/85] usb: core: usb_submit_urb: downgrade type check Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 73/85] usb: typec: fusb302: fix scheduling while atomic when using virtio-gpio Sasha Levin
2025-08-04 18:07   ` Sebastian Reichel
2025-08-16 13:09     ` Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 74/85] usb: dwc3: xilinx: add shutdown callback Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 75/85] pm: cpupower: Fix the snapshot-order of tsc,mperf, clock in mperf_stop() Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 76/85] imx8m-blk-ctrl: set ISI panic write hurry level Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 77/85] soc: qcom: mdt_loader: Actually use the e_phoff Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 78/85] platform/x86: thinkpad_acpi: Handle KCOV __init vs inline mismatches Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 79/85] platform/chrome: cros_ec_typec: Defer probe on missing EC parent Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 80/85] ALSA: hda/ca0132: Fix buffer overflow in add_tuning_control Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 81/85] ALSA: pcm: Rewrite recalculate_boundary() to avoid costly loop Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 82/85] ALSA: usb-audio: Avoid precedence issues in mixer_quirks macros Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 83/85] iio: adc: ad7768-1: Ensure SYNC_IN pulse minimum timing requirement Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 84/85] ASoC: codecs: rt5640: Retry DEVICE_ID verification Sasha Levin
2025-08-04  0:23 ` [PATCH AUTOSEL 6.16 85/85] ASoC: qcom: use drvdata instead of component to keep id Sasha Levin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250804002335.3613254-49-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=biju.das.jz@bp.renesas.com \
    --cc=geert+renesas@glider.be \
    --cc=linux-kernel@vger.kernel.org \
    --cc=patches@lists.linux.dev \
    --cc=stable@vger.kernel.org \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.