From patchwork Fri Jan 20 14:10:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yann Sionneau X-Patchwork-Id: 13109974 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 8492DC27C7C for ; Fri, 20 Jan 2023 14:21:02 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B08A36B00A6; Fri, 20 Jan 2023 09:20:54 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 8E97C6B00A7; Fri, 20 Jan 2023 09:20:54 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2CA896B00A2; Fri, 20 Jan 2023 09:20:54 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id E56456B00A5 for ; Fri, 20 Jan 2023 09:20:53 -0500 (EST) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id BA58FAB48D for ; Fri, 20 Jan 2023 14:20:53 +0000 (UTC) X-FDA: 80375388786.17.6F12F5F Received: from fx305.security-mail.net (smtpout30.security-mail.net [85.31.212.35]) by imf26.hostedemail.com (Postfix) with ESMTP id 47E88140003 for ; Fri, 20 Jan 2023 14:20:51 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=kalray.eu header.s=sec-sig-email header.b=PK435bNd; dkim=fail ("body hash did not verify") header.d=kalray.eu header.s=32AE1B44-9502-11E5-BA35-3734643DEF29 header.b=P6BtAyPM; spf=pass (imf26.hostedemail.com: domain of ysionneau@kalray.eu designates 85.31.212.35 as permitted sender) smtp.mailfrom=ysionneau@kalray.eu; dmarc=pass (policy=quarantine) header.from=kalray.eu ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1674224451; a=rsa-sha256; cv=none; b=4EHFfx2mFfCA3Md1yJFxS8IN+4fXNUapKRTnMdU4keX5jEX5N2ik0XebwChSsQv6GiYFMm cRfnUIOHnJ1uXkkWvMFlt5QcjEqj86SNhFYjLL51qgT/HHkPDc/kqtgJXfVgiRziv62AyN lrFngW0tiqmN683/5MFR2j793l9lp1I= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=kalray.eu header.s=sec-sig-email header.b=PK435bNd; dkim=fail ("body hash did not verify") header.d=kalray.eu header.s=32AE1B44-9502-11E5-BA35-3734643DEF29 header.b=P6BtAyPM; spf=pass (imf26.hostedemail.com: domain of ysionneau@kalray.eu designates 85.31.212.35 as permitted sender) smtp.mailfrom=ysionneau@kalray.eu; dmarc=pass (policy=quarantine) header.from=kalray.eu ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1674224451; 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=0EBHk3/xNMOtQasDlWnuFRgNeFZWCG1JaZyYWiNiQ6M=; b=som6HGzJpxnrCQ/4JBJKquThFQHxI/PIUfyfglVhF5iOua29y5gFYdtXLXPLSn3ZgljtTA 9LtPZIqo/itkFkkgLXN3olaDKEC2pUCmaIKBdmuKcwxctytBXUy8cD4qq5qeDB69j4ChJ8 +u/C0m+Iy3AuboZSizsdbQWcN8+NGDU= Received: from localhost (fx305.security-mail.net [127.0.0.1]) by fx305.security-mail.net (Postfix) with ESMTP id 7BAF130FEC5 for ; Fri, 20 Jan 2023 15:20:49 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kalray.eu; s=sec-sig-email; t=1674224449; bh=EHbGeTQPzFxRydvAjCAKTJptA7pNhkmTqYf6aPqpaxA=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=PK435bNd4ChYGp7BNsvmnmLMkpy/hoVLU46r6JempL/VizlAvCwO/4bjr+dVwezuh VpM/4GpAjHH2lJHR9PbwPyzQxp/vibRACiJNaEIJGYPF3ChSvlG0BXbnNCHitvAZjp YiDypEBuV6zbkDc6eGfv/GuKB27oKMVUvgvAz3YM= Received: from fx305 (fx305.security-mail.net [127.0.0.1]) by fx305.security-mail.net (Postfix) with ESMTP id A1A7B30F934; Fri, 20 Jan 2023 15:20:47 +0100 (CET) Received: from zimbra2.kalray.eu (unknown [217.181.231.53]) by fx305.security-mail.net (Postfix) with ESMTPS id 3FD6B30FD91; Fri, 20 Jan 2023 15:20:45 +0100 (CET) Received: from zimbra2.kalray.eu (localhost [127.0.0.1]) by zimbra2.kalray.eu (Postfix) with ESMTPS id 8E73B27E0463; Fri, 20 Jan 2023 15:10:39 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by zimbra2.kalray.eu (Postfix) with ESMTP id 7622127E0480; Fri, 20 Jan 2023 15:10:39 +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 dO_MAUz2ZwpM; Fri, 20 Jan 2023 15:10:39 +0100 (CET) Received: from junon.lin.mbt.kalray.eu (unknown [192.168.37.161]) by zimbra2.kalray.eu (Postfix) with ESMTPSA id C9CA227E0474; Fri, 20 Jan 2023 15:10:38 +0100 (CET) X-Virus-Scanned: E-securemail Secumail-id: <146d7.63caa33d.37d2d.0> DKIM-Filter: OpenDKIM Filter v2.10.3 zimbra2.kalray.eu 7622127E0480 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kalray.eu; s=32AE1B44-9502-11E5-BA35-3734643DEF29; t=1674223839; bh=5C/8QjxVUf/DelpGCfD/Pp9BdUc2vZv56uJsfxSlXPA=; h=From:To:Date:Message-Id:MIME-Version; b=P6BtAyPM/IrloLG30cdWTPBhk6bnzZeuu0JK6hHT1AvSOjTEjV23l2HTVSkWp3YOM JxhQxnIr6MpJR9Ve5OwsqaqYSpuYPPXnuoM+q+2xD3d01z+Z0ef6cKxQqGtJg6OcUa Z5LRxJhk4HSsThMlK536n8tiuxt0/9UzyH8L0fvI= 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?UG91bGhp?= =?utf-8?b?w6hz?= , 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 31/31] kvx: Add IPI driver Date: Fri, 20 Jan 2023 15:10:02 +0100 Message-ID: <20230120141002.2442-32-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 X-ALTERMIMEV2_out: done X-Rspam-User: X-Rspamd-Queue-Id: 47E88140003 X-Rspamd-Server: rspam01 X-Stat-Signature: 67pinxf8ak8fqkcxtz6xfqb78us1jmo5 X-HE-Tag: 1674224451-807197 X-HE-Meta: U2FsdGVkX19NeLPiobCUKxRgXaWIs8/DIAVuBiXn8pP66xq+QHGqZnYKNu0Bgzw475KuUiaoYeOFiqXXUK+9dOvvAFRKOlqGjbWS+DMAMSxwUJ90hOgN8OBLCC66gI4A6Oe82kdVcCCRSBZplwojwXANCCpveekuh7rH0X4GE+OHtjeBzlHPph1+YcHlE5AWmt692juLZnyPj75jurLiUeF8iDbuLi8s/QKcHsqqD0bvAtbB2HIHYjCPfAY5T+GVnnZzs5/zujSFQyzVsuIN0CK95Y2pZ0+KXihoPsT6e++qdbfkIe0okWahvPCvNjdtTVE+Wq5z5xz0wqY+NOAQ9INcTf0S9WgAmqd1OnnkP8G1bklP73QJgkz9fPoOyq7dS+RISzW8kM7hoZ48GZfjkys7++Z5FMXtjRfHnXKf4df18QqfsRWdm8+sVfmGLCJdKIeKndMcDUNFg1nHLjmKTrGl279BUr/aC9skyiEpriwA9ICykbknJg3BBfndh2oib3N17/nPdUqTkAkFjnbnv3PhcPocqRFYgM12uZ9/g3xEQdEmkyTGgSU75AITIDSiwPSfGHsMBc/p9g2T2SCU6Ja23/AjWD8dxqnIw92jZ8C6R2j8FgKs4EqePCsTLPctRZGhkVq7Ap0Ei/AuI6eaBFXpCaw0+Ck+/qNvJGX7D2JS0DbDaezqUvASEPZjYhfgtZzno31v5bEfHfMdnVXLjNZervAKpfZ1jWFw8rOLadeJZ8HWt3CjxHQbPEcvZO5zJvU2ERcnrHYXbszhRr7Mx/3Owp3fekQoHX9NPTpIYSYPGK8ROTZaXb+3ePzYTTxVKzBWutkExbKKe7NMhSG6NEOQn179XaRuLbPl/H+g9G2l24BxDNF2V3V4IhQcQlHRp+wje3/Ir614wEE8VRVydVM5AolcLU2YDMtpDZ/TEuIiLNFQJR+yuwJ0Z4u5vchBjd89lEAmIzvDYUx41Jr 3MfF7eYt pcQgnvh2TXxLQ07+zrAvsAfY9qdDT7E4X0XEw6Te5X8Bx/N/a1/oh9XESUrwmCFTrGPrh/5acbB4vMHoF5BgUTYByJ3+SRTvfz1qR/cvZxbwcAGiHDO0UotN/XAq4tulB9h/eWCzjz1zPAtc5kX27enZoWfLgG1DHZEDQE3xBk1zU45w7rVTeWsuv5Mxtw7GQ4k0aIpOvf3IW0fUnclOfuS+E0PxH7HKibGJa9Oh0gCwFBrK6qxfnhwDyK/NRyty2g+B3UvGaHjGECdD0+oadOw3pnDyS3ByZpuvGfRns1jS5uhHF47gMQtXZC1S+q29I3C90U4iUxiq9lzLfI/64YZGa61diLHMmnKL9Iof6UiqoPBSUxMdp8czFkpx6CVUQKkvjPanBt7iyMgMWnA00khhRwzL8tcJF7RGUTESFsjS/fuD6le59m1V+xNlGME4T22IJr/qNMHwJLMTkdus4y1+K2BnK2emXTc58+/+cA2IPEfJoaXXN5uqiS2QyjNn5GYp8uZxjy39JaEd7ncQQrRHx3rkLdwuczKa56KcL8cRV1ptZe//4dBEJJxLLvCoX1Iy8wdtozrAZkgkAfyV1mc7nm0AQY6EmjdWDLfrMYJ/jB7Bh1OrPzBbfjrjDTNiKI6zCRgJyA1XvhAzn5hUxWronmhhVfMC49cScc26Kji7uuDoLFW/ej7Di26kAKrMUySx1 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 The Inter-Processor Interrupt Controller (IPI) provides a fast synchronization mechanism to the software. It exposes eight independent set of registers that can be use to notify each processor in the cluster. test Co-developed-by: Clement Leger Signed-off-by: Clement Leger Co-developed-by: Guillaume Thouvenin Signed-off-by: Guillaume Thouvenin Co-developed-by: Julian Vetter Signed-off-by: Julian Vetter Co-developed-by: Luc Michel Signed-off-by: Luc Michel Signed-off-by: Jules Maselbas Signed-off-by: Yann Sionneau --- Notes: V1 -> V2: new patch arch/kvx/include/asm/ipi.h | 16 ++++++ arch/kvx/platform/Makefile | 1 + arch/kvx/platform/ipi.c | 108 +++++++++++++++++++++++++++++++++++++ 3 files changed, 125 insertions(+) create mode 100644 arch/kvx/include/asm/ipi.h create mode 100644 arch/kvx/platform/ipi.c diff --git a/arch/kvx/include/asm/ipi.h b/arch/kvx/include/asm/ipi.h new file mode 100644 index 000000000000..137407a075e6 --- /dev/null +++ b/arch/kvx/include/asm/ipi.h @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (C) 2017-2023 Kalray Inc. + * Author(s): Clement Leger + */ + +#ifndef _ASM_KVX_IPI_H +#define _ASM_KVX_IPI_H + +#include + +int kvx_ipi_ctrl_probe(irqreturn_t (*ipi_irq_handler)(int, void *)); + +void kvx_ipi_send(const struct cpumask *mask); + +#endif /* _ASM_KVX_IPI_H */ diff --git a/arch/kvx/platform/Makefile b/arch/kvx/platform/Makefile index c7d0abb15c27..27f0914e0de5 100644 --- a/arch/kvx/platform/Makefile +++ b/arch/kvx/platform/Makefile @@ -4,3 +4,4 @@ # obj-$(CONFIG_SMP) += pwr_ctrl.o +obj-$(CONFIG_SMP) += ipi.o diff --git a/arch/kvx/platform/ipi.c b/arch/kvx/platform/ipi.c new file mode 100644 index 000000000000..a471039b1643 --- /dev/null +++ b/arch/kvx/platform/ipi.c @@ -0,0 +1,108 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (C) 2017-2023 Kalray Inc. + * Author(s): Clement Leger + * Luc Michel + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define IPI_INTERRUPT_OFFSET 0x0 +#define IPI_MASK_OFFSET 0x20 + +/* + * IPI controller can signal RM and PE0 -> 15 + * In order to restrict that to the PE, write the corresponding mask + */ +#define KVX_IPI_CPU_MASK (~0xFFFF) + +struct kvx_ipi_ctrl { + void __iomem *regs; + unsigned int ipi_irq; +}; + +static struct kvx_ipi_ctrl kvx_ipi_controller; + +/** + * @kvx_pwr_ctrl_cpu_poweron Wakeup a cpu + * + * cpu: cpu to wakeup + */ +void kvx_ipi_send(const struct cpumask *mask) +{ + const unsigned long *maskb = cpumask_bits(mask); + + WARN_ON(*maskb & KVX_IPI_CPU_MASK); + writel(*maskb, kvx_ipi_controller.regs + IPI_INTERRUPT_OFFSET); +} + +static int kvx_ipi_starting_cpu(unsigned int cpu) +{ + enable_percpu_irq(kvx_ipi_controller.ipi_irq, IRQ_TYPE_NONE); + + return 0; +} + +static int kvx_ipi_dying_cpu(unsigned int cpu) +{ + disable_percpu_irq(kvx_ipi_controller.ipi_irq); + + return 0; +} + +int __init kvx_ipi_ctrl_probe(irqreturn_t (*ipi_irq_handler)(int, void *)) +{ + struct device_node *np; + int ret; + unsigned int ipi_irq; + void __iomem *ipi_base; + + np = of_find_compatible_node(NULL, NULL, "kalray,kvx-ipi-ctrl"); + BUG_ON(!np); + + ipi_base = of_iomap(np, 0); + BUG_ON(!ipi_base); + + kvx_ipi_controller.regs = ipi_base; + + /* Init mask for interrupts to PE0 -> PE15 */ + writel(KVX_IPI_CPU_MASK, kvx_ipi_controller.regs + IPI_MASK_OFFSET); + + ipi_irq = irq_of_parse_and_map(np, 0); + of_node_put(np); + if (!ipi_irq) { + pr_err("Failed to parse irq: %d\n", ipi_irq); + return -EINVAL; + } + + ret = request_percpu_irq(ipi_irq, ipi_irq_handler, + "kvx_ipi", &kvx_ipi_controller); + if (ret) { + pr_err("can't register interrupt %d (%d)\n", + ipi_irq, ret); + return ret; + } + kvx_ipi_controller.ipi_irq = ipi_irq; + + ret = cpuhp_setup_state(CPUHP_AP_IRQ_KVX_STARTING, + "kvx/ipi:online", + kvx_ipi_starting_cpu, + kvx_ipi_dying_cpu); + if (ret < 0) { + pr_err("Failed to setup hotplug state"); + return ret; + } + + return 0; +}