Received: by 2002:a05:6a10:1a4d:0:0:0:0 with SMTP id nk13csp71382pxb; Tue, 15 Feb 2022 05:51:59 -0800 (PST) X-Google-Smtp-Source: ABdhPJzp3RTvoCyRTQdhg4bTBTw8Q7vQK1z5QFc/wlQnfthhdhCvmDOy9HSIIzLFI6zjN/tKws0c X-Received: by 2002:a17:902:e74b:: with SMTP id p11mr4421156plf.115.1644933119070; Tue, 15 Feb 2022 05:51:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1644933119; cv=none; d=google.com; s=arc-20160816; b=Zdu8R/VKi4GggF33BrXzQAUtufY/yVN6WuGhNMQTaj6VBswk7Hq7FFJyKTL1iJ05fV fn5PrV04wvMd4ETSyZlZgIIgLA2dexqWgL2NydYhfNefH4loPq/LTBhk2L+VsxiZrliE q6KXP6JWc11avoa2kRmuaAaJ3z7CKaIwunSM86J5dWLjhx+77aomWqkAg1g2iQuo1lgH vCBqzBliswZk0F7Gs/xaBgRJlIYkMreU8+eiYQZHHqVWsn93z+vCUSF2Ku0AO9GyN2gD QF5f8sKfWsSlA9Aay74Zxg1x6q/wFC0f57ZSDFg4KKCFDhno98VJubiDF0bu0kz0kcAb O05Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=saY5DtvepsvwegCELkFkB7RgpB9RohGc6lIP30RliiM=; b=gGd8Hf8sgxAT5cQsD8wK3coOV+0yEVFBn0hwMnyKbBN9c6VFrs6RprhT6YebE/FXSn m+B5LCU0nGUGtfGNZ0HFWeOxWg6RkPpFOxFkj3nCh3SBNGNl0vwazkrw/BMZibAGGxnq QQBFrvDoaV0iUCPCyKNlkudodBykQhIoSw7HQsq20LyA0Q0At1udJvPBSLqcIj59LnFw f2+aKYD8BevAtoiBeYhZ8Cvq9Z0AObmdSpFiMjnkCuu4EyH8E83oGZtWAJXB2pI21DbI OiY7AfZU/BJU/hEjJqWzcfAMDJXANkY4ANYDfne+b5d8C+pPmZbRjcC8IhhP3Jmmvt4V naFQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@rivosinc-com.20210112.gappssmtp.com header.s=20210112 header.b=RpittIM+; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id 13si2737818pgb.573.2022.02.15.05.51.32; Tue, 15 Feb 2022 05:51:59 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@rivosinc-com.20210112.gappssmtp.com header.s=20210112 header.b=RpittIM+; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235629AbiBOJDR (ORCPT + 99 others); Tue, 15 Feb 2022 04:03:17 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:41814 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235583AbiBOJDD (ORCPT ); Tue, 15 Feb 2022 04:03:03 -0500 Received: from mail-qk1-x72c.google.com (mail-qk1-x72c.google.com [IPv6:2607:f8b0:4864:20::72c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2BA1B11628F for ; Tue, 15 Feb 2022 01:02:43 -0800 (PST) Received: by mail-qk1-x72c.google.com with SMTP id b35so16720509qkp.6 for ; Tue, 15 Feb 2022 01:02:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=saY5DtvepsvwegCELkFkB7RgpB9RohGc6lIP30RliiM=; b=RpittIM+xed10v1kmPiEatjI4Ljy47ofyiUgCuxFOn8ZZziqPDhh/myQGQPAINUO3i 7GEeXm9xSQ4K+hh08Dn3UTPYEfduE5BOgAfVvPVvq+LbXefkk2PtGugKr3R7Bq5Shg3L l65RE8JRn7wKBMv4IP8lxJxchuM8mKVTB0BIsFhG7ycILi8fop0+wYCkNthc2VgYNRgw tQn1pLTVVvHwjetbNQj6m6DIUM9bOp7S0eWWgWptMrKDZfDusbJBTYSZmYdxChHCA7Mz o4HeBU/BOenOIGN3q92ispv9rjskiw1SJW2/aKKC901k9rXRUKbUeyIZacy31AZs+5s7 Uc9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=saY5DtvepsvwegCELkFkB7RgpB9RohGc6lIP30RliiM=; b=10q+Ih5514BnDg0di19ly7ZmummPbghv772Z/whKrdVYEgYV4n974Yn3w3RFZL8/7A yN6AgWIeTRXk48tYFd2d9Vs+9wT9rcTrpP15vvAo78uZI1uRbtQe73bpxZYf3Jg/wJHy ep/c0iefc9agg+NFeNUygj+jS0EfWHwQGxJbMVieHew5Come5pMqfFLIwKm8QnRF3wR+ 3T4RQbC96WSJmDO4Y6HwF/FYRD1ywnu3wCxm1TqbPcTlMA3QEtcV0EuLTRUvG6AMc8oE GatnQ9Y4p0ek52OozfOGsrsVokXDErkOwyExe8lw0ObdKZSIe8yr9w/s0gjGPHf1dCUH cmtQ== X-Gm-Message-State: AOAM530FTWA1OjphXhHPAddtfRtTa8OntPHPjGkZP21f5eAeeUo7z2ld 7bEFbrPhI44uuQfp8TNWxOMlU9zO6Aegh1SJ X-Received: by 2002:a05:620a:2687:: with SMTP id c7mr1434792qkp.497.1644915762087; Tue, 15 Feb 2022 01:02:42 -0800 (PST) Received: from rivos-atish.. (adsl-70-228-75-190.dsl.akrnoh.ameritech.net. [70.228.75.190]) by smtp.gmail.com with ESMTPSA id w4sm17711158qko.123.2022.02.15.01.02.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 15 Feb 2022 01:02:41 -0800 (PST) From: Atish Patra To: linux-kernel@vger.kernel.org Cc: Atish Patra , Albert Ou , Atish Patra , Anup Patel , Damien Le Moal , devicetree@vger.kernel.org, Jisheng Zhang , Krzysztof Kozlowski , linux-riscv@lists.infradead.org, Palmer Dabbelt , Paul Walmsley , Rob Herring Subject: [PATCH v3 6/6] RISC-V: Improve /proc/cpuinfo output for ISA extensions Date: Tue, 15 Feb 2022 01:02:11 -0800 Message-Id: <20220215090211.911366-7-atishp@rivosinc.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220215090211.911366-1-atishp@rivosinc.com> References: <20220215090211.911366-1-atishp@rivosinc.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently, the /proc/cpuinfo outputs the entire riscv,isa string which is not ideal when we have multiple ISA extensions present in the ISA string. Some of them may not be enabled in kernel as well. Parse only the enabled ISA extension and print them in a separate row. Signed-off-by: Atish Patra --- arch/riscv/include/asm/hwcap.h | 7 ++++++ arch/riscv/kernel/cpu.c | 44 ++++++++++++++++++++++++++++++++-- 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/arch/riscv/include/asm/hwcap.h b/arch/riscv/include/asm/hwcap.h index 170bd80da520..691fc9c8099b 100644 --- a/arch/riscv/include/asm/hwcap.h +++ b/arch/riscv/include/asm/hwcap.h @@ -54,6 +54,13 @@ enum riscv_isa_ext_id { RISCV_ISA_EXT_ID_MAX = RISCV_ISA_EXT_MAX, }; +struct riscv_isa_ext_data { + /* Name of the extension displayed to userspace via /proc/cpuinfo */ + char uprop[RISCV_ISA_EXT_NAME_LEN_MAX]; + /* The logical ISA extension ID */ + unsigned int isa_ext_id; +}; + unsigned long riscv_isa_extension_base(const unsigned long *isa_bitmap); #define riscv_isa_extension_mask(ext) BIT_MASK(RISCV_ISA_EXT_##ext) diff --git a/arch/riscv/kernel/cpu.c b/arch/riscv/kernel/cpu.c index ad0a7e9f828b..ced7e5be8641 100644 --- a/arch/riscv/kernel/cpu.c +++ b/arch/riscv/kernel/cpu.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -63,12 +64,50 @@ int riscv_of_parent_hartid(struct device_node *node) } #ifdef CONFIG_PROC_FS +#define __RISCV_ISA_EXT_DATA(UPROP, EXTID) \ + { \ + .uprop = #UPROP, \ + .isa_ext_id = EXTID, \ + } + +static struct riscv_isa_ext_data isa_ext_arr[] = { + __RISCV_ISA_EXT_DATA("", RISCV_ISA_EXT_MAX), +}; + +static void print_isa_ext(struct seq_file *f) +{ + struct riscv_isa_ext_data *edata; + int i = 0, arr_sz; + + arr_sz = ARRAY_SIZE(isa_ext_arr) - 1; + + /* No extension support available */ + if (arr_sz <= 0) + return; + + seq_puts(f, "isa-ext\t\t: "); + for (i = 0; i <= arr_sz; i++) { + edata = &isa_ext_arr[i]; + if (!__riscv_isa_extension_available(NULL, edata->isa_ext_id)) + continue; + seq_printf(f, "%s ", edata->uprop); + } + seq_puts(f, "\n"); +} static void print_isa(struct seq_file *f, const char *isa) { - /* Print the entire ISA as it is */ + char *ext_start; + int isa_len = strlen(isa); + int base_isa_len = isa_len; + + ext_start = strnchr(isa, isa_len, '_'); + if (ext_start) + base_isa_len = isa_len - strlen(ext_start); + + /* Print only the base ISA as it is */ seq_puts(f, "isa\t\t: "); - seq_write(f, isa, strlen(isa)); + seq_write(f, isa, base_isa_len); seq_puts(f, "\n"); } @@ -115,6 +154,7 @@ static int c_show(struct seq_file *m, void *v) seq_printf(m, "hart\t\t: %lu\n", cpuid_to_hartid_map(cpu_id)); if (!of_property_read_string(node, "riscv,isa", &isa)) print_isa(m, isa); + print_isa_ext(m); print_mmu(m); if (!of_property_read_string(node, "compatible", &compat) && strcmp(compat, "riscv")) -- 2.30.2