From patchwork Thu Mar 23 09:03:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sunil V L X-Patchwork-Id: 1760203 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=lSDBDDwS; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=ventanamicro.com header.i=@ventanamicro.com header.a=rsa-sha256 header.s=google header.b=idelLtcl; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Phzsc6Htbz1yXv for ; Thu, 23 Mar 2023 20:03:48 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=ppcWIukp4bdHVZB92sP4bKOOtNn0yLdybRNK57QLiXc=; b=lSDBDDwSXZtFeV RyKyoVsiT2xjDABO9pfdl62J5Ajxs+GNzPwFvVfcU6J0JQy/rGs1klMudhayySysq3PySL78QeAOQ jG752w+GYFWgb9Y/u1fLFQr61+iqSusbJ2CFVPoahtk3szCEYJznTYW5WrMPANN0KkzIBeT79Jq1Q +I2HDGpoXT5kq5GigYWilyopabapg9R/am26m6h9SnkPTdzI5ZSr7Y8YzBKAsXLdug8niYzM/YdAt bygzU7QHUp3i6SdPWFX8BKADO5rRAuPEvhH7DGwSRM1Au8J0U3drgC4XTNDtNLeWFbVN/DCU+C0JY +Jv8Swa5hcXqGCMHzpZA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pfGrA-001MJA-31; Thu, 23 Mar 2023 09:03:36 +0000 Received: from mail-pg1-x532.google.com ([2607:f8b0:4864:20::532]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pfGr5-001MHG-0h for opensbi@lists.infradead.org; Thu, 23 Mar 2023 09:03:35 +0000 Received: by mail-pg1-x532.google.com with SMTP id s19so6805285pgi.0 for ; Thu, 23 Mar 2023 02:03:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1679562208; 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=Yve2KkcZ1ltm4rq3J00RTIXBIajXYINpeV11zoQFeMw=; b=idelLtclJptFJuHTQl/Sq+C61juW4uw6ASBxvl7yIPL/w8pwsDxxGZh9aDQN5kRpn6 3OXtVFe689H4jUEiP7PM8zn994lMEH5LqxmXIaM2sc7XP5dMVGgnHfkFkZDPTAl94UEO ZcoI91M4aLipy9ZWFMK5/Qa+yqIqymx4/OmJWRK4eDus5RnjM4JOfx096KM/9tCuRftq 1dVcRw428lm1ezAzeHD+MH1x7tMug5pCu0mPg8zunsfLLt3o+m86ZJw7jJLoS7BuuaUY BAx6B7/tZ1+W4ws7H3+gc+GfYpxKLiKTTFP7dljaMHpwBahuMQjEzB4odiRPtHrCRTO2 7Czw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679562208; 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=Yve2KkcZ1ltm4rq3J00RTIXBIajXYINpeV11zoQFeMw=; b=dwd0MVMxv6ox4NzEKfbYwkj0/KdFbpU6lph4R3HHzhg6iMQToFQ3HVYdRm2FDgSlU4 CgY4wzDs5bJMXPhb7YmpMc+QBCNG50L9KltjE31Dsjc+0FrX56b+iJlZequD6rWDbO9O M8rdAJGCYOhbbHeV1/KfZMxY7s7wdF5o7roT53Ra+ZCADSty8lPr58uOcTssvD8QN9bj BLTAe/u/9DtwwzZk8cSn0KsETdh+UO2sBHYXw/Nqz7X1PVgQWHHycJT2QPq+UXA0T5zm otdh9cE8JVijlP4+ZDfgXHO8OLbIFE2kyq3oEh+AKY+q4VIBDIx060pay9d8xfKFh1G4 8R9w== X-Gm-Message-State: AO0yUKWpFR1thkDb+sCNfjtqyAfQno33BFUeRq9xlRrwzVXyx+uZOHg6 1nmeLsqFnxJwuvO6OGTiEdFUm/ge3PZ2UqsD9jk= X-Google-Smtp-Source: AK7set9epQ+TGgc3PReqogLK70fea8OQ7e8IdqCwTp5cjg7poVeuTUwjwGy1Vamem2yE3eB5FHZf3Q== X-Received: by 2002:a62:4ec9:0:b0:625:cf6d:b260 with SMTP id c192-20020a624ec9000000b00625cf6db260mr5662595pfb.6.1679562208008; Thu, 23 Mar 2023 02:03:28 -0700 (PDT) Received: from kerodi.Dlink ([49.206.12.197]) by smtp.gmail.com with ESMTPSA id h3-20020aa786c3000000b005a9cb8edee3sm11354715pfo.85.2023.03.23.02.03.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Mar 2023 02:03:27 -0700 (PDT) From: Sunil V L To: opensbi@lists.infradead.org Cc: Atish Patra , Anup Patel , Andrew Jones , Sunil V L Subject: [RFC PATCH v2 1/4] include: Add defines for SBI CPPC extension Date: Thu, 23 Mar 2023 14:33:17 +0530 Message-Id: <20230323090320.2489167-2-sunilvl@ventanamicro.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230323090320.2489167-1-sunilvl@ventanamicro.com> References: <20230323090320.2489167-1-sunilvl@ventanamicro.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230323_020331_251492_5CC48B91 X-CRM114-Status: UNSURE ( 7.59 ) X-CRM114-Notice: Please train this message. X-Spam-Score: -0.2 (/) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Add SBI CPPC extension related defines to the SBI ecall interface header. Signed-off-by: Sunil V L Reviewed-by: Andrew Jones --- include/sbi/sbi_ecall_interface.h | 34 +++++++++++++++++++++++++++++++ 1 file changed, 34 in [...] Content analysis details: (-0.2 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2607:f8b0:4864:20:0:0:0:532 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain X-BeenThere: opensbi@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "opensbi" Errors-To: opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Add SBI CPPC extension related defines to the SBI ecall interface header. Signed-off-by: Sunil V L Reviewed-by: Andrew Jones --- include/sbi/sbi_ecall_interface.h | 34 +++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/include/sbi/sbi_ecall_interface.h b/include/sbi/sbi_ecall_interface.h index 4597358..dee2dd9 100644 --- a/include/sbi/sbi_ecall_interface.h +++ b/include/sbi/sbi_ecall_interface.h @@ -31,6 +31,7 @@ #define SBI_EXT_PMU 0x504D55 #define SBI_EXT_DBCN 0x4442434E #define SBI_EXT_SUSP 0x53555350 +#define SBI_EXT_CPPC 0x43505043 /* SBI function IDs for BASE extension*/ #define SBI_EXT_BASE_GET_SPEC_VERSION 0x0 @@ -256,6 +257,39 @@ enum sbi_pmu_ctr_type { #define SBI_SUSP_SLEEP_TYPE_LAST SBI_SUSP_SLEEP_TYPE_SUSPEND #define SBI_SUSP_PLATFORM_SLEEP_START 0x80000000 +/* SBI function IDs for CPPC extension */ +#define SBI_EXT_CPPC_PROBE 0x0 +#define SBI_EXT_CPPC_READ 0x1 +#define SBI_EXT_CPPC_READ_HI 0x2 +#define SBI_EXT_CPPC_WRITE 0x3 + +enum sbi_cppc_reg_id { + SBI_CPPC_HIGHEST_PERF = 0x00000000, + SBI_CPPC_NOMINAL_PERF = 0x00000001, + SBI_CPPC_LOW_NON_LINEAR_PERF = 0x00000002, + SBI_CPPC_LOWEST_PERF = 0x00000003, + SBI_CPPC_GUARANTEED_PERF = 0x00000004, + SBI_CPPC_DESIRED_PERF = 0x00000005, + SBI_CPPC_MIN_PERF = 0x00000006, + SBI_CPPC_MAX_PERF = 0x00000007, + SBI_CPPC_PERF_REDUC_TOLERANCE = 0x00000008, + SBI_CPPC_TIME_WINDOW = 0x00000009, + SBI_CPPC_CTR_WRAP_TIME = 0x0000000A, + SBI_CPPC_REFERENCE_CTR = 0x0000000B, + SBI_CPPC_DELIVERED_CTR = 0x0000000C, + SBI_CPPC_PERF_LIMITED = 0x0000000D, + SBI_CPPC_ENABLE = 0x0000000E, + SBI_CPPC_AUTO_SEL_ENABLE = 0x0000000F, + SBI_CPPC_AUTO_ACT_WINDOW = 0x00000010, + SBI_CPPC_ENERGY_PERF_PREFERENCE = 0x00000011, + SBI_CPPC_REFERENCE_PERF = 0x00000012, + SBI_CPPC_LOWEST_FREQ = 0x00000013, + SBI_CPPC_NOMINAL_FREQ = 0x00000014, + SBI_CPPC_ACPI_LAST = SBI_CPPC_NOMINAL_FREQ, + SBI_CPPC_TRANSITION_LATENCY = 0x80000000, + SBI_CPPC_NON_ACPI_LAST = SBI_CPPC_TRANSITION_LATENCY, +}; + /* SBI base specification related macros */ #define SBI_SPEC_VERSION_MAJOR_OFFSET 24 #define SBI_SPEC_VERSION_MAJOR_MASK 0x7f From patchwork Thu Mar 23 09:03:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sunil V L X-Patchwork-Id: 1760204 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=Q1J4iIlo; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=ventanamicro.com header.i=@ventanamicro.com header.a=rsa-sha256 header.s=google header.b=jQucEc3P; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Phzsg3QHyz1yXv for ; Thu, 23 Mar 2023 20:03:51 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=NqzVsE1tu2TjYXYEQLrEoGWCcAphlAPMxuL4ML9MkH4=; b=Q1J4iIlo2rCCjF FpTWMZxvXWQ6esNzhXG3YjRQyAsdVgIe9ibPvF7jPGdvjC5tKlSrD2bWlWOwvAeB0kTSZ75RM2ilC VNI1+zNsF0cog5XOLAxzHGimMaPEnXxs8KJK8jrtoKCD01Up4CPH5xj5JZz/EGXrsXzoDSVNDGq2F ozYTvBWLttdZogE8P8TRUros4pkjuKvchHaMJkqkVkQW5gVtFuUqX3aPCISZZuCWq8RduDZ2JUSAY R0tgc7dioNKjTFLkXaUcEPZ13PxVnT8EwRLC9wxy/r+ywROKs3SbuAUJ2EFbqkNW2WrlQ1v1hDI/p EyYwVeq69UJEsH0fruJQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pfGrD-001MK6-1k; Thu, 23 Mar 2023 09:03:39 +0000 Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pfGr8-001MHR-3D for opensbi@lists.infradead.org; Thu, 23 Mar 2023 09:03:36 +0000 Received: by mail-pf1-x431.google.com with SMTP id c4so12748923pfl.0 for ; Thu, 23 Mar 2023 02:03:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1679562210; 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=Ow4kuWWsHQ+aCReSv6i6RmPCSIVOXmduMGlUFcn6osE=; b=jQucEc3PXJ3L/N61CrMC6DWCMfyYeYReCpdod0tJMZy2bY90TuDPAazWWX7HpVOJhQ mvdKKufJX/ZHcfUaUt0Oo42Iqtzrl2yWuH684Wm9hCzj8zUPll01k5IJ2kJ3KyXYmAWF +BR1MOyn0n94nT35ZK6nB383Kc5EFFthv3Bg9gWNgpYteKdDg0/3ShIzzLRWcpr+q8ai 9VuN3P8X3zFOQqqcdOd8xoj6RLMx5+dLaEVHbb1Q0Dp0m9fQBYU2LEs1hg0Ffsy5oB2r phjjn3xaL3lxyIIdA5YWFe7JGTOxWRybvMkQf9UOaVHwzqnoZWqGHsLlCPcIN0HmJ3NG Dmcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679562210; 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=Ow4kuWWsHQ+aCReSv6i6RmPCSIVOXmduMGlUFcn6osE=; b=sJyyxCdDQd22R+Vkcja3JYtFlnvXvggOfEYpMNm9IQE623sRVPhM8VHotrOxvIl6yp Aq+EDYlPVz3b3Dk9ofEwl53MOoWpvprhD47PuXSKgOo1LAMtQVspycpVh+7M7Y37Bg08 tEMmzgpdDb2RmuA/52Iz6tl6ggu7V5aG5tZIK2DPXAuo6KOkBjmZpC/gEjjaTWlLB2Ax Ub4eqBWOyTG86LYK70XTO33kAu0OskLjOWooZpPiLVzxTsxoBIsFDipafXr5pkL6qMzF L27pE2qKIKfI8SSkvM5DKW/QNji9e/gwQ4bAO6xryfxfFDGPW3kDec3VKcZyKQwiesN/ iRVw== X-Gm-Message-State: AO0yUKVn7m1nIYZpg9fVQwJF3luIXfUvFKSFvfUSmIsR9xpMHqsD8yEO iqAqfmV359J+4b8RDt+NSbYD/+CDBiHmqwSfKno= X-Google-Smtp-Source: AK7set+YBUALzbuDQBrlQtlijfRLUKo45zB07HWARnTp8TiQvO0KcVEZZdtVH6w4wT+9yXF331z7gQ== X-Received: by 2002:a62:1dcc:0:b0:623:165e:e459 with SMTP id d195-20020a621dcc000000b00623165ee459mr5354586pfd.7.1679562210204; Thu, 23 Mar 2023 02:03:30 -0700 (PDT) Received: from kerodi.Dlink ([49.206.12.197]) by smtp.gmail.com with ESMTPSA id h3-20020aa786c3000000b005a9cb8edee3sm11354715pfo.85.2023.03.23.02.03.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Mar 2023 02:03:29 -0700 (PDT) From: Sunil V L To: opensbi@lists.infradead.org Cc: Atish Patra , Anup Patel , Andrew Jones , Sunil V L Subject: [RFC PATCH v2 2/4] lib: sbi: Implement SBI CPPC extension Date: Thu, 23 Mar 2023 14:33:18 +0530 Message-Id: <20230323090320.2489167-3-sunilvl@ventanamicro.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230323090320.2489167-1-sunilvl@ventanamicro.com> References: <20230323090320.2489167-1-sunilvl@ventanamicro.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230323_020335_036546_F321F73A X-CRM114-Status: GOOD ( 19.44 ) X-Spam-Score: -0.2 (/) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Implement SBI CPPC extension. This extension is only available when OpenSBI platform provides a CPPC device to generic library. Signed-off-by: Sunil V L Reviewed-by: Andrew Jones --- include/sbi/sbi_cppc.h | 35 +++++++++++ lib/sbi/Kconfig | 4 ++ lib/sbi/objects.mk | 4 ++ lib [...] Content analysis details: (-0.2 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2607:f8b0:4864:20:0:0:0:431 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain X-BeenThere: opensbi@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "opensbi" Errors-To: opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Implement SBI CPPC extension. This extension is only available when OpenSBI platform provides a CPPC device to generic library. Signed-off-by: Sunil V L Reviewed-by: Andrew Jones --- include/sbi/sbi_cppc.h | 35 +++++++++++ lib/sbi/Kconfig | 4 ++ lib/sbi/objects.mk | 4 ++ lib/sbi/sbi_cppc.c | 124 +++++++++++++++++++++++++++++++++++++++ lib/sbi/sbi_ecall_cppc.c | 63 ++++++++++++++++++++ 5 files changed, 230 insertions(+) create mode 100644 include/sbi/sbi_cppc.h create mode 100644 lib/sbi/sbi_cppc.c create mode 100644 lib/sbi/sbi_ecall_cppc.c diff --git a/include/sbi/sbi_cppc.h b/include/sbi/sbi_cppc.h new file mode 100644 index 0000000..edf73f5 --- /dev/null +++ b/include/sbi/sbi_cppc.h @@ -0,0 +1,35 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2023 Ventana Micro Systems Inc. + * + */ + +#ifndef __SBI_CPPC_H__ +#define __SBI_CPPC_H__ + +#include + +/** CPPC device */ +struct sbi_cppc_device { + /** Name of the CPPC device */ + char name[32]; + + /** probe - returns register width if implemented, 0 otherwise */ + int (*cppc_probe)(unsigned long reg); + + /** read the cppc register*/ + int (*cppc_read)(unsigned long reg, uint64_t *val); + + /** write to the cppc register*/ + int (*cppc_write)(unsigned long reg, uint64_t val); +}; + +int sbi_cppc_probe(unsigned long reg); +int sbi_cppc_read(unsigned long reg, uint64_t *val); +int sbi_cppc_write(unsigned long reg, uint64_t val); + +const struct sbi_cppc_device *sbi_cppc_get_device(void); +void sbi_cppc_set_device(const struct sbi_cppc_device *dev); + +#endif diff --git a/lib/sbi/Kconfig b/lib/sbi/Kconfig index 7eb3273..477775e 100644 --- a/lib/sbi/Kconfig +++ b/lib/sbi/Kconfig @@ -34,6 +34,10 @@ config SBI_ECALL_DBCN bool "Debug Console extension" default y +config SBI_ECALL_CPPC + bool "CPPC extension" + default y + config SBI_ECALL_LEGACY bool "SBI v0.1 legacy extensions" default y diff --git a/lib/sbi/objects.mk b/lib/sbi/objects.mk index 770238b..7d691c6 100644 --- a/lib/sbi/objects.mk +++ b/lib/sbi/objects.mk @@ -43,6 +43,9 @@ libsbi-objs-$(CONFIG_SBI_ECALL_PMU) += sbi_ecall_pmu.o carray-sbi_ecall_exts-$(CONFIG_SBI_ECALL_DBCN) += ecall_dbcn libsbi-objs-$(CONFIG_SBI_ECALL_DBCN) += sbi_ecall_dbcn.o +carray-sbi_ecall_exts-$(CONFIG_SBI_ECALL_CPPC) += ecall_cppc +libsbi-objs-$(CONFIG_SBI_ECALL_CPPC) += sbi_ecall_cppc.o + carray-sbi_ecall_exts-$(CONFIG_SBI_ECALL_LEGACY) += ecall_legacy libsbi-objs-$(CONFIG_SBI_ECALL_LEGACY) += sbi_ecall_legacy.o @@ -74,3 +77,4 @@ libsbi-objs-y += sbi_tlb.o libsbi-objs-y += sbi_trap.o libsbi-objs-y += sbi_unpriv.o libsbi-objs-y += sbi_expected_trap.o +libsbi-objs-y += sbi_cppc.o diff --git a/lib/sbi/sbi_cppc.c b/lib/sbi/sbi_cppc.c new file mode 100644 index 0000000..b177c9b --- /dev/null +++ b/lib/sbi/sbi_cppc.c @@ -0,0 +1,124 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2023 Ventana Micro Systems Inc. + * + */ + +#include +#include + +static const struct sbi_cppc_device *cppc_dev = NULL; + +const struct sbi_cppc_device *sbi_cppc_get_device(void) +{ + return cppc_dev; +} + +void sbi_cppc_set_device(const struct sbi_cppc_device *dev) +{ + if (!dev || cppc_dev) + return; + + cppc_dev = dev; +} + +static bool sbi_cppc_is_reserved(unsigned long reg) +{ + if ((reg > SBI_CPPC_ACPI_LAST && reg < SBI_CPPC_TRANSITION_LATENCY) || + reg > SBI_CPPC_NON_ACPI_LAST) + return true; + + return false; +} + +static bool sbi_cppc_readable(unsigned long reg) +{ + /* there are no write-only cppc registers currently */ + return true; +} + +static bool sbi_cppc_writable(unsigned long reg) +{ + switch (reg) { + case SBI_CPPC_HIGHEST_PERF: + case SBI_CPPC_NOMINAL_PERF: + case SBI_CPPC_LOW_NON_LINEAR_PERF: + case SBI_CPPC_LOWEST_PERF: + case SBI_CPPC_GUARANTEED_PERF: + case SBI_CPPC_CTR_WRAP_TIME: + case SBI_CPPC_REFERENCE_CTR: + case SBI_CPPC_DELIVERED_CTR: + case SBI_CPPC_REFERENCE_PERF: + case SBI_CPPC_LOWEST_FREQ: + case SBI_CPPC_NOMINAL_FREQ: + case SBI_CPPC_TRANSITION_LATENCY: + return false; + } + + return true; +} + +int sbi_cppc_probe(unsigned long reg) +{ + int ret; + + if (!cppc_dev || !cppc_dev->cppc_probe) + return SBI_EFAIL; + + /* Check whether register is reserved */ + if (sbi_cppc_is_reserved(reg)) + return SBI_ERR_INVALID_PARAM; + + ret = cppc_dev->cppc_probe(reg); + if (ret >= 0) + return ret; + else + return SBI_ERR_FAILED; +} + +int sbi_cppc_read(unsigned long reg, uint64_t *val) +{ + if (!cppc_dev || !cppc_dev->cppc_read || !cppc_dev->cppc_probe) + return SBI_EFAIL; + + /* Check whether register is reserved */ + if (sbi_cppc_is_reserved(reg)) + return SBI_ERR_INVALID_PARAM; + + /* Check whether register is implemented */ + if (!cppc_dev->cppc_probe(reg)) + return SBI_ERR_NOT_SUPPORTED; + + /* Check whether the register is write-only */ + if (!sbi_cppc_readable(reg)) + return SBI_ERR_DENIED; + + if (!cppc_dev->cppc_read(reg, val)) + return SBI_SUCCESS; + else + return SBI_ERR_FAILED; +} + +int sbi_cppc_write(unsigned long reg, uint64_t val) +{ + if (!cppc_dev || !cppc_dev->cppc_write || !cppc_dev->cppc_probe) + return SBI_EFAIL; + + /* Check whether register is reserved */ + if (sbi_cppc_is_reserved(reg)) + return SBI_ERR_INVALID_PARAM; + + /* Check whether register is implemented */ + if (!cppc_dev->cppc_probe(reg)) + return SBI_ERR_NOT_SUPPORTED; + + /* Check whether the register is read-only */ + if (!sbi_cppc_writable(reg)) + return SBI_ERR_DENIED; + + if (!cppc_dev->cppc_write(reg, val)) + return SBI_SUCCESS; + else + return SBI_ERR_FAILED; +} diff --git a/lib/sbi/sbi_ecall_cppc.c b/lib/sbi/sbi_ecall_cppc.c new file mode 100644 index 0000000..91585f3 --- /dev/null +++ b/lib/sbi/sbi_ecall_cppc.c @@ -0,0 +1,63 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2023 Ventana Micro Systems Inc. + * + */ + +#include +#include +#include +#include +#include + +static int sbi_ecall_cppc_handler(unsigned long extid, unsigned long funcid, + const struct sbi_trap_regs *regs, + unsigned long *out_val, + struct sbi_trap_info *out_trap) +{ + int ret = 0; + uint64_t temp; + + switch (funcid) { + case SBI_EXT_CPPC_READ: + ret = sbi_cppc_read(regs->a0, &temp); + *out_val = temp; + break; + case SBI_EXT_CPPC_READ_HI: +#if __riscv_xlen == 32 + ret = sbi_cppc_read(regs->a0, &temp); + *out_val = temp >> 32; +#else + *out_val = 0; +#endif + break; + case SBI_EXT_CPPC_WRITE: + ret = sbi_cppc_write(regs->a0, regs->a1); + break; + case SBI_EXT_CPPC_PROBE: + ret = sbi_cppc_probe(regs->a0); + if (ret >= 0) { + *out_val = ret; + ret = 0; + } + break; + default: + ret = SBI_ENOTSUPP; + } + + return ret; +} + +static int sbi_ecall_cppc_probe(unsigned long extid, unsigned long *out_val) +{ + *out_val = sbi_cppc_get_device() ? 1 : 0; + return 0; +} + +struct sbi_ecall_extension ecall_cppc = { + .extid_start = SBI_EXT_CPPC, + .extid_end = SBI_EXT_CPPC, + .handle = sbi_ecall_cppc_handler, + .probe = sbi_ecall_cppc_probe, +}; From patchwork Thu Mar 23 09:03:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sunil V L X-Patchwork-Id: 1760205 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=c/tYbVJ+; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=ventanamicro.com header.i=@ventanamicro.com header.a=rsa-sha256 header.s=google header.b=L3plDklb; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Phzsj2S32z1yXw for ; Thu, 23 Mar 2023 20:03:53 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=nFOh1e3i9E7kd0s2OPFu5neNfp8o9xYIkST8baIpnCk=; b=c/tYbVJ++gO6b5 KzpP4YKmThEGreIVEYrJMXmxOvZC3jaQteaKAKHyXPhvlMwkiZcYS01uXB/ERSjEzD3toIG5/4+g/ nFABng2gbN6smfVNIBrjlppsHs7m8Ed4j8fAINX7p09SXmWBdrFjqx83YkbP0xz5ZA4Q9+zVK9jvH eEpTJrHlmDLFFVAbmvRIjtMsOiMQtScoX6QA1YjSY7yYoF4e8h7cOiP/zHqFumcG5GJpmb0oX98GS s+UFsiNnCLQIAMQTG2y/lRARwGsn2uQlHHI6Vv7OkouXpWOgw0U3owE9gJIFh37bcIntrf1KpV8SD 9ji8N8TRW9078O1tWBvA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pfGrF-001ML2-0G; Thu, 23 Mar 2023 09:03:41 +0000 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pfGrA-001MHv-2W for opensbi@lists.infradead.org; Thu, 23 Mar 2023 09:03:39 +0000 Received: by mail-pj1-x1032.google.com with SMTP id fy10-20020a17090b020a00b0023b4bcf0727so1394262pjb.0 for ; Thu, 23 Mar 2023 02:03:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1679562213; 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=v/nCFTAfDkbsXBS4R14IYPubPIi8vhCPWjuuxHlUuns=; b=L3plDklbTjaeGwzHHrUDb4UMV4djAhnZHV0YvqZRCIQw9DLNzUbBUPMTJ0lJp5Fl3q MWBOj70pJdNoHsHclGY0Opqn2+3eyfLxNd5WmcfttDMLvgG3dHom93sGcDXPx0XZxb8k ApBtG/vsrym5me0BXqf7CTuCwmVgsavJ8x4zuXXvMR971Ubb8zZPT2ehcxbREZ5DMw2X Kh7roZJEBBqZ4qAdz1eVBMIeubK55iV9NFjMnr465VLS8i3tVUfimppxxN8EC+zULq45 K5vEsv6b/6Ip0gsLSq/+hX54Obe7t0DS0xy5RjVrLr79zTrlPMHnfjZClV/gxXsbHJFU BvUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679562213; 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=v/nCFTAfDkbsXBS4R14IYPubPIi8vhCPWjuuxHlUuns=; b=3MFdb5/44eqkRRNpSwtlbYnajN9tjPwGT55PM4YT1kNll9UnaxpvhyQZIZ/CEv8mjX nxuk9awXOWjEJUJjryS3jyuz7/UqmRf4/nKa7YX3gEwe2TnlMQUSRCU6qg2zWKDXp6iQ Fe5bFVQ0eynFg2uZ2AqdVT076OJTzdDF/7ioR/NUx/SF1NLuL8gMx1p2Lz6Wpmjp69eC 8yCoFCSt+dyfsrlPeHWnQiYFZbmBoWHLxozuSgK2qmK/LiVNJln8WJPzcsuvjorYuhGg x/rbbtp/ipg+oPArLbsNdw2RBTgMRSeShkyNERZX/rd43bJ3905i6sXzYuLVmW4uRcUK GE8g== X-Gm-Message-State: AO0yUKWc5zqElobz3V8hjYsdfmwQn0nzmdpwNqFrC/I4PsVXlptS5SNo z/cmo9xEsRFhtqgFPuEJ+biE3qf6jRNwEqJgGo8= X-Google-Smtp-Source: AK7set+ax9VyOHcv5XNg4ox4l0Q9KI6gNI79AexaE1C/RznhTFavIyLK6Oz1xUsEeyFLMpeyCcf6cw== X-Received: by 2002:a05:6a20:9325:b0:d9:d7a4:9223 with SMTP id r37-20020a056a20932500b000d9d7a49223mr1996581pzh.29.1679562212774; Thu, 23 Mar 2023 02:03:32 -0700 (PDT) Received: from kerodi.Dlink ([49.206.12.197]) by smtp.gmail.com with ESMTPSA id h3-20020aa786c3000000b005a9cb8edee3sm11354715pfo.85.2023.03.23.02.03.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Mar 2023 02:03:32 -0700 (PDT) From: Sunil V L To: opensbi@lists.infradead.org Cc: Atish Patra , Anup Patel , Andrew Jones , Sunil V L Subject: [RFC PATCH v2 3/4] lib: sbi: Print the CPPC device name Date: Thu, 23 Mar 2023 14:33:19 +0530 Message-Id: <20230323090320.2489167-4-sunilvl@ventanamicro.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230323090320.2489167-1-sunilvl@ventanamicro.com> References: <20230323090320.2489167-1-sunilvl@ventanamicro.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230323_020336_816018_07C2D239 X-CRM114-Status: UNSURE ( 8.89 ) X-CRM114-Notice: Please train this message. X-Spam-Score: -0.2 (/) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: If CPPC device is registered by the platform, print its name. Signed-off-by: Sunil V L Reviewed-by: Andrew Jones --- lib/sbi/sbi_init.c | 5 +++++ 1 file changed, 5 insertions(+) Content analysis details: (-0.2 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2607:f8b0:4864:20:0:0:0:1032 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain X-BeenThere: opensbi@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "opensbi" Errors-To: opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org If CPPC device is registered by the platform, print its name. Signed-off-by: Sunil V L Reviewed-by: Andrew Jones --- lib/sbi/sbi_init.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/sbi/sbi_init.c b/lib/sbi/sbi_init.c index ffa214c..fa89320 100644 --- a/lib/sbi/sbi_init.c +++ b/lib/sbi/sbi_init.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -70,6 +71,7 @@ static void sbi_boot_print_general(struct sbi_scratch *scratch) const struct sbi_console_device *cdev; const struct sbi_system_reset_device *srdev; const struct sbi_system_suspend_device *susp_dev; + const struct sbi_cppc_device *cppc_dev; const struct sbi_platform *plat = sbi_platform_ptr(scratch); if (scratch->options & SBI_SCRATCH_NO_BOOT_PRINTS) @@ -107,6 +109,9 @@ static void sbi_boot_print_general(struct sbi_scratch *scratch) susp_dev = sbi_system_suspend_get_device(); sbi_printf("Platform Suspend Device : %s\n", (susp_dev) ? susp_dev->name : "---"); + cppc_dev = sbi_cppc_get_device(); + sbi_printf("Platform CPPC Device : %s\n", + (cppc_dev) ? cppc_dev->name : "---"); /* Firmware details */ sbi_printf("Firmware Base : 0x%lx\n", scratch->fw_start); From patchwork Thu Mar 23 09:03:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sunil V L X-Patchwork-Id: 1760206 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=QNXyJRaF; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=ventanamicro.com header.i=@ventanamicro.com header.a=rsa-sha256 header.s=google header.b=lT7jz+pl; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Phzsk541Kz1yXy for ; Thu, 23 Mar 2023 20:03:54 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=0vRjSagzmbgR3A/Qv82BP0yQhD+TCYun5kReZk0nNYg=; b=QNXyJRaFhvffKo T26esGHJGO4UA6G7wjpFknGme0CXWmer4ub98fyMUc9OhMvmp7rdgdXfUBqIPn1+FDGP9iFIm9tGs FBq3HBBm8plSKLAscO1jHzhwKK3IksWrjob2eOLqAj3wXlCtKZ6neBLpCMDI4DJRZ+xhHcd4KNW/g yAscs3urBu54X6A7HRzPPN/1U4k9NXrlMm17wkT+JHL8/VUwwtQGUIkFnQ2gSY1L5Jvokml1m44bA Flhq8DwEvChqDPVs7M7qCpTSHl5fv+E8Hu2pOGlsydyAHKDseeJwl7NJOofrxOitQjBNfbHy4WjM7 FAH9Psq65qZMtWDv/VTw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pfGrG-001MLz-2j; Thu, 23 Mar 2023 09:03:42 +0000 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pfGrA-001MIZ-2S for opensbi@lists.infradead.org; Thu, 23 Mar 2023 09:03:40 +0000 Received: by mail-pl1-x633.google.com with SMTP id k2so21688239pll.8 for ; Thu, 23 Mar 2023 02:03:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1679562215; 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=FVrUAvrlzUpLw0su4o8H0hqQQM8sdXMj4IsqAhafpOo=; b=lT7jz+pl+wVs9O9AXI849Zlq1RkiEsnV+6BRYcCltkiSdJlcOXTiX+l0HaYKSbnWYi 33vmC3aoAnuwOMgZfWvb50whghmtZHgt4irDOZS+cD7xbladMxTk2VWj5P3w+wPwoXM8 moIyqRBUU0u9GLsEjI9fttf2Nyl5NA8NbAg8jsFzNd5BWwHRV6Aeh34tedGJU7lMSms/ jgWLNDZQtc7kaUBZKObO3drb+Qh10MRy8nvpYWq52X9hWRFVcr8oVP5lgGgBb+gSxhcD 1L5gyo28vI2LfkFwk7Snu6I5iyfjPkvWObl1sjUw9VQNAqCl+DT+Kr0m2FvrrGac09QJ rgpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679562215; 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=FVrUAvrlzUpLw0su4o8H0hqQQM8sdXMj4IsqAhafpOo=; b=oEfUXf1Rc1WythaxlImWxCKpEoZMXmd732qkrGNNRNLDKXg7hX6zoqWTrAhmhY8603 qkpUTPn89jYmzUiZiJFEqAJn3qCSohlajq8CD77XFnrbbxUi0KH8gRm4yr8E2Tn70eEe Znw+ojSQo+NvLXDVgWs3qrvqRnCwnscoHhF1qKjQoNeo3WCpA+YhsGpo58O+jlYqeUjY KPMaJoxPrgzy3BwNl/vxVtmGjuIp5vIe1tPMLTDwvCb1QYgsSUiwV/0QAzwFjUpyemdA KENiKI6vL8GDavyXe+0/6kFbmzJB7FCjy0PzIbvhId7ar+2qlMA+M6546SBvnpiSZHBk d07Q== X-Gm-Message-State: AO0yUKWnZmpfdyCLHGt3Fjm/nZavIhPnSexJc81v9+wfWjCV/FeBY+Cq zasTePPanSVJZDOTTaJ+R7agNdFARPUdRONwJZY= X-Google-Smtp-Source: AK7set9Vlv1P0U0NX3+EuLD4lavT90VnREOYSjx2FeQmW7nZbI8IM5eeAVi4327KVq7si4oPLi06cA== X-Received: by 2002:a05:6a20:baa3:b0:db:8893:96ad with SMTP id fb35-20020a056a20baa300b000db889396admr2274834pzb.23.1679562214989; Thu, 23 Mar 2023 02:03:34 -0700 (PDT) Received: from kerodi.Dlink ([49.206.12.197]) by smtp.gmail.com with ESMTPSA id h3-20020aa786c3000000b005a9cb8edee3sm11354715pfo.85.2023.03.23.02.03.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Mar 2023 02:03:34 -0700 (PDT) From: Sunil V L To: opensbi@lists.infradead.org Cc: Atish Patra , Anup Patel , Andrew Jones , Sunil V L Subject: [RFC PATCH v2 4/4] NOT_FOR_MERGE: Add test code to emulate CPPC extension Date: Thu, 23 Mar 2023 14:33:20 +0530 Message-Id: <20230323090320.2489167-5-sunilvl@ventanamicro.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230323090320.2489167-1-sunilvl@ventanamicro.com> References: <20230323090320.2489167-1-sunilvl@ventanamicro.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230323_020336_798374_49279AC3 X-CRM114-Status: GOOD ( 18.66 ) X-Spam-Score: -0.2 (/) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: This is a test code to emulate the CPPC extension and it is not for merge. Signed-off-by: Sunil V L --- include/sbi/sbi_cppc.h | 2 + platform/generic/objects.mk | 1 + platform/generic/platform.c | 6 ++ platform/generic/test_cppc.c | 204 +++++++++++ [...] Content analysis details: (-0.2 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2607:f8b0:4864:20:0:0:0:633 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain X-BeenThere: opensbi@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "opensbi" Errors-To: opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org This is a test code to emulate the CPPC extension and it is not for merge. Signed-off-by: Sunil V L --- include/sbi/sbi_cppc.h | 2 + platform/generic/objects.mk | 1 + platform/generic/platform.c | 6 ++ platform/generic/test_cppc.c | 204 +++++++++++++++++++++++++++++++++++ 4 files changed, 213 insertions(+) create mode 100644 platform/generic/test_cppc.c diff --git a/include/sbi/sbi_cppc.h b/include/sbi/sbi_cppc.h index edf73f5..f62d702 100644 --- a/include/sbi/sbi_cppc.h +++ b/include/sbi/sbi_cppc.h @@ -32,4 +32,6 @@ int sbi_cppc_write(unsigned long reg, uint64_t val); const struct sbi_cppc_device *sbi_cppc_get_device(void); void sbi_cppc_set_device(const struct sbi_cppc_device *dev); +int test_cppc_init(void); + #endif diff --git a/platform/generic/objects.mk b/platform/generic/objects.mk index 136853e..d9eb959 100644 --- a/platform/generic/objects.mk +++ b/platform/generic/objects.mk @@ -20,6 +20,7 @@ platform-runcmd = qemu-system-riscv$(PLATFORM_RISCV_XLEN) -M virt -m 256M \ # Objects to build platform-objs-y += platform.o platform-objs-y += platform_override_modules.o +platform-objs-$(CONFIG_SBI_ECALL_CPPC) += test_cppc.o # Blobs to build FW_TEXT_START=0x80000000 diff --git a/platform/generic/platform.c b/platform/generic/platform.c index eeefef4..ef85b70 100644 --- a/platform/generic/platform.c +++ b/platform/generic/platform.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -166,6 +167,11 @@ static int generic_final_init(bool cold_boot) if (!cold_boot) return 0; +#ifdef CONFIG_SBI_ECALL_CPPC + if (!generic_plat) + test_cppc_init(); +#endif + fdt = fdt_get_address(); fdt_cpu_fixup(fdt); diff --git a/platform/generic/test_cppc.c b/platform/generic/test_cppc.c new file mode 100644 index 0000000..91ee187 --- /dev/null +++ b/platform/generic/test_cppc.c @@ -0,0 +1,204 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2023 Ventana Micro Systems Inc. + * + */ + +#include +#include +#include +#include +#include +#include +#include + +struct perf_channel { + unsigned int highest_perf; + unsigned int nominal_perf; + unsigned int lowest_nonlinear_perf; + unsigned int lowest_perf; + unsigned int desired_perf; + unsigned int perf_limited; + unsigned int reference_perf; + unsigned int lowest_freq; + unsigned int nominal_freq; + unsigned int transition_latency; +}; + +static unsigned long cppc_offset; + +static int sbi_cppc_test_read(unsigned long reg, uint64_t *val) +{ + struct sbi_scratch *scratch; + struct perf_channel *cppc; + unsigned long hartid; + int ret = SBI_SUCCESS; + + hartid = current_hartid(); + + scratch = sbi_hartid_to_scratch(hartid); + cppc = sbi_scratch_offset_ptr(scratch, cppc_offset); + + switch (reg) { + case SBI_CPPC_HIGHEST_PERF: + *val = cppc->highest_perf; + break; + case SBI_CPPC_NOMINAL_PERF: + *val = cppc->nominal_perf; + break; + case SBI_CPPC_LOW_NON_LINEAR_PERF: + *val = cppc->lowest_nonlinear_perf; + break; + case SBI_CPPC_LOWEST_PERF: + *val = cppc->lowest_perf; + break; + case SBI_CPPC_DESIRED_PERF: + *val = cppc->desired_perf; + break; + case SBI_CPPC_REFERENCE_CTR: + *val = sbi_timer_value(); + break; + case SBI_CPPC_DELIVERED_CTR: + /* + * Can't use CYCLE CSR properly in qemu, so just return + * TIME itself so that delta(delivered) / delta(ref) = 1 + */ + *val = sbi_timer_value(); + break; + case SBI_CPPC_PERF_LIMITED: + *val = cppc->perf_limited; + break; + case SBI_CPPC_REFERENCE_PERF: + *val = cppc->reference_perf; + break; + case SBI_CPPC_LOWEST_FREQ: + *val = cppc->lowest_freq; + break; + case SBI_CPPC_NOMINAL_FREQ: + *val = cppc->nominal_freq; + break; + case SBI_CPPC_TRANSITION_LATENCY: + *val = cppc->transition_latency; + break; + default: + return -1; + } + + return ret; +} + +static int sbi_cppc_test_write(unsigned long reg, uint64_t val) +{ + struct sbi_scratch *scratch; + struct perf_channel *cppc; + unsigned long hartid; + int ret = SBI_SUCCESS; + + hartid = current_hartid(); + + scratch = sbi_hartid_to_scratch(hartid); + cppc = sbi_scratch_offset_ptr(scratch, cppc_offset); + + switch (reg) { + case SBI_CPPC_DESIRED_PERF: + cppc->desired_perf = val; + break; + case SBI_CPPC_PERF_LIMITED: + cppc->perf_limited = val; + break; + default: + return -1; + } + + return ret; +} + +static int sbi_cppc_test_probe(unsigned long reg) +{ + switch (reg) { + case SBI_CPPC_DESIRED_PERF: + case SBI_CPPC_PERF_LIMITED: + case SBI_CPPC_HIGHEST_PERF: + case SBI_CPPC_NOMINAL_PERF: + case SBI_CPPC_LOW_NON_LINEAR_PERF: + case SBI_CPPC_LOWEST_PERF: + case SBI_CPPC_REFERENCE_PERF: + case SBI_CPPC_LOWEST_FREQ: + case SBI_CPPC_NOMINAL_FREQ: + case SBI_CPPC_TRANSITION_LATENCY: + return 32; + case SBI_CPPC_REFERENCE_CTR: + case SBI_CPPC_DELIVERED_CTR: + return 64; + case SBI_CPPC_GUARANTEED_PERF: + case SBI_CPPC_MIN_PERF: + case SBI_CPPC_MAX_PERF: + case SBI_CPPC_PERF_REDUC_TOLERANCE: + case SBI_CPPC_TIME_WINDOW: + case SBI_CPPC_CTR_WRAP_TIME: + case SBI_CPPC_ENABLE: + case SBI_CPPC_AUTO_SEL_ENABLE: + case SBI_CPPC_AUTO_ACT_WINDOW: + case SBI_CPPC_ENERGY_PERF_PREFERENCE: + return 0; + } + + return -1; +} + +static struct sbi_cppc_device sbi_system_cppc_test = { + .name = "cppc-test", + .cppc_read = sbi_cppc_test_read, + .cppc_write = sbi_cppc_test_write, + .cppc_probe = sbi_cppc_test_probe, +}; + +static void sbi_cppc_test_enable(void) +{ + sbi_cppc_set_device(&sbi_system_cppc_test); +} + +/* + * Allocate scratch space as the channel memory to emulate the SBI CPPC + * extension. + */ +int test_cppc_init() +{ + u32 i; + struct sbi_scratch *rscratch; + struct perf_channel *cppc; + + cppc_offset = sbi_scratch_alloc_offset(sizeof(*cppc)); + if (!cppc_offset) + return SBI_ENOMEM; + + /* Initialize hart state data for every hart */ + for (i = 0; i <= sbi_scratch_last_hartid(); i++) { + rscratch = sbi_hartid_to_scratch(i); + if (!rscratch) + continue; + + cppc = sbi_scratch_offset_ptr(rscratch, + cppc_offset); + if (cppc) { + sbi_memset(cppc, 0, sizeof(*cppc)); + + /* Initialize sample values */ + cppc->highest_perf = 6; + cppc->nominal_perf = 5; + cppc->lowest_nonlinear_perf = 2; + cppc->lowest_perf = 1; + cppc->desired_perf = cppc->nominal_perf; + cppc->perf_limited = 0; + cppc->reference_perf = 20; + cppc->lowest_freq = 20; + cppc->nominal_freq = 100; + cppc->transition_latency = 20000; + } + } + + sbi_cppc_test_enable(); + + return 0; +}