Received: by 2002:ab2:1689:0:b0:1f7:5705:b850 with SMTP id d9csp61091lqa; Fri, 26 Apr 2024 14:30:21 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCUFrQkuotSU2C5I/I+uogCTScFngZCZYa6aArgfE9eRBgj/TK9VM6T6QpqPbdigEJv3ScU60JIZqkAlIGXGufYqHmdABVkX7wWsbybnuQ== X-Google-Smtp-Source: AGHT+IEiXWxPP8a21fjlJiymRnXzHOR5SHV1jr4z3BmbFvaFJCiohorVMtol1SwHRftOyaZ1XqPZ X-Received: by 2002:a05:622a:8d:b0:439:ff39:eda5 with SMTP id o13-20020a05622a008d00b00439ff39eda5mr4272354qtw.46.1714167021421; Fri, 26 Apr 2024 14:30:21 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1714167021; cv=pass; d=google.com; s=arc-20160816; b=OyTiop2BIsr9r8FvcX6cn8kTm8jvjclGphO6Wbc5WqGuc+xyfe0x0Gyd+bJ626UlGF 52s5CzcmYICn9HwhWlWos0kdOfc03718GSqi/zG/MCtOekAs2qAQi2V+k0BFEaA/yA7s qdAl6homtDU/9yP+tauWpCR55p760bPKkuD4d47ieP4Z/YDtca4BJ784s/LCYB5qcZ0M 8OHY0m1F/lrNIOhnmtt2e7YBLAELeFTP502lhAMf4RM5S2QaFoE7Mrd0sknXJxZfIs9e Smcj+8qcswbqvRjJFd82A8er7wz2iDkyqedy4E1TYJC9CAgdSENni7gx7NmDp9sccJ+M NOGA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :subject:date:from:dkim-signature; bh=epQYh2eYy4HhqqXFO0t2DHAzvNVz9k3o87eDn/hGHY8=; fh=aNZQ9eFgcwOhXwvJZ1Ufteu9+fr41xhQUyBBsGZvA6Y=; b=o8Tdl6uQKlWOMRqiWbfMVBcdfIS4clNFm6/piOOahCwAfM0vSeXBMl5tXV/H9DpB+g YUrFxALOrJKR6DQLCa2rosrR89dNu7AMnDP0U02OAcvoejd7awHwrFed9vj96sP5Ws96 LOyJw/cZuRKXXtWiqgcuiywcqsPLUv+8FV2CLuV5KMnCVNM3wTWnErl5S6qYa817xWo5 B95b6j4d5pJlCANbHSUBL9F1xnqOlYQf+N5Q8lsXOlVzAxQ4IlhzpecnD5M4IC1fJYLc 2obMMxBTRqAMm7Q3vWWWrLFi5B6JwI8QDjVvXCV4130oztKzZH5/rJZltwAGObApPDRT hH2A==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@rivosinc-com.20230601.gappssmtp.com header.s=20230601 header.b=GeZZj4G2; arc=pass (i=1 spf=pass spfdomain=rivosinc.com dkim=pass dkdomain=rivosinc-com.20230601.gappssmtp.com); spf=pass (google.com: domain of linux-kernel+bounces-160689-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-160689-linux.lists.archive=gmail.com@vger.kernel.org" Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id m18-20020a05622a055200b0043981f5c70dsi15333108qtx.308.2024.04.26.14.30.21 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Apr 2024 14:30:21 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-160689-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@rivosinc-com.20230601.gappssmtp.com header.s=20230601 header.b=GeZZj4G2; arc=pass (i=1 spf=pass spfdomain=rivosinc.com dkim=pass dkdomain=rivosinc-com.20230601.gappssmtp.com); spf=pass (google.com: domain of linux-kernel+bounces-160689-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-160689-linux.lists.archive=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 1E1861C21958 for ; Fri, 26 Apr 2024 21:30:21 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 63B4B3A1DB; Fri, 26 Apr 2024 21:29:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="GeZZj4G2" Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1651838F82 for ; Fri, 26 Apr 2024 21:29:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.177 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714166973; cv=none; b=jFsCGaV+YMs3fAdWvpswUBulX83J0Lnr3QSVkxOdsu10MuGbHYN8U3gHCwWSBTGtS7klnu80NsITc7EC4Lfa6z3/3P6tnDwUuErGfEkmeFEoFMWtflk/IgRNQOMu1r1roN9U+oFvr99zF9OZi+ZvoCMr7Fd6dj1dEeoXBGIXi3c= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714166973; c=relaxed/simple; bh=TMZGPAigRUlnddtyOxdX28W8hFoUd2ldYAJcckC4XNo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=uGY5uvcRTyqX2WcorsuRIU6hJgsLTO4WNnc2pqbFyCUCKkoTt1yyNpPwfJfWPo2xkpbavqgbx7j0X8SfWveb9xh2AgqhlKQl+gpQPF96v+17a7xOZULxR9fVx4pOqBEWFasPuOtTfUA0Is0zA9TPvMhvJxz0/PvafaFG4ZD5V8U= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=GeZZj4G2; arc=none smtp.client-ip=209.85.214.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-1e4f341330fso24729005ad.0 for ; Fri, 26 Apr 2024 14:29:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1714166971; x=1714771771; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=epQYh2eYy4HhqqXFO0t2DHAzvNVz9k3o87eDn/hGHY8=; b=GeZZj4G2ikgUSZWIFV1/ETq9O9qRIFHAuQc+ExMOcw0bEoa/8v/70GaEgsQM3QNl/R 6qCOa8x9DpdrvVHo8C6QRpruBeg1kGb+tDmXD3bfnVsEskWTSwqKtHmYgDmVbwOLbki8 1eQm2YGnf5WPNFZLioS/KVIzvd12Gtb7r8BCo1HsrobGx/7wQ0AUb63SfkeHCLlztGNU ZMKgCVfL2t5oG0rFP4pISAod2jCxt/UrrRtTgifN2fF1ZPudkBLrcDzCpCut4SZCiDRJ sqF7zJES18R89PAEig84Pknr5meU2ory3SbVNYB6B0Fe57Nu66ypl0HEkeVxwWNrT4aT S0rQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714166971; x=1714771771; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=epQYh2eYy4HhqqXFO0t2DHAzvNVz9k3o87eDn/hGHY8=; b=ZKPsdkjpWNb92uDxZyXBkfOhkqVfilKUA4zseJuAxKgmulaVBM/wLEbLY2xdOwp+T/ gK9adc9zWfV8M4Hn/6dIxOEk7oimBhcpgqVPuHGblOlKQeAKLoPBehBA0Qnwm7b2oNk8 +my74YTnvaMVQtR96pyBUzfkG9o47UUFuSi7BzeLMEbuuBuj1AEUqPS4gAncPw1jPdg0 3F4gIclCaQgrxztY0rCFppunUTOulPyEbwh4aI5aEal6yH1yFQOOHJei2J3ibKVMtB80 j30h0ICE6D/bS/Q5TygOE00PgW690BtEi/Ls5B/SW24Vu17sD56njYRDyDmjXXz52k4T Hzpw== X-Forwarded-Encrypted: i=1; AJvYcCVYxtQmRbz3O7+S66eAX1gA4XsrUt7fxFDQbEe7utstYRtHQmOckyU2twc8a/W5fnSBT30XAkse1+JEW+nxNqyQCxXLzUA4LIldCnHs X-Gm-Message-State: AOJu0YyhEb91y23YKsRyLTVGCol6m0/RxiMlowWwhWnXfPze9VLiOAPC RBad1F1tdQ2QQnCM2ihkiO/tDrV9uRoOr/OP2zQrvZVJjd4M2SVZigdveT3zPUs= X-Received: by 2002:a17:902:d2d2:b0:1eb:144f:63b7 with SMTP id n18-20020a170902d2d200b001eb144f63b7mr3362816plc.56.1714166971409; Fri, 26 Apr 2024 14:29:31 -0700 (PDT) Received: from charlie.ba.rivosinc.com ([64.71.180.162]) by smtp.gmail.com with ESMTPSA id b3-20020a170902650300b001ea2838fa5dsm7226720plk.76.2024.04.26.14.29.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Apr 2024 14:29:30 -0700 (PDT) From: Charlie Jenkins Date: Fri, 26 Apr 2024 14:29:17 -0700 Subject: [PATCH v4 03/16] riscv: vector: Use vlenb from DT Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20240426-dev-charlie-support_thead_vector_6_9-v4-3-b692f3c516ec@rivosinc.com> References: <20240426-dev-charlie-support_thead_vector_6_9-v4-0-b692f3c516ec@rivosinc.com> In-Reply-To: <20240426-dev-charlie-support_thead_vector_6_9-v4-0-b692f3c516ec@rivosinc.com> To: Conor Dooley , Rob Herring , Krzysztof Kozlowski , Paul Walmsley , Palmer Dabbelt , Albert Ou , Guo Ren , Conor Dooley , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Conor Dooley , Evan Green , =?utf-8?q?Cl=C3=A9ment_L=C3=A9ger?= , Jonathan Corbet , Shuah Khan Cc: linux-riscv@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Palmer Dabbelt , linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, Charlie Jenkins X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1714166962; l=3503; i=charlie@rivosinc.com; s=20231120; h=from:subject:message-id; bh=TMZGPAigRUlnddtyOxdX28W8hFoUd2ldYAJcckC4XNo=; b=voxH8bczevqJuWsa7XFbvY9OOL8pV13Qpe0a6DJPgY+bzFW02nxmGbjhOM58C+T7gFvqpoMhf 1Bk7VHjcOmKC45lYQRmhaE8i0oGl6cJy2OFEN3ko9rPsO0a7Logzma5 X-Developer-Key: i=charlie@rivosinc.com; a=ed25519; pk=t4RSWpMV1q5lf/NWIeR9z58bcje60/dbtxxmoSfBEcs= If vlenb is provided in the device tree, prefer that over reading the vlenb csr. Signed-off-by: Charlie Jenkins --- arch/riscv/include/asm/cpufeature.h | 2 ++ arch/riscv/kernel/cpufeature.c | 43 +++++++++++++++++++++++++++++++++++++ arch/riscv/kernel/vector.c | 12 ++++++++++- 3 files changed, 56 insertions(+), 1 deletion(-) diff --git a/arch/riscv/include/asm/cpufeature.h b/arch/riscv/include/asm/cpufeature.h index 347805446151..0c4f08577015 100644 --- a/arch/riscv/include/asm/cpufeature.h +++ b/arch/riscv/include/asm/cpufeature.h @@ -31,6 +31,8 @@ DECLARE_PER_CPU(struct riscv_cpuinfo, riscv_cpuinfo); /* Per-cpu ISA extensions. */ extern struct riscv_isainfo hart_isa[NR_CPUS]; +extern u32 riscv_vlenb_of; + void riscv_user_isa_enable(void); #if defined(CONFIG_RISCV_MISALIGNED) diff --git a/arch/riscv/kernel/cpufeature.c b/arch/riscv/kernel/cpufeature.c index 3ed2359eae35..8158f34c3e36 100644 --- a/arch/riscv/kernel/cpufeature.c +++ b/arch/riscv/kernel/cpufeature.c @@ -35,6 +35,8 @@ static DECLARE_BITMAP(riscv_isa, RISCV_ISA_EXT_MAX) __read_mostly; /* Per-cpu ISA extensions. */ struct riscv_isainfo hart_isa[NR_CPUS]; +u32 riscv_vlenb_of; + /** * riscv_isa_extension_base() - Get base extension word * @@ -648,6 +650,42 @@ static int __init riscv_isa_fallback_setup(char *__unused) early_param("riscv_isa_fallback", riscv_isa_fallback_setup); #endif +static int riscv_homogeneous_vlenb(void) +{ + int cpu; + u32 prev_vlenb = 0; + u32 vlenb; + + for_each_possible_cpu(cpu) { + struct device_node *cpu_node; + + cpu_node = of_cpu_device_node_get(cpu); + if (!cpu_node) { + pr_warn("Unable to find cpu node\n"); + continue; + } + + if (of_property_read_u32(cpu_node, "riscv,vlenb", &vlenb)) { + of_node_put(cpu_node); + + if (prev_vlenb) + return -1; + continue; + } + + if (prev_vlenb && vlenb != prev_vlenb) { + of_node_put(cpu_node); + return -1; + } + + prev_vlenb = vlenb; + of_node_put(cpu_node); + } + + riscv_vlenb_of = vlenb; + return 0; +} + void __init riscv_fill_hwcap(void) { char print_str[NUM_ALPHA_EXTS + 1]; @@ -671,6 +709,11 @@ void __init riscv_fill_hwcap(void) pr_info("Falling back to deprecated \"riscv,isa\"\n"); riscv_fill_hwcap_from_isa_string(isa2hwcap); } + + if (riscv_homogeneous_vlenb() < 0) { + pr_warn("RISCV_ISA_V only supports one vlenb on SMP systems. Please ensure that the riscv,vlenb devicetree property is the same across all CPUs. Either all CPUs must have the riscv,vlenb property, or none. If no CPUs in the devicetree use riscv,vlenb then vlenb will be probed from the vlenb CSR. Disabling vector.\n"); + elf_hwcap &= ~COMPAT_HWCAP_ISA_V; + } } /* diff --git a/arch/riscv/kernel/vector.c b/arch/riscv/kernel/vector.c index 6727d1d3b8f2..e04586cdb7f0 100644 --- a/arch/riscv/kernel/vector.c +++ b/arch/riscv/kernel/vector.c @@ -33,7 +33,17 @@ int riscv_v_setup_vsize(void) { unsigned long this_vsize; - /* There are 32 vector registers with vlenb length. */ + /* + * There are 32 vector registers with vlenb length. + * + * If the riscv,vlenb property was provided by the firmware, use that + * instead of probing the CSRs. + */ + if (riscv_vlenb_of) { + this_vsize = riscv_vlenb_of * 32; + return 0; + } + riscv_v_enable(); this_vsize = csr_read(CSR_VLENB) * 32; riscv_v_disable(); -- 2.44.0