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 7EBDFC38159 for ; Fri, 20 Jan 2023 14:21:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BA94C6B00A7; Fri, 20 Jan 2023 09:20:55 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id B31356B00A9; Fri, 20 Jan 2023 09:20:55 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 878CA6B00AB; Fri, 20 Jan 2023 09:20:55 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 54BFB6B00A7 for ; Fri, 20 Jan 2023 09:20:55 -0500 (EST) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 2FBB8A0E99 for ; Fri, 20 Jan 2023 14:20:55 +0000 (UTC) X-FDA: 80375388870.07.E69B895 Received: from fx601.security-mail.net (smtpout140.security-mail.net [85.31.212.146]) by imf01.hostedemail.com (Postfix) with ESMTP id DE9044001B for ; Fri, 20 Jan 2023 14:20:52 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=kalray.eu header.s=sec-sig-email header.b=RVG8lnyP; dkim=fail ("body hash did not verify") header.d=kalray.eu header.s=32AE1B44-9502-11E5-BA35-3734643DEF29 header.b=c8htp1Bm; spf=pass (imf01.hostedemail.com: domain of ysionneau@kalray.eu designates 85.31.212.146 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=1674224453; 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=4KJZ591nv2iJW/axXDgM54X0cL4915C6g4VWvHokIaU=; b=YhMntTcJEw2bfQvCK64aHyJxWArz7Mjoyzn3BJ6zD4Xpvin63g1S+k6VJEHMO+VJ5XU3kV eul6iFhJ+NLr+e+nNU2k9H1LiySNm9v+nVS2HxxpwPcNP4uDZzqbRitULXrRwZmzNVjUvA TR0i6S/4Kkf8h9Dn4jnvYKlUbmHJrvM= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=kalray.eu header.s=sec-sig-email header.b=RVG8lnyP; dkim=fail ("body hash did not verify") header.d=kalray.eu header.s=32AE1B44-9502-11E5-BA35-3734643DEF29 header.b=c8htp1Bm; spf=pass (imf01.hostedemail.com: domain of ysionneau@kalray.eu designates 85.31.212.146 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=1674224453; a=rsa-sha256; cv=none; b=apG5b1ijuQUj3ofKUEJKTTiseOz5j4uUpRXjYLi6SfSrXaLVtD4qz8SWUrlpP6w8nIHGCq ihnZsJuwWpOqQPO1hDC+gTLpTOj9OTL5NeTNltFFDZh4l2go1EDQgZ9bpHJU2FT44HqXkO tR6m6YifvQ58MfadsXHBsXiEtbLAeTQ= Received: from localhost (fx601.security-mail.net [127.0.0.1]) by fx601.security-mail.net (Postfix) with ESMTP id 2D1393499A1 for ; Fri, 20 Jan 2023 15:20:50 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kalray.eu; s=sec-sig-email; t=1674224450; bh=uLDFRw6cSNd19jXGz4oGQWViTW/dUbPJSdY2fapvJJE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=RVG8lnyP+4C4WiqZOokDyRqKUBBE/tVmVh2150gYlKvxhNUqXiZVDz+B4WkmaAPzn VU37z1RuZpmc8isC46XBdz7JJD9ztAZiHDAGPlssCjNpDGJJqK3xFub47wcB/QNjAc h+unhhCPGjj7g6SgTmrGkqafLS75rwAmeGSWTnhA= Received: from fx601 (fx601.security-mail.net [127.0.0.1]) by fx601.security-mail.net (Postfix) with ESMTP id ECF30349950; Fri, 20 Jan 2023 15:20:49 +0100 (CET) Received: from zimbra2.kalray.eu (unknown [217.181.231.53]) by fx601.security-mail.net (Postfix) with ESMTPS id 9F73734977C; 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 0C96627E0470; 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 DD9FA27E0463; Fri, 20 Jan 2023 15:10:38 +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 DfM_HxOnd9Td; Fri, 20 Jan 2023 15:10:38 +0100 (CET) Received: from junon.lin.mbt.kalray.eu (unknown [192.168.37.161]) by zimbra2.kalray.eu (Postfix) with ESMTPSA id 5595327E0470; Fri, 20 Jan 2023 15:10:38 +0100 (CET) X-Virus-Scanned: E-securemail Secumail-id: <57d5.63caa33c.983e9.0> DKIM-Filter: OpenDKIM Filter v2.10.3 zimbra2.kalray.eu DD9FA27E0463 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kalray.eu; s=32AE1B44-9502-11E5-BA35-3734643DEF29; t=1674223838; bh=Ulssifik/xqyxmseDcDCHWF7GqQfVZORENj6s4m7VYQ=; h=From:To:Date:Message-Id:MIME-Version; b=c8htp1BmJN/ZqK2lC0okl9ZdmRBJrjLE0Xevwykd2j/+m7QLb63Zikx4OnmEIuo/W Di1UTV3iLdZyWQAIqMw8TerInA0DmSfQOa9dBTr2kbyPxrpdc6nurhUYWTcgOQZdlP MXGfL9njI9tpJ5KB86FGEG7jmsXmQo3UTpfRPdc0= 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 30/31] kvx: Add power controller driver Date: Fri, 20 Jan 2023 15:10:01 +0100 Message-ID: <20230120141002.2442-31-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: DE9044001B X-Stat-Signature: hucbibqewqw5jiqw4x3ys51c9kcufr4a X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1674224452-280978 X-HE-Meta: U2FsdGVkX18AUbCfkGBTUmVax0ING4yxrRe7zIY9eSwP0nNGelGnOuy+iS4Gint9uGjXRkjKj67UpJd4Q6d+4LXkQHx6IYckJKdzQf5+AwV1fUrvTM6nffWKrp2Qj7gG+2RupNonji4sAqTCVJ6MMrSzPBX7k8EVyximciVZL5z0AsAYrkV65T3LZX8/s/xYf/mRxOtwFPtJ173UqtFWzGHJkN+K2G48pKxZq007f9VYkVmJO90WTHrmVZoU6zaHFBshRn5nVNU/0v3MkcexPIk3/aMb3QNozAOKMAX69xsGC6c0GFa5ubKgTXV1f8aFezS/luhg+TGmS0ijlyD4zMolUn7VUZPr/Ki+otqMJk5eBU7ZrkArs953HZ8N2N8p3EJDU1hI7wKVw0n2ZYhHbazmG4Ni4jvnheAONs3Fny1SzGvFXPLEdZ5eWWApaBRDgrmVSGcIDEzU1Eq/1VTuviOGXFeKaShc9jeZI3tvUmc7TnEJW/zNCxYauJYC5ZA4lsF3W5aaqQXozoc+hltySdAJlCaytzeWZhoId1GuxBqxq1HKch04M9KbY4vW1K00ImjhmTNGAE8Z/lhEw4jCBRXVuHCPuGhFv2OOepCDLzYH/ft5EoYghwtrV76+uOV0omdP1KgJUIQe7SoHZ2zJqwg3/L8gcErOLRyaZXkh6LrkxSSnhhLZAY8JX9l2zDbbim05ozXAv5iYOcYmpxjJhtjWQjHgydPpWrUd3snpDdS5JhgzXfXhbKqP830GU7s3ZrldW6hL4ujJGzR5cKl2oG6zCu2zuCZrDi2HSx5OLRCYZza6P8QKfufPj5X3q8qadcUtFsO22Q1sAuWe4xbqNRixe6vNzv2QGREp+P79dhXl6Ii5N9jBbG6NZXi/1MsSdlLBHV2lCjvYL8TjhEiue3FD5YlRR7YxUCzIzC0f549FaHeKZqHFAOON1HORUrE7KiMIYoUv2Pz1GCtWYfC XVfv6aKh XFwDE72p7EDrFKJgqUgnz5BVlUHAaVbK2vQyhLIcMh4w2xljJC35VANhTKU3bY3I+KxBreRglo2gCfs7UEE2ihOCg6K0OzzFuBMRrR0rPZUci4USqPBAQoGLAu5xUhIBWh3cBjqRn7pPm9e3K1fXqnE94P5waycwFmWC045QUtlpoR/IQnXN8oFiyQgKTBmWkKQaB6/huZglnqPGft0kCooBWD7FBAbIy6drG8ZtGozCocLq9e+Cfsb9sEeoBt+6T4Ag9lYtiqV+bTdSOrAAaRWDjmtykUqNTG8Il1SDpgbQdqYEeryM8s2iOEVguwO4tcOOGJZn6Z2ct+9zppc6f3hmqPCp1zhOsnYGbKMPjKCH2orOZZgi2ocRtC73OdP4lw6BWKt+R6+xTSPF/lPJBAjh53BhlO8cayPbi1wOYGuvfQjHrLrW+znBwiizqLJvV/w7SeoYF9FJHc/Ifh2dkjHO8t+gYD7Scx8tJTWmW7J5Fa0CxNQAScA20Wd1qdXDEwmPV2xZL/Sa3B8JqmftVdMM/xCVGsKtYn7CzvU6QSPJ45Q/RT7NGYizgMbBtlYEovBV8048E9zffKHrTzuy1Ev62213blasqbjCyz8NO72eGG4DGPoqIMR10GVDGY6HAQrF1YvS8mPJcNZQLC06KRRSYgCPxMXbYuEJq+Okm6cr2FjeJzg/zVF6PKfLZJDIrdLvE 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 Power Controller (pwr-ctrl) control cores reset and wake-up procedure. Co-developed-by: Clement Leger Signed-off-by: Clement Leger Co-developed-by: Julian Vetter Signed-off-by: Julian Vetter Co-developed-by: Louis Morhet Signed-off-by: Louis Morhet Co-developed-by: Marius Gligor Signed-off-by: Marius Gligor Signed-off-by: Jules Maselbas Signed-off-by: Yann Sionneau --- Notes: V1 -> V2: new patch arch/kvx/include/asm/pwr_ctrl.h | 45 ++++++++++++++++ arch/kvx/platform/Makefile | 6 +++ arch/kvx/platform/pwr_ctrl.c | 91 +++++++++++++++++++++++++++++++++ 3 files changed, 142 insertions(+) create mode 100644 arch/kvx/include/asm/pwr_ctrl.h create mode 100644 arch/kvx/platform/Makefile create mode 100644 arch/kvx/platform/pwr_ctrl.c diff --git a/arch/kvx/include/asm/pwr_ctrl.h b/arch/kvx/include/asm/pwr_ctrl.h new file mode 100644 index 000000000000..25f403ba935a --- /dev/null +++ b/arch/kvx/include/asm/pwr_ctrl.h @@ -0,0 +1,45 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (C) 2017-2023 Kalray Inc. + * Author(s): Clement Leger + * Marius Gligor + */ + +#ifndef _ASM_KVX_PWR_CTRL_H +#define _ASM_KVX_PWR_CTRL_H + +#ifndef __ASSEMBLY__ + +int kvx_pwr_ctrl_probe(void); + +void kvx_pwr_ctrl_cpu_poweron(unsigned int cpu); + +#endif + +/* Power controller vector register definitions */ +#define KVX_PWR_CTRL_VEC_OFFSET 0x1000 +#define KVX_PWR_CTRL_VEC_WUP_SET_OFFSET 0x10 +#define KVX_PWR_CTRL_VEC_WUP_CLEAR_OFFSET 0x20 + +/* Power controller PE reset PC register definitions */ +#define KVX_PWR_CTRL_RESET_PC_OFFSET 0x2000 + +/* Power controller global register definitions */ +#define KVX_PWR_CTRL_GLOBAL_OFFSET 0x4040 + +#define KVX_PWR_CTRL_GLOBAL_SET_OFFSET 0x10 +#define KVX_PWR_CTRL_GLOBAL_SET_PE_EN_SHIFT 0x1 + +#define PWR_CTRL_WUP_SET_OFFSET \ + (KVX_PWR_CTRL_VEC_OFFSET + \ + KVX_PWR_CTRL_VEC_WUP_SET_OFFSET) + +#define PWR_CTRL_WUP_CLEAR_OFFSET \ + (KVX_PWR_CTRL_VEC_OFFSET + \ + KVX_PWR_CTRL_VEC_WUP_CLEAR_OFFSET) + +#define PWR_CTRL_GLOBAL_CONFIG_OFFSET \ + (KVX_PWR_CTRL_GLOBAL_OFFSET + \ + KVX_PWR_CTRL_GLOBAL_SET_OFFSET) + +#endif /* _ASM_KVX_PWR_CTRL_H */ diff --git a/arch/kvx/platform/Makefile b/arch/kvx/platform/Makefile new file mode 100644 index 000000000000..c7d0abb15c27 --- /dev/null +++ b/arch/kvx/platform/Makefile @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: GPL-2.0-only +# +# Copyright (C) 2018-2023 Kalray Inc. +# + +obj-$(CONFIG_SMP) += pwr_ctrl.o diff --git a/arch/kvx/platform/pwr_ctrl.c b/arch/kvx/platform/pwr_ctrl.c new file mode 100644 index 000000000000..ee35d04845ae --- /dev/null +++ b/arch/kvx/platform/pwr_ctrl.c @@ -0,0 +1,91 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (C) 2017-2023 Kalray Inc. + * Author(s): Clement Leger + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include +#include +#include +#include +#include + +#include +#include + +struct kvx_pwr_ctrl { + void __iomem *regs; +}; + +static struct kvx_pwr_ctrl kvx_pwr_controller; + +/** + * kvx_pwr_ctrl_cpu_poweron() - Wakeup a cpu + * @cpu: cpu to wakeup + */ +void kvx_pwr_ctrl_cpu_poweron(unsigned int cpu) +{ + /* Set PE boot address */ + writeq((unsigned long long)kvx_start, + kvx_pwr_controller.regs + KVX_PWR_CTRL_RESET_PC_OFFSET); + /* Wake up processor ! */ + writeq(1ULL << cpu, + kvx_pwr_controller.regs + PWR_CTRL_WUP_SET_OFFSET); + /* Then clear wakeup to allow processor to sleep */ + writeq(1ULL << cpu, + kvx_pwr_controller.regs + PWR_CTRL_WUP_CLEAR_OFFSET); +} + +static struct device_node * __init get_pwr_ctrl_node(void) +{ + const phandle *ph; + struct device_node *cpu; + struct device_node *node; + + cpu = of_get_cpu_node(raw_smp_processor_id(), NULL); + if (!cpu) { + pr_err("Failed to get CPU node\n"); + return NULL; + } + + ph = of_get_property(cpu, "power-controller", NULL); + if (!ph) { + pr_err("Failed to get power-controller phandle\n"); + return NULL; + } + + node = of_find_node_by_phandle(be32_to_cpup(ph)); + if (!node) { + pr_err("Failed to get power-controller node\n"); + return NULL; + } + + return node; +} + +int __init kvx_pwr_ctrl_probe(void) +{ + struct device_node *ctrl; + + ctrl = get_pwr_ctrl_node(); + if (!ctrl) { + pr_err("Failed to get power controller node\n"); + return -EINVAL; + } + + if (!of_device_is_compatible(ctrl, "kalray,kvx-pwr-ctrl")) { + pr_err("Failed to get power controller node\n"); + return -EINVAL; + } + + kvx_pwr_controller.regs = of_iomap(ctrl, 0); + if (!kvx_pwr_controller.regs) { + pr_err("Failed ioremap\n"); + return -EINVAL; + } + + return 0; +} -- 2.37.2