cpu: Add support for microcode version and CPU ID
authorSimon Glass <sjg@chromium.org>
Mon, 7 Mar 2016 02:27:49 +0000 (19:27 -0700)
committerBin Meng <bmeng.cn@gmail.com>
Thu, 17 Mar 2016 02:27:22 +0000 (10:27 +0800)
Some CPUs use microcode and each core can have a different version of
microcode loaded. Also some CPUs support the concept of an integer ID used
for identification purposes. Add support for these in the CPU uclass.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
cmd/cpu.c
include/cpu.h

index b4af64f..bc4dc5c 100644 (file)
--- a/cmd/cpu.c
+++ b/cmd/cpu.c
@@ -14,6 +14,7 @@
 static const char *cpu_feature_name[CPU_FEAT_COUNT] = {
        "L1 cache",
        "MMU",
+       "Microcode",
 };
 
 static int print_cpu_list(bool detail)
@@ -58,6 +59,12 @@ static int print_cpu_list(bool detail)
                        }
                }
                printf("\n");
+               if (info.features & (1 << CPU_FEAT_UCODE)) {
+                       printf("\tMicrocode version %#x\n",
+                              plat->ucode_version);
+               }
+               if (info.features & (1 << CPU_FEAT_DEVICE_ID))
+                       printf("\tDevice ID %#lx\n", plat->device_id);
        }
 
        return 0;
index bfb0db2..bda5315 100644 (file)
  * device.
  *
  * @cpu_id:    Platform-specific way of identifying the CPU.
+ * @ucode_version: Microcode version, if CPU_FEAT_UCODE is set
  */
 struct cpu_platdata {
        int cpu_id;
+       int ucode_version;
+       ulong device_id;
 };
 
 /* CPU features - mostly just a placeholder for now */
 enum {
        CPU_FEAT_L1_CACHE       = 0,    /* Supports level 1 cache */
        CPU_FEAT_MMU            = 1,    /* Supports virtual memory */
+       CPU_FEAT_UCODE          = 2,    /* Requires/uses microcode */
+       CPU_FEAT_DEVICE_ID      = 3,    /* Provides a device ID */
 
        CPU_FEAT_COUNT,
 };