]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
imsm: add print license for VMD
authorBlazej Kucman <blazej.kucman@intel.com>
Thu, 25 Jul 2024 15:40:12 +0000 (17:40 +0200)
committerMariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
Fri, 8 Nov 2024 14:44:00 +0000 (15:44 +0100)
Add print IMSM license for VMD controllers in --detail-platform.
The license specifies the scope of RAID support in the platform for
the VMD controller.

Signed-off-by: Blazej Kucman <blazej.kucman@intel.com>
platform-intel.h
super-intel.c

index 344624d796bacbe0a0a26e3954567b6213769833..63d41682611873ad9e4163d1321f9db98c52fce3 100644 (file)
@@ -106,7 +106,12 @@ struct imsm_orom {
        #define IMSM_OROM_CAPABILITIES_ReadPatrol (1 << 6)
        #define IMSM_OROM_CAPABILITIES_XorHw (1 << 7)
        #define IMSM_OROM_CAPABILITIES_SKUMode ((1 << 8)|(1 << 9))
+       #define IMSM_OROM_CAPABILITIES_SKUMode_LOW ((1 << 8) | (1 << 9))
+       #define IMSM_OROM_CAPABILITIES_SKUMode_LOW_SHIFT 8
        #define IMSM_OROM_CAPABILITIES_TPV (1 << 10)
+       #define IMSM_OROM_CAPABILITIES_SKUMode_HIGH ((1 << 11) | (1 << 12))
+       #define IMSM_OROM_CAPABILITIES_SKUMode_HIGH_SHIFT 9
+       #define IMSM_OROM_CAPABILITIES_SKUMode_NON_PRODUCTION (1 << 13)
 } __attribute__((packed));
 
 /* IMSM metadata requirements for each level */
index 3b856ad0e756a9d6ea8cecd0daebb1ef432bdec7..55c71e262e03a9716bf1509d51ab9a9c05f9d47a 100644 (file)
@@ -645,6 +645,14 @@ struct imsm_update_rwh_policy {
        int dev_idx;
 };
 
+enum imsm_sku {
+       SKU_NO_KEY = 0,
+       SKU_STANDARD_KEY = 1,
+       SKU_PREMIUM_KEY = 2,
+       SKU_INTEL_SSD_ONLY_KEY = 3,
+       SKU_RAID1_ONLY_KEY = 4
+};
+
 static const char *_sys_dev_type[] = {
        [SYS_DEV_UNKNOWN] = "Unknown",
        [SYS_DEV_SAS] = "SAS",
@@ -2658,6 +2666,39 @@ static void print_imsm_level_capability(const struct imsm_orom *orom)
                        printf("%s ", imsm_level_ops[idx].name);
 }
 
+static void print_imsm_sku_capability(const struct imsm_orom *orom)
+{
+       int key_val;
+
+       key_val = (orom->driver_features & IMSM_OROM_CAPABILITIES_SKUMode_LOW) >>
+                  IMSM_OROM_CAPABILITIES_SKUMode_LOW_SHIFT;
+       key_val |= (orom->driver_features & IMSM_OROM_CAPABILITIES_SKUMode_HIGH) >>
+                   IMSM_OROM_CAPABILITIES_SKUMode_HIGH_SHIFT;
+
+       switch (key_val) {
+       case SKU_NO_KEY:
+               printf("Pass-through");
+               break;
+       case SKU_STANDARD_KEY:
+               printf("Standard");
+               break;
+       case SKU_PREMIUM_KEY:
+               printf("Premium");
+               break;
+       case SKU_INTEL_SSD_ONLY_KEY:
+               printf("Intel-SSD-only");
+               break;
+       case SKU_RAID1_ONLY_KEY:
+               printf("RAID1 Only");
+               break;
+       default:
+               printf("Unknown");
+       }
+
+       if (orom->driver_features & IMSM_OROM_CAPABILITIES_SKUMode_NON_PRODUCTION)
+               printf(" - for evaluation only");
+}
+
 static void print_imsm_chunk_size_capability(const struct imsm_orom *orom)
 {
        int idx;
@@ -2690,6 +2731,12 @@ static void print_imsm_capability(const struct orom_entry *entry)
                               orom->hotfix_ver, orom->build);
        }
 
+       if (entry->type == SYS_DEV_VMD) {
+               printf("        License : ");
+               print_imsm_sku_capability(orom);
+               printf("\n");
+       }
+
        printf("    RAID Levels : ");
        print_imsm_level_capability(orom);
        printf("\n");