diff --git a/libipt/internal/include/pt_cpu.h b/libipt/internal/include/pt_cpu.h
index b106a3a..1590fa3 100644
--- a/libipt/internal/include/pt_cpu.h
+++ b/libipt/internal/include/pt_cpu.h
@@ -41,14 +41,4 @@
  */
 extern int pt_cpu_parse(struct pt_cpu *cpu, const char *s);
 
-/* Get the cpu we're running on.
- *
- * Reads the family/model/stepping of the processor on which this function
- * is executed and stores the value in @cpu.
- *
- * Returns zero on success, a negative error code otherwise.
- * Returns -pte_invalid if @cpu is NULL.
- */
-extern int pt_cpu_read(struct pt_cpu *cpu);
-
 #endif /* PT_CPU_H */
diff --git a/libipt/internal/include/pt_cpuid.h b/libipt/internal/include/pt_cpuid.h
deleted file mode 100644
index 8b331fb..0000000
--- a/libipt/internal/include/pt_cpuid.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2013-2021, Intel Corporation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- *  * Redistributions of source code must retain the above copyright notice,
- *    this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- *  * Neither the name of Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef PT_CPUID_H
-#define PT_CPUID_H
-
-#include <inttypes.h>
-
-/* Execute cpuid with @leaf set in the eax register.
- * The result is stored in @eax, @ebx, @ecx and @edx.
- */
-extern void pt_cpuid(uint32_t leaf, uint32_t *eax, uint32_t *ebx,
-		     uint32_t *ecx, uint32_t *edx);
-
-#endif /* PT_CPUID_H */
diff --git a/libipt/src/posix/pt_cpuid.c b/libipt/src/posix/pt_cpuid.c
deleted file mode 100644
index 6456e61..0000000
--- a/libipt/src/posix/pt_cpuid.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2013-2021, Intel Corporation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- *  * Redistributions of source code must retain the above copyright notice,
- *    this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- *  * Neither the name of Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "pt_cpuid.h"
-
-#include <cpuid.h>
-
-extern void pt_cpuid(uint32_t leaf, uint32_t *eax, uint32_t *ebx,
-		     uint32_t *ecx, uint32_t *edx)
-{
-	__get_cpuid(leaf, eax, ebx, ecx, edx);
-}
diff --git a/libipt/src/pt_cpu.c b/libipt/src/pt_cpu.c
index ea44430..543b8dc 100644
--- a/libipt/src/pt_cpu.c
+++ b/libipt/src/pt_cpu.c
@@ -27,7 +27,6 @@
  */
 
 #include "pt_cpu.h"
-#include "pt_cpuid.h"
 
 #include "intel-pt.h"
 
@@ -35,60 +34,6 @@
 #include <stdlib.h>
 
 
-static const char * const cpu_vendors[] = {
-	"",
-	"GenuineIntel"
-};
-
-enum {
-	pt_cpuid_vendor_size = 12
-};
-
-union cpu_vendor {
-	/* The raw data returned from cpuid. */
-	struct {
-		uint32_t ebx;
-		uint32_t edx;
-		uint32_t ecx;
-	} cpuid;
-
-	/* The resulting vendor string. */
-	char vendor_string[pt_cpuid_vendor_size];
-};
-
-static enum pt_cpu_vendor cpu_vendor(void)
-{
-	union cpu_vendor vendor;
-	uint32_t eax;
-	size_t i;
-
-	memset(&vendor, 0, sizeof(vendor));
-	eax = 0;
-
-	pt_cpuid(0u, &eax, &vendor.cpuid.ebx, &vendor.cpuid.ecx,
-		 &vendor.cpuid.edx);
-
-	for (i = 0; i < sizeof(cpu_vendors)/sizeof(*cpu_vendors); i++)
-		if (strncmp(vendor.vendor_string,
-			    cpu_vendors[i], pt_cpuid_vendor_size) == 0)
-			return (enum pt_cpu_vendor) i;
-
-	return pcv_unknown;
-}
-
-static uint32_t cpu_info(void)
-{
-	uint32_t eax, ebx, ecx, edx;
-
-	eax = 0;
-	ebx = 0;
-	ecx = 0;
-	edx = 0;
-	pt_cpuid(1u, &eax, &ebx, &ecx, &edx);
-
-	return eax;
-}
-
 int pt_cpu_parse(struct pt_cpu *cpu, const char *s)
 {
 	const char sep = '/';
@@ -137,28 +82,3 @@
 
 	return 0;
 }
