From nobody Fri Dec 19 15:56:33 2025 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2071.outbound.protection.outlook.com [40.107.94.71]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A4E4837147; Tue, 30 Jan 2024 03:19:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.94.71 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706584757; cv=fail; b=VFeSh9hX6GZ2tIe/IKogKZdTVwypxVoW3OCJnMGMPyy1W9M+lTYEmo+3pr/Zamop/fdv7wbTrcQZ3xSFu00n+QfE7QImE26Ef00B7GXKfC8BJ+FG6qRU5OweqjoVSo/POf8ZHfiWz5R+jC4SS5OHWvC+JdJln5NcMaeNWZOMt3Q= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706584757; c=relaxed/simple; bh=YaQEAPPkO9Wwx0LC94zx9fwxAqMQoV8ST19wXZezJuE=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=aF+Br+USF2g4OweQPaip7X5d5b0McUV1ZGdqcmqridnztP4eGjL6OA4PMmVQwoSScW0Tr7L+52DoldMSOdSN0IvEWG9IjHdb/h4tTnTsJjfHLDB3oIua1O/bsLwEekhpFYkdmpI9XwCcwfEw7/xpCFPBD3m2FM4bzhxiU9C2xB0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=VLTCJFXb; arc=fail smtp.client-ip=40.107.94.71 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="VLTCJFXb" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=d4g83Y6o4vUKkcAQEkwHcH8o4zbY2MEh4UqrR+52/pPBMSgWdNlKV+UK3ADEvQEgwM/fUmHDfYq0as78X43HIS2Vuc1rM/fRsKUsEUN5FxXxQx+KIoOTHBXq0NYu0AhGtnbeyulF1cSHLqMP9lHDmzwgDnumfTuagUqU9RT2A+YllAu+lnvhSmJTc+bqX1nDSjvRhWSOb/Bwxsfd+LSnmt8+kSVXV0Q09U1dFBXbTr6vnX41kYZ/t8l3jGUoCfpLSfeLzgXv/tb2T7J8IcY0zSnDxXfL5FAqkYw/P9nQI6URybMBcaw4deuz08uClkrwbZstG7ZxSn+ztaBoZbLwtg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=IzZ3ZTjV1uyukg6N9PGVCGyMcR/wOUzrEb+ZVP8dUvU=; b=FMRVImwHLsu/rMjUgGEslw/ksQHD01GTVdfsWae3UjSOjlv6ItcaShfrNw0hWXXPP5rUTZ0dT4d6OF3WjqVU2FLD7pT4PgigsSaZQyzSIGobIhA8iE/7aEth3KVAvpKCe+cNT45opWV7cC4iXpo7yGH7kwM2d9cbCrgbt6ne4/GdjMIPsWJP4XqxfsnbszX+sAzZWl2OvEYfvFxq4JpeJC8IkcqOrBbmYBmhBnOIYqdaZCPZccpzCtTQEvc3JefdRCddwf7VpK0+qWCx3JmToocxYSbFA4WTqgSzgyCKp2wCsHHNfjEUoKiCxy0CbEV/kseDGbaswbNAQOa0zf6cNA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=intel.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IzZ3ZTjV1uyukg6N9PGVCGyMcR/wOUzrEb+ZVP8dUvU=; b=VLTCJFXbJaprTebmXOD5w9SZtGqwLdoqIrX/c2ICWc7anFA3MVSziyf4dtbVtKYVFeVPqDAzLgW+6mOvIgNDOgNA5ll9A08qp+uwdOJARQHok2yCBKcuBiT771mgdhZDYmYA9KOQw2SXhbhp8juv5Q+e7hplNJ19+HSurrO4LsI= Received: from DS7PR05CA0002.namprd05.prod.outlook.com (2603:10b6:5:3b9::7) by CO6PR12MB5476.namprd12.prod.outlook.com (2603:10b6:303:138::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7228.34; Tue, 30 Jan 2024 03:19:11 +0000 Received: from CY4PEPF0000E9D9.namprd05.prod.outlook.com (2603:10b6:5:3b9:cafe::91) by DS7PR05CA0002.outlook.office365.com (2603:10b6:5:3b9::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7249.22 via Frontend Transport; Tue, 30 Jan 2024 03:19:10 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by CY4PEPF0000E9D9.mail.protection.outlook.com (10.167.241.77) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.7249.19 via Frontend Transport; Tue, 30 Jan 2024 03:19:09 +0000 Received: from pyuan-Chachani-VN.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.34; Mon, 29 Jan 2024 21:19:00 -0600 From: Perry Yuan To: , , , , , CC: , , , , , Subject: [PATCH 1/8] tools/power x86_energy_perf_policy: add info show support for AMD Pstate EPP driver Date: Tue, 30 Jan 2024 11:18:29 +0800 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000E9D9:EE_|CO6PR12MB5476:EE_ X-MS-Office365-Filtering-Correlation-Id: 185b6337-b2c9-424f-3cee-08dc214239ac X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: sesOP7/68zhrcQTYXWHEh40COfCiVbHaOujuKpQQpFma3GvzSuoMWO6gXwOzPPtTLjJzVxquGjirFReP/ampdx7GOSrB3iPbNHxQueFHI3p5aTIbDZTKXPF07rhxX39DHuC4uxZMlGMCgcHAIAari4nX4fkojoGcc4bsVO/IPsv2wO2wQjeyJAKT/1jU+VwYSUCt3RmGvpNOQHbH9uG3CCD+HWrCql/bmAHYT3MTBSuC4RqRQjH2rUehSK3xfx3VxoXUFEaqjCKu2ZBara9yldaWuzxLdEscfABWreg07uhYxYMohv2OOjcA3fVAr8vzIQwlMe1uIs3FnFYruj85G6LxfdPWWm87YvKeEVdvRN+Dz6yc7VrT7B7GPRcDgCw5Ww21UbVz75ke1T5IZ05BjewKThEH0jIbBQOUuHb4GeOZdYC9H6j0v4MhbONfo+ciCRFnPm9nz0bydm0+VJzqzSuAcLyxe1HuOHdHyZhccIutkdU+dtNqrYnNIOlTGzR+9i4jXwpubXXcGJLizWH1uzJveo6YBbXoEtHhb/Up5d0yeS5wzFOTLInevFf157/tDWUAIUro2+tqimbKH0sd6b+wR6mZ/FHYjhg365QbXXc6szVk8JOFgoVRCb8JIGCUmNpPthEmhIvcSEeqpEY7F3ctHFx6T3xfVwTZpj5UXcLpyyBwz6Oy5wqL6LrkcVBSRNhhOhKJI88innAlt6gmHwYenXJxoKbtnvbyl/CGP6V9g+RuygR/BztCvy/R6l0Z7rAC1OnXwz7nWVMb+qDPNQ== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230031)(4636009)(396003)(136003)(39860400002)(376002)(346002)(230922051799003)(64100799003)(82310400011)(1800799012)(451199024)(186009)(40470700004)(36840700001)(46966006)(40480700001)(40460700003)(47076005)(83380400001)(86362001)(356005)(36756003)(81166007)(44832011)(8676002)(36860700001)(2616005)(16526019)(26005)(7696005)(336012)(426003)(478600001)(6666004)(30864003)(70586007)(41300700001)(70206006)(6636002)(110136005)(316002)(54906003)(4326008)(5660300002)(82740400003)(8936002)(2906002)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jan 2024 03:19:09.7821 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 185b6337-b2c9-424f-3cee-08dc214239ac X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000E9D9.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO6PR12MB5476 Content-Type: text/plain; charset="utf-8" From: Perry Yuan With the amd pstate epp driver implemented, the x86_energy_perf_policy will need to implemented the utility support to display hardware energy and performance policy hint information on the AMD processors. Signed-off-by: Perry Yuan --- .../x86_energy_perf_policy | Bin 0 -> 50808 bytes .../x86_energy_perf_policy.c | 211 ++++++++++++++---- 2 files changed, 167 insertions(+), 44 deletions(-) create mode 100755 tools/power/x86/x86_energy_perf_policy/x86_energy_perf_= policy diff --git a/tools/power/x86/x86_energy_perf_policy/x86_energy_perf_policy = b/tools/power/x86/x86_energy_perf_policy/x86_energy_perf_policy new file mode 100755 index 0000000000000000000000000000000000000000..cb52f00c794f3420dfe832fed92= 240a52c67c1ee GIT binary patch literal 50808 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

-9k?=3DYdZ>u*36`Ed!07wy^ z%}^LHEZSk@L0BDi7Jr!*Q?zDVbkr2Q4Q6A($J2z_5ihl&H9YKvt`yS-=3DB+rEkaB!$n*HuoND=3DB-+MwlVW#w&?a-d01PJK%t2QC6H^{+92Rs|ZH zYO^u*b1eJZ@@!fWGjs^oAm!AqX+aY_^?P}ZHr+EcQE;Ko>uGWmfylMteQY_j=3D#X-d z&8f!=3DpI8R(hm&&ro(>dgB?|0TwywzWG>EllLoK*zCC-B{LOF$&M^pF`JeYBE#3zYf zNYhMjTl?Q$bUuV`*|0svt_rhW;V6^f<+)vV_r9oEWHZsaDz)}w~)J2V6JC~!S+PNI9eRKbREa>M7hT1tF zEqz$%ljuojX8H#KBe^vGl8gdfGW(RY^H03=3Db^o~^6-Ihl&}nH<>zH7Gofmd#>90{T z(r=3Dl_>$OzF<51e8FiMbSvVRnTjx@w@0msnKcaQzm*@>|1K-8L?kOv~+27yo8^< zK*reqxRty{OH(yOk($Tfi+~fouBJADDALX6h_Xn`?Y{!JkzRXFt)(APrQtHSe+YF( z`b{B@tfjOsW4tu~(O}1svEom-nf`pfn;Zj|8DA@F>4(6v;ZLL2&I4@vH|f6wE%~lS zuRXutEa*>*{!{#*OKVrt<0F6(ibk)UtLuJ%u<`vnlm0Y%EggY+Bfb6{Y6~Nm=3D=3D~bT zOEwme9}8mQrL`Xv`%?`Mam2L$3;j8w{ah1Yjs6M~oMffTn3|ek^_xZe1wv8uoa`d} tY5msXFSZ4B*%_hu*eCk&s>y$}b~RjbZ>{edjM4|5<)w>E1g4_&e*mc8>jVG* literal 0 HcmV?d00001 diff --git a/tools/power/x86/x86_energy_perf_policy/x86_energy_perf_policy.= c b/tools/power/x86/x86_energy_perf_policy/x86_energy_perf_policy.c index 5fd9e594079c..5daf1c2bb601 100644 --- a/tools/power/x86/x86_energy_perf_policy/x86_energy_perf_policy.c +++ b/tools/power/x86/x86_energy_perf_policy/x86_energy_perf_policy.c @@ -76,6 +76,8 @@ unsigned long long pkg_selected_set; cpu_set_t *cpu_present_set; cpu_set_t *cpu_selected_set; int genuine_intel; +unsigned int authentic_amd; +unsigned int max_level; =20 size_t cpu_setsize; =20 @@ -724,6 +726,53 @@ int put_msr(int cpu, int offset, unsigned long long ne= w_msr) return 0; } =20 +static int amd_put_msr(int cpu, off_t offset, unsigned long msr) +{ + ssize_t retval; + int fd; + char pathname[32]; + + sprintf(pathname, "/dev/cpu/%d/msr", cpu); + fd =3D open(pathname, O_RDWR); + if (fd < 0) { + err(-EACCES, "%s open failed, try chown or chmod +r /dev/cpu/*/msr, or r= un as root", pathname); + goto out; + } + retval =3D pwrite(fd, &msr, sizeof(msr), offset); + if (retval !=3D sizeof(msr)) + err(-EFAULT, "cpu%d: msr offset 0x%lx write failed ret =3D %ld fd =3D %d= ", cpu, (unsigned long)offset, retval, fd); + + if (debug > 1) + fprintf(stderr, "amd_put_msr(cpu%d, 0x%lx, 0x%lX)\n", cpu, offset, msr); + + close(fd); + +out: + return (retval =3D=3D sizeof(msr)) ? 0 : -1;; +} + + +static int amd_get_msr(int cpu, off_t offset, unsigned long *msr) +{ + ssize_t retval; + char pathname[32]; + int fd; + + sprintf(pathname, "/dev/cpu/%d/msr", cpu); + fd =3D open(pathname, O_RDONLY); + if (fd < 0) { + err(-EACCES, "%s open failed, try chown or chmod +r /dev/cpu/*/msr, or r= un as root", pathname); + goto out; + } + retval =3D pread(fd, msr, sizeof(*msr), offset); + if (retval !=3D sizeof *msr) + err(-EFAULT, "cpu%d: msr offset 0x%llx read failed", cpu, (unsigned long= long)offset); + + close(fd); +out: + return (retval =3D=3D sizeof *msr) ? 0 : -1;; +} + static unsigned int read_sysfs(const char *path, char *buf, size_t buflen) { ssize_t numread; @@ -777,13 +826,21 @@ void print_hwp_cap(int cpu, struct msr_hwp_cap *cap, = char *str) void read_hwp_cap(int cpu, struct msr_hwp_cap *cap, unsigned int msr_offse= t) { unsigned long long msr; + int ret; =20 - get_msr(cpu, msr_offset, &msr); - - cap->highest =3D msr_perf_2_ratio(HWP_HIGHEST_PERF(msr)); - cap->guaranteed =3D msr_perf_2_ratio(HWP_GUARANTEED_PERF(msr)); - cap->efficient =3D msr_perf_2_ratio(HWP_MOSTEFFICIENT_PERF(msr)); - cap->lowest =3D msr_perf_2_ratio(HWP_LOWEST_PERF(msr)); + if (genuine_intel) { + get_msr(cpu, msr_offset, &msr); + cap->highest =3D msr_perf_2_ratio(HWP_HIGHEST_PERF(msr)); + cap->guaranteed =3D msr_perf_2_ratio(HWP_GUARANTEED_PERF(msr)); + cap->efficient =3D msr_perf_2_ratio(HWP_MOSTEFFICIENT_PERF(msr)); + cap->lowest =3D msr_perf_2_ratio(HWP_LOWEST_PERF(msr)); + } else if (authentic_amd) { + ret =3D amd_get_msr(cpu, msr_offset, (unsigned long *)(&msr)); + if (ret < 0) + errx(-1, "failed to get msr with return %d", ret); + cap->highest =3D msr_perf_2_ratio(AMD_CPPC_HIGHEST_PERF(msr)); + cap->lowest =3D msr_perf_2_ratio(AMD_CPPC_LOWEST_PERF(msr)); + } } =20 void print_hwp_request(int cpu, struct msr_hwp_request *h, char *str) @@ -812,15 +869,27 @@ void print_hwp_request_pkg(int pkg, struct msr_hwp_re= quest *h, char *str) void read_hwp_request(int cpu, struct msr_hwp_request *hwp_req, unsigned i= nt msr_offset) { unsigned long long msr; + int ret; =20 - get_msr(cpu, msr_offset, &msr); - - hwp_req->hwp_min =3D msr_perf_2_ratio((((msr) >> 0) & 0xff)); - hwp_req->hwp_max =3D msr_perf_2_ratio((((msr) >> 8) & 0xff)); - hwp_req->hwp_desired =3D msr_perf_2_ratio((((msr) >> 16) & 0xff)); - hwp_req->hwp_epp =3D (((msr) >> 24) & 0xff); - hwp_req->hwp_window =3D (((msr) >> 32) & 0x3ff); - hwp_req->hwp_use_pkg =3D (((msr) >> 42) & 0x1); + if (genuine_intel) { + get_msr(cpu, msr_offset, &msr); + + hwp_req->hwp_min =3D msr_perf_2_ratio((((msr) >> 0) & 0xff)); + hwp_req->hwp_max =3D msr_perf_2_ratio((((msr) >> 8) & 0xff)); + hwp_req->hwp_desired =3D msr_perf_2_ratio((((msr) >> 16) & 0xff)); + hwp_req->hwp_epp =3D (((msr) >> 24) & 0xff); + hwp_req->hwp_window =3D (((msr) >> 32) & 0x3ff); + hwp_req->hwp_use_pkg =3D (((msr) >> 42) & 0x1); + } else if (authentic_amd) { + ret =3D amd_get_msr(cpu, msr_offset, (unsigned long *)(&msr)); + if (ret < 0) + errx(-1, "failed to get msr with return %d", ret); + hwp_req->hwp_min =3D msr_perf_2_ratio((((msr) >> 8) & 0xff)); + hwp_req->hwp_max =3D msr_perf_2_ratio((((msr) >> 0) & 0xff)); + + hwp_req->hwp_desired =3D msr_perf_2_ratio((((msr) >> 16) & 0xff)); + hwp_req->hwp_epp =3D (((msr) >> 24) & 0xff); + } } =20 void write_hwp_request(int cpu, struct msr_hwp_request *hwp_req, unsigned = int msr_offset) @@ -895,18 +964,28 @@ int print_cpu_msrs(int cpu) struct msr_hwp_cap cap; int epb; =20 - epb =3D get_epb(cpu); - if (epb >=3D 0) - printf("cpu%d: EPB %u\n", cpu, (unsigned int) epb); + if (genuine_intel) { + epb =3D get_epb(cpu); + if (epb >=3D 0) + printf("cpu%d: EPB %u\n", cpu, (unsigned int) epb); + } =20 if (!has_hwp) return 0; =20 - read_hwp_request(cpu, &req, MSR_HWP_REQUEST); - print_hwp_request(cpu, &req, ""); + if (genuine_intel) { + read_hwp_request(cpu, &req, MSR_HWP_REQUEST); + print_hwp_request(cpu, &req, ""); =20 - read_hwp_cap(cpu, &cap, MSR_HWP_CAPABILITIES); - print_hwp_cap(cpu, &cap, ""); + read_hwp_cap(cpu, &cap, MSR_HWP_CAPABILITIES); + print_hwp_cap(cpu, &cap, ""); + } else if (authentic_amd) { + read_hwp_request(cpu, &req, MSR_AMD_CPPC_REQ);//MSR_HWP_REQUEST + print_hwp_request(cpu, &req, ""); + + read_hwp_cap(cpu, &cap, MSR_AMD_CPPC_CAP1);//MSR_HWP_CAPABILITIES + print_hwp_cap(cpu, &cap, ""); + } =20 return 0; } @@ -1330,12 +1409,19 @@ void init_data_structures(void) void verify_hwp_is_enabled(void) { unsigned long long msr; + int ret; =20 if (!has_hwp) /* set in early_cpuid() */ return; =20 /* MSR_PM_ENABLE[1] =3D=3D 1 if HWP is enabled and MSRs visible */ - get_msr(base_cpu, MSR_PM_ENABLE, &msr); + if (genuine_intel) + get_msr(base_cpu, MSR_PM_ENABLE, &msr); + else if (authentic_amd) { + ret =3D amd_get_msr(base_cpu, MSR_AMD_CPPC_ENABLE, (unsigned long *)(&ms= r)); + if (ret < 0) + errx(-1, "failed to get msr with return %d", ret); + } if ((msr & 1) =3D=3D 0) { fprintf(stderr, "HWP can be enabled using '--hwp-enable'\n"); has_hwp =3D 0; @@ -1398,6 +1484,17 @@ static void get_cpuid_or_exit(unsigned int leaf, errx(1, "Processor not supported\n"); } =20 +static void amd_get_cpuid_or_exit(unsigned int leaf, + unsigned int *eax, unsigned int *ebx, + unsigned int *ecx, unsigned int *edx) +{ + unsigned int leaf_index; + + leaf_index =3D leaf | 0x80000000; + if (!__get_cpuid(leaf_index, eax, ebx, ecx, edx)) + errx(1, "Processor not supported\n"); +} + /* * early_cpuid() * initialize turbo_is_enabled, has_hwp, has_epb @@ -1408,24 +1505,39 @@ void early_cpuid(void) unsigned int eax, ebx, ecx, edx; unsigned int fms, family, model; =20 - get_cpuid_or_exit(1, &fms, &ebx, &ecx, &edx); - family =3D (fms >> 8) & 0xf; - model =3D (fms >> 4) & 0xf; - if (family =3D=3D 6 || family =3D=3D 0xf) - model +=3D ((fms >> 16) & 0xf) << 4; + eax =3D ebx =3D ecx =3D edx =3D 0; + __cpuid(0, max_level, ebx, ecx, edx); + if (ebx =3D=3D 0x756e6547 && ecx =3D=3D 0x6c65746e && edx =3D=3D 0x49656e= 69) + genuine_intel =3D 1; + else if (ebx =3D=3D 0x68747541 && ecx =3D=3D 0x444d4163 && edx =3D=3D 0x6= 9746e65) + authentic_amd =3D 1; =20 - if (model =3D=3D 0x4F) { - unsigned long long msr; + if (genuine_intel) { + get_cpuid_or_exit(1, &fms, &ebx, &ecx, &edx); + family =3D (fms >> 8) & 0xf; + model =3D (fms >> 4) & 0xf; + if (family =3D=3D 6 || family =3D=3D 0xf) + model +=3D ((fms >> 16) & 0xf) << 4; =20 - get_msr(base_cpu, MSR_TURBO_RATIO_LIMIT, &msr); + if (model =3D=3D 0x4F) { + unsigned long long msr; =20 - bdx_highest_ratio =3D msr & 0xFF; - } + get_msr(base_cpu, MSR_TURBO_RATIO_LIMIT, &msr); + + bdx_highest_ratio =3D msr & 0xFF; + } =20 - get_cpuid_or_exit(0x6, &eax, &ebx, &ecx, &edx); - turbo_is_enabled =3D (eax >> 1) & 1; - has_hwp =3D (eax >> 7) & 1; - has_epb =3D (ecx >> 3) & 1; + get_cpuid_or_exit(0x6, &eax, &ebx, &ecx, &edx); + turbo_is_enabled =3D (eax >> 1) & 1; + has_hwp =3D (eax >> 7) & 1; + has_epb =3D (ecx >> 3) & 1; + } else if (authentic_amd) { + /* AMD Processors CPUID info */ + amd_get_cpuid_or_exit(0x8, &eax, &ebx, &ecx, &edx); + turbo_is_enabled =3D (eax >> 1) & 1; + has_hwp =3D (ebx >> 27) & 1; + has_hwp_epp =3D (ebx >> 27) & 1; + } } =20 /* @@ -1444,6 +1556,8 @@ void parse_cpuid(void) =20 if (ebx =3D=3D 0x756e6547 && edx =3D=3D 0x49656e69 && ecx =3D=3D 0x6c6574= 6e) genuine_intel =3D 1; + else if (ebx =3D=3D 0x68747541 && ecx =3D=3D 0x444d4163 && edx =3D=3D 0x6= 9746e65) + authentic_amd =3D 1; =20 if (debug) fprintf(stderr, "CPUID(0): %.4s%.4s%.4s ", @@ -1456,6 +1570,11 @@ void parse_cpuid(void) if (family =3D=3D 6 || family =3D=3D 0xf) model +=3D ((fms >> 16) & 0xf) << 4; =20 + if (authentic_amd) { + if (family =3D=3D 0xf) + family +=3D (fms >> 20) & 0xff; + } + if (debug) { fprintf(stderr, "%d CPUID levels; family:model:stepping 0x%x:%x:%x (%d:%= d:%d)\n", max_level, family, model, stepping, family, model, stepping); @@ -1473,14 +1592,18 @@ void parse_cpuid(void) if (!(edx & (1 << 5))) errx(1, "CPUID: no MSR"); =20 - - get_cpuid_or_exit(0x6, &eax, &ebx, &ecx, &edx); - /* turbo_is_enabled already set */ - /* has_hwp already set */ - has_hwp_notify =3D eax & (1 << 8); - has_hwp_activity_window =3D eax & (1 << 9); - has_hwp_epp =3D eax & (1 << 10); - has_hwp_request_pkg =3D eax & (1 << 11); + if (genuine_intel) { + get_cpuid_or_exit(0x6, &eax, &ebx, &ecx, &edx); + /* turbo_is_enabled already set */ + /* has_hwp already set */ + has_hwp_notify =3D eax & (1 << 8); + has_hwp_activity_window =3D eax & (1 << 9); + has_hwp_epp =3D eax & (1 << 10); + has_hwp_request_pkg =3D eax & (1 << 11); + } else if (authentic_amd) { + amd_get_cpuid_or_exit(0x8, &eax, &ebx, &ecx, &edx); + has_hwp_epp =3D (ebx >> 27) & 1; + } =20 if (!has_hwp_request_pkg && update_hwp_use_pkg) errx(1, "--hwp-use-pkg is not available on this hardware"); --=20 2.34.1