diff --git a/common/Kconfig b/common/Kconfig
index 5d7e48a..15759f7 100644
--- a/common/Kconfig
+++ b/common/Kconfig
@@ -31,6 +31,14 @@
 	help
 	  Print console devices and information.
 
+config CMD_CPU
+	bool "cpu"
+	help
+	  Print information about available CPUs. This normally shows the
+	  number of CPUs, type (e.g. manufacturer, architecture, product or
+	  internal name) and clock frequency. Other information may be
+	  available depending on the CPU driver.
+
 config CMD_LICENSE
 	bool "license"
 	help
diff --git a/common/Makefile b/common/Makefile
index fba3830..9084c73 100644
--- a/common/Makefile
+++ b/common/Makefile
@@ -74,6 +74,7 @@
 obj-$(CONFIG_CMD_CLK) += cmd_clk.o
 obj-$(CONFIG_CMD_CONSOLE) += cmd_console.o
 obj-$(CONFIG_CMD_CPLBINFO) += cmd_cplbinfo.o
+obj-$(CONFIG_CMD_CPU) += cmd_cpu.o
 obj-$(CONFIG_DATAFLASH_MMC_SELECT) += cmd_dataflash_mmc_mux.o
 obj-$(CONFIG_CMD_DATE) += cmd_date.o
 obj-$(CONFIG_CMD_DEMO) += cmd_demo.o
diff --git a/common/cmd_cpu.c b/common/cmd_cpu.c
new file mode 100644
index 0000000..c3e229f
--- /dev/null
+++ b/common/cmd_cpu.c
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2015 Google, Inc
+ * Written by Simon Glass <sjg@chromium.org>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <common.h>
+#include <command.h>
+#include <cpu.h>
+#include <dm.h>
+
+static const char *cpu_feature_name[CPU_FEAT_COUNT] = {
+	"L1 cache",
+	"MMU",
+};
+
+static int print_cpu_list(bool detail)
+{
+	struct udevice *dev;
+	struct uclass *uc;
+	char buf[100];
+	int ret;
+
+	ret = uclass_get(UCLASS_CPU, &uc);
+	if (ret) {
+		printf("Cannot find CPU uclass\n");
+		return ret;
+	}
+	uclass_foreach_dev(dev, uc) {
+		struct cpu_platdata *plat = dev_get_parent_platdata(dev);
+		struct cpu_info info;
+		bool first;
+		int i;
+
+		ret = cpu_get_desc(dev, buf, sizeof(buf));
+		printf("%3d: %-10s %s\n", dev->seq, dev->name,
+		       ret ? "<no description>" : buf);
+		if (!detail)
+			continue;
+		ret = cpu_get_info(dev, &info);
+		if (ret) {
+			printf("\t(no detail available");
+			if (ret != -ENOSYS)
+				printf(": err=%d\n", ret);
+			printf(")\n");
+			continue;
+		}
+		printf("\tID = %d, freq = ", plat->cpu_id);
+		print_freq(info.cpu_freq, "");
+		first = true;
+		for (i = 0; i < CPU_FEAT_COUNT; i++) {
+			if (info.features & (1 << i)) {
+				printf("%s%s", first ? ": " : ", ",
+				       cpu_feature_name[i]);
+				first = false;
+			}
+		}
+		printf("\n");
+	}
+
+	return 0;
+}
+
+static int do_cpu_list(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
+{
+	if (print_cpu_list(false))
+		return CMD_RET_FAILURE;
+
+	return 0;
+}
+
+static int do_cpu_detail(cmd_tbl_t *cmdtp, int flag, int argc,
+			 char *const argv[])
+{
+	if (print_cpu_list(true))
+		return CMD_RET_FAILURE;
+
+	return 0;
+}
+
+static cmd_tbl_t cmd_cpu_sub[] = {
+	U_BOOT_CMD_MKENT(list, 2, 1, do_cpu_list, "", ""),
+	U_BOOT_CMD_MKENT(detail, 4, 0, do_cpu_detail, "", ""),
+};
+
+/*
+ * Process a cpu sub-command
+ */
+static int do_cpu(cmd_tbl_t *cmdtp, int flag, int argc,
+		       char * const argv[])
+{
+	cmd_tbl_t *c = NULL;
+
+	/* Strip off leading 'cpu' command argument */
+	argc--;
+	argv++;
+
+	if (argc)
+		c = find_cmd_tbl(argv[0], cmd_cpu_sub, ARRAY_SIZE(cmd_cpu_sub));
+
+	if (c)
+		return c->cmd(cmdtp, flag, argc, argv);
+	else
+		return CMD_RET_USAGE;
+}
+
+U_BOOT_CMD(
+	cpu, 2, 1, do_cpu,
+	"display information about CPUs",
+	"list	- list available CPUs\n"
+	"cpu detail	- show CPU detail"
+);
