From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8798AC25B4E for ; Fri, 20 Jan 2023 14:20:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 742426B0089; Fri, 20 Jan 2023 09:20:52 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 42D2F6B0095; Fri, 20 Jan 2023 09:20:52 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id F26E76B00A2; Fri, 20 Jan 2023 09:20:51 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id D684C6B00A3 for ; Fri, 20 Jan 2023 09:20:51 -0500 (EST) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id B78491A09CE for ; Fri, 20 Jan 2023 14:20:51 +0000 (UTC) X-FDA: 80375388702.11.AE79A29 Received: from fx601.security-mail.net (smtpout140.security-mail.net [85.31.212.146]) by imf21.hostedemail.com (Postfix) with ESMTP id 698491C001B for ; Fri, 20 Jan 2023 14:20:49 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=kalray.eu header.s=sec-sig-email header.b=hGbMd7iH; dkim=fail ("body hash did not verify") header.d=kalray.eu header.s=32AE1B44-9502-11E5-BA35-3734643DEF29 header.b=FSrUM33I; dmarc=pass (policy=quarantine) header.from=kalray.eu; spf=pass (imf21.hostedemail.com: domain of ysionneau@kalray.eu designates 85.31.212.146 as permitted sender) smtp.mailfrom=ysionneau@kalray.eu ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1674224449; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=4jvJ7IvD9VlgFq/7Z4UB2wJmPSp4a7HqRY/uj2OjyW4=; b=wNnUh+RbWPmxvNAn2RSm1UJRl7WtCPRxlIs0bKMSUore5oDeEIB6JDzjk7KhVzvuH5oBb6 w9dphWMpmGAHkbL5BcnkgUtFNaytWSMXOmyQtdp4IeARDpufxCOYsw0pG0TkXD5VhH701Z CwK3gQ7ENy1BQzxy3R7sorOnYion6nQ= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=kalray.eu header.s=sec-sig-email header.b=hGbMd7iH; dkim=fail ("body hash did not verify") header.d=kalray.eu header.s=32AE1B44-9502-11E5-BA35-3734643DEF29 header.b=FSrUM33I; dmarc=pass (policy=quarantine) header.from=kalray.eu; spf=pass (imf21.hostedemail.com: domain of ysionneau@kalray.eu designates 85.31.212.146 as permitted sender) smtp.mailfrom=ysionneau@kalray.eu ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1674224449; a=rsa-sha256; cv=none; b=nJSQIUIXbRIW5NDdY7pUmgjZemyDZMOhQyn2Pz6OCDZWPflvDex/R7gZw0F+x7nKEos8Am TaE68NQF9aLxrXGeOdyRWeaoJ9uf3RiEa2tWF9AZV4IM6EzT/rLeoanjudpogQ6UaxM/hg jQ/7AZaFwBPxVCKZxyzL+IrPcfqN04w= Received: from localhost (fx601.security-mail.net [127.0.0.1]) by fx601.security-mail.net (Postfix) with ESMTP id A6095349874 for ; Fri, 20 Jan 2023 15:20:47 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kalray.eu; s=sec-sig-email; t=1674224448; bh=C4JX2KDfJMf+kd6dGlNUF/l2OL1SVZPZi+/ckEfH3UU=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=hGbMd7iH7oZG2MBdH3EXwIyE0JbBdGcp5/ZKBhEyMU77mx1Ig1lOwNwy3kNb41DJD 3vsMqnkYV4fQwWgNh9Zi1KiVWyyp0sZyEPWsC9zXjneCVZWj0PzIylgD6AswRE0OJ6 bOXW56Dh8BzKEdSkRY5a3eFt7XzzzG5k8wRL0Urs= Received: from fx601 (fx601.security-mail.net [127.0.0.1]) by fx601.security-mail.net (Postfix) with ESMTP id ACE4D349765; Fri, 20 Jan 2023 15:20:46 +0100 (CET) Received: from zimbra2.kalray.eu (unknown [217.181.231.53]) by fx601.security-mail.net (Postfix) with ESMTPS id 5CEAA34967D; Fri, 20 Jan 2023 15:20:44 +0100 (CET) Received: from zimbra2.kalray.eu (localhost [127.0.0.1]) by zimbra2.kalray.eu (Postfix) with ESMTPS id 2AB8127E0443; Fri, 20 Jan 2023 15:10:33 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by zimbra2.kalray.eu (Postfix) with ESMTP id 10C7827E043E; Fri, 20 Jan 2023 15:10:33 +0100 (CET) Received: from zimbra2.kalray.eu ([127.0.0.1]) by localhost (zimbra2.kalray.eu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id K4O0zyA2ozHg; Fri, 20 Jan 2023 15:10:32 +0100 (CET) Received: from junon.lin.mbt.kalray.eu (unknown [192.168.37.161]) by zimbra2.kalray.eu (Postfix) with ESMTPSA id 8995D27E043A; Fri, 20 Jan 2023 15:10:32 +0100 (CET) X-Virus-Scanned: E-securemail Secumail-id: <178bb.63caa33c.5a128.0> DKIM-Filter: OpenDKIM Filter v2.10.3 zimbra2.kalray.eu 10C7827E043E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kalray.eu; s=32AE1B44-9502-11E5-BA35-3734643DEF29; t=1674223833; bh=5XXrgrQzCfc4vEIClRHO/5PBD+bYAS7ERJgrp4OCvF8=; h=From:To:Date:Message-Id:MIME-Version; b=FSrUM33In5SGjg9c4LwAoWf/AQZS0QSN3rkfGHBE+hEzpy/Vbg1dnPf32zDa8kKMa MP0vhwj3UfQzIUAbEwlHIAX+q89B2EfKjyUFxpR38io82dkQQDXMofBuaYRqLg7798 JotwpQrZZ+Hy6YLcj2fPGriS/JxTFf2hsIWLvBEE= From: Yann Sionneau To: Arnd Bergmann , Jonathan Corbet , Thomas Gleixner , Marc Zyngier , Rob Herring , Krzysztof Kozlowski , Will Deacon , Peter Zijlstra , Boqun Feng , Mark Rutland , Eric Biederman , Kees Cook , Oleg Nesterov , Ingo Molnar , Waiman Long , "Aneesh Kumar K.V" , Andrew Morton , Nick Piggin , Paul Moore , Eric Paris , Christian Brauner , Paul Walmsley , Palmer Dabbelt , Albert Ou , Jules Maselbas , Yann Sionneau , Guillaume Thouvenin , Clement Leger , Vincent Chardon , Marc =?utf-8?b?UG91bGhpw6hz?= , Julian Vetter , Samuel Jones , Ashley Lesdalons , Thomas Costis , Marius Gligor , Jonathan Borne , Julien Villette , Luc Michel , Louis Morhet , Julien Hascoet , Jean-Christophe Pince , Guillaume Missonnier , Alex Michon , Huacai Chen , WANG Xuerui , Shaokun Zhang , John Garry , Guangbin Huang , Bharat Bhushan , Bibo Mao , Atish Patra , "Jason A. Donenfeld" , Qi Liu , Jiaxun Yang , Catalin Marinas , Mark Brown , Janosch Frank , Alexey Dobriyan Cc: Benjamin Mugnier , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-mm@kvack.org, linux-arch@vger.kernel.org, linux-audit@redhat.com, linux-riscv@lists.infradead.org, bpf@vger.kernel.org Subject: [RFC PATCH v2 18/31] irqchip: Add kvx-core-intc core interupt controller driver Date: Fri, 20 Jan 2023 15:09:49 +0100 Message-ID: <20230120141002.2442-19-ysionneau@kalray.eu> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20230120141002.2442-1-ysionneau@kalray.eu> References: <20230120141002.2442-1-ysionneau@kalray.eu> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=utf-8 X-ALTERMIMEV2_out: done X-Rspamd-Queue-Id: 698491C001B X-Rspamd-Server: rspam09 X-Rspam-User: X-Stat-Signature: 6qbtoxwotz1ioi3ci4cwoyc6hj6pmthg X-HE-Tag: 1674224449-940637 X-HE-Meta: U2FsdGVkX19/qKMaaG2eu4LARb2NGZseLUQn7AfHdmsBvoZCu51DOvdflQeAkd4O7VCDfYwd+5bn4GMFp5mhg5Z4Aq8l6EvjCr3q1OJWQjOvCToTH67S2CNsTG9BFMak7UGH4KBFF1I94HOYQEPLcASsZXri8CQZvO+uR00Suk9NEhaeeuUPZlbC0ZjWw1BqDatl8AisszKYqXX+BdH/MWlYtlzOmNrNT5Vcuox2juLTpbthTIKIzYnimCucyifuzcEe+bxrfAckhzogaLDmYCAe3SyALlsqVxMkQCwbTg8GyPDnfwl4DvtmxGJuOIyfy/Sm9aMIGI//Xbc3KG07tgkS2fwPIKdaVqRpxtuA6QfJHtFi/tG4SYBwXb1gHP9dZmI606NvPZqCzISLJO4XiTMfZr1uO/bZFhPikigEYWjSc2PY2so4vs838QB3TR5lKw86FGFWSJayuQD8IuoP1aTd77utJeK4Cjzl1vRZ+jTKFNs4gMyYLd7GE4KEyXzXdYWCaYkg/BZg3o26HF9HIHbcpGlSnXPMnQjk+TNw3ySt6YbjkANbRo+i8V7iyulR3haAWyRL0kmFRcHGfFMQ0D2FzVgX6FzfGRDVeorF8CmR5brl4YzQ4/LUkEvv+St/vqD1XmPQzQjgs9XQARvxoyCpneiJnig/jzmy7IZsf9rQHb9tafSemsgRRrA7UM5D2VNQex3/xAGOLcfon1VELVOkMmo9IyUm514siG7NQR0SUjONYQtqDL2tM99dQVqHONRB/KNKPJYd4+UxRF5wBJCEGGOjd6OeGW8CnpA0tJElUNVzUiI99dJVUsLWFCCdRGTechMC82MijSAkxQUiLOUb8qkfcuYIosZ92DmNDDGNy7SzdLC88/LbSVpcwuZrxcuRm98hBw9u9t+lr5G8yDMzC+arGv0D5mjiabYWvvw7YXy9J+frPH+gkSNQPorBU+xHzSzCG8CmsxwaBCz PFFIjsLx DFJgSaMzMe2NgG6IgT6Uul0GIjXeHqjq04rB3dL+tezms3exN9pNuRg2gJsfP3vMdc9OZWkMyoDOT26zLrimmU2q+P18KHuDJFJAnVthmlFgsZTEWM3zy0ttmX4X6omcfUabeYvlsKpN4JhQHQ0NNY7YrYRwIlaRI5TmhJrs3XZ+RKHbfJdJcKD2mN5ZiEmnBHjvSYJzlFvTBfIN0EnZqw/ijODM5kxQpaBPxwgJW5TX4duhZkQNoY1hxkeu65WTKRDsESx6WcjW3v8fBCv8U6JD/QJ/Tr0iH1z6R1Rv1ZaZJ2I+yD2lfpNwL50jIcpnhnhn2j5LKv76Y1pHkhk35dPWm4Xpz5WXSy/f9bxJwoPIFiZ/KsN+hUwz77CKhQYpLxG/eYGm5OqyRDvRG/ruKgWgHPdoVcWg88qE1nzDZEoxCaFKMT1FMuAIuQTa9V0DV/K6qUXChlvf4IPsBkkO7jWZ8PSSdqIgDzupvB62lIP8aAJ4LscsRRdDdUl2yOm44aJblCQO9fAvZFjkO/aBQhg7PkfWYc1gt5yi1tk7NHD+ANxPXZefp7MkZSWIWXivQcasP0oz4n+v879LA6doja3mxDdip6ne+5rL+z4tRJ+753hRT4jIXq19+VK7o+B9aVLZl6ueWzfX6sX0o8ItkzIZHhuXHVQQ1XzGThbju7SUSNdrWFgmNJ/hy5V/uIoWXqcB6rSOAyyvtq2b38UWIIo3oM1nAtg8TEzKcR6E/qoHgtcqSOsFeSz2WIA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: Jules Maselbas Each kvx core includes a hardware interrupt controller (core INTC) with the following features: - 32 independent interrupt sources - 4-bit priotity level - Individual interrupt enable bit - Interrupt status bit displaying the pending interrupts - Priority management between the 32 interrupts Among those 32 interrupt sources, the first are hard-wired to hardware sources. The remaining interrupt sources can be triggered via software by directly writing to the ILR SFR. The hard-wired interrupt sources are the following: 0: Timer 0 1: Timer 1 2: Watchdog 3: Performance Monitors 4: APIC GIC line 0 5: APIC GIC line 1 6: APIC GIC line 2 7: APIC GIC line 3 12: SECC error from memory system 13: Arithmetic exception (carry and IEEE 754 flags) 16: Data Asynchronous Memory Error (DAME), raised for DECC/DSYS errors 17: CLI (Cache Line Invalidation) for L1D or L1I following DECC/DSYS/Parity errors The APIC GIC lines will be used to route interrupts coming from SoC peripherals from outside the Cluster to the kvx core. Those peripherals include USB host controller, eMMC/SD host controller, i2c, spi, PCIe, IOMMUs etc... Co-developed-by: Clement Leger Signed-off-by: Clement Leger Co-developed-by: Julian Vetter Signed-off-by: Julian Vetter Co-developed-by: Vincent Chardon Signed-off-by: Vincent Chardon Co-developed-by: Jules Maselbas Signed-off-by: Jules Maselbas Signed-off-by: Yann Sionneau --- Notes: V1 -> V2: new patch - removed print on probe success drivers/irqchip/Kconfig | 5 ++ drivers/irqchip/Makefile | 1 + drivers/irqchip/irq-kvx-core-intc.c | 80 +++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 drivers/irqchip/irq-kvx-core-intc.c diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig index 806adbc7b2a4..d242e02771e3 100644 --- a/drivers/irqchip/Kconfig +++ b/drivers/irqchip/Kconfig @@ -334,6 +334,11 @@ config MIPS_GIC select IRQ_DOMAIN_HIERARCHY select MIPS_CM +config KVX_CORE_INTC + bool + depends on KVX + select IRQ_DOMAIN + config KVX_APIC_GIC bool depends on KVX diff --git a/drivers/irqchip/Makefile b/drivers/irqchip/Makefile index 7eaea87ca9ab..d931f2eb38b6 100644 --- a/drivers/irqchip/Makefile +++ b/drivers/irqchip/Makefile @@ -69,6 +69,7 @@ obj-$(CONFIG_BCM7120_L2_IRQ) += irq-bcm7120-l2.o obj-$(CONFIG_BRCMSTB_L2_IRQ) += irq-brcmstb-l2.o obj-$(CONFIG_KEYSTONE_IRQ) += irq-keystone.o obj-$(CONFIG_MIPS_GIC) += irq-mips-gic.o +obj-$(CONFIG_KVX_CORE_INTC) += irq-kvx-core-intc.o obj-$(CONFIG_KVX_APIC_GIC) += irq-kvx-apic-gic.o obj-$(CONFIG_KVX_ITGEN) += irq-kvx-itgen.o obj-$(CONFIG_KVX_APIC_MAILBOX) += irq-kvx-apic-mailbox.o diff --git a/drivers/irqchip/irq-kvx-core-intc.c b/drivers/irqchip/irq-kvx-core-intc.c new file mode 100644 index 000000000000..145f1248925b --- /dev/null +++ b/drivers/irqchip/irq-kvx-core-intc.c @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (c) 2017-2023 Kalray Inc. + * Author(s): Clement Leger + */ + +#define pr_fmt(fmt) "kvx_core_intc: " fmt + +#include +#include +#include +#include +#include +#include +#include + +#define KVX_CORE_INTC_IRQ 32 + + +static void kvx_irq_mask(struct irq_data *data) +{ + kvx_sfr_clear_bit(ILE, data->hwirq); +} + +static void kvx_irq_unmask(struct irq_data *data) +{ + kvx_sfr_set_bit(ILE, data->hwirq); +} + +static struct irq_chip kvx_irq_chip = { + .name = "kvx core Intc", + .irq_mask = kvx_irq_mask, + .irq_unmask = kvx_irq_unmask, +}; + +static int kvx_irq_map(struct irq_domain *d, unsigned int irq, + irq_hw_number_t hw) +{ + /* All interrupts for core are per cpu */ + irq_set_percpu_devid(irq); + irq_set_chip_and_handler(irq, &kvx_irq_chip, handle_percpu_irq); + + return 0; +} + +static const struct irq_domain_ops kvx_irq_ops = { + .xlate = irq_domain_xlate_onecell, + .map = kvx_irq_map, +}; + +static int __init +kvx_init_core_intc(struct device_node *intc, struct device_node *parent) +{ + struct irq_domain *root_domain; + uint32_t core_nr_irqs; + + if (parent) + panic("DeviceTree core intc not a root irq controller\n"); + + if (of_property_read_u32(intc, "kalray,intc-nr-irqs", &core_nr_irqs)) + core_nr_irqs = KVX_CORE_INTC_IRQ; + + /* We only have up to 32 interrupts, according to IRQ-domain.txt, + * linear is likely to be the best choice + */ + root_domain = irq_domain_add_linear(intc, core_nr_irqs, + &kvx_irq_ops, NULL); + if (!root_domain) + panic("root irq domain not avail\n"); + + /* + * Needed for primary domain lookup to succeed + * This is a primary irqchip, and can never have a parent + */ + irq_set_default_host(root_domain); + + return 0; +} + +IRQCHIP_DECLARE(kvx_core_intc, "kalray,kvx-core-intc", kvx_init_core_intc); -- 2.37.2