Received: by 2002:ab2:6203:0:b0:1f5:f2ab:c469 with SMTP id o3csp962601lqt; Fri, 19 Apr 2024 16:48:52 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCVBG0hjsc6LjngoTKNaaNdE+l3UYj4YHelfNzUMzD5jhjKh3j0S7tQOW3Nwncvm9UhGatVawLNQ4PVvPbtyw+OMJ1whuTwuR60BSRZGvA== X-Google-Smtp-Source: AGHT+IFy7LXjrW6tcE48UI54yPYdt6zG33eN2i4gPkbDkcqOjGfar3eJYC3GI0T7oYg6Wlx2fUcI X-Received: by 2002:a05:690c:6906:b0:609:ef57:2266 with SMTP id if6-20020a05690c690600b00609ef572266mr4318074ywb.34.1713570531466; Fri, 19 Apr 2024 16:48:51 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1713570531; cv=pass; d=google.com; s=arc-20160816; b=YpJFDawRbIr65jAvT2tG2JG+iSJVwDuD5xMDgyWNKV96JsZHi244PSjccg6vN5x3q9 0R05edQYOaGwGX0/tnl+fFBXVzIplWMV/a2GhhSEenU98wOC6daeNOmoprVv1tQ/Kf1m cSjn6EySPTSb9Wd7CbSAtDJBWM0iir4z5C5LpGpRE6S4X86ywftsXsb4RG810xiLADMs FTo9IjHLxF5xSbiGv9/tYu616Sjy8gaLMyr2zqv+A05yylekR6uFcBCkW10UIdPI3Mit haHxkniX8aMppJ65N1t4wsg1iC3mLlxu76JJIZkVx65GqodUzDSseWjRDOtlMRCw0ogu Ts3g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=fUdjqPblbE6Q25Ekp/l365V3YEPrpPkLHh57fhpvEHQ=; fh=kyEAnvAFWFe4Hb9sR1ag4IfoBFObnVRvAFj5CxgEoME=; b=nahXUZ/ffx8k8Ib1lm9onXkGTQIIG5DhvWFOlHPcl3sxLE087D3NZJzjAGcBDN88Xp t13pRHZtqYgoPRCI/xi9KyquD8W1AAFY24z5oQjNvgF3m16psw49v35MChJDMt0VIVnt EdksTP08WgGXBcIXsNXUr8aXUA6NGsktfKLjicisuchAq+JBy6Cxdwr3OCL6GNChe2we PYjOI16TuuwgEvMahu9/QzIu5p9lQkuf2dp+1FHq96Q/rvZxm2wESlK658a+5xsVDwAs TsYE21e0Bg+JDrUyOk1jF9YGHWacyp1rMXEZjjtlmUruhQO2u+K4uzwewFHaXxUpW4eg gZ5g==; 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=QKHayzdb; 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-152026-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-152026-linux.lists.archive=gmail.com@vger.kernel.org" Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id b12-20020a05622a020c00b004367bda218fsi5148521qtx.752.2024.04.19.16.48.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Apr 2024 16:48:51 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-152026-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@rivosinc-com.20230601.gappssmtp.com header.s=20230601 header.b=QKHayzdb; 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-152026-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-152026-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 22ED71C20D84 for ; Fri, 19 Apr 2024 23:48:51 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 594C5142654; Fri, 19 Apr 2024 23:47:53 +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="QKHayzdb" Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (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 160A81411ED for ; Fri, 19 Apr 2024 23:47:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713570472; cv=none; b=ecI/W7RTm9t15yBHZlM20Xq1GGto8kOGVkIRgicmGE0ZgrSIR4oQy2KqEsO8u3qOyIbyWDmOlM/+dKLLTi6XuiUsnjNZw/j8Qg92lJFccnzuCjaUWw+WNlFjqk+R5McMcsIHIagta08XlPBqDkp1tMzgD2OyHIKjZszUqyXTL18= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713570472; c=relaxed/simple; bh=PCH+9nz39V3BSztS1z+ZZiAV+qP9h7YwF5oYKnRz76Q=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=lf8D94a1gIyXJnVau5hHJKKwkdXX9zy7Q+KEASOj9cvaUdTx9YSiLa2kGg5uuPv/1H8S/Uh/z3/TJAoVER1MHiCaok3icoOROP/R7OahD6nl9my+WAPbsmvH4v09TGhEiOS9r0aWSQ5F00eU0s+Odwkpux4qvDUb5BjsZXYewhI= 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=QKHayzdb; arc=none smtp.client-ip=209.85.214.182 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-f182.google.com with SMTP id d9443c01a7336-1e3ca546d40so22550315ad.3 for ; Fri, 19 Apr 2024 16:47:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1713570470; x=1714175270; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=fUdjqPblbE6Q25Ekp/l365V3YEPrpPkLHh57fhpvEHQ=; b=QKHayzdb8u/fjXl8b9ryUcZ5e++n2TKLJIilA0DZ5XXh456Cjl707if5jq148PmDdG d1cRTRvFCj1ZKk1klwIven3gL0+lkYnPQnAFtulFqUy4KPwkDYxkySQAt84NfZLsk+Kr zfdheQl1vPn8/hWD60Wq5r2XxoCcSQLp5BTV16i2aB1zNTiO15wl+INkcCNSVlIhuIZm D4lC0PRQHM9OOMDBWg7g7hq5bStTbVuybOkgQV1nzGqlOhOYVmmiueUrg2sQzfk/qPqS CY0fFwx2cPDkz4cJ6oKQk8V17srAKptZW0qdhAxxFsWHmjvnq6TokxbeXmdKR6L/o6jX 0WRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713570470; x=1714175270; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=fUdjqPblbE6Q25Ekp/l365V3YEPrpPkLHh57fhpvEHQ=; b=WffhjwDEgVaz2P9+l9E0NwMM7redNT30ATC9Nm7vbdVK9RZf2phjpP+BkTDxTAD7k+ 2UYnBWzr5T1/XktwdvE6Ucx9RZ4qUJU8XgsxFR+gSNUR4ge0NtxC8jobbFYgiKGh2M8t hV9DjDPnsSagQUCA8e6GkM+Y7rntkrk1lhfgwSFPylDoLtIEHNP9JWcpmJ0uhDGY0LBj t370GlpFenuX4AuitiSsLdm5sFfv21N1ymxBJVFou54fJYTJmfPrqxlBIt7ZaYhG/Di4 5rAnjYKBGLvRK48HmwzThMdWZYH1hYGKPZ7KMUvF3o+9oYotaah7xx+VT0zcsc5oZcu6 RF8w== X-Gm-Message-State: AOJu0YzoltOhjMm6vQgDmxp4DB0VCH3ba8VdLhbewvKB7blx4geyIaly c5IJeLi21nVNZ9GJ4XloX66fjVcRkU1N0z5ntzlCsasQM8GLWlTLM0zDpBhETY4JgyFd2TQbe3B 8 X-Received: by 2002:a17:902:ce85:b0:1e2:3e7f:3b08 with SMTP id f5-20020a170902ce8500b001e23e7f3b08mr4580616plg.38.1713570470144; Fri, 19 Apr 2024 16:47:50 -0700 (PDT) Received: from atishp.ba.rivosinc.com ([64.71.180.162]) by smtp.gmail.com with ESMTPSA id w17-20020a170902d11100b001e42f215f33sm3924017plw.85.2024.04.19.16.47.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Apr 2024 16:47:49 -0700 (PDT) From: Atish Patra To: linux-kernel@vger.kernel.org Cc: Atish Patra , Andrew Jones , Palmer Dabbelt , Conor Dooley , Anup Patel , Ajay Kaher , Albert Ou , Alexandre Ghiti , samuel.holland@sifive.com, Juergen Gross , kvm-riscv@lists.infradead.org, kvm@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-riscv@lists.infradead.org, Mark Rutland , Palmer Dabbelt , Paolo Bonzini , Paul Walmsley , Shuah Khan , virtualization@lists.linux.dev, Will Deacon , x86@kernel.org Subject: [PATCH v8 03/24] drivers/perf: riscv: Read upper bits of a firmware counter Date: Sat, 20 Apr 2024 08:17:19 -0700 Message-Id: <20240420151741.962500-4-atishp@rivosinc.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240420151741.962500-1-atishp@rivosinc.com> References: <20240420151741.962500-1-atishp@rivosinc.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit SBI v2.0 introduced a explicit function to read the upper 32 bits for any firmware counter width that is longer than 32bits. This is only applicable for RV32 where firmware counter can be 64 bit. Reviewed-by: Andrew Jones Acked-by: Palmer Dabbelt Reviewed-by: Conor Dooley Reviewed-by: Anup Patel Signed-off-by: Atish Patra --- drivers/perf/riscv_pmu_sbi.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/drivers/perf/riscv_pmu_sbi.c b/drivers/perf/riscv_pmu_sbi.c index 3e44d2fb8bf8..1823ffb25d35 100644 --- a/drivers/perf/riscv_pmu_sbi.c +++ b/drivers/perf/riscv_pmu_sbi.c @@ -57,6 +57,8 @@ asm volatile(ALTERNATIVE( \ PMU_FORMAT_ATTR(event, "config:0-47"); PMU_FORMAT_ATTR(firmware, "config:63"); +static bool sbi_v2_available; + static struct attribute *riscv_arch_formats_attr[] = { &format_attr_event.attr, &format_attr_firmware.attr, @@ -511,19 +513,29 @@ static u64 pmu_sbi_ctr_read(struct perf_event *event) struct hw_perf_event *hwc = &event->hw; int idx = hwc->idx; struct sbiret ret; - union sbi_pmu_ctr_info info; u64 val = 0; + union sbi_pmu_ctr_info info = pmu_ctr_list[idx]; if (pmu_sbi_is_fw_event(event)) { ret = sbi_ecall(SBI_EXT_PMU, SBI_EXT_PMU_COUNTER_FW_READ, hwc->idx, 0, 0, 0, 0, 0); - if (!ret.error) - val = ret.value; + if (ret.error) + return 0; + + val = ret.value; + if (IS_ENABLED(CONFIG_32BIT) && sbi_v2_available && info.width >= 32) { + ret = sbi_ecall(SBI_EXT_PMU, SBI_EXT_PMU_COUNTER_FW_READ_HI, + hwc->idx, 0, 0, 0, 0, 0); + if (!ret.error) + val |= ((u64)ret.value << 32); + else + WARN_ONCE(1, "Unable to read upper 32 bits of firmware counter error: %ld\n", + ret.error); + } } else { - info = pmu_ctr_list[idx]; val = riscv_pmu_ctr_read_csr(info.csr); if (IS_ENABLED(CONFIG_32BIT)) - val = ((u64)riscv_pmu_ctr_read_csr(info.csr + 0x80)) << 31 | val; + val |= ((u64)riscv_pmu_ctr_read_csr(info.csr + 0x80)) << 32; } return val; @@ -1135,6 +1147,9 @@ static int __init pmu_sbi_devinit(void) return 0; } + if (sbi_spec_version >= sbi_mk_version(2, 0)) + sbi_v2_available = true; + ret = cpuhp_setup_state_multi(CPUHP_AP_PERF_RISCV_STARTING, "perf/riscv/pmu:starting", pmu_sbi_starting_cpu, pmu_sbi_dying_cpu); -- 2.34.1