Received: by 2002:ab2:1c04:0:b0:1f7:53ba:1ebe with SMTP id f4csp45628lqg; Fri, 26 Apr 2024 08:21:33 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCVR3idoABeuQQYOeyYO0tkYbg96u4xp0vlzRpEXQxD3jW3JAphW6BOBtDeTrF36VSyoYzYMQ/uk7BOOwQoo8APycqzAbvwM/X8KbsK8sw== X-Google-Smtp-Source: AGHT+IEbUStj01TTr3ykzYMtIMfk0EY3ZEj4LIzYT6fz5SMLYMnCROW5z8n+W3yZ+7wdGVdNQDHa X-Received: by 2002:a17:906:f0c4:b0:a52:1432:b790 with SMTP id dk4-20020a170906f0c400b00a521432b790mr1926413ejb.31.1714144893670; Fri, 26 Apr 2024 08:21:33 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1714144893; cv=pass; d=google.com; s=arc-20160816; b=DraoiSSvEAaXfvaoAAfhd4LEL4XaxfHQnB6ahUmFO7y5TyqYncAgzwvqGnH3Y0lzQ7 1CSCtL6vkbcpWAeoRK2zUPGHd9uXTIRO9GMqZVGQ8FDseND6HzR6fSuv30bG6J64/Hq5 rehdXvuyQRtCTZNEM7GPW3sNa0a5SN1dG8U1RwlI3NKRB+1o+5cuuTKrA/gmRlCe4Osy Eo9LgoQ6iHBE+lF0ZsRRPDWmfUKgVHVhRKjytESLZNT92P6WWjwKxAj1c36Ce1xRUVk0 YZbMc8XugLVY0Y0an1CAInqOn1neUE0okFuK5RIFiWhvCS8TRfuEJ/KoE/vaYMCjmadu Yw0w== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=in-reply-to:content-disposition:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:message-id:subject:cc :to:from:date:dkim-signature; bh=hGqJfPM/7l1ux8RUdyQ8P6r9pdV+T84tP3/MU4Wh2V8=; fh=mBwwpQbay9vhzTgPULjjDn+LkmwbaBeNVRczdYQ/Av4=; b=KCgfex4zRFso36kE2ZEt9SVTfgEapV14j32OtRhiLLjPV/HtwGqQqXEAKqok/vTL7P hIifpZVZzLkgPlHKEsBVxi1Eqs7pKLE/I2W19Ip6+D7sjptC+KuKNDI9jmHm7QWjxEIm j9X1CcRwa8ThhDjmnjrDjSY+zsNGL7V8n60wuPe1Kb1AJ+3b+5Kp71vgrW+BNcPeFRyp PZnlQecOjt77KvRujUSmg3qE/lxVgKnwg7jrmhiXVrPLVDw1c4VbbDlCrjgY3msyIlcL OALGA3U/dr0fTww0rzyCg3Ck0ENhblNcqSRxK2MK8caAYywDrs219MaUBCeD9uBfnNkr /Rvw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=I8EO8pjG; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-160266-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-160266-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id ko8-20020a170906aa0800b00a51f7d93e93si10869004ejb.968.2024.04.26.08.21.33 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Apr 2024 08:21:33 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-160266-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=I8EO8pjG; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-160266-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-160266-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=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 am.mirrors.kernel.org (Postfix) with ESMTPS id 3EB131F22B0C for ; Fri, 26 Apr 2024 15:21:33 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id D8492155726; Fri, 26 Apr 2024 15:17:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="I8EO8pjG" Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D396214885A; Fri, 26 Apr 2024 15:17:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714144679; cv=none; b=ffmI1f6syOOBMW9PFBfnGxZiiMqxKcBCQSAWk+mN/U287IFPXUvxXJQFEQHnJDWwesEFe2IigiiGAnRrfIjDuqEOudrYQiTeR0xE3TcX/j+auq7NjXrTePzY91s7Q7Tb0ols1aSdwj9X62mpfTIhVdAggVt4is/pBGM9UZfEAb0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714144679; c=relaxed/simple; bh=+/fENaK5cFg3kscakPUFAoJIJiT0bv1e6mPEpyZqBr4=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=IL4Nt4afOKo6tps3zKxNVeZ1YsAcocj2J+Lx9e2YcYGzxvk5V9sxyX2p5m8Jeb/cA7W0YNFMASpJiMtEVRbv2xw8FnH+oaFNbMOJr160rDVhxNKoMxISnfm5coX3m6qykocon0/OuXjh83MlpQfjhC6ygCi7U86xip5AxdQNJfE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=I8EO8pjG; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 41F55C113CD; Fri, 26 Apr 2024 15:17:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1714144678; bh=+/fENaK5cFg3kscakPUFAoJIJiT0bv1e6mPEpyZqBr4=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=I8EO8pjGnbGSXuuL1OtXwdhfm6ZO1hYNJiCIWrOD5+TidBHDEMBP2H0XXK6sAx1Gh WRzI/hZ/FmVRPe+Wkqh/qUndVxQzUVqVpFJoqgLl8wcBGuIDpLpR3eby3yVgqBIFyM kW0vR+6LUOdFfT1y7Gkf4pCcLS7IU3WoiNzYs7YI12ZnvE7+EyNhL1szux/vBuPkuP JAU3Di1GeehfGa6RK3a/MEoOkxTSzZ26u5+DN9ywvyA8fPJ5gjQ/mFK0ItEa/toO6w EgMH3tl6aH9y931UT5HWsC9po8EpwU0UPR8QdZzH/XrnEq+5ufni1qcQzAfzDSXyFc 8Ml/rFYdMuJ+Q== Date: Fri, 26 Apr 2024 16:17:52 +0100 From: Conor Dooley To: Charlie Jenkins Cc: 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 , =?iso-8859-1?Q?Cl=E9ment_L=E9ger?= , Jonathan Corbet , Shuah Khan , 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 Subject: Re: [PATCH v3 04/17] riscv: vector: Use vlenb from DT Message-ID: <20240426-unfocused-amount-e4e74e66962f@spud> References: <20240420-dev-charlie-support_thead_vector_6_9-v3-0-67cff4271d1d@rivosinc.com> <20240420-dev-charlie-support_thead_vector_6_9-v3-4-67cff4271d1d@rivosinc.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="/f82oMmmh2jh87go" Content-Disposition: inline In-Reply-To: <20240420-dev-charlie-support_thead_vector_6_9-v3-4-67cff4271d1d@rivosinc.com> --/f82oMmmh2jh87go Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Sat, Apr 20, 2024 at 06:04:36PM -0700, Charlie Jenkins wrote: > If vlenb is provided in the device tree, prefer that over reading the > vlenb csr. >=20 > Signed-off-by: Charlie Jenkins > --- > arch/riscv/include/asm/cpufeature.h | 2 ++ > arch/riscv/kernel/cpufeature.c | 26 ++++++++++++++++++++++++++ > arch/riscv/kernel/vector.c | 13 +++++++++---- > 3 files changed, 37 insertions(+), 4 deletions(-) >=20 > diff --git a/arch/riscv/include/asm/cpufeature.h b/arch/riscv/include/asm= /cpufeature.h > index 347805446151..809f61ffb667 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]; > =20 > +extern u32 riscv_vlenb_dt[NR_CPUS]; > + > void riscv_user_isa_enable(void); > =20 > #if defined(CONFIG_RISCV_MISALIGNED) > diff --git a/arch/riscv/kernel/cpufeature.c b/arch/riscv/kernel/cpufeatur= e.c > index c6e27b45e192..48874aac4871 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) __r= ead_mostly; > /* Per-cpu ISA extensions. */ > struct riscv_isainfo hart_isa[NR_CPUS]; > =20 > +u32 riscv_vlenb_dt[NR_CPUS]; > + > /** > * riscv_isa_extension_base() - Get base extension word > * > @@ -656,6 +658,28 @@ static int __init riscv_isa_fallback_setup(char *__u= nused) > early_param("riscv_isa_fallback", riscv_isa_fallback_setup); > #endif > =20 > +static void riscv_set_vlenb_from_dt(void) I'd expect to see a name here that had "of" in it, not "dt". > +{ > + int cpu; > + > + for_each_possible_cpu(cpu) { > + struct device_node *cpu_node; > + > + cpu_node =3D 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", &riscv_vlenb_dt[cpu= ])) { > + of_node_put(cpu_node); > + continue; > + } > + > + of_node_put(cpu_node); > + } > +} > + > void __init riscv_fill_hwcap(void) > { > char print_str[NUM_ALPHA_EXTS + 1]; > @@ -675,6 +699,8 @@ void __init riscv_fill_hwcap(void) > } else { > int ret =3D riscv_fill_hwcap_from_ext_list(isa2hwcap); > =20 > + riscv_set_vlenb_from_dt(); Hmm, I think we can go a step further here. We know all of the CPUs widths by the time we get to the first call to riscv_v_setup_vsize(), can we examine the whole list and decide not to enable vector if they do not match, rather than continuing and failing to online CPUs that having the mismatched size? I guess that can go into the `if (elf_hwcap & COMPAT_HWCAP_ISA_V)` condition we already have, and would require clearing the bit from the mask we have at the moment. Cheers, Conor. > + > if (ret && riscv_isa_fallback) { > pr_info("Falling back to deprecated \"riscv,isa\"\n"); > riscv_fill_hwcap_from_isa_string(isa2hwcap); > diff --git a/arch/riscv/kernel/vector.c b/arch/riscv/kernel/vector.c > index 6727d1d3b8f2..fb7f3ca80d9e 100644 > --- a/arch/riscv/kernel/vector.c > +++ b/arch/riscv/kernel/vector.c > @@ -32,11 +32,16 @@ EXPORT_SYMBOL_GPL(riscv_v_vsize); > int riscv_v_setup_vsize(void) > { > unsigned long this_vsize; > + int cpu =3D smp_processor_id(); > =20 > - /* There are 32 vector registers with vlenb length. */ > - riscv_v_enable(); > - this_vsize =3D csr_read(CSR_VLENB) * 32; > - riscv_v_disable(); > + if (riscv_vlenb_dt[cpu]) { > + this_vsize =3D riscv_vlenb_dt[cpu]; > + } else { > + /* There are 32 vector registers with vlenb length. */ > + riscv_v_enable(); > + this_vsize =3D csr_read(CSR_VLENB) * 32; > + riscv_v_disable(); > + } > =20 > if (!riscv_v_vsize) { > riscv_v_vsize =3D this_vsize; >=20 > --=20 > 2.44.0 >=20 --/f82oMmmh2jh87go Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iHUEABYIAB0WIQRh246EGq/8RLhDjO14tDGHoIJi0gUCZivFoAAKCRB4tDGHoIJi 0lF6AP0ehEsfxARMlCxOz5UMGtGRXyOJbr5gWiVUL5P1faiZAQD+NLZW+R2Tboo5 nIrNrSxgWYbJVCV/sCH9Gny0THVwGg0= =jRyL -----END PGP SIGNATURE----- --/f82oMmmh2jh87go--