From patchwork Sun Mar 17 18:28:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukas Auer X-Patchwork-Id: 1057546 X-Patchwork-Delegate: uboot@andestech.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=aisec.fraunhofer.de Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 44MnsB6vJjz9s6w for ; Mon, 18 Mar 2019 05:29:18 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 11BB7C21E79; Sun, 17 Mar 2019 18:29:16 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=RCVD_IN_DNSWL_MED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 9958CC21CB1; Sun, 17 Mar 2019 18:29:13 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id CD643C21CB6; Sun, 17 Mar 2019 18:29:12 +0000 (UTC) Received: from mail-edgeKA24.fraunhofer.de (mail-edgeka24.fraunhofer.de [153.96.1.24]) by lists.denx.de (Postfix) with ESMTPS id 5C5F0C21BE5 for ; Sun, 17 Mar 2019 18:29:12 +0000 (UTC) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2EFAAB0kY5c/xwBYJljGgEBAQEBAgEBAQEHAgEBAQGBUQUBAQEBCwGCEIISjCdfikKLP45/FIFnDYF3gnUChFEiNAkNAQEDAQEJAQMCAgJpHAyFTAYnCwFGEB00IRwMDgYOBYMigV4DFAGqLTOHeQ2CHwkBgSUBhmhZg26BVz+BEAGFaYFvJIV4A4ojgguXcjUHAoEmgSEEjRuDMwwZgXyJDyuIIZI1i3WBRzmBVjMaJIM7ghYXg0SKWz4BMgGPLgEB X-IPAS-Result: A2EFAAB0kY5c/xwBYJljGgEBAQEBAgEBAQEHAgEBAQGBUQUBAQEBCwGCEIISjCdfikKLP45/FIFnDYF3gnUChFEiNAkNAQEDAQEJAQMCAgJpHAyFTAYnCwFGEB00IRwMDgYOBYMigV4DFAGqLTOHeQ2CHwkBgSUBhmhZg26BVz+BEAGFaYFvJIV4A4ojgguXcjUHAoEmgSEEjRuDMwwZgXyJDyuIIZI1i3WBRzmBVjMaJIM7ghYXg0SKWz4BMgGPLgEB X-IronPort-AV: E=Sophos;i="5.58,490,1544482800"; d="scan'208";a="13835732" Received: from mail-mtaka28.fraunhofer.de ([153.96.1.28]) by mail-edgeKA24.fraunhofer.de with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 17 Mar 2019 19:29:11 +0100 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0AEAACWkY5cfRBhWMBjGgEBAQEBAgEBAQEHAgEBAQGBUQUBAQEBCwGDSCE5jCdflgGOfxSBZw2Bd4J1AoRyNAkNAQEDAQEJAQMCFAEBFjojDIVLAwMnCwFGEB00IRwMDgYOBYMigV4DFaotM4d5DYIfCQGBJQGGaFmFRT+BEAGFaYFvJIV4A4ojgguXcjUHAoEmgSEEjRuDMwwZgXyJDyuIIZI1i3WBRzeBVzMaJIM7ghYXg0SKWz4DMAGPLgEB X-IronPort-AV: E=Sophos;i="5.58,490,1544482800"; d="scan'208";a="19588556" Received: from fgdemucivp01ltm.xch.fraunhofer.de (HELO FGDEMUCIMP11EXC.ads.fraunhofer.de) ([192.88.97.16]) by mail-mtaKA28.fraunhofer.de with ESMTP/TLS/AES256-SHA; 17 Mar 2019 19:29:12 +0100 Received: from localhost.de (10.80.233.50) by FGDEMUCIMP11EXC.ads.fraunhofer.de (10.80.232.42) with Microsoft SMTP Server (TLS) id 14.3.435.0; Sun, 17 Mar 2019 19:29:10 +0100 From: Lukas Auer To: Date: Sun, 17 Mar 2019 19:28:32 +0100 Message-ID: <20190317182842.18108-2-lukas.auer@aisec.fraunhofer.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190317182842.18108-1-lukas.auer@aisec.fraunhofer.de> References: <20190317182842.18108-1-lukas.auer@aisec.fraunhofer.de> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-11.0.0.4179-8.200.1013-24494.006 X-TM-AS-Result: No--12.015100-8.000000-31 X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No Cc: Andreas Schwab , Palmer Dabbelt , Alexander Graf Subject: [U-Boot] [PATCH v3 01/11] riscv: add infrastructure for calling functions on other harts X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Harts on RISC-V boot independently, U-Boot is responsible for managing them. Functions are called on other harts with smp_call_function(), which sends inter-processor interrupts (IPIs) to all other available harts. Available harts are those marked as available in the device tree and present in the available_harts mask stored in global data. The available_harts mask is used to register all harts that have entered U-Boot. Functions are specified with their address and two function arguments (argument 2 and 3). The first function argument is always the hart ID of the hart calling the function. On the other harts, the IPI interrupt handler handle_ipi() must be called on software interrupts to handle the request and call the specified function. Functions are stored in the ipi_data data structure. Every hart has its own data structure in global data. While this is not required at the moment (all harts are expected to boot Linux), this does allow future expansion, where other harts may be used for monitoring or other tasks. Signed-off-by: Lukas Auer Reviewed-by: Anup Patel Reviewed-by: Bin Meng Tested-by: Bin Meng --- Changes in v3: - Print error if riscv_send_ipi() fails - Adjust error message for failures of riscv_clear_ipi() to match error message for failures of riscv_send_ipi() Changes in v2: - Remove unneeded quotes from NR_CPUS Kconfig entry - Move memory barrier from send_ipi_many() to handle_ipi() - Add check in send_ipi_many so that IPIs are only sent to available harts as indicated by the available_harts mask arch/riscv/Kconfig | 19 +++++ arch/riscv/include/asm/global_data.h | 6 ++ arch/riscv/include/asm/smp.h | 53 ++++++++++++ arch/riscv/lib/Makefile | 1 + arch/riscv/lib/smp.c | 118 +++++++++++++++++++++++++++ 5 files changed, 197 insertions(+) create mode 100644 arch/riscv/include/asm/smp.h create mode 100644 arch/riscv/lib/smp.c diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index 36512a8995..4d7a115569 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -120,4 +120,23 @@ config RISCV_RDTIME config SYS_MALLOC_F_LEN default 0x1000 +config SMP + bool "Symmetric Multi-Processing" + help + This enables support for systems with more than one CPU. If + you say N here, U-Boot will run on single and multiprocessor + machines, but will use only one CPU of a multiprocessor + machine. If you say Y here, U-Boot will run on many, but not + all, single processor machines. + +config NR_CPUS + int "Maximum number of CPUs (2-32)" + range 2 32 + depends on SMP + default 8 + help + On multiprocessor machines, U-Boot sets up a stack for each CPU. + Stack memory is pre-allocated. U-Boot must therefore know the + maximum number of CPUs that may be present. + endmenu diff --git a/arch/riscv/include/asm/global_data.h b/arch/riscv/include/asm/global_data.h index a3a342c6e1..80e3165e39 100644 --- a/arch/riscv/include/asm/global_data.h +++ b/arch/riscv/include/asm/global_data.h @@ -10,12 +10,18 @@ #ifndef __ASM_GBL_DATA_H #define __ASM_GBL_DATA_H +#include + /* Architecture-specific global data */ struct arch_global_data { long boot_hart; /* boot hart id */ #ifdef CONFIG_SIFIVE_CLINT void __iomem *clint; /* clint base address */ #endif +#ifdef CONFIG_SMP + struct ipi_data ipi[CONFIG_NR_CPUS]; +#endif + ulong available_harts; }; #include diff --git a/arch/riscv/include/asm/smp.h b/arch/riscv/include/asm/smp.h new file mode 100644 index 0000000000..bc863fdbaf --- /dev/null +++ b/arch/riscv/include/asm/smp.h @@ -0,0 +1,53 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) 2019 Fraunhofer AISEC, + * Lukas Auer + */ + +#ifndef _ASM_RISCV_SMP_H +#define _ASM_RISCV_SMP_H + +/** + * struct ipi_data - Inter-processor interrupt (IPI) data structure + * + * IPIs are used for SMP support to communicate to other harts what function to + * call. Functions are in the form + * void (*addr)(ulong hart, ulong arg0, ulong arg1). + * + * The function address and the two arguments, arg0 and arg1, are stored in the + * IPI data structure. The hart ID is inserted by the hart handling the IPI and + * calling the function. + * + * @addr: Address of function + * @arg0: First argument of function + * @arg1: Second argument of function + */ +struct ipi_data { + ulong addr; + ulong arg0; + ulong arg1; +}; + +/** + * handle_ipi() - interrupt handler for software interrupts + * + * The IPI interrupt handler must be called to handle software interrupts. It + * calls the function specified in the hart's IPI data structure. + * + * @hart: Hart ID of the current hart + */ +void handle_ipi(ulong hart); + +/** + * smp_call_function() - Call a function on all other harts + * + * Send IPIs with the specified function call to all harts. + * + * @addr: Address of function + * @arg0: First argument of function + * @arg1: Second argument of function + * @return 0 if OK, -ve on error + */ +int smp_call_function(ulong addr, ulong arg0, ulong arg1); + +#endif diff --git a/arch/riscv/lib/Makefile b/arch/riscv/lib/Makefile index edfa61690c..19370f9749 100644 --- a/arch/riscv/lib/Makefile +++ b/arch/riscv/lib/Makefile @@ -14,6 +14,7 @@ obj-$(CONFIG_SIFIVE_CLINT) += sifive_clint.o obj-y += interrupts.o obj-y += reset.o obj-y += setjmp.o +obj-$(CONFIG_SMP) += smp.o # For building EFI apps CFLAGS_$(EFI_CRT0) := $(CFLAGS_EFI) diff --git a/arch/riscv/lib/smp.c b/arch/riscv/lib/smp.c new file mode 100644 index 0000000000..caa292ccd2 --- /dev/null +++ b/arch/riscv/lib/smp.c @@ -0,0 +1,118 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (C) 2019 Fraunhofer AISEC, + * Lukas Auer + */ + +#include +#include +#include +#include + +DECLARE_GLOBAL_DATA_PTR; + +/** + * riscv_send_ipi() - Send inter-processor interrupt (IPI) + * + * Platform code must provide this function. + * + * @hart: Hart ID of receiving hart + * @return 0 if OK, -ve on error + */ +extern int riscv_send_ipi(int hart); + +/** + * riscv_clear_ipi() - Clear inter-processor interrupt (IPI) + * + * Platform code must provide this function. + * + * @hart: Hart ID of hart to be cleared + * @return 0 if OK, -ve on error + */ +extern int riscv_clear_ipi(int hart); + +static int send_ipi_many(struct ipi_data *ipi) +{ + ofnode node, cpus; + u32 reg; + int ret; + + cpus = ofnode_path("/cpus"); + if (!ofnode_valid(cpus)) { + pr_err("Can't find cpus node!\n"); + return -EINVAL; + } + + ofnode_for_each_subnode(node, cpus) { + /* skip if hart is marked as not available in the device tree */ + if (!ofnode_is_available(node)) + continue; + + /* read hart ID of CPU */ + ret = ofnode_read_u32(node, "reg", ®); + if (ret) + continue; + + /* skip if it is the hart we are running on */ + if (reg == gd->arch.boot_hart) + continue; + + if (reg >= CONFIG_NR_CPUS) { + pr_err("Hart ID %d is out of range, increase CONFIG_NR_CPUS\n", + reg); + continue; + } + + /* skip if hart is not available */ + if (!(gd->arch.available_harts & (1 << reg))) + continue; + + gd->arch.ipi[reg].addr = ipi->addr; + gd->arch.ipi[reg].arg0 = ipi->arg0; + gd->arch.ipi[reg].arg1 = ipi->arg1; + + ret = riscv_send_ipi(reg); + if (ret) { + pr_err("Cannot send IPI to hart %d\n", reg); + return ret; + } + } + + return 0; +} + +void handle_ipi(ulong hart) +{ + int ret; + void (*smp_function)(ulong hart, ulong arg0, ulong arg1); + + if (hart >= CONFIG_NR_CPUS) + return; + + ret = riscv_clear_ipi(hart); + if (ret) { + pr_err("Cannot clear IPI of hart %ld\n", hart); + return; + } + + __smp_mb(); + + smp_function = (void (*)(ulong, ulong, ulong))gd->arch.ipi[hart].addr; + invalidate_icache_all(); + + smp_function(hart, gd->arch.ipi[hart].arg0, gd->arch.ipi[hart].arg1); +} + +int smp_call_function(ulong addr, ulong arg0, ulong arg1) +{ + int ret = 0; + struct ipi_data ipi; + + ipi.addr = addr; + ipi.arg0 = arg0; + ipi.arg1 = arg1; + + ret = send_ipi_many(&ipi); + + return ret; +} From patchwork Sun Mar 17 18:28:33 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukas Auer X-Patchwork-Id: 1057549 X-Patchwork-Delegate: uboot@andestech.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=aisec.fraunhofer.de Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 44Mntc4M0dz9s5c for ; Mon, 18 Mar 2019 05:30:32 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 900D1C21E7F; Sun, 17 Mar 2019 18:29:50 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=RCVD_IN_DNSWL_MED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 85CF7C21E0D; Sun, 17 Mar 2019 18:29:14 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 258CCC21C38; Sun, 17 Mar 2019 18:29:13 +0000 (UTC) Received: from mail-edgeKA24.fraunhofer.de (mail-edgeka24.fraunhofer.de [153.96.1.24]) by lists.denx.de (Postfix) with ESMTPS id C460FC21CB1 for ; Sun, 17 Mar 2019 18:29:12 +0000 (UTC) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2EcAAB0kY5c/xwBYJljGwEBAQEDAQEBBwMBAQGBUwQBAQELAYIQghKNBopCiz+OfxSBZw2EbAKEUSI2Bw0BAQMBAQkBAwICAmkcDIVMBjIBRhBRIRwaBg4FgyKBXgMUAapgh3kNgh8JAYElAYZohEeBVz+BEAGFaYFvhXoiA4wul3I1BwKBJoEhBI0bgzMMGYsLiEySNYt1gU4BMYFWMxokgzuCFheDRIpbPgEyAY8uAQE X-IPAS-Result: A2EcAAB0kY5c/xwBYJljGwEBAQEDAQEBBwMBAQGBUwQBAQELAYIQghKNBopCiz+OfxSBZw2EbAKEUSI2Bw0BAQMBAQkBAwICAmkcDIVMBjIBRhBRIRwaBg4FgyKBXgMUAapgh3kNgh8JAYElAYZohEeBVz+BEAGFaYFvhXoiA4wul3I1BwKBJoEhBI0bgzMMGYsLiEySNYt1gU4BMYFWMxokgzuCFheDRIpbPgEyAY8uAQE X-IronPort-AV: E=Sophos;i="5.58,490,1544482800"; d="scan'208";a="13835733" Received: from mail-mtaka28.fraunhofer.de ([153.96.1.28]) by mail-edgeKA24.fraunhofer.de with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 17 Mar 2019 19:29:12 +0100 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0BQAACWkY5cfRBhWMBjHAEBAQQBAQcEAQGBUwUBAQsBg0ghOY0GlgGOfxSBZw2EbAKEcjYHDQEBAwEBCQEDAhQBARY6IwyFSwMDMgFGEFEhHBoGDgWDIoFeAxWqYId5DYIfCQGBJQGGaIYeP4EQAYVpgW+FeiIDjC6XcjUHAoEmgSEEjRuDMwwZiwuITJI1i3WBTgEvgVczGiSDO4IWF4NEils+AzABjy4BAQ X-IronPort-AV: E=Sophos;i="5.58,490,1544482800"; d="scan'208";a="19588557" Received: from fgdemucivp01ltm.xch.fraunhofer.de (HELO FGDEMUCIMP11EXC.ads.fraunhofer.de) ([192.88.97.16]) by mail-mtaKA28.fraunhofer.de with ESMTP/TLS/AES256-SHA; 17 Mar 2019 19:29:13 +0100 Received: from localhost.de (10.80.233.50) by FGDEMUCIMP11EXC.ads.fraunhofer.de (10.80.232.42) with Microsoft SMTP Server (TLS) id 14.3.435.0; Sun, 17 Mar 2019 19:29:11 +0100 From: Lukas Auer To: Date: Sun, 17 Mar 2019 19:28:33 +0100 Message-ID: <20190317182842.18108-3-lukas.auer@aisec.fraunhofer.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190317182842.18108-1-lukas.auer@aisec.fraunhofer.de> References: <20190317182842.18108-1-lukas.auer@aisec.fraunhofer.de> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-11.0.0.4179-8.200.1013-24494.006 X-TM-AS-Result: No--5.595000-8.000000-31 X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No Cc: Andreas Schwab , Palmer Dabbelt Subject: [U-Boot] [PATCH v3 02/11] riscv: import the supervisor binary interface header file X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Import the supervisor binary interface (SBI) header file from Linux (arch/riscv/include/asm/sbi.h). The last change to it was in commit 6d60b6ee0c97 ("RISC-V: Device, timer, IRQs, and the SBI"). Signed-off-by: Lukas Auer Reviewed-by: Anup Patel Reviewed-by: Bin Meng Reviewed-by: Atish Patra --- Changes in v3: None Changes in v2: None arch/riscv/include/asm/sbi.h | 94 ++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 arch/riscv/include/asm/sbi.h diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h new file mode 100644 index 0000000000..ced57defdd --- /dev/null +++ b/arch/riscv/include/asm/sbi.h @@ -0,0 +1,94 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) 2015 Regents of the University of California + * + * Taken from Linux arch/riscv/include/asm/sbi.h + */ + +#ifndef _ASM_RISCV_SBI_H +#define _ASM_RISCV_SBI_H + +#include + +#define SBI_SET_TIMER 0 +#define SBI_CONSOLE_PUTCHAR 1 +#define SBI_CONSOLE_GETCHAR 2 +#define SBI_CLEAR_IPI 3 +#define SBI_SEND_IPI 4 +#define SBI_REMOTE_FENCE_I 5 +#define SBI_REMOTE_SFENCE_VMA 6 +#define SBI_REMOTE_SFENCE_VMA_ASID 7 +#define SBI_SHUTDOWN 8 + +#define SBI_CALL(which, arg0, arg1, arg2) ({ \ + register uintptr_t a0 asm ("a0") = (uintptr_t)(arg0); \ + register uintptr_t a1 asm ("a1") = (uintptr_t)(arg1); \ + register uintptr_t a2 asm ("a2") = (uintptr_t)(arg2); \ + register uintptr_t a7 asm ("a7") = (uintptr_t)(which); \ + asm volatile ("ecall" \ + : "+r" (a0) \ + : "r" (a1), "r" (a2), "r" (a7) \ + : "memory"); \ + a0; \ +}) + +/* Lazy implementations until SBI is finalized */ +#define SBI_CALL_0(which) SBI_CALL(which, 0, 0, 0) +#define SBI_CALL_1(which, arg0) SBI_CALL(which, arg0, 0, 0) +#define SBI_CALL_2(which, arg0, arg1) SBI_CALL(which, arg0, arg1, 0) + +static inline void sbi_console_putchar(int ch) +{ + SBI_CALL_1(SBI_CONSOLE_PUTCHAR, ch); +} + +static inline int sbi_console_getchar(void) +{ + return SBI_CALL_0(SBI_CONSOLE_GETCHAR); +} + +static inline void sbi_set_timer(uint64_t stime_value) +{ +#if __riscv_xlen == 32 + SBI_CALL_2(SBI_SET_TIMER, stime_value, stime_value >> 32); +#else + SBI_CALL_1(SBI_SET_TIMER, stime_value); +#endif +} + +static inline void sbi_shutdown(void) +{ + SBI_CALL_0(SBI_SHUTDOWN); +} + +static inline void sbi_clear_ipi(void) +{ + SBI_CALL_0(SBI_CLEAR_IPI); +} + +static inline void sbi_send_ipi(const unsigned long *hart_mask) +{ + SBI_CALL_1(SBI_SEND_IPI, hart_mask); +} + +static inline void sbi_remote_fence_i(const unsigned long *hart_mask) +{ + SBI_CALL_1(SBI_REMOTE_FENCE_I, hart_mask); +} + +static inline void sbi_remote_sfence_vma(const unsigned long *hart_mask, + unsigned long start, + unsigned long size) +{ + SBI_CALL_1(SBI_REMOTE_SFENCE_VMA, hart_mask); +} + +static inline void sbi_remote_sfence_vma_asid(const unsigned long *hart_mask, + unsigned long start, + unsigned long size, + unsigned long asid) +{ + SBI_CALL_1(SBI_REMOTE_SFENCE_VMA_ASID, hart_mask); +} + +#endif From patchwork Sun Mar 17 18:28:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukas Auer X-Patchwork-Id: 1057550 X-Patchwork-Delegate: uboot@andestech.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=aisec.fraunhofer.de Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 44Mnwd1Hlhz9s70 for ; Mon, 18 Mar 2019 05:32:16 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 9C98EC21D56; Sun, 17 Mar 2019 18:30:05 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=RCVD_IN_DNSWL_MED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id F0E83C21E52; Sun, 17 Mar 2019 18:29:20 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 49F2EC21E96; Sun, 17 Mar 2019 18:29:17 +0000 (UTC) Received: from mail-edgeKA24.fraunhofer.de (mail-edgeka24.fraunhofer.de [153.96.1.24]) by lists.denx.de (Postfix) with ESMTPS id B1CF1C21D4A for ; Sun, 17 Mar 2019 18:29:13 +0000 (UTC) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2EEAAB0kY5c/xwBYJljGgEBAQEBAgEBAQEHAgEBAQGBUQUBAQEBCwGCEIISjCdfikKLP45/FIFnDYRsAoRRIjQJDQEBAwEBCQEDAgICaRwMhUwGMgFGEFEhHBoGDgWDIoFeAxQBqmCHeQ2CHwkBgSUBhmiER4FXP4EQAYVpgW8kZIUUA4wul3I1BwKBJoEhBI0bgzMMGYsLiEySNYt1gUc5gVYzGiSDO4Vxils+ATIBjy4BAQ X-IPAS-Result: A2EEAAB0kY5c/xwBYJljGgEBAQEBAgEBAQEHAgEBAQGBUQUBAQEBCwGCEIISjCdfikKLP45/FIFnDYRsAoRRIjQJDQEBAwEBCQEDAgICaRwMhUwGMgFGEFEhHBoGDgWDIoFeAxQBqmCHeQ2CHwkBgSUBhmiER4FXP4EQAYVpgW8kZIUUA4wul3I1BwKBJoEhBI0bgzMMGYsLiEySNYt1gUc5gVYzGiSDO4Vxils+ATIBjy4BAQ X-IronPort-AV: E=Sophos;i="5.58,490,1544482800"; d="scan'208";a="13835737" Received: from mail-mtaka28.fraunhofer.de ([153.96.1.28]) by mail-edgeKA24.fraunhofer.de with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 17 Mar 2019 19:29:13 +0100 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0AEAACWkY5cfRBhWMBjGgEBAQEBAgEBAQEHAgEBAQGBUQUBAQEBCwGDSCE5jCdflgGOfxSBZw2EbAKEcjQJDQEBAwEBCQEDAhQBARY6IwyFSwMDMgFGEFEhHBoGDgWDIoFeAxWqYId5DYIfCQGBJQGGaIYeP4EQAYVpgW8kZIUUA4wul3I1BwKBJoEhBI0bgzMMGYsLiEySNYt1gUc3gVczGiSDO4Vxils+AzABjy4BAQ X-IronPort-AV: E=Sophos;i="5.58,490,1544482800"; d="scan'208";a="19588558" Received: from fgdemucivp01ltm.xch.fraunhofer.de (HELO FGDEMUCIMP11EXC.ads.fraunhofer.de) ([192.88.97.16]) by mail-mtaKA28.fraunhofer.de with ESMTP/TLS/AES256-SHA; 17 Mar 2019 19:29:14 +0100 Received: from localhost.de (10.80.233.50) by FGDEMUCIMP11EXC.ads.fraunhofer.de (10.80.232.42) with Microsoft SMTP Server (TLS) id 14.3.435.0; Sun, 17 Mar 2019 19:29:12 +0100 From: Lukas Auer To: Date: Sun, 17 Mar 2019 19:28:34 +0100 Message-ID: <20190317182842.18108-4-lukas.auer@aisec.fraunhofer.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190317182842.18108-1-lukas.auer@aisec.fraunhofer.de> References: <20190317182842.18108-1-lukas.auer@aisec.fraunhofer.de> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-11.0.0.4179-8.200.1013-24494.006 X-TM-AS-Result: No--1.996000-8.000000-31 X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No Cc: Andreas Schwab , Palmer Dabbelt , Alexander Graf Subject: [U-Boot] [PATCH v3 03/11] riscv: implement IPI platform functions using SBI X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" The supervisor binary interface (SBI) provides the necessary functions to implement the platform IPI functions riscv_send_ipi() and riscv_clear_ipi(). Use it to implement them. This adds support for inter-processor interrupts (IPIs) on RISC-V CPUs running in supervisor mode. Support for machine mode is already available for CPUs that include the SiFive CLINT. Signed-off-by: Lukas Auer Reviewed-by: Anup Patel Reviewed-by: Bin Meng Reviewed-by: Atish Patra Tested-by: Bin Meng --- Changes in v3: None Changes in v2: None arch/riscv/Kconfig | 5 +++++ arch/riscv/lib/Makefile | 1 + arch/riscv/lib/sbi_ipi.c | 25 +++++++++++++++++++++++++ 3 files changed, 31 insertions(+) create mode 100644 arch/riscv/lib/sbi_ipi.c diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index 4d7a115569..9da609b33b 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -139,4 +139,9 @@ config NR_CPUS Stack memory is pre-allocated. U-Boot must therefore know the maximum number of CPUs that may be present. +config SBI_IPI + bool + default y if RISCV_SMODE + depends on SMP + endmenu diff --git a/arch/riscv/lib/Makefile b/arch/riscv/lib/Makefile index 19370f9749..35dbf643e4 100644 --- a/arch/riscv/lib/Makefile +++ b/arch/riscv/lib/Makefile @@ -13,6 +13,7 @@ obj-$(CONFIG_RISCV_RDTIME) += rdtime.o obj-$(CONFIG_SIFIVE_CLINT) += sifive_clint.o obj-y += interrupts.o obj-y += reset.o +obj-$(CONFIG_SBI_IPI) += sbi_ipi.o obj-y += setjmp.o obj-$(CONFIG_SMP) += smp.o diff --git a/arch/riscv/lib/sbi_ipi.c b/arch/riscv/lib/sbi_ipi.c new file mode 100644 index 0000000000..170346da68 --- /dev/null +++ b/arch/riscv/lib/sbi_ipi.c @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (C) 2019 Fraunhofer AISEC, + * Lukas Auer + */ + +#include +#include + +int riscv_send_ipi(int hart) +{ + ulong mask; + + mask = 1UL << hart; + sbi_send_ipi(&mask); + + return 0; +} + +int riscv_clear_ipi(int hart) +{ + sbi_clear_ipi(); + + return 0; +} From patchwork Sun Mar 17 18:28:35 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukas Auer X-Patchwork-Id: 1057552 X-Patchwork-Delegate: uboot@andestech.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=aisec.fraunhofer.de Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 44Mnwn5BWxz9s5c for ; Mon, 18 Mar 2019 05:32:25 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 7024CC21E74; Sun, 17 Mar 2019 18:30:52 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=RCVD_IN_DNSWL_MED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 99088C21EBB; Sun, 17 Mar 2019 18:29:29 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 2422BC21E44; Sun, 17 Mar 2019 18:29:20 +0000 (UTC) Received: from mail-edgeKA24.fraunhofer.de (mail-edgeka24.fraunhofer.de [153.96.1.24]) by lists.denx.de (Postfix) with ESMTPS id A9A3CC21E1E for ; Sun, 17 Mar 2019 18:29:14 +0000 (UTC) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2EHAAB0kY5c/xwBYJljGgEBAQEBAgEBAQEHAgEBAQGBUgQBAQEBCwGCEIISjQaKQos/jn+Bew2EbAKEUSI1CA0BAQMBAQkBAwICAmkcDIVMBjIBRhBRIRwaBg4FgyKBXgMUAapgh3kNgh8JAYElAYZohEeBVz+BEYVpgneFFAOMLpdyNQcCgSaBIQSNG4MzDBmLC4hMkjWLdYFJAzSBVjMaJIM7hXGKWz4BMgGPLgEB X-IPAS-Result: A2EHAAB0kY5c/xwBYJljGgEBAQEBAgEBAQEHAgEBAQGBUgQBAQEBCwGCEIISjQaKQos/jn+Bew2EbAKEUSI1CA0BAQMBAQkBAwICAmkcDIVMBjIBRhBRIRwaBg4FgyKBXgMUAapgh3kNgh8JAYElAYZohEeBVz+BEYVpgneFFAOMLpdyNQcCgSaBIQSNG4MzDBmLC4hMkjWLdYFJAzSBVjMaJIM7hXGKWz4BMgGPLgEB X-IronPort-AV: E=Sophos;i="5.58,490,1544482800"; d="scan'208";a="13835739" Received: from mail-mtaka28.fraunhofer.de ([153.96.1.28]) by mail-edgeKA24.fraunhofer.de with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 17 Mar 2019 19:29:14 +0100 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0AGAACWkY5cfRBhWMBjGgEBAQEBAgEBAQEHAgEBAQGBUgQBAQEBCwGDSCE5jQaWAY5/gXsNhGwChHI1CA0BAQMBAQkBAwIUAQEWOiMMhUsDAzIBRhBRIRwaBg4FgyKBXgMVqmCHeQ2CHwkBgSUBhmiGHj+BEYVpgneFFAOMLpdyNQcCgSaBIQSNG4MzDBmLC4hMkjWLdYFJAzKBVzMaJIM7hXGKWz4DMAGPLgEB X-IronPort-AV: E=Sophos;i="5.58,490,1544482800"; d="scan'208";a="19588559" Received: from fgdemucivp01ltm.xch.fraunhofer.de (HELO FGDEMUCIMP11EXC.ads.fraunhofer.de) ([192.88.97.16]) by mail-mtaKA28.fraunhofer.de with ESMTP/TLS/AES256-SHA; 17 Mar 2019 19:29:15 +0100 Received: from localhost.de (10.80.233.50) by FGDEMUCIMP11EXC.ads.fraunhofer.de (10.80.232.42) with Microsoft SMTP Server (TLS) id 14.3.435.0; Sun, 17 Mar 2019 19:29:13 +0100 From: Lukas Auer To: Date: Sun, 17 Mar 2019 19:28:35 +0100 Message-ID: <20190317182842.18108-5-lukas.auer@aisec.fraunhofer.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190317182842.18108-1-lukas.auer@aisec.fraunhofer.de> References: <20190317182842.18108-1-lukas.auer@aisec.fraunhofer.de> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-11.0.0.4179-8.200.1013-24494.006 X-TM-AS-Result: No-0.516200-8.000000-31 X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No Cc: Andreas Schwab , Palmer Dabbelt Subject: [U-Boot] [PATCH v3 04/11] riscv: delay initialization of caches and debug UART X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Move the initialization of the caches and the debug UART until after board_init_f_init_reserve. This is in preparation for SMP support, where code prior to this point will be executed by all harts. This ensures that initialization will only be performed once on the main hart running U-Boot. Signed-off-by: Lukas Auer Reviewed-by: Anup Patel Reviewed-by: Bin Meng --- Changes in v3: None Changes in v2: None arch/riscv/cpu/start.S | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/arch/riscv/cpu/start.S b/arch/riscv/cpu/start.S index 81ea52b170..a30f6f7194 100644 --- a/arch/riscv/cpu/start.S +++ b/arch/riscv/cpu/start.S @@ -45,10 +45,6 @@ _start: /* mask all interrupts */ csrw MODE_PREFIX(ie), zero - /* Enable cache */ - jal icache_enable - jal dcache_enable - /* * Set stackpointer in internal/ex RAM to call board_init_f */ @@ -57,10 +53,6 @@ call_board_init_f: li t1, CONFIG_SYS_INIT_SP_ADDR and sp, t1, t0 /* force 16 byte alignment */ -#ifdef CONFIG_DEBUG_UART - jal debug_uart_init -#endif - call_board_init_f_0: mv a0, sp jal board_init_f_alloc_reserve @@ -74,6 +66,14 @@ call_board_init_f_0: /* save the boot hart id to global_data */ SREG s0, GD_BOOT_HART(gp) + /* Enable cache */ + jal icache_enable + jal dcache_enable + +#ifdef CONFIG_DEBUG_UART + jal debug_uart_init +#endif + mv a0, zero /* a0 <-- boot_flags = 0 */ la t5, board_init_f jr t5 /* jump to board_init_f() */ From patchwork Sun Mar 17 18:28:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukas Auer X-Patchwork-Id: 1057551 X-Patchwork-Delegate: uboot@andestech.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=aisec.fraunhofer.de Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 44Mnwg1h9hz9s7h for ; Mon, 18 Mar 2019 05:32:18 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id A0A6FC21E89; Sun, 17 Mar 2019 18:30:39 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=RCVD_IN_DNSWL_MED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 0445FC21EA1; Sun, 17 Mar 2019 18:29:26 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 1698FC21DD3; Sun, 17 Mar 2019 18:29:20 +0000 (UTC) Received: from mail-edgeKA24.fraunhofer.de (mail-edgeka24.fraunhofer.de [153.96.1.24]) by lists.denx.de (Postfix) with ESMTPS id 9DDC6C21E4F for ; Sun, 17 Mar 2019 18:29:15 +0000 (UTC) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2H1AAB0kY5c/xwBYJljGwEBAQEDAQEBBwMBAQGBZYIRghKNBopCnDkNhGwChFEiOBIBAQMBAQkBAwICAmkohUwGMgFBBRBRPRoGDgWDIoF1AapgiiUJAYElhmmER4FXP4ERiGCFFAOMLpgnBwKBJoEhBJBODBmLC4hMniqBXiKBVjMaJIM7kEw+ATIBjy4BAQ X-IPAS-Result: A2H1AAB0kY5c/xwBYJljGwEBAQEDAQEBBwMBAQGBZYIRghKNBopCnDkNhGwChFEiOBIBAQMBAQkBAwICAmkohUwGMgFBBRBRPRoGDgWDIoF1AapgiiUJAYElhmmER4FXP4ERiGCFFAOMLpgnBwKBJoEhBJBODBmLC4hMniqBXiKBVjMaJIM7kEw+ATIBjy4BAQ X-IronPort-AV: E=Sophos;i="5.58,490,1544482800"; d="scan'208";a="13835740" Received: from mail-mtaka28.fraunhofer.de ([153.96.1.28]) by mail-edgeKA24.fraunhofer.de with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 17 Mar 2019 19:29:15 +0100 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0DkAACWkY5cfRBhWMBjGwEBAQEDAQEBBwMBAQGBZYNJITmNBqZ7DYRsAoRyOBIBAQMBAQkBAwIUAQEWOi+FSwMDMgFBBRBRPRoGDgWDIoF2qmCKJQkBgSWGaYYeP4ERiGCFFAOMLpgnBwKBJoEhBJBODBmLC4hMniqBXiCBVzMaJIM7kEw+AzABjy4BAQ X-IronPort-AV: E=Sophos;i="5.58,490,1544482800"; d="scan'208";a="19588560" Received: from fgdemucivp01ltm.xch.fraunhofer.de (HELO FGDEMUCIMP11EXC.ads.fraunhofer.de) ([192.88.97.16]) by mail-mtaKA28.fraunhofer.de with ESMTP/TLS/AES256-SHA; 17 Mar 2019 19:29:16 +0100 Received: from localhost.de (10.80.233.50) by FGDEMUCIMP11EXC.ads.fraunhofer.de (10.80.232.42) with Microsoft SMTP Server (TLS) id 14.3.435.0; Sun, 17 Mar 2019 19:29:14 +0100 From: Lukas Auer To: Date: Sun, 17 Mar 2019 19:28:36 +0100 Message-ID: <20190317182842.18108-6-lukas.auer@aisec.fraunhofer.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190317182842.18108-1-lukas.auer@aisec.fraunhofer.de> References: <20190317182842.18108-1-lukas.auer@aisec.fraunhofer.de> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-11.0.0.4179-8.200.1013-24494.006 X-TM-AS-Result: No--2.392700-8.000000-31 X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No Cc: Andreas Schwab , Palmer Dabbelt Subject: [U-Boot] [PATCH v3 05/11] riscv: save hart ID in register tp instead of s0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" The hart ID passed by the previous boot stage is currently stored in register s0. If we divert the control flow inside a function, which is required as part of multi-hart support, the function epilog may not be called, clobbering register s0. Save the hart ID in the unallocatable register tp instead to protect the hart ID. Signed-off-by: Lukas Auer Reviewed-by: Bin Meng Reviewed-by: Rick Chen Reviewed-by: Anup Patel --- Changes in v3: - New patch to save the hart ID in register tp instead of s0 Changes in v2: None arch/riscv/cpu/start.S | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/riscv/cpu/start.S b/arch/riscv/cpu/start.S index a30f6f7194..bcc0ff696d 100644 --- a/arch/riscv/cpu/start.S +++ b/arch/riscv/cpu/start.S @@ -36,7 +36,7 @@ .globl _start _start: /* save hart id and dtb pointer */ - mv s0, a0 + mv tp, a0 mv s1, a1 la t0, trap_entry @@ -64,7 +64,7 @@ call_board_init_f_0: jal board_init_f_init_reserve /* save the boot hart id to global_data */ - SREG s0, GD_BOOT_HART(gp) + SREG tp, GD_BOOT_HART(gp) /* Enable cache */ jal icache_enable From patchwork Sun Mar 17 18:28:37 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukas Auer X-Patchwork-Id: 1057553 X-Patchwork-Delegate: uboot@andestech.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=aisec.fraunhofer.de Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 44Mnwq3HfBz9s70 for ; Mon, 18 Mar 2019 05:32:27 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 201C6C21E2C; Sun, 17 Mar 2019 18:30:22 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=RCVD_IN_DNSWL_MED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 85139C21E9F; Sun, 17 Mar 2019 18:29:25 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 04503C21D9A; Sun, 17 Mar 2019 18:29:21 +0000 (UTC) Received: from mail-edgeKA24.fraunhofer.de (mail-edgeka24.fraunhofer.de [153.96.1.24]) by lists.denx.de (Postfix) with ESMTPS id 08B45C21E77 for ; Sun, 17 Mar 2019 18:29:17 +0000 (UTC) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2H5AAB0kY5c/xwBYJljGgEBAQEBAgEBAQEHAgEBAQGBZYF5CBCCEo0GikKLP5B6DYF3gnUChFEiOBIBAQMBAQkBAwICAmkcDIVHBQYyAUYQUSEcGgYOBTUHgmZEgRoDFAGqYId5DYIfCQGBJQGGaIRHgVc/gRABhWmICwOMLpdyNQcCgSaBIQSNG4MzDBmBfIkPiEyMHoYXi3WBXiKBVjMaJIM7ghYXg0SKWz4BMgGPLgEB X-IPAS-Result: A2H5AAB0kY5c/xwBYJljGgEBAQEBAgEBAQEHAgEBAQGBZYF5CBCCEo0GikKLP5B6DYF3gnUChFEiOBIBAQMBAQkBAwICAmkcDIVHBQYyAUYQUSEcGgYOBTUHgmZEgRoDFAGqYId5DYIfCQGBJQGGaIRHgVc/gRABhWmICwOMLpdyNQcCgSaBIQSNG4MzDBmBfIkPiEyMHoYXi3WBXiKBVjMaJIM7ghYXg0SKWz4BMgGPLgEB X-IronPort-AV: E=Sophos;i="5.58,490,1544482800"; d="scan'208";a="13835741" Received: from mail-mtaka28.fraunhofer.de ([153.96.1.28]) by mail-edgeKA24.fraunhofer.de with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 17 Mar 2019 19:29:16 +0100 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0BUAACWkY5cfRBhWMBjGgEBAQEBAgEBAQEHAgEBAQGBZYNJITmNBpYBkHoNgXeCdQKEcjgSAQEDAQEJAQMCFAEBFjojDIVGBQMDMgFGEFEhHBoGDgU1gm1EgRoDFapgh3kNgh8JAYElAYZohh4/gRABhWmICwOMLpdyNQcCgSaBIQSNG4MzDBmBfIkPiEyMHoYXi3WBXiCBVzMaJIM7ghYXg0SKWz4DMAGPLgEB X-IronPort-AV: E=Sophos;i="5.58,490,1544482800"; d="scan'208";a="19588561" Received: from fgdemucivp01ltm.xch.fraunhofer.de (HELO FGDEMUCIMP11EXC.ads.fraunhofer.de) ([192.88.97.16]) by mail-mtaKA28.fraunhofer.de with ESMTP/TLS/AES256-SHA; 17 Mar 2019 19:29:17 +0100 Received: from localhost.de (10.80.233.50) by FGDEMUCIMP11EXC.ads.fraunhofer.de (10.80.232.42) with Microsoft SMTP Server (TLS) id 14.3.435.0; Sun, 17 Mar 2019 19:29:15 +0100 From: Lukas Auer To: Date: Sun, 17 Mar 2019 19:28:37 +0100 Message-ID: <20190317182842.18108-7-lukas.auer@aisec.fraunhofer.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190317182842.18108-1-lukas.auer@aisec.fraunhofer.de> References: <20190317182842.18108-1-lukas.auer@aisec.fraunhofer.de> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-11.0.0.4179-8.200.1013-24494.006 X-TM-AS-Result: No--5.329200-8.000000-31 X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No Cc: Baruch Siach , Andreas Schwab , Palmer Dabbelt Subject: [U-Boot] [PATCH v3 06/11] riscv: add support for multi-hart systems X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" On RISC-V, all harts boot independently. To be able to run on a multi-hart system, U-Boot must be extended with the functionality to manage all harts in the system. All harts entering U-Boot are registered in the available_harts mask stored in global data. A hart lottery system as used in the Linux kernel selects the hart U-Boot runs on. All other harts are halted. U-Boot can delegate functions to them using smp_call_function(). Every hart has a valid pointer to the global data structure and a 8KiB stack by default. The stack size is set with CONFIG_STACK_SIZE_SHIFT. Signed-off-by: Lukas Auer Reviewed-by: Anup Patel Reviewed-by: Bin Meng Tested-by: Bin Meng --- Changes in v3: - Adjust patch to use the new location of the hart ID (register tp) Changes in v2: - Implement hart lottery to pick main hart to run U-Boot - Remove CONFIG_MAIN_HART as it is not required anymore - Register available harts in the available_harts mask arch/riscv/Kconfig | 4 ++ arch/riscv/cpu/cpu.c | 9 ++- arch/riscv/cpu/start.S | 134 ++++++++++++++++++++++++++++++++++- arch/riscv/include/asm/csr.h | 1 + arch/riscv/lib/asm-offsets.c | 1 + 5 files changed, 147 insertions(+), 2 deletions(-) diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index 9da609b33b..3a4470daf3 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -144,4 +144,8 @@ config SBI_IPI default y if RISCV_SMODE depends on SMP +config STACK_SIZE_SHIFT + int + default 13 + endmenu diff --git a/arch/riscv/cpu/cpu.c b/arch/riscv/cpu/cpu.c index e662140427..c32de8a4c3 100644 --- a/arch/riscv/cpu/cpu.c +++ b/arch/riscv/cpu/cpu.c @@ -12,10 +12,17 @@ #include /* - * prior_stage_fdt_address must be stored in the data section since it is used + * The variables here must be stored in the data section since they are used * before the bss section is available. */ phys_addr_t prior_stage_fdt_address __attribute__((section(".data"))); +u32 hart_lottery __attribute__((section(".data"))) = 0; + +/* + * The main hart running U-Boot has acquired available_harts_lock until it has + * finished initialization of global data. + */ +u32 available_harts_lock = 1; static inline bool supports_extension(char ext) { diff --git a/arch/riscv/cpu/start.S b/arch/riscv/cpu/start.S index bcc0ff696d..f55b8cbc37 100644 --- a/arch/riscv/cpu/start.S +++ b/arch/riscv/cpu/start.S @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -45,6 +46,23 @@ _start: /* mask all interrupts */ csrw MODE_PREFIX(ie), zero +#ifdef CONFIG_SMP + /* check if hart is within range */ + /* tp: hart id */ + li t0, CONFIG_NR_CPUS + bge tp, t0, hart_out_of_bounds_loop +#endif + +#ifdef CONFIG_SMP + /* set xSIE bit to receive IPIs */ +#ifdef CONFIG_RISCV_MMODE + li t0, MIE_MSIE +#else + li t0, SIE_SSIE +#endif + csrs MODE_PREFIX(ie), t0 +#endif + /* * Set stackpointer in internal/ex RAM to call board_init_f */ @@ -56,7 +74,30 @@ call_board_init_f: call_board_init_f_0: mv a0, sp jal board_init_f_alloc_reserve + + /* + * Set global data pointer here for all harts, uninitialized at this + * point. + */ + mv gp, a0 + + /* setup stack */ +#ifdef CONFIG_SMP + /* tp: hart id */ + slli t0, tp, CONFIG_STACK_SIZE_SHIFT + sub sp, a0, t0 +#else mv sp, a0 +#endif + + /* + * Pick hart to initialize global data and run U-Boot. The other harts + * wait for initialization to complete. + */ + la t0, hart_lottery + li s2, 1 + amoswap.w s2, t1, 0(t0) + bnez s2, wait_for_gd_init la t0, prior_stage_fdt_address SREG s1, 0(t0) @@ -66,6 +107,33 @@ call_board_init_f_0: /* save the boot hart id to global_data */ SREG tp, GD_BOOT_HART(gp) + la t0, available_harts_lock + fence rw, w + amoswap.w zero, zero, 0(t0) + +wait_for_gd_init: + la t0, available_harts_lock + li t1, 1 +1: amoswap.w t1, t1, 0(t0) + fence r, rw + bnez t1, 1b + + /* register available harts in the available_harts mask */ + li t1, 1 + sll t1, t1, tp + LREG t2, GD_AVAILABLE_HARTS(gp) + or t2, t2, t1 + SREG t2, GD_AVAILABLE_HARTS(gp) + + fence rw, w + amoswap.w zero, zero, 0(t0) + + /* + * Continue on hart lottery winner, others branch to + * secondary_hart_loop. + */ + bnez s2, secondary_hart_loop + /* Enable cache */ jal icache_enable jal dcache_enable @@ -95,7 +163,14 @@ relocate_code: *Set up the stack */ stack_setup: +#ifdef CONFIG_SMP + /* tp: hart id */ + slli t0, tp, CONFIG_STACK_SIZE_SHIFT + sub sp, s2, t0 +#else mv sp, s2 +#endif + la t0, _start sub t6, s4, t0 /* t6 <- relocation offset */ beq t0, s4, clear_bss /* skip relocation */ @@ -175,13 +250,30 @@ clear_bss: add t0, t0, t6 /* t0 <- rel __bss_start in RAM */ la t1, __bss_end /* t1 <- rel __bss_end in FLASH */ add t1, t1, t6 /* t1 <- rel __bss_end in RAM */ - beq t0, t1, call_board_init_r + beq t0, t1, relocate_secondary_harts clbss_l: SREG zero, 0(t0) /* clear loop... */ addi t0, t0, REGBYTES bne t0, t1, clbss_l +relocate_secondary_harts: +#ifdef CONFIG_SMP + /* send relocation IPI */ + la t0, secondary_hart_relocate + add a0, t0, t6 + + /* store relocation offset */ + mv s5, t6 + + mv a1, s2 + mv a2, s3 + jal smp_call_function + + /* restore relocation offset */ + mv t6, s5 +#endif + /* * We are done. Do not return, instead branch to second part of board * initialization, now running from RAM. @@ -202,3 +294,43 @@ call_board_init_r: * jump to it ... */ jr t4 /* jump to board_init_r() */ + +#ifdef CONFIG_SMP +hart_out_of_bounds_loop: + /* Harts in this loop are out of bounds, increase CONFIG_NR_CPUS. */ + wfi + j hart_out_of_bounds_loop +#endif + +#ifdef CONFIG_SMP +/* SMP relocation entry */ +secondary_hart_relocate: + /* a1: new sp */ + /* a2: new gd */ + /* tp: hart id */ + + /* setup stack */ + slli t0, tp, CONFIG_STACK_SIZE_SHIFT + sub sp, a1, t0 + + /* update global data pointer */ + mv gp, a2 +#endif + +secondary_hart_loop: + wfi + +#ifdef CONFIG_SMP + csrr t0, MODE_PREFIX(ip) +#ifdef CONFIG_RISCV_MMODE + andi t0, t0, MIE_MSIE +#else + andi t0, t0, SIE_SSIE +#endif + beqz t0, secondary_hart_loop + + mv a0, tp + jal handle_ipi +#endif + + j secondary_hart_loop diff --git a/arch/riscv/include/asm/csr.h b/arch/riscv/include/asm/csr.h index 86136f542c..644e6baa15 100644 --- a/arch/riscv/include/asm/csr.h +++ b/arch/riscv/include/asm/csr.h @@ -46,6 +46,7 @@ #endif /* Interrupt Enable and Interrupt Pending flags */ +#define MIE_MSIE _AC(0x00000008, UL) /* Software Interrupt Enable */ #define SIE_SSIE _AC(0x00000002, UL) /* Software Interrupt Enable */ #define SIE_STIE _AC(0x00000020, UL) /* Timer Interrupt Enable */ diff --git a/arch/riscv/lib/asm-offsets.c b/arch/riscv/lib/asm-offsets.c index e0b71f5691..f998402bd1 100644 --- a/arch/riscv/lib/asm-offsets.c +++ b/arch/riscv/lib/asm-offsets.c @@ -14,6 +14,7 @@ int main(void) { DEFINE(GD_BOOT_HART, offsetof(gd_t, arch.boot_hart)); + DEFINE(GD_AVAILABLE_HARTS, offsetof(gd_t, arch.available_harts)); return 0; } From patchwork Sun Mar 17 18:28:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukas Auer X-Patchwork-Id: 1057555 X-Patchwork-Delegate: uboot@andestech.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=aisec.fraunhofer.de Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 44Mnx02PKxz9s5c for ; Mon, 18 Mar 2019 05:32:35 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 9A361C21E76; Sun, 17 Mar 2019 18:31:06 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=RCVD_IN_DNSWL_MED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 22B6BC21D8A; Sun, 17 Mar 2019 18:29:30 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 2086DC21E7F; Sun, 17 Mar 2019 18:29:22 +0000 (UTC) Received: from mail-edgeKA24.fraunhofer.de (mail-edgeka24.fraunhofer.de [153.96.1.24]) by lists.denx.de (Postfix) with ESMTPS id BDC42C21E56 for ; Sun, 17 Mar 2019 18:29:17 +0000 (UTC) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2EEAAB0kY5c/xwBYJljGgEBAQEBAgEBAQEHAgEBAQGBUQUBAQEBCwGCEIISjCdfikKLP45/gXsNhGwChFEiNAkNAQEDAQEJAQMCAgJpHAyFTAYnCwFGEFEhHBoGDgWDIoFeAxQBqi0zh3kNgh8JAYElAYZohEeBVz+GeoFzgQSEciIDjC6XcjUHAoEmgSEEjRuDMwwZiwuITJI1i3WBRzmBVjMaJIM7ghYXg0SKWz4BMgGMYYJNAQE X-IPAS-Result: A2EEAAB0kY5c/xwBYJljGgEBAQEBAgEBAQEHAgEBAQGBUQUBAQEBCwGCEIISjCdfikKLP45/gXsNhGwChFEiNAkNAQEDAQEJAQMCAgJpHAyFTAYnCwFGEFEhHBoGDgWDIoFeAxQBqi0zh3kNgh8JAYElAYZohEeBVz+GeoFzgQSEciIDjC6XcjUHAoEmgSEEjRuDMwwZiwuITJI1i3WBRzmBVjMaJIM7ghYXg0SKWz4BMgGMYYJNAQE X-IronPort-AV: E=Sophos;i="5.58,490,1544482800"; d="scan'208";a="13835742" Received: from mail-mtaka28.fraunhofer.de ([153.96.1.28]) by mail-edgeKA24.fraunhofer.de with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 17 Mar 2019 19:29:17 +0100 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0AEAACWkY5cfRBhWMBjGgEBAQEBAgEBAQEHAgEBAQGBUQUBAQEBCwGDSCE5jCdflgGOf4F7DYRsAoRyNAkNAQEDAQEJAQMCFAEBFjojDIVLAwMnCwFGEFEhHBoGDgWDIoFeAxWqLTOHeQ2CHwkBgSUBhmiGHj+GeoFzgQSEciIDjC6XcjUHAoEmgSEEjRuDMwwZiwuITJI1i3WBRzeBVzMaJIM7ghYXg0SKWz4DMAGMYYJNAQE X-IronPort-AV: E=Sophos;i="5.58,490,1544482800"; d="scan'208";a="19588562" Received: from fgdemucivp01ltm.xch.fraunhofer.de (HELO FGDEMUCIMP11EXC.ads.fraunhofer.de) ([192.88.97.16]) by mail-mtaKA28.fraunhofer.de with ESMTP/TLS/AES256-SHA; 17 Mar 2019 19:29:18 +0100 Received: from localhost.de (10.80.233.50) by FGDEMUCIMP11EXC.ads.fraunhofer.de (10.80.232.42) with Microsoft SMTP Server (TLS) id 14.3.435.0; Sun, 17 Mar 2019 19:29:16 +0100 From: Lukas Auer To: Date: Sun, 17 Mar 2019 19:28:38 +0100 Message-ID: <20190317182842.18108-8-lukas.auer@aisec.fraunhofer.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190317182842.18108-1-lukas.auer@aisec.fraunhofer.de> References: <20190317182842.18108-1-lukas.auer@aisec.fraunhofer.de> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-11.0.0.4179-8.200.1013-24494.006 X-TM-AS-Result: No--1.759400-8.000000-31 X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No Cc: Andreas Schwab , Palmer Dabbelt , Alexander Graf Subject: [U-Boot] [PATCH v3 07/11] riscv: boot images passed to bootm on all harts X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Signed-off-by: Lukas Auer Reviewed-by: Anup Patel Reviewed-by: Bin Meng Tested-by: Bin Meng --- Changes in v3: None Changes in v2: None arch/riscv/lib/bootm.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/arch/riscv/lib/bootm.c b/arch/riscv/lib/bootm.c index f36b8702ef..efbd3e23e7 100644 --- a/arch/riscv/lib/bootm.c +++ b/arch/riscv/lib/bootm.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -81,6 +82,9 @@ static void boot_jump_linux(bootm_headers_t *images, int flag) { void (*kernel)(ulong hart, void *dtb); int fake = (flag & BOOTM_STATE_OS_FAKE_GO); +#ifdef CONFIG_SMP + int ret; +#endif kernel = (void (*)(ulong, void *))images->ep; @@ -92,8 +96,15 @@ static void boot_jump_linux(bootm_headers_t *images, int flag) announce_and_cleanup(fake); if (!fake) { - if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len) + if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len) { +#ifdef CONFIG_SMP + ret = smp_call_function(images->ep, + (ulong)images->ft_addr, 0); + if (ret) + hang(); +#endif kernel(gd->arch.boot_hart, images->ft_addr); + } } } From patchwork Sun Mar 17 18:28:39 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukas Auer X-Patchwork-Id: 1057557 X-Patchwork-Delegate: uboot@andestech.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=aisec.fraunhofer.de Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 44Mnyg2P93z9s6w for ; Mon, 18 Mar 2019 05:34:03 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 0EEC7C21E79; Sun, 17 Mar 2019 18:31:19 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=RCVD_IN_DNSWL_MED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id A4ACAC21E90; Sun, 17 Mar 2019 18:29:32 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 0E394C21D4A; Sun, 17 Mar 2019 18:29:23 +0000 (UTC) Received: from mail-edgeKA24.fraunhofer.de (mail-edgeka24.fraunhofer.de [153.96.1.24]) by lists.denx.de (Postfix) with ESMTPS id C3653C21E45 for ; Sun, 17 Mar 2019 18:29:18 +0000 (UTC) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2EEAAB0kY5c/xwBYJljGgEBAQEBAgEBAQEHAgEBAQGBUQUBAQEBCwGCEIISjCdfikKLP45/gXsNhGwChFEiNAkNAQEDAQEJAQMCAgJpHAyFTAYyAUEFEFEhHBoGDgWDIoFeAxQBqmCHeQ2CHwkBgSUBhmiER4FXP4EQAYVpgneFFAOKAyABggqXcjUHAoEmgSEEjRuDMwwZiwuITJI1i3WBRzmBVjMaJIM7hXGKWz4BMgGPLgEB X-IPAS-Result: A2EEAAB0kY5c/xwBYJljGgEBAQEBAgEBAQEHAgEBAQGBUQUBAQEBCwGCEIISjCdfikKLP45/gXsNhGwChFEiNAkNAQEDAQEJAQMCAgJpHAyFTAYyAUEFEFEhHBoGDgWDIoFeAxQBqmCHeQ2CHwkBgSUBhmiER4FXP4EQAYVpgneFFAOKAyABggqXcjUHAoEmgSEEjRuDMwwZiwuITJI1i3WBRzmBVjMaJIM7hXGKWz4BMgGPLgEB X-IronPort-AV: E=Sophos;i="5.58,490,1544482800"; d="scan'208";a="13835744" Received: from mail-mtaka28.fraunhofer.de ([153.96.1.28]) by mail-edgeKA24.fraunhofer.de with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 17 Mar 2019 19:29:18 +0100 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0AEAACWkY5cfRBhWMBjGgEBAQEBAgEBAQEHAgEBAQGBUQUBAQEBCwGDSCE5jCdflgGOf4F7DYRsAoRyNAkNAQEDAQEJAQMCFAEBFjojDIVLAwMyAUEFEFEhHBoGDgWDIoFeAxWqYId5DYIfCQGBJQGGaIYeP4EQAYVpgneFFAOKAyABggqXcjUHAoEmgSEEjRuDMwwZiwuITJI1i3WBRzeBVzMaJIM7hXGKWz4DMAGPLgEB X-IronPort-AV: E=Sophos;i="5.58,490,1544482800"; d="scan'208";a="19588563" Received: from fgdemucivp01ltm.xch.fraunhofer.de (HELO FGDEMUCIMP11EXC.ads.fraunhofer.de) ([192.88.97.16]) by mail-mtaKA28.fraunhofer.de with ESMTP/TLS/AES256-SHA; 17 Mar 2019 19:29:19 +0100 Received: from localhost.de (10.80.233.50) by FGDEMUCIMP11EXC.ads.fraunhofer.de (10.80.232.42) with Microsoft SMTP Server (TLS) id 14.3.435.0; Sun, 17 Mar 2019 19:29:17 +0100 From: Lukas Auer To: Date: Sun, 17 Mar 2019 19:28:39 +0100 Message-ID: <20190317182842.18108-9-lukas.auer@aisec.fraunhofer.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190317182842.18108-1-lukas.auer@aisec.fraunhofer.de> References: <20190317182842.18108-1-lukas.auer@aisec.fraunhofer.de> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-11.0.0.4179-8.200.1013-24494.006 X-TM-AS-Result: No--3.586500-8.000000-31 X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No Cc: Andreas Schwab , Palmer Dabbelt Subject: [U-Boot] [PATCH v3 08/11] riscv: do not rely on hart ID passed by previous boot stage X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" RISC-V U-Boot expects the hart ID to be passed to it via register a0 by the previous boot stage. Machine mode firmware such as BBL and OpenSBI do this when starting their payload (U-Boot) in supervisor mode. If U-Boot is running in machine mode, this task must be handled by the boot ROM. Explicitly populate register a0 with the hart ID from the mhartid CSR to avoid possible problems on RISC-V processors with a boot ROM that does not handle this task. Suggested-by: Rick Chen Signed-off-by: Lukas Auer Reviewed-by: Anup Patel Reviewed-by: Atish Patra Reviewed-by: Bin Meng Tested-by: Bin Meng Reviewed-by: Rick Chen Tested-by: Rick Chen --- Changes in v3: None Changes in v2: - New patch to populate register a0 with the hart ID from the mhartid CSR in machine-mode arch/riscv/cpu/start.S | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/riscv/cpu/start.S b/arch/riscv/cpu/start.S index f55b8cbc37..5ac899b141 100644 --- a/arch/riscv/cpu/start.S +++ b/arch/riscv/cpu/start.S @@ -36,6 +36,10 @@ .section .text .globl _start _start: +#ifdef CONFIG_RISCV_MMODE + csrr a0, mhartid +#endif + /* save hart id and dtb pointer */ mv tp, a0 mv s1, a1 From patchwork Sun Mar 17 18:28:40 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukas Auer X-Patchwork-Id: 1057558 X-Patchwork-Delegate: uboot@andestech.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=aisec.fraunhofer.de Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 44MnzX1mTfz9s5c for ; Mon, 18 Mar 2019 05:34:48 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id D04C3C21DE8; Sun, 17 Mar 2019 18:32:02 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=RCVD_IN_DNSWL_MED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 51537C21EE0; Sun, 17 Mar 2019 18:29:39 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id DD87BC21E45; Sun, 17 Mar 2019 18:29:25 +0000 (UTC) Received: from mail-edgeKA24.fraunhofer.de (mail-edgeka24.fraunhofer.de [153.96.1.24]) by lists.denx.de (Postfix) with ESMTPS id C52A0C21E0F for ; Sun, 17 Mar 2019 18:29:19 +0000 (UTC) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2EVAAB0kY5c/xwBYJljGgEBAQEBAgEBAQEHAgEBAQGBVAIBAQEBCwGCEIISjQaKQpw5DYRsAoRRIjcGDQEBAwEBCQEDAgICaSiFTAYyAUYQUT0aBg4FgyKBdQGqYIolCQGBJQGGaIRHgVc/g26Ef4EEhRQDih2CEYY9kWoHAoEmgSEEkE4MGYsLiEyeKoFdI4FWMxokgzuQTD4BMgGMYYJNAQE X-IPAS-Result: A2EVAAB0kY5c/xwBYJljGgEBAQEBAgEBAQEHAgEBAQGBVAIBAQEBCwGCEIISjQaKQpw5DYRsAoRRIjcGDQEBAwEBCQEDAgICaSiFTAYyAUYQUT0aBg4FgyKBdQGqYIolCQGBJQGGaIRHgVc/g26Ef4EEhRQDih2CEYY9kWoHAoEmgSEEkE4MGYsLiEyeKoFdI4FWMxokgzuQTD4BMgGMYYJNAQE X-IronPort-AV: E=Sophos;i="5.58,490,1544482800"; d="scan'208";a="13835745" Received: from mail-mtaka28.fraunhofer.de ([153.96.1.28]) by mail-edgeKA24.fraunhofer.de with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 17 Mar 2019 19:29:19 +0100 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0ATAACWkY5cfRBhWMBjGgEBAQEBAgEBAQEHAgEBAQGBVAIBAQEBCwGDSCE5jQamew2EbAKEcjcGDQEBAwEBCQEDAhQBARY6L4VLAwMyAUYQUT0aBg4FgyKBdqpgiiUJAYElAYZohh4/g26Ef4EEhRQDih2CEYY9kWoHAoEmgSEEkE4MGYsLiEyeKoFdIYFXMxokgzuQTD4DMAGMYYJNAQE X-IronPort-AV: E=Sophos;i="5.58,490,1544482800"; d="scan'208";a="19588564" Received: from fgdemucivp01ltm.xch.fraunhofer.de (HELO FGDEMUCIMP11EXC.ads.fraunhofer.de) ([192.88.97.16]) by mail-mtaKA28.fraunhofer.de with ESMTP/TLS/AES256-SHA; 17 Mar 2019 19:29:20 +0100 Received: from localhost.de (10.80.233.50) by FGDEMUCIMP11EXC.ads.fraunhofer.de (10.80.232.42) with Microsoft SMTP Server (TLS) id 14.3.435.0; Sun, 17 Mar 2019 19:29:18 +0100 From: Lukas Auer To: Date: Sun, 17 Mar 2019 19:28:40 +0100 Message-ID: <20190317182842.18108-10-lukas.auer@aisec.fraunhofer.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190317182842.18108-1-lukas.auer@aisec.fraunhofer.de> References: <20190317182842.18108-1-lukas.auer@aisec.fraunhofer.de> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-11.0.0.4179-8.200.1013-24494.006 X-TM-AS-Result: No--3.040600-8.000000-31 X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No Cc: Andreas Schwab , Palmer Dabbelt Subject: [U-Boot] [PATCH v3 09/11] riscv: hang if relocation of secondary harts fails X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Print an error message and hang if smp_call_function() returns an error, indicating that relocation of the secondary harts has failed. Signed-off-by: Lukas Auer Reviewed-by: Bin Meng Tested-by: Bin Meng Reviewed-by: Anup Patel --- Changes in v3: - New patch to hang if relocation of secondary harts fails Changes in v2: None arch/riscv/cpu/start.S | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/arch/riscv/cpu/start.S b/arch/riscv/cpu/start.S index 5ac899b141..a4433fbd6b 100644 --- a/arch/riscv/cpu/start.S +++ b/arch/riscv/cpu/start.S @@ -33,6 +33,10 @@ #define SYM_SIZE 0x18 #endif +.section .data +secondary_harts_relocation_error: + .ascii "Relocation of secondary harts has failed, error %d\n" + .section .text .globl _start _start: @@ -274,8 +278,15 @@ relocate_secondary_harts: mv a2, s3 jal smp_call_function + /* hang if relocation of secondary harts has failed */ + beqz a0, 1f + mv a1, a0 + la a0, secondary_harts_relocation_error + jal printf + jal hang + /* restore relocation offset */ - mv t6, s5 +1: mv t6, s5 #endif /* From patchwork Sun Mar 17 18:28:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukas Auer X-Patchwork-Id: 1057554 X-Patchwork-Delegate: uboot@andestech.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=aisec.fraunhofer.de Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 44Mnww2sVqz9s5c for ; Mon, 18 Mar 2019 05:32:32 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 0CB1BC21E30; Sun, 17 Mar 2019 18:31:36 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=RCVD_IN_DNSWL_MED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 269E1C21EA7; Sun, 17 Mar 2019 18:29:36 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 2077FC21E44; Sun, 17 Mar 2019 18:29:25 +0000 (UTC) Received: from mail-edgeKA24.fraunhofer.de (mail-edgeka24.fraunhofer.de [153.96.1.24]) by lists.denx.de (Postfix) with ESMTPS id C2987C21E34 for ; Sun, 17 Mar 2019 18:29:20 +0000 (UTC) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2EHAAB0kY5c/xwBYJljGgEBAQEBAgEBAQEHAgEBAQGBUgQBAQEBCwGCEIISjQaKQos/jn+Bew2EbAKEUSI1CA0BAQMBAQkBAwICAmkcDIVMBjIBRhBRIRwaBg4FgyKBXgMUAapgh3kNgh8JAYElAYZohEeBVz+GeoJ3hRQDjC6XcjUHAoEmgSEEjRuDMwwZgWyJH4hMkjWIH4NWgUkDNIFWMxokgzuFcYpbPgEyAY8uAQE X-IPAS-Result: A2EHAAB0kY5c/xwBYJljGgEBAQEBAgEBAQEHAgEBAQGBUgQBAQEBCwGCEIISjQaKQos/jn+Bew2EbAKEUSI1CA0BAQMBAQkBAwICAmkcDIVMBjIBRhBRIRwaBg4FgyKBXgMUAapgh3kNgh8JAYElAYZohEeBVz+GeoJ3hRQDjC6XcjUHAoEmgSEEjRuDMwwZgWyJH4hMkjWIH4NWgUkDNIFWMxokgzuFcYpbPgEyAY8uAQE X-IronPort-AV: E=Sophos;i="5.58,490,1544482800"; d="scan'208";a="13835746" Received: from mail-mtaka28.fraunhofer.de ([153.96.1.28]) by mail-edgeKA24.fraunhofer.de with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 17 Mar 2019 19:29:20 +0100 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0AGAACWkY5cfRBhWMBjGgEBAQEBAgEBAQEHAgEBAQGBUgQBAQEBCwGDSCE5jQaWAY5/gXsNhGwChHI1CA0BAQMBAQkBAwIUAQEWOiMMhUsDAzIBRhBRIRwaBg4FgyKBXgMVqmCHeQ2CHwkBgSUBhmiGHj+GeoJ3hRQDjC6XcjUHAoEmgSEEjRuDMwwZgWyJH4hMkjWIH4NWgUkDMoFXMxokgzuFcYpbPgMwAY8uAQE X-IronPort-AV: E=Sophos;i="5.58,490,1544482800"; d="scan'208";a="19588565" Received: from fgdemucivp01ltm.xch.fraunhofer.de (HELO FGDEMUCIMP11EXC.ads.fraunhofer.de) ([192.88.97.16]) by mail-mtaKA28.fraunhofer.de with ESMTP/TLS/AES256-SHA; 17 Mar 2019 19:29:21 +0100 Received: from localhost.de (10.80.233.50) by FGDEMUCIMP11EXC.ads.fraunhofer.de (10.80.232.42) with Microsoft SMTP Server (TLS) id 14.3.435.0; Sun, 17 Mar 2019 19:29:19 +0100 From: Lukas Auer To: Date: Sun, 17 Mar 2019 19:28:41 +0100 Message-ID: <20190317182842.18108-11-lukas.auer@aisec.fraunhofer.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190317182842.18108-1-lukas.auer@aisec.fraunhofer.de> References: <20190317182842.18108-1-lukas.auer@aisec.fraunhofer.de> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-11.0.0.4179-8.200.1013-24494.006 X-TM-AS-Result: No--1.641200-8.000000-31 X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No Cc: Andreas Schwab , Palmer Dabbelt Subject: [U-Boot] [PATCH v3 10/11] riscv: fu540: enable SMP X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Signed-off-by: Lukas Auer Reviewed-by: Anup Patel Reviewed-by: Bin Meng --- Changes in v3: None Changes in v2: - New patch to enable SMP on the SiFive FU540, which was previously sent independently board/sifive/fu540/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/board/sifive/fu540/Kconfig b/board/sifive/fu540/Kconfig index 6be3d88144..f46437901d 100644 --- a/board/sifive/fu540/Kconfig +++ b/board/sifive/fu540/Kconfig @@ -38,5 +38,6 @@ config BOARD_SPECIFIC_OPTIONS # dummy imply PHY_LIB imply PHY_MSCC imply SIFIVE_SERIAL + imply SMP endif From patchwork Sun Mar 17 18:28:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukas Auer X-Patchwork-Id: 1057556 X-Patchwork-Delegate: uboot@andestech.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=aisec.fraunhofer.de Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 44Mnxh5GCDz9s5c for ; Mon, 18 Mar 2019 05:33:10 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 092F5C21EBD; Sun, 17 Mar 2019 18:31:49 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=RCVD_IN_DNSWL_MED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id C0BB8C21E2B; Sun, 17 Mar 2019 18:29:36 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 0E838C21BE5; Sun, 17 Mar 2019 18:29:26 +0000 (UTC) Received: from mail-edgeKA24.fraunhofer.de (mail-edgeka24.fraunhofer.de [153.96.1.24]) by lists.denx.de (Postfix) with ESMTPS id AC68DC21E96 for ; Sun, 17 Mar 2019 18:29:21 +0000 (UTC) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2EHAAB0kY5c/xwBYJljGgEBAQEBAgEBAQEHAgEBAQGBUgQBAQEBCwGCEIISjQaWAY5/gXsNhGwChFEiNQgNAQEDAQEJAQMCAgJpHAyFTAYyAUYQUSEcGgYOBYMigV4DFAGqYId5DYIfCQGBJQGGaIRHgVc/hnqCd4UUA4wul3I1BwKBJoEhBI0bgzMMGYFsiR+ITJI1iB+DVoFIATeBVjMaJIM7hXGKWz4BMgGPLgEB X-IPAS-Result: A2EHAAB0kY5c/xwBYJljGgEBAQEBAgEBAQEHAgEBAQGBUgQBAQEBCwGCEIISjQaWAY5/gXsNhGwChFEiNQgNAQEDAQEJAQMCAgJpHAyFTAYyAUYQUSEcGgYOBYMigV4DFAGqYId5DYIfCQGBJQGGaIRHgVc/hnqCd4UUA4wul3I1BwKBJoEhBI0bgzMMGYFsiR+ITJI1iB+DVoFIATeBVjMaJIM7hXGKWz4BMgGPLgEB X-IronPort-AV: E=Sophos;i="5.58,490,1544482800"; d="scan'208";a="13835747" Received: from mail-mtaka28.fraunhofer.de ([153.96.1.28]) by mail-edgeKA24.fraunhofer.de with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 17 Mar 2019 19:29:21 +0100 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0AGAACWkY5cfRBhWMBjGgEBAQEBAgEBAQEHAgEBAQGBUgQBAQEBCwGDSCE5jQaWAY5/gXsNhGwChHI1CA0BAQMBAQkBAwIUAQEWOiMMhUsDAzIBRhBRIRwaBg4FgyKBXgMVqmCHeQ2CHwkBgSUBhmiGHj+GeoJ3hRQDjC6XcjUHAoEmgSEEjRuDMwwZgWyJH4hMkjWIH4NWgUgBNYFXMxokgzuFcYpbPgMwAY8uAQE X-IronPort-AV: E=Sophos;i="5.58,490,1544482800"; d="scan'208";a="19588566" Received: from fgdemucivp01ltm.xch.fraunhofer.de (HELO FGDEMUCIMP11EXC.ads.fraunhofer.de) ([192.88.97.16]) by mail-mtaKA28.fraunhofer.de with ESMTP/TLS/AES256-SHA; 17 Mar 2019 19:29:22 +0100 Received: from localhost.de (10.80.233.50) by FGDEMUCIMP11EXC.ads.fraunhofer.de (10.80.232.42) with Microsoft SMTP Server (TLS) id 14.3.435.0; Sun, 17 Mar 2019 19:29:20 +0100 From: Lukas Auer To: Date: Sun, 17 Mar 2019 19:28:42 +0100 Message-ID: <20190317182842.18108-12-lukas.auer@aisec.fraunhofer.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190317182842.18108-1-lukas.auer@aisec.fraunhofer.de> References: <20190317182842.18108-1-lukas.auer@aisec.fraunhofer.de> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-11.0.0.4179-8.200.1013-24494.006 X-TM-AS-Result: No--3.492100-8.000000-31 X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No Cc: Andreas Schwab , Palmer Dabbelt Subject: [U-Boot] [PATCH v3 11/11] riscv: qemu: enable SMP X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Signed-off-by: Lukas Auer Reviewed-by: Anup Patel Reviewed-by: Bin Meng Tested-by: Bin Meng --- Changes in v3: None Changes in v2: None board/emulation/qemu-riscv/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/board/emulation/qemu-riscv/Kconfig b/board/emulation/qemu-riscv/Kconfig index 88d07d568e..cf057e7de6 100644 --- a/board/emulation/qemu-riscv/Kconfig +++ b/board/emulation/qemu-riscv/Kconfig @@ -34,5 +34,6 @@ config BOARD_SPECIFIC_OPTIONS # dummy imply BOARD_LATE_INIT imply OF_BOARD_SETUP imply SIFIVE_SERIAL + imply SMP endif