-
-int pt_cpu_read(struct pt_cpu *cpu)
-{
-	uint32_t info;
-	uint16_t family;
-
-	if (!cpu)
-		return -pte_invalid;
-
-	cpu->vendor = cpu_vendor();
-
-	info = cpu_info();
-
-	cpu->family = family = (info>>8) & 0xf;
-	if (family == 0xf)
-		cpu->family += (info>>20) & 0xf;
-
-	cpu->model = (info>>4) & 0xf;
-	if (family == 0x6 || family == 0xf)
-		cpu->model += (info>>12) & 0xf0;
-
-	cpu->stepping = (info>>0) & 0xf;
-
-	return 0;
-}
diff --git a/libipt/src/windows/pt_cpuid.c b/libipt/src/windows/pt_cpuid.c
deleted file mode 100644
index f34ab1f..0000000
--- a/libipt/src/windows/pt_cpuid.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2013-2021, Intel Corporation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- *  * Redistributions of source code must retain the above copyright notice,
- *    this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- *  * Neither the name of Intel Corporation nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "pt_cpuid.h"
-
-#include <intrin.h>
-
-extern void pt_cpuid(uint32_t leaf, uint32_t *eax, uint32_t *ebx,
-		     uint32_t *ecx, uint32_t *edx)
-{
-	int cpu_info[4];
-
-	__cpuid(cpu_info, leaf);
-	*eax = cpu_info[0];
-	*ebx = cpu_info[1];
-	*ecx = cpu_info[2];
-	*edx = cpu_info[3];
-}
diff --git a/libipt/test/src/ptunit-cpu.c b/libipt/test/src/ptunit-cpu.c
index 3b95c9c..bec5362 100644
--- a/libipt/test/src/ptunit-cpu.c
+++ b/libipt/test/src/ptunit-cpu.c
@@ -29,24 +29,12 @@
 #include "ptunit.h"
 
 #include "pt_cpu.h"
-#include "pt_cpuid.h"
 
 #include "intel-pt.h"
 
 #include <stdlib.h>
 
 
-void pt_cpuid(uint32_t leaf, uint32_t *eax, uint32_t *ebx, uint32_t *ecx,
-	      uint32_t *edx)
-{
-	(void) leaf;
-	(void) eax;
-	(void) ebx;
-	(void) ecx;
-	(void) edx;
-}
-
-
 static struct ptunit_result cpu_valid(void)
 {
 	struct pt_cpu cpu;
diff --git a/ptdump/CMakeLists.txt b/ptdump/CMakeLists.txt
index 199e7d8..563a763 100644
--- a/ptdump/CMakeLists.txt
+++ b/ptdump/CMakeLists.txt
@@ -36,14 +36,6 @@
   ../libipt/src/pt_time.c
 )
 
-if (CMAKE_HOST_UNIX)
-  set(PTDUMP_FILES ${PTDUMP_FILES} ../libipt/src/posix/pt_cpuid.c)
-endif (CMAKE_HOST_UNIX)
-
-if (CMAKE_HOST_WIN32)
-  set(PTDUMP_FILES ${PTDUMP_FILES} ../libipt/src/windows/pt_cpuid.c)
-endif (CMAKE_HOST_WIN32)
-
 add_executable(ptdump
   ${PTDUMP_FILES}
 )
diff --git a/ptdump/src/ptdump.c b/ptdump/src/ptdump.c
index 2cc362a..f58b3ba 100644
--- a/ptdump/src/ptdump.c
+++ b/ptdump/src/ptdump.c
@@ -242,9 +242,8 @@
 	printf("  --pevent:vdso-ia32 <file>   ignored.\n");
 #endif /* defined(FEATURE_PEVENT) */
 #endif /* defined(FEATURE_SIDEBAND) */
-	printf("  --cpu none|auto|f/m[/s]   set cpu to the given value and decode according to:\n");
+	printf("  --cpu none|f/m[/s]        set cpu to the given value and decode according to:\n");
 	printf("                              none     spec (default)\n");
-	printf("                              auto     current cpu\n");
 	printf("                              f/m[/s]  family/model[/stepping]\n");
 	printf("  --mtc-freq <n>            set the MTC frequency (IA32_RTIT_CTL[17:14]) to <n>.\n");
 	printf("  --nom-freq <n>            set the nominal frequency (MSR_PLATFORM_INFO[15:8]) to <n>.\n");
@@ -1836,18 +1835,6 @@
 				return -1;
 			}
 
-			if (strcmp(arg, "auto") == 0) {
-				errcode = pt_cpu_read(&config->cpu);
-				if (errcode < 0) {
-					fprintf(stderr,
-						"%s: error reading cpu: %s.\n",
-						argv[0],
-						pt_errstr(pt_errcode(errcode)));
-					return -1;
-				}
-				continue;
-			}
-
 			if (strcmp(arg, "none") == 0) {
 				memset(&config->cpu, 0, sizeof(config->cpu));
 				continue;
diff --git a/pttc/CMakeLists.txt b/pttc/CMakeLists.txt
index 4592250..78f4a42 100644
--- a/pttc/CMakeLists.txt
+++ b/pttc/CMakeLists.txt
@@ -43,7 +43,6 @@
   set(PTTC_FILES
     ${PTTC_FILES}
     src/posix/util.c
-    ../libipt/src/posix/pt_cpuid.c
   )
 endif (CMAKE_HOST_UNIX)
 
@@ -51,7 +50,6 @@
   set(PTTC_FILES
     ${PTTC_FILES}
     src/windows/util.c
-    ../libipt/src/windows/pt_cpuid.c
   )
 endif (CMAKE_HOST_WIN32)
 
diff --git a/pttc/src/main.c b/pttc/src/main.c
index 54db676..4cc1e28 100644
--- a/pttc/src/main.c
+++ b/pttc/src/main.c
@@ -42,9 +42,8 @@
 	       "options:\n"
 	       "  --help|-h                this text.\n"
 	       "  --version                display version information and exit.\n"
-	       "  --cpu none|auto|f/m[/s]  set cpu to the given value and encode according to:\n"
+	       "  --cpu none|f/m[/s]       set cpu to the given value and encode according to:\n"
 	       "                             none     spec (default)\n"
-	       "                             auto     current cpu\n"
 	       "                             f/m[/s]  family/model[/stepping]\n"
 	       "  <pttfile>                the annotated yasm input file.\n",
 	       prog);
@@ -75,18 +74,6 @@
 		if (strcmp(arg, "--cpu") == 0) {
 			arg = argv[i++];
 
-			if (strcmp(arg, "auto") == 0) {
-				errcode = pt_cpu_read(&options.cpu);
-				if (errcode < 0) {
-					fprintf(stderr,
-						"%s: error reading cpu: %s.\n",
-						prog,
-						pt_errstr(pt_errcode(errcode)));
-					return 1;
-				}
-				continue;
-			}
-
 			if (strcmp(arg, "none") == 0) {
 				memset(&options.cpu, 0, sizeof(options.cpu));
 				continue;
diff --git a/ptxed/CMakeLists.txt b/ptxed/CMakeLists.txt
index 1020bfc..10499f0 100644
--- a/ptxed/CMakeLists.txt
+++ b/ptxed/CMakeLists.txt
@@ -45,14 +45,6 @@
   ../libipt/src/pt_cpu.c
 )
 
-if (CMAKE_HOST_UNIX)
-  set(PTXED_FILES ${PTXED_FILES} ../libipt/src/posix/pt_cpuid.c)
-endif (CMAKE_HOST_UNIX)
-
-if (CMAKE_HOST_WIN32)
-  set(PTXED_FILES ${PTXED_FILES} ../libipt/src/windows/pt_cpuid.c)
-endif (CMAKE_HOST_WIN32)
-
 if (FEATURE_ELF)
   set(PTXED_FILES ${PTXED_FILES} src/load_elf.c)
 endif (FEATURE_ELF)
diff --git a/ptxed/src/ptxed.c b/ptxed/src/ptxed.c
index cb893db..2aadaae 100644
--- a/ptxed/src/ptxed.c
+++ b/ptxed/src/ptxed.c
@@ -294,9 +294,8 @@
 #endif /* defined(FEATURE_ELF) */
 	printf("  --raw <file>[:<from>[-<to>]]:<base>  load a raw binary from <file> at address <base>.\n");
 	printf("                                       an optional offset or range can be given.\n");
-	printf("  --cpu none|auto|f/m[/s]              set cpu to the given value and decode according to:\n");
+	printf("  --cpu none|f/m[/s]                   set cpu to the given value and decode according to:\n");
 	printf("                                         none     spec (default)\n");
-	printf("                                         auto     current cpu\n");
 	printf("                                         f/m[/s]  family/model[/stepping]\n");
 	printf("  --mtc-freq <n>                       set the MTC frequency (IA32_RTIT_CTL[17:14]) to <n>.\n");
 	printf("  --nom-freq <n>                       set the nominal frequency (MSR_PLATFORM_INFO[15:8]) to <n>.\n");
@@ -2745,18 +2744,6 @@
 			}
 			arg = argv[i++];
 
-			if (strcmp(arg, "auto") == 0) {
-				errcode = pt_cpu_read(&config.cpu);
-				if (errcode < 0) {
-					fprintf(stderr,
-						"%s: error reading cpu: %s.\n",
-						prog,
-						pt_errstr(pt_errcode(errcode)));
-					return 1;
-				}
-				continue;
-			}
-
 			if (strcmp(arg, "none") == 0) {
 				memset(&config.cpu, 0, sizeof(config.cpu));
 				continue;
