Received: by 2002:a05:6a10:9afc:0:0:0:0 with SMTP id t28csp320504pxm; Wed, 23 Feb 2022 00:45:49 -0800 (PST) X-Google-Smtp-Source: ABdhPJxFtW+3s5L92Cm2vMHv7scr/48hPiLa3lLmVhF1W5LDBDpqSjbJCkSUHCHmC0DU+rJqGSql X-Received: by 2002:a17:907:954f:b0:6ad:3614:73e6 with SMTP id ex15-20020a170907954f00b006ad361473e6mr22447022ejc.731.1645605949370; Wed, 23 Feb 2022 00:45:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1645605949; cv=none; d=google.com; s=arc-20160816; b=kbkoVofQNrXCDdmz0OkAekzqWSehas5bSSsKpeExUcv4u6v1uKd8OmCOyJtWN/M59g GHyjE01CRuzhXKatyQRsAUTy4Exd/LQDxfYqJd0bPT7oVRKYUUISerIIuGQYelbrKoXL LTxQHo4rfIq3Jaijttl8sKzrpXqFk1Mlyek0zhO2ljyxlpJwqSBHrkv30r8GtpvZbKf1 wEB3ahJWdlxfjTyvFE9LPZUbPwbNTfiKgUaNMUWMIFQoRfdDFht8GUcYwYS9XEVWkbP5 8F+gMGVxjix4x83gToPE/WfvvUeg9yf06T6fh+wC4X2r8BxPptg6BwZDPwetxqx7A4Rd ULRw== 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=8URXe1loYhEkYqA2mgPstYxk0kAqAk7osNiGz1KzfP4=; b=S2m/r8FeQjuzxS80t/J5ntztedfZVI5UOeJ/ebN9ats/D6JBCwgRNoTjXob8ccMynV j7oOEbGfcV7m0W3fEd4hBH50JKIxbUn881eOzr4V9Yd0CfjwEdxwYwv4BHpKIgBf22kr ktAwyrWspT4JWhI9tvtPmU23jk+ncg7o2JnqDFqDQRMpoQgVMAhOp+OxiQa9P1XRBRu7 kkwm8xFM2bSTrG/RCHzxqnETtCtMZbyDOkXYq5MhmAAgAbKEBSSZ5pm59emU4y9YCG9p rFI0r/vf/ikPipUJmaqMXvSGwPWmfRrPLuuQ0OP/dJBrcB/pevj63iLacEfwU1jjgs/O Am/A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@rivosinc-com.20210112.gappssmtp.com header.s=20210112 header.b=tkekYg+u; 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 t15si412032edc.81.2022.02.23.00.45.25; Wed, 23 Feb 2022 00:45:49 -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=tkekYg+u; 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 S235665AbiBVUtM (ORCPT + 99 others); Tue, 22 Feb 2022 15:49:12 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34452 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235660AbiBVUtI (ORCPT ); Tue, 22 Feb 2022 15:49:08 -0500 Received: from mail-oi1-x231.google.com (mail-oi1-x231.google.com [IPv6:2607:f8b0:4864:20::231]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5D94BA644D for ; Tue, 22 Feb 2022 12:48:34 -0800 (PST) Received: by mail-oi1-x231.google.com with SMTP id z7so12955551oid.4 for ; Tue, 22 Feb 2022 12:48:34 -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=8URXe1loYhEkYqA2mgPstYxk0kAqAk7osNiGz1KzfP4=; b=tkekYg+ui1gZE9tvXRPYNaXdnHSqvcZXJR3E2Vm5fQodbde1h2KEXdYVPBeSbBJrKE tZITXpUaJDk67Z/a7izDd9M3gsdIhhNTMcdTj6S8CxQsNWqSdzP/jKbyNPXB2oJu3avO 3Zk4Jzm23rDMqdxFIbyWksIRJgMYHe95vMZ4pU0NzJ4BWBMvSQ1mHfq53uAu7WYa6PEM +utp42+TYOdOY+tnl0KO6BUIuJx91baW39b4LLo7XR8xTBndLIkdHIwQHVU5hXpmXZsc ZJOLoy8uvivgGGcYyqXtIuEtIJ/Cze3eAL876RuQ9h20mvCPEdnfU11wF41bvhGTyTig senQ== 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=8URXe1loYhEkYqA2mgPstYxk0kAqAk7osNiGz1KzfP4=; b=OtaV98MNSjPr+OoDzj5IIQNsuGAYml7Sxrughk6XF6XfGExLpHYQouks7bOUZgPEmB LIbn9G4xzELaXFNaAx0ck1ab/F7AMtHSfuNb7fNomKXE//qUNw9YDXh6SEaApTRWbgrL kjSNBUcFhFFV8EdNxpE7pKBvDSGk2BCpmxUtKCGayIKAOLK+pHQCjfiZ4taOS6b3KZwr OttU0++FdoGevmhjfQ0ezTIueBh3GvDFCCWmexGhCPPI/3I6dHbJa2HJQFGfDhpbSXTO ppoXNlgvrvRqhF727DCzfoxBX8tORqGzqbMSnfdiWB1fDrYzuiZ67tG4oh7hvtw9Ytn2 AMLg== X-Gm-Message-State: AOAM531NrxVAdcOlHH5U363vYEDpJVC6DXPw2CulQFC0cOeZt/A4JlI1 rrf/YEzhA0+9BBE0sljs/6d54e5kxZgryQ== X-Received: by 2002:aca:5b85:0:b0:2d3:fe13:177f with SMTP id p127-20020aca5b85000000b002d3fe13177fmr2847716oib.59.1645562913488; Tue, 22 Feb 2022 12:48:33 -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 o14sm16508197oaq.37.2022.02.22.12.48.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 12:48:33 -0800 (PST) From: Atish Patra To: linux-kernel@vger.kernel.org Cc: Atish Patra , Heiko Stuebner , 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 v5 6/6] RISC-V: Improve /proc/cpuinfo output for ISA extensions Date: Tue, 22 Feb 2022 12:48:11 -0800 Message-Id: <20220222204811.2281949-7-atishp@rivosinc.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220222204811.2281949-1-atishp@rivosinc.com> References: <20220222204811.2281949-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. Same goes for the single letter extensions as well which prints the entire ISA string. Some of they may not be valid ISA extensions as well (e.g 'su') Parse only the valid & enabled ISA extension and print them. Tested-by: Heiko Stuebner Signed-off-by: Atish Patra --- arch/riscv/include/asm/hwcap.h | 7 +++++ arch/riscv/kernel/cpu.c | 51 ++++++++++++++++++++++++++++++++-- 2 files changed, 56 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..031ad15a059f 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,57 @@ 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"); +} + +/** + * These are the only valid base (single letter) ISA extensions as per the spec. + * It also specifies the canonical order in which it appears in the spec. + * Some of the extension may just be a place holder for now (B, K, P, J). + * This should be updated once corresponding extensions are ratified. + */ +static const char base_riscv_exts[13] = "imafdqcbkjpvh"; static void print_isa(struct seq_file *f, const char *isa) { - /* Print the entire ISA as it is */ + int i; + seq_puts(f, "isa\t\t: "); - seq_write(f, isa, strlen(isa)); + /* Print the rv[64/32] part */ + seq_write(f, isa, 4); + for (i = 0; i < sizeof(base_riscv_exts); i++) { + if (__riscv_isa_extension_available(NULL, base_riscv_exts[i] - 'a')) + /* Print only enabled the base ISA extensions */ + seq_write(f, &base_riscv_exts[i], 1); + } seq_puts(f, "\n"); } @@ -115,6 +161,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