]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
tools/arch/x86/intel_sdsi: Fix meter_show display
authorDavid E. Box <david.e.box@linux.intel.com>
Thu, 11 Apr 2024 02:58:53 +0000 (19:58 -0700)
committerHans de Goede <hdegoede@redhat.com>
Mon, 29 Apr 2024 08:52:01 +0000 (10:52 +0200)
Fixes sdsi_meter_cert_show() to correctly decode and display the meter
certificate output. Adds and displays a missing version field, displays the
ASCII name of the signature, and fixes the print alignment.

Fixes: 7fdc03a7370f ("tools/arch/x86: intel_sdsi: Add support for reading meter certificates")
Signed-off-by: David E. Box <david.e.box@linux.intel.com>
Reviewed-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Link: https://lore.kernel.org/r/20240411025856.2782476-7-david.e.box@linux.intel.com
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
tools/arch/x86/intel_sdsi/intel_sdsi.c

index 7eaffcbff788ca35deb27cebdaa96a77d568320f..ae29214da102917db49ce86ab8601d82a4d52fda 100644 (file)
@@ -153,11 +153,12 @@ struct bundle_encoding {
 };
 
 struct meter_certificate {
-       uint32_t block_signature;
-       uint32_t counter_unit;
+       uint32_t signature;
+       uint32_t version;
        uint64_t ppin;
+       uint32_t counter_unit;
        uint32_t bundle_length;
-       uint32_t reserved;
+       uint64_t reserved;
        uint32_t mmrc_encoding;
        uint32_t mmrc_counter;
 };
@@ -338,6 +339,7 @@ static int sdsi_meter_cert_show(struct sdsi_dev *s)
        uint32_t count = 0;
        FILE *cert_ptr;
        int ret, size;
+       char name[4];
 
        ret = sdsi_update_registers(s);
        if (ret)
@@ -379,12 +381,19 @@ static int sdsi_meter_cert_show(struct sdsi_dev *s)
        printf("\n");
        printf("Meter certificate for device %s\n", s->dev_name);
        printf("\n");
-       printf("Block Signature:       0x%x\n", mc->block_signature);
-       printf("Count Unit:            %dms\n", mc->counter_unit);
-       printf("PPIN:                  0x%lx\n", mc->ppin);
-       printf("Feature Bundle Length: %d\n", mc->bundle_length);
-       printf("MMRC encoding:         %d\n", mc->mmrc_encoding);
-       printf("MMRC counter:          %d\n", mc->mmrc_counter);
+
+       get_feature(mc->signature, name);
+       printf("Signature:                    %.4s\n", name);
+
+       printf("Version:                      %d\n", mc->version);
+       printf("Count Unit:                   %dms\n", mc->counter_unit);
+       printf("PPIN:                         0x%lx\n", mc->ppin);
+       printf("Feature Bundle Length:        %d\n", mc->bundle_length);
+
+       get_feature(mc->mmrc_encoding, name);
+       printf("MMRC encoding:                %.4s\n", name);
+
+       printf("MMRC counter:                 %d\n", mc->mmrc_counter);
        if (mc->bundle_length % 8) {
                fprintf(stderr, "Invalid bundle length\n");
                return -1;
@@ -398,7 +407,7 @@ static int sdsi_meter_cert_show(struct sdsi_dev *s)
 
        bec = (void *)(mc) + sizeof(mc);
 
-       printf("Number of Feature Counters:          %d\n", mc->bundle_length / 8);
+       printf("Number of Feature Counters:   %ld\n", BUNDLE_COUNT(mc->bundle_length));
        while (count++ < mc->bundle_length / 8) {
                char feature[5];