Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp376348ybl; Thu, 15 Aug 2019 19:34:23 -0700 (PDT) X-Google-Smtp-Source: APXvYqyeX5qlGkcZSrTjJMmadus1loqMVi9JT6Fu8kmi8AU35E4Di5xBC7Zz5fwzKB8VKVMId4Md X-Received: by 2002:a17:90a:b28d:: with SMTP id c13mr4908256pjr.25.1565922862951; Thu, 15 Aug 2019 19:34:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1565922862; cv=none; d=google.com; s=arc-20160816; b=SiB7zLPWyQj8Te0M9AaSKBrEej4dcGZJ+4AzZ9BMytp2mR9WOErH6zLi4ipG/zmUjU VAV491qtqvcU13eoG7MXT0wsF2eTkV2qQ5Cf6eYfGH/EAhhtRPojd2vGZDPLWy0uNCGc ROHYLxmUASGCn9cWkq8UDWOj37zUojUS7D73jytmZosGktQy9T2QLWFgqvjzhxmQrUeT w41DexmIyFKUApJsRm7//QZpcnItmznNrNYMymDAvboKnsw6hlUvML+2X7kmRnwzGsFm ajWZcoxCCaZHQQRbOTeqr4sRzs66BlTMYbo2BwFiHWL3QO3MjXMFGBbVxCpupIHW6swv ndUA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=6+YaeR4ggOLyXLK/2yHz/uLqm5d2spjMsrBDjYIfDPs=; b=LAM9H7HxQYajRggz3zDWezIASNFEKLskPMWO9ChLSUeItFDH+pj3PTYAMe2Vc7cIdv 46W66aTTAXc1/40vByhf4vLOwcjs3e7Z3UVR7OPLMIWm9QkbFDtISHu/BIMyfVOw/qAo habc0eAnMEak0a4rzheHbOsAIe1qgX1jQOQYce015hFaYGMsjWqh1mOZ0DDWHN1xhZX1 RvV9RdkqYAeZBtuX4G3/3ebJb5ElYzh+YInD65HHtyROjXpWE3a2hBT56YE/xSMK6WWW F8cPg5DY/VT5Ot68zYxsO870nggWFIf9zddFgz3bAyNMUK4N+oDq+6sHgKrFnqRWI8aY 4Y4Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y22si2034495plp.59.2019.08.15.19.34.07; Thu, 15 Aug 2019 19:34:22 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726751AbfHPCdW (ORCPT + 99 others); Thu, 15 Aug 2019 22:33:22 -0400 Received: from mga09.intel.com ([134.134.136.24]:24701 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726712AbfHPCdV (ORCPT ); Thu, 15 Aug 2019 22:33:21 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 15 Aug 2019 19:33:20 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,391,1559545200"; d="scan'208";a="194894541" Received: from genxtest-ykzhao.sh.intel.com ([10.239.143.71]) by fmsmga001.fm.intel.com with ESMTP; 15 Aug 2019 19:33:19 -0700 From: Zhao Yakui To: x86@kernel.org, linux-kernel@vger.kernel.org, devel@driverdev.osuosl.org Cc: Zhao Yakui , Jason Chen CJ , Victor Sun Subject: [RFC PATCH 13/15] drivers/acrn: add service to obtain Power data transition Date: Fri, 16 Aug 2019 10:25:54 +0800 Message-Id: <1565922356-4488-14-git-send-email-yakui.zhao@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1565922356-4488-1-git-send-email-yakui.zhao@intel.com> References: <1565922356-4488-1-git-send-email-yakui.zhao@intel.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The px/cx data is critical to support the power transition. DM will get these data to build DSDT for UOS. With this DSDT, UOS would have the capability on power control if acpi-cpufreq/idle driver is enabled in kernel. Add the PM ioctl that is used to obtain the info of power state so that the DM can construct the DSDT with Power frequence/C-state idle for guest system. Co-developed-by: Jason Chen CJ Signed-off-by: Jason Chen CJ Co-developed-by: Victor Sun Signed-off-by: Victor Sun Signed-off-by: Zhao Yakui --- drivers/staging/acrn/acrn_dev.c | 75 +++++++++++++++++++++++++++++++ include/uapi/linux/acrn/acrn_ioctl_defs.h | 36 +++++++++++++++ 2 files changed, 111 insertions(+) diff --git a/drivers/staging/acrn/acrn_dev.c b/drivers/staging/acrn/acrn_dev.c index 93f45e3..ef0ec50 100644 --- a/drivers/staging/acrn/acrn_dev.c +++ b/drivers/staging/acrn/acrn_dev.c @@ -432,6 +432,81 @@ long acrn_dev_ioctl(struct file *filep, break; } + case IC_PM_GET_CPU_STATE: { + u64 cmd; + + if (copy_from_user(&cmd, (void *)ioctl_param, sizeof(cmd))) + return -EFAULT; + + switch (cmd & PMCMD_TYPE_MASK) { + case PMCMD_GET_PX_CNT: + case PMCMD_GET_CX_CNT: { + u64 *pm_info; + + pm_info = kmalloc(sizeof(u64), GFP_KERNEL); + if (!pm_info) + return -ENOMEM; + + ret = hcall_get_cpu_state(cmd, virt_to_phys(pm_info)); + if (ret < 0) { + kfree(pm_info); + return -EFAULT; + } + + if (copy_to_user((void *)ioctl_param, + pm_info, sizeof(u64))) + ret = -EFAULT; + + kfree(pm_info); + break; + } + case PMCMD_GET_PX_DATA: { + struct cpu_px_data *px_data; + + px_data = kmalloc(sizeof(*px_data), GFP_KERNEL); + if (!px_data) + return -ENOMEM; + + ret = hcall_get_cpu_state(cmd, virt_to_phys(px_data)); + if (ret < 0) { + kfree(px_data); + return -EFAULT; + } + + if (copy_to_user((void *)ioctl_param, + px_data, sizeof(*px_data))) + ret = -EFAULT; + + kfree(px_data); + break; + } + case PMCMD_GET_CX_DATA: { + struct cpu_cx_data *cx_data; + + cx_data = kmalloc(sizeof(*cx_data), GFP_KERNEL); + if (!cx_data) + return -ENOMEM; + + ret = hcall_get_cpu_state(cmd, virt_to_phys(cx_data)); + if (ret < 0) { + kfree(cx_data); + return -EFAULT; + } + + if (copy_to_user((void *)ioctl_param, + cx_data, sizeof(*cx_data))) + ret = -EFAULT; + kfree(cx_data); + break; + } + default: + ret = -EFAULT; + break; + } + + break; + } + default: pr_warn("Unknown IOCTL 0x%x\n", ioctl_num); ret = -EFAULT; diff --git a/include/uapi/linux/acrn/acrn_ioctl_defs.h b/include/uapi/linux/acrn/acrn_ioctl_defs.h index c3c4f98..c762bd2 100644 --- a/include/uapi/linux/acrn/acrn_ioctl_defs.h +++ b/include/uapi/linux/acrn/acrn_ioctl_defs.h @@ -234,6 +234,39 @@ struct ioreq_notify { uint32_t vcpu; }; +struct acrn_generic_address { + uint8_t space_id; + uint8_t bit_width; + uint8_t bit_offset; + uint8_t access_size; + uint64_t address; +}; + +struct cpu_cx_data { + struct acrn_generic_address cx_reg; + uint8_t type; + uint32_t latency; + uint64_t power; +}; + +struct cpu_px_data { + uint64_t core_frequency; /* megahertz */ + uint64_t power; /* milliWatts */ + uint64_t transition_latency; /* microseconds */ + uint64_t bus_master_latency; /* microseconds */ + uint64_t control; /* control value */ + uint64_t status; /* success indicator */ +}; + +#define PMCMD_TYPE_MASK 0x000000ff + +enum pm_cmd_type { + PMCMD_GET_PX_CNT, + PMCMD_GET_PX_DATA, + PMCMD_GET_CX_CNT, + PMCMD_GET_CX_DATA, +}; + /* * Common IOCTL ID definition for DM */ @@ -281,4 +314,7 @@ struct ioreq_notify { #define IC_SET_PTDEV_INTR_INFO _IC_ID(IC_ID, IC_ID_PCI_BASE + 0x03) #define IC_RESET_PTDEV_INTR_INFO _IC_ID(IC_ID, IC_ID_PCI_BASE + 0x04) +/* Power management */ +#define IC_ID_PM_BASE 0x60UL +#define IC_PM_GET_CPU_STATE _IC_ID(IC_ID, IC_ID_PM_BASE + 0x00) #endif /* __ACRN_IOCTL_DEFS_H__ */ -- 2.7.4