From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.210.172 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1794699455; b=AkK3CCIJJzIbwo3351Clqu8PtEtDeFKimysmoelOpt5kRVi8udVIkX527+6n8mGYQwlv ZbDW1VOzNbTyYk6rbNCVNV74bmvFNBN+i8GkRLG6N/Js0zb5rFmgTidfdNexO82DuxRur ObI6+BcATdrDtTUMDikYQDi6IBZE8QbSzjsEepjzx/2qH3XqTzuxiqV8X9HNbmgBs47b2 2L9h947OAp8LZMmYW3oFe3cIgl/UeGML65CJQG+za1xK0ObfafKinM+ulsz2zezRuQhfO QbB3KoDMyBn54s9QKJZUyhhTV8iL60TwIvMCehwSmB5u81gWXma71xXMoaccfxk7QnA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1794699455; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:To:Cc:Subject:Date:Message-ID:X-Mailer:In-Reply-To:References: MIME-Version:Content-Transfer-Encoding; bh=PP00yyyHcAa49iLb09D3hdi6QOsMJJT3uiuR4Zaky8A=; b=twVIjbEuJqYp+AuzMdjKPci7mFUnMyf6ur2tqX7O7tDS3CLGvKQQOrbnEB4gGjaZL7DE TZhgZQZG0s1a9+WJSc0Vb7nlYi5iWAgGf0r9wCsI7N6AcRHhZUo/CUtSrcrJA0DIT3Etx UHCzmJAipPu301Gj8Y9j+pGFATfwGgbMTbBjsJ+9JhMTlmNWtX3z82gb+ie3M0B6Opc43 duENa8/MPNYXsOkVZmXrgBOKebOaIsYMKyiIXNyP0lGahDiU0PKfURz5UlgtqovyqD/7I 0/AGhQbM5JKXyYZRy1fR4wsNBUPsE/gI56BGNZLfUjZK1jsUyzcqO2k2kMhhQZtNlKQ== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20260707 header.b=y0z9bUaI; arc=none smtp.remote-ip=209.85.210.172 Received: from mail-pf1-f172.google.com (mail-pf1-f172.google.com [209.85.210.172]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 79726606A884 for ; Sat, 14 Nov 2026 23:37:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 79726606A884 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20260707 header.b=y0z9bUaI Received: by mail-pf1-f172.google.com with SMTP id d2e1a72fcca58-8a4c72951b8so1862096b3a.3 for ; Sat, 14 Nov 2026 15:37:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20260707; t=1794699454; x=1795304254; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=PP00yyyHcAa49iLb09D3hdi6QOsMJJT3uiuR4Zaky8A=; b=y0z9bUaI0gFyTfODkPjDwcCzJuaNfl1HEoKDs+v1OLTk34kcv98kdjpQoXa8CIxGZH jR/9gNfOhvIvweDbjwDv39CIZOqKlrKYbaa6k+592zziqxj4+LOFER63cx4fzhBNnV4Q RThEkgO6YOpDWdzbaUmjQzs9zgn36MqdklEaL9iig2yH1gZ5gOWqp+GI1vtDy9kN+Z3L lpAl+9upUBHos3/lr9758xVJ/OTUe7dqalEHeCT9EcGkQEO2obW+Au16n0rATomQvquV yOmck5W2ZgvmcnyTBhZy+0IrbEru+8IOp1l8nPGLa/s3IO2pZjJ+CxiwCb5OCv2Tdahl 6j6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1794699454; x=1795304254; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=PP00yyyHcAa49iLb09D3hdi6QOsMJJT3uiuR4Zaky8A=; b=EYonWxer0fUmxnZB3Z//dIE5GAYHPEoyuR8lw2b7kR9kbf8lnRR+Ff7TM86JupNlS7 KEasUa83XnlK/tlDQBD74Gq/V/prqAs3yITD7fWTYZZs0EE0j8J3eZ5L6C0f4R7ZyfFA W2oKIXkddcwiG6c+q0CKJVb2q3tVx4F2MDC89fxJQQ4MWZSN5GuQRLzPw1gVfXga28kA Tt8Bt+tdJdaqzbNQyKZtuuB8R54QHzKAu4pF2lgb/aTVF+qRF3niuQ4ZojNPdUL2ItfL RQnm+zWyJUbL4r3Vm8KOow8gNLMVHpP4qnNebnHoHnB4EpQWimzhq7A8SMyX702+w1PU SXuw== X-Forwarded-Encrypted: i=1; AL+hErG8FhfW17IePEQ6jU3/U422NBtMiIORxsL1KCShxrZzXr5nUZvGHGE3GQCtMqU2gy3gUz/XGSylF63PFHQ=@vger.kernel.org X-Gm-Message-State: APuU4Z8Fp3hUP862Y7eBHqjfC5XEvyJeXvMvhY6WRpclzDvFvD9s0xxF y9DecOSmMoSqeUZ0bl84emFFcdeu/RhzF/cKkizy4vAU3BkqKX7eahmL X-Gm-Gg: AYBFou1PdmptWXtRyxgJsN4CJX8VYVPXtELtaYEJWVnudNEjKbiRnmFWwYvldDzoUc+ GaBGOZRN+KJpANGFLnz0ID5gnJHYu+SoUlWjWVPCwFVDcZr6IxuPGh62FWonptmBY69vSOrdthi kF3fnR4GRRrUGvNWv43/9ECsoVaVyaCTA16wnHiC1EgpotcLPGB/zBCnL3Yu8CRL0K7DGkc6oo3 5UXgcsmfvzgEcu33vSyMQ+inf2zirxrrs90gy2BPDnIkgicbu1X4EypVoqmLbdf5AhYMJ5TLJ64 JAptyot1Z+jNfLKHJfdoyOff/YI2eKlhYHSxwx/kbGoiuxJr/HgIk8TnqWJEJ6IVkjYHkn5mo1k PjFSuFi036HeFw37F+2AlWjhM20+JS2R4QTgzBynEoIaKiyXE9nJ7RwwRMddnzdRJRIlhOuJ2gB ahVtx6YjM8CUNQ2yQO4QtBQS419qfPan5GokTZVBWVeKf5iBoITO6wOW9Oa/Z19k7qRIIEGH66H 5S0UmAZov/b9ouqvz+mQ/vp4KTGjtQw4w+Q9Q8+hP751y1uHbuy8mizQTy9tdaTXwg/nuCSiQzh A1WHVU99tvyvWHgW4j8ZRxvNpFOJQIdV7DNgCeAP8q1MjrVubrvofwiLx6zCodB82V0SVonPSJs yOm5uzwHeFrMTrr7VDizKx8+DrActkl4MDJbA08QiXABKsoy6ikh0LG++ONpb5YfjbPMghWlbik dTDku/VcGUkuMFZfsfDs8vCeY= X-Received: by 2002:a05:6a00:94c3:b0:857:7337:5db7 with SMTP id d2e1a72fcca58-8beb658e279mr6190631b3a.21.1794699453766; Sat, 14 Nov 2026 15:37:33 -0800 (PST) Received: from ryzen.lan ([2601:644:8000:37f::e34]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8bed2d0f473sm2306372b3a.53.2026.11.14.15.37.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 14 Nov 2026 15:37:32 -0800 (PST) From: Rosen Penev To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Thomas Bogendoerfer , Thomas Gleixner Cc: Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Radu Rendec , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org Subject: [PATCH v2 3/4] irqchip/ath79-misc: convert to a platform driver Date: Sat, 14 Nov 2026 15:37:17 -0800 Message-ID: <20261114233718.86520-4-rosenp@gmail.com> X-Mailer: git-send-email 2.56.1 In-Reply-To: <20261114233718.86520-1-rosenp@gmail.com> References: <20261114233718.86520-1-rosenp@gmail.com> X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: 8bit The MISC interrupt controller is cascaded from a CPU interrupt, and its users are all platform devices, which defer their probe until it is available. The performance counter interrupt, the only one needed before the early initcalls, is now mapped on demand. Probe the controller as a platform driver, and use device-managed resources, which also fixes the leak of the register mapping when the irq domain cannot be created. The driver now probes after plat_time_init(), which on QCA956x and TP9343 enables the MIPS timer interrupt in the MISC controller, without which there are no jiffies. Keep that enable bit when disabling the other interrupts, which leaves the register as it was with the old init order. Signed-off-by: Rosen Penev --- drivers/irqchip/irq-ath79-misc.c | 90 ++++++++++++++++---------------- 1 file changed, 44 insertions(+), 46 deletions(-) diff --git a/drivers/irqchip/irq-ath79-misc.c b/drivers/irqchip/irq-ath79-misc.c index 5cedea5234e0..e69d4eca929f 100644 --- a/drivers/irqchip/irq-ath79-misc.c +++ b/drivers/irqchip/irq-ath79-misc.c @@ -12,8 +12,9 @@ #include #include -#include -#include +#include +#include +#include #include @@ -22,6 +23,7 @@ #define ATH79_MISC_IRQ_COUNT 32 #define ATH79_MISC_PERF_IRQ 5 +#define ATH79_MISC_SI_TIMERINT BIT(28) static struct irq_domain *ath79_misc_domain; @@ -124,65 +126,61 @@ static const struct irq_domain_ops misc_irq_domain_ops = { .map = misc_map, }; -static void __init ath79_misc_intc_domain_init( - struct irq_domain *domain, int irq) -{ - void __iomem *base = domain->host_data; - - /* Disable and clear all interrupts */ - __raw_writel(0, base + AR71XX_RESET_REG_MISC_INT_ENABLE); - __raw_writel(0, base + AR71XX_RESET_REG_MISC_INT_STATUS); - - irq_set_chained_handler_and_data(irq, ath79_misc_irq_handler, domain); -} - -static int __init ath79_misc_intc_of_init( - struct device_node *node, struct device_node *parent) +static int ath79_misc_intc_probe(struct platform_device *pdev) { + struct device *dev = &pdev->dev; struct irq_domain *domain; void __iomem *base; + u32 enable; int irq; - irq = irq_of_parse_and_map(node, 0); - if (!irq) { - pr_err("Failed to get MISC IRQ\n"); - return -EINVAL; - } - - base = of_iomap(node, 0); - if (!base) { - pr_err("Failed to get MISC IRQ registers\n"); - return -ENOMEM; - } - - domain = irq_domain_create_linear(of_fwnode_handle(node), ATH79_MISC_IRQ_COUNT, - &misc_irq_domain_ops, base); - if (!domain) { - pr_err("Failed to add MISC irqdomain\n"); - return -EINVAL; - } + irq = platform_get_irq(pdev, 0); + if (irq < 0) + return irq; + + base = devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(base)) + return PTR_ERR(base); + + domain = devm_irq_domain_create_linear(dev, dev_fwnode(dev), + ATH79_MISC_IRQ_COUNT, + &misc_irq_domain_ops, base); + if (!domain) + return dev_err_probe(dev, -ENOMEM, "failed to add the irq domain\n"); + + /* + * Disable and clear all interrupts, except the MIPS timer interrupt: + * plat_time_init() enables it on QCA956x and TP9343, which have no + * jiffies without it, and that runs before this driver probes. + */ + enable = __raw_readl(base + AR71XX_RESET_REG_MISC_INT_ENABLE); + __raw_writel(enable & ATH79_MISC_SI_TIMERINT, + base + AR71XX_RESET_REG_MISC_INT_ENABLE); + __raw_writel(0, base + AR71XX_RESET_REG_MISC_INT_STATUS); - ath79_misc_intc_domain_init(domain, irq); + irq_set_chained_handler_and_data(irq, ath79_misc_irq_handler, domain); ath79_misc_domain = domain; + return 0; } -static int __init ar7100_misc_intc_of_init( - struct device_node *node, struct device_node *parent) +static int ar7100_misc_intc_probe(struct platform_device *pdev, + struct device_node *parent) { ath79_misc_irq_chip.irq_mask_ack = ar71xx_misc_irq_mask; - return ath79_misc_intc_of_init(node, parent); + return ath79_misc_intc_probe(pdev); } -IRQCHIP_DECLARE(ar7100_misc_intc, "qca,ar7100-misc-intc", - ar7100_misc_intc_of_init); - -static int __init ar7240_misc_intc_of_init( - struct device_node *node, struct device_node *parent) +static int ar7240_misc_intc_probe(struct platform_device *pdev, + struct device_node *parent) { ath79_misc_irq_chip.irq_ack = ar724x_misc_irq_ack; - return ath79_misc_intc_of_init(node, parent); + return ath79_misc_intc_probe(pdev); } -IRQCHIP_DECLARE(ar7240_misc_intc, "qca,ar7240-misc-intc", - ar7240_misc_intc_of_init); +IRQCHIP_PLATFORM_DRIVER_BEGIN(ath79_misc_intc) +IRQCHIP_MATCH("qca,ar7100-misc-intc", ar7100_misc_intc_probe) +IRQCHIP_MATCH("qca,ar7240-misc-intc", ar7240_misc_intc_probe) +IRQCHIP_PLATFORM_DRIVER_END(ath79_misc_intc) +MODULE_DESCRIPTION("Atheros AR71xx/AR724x/AR913x MISC interrupt controller"); +MODULE_LICENSE("GPL"); -- 2.56.1