From nobody Mon Jun 8 08:31:43 2026 Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BE7ECB672 for ; Thu, 4 Jun 2026 18:25:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.15 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780597520; cv=none; b=FTfWiAO35cbaPYc58i7jPK+XtLF59I0g4OM1xyxwLpxUtEIRAMchfS55CSFEgKcr+c5DGIoJ0GMMjtmOzmQE0swzdE1oFsBKV3iok846XR3PAW6/c1nTzg+hwS2K/0KJu1FlvnX8WMqJu6jZdyEpkgwVj9tA18DODBrJeLc1WiY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780597520; c=relaxed/simple; bh=JBTw7cqm+2f0Xlvmt0yBgqYgxUICigDLsFctix3asac=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Q3vdwYz0XHUmsB3LE4V9HpMejHNbml3KaB96LP8kMcPVsckD0yNj8UaTz6eMZPyj6i6/5LAawzCbBzXOIeQh/fVW+U5uXTrm6eWJw39BhupKyKdePj+ton2IzYcX3idR84KEoa/BkO0GDtrca/30jYQ+A7jLGP7PEc9Et5vTPO8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=markus.stockhausen@gmx.de header.b=nIEEw6HQ; arc=none smtp.client-ip=212.227.15.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=markus.stockhausen@gmx.de header.b="nIEEw6HQ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1780597517; x=1781202317; i=markus.stockhausen@gmx.de; bh=waBEM5hwj6qmOWIHTz9fLjZQiO1jGwHEjADqJVbxCOA=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-ID:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=nIEEw6HQH9NWPoVA9LDXbJqKKpr/ocSuH17Ly0E8jcA+GvzG4JrA7CmSo/ypq21b hBIc1XFOkbFuErD4RpLIRNrx34kpmNdYSHA/Hl8HV9v68R1r04yzKI2PT4Ksbqghy DHNGpdB8NG/l8hET18ufZY3Gifo8LcEuGWOdDJp+sygp3ITrpmrHRfwvmEBVfhhXO HJHVkBrUkp/VujSJMhvT0Khr3hBfVR1XKJM+TzOAcE2pAfq0aZ1IZwGzTDesqTf+2 /RDvYmd8njOTEh7Y/7AgTIf9I+5+RM9+6bgVazgrS6lqJP7q39d2rgTnpuibrfa+P pQaTqtW3YujvpYnwog== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from client.hidden.invalid by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1M8hV5-1wZLUT3WNN-004I5Z; Thu, 04 Jun 2026 20:25:16 +0200 From: Markus Stockhausen To: tglx@kernel.org, linux-kernel@vger.kernel.org Cc: Markus Stockhausen Subject: [PATCH v3 1/2] irqchip/irq-realtek-rtl: Add/simplify register helpers Date: Thu, 4 Jun 2026 20:25:05 +0200 Message-ID: <20260604182506.1113440-2-markus.stockhausen@gmx.de> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260604182506.1113440-1-markus.stockhausen@gmx.de> References: <20260604182506.1113440-1-markus.stockhausen@gmx.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:LhssyiM7odNBMmKXmg3C8gRMxEcGu6/6vtLXgYUuaZoXv+eytO7 2mv76aMxKXL+PtwsgkrHu39SEL0s/7J/2TDpCPgZ2GnKWmzK9oCrOOBDWua3lCJM6Ce9sVE cwPCkkynQoGWQt36ls7gLl7PMyr6UrgYUO7jnVISSevnT5kh6X1YmWtAkhHrnlCakyGwJ1I XLROA1NSH8xT8RpshfArw== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:pHpOoUR/Epo=;Hw5Qsi0ewGjJuOql8Gcxnpt5bOS 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 Content-Type: text/plain; charset="utf-8" The Realtek interrupt controller has two important registers that are used by the driver in several places - GIMR: global interrupt mask register - IRR: Interrupt routing registers The usage of these registers is very inconsistent. GIMR is addressed directly while IRR has a helper that needs a macro as an input. Harmonize this by providing consistent helpers that improve code readability. The callers of these helpers use classic lock/unlock functions and sometimes use the wrong locking helper. E.g. irqsave variants are used in mask/unmask although not needed. Adapt and fix the surrounding call locations. Signed-off-by: Markus Stockhausen --- drivers/irqchip/irq-realtek-rtl.c | 64 +++++++++++++++---------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/drivers/irqchip/irq-realtek-rtl.c b/drivers/irqchip/irq-realte= k-rtl.c index 942c1f8c363d..f490fb867ded 100644 --- a/drivers/irqchip/irq-realtek-rtl.c +++ b/drivers/irqchip/irq-realtek-rtl.c @@ -37,10 +37,29 @@ static void __iomem *realtek_ictl_base; #define IRR_OFFSET(idx) (4 * (3 - (idx * 4) / 32)) #define IRR_SHIFT(idx) ((idx * 4) % 32) =20 -static void write_irr(void __iomem *irr0, int idx, u32 value) +static inline void enable_gimr(unsigned int hw_irq) { - unsigned int offset =3D IRR_OFFSET(idx); - unsigned int shift =3D IRR_SHIFT(idx); + u32 gimr; + + gimr =3D readl(REG(RTL_ICTL_GIMR)); + gimr |=3D BIT(hw_irq); + writel(gimr, REG(RTL_ICTL_GIMR)); +} + +static inline void disable_gimr(unsigned int hw_irq) +{ + u32 gimr; + + gimr =3D readl(REG(RTL_ICTL_GIMR)); + gimr &=3D ~BIT(hw_irq); + writel(gimr, REG(RTL_ICTL_GIMR)); +} + +static void write_irr(int hw_irq, u32 value) +{ + void __iomem *irr0 =3D REG(RTL_ICTL_IRR0); + unsigned int offset =3D IRR_OFFSET(hw_irq); + unsigned int shift =3D IRR_SHIFT(hw_irq); u32 irr; =20 irr =3D readl(irr0 + offset) & ~(0xf << shift); @@ -50,30 +69,14 @@ static void write_irr(void __iomem *irr0, int idx, u32 = value) =20 static void realtek_ictl_unmask_irq(struct irq_data *i) { - unsigned long flags; - u32 value; - - raw_spin_lock_irqsave(&irq_lock, flags); - - value =3D readl(REG(RTL_ICTL_GIMR)); - value |=3D BIT(i->hwirq); - writel(value, REG(RTL_ICTL_GIMR)); - - raw_spin_unlock_irqrestore(&irq_lock, flags); + guard(raw_spinlock)(&irq_lock); + enable_gimr(i->hwirq); } =20 static void realtek_ictl_mask_irq(struct irq_data *i) { - unsigned long flags; - u32 value; - - raw_spin_lock_irqsave(&irq_lock, flags); - - value =3D readl(REG(RTL_ICTL_GIMR)); - value &=3D ~BIT(i->hwirq); - writel(value, REG(RTL_ICTL_GIMR)); - - raw_spin_unlock_irqrestore(&irq_lock, flags); + guard(raw_spinlock)(&irq_lock); + disable_gimr(i->hwirq); } =20 static struct irq_chip realtek_ictl_irq =3D { @@ -84,13 +87,10 @@ static struct irq_chip realtek_ictl_irq =3D { =20 static int intc_map(struct irq_domain *d, unsigned int irq, irq_hw_number_= t hw) { - unsigned long flags; - irq_set_chip_and_handler(irq, &realtek_ictl_irq, handle_level_irq); =20 - raw_spin_lock_irqsave(&irq_lock, flags); - write_irr(REG(RTL_ICTL_IRR0), hw, 1); - raw_spin_unlock_irqrestore(&irq_lock, flags); + guard(raw_spinlock_irqsave)(&irq_lock); + write_irr(hw, 1); =20 return 0; } @@ -127,7 +127,6 @@ static int __init realtek_rtl_of_init(struct device_nod= e *node, struct device_no { struct of_phandle_args oirq; struct irq_domain *domain; - unsigned int soc_irq; int parent_irq; =20 realtek_ictl_base =3D of_iomap(node, 0); @@ -135,9 +134,10 @@ static int __init realtek_rtl_of_init(struct device_no= de *node, struct device_no return -ENXIO; =20 /* Disable all cascaded interrupts and clear routing */ - writel(0, REG(RTL_ICTL_GIMR)); - for (soc_irq =3D 0; soc_irq < RTL_ICTL_NUM_INPUTS; soc_irq++) - write_irr(REG(RTL_ICTL_IRR0), soc_irq, 0); + for (unsigned int hw_irq =3D 0; hw_irq < RTL_ICTL_NUM_INPUTS; hw_irq++) { + disable_gimr(hw_irq); + write_irr(hw_irq, 0); + } =20 if (WARN_ON(!of_irq_count(node))) { /* --=20 2.54.0 From nobody Mon Jun 8 08:31:43 2026 Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6B08C386429 for ; Thu, 4 Jun 2026 18:25:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780597524; cv=none; b=fiB+OMu1ETZWj2tm819XekRsxUZ5QjLKLrYKIoWtZIE/rTD3o/kCQ3Ssw5jGwEb7tbDsSPCgXDNKnwtl7LhDZvUhrqfYnvMN7RC2z3HytXutRBzg+l3mQI58Y6oclU0dhnZFVi3cZaohqDwyn8aA3HaGITm8PsSIyTOQ5wdxyQI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780597524; c=relaxed/simple; bh=Q3NA5FqTxWxwgjiLtrmeUxJvyVPxfCin0TT7JnHsGCc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=C0cMrCOQfPggYowbJMh0f8xOVXc0Zaeftw9N3Ol42RkStgFYSWDeqvqwMC0ESYWESNDY1m8UhdZlRjJN4ESHPlmlEt/Maq+hJe+domFQ0/dY1eZrCNzDOP1owT8jOrQL5Qzt/APKB+TM34CT1fz56U1eW7SZuqV3GDcM/aX+RL4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=markus.stockhausen@gmx.de header.b=Ffc/VqVR; arc=none smtp.client-ip=212.227.15.19 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=markus.stockhausen@gmx.de header.b="Ffc/VqVR" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1780597517; x=1781202317; i=markus.stockhausen@gmx.de; bh=lrJ+t19mtSfi8eg3sZ9TGz36L5t9oGMjNp2wxwyS55I=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-ID:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=Ffc/VqVRG1Ghvy33vLV0rjswQP6iDyYwFueE69m3HpLBLahAKOc4p+Y4b7tPuyVF J4kD4OzP9Ax9tPdZdFvokv9WhCrC7E5nY4M8sfmLgP1Z0hwR8lEcr7VQjsZ1fLF0/ rrZO6R5+WytZtUTPuNydsCZycKXVAr9uFptxiFybHWFyjASaMEKn60DdGUPPHExvG Ua3WhxGVSEAxnn1wnDzGbBNm3GXS9bBx+OYw+PuW87hYQmfoi5Lefi3Jvyx9+gSy9 1qhRiT+HMODcM37RADaCDfAuHBzfVo8S2D6WqsFTAS0HpYgmABXjmYbNuH5xSf+/R kMYQpjPg9UNT6tWPvQ== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from client.hidden.invalid by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1M6Db0-1wbpWm3tDk-001o3E; Thu, 04 Jun 2026 20:25:16 +0200 From: Markus Stockhausen To: tglx@kernel.org, linux-kernel@vger.kernel.org Cc: Markus Stockhausen Subject: [PATCH v3 2/2] irqchip/irq-realtek-rtl: Add multicore support Date: Thu, 4 Jun 2026 20:25:06 +0200 Message-ID: <20260604182506.1113440-3-markus.stockhausen@gmx.de> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260604182506.1113440-1-markus.stockhausen@gmx.de> References: <20260604182506.1113440-1-markus.stockhausen@gmx.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:Cl0J1Y95YQtRUfKW6dYdMLW2UB6GOxXTFRlUvBTsrzDBWELRSgn IU8FTeXSE9xWdluZhbTqfO6DjuKNgv49iIxx/rbVSWZOrrwD0sjti6XwYXFsbPTf8KL8GD1 3EuuCrOUpfQolKYZfXQkXl3HJf09u9YxxbzJhn1qe9XkCWIg2RrI56hUBFl19qH1TmkqHet qWje97soczC5m2KmC8vCw== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:rNWuAvNoWjg=;H6q4HABaYfL3Il4vi781WCaJYbr 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 wAKmomI/wZu8gI6pCQ= Content-Type: text/plain; charset="utf-8" The Realtek interrupt driver currently supports only single core systems. So the higher end devices like RTL839x and RTL930x with dual VPEs must be driven with NR_CPU=3D1. Enhance the driver to support multicore (dual VPE) systems. For this: - Extend the register map for multiple cores - Search for multiple CPU cores in the devicetree - Improve the register helpers to support multiple cores - Add an affinity setter - Enhance the IRQ handler for multiple cores Signed-off-by: Markus Stockhausen --- drivers/irqchip/irq-realtek-rtl.c | 82 ++++++++++++++++++++----------- 1 file changed, 54 insertions(+), 28 deletions(-) diff --git a/drivers/irqchip/irq-realtek-rtl.c b/drivers/irqchip/irq-realte= k-rtl.c index f490fb867ded..2ae3be7fa633 100644 --- a/drivers/irqchip/irq-realtek-rtl.c +++ b/drivers/irqchip/irq-realtek-rtl.c @@ -23,10 +23,10 @@ =20 #define RTL_ICTL_NUM_INPUTS 32 =20 -#define REG(x) (realtek_ictl_base + x) +#define REG(cpu, x) (realtek_ictl_base[cpu] + x) =20 static DEFINE_RAW_SPINLOCK(irq_lock); -static void __iomem *realtek_ictl_base; +static void __iomem *realtek_ictl_base[NR_CPUS]; =20 /* * IRR0-IRR3 store 4 bits per interrupt, but Realtek uses inverted numberi= ng, @@ -37,27 +37,27 @@ static void __iomem *realtek_ictl_base; #define IRR_OFFSET(idx) (4 * (3 - (idx * 4) / 32)) #define IRR_SHIFT(idx) ((idx * 4) % 32) =20 -static inline void enable_gimr(unsigned int hw_irq) +static inline void enable_gimr(unsigned int cpu, unsigned int hw_irq) { u32 gimr; =20 - gimr =3D readl(REG(RTL_ICTL_GIMR)); + gimr =3D readl(REG(cpu, RTL_ICTL_GIMR)); gimr |=3D BIT(hw_irq); - writel(gimr, REG(RTL_ICTL_GIMR)); + writel(gimr, REG(cpu, RTL_ICTL_GIMR)); } =20 -static inline void disable_gimr(unsigned int hw_irq) +static inline void disable_gimr(unsigned int cpu, unsigned int hw_irq) { u32 gimr; =20 - gimr =3D readl(REG(RTL_ICTL_GIMR)); + gimr =3D readl(REG(cpu, RTL_ICTL_GIMR)); gimr &=3D ~BIT(hw_irq); - writel(gimr, REG(RTL_ICTL_GIMR)); + writel(gimr, REG(cpu, RTL_ICTL_GIMR)); } =20 -static void write_irr(int hw_irq, u32 value) +static void write_irr(unsigned int cpu, int hw_irq, u32 value) { - void __iomem *irr0 =3D REG(RTL_ICTL_IRR0); + void __iomem *irr0 =3D REG(cpu, RTL_ICTL_IRR0); unsigned int offset =3D IRR_OFFSET(hw_irq); unsigned int shift =3D IRR_SHIFT(hw_irq); u32 irr; @@ -69,28 +69,51 @@ static void write_irr(int hw_irq, u32 value) =20 static void realtek_ictl_unmask_irq(struct irq_data *i) { + unsigned int cpu; + guard(raw_spinlock)(&irq_lock); - enable_gimr(i->hwirq); + for_each_cpu(cpu, irq_data_get_effective_affinity_mask(i)) + enable_gimr(cpu, i->hwirq); } =20 static void realtek_ictl_mask_irq(struct irq_data *i) { + unsigned int cpu; + guard(raw_spinlock)(&irq_lock); - disable_gimr(i->hwirq); + for_each_cpu(cpu, irq_data_get_effective_affinity_mask(i)) + disable_gimr(cpu, i->hwirq); +} + +static int realtek_ictl_irq_affinity(struct irq_data *i, const struct cpum= ask *dest, bool force) +{ + if (!irqd_irq_masked(i)) + realtek_ictl_mask_irq(i); + + irq_data_update_effective_affinity(i, dest); + + if (!irqd_irq_masked(i)) + realtek_ictl_unmask_irq(i); + + return IRQ_SET_MASK_OK; } =20 static struct irq_chip realtek_ictl_irq =3D { - .name =3D "realtek-rtl-intc", - .irq_mask =3D realtek_ictl_mask_irq, - .irq_unmask =3D realtek_ictl_unmask_irq, + .name =3D "realtek-rtl-intc", + .irq_mask =3D realtek_ictl_mask_irq, + .irq_unmask =3D realtek_ictl_unmask_irq, + .irq_set_affinity =3D realtek_ictl_irq_affinity, }; =20 static int intc_map(struct irq_domain *d, unsigned int irq, irq_hw_number_= t hw) { + unsigned int cpu; + irq_set_chip_and_handler(irq, &realtek_ictl_irq, handle_level_irq); =20 guard(raw_spinlock_irqsave)(&irq_lock); - write_irr(hw, 1); + for_each_present_cpu(cpu) + write_irr(cpu, hw, 1); =20 return 0; } @@ -103,12 +126,13 @@ static const struct irq_domain_ops irq_domain_ops =3D= { static void realtek_irq_dispatch(struct irq_desc *desc) { struct irq_chip *chip =3D irq_desc_get_chip(desc); + unsigned int cpu =3D smp_processor_id(); struct irq_domain *domain; unsigned long pending; unsigned int soc_int; =20 chained_irq_enter(chip, desc); - pending =3D readl(REG(RTL_ICTL_GIMR)) & readl(REG(RTL_ICTL_GISR)); + pending =3D readl(REG(cpu, RTL_ICTL_GIMR)) & readl(REG(cpu, RTL_ICTL_GISR= )); =20 if (unlikely(!pending)) { spurious_interrupt(); @@ -116,7 +140,7 @@ static void realtek_irq_dispatch(struct irq_desc *desc) } =20 domain =3D irq_desc_get_handler_data(desc); - for_each_set_bit(soc_int, &pending, 32) + for_each_set_bit(soc_int, &pending, RTL_ICTL_NUM_INPUTS) generic_handle_domain_irq(domain, soc_int); =20 out: @@ -127,16 +151,18 @@ static int __init realtek_rtl_of_init(struct device_n= ode *node, struct device_no { struct of_phandle_args oirq; struct irq_domain *domain; - int parent_irq; - - realtek_ictl_base =3D of_iomap(node, 0); - if (!realtek_ictl_base) - return -ENXIO; - - /* Disable all cascaded interrupts and clear routing */ - for (unsigned int hw_irq =3D 0; hw_irq < RTL_ICTL_NUM_INPUTS; hw_irq++) { - disable_gimr(hw_irq); - write_irr(hw_irq, 0); + int cpu, parent_irq; + + for_each_present_cpu(cpu) { + realtek_ictl_base[cpu] =3D of_iomap(node, cpu); + if (!realtek_ictl_base[cpu]) + return -ENXIO; + + /* Disable all cascaded interrupts and clear routing */ + for (unsigned int hw_irq =3D 0; hw_irq < RTL_ICTL_NUM_INPUTS; hw_irq++) { + disable_gimr(cpu, hw_irq); + write_irr(cpu, hw_irq, 0); + } } =20 if (WARN_ON(!of_irq_count(node))) { --=20 2.54.0