From 38686f15dd57745e24f100797db33a84e65f7ec7 Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Sun, 22 Jan 2017 22:19:33 +0100 Subject: msrtool: add support for printing string values The VIA CPUs allow setting the CPUID vendor, which is best read as a character string. Change-Id: I67f77ca75f7d77e47b3ba09bad904df5805e373a Signed-off-by: Lubomir Rintel Reviewed-on: https://review.coreboot.org/18257 Tested-by: build bot (Jenkins) Reviewed-by: Martin Roth --- util/msrtool/msrtool.h | 4 +++- util/msrtool/msrutils.c | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) (limited to 'util') diff --git a/util/msrtool/msrtool.h b/util/msrtool/msrtool.h index 93881e964c..1e923c4bfd 100644 --- a/util/msrtool/msrtool.h +++ b/util/msrtool/msrtool.h @@ -45,7 +45,8 @@ enum { PRESENT_BIN, PRESENT_OCT, PRESENT_HEX, - PRESENT_HEXDEC + PRESENT_HEXDEC, + PRESENT_STR, } PresentTypes; struct msr { @@ -162,6 +163,7 @@ struct pci_dev *pci_dev_find(uint16_t vendor, uint16_t device); /* msrutils.c */ void hexprint(FILE *f, const struct msr val, const uint8_t bits); +void strprint(FILE *f, const struct msr val, const uint8_t bits); int msr_eq(const struct msr a, const struct msr b); struct msr msr_shl(const struct msr a, const uint8_t bits); struct msr msr_shr(const struct msr a, const uint8_t bits); diff --git a/util/msrtool/msrutils.c b/util/msrtool/msrutils.c index 57a271d05d..1c6707e4c2 100644 --- a/util/msrtool/msrutils.c +++ b/util/msrtool/msrutils.c @@ -65,6 +65,9 @@ static void print_bitval(FILE *f, const struct msrbits *mb, const struct msr val hexprint(f, val, mb->size); fprintf(f, " %d", val.lo); break; + case PRESENT_STR: + strprint(f, val, mb->size); + break; } if (mbv->text) fprintf(f, ": %s", mbv->text); @@ -106,6 +109,25 @@ void hexprint(FILE *f, const struct msr val, const uint8_t bits) { fprintf(f, "0x%08x%08x", val.hi, val.lo); } +void strprint(FILE *f, const struct msr val, const uint8_t bits) { + if (bits > 56) + fputc(val.hi, f); + if (bits > 48) + fputc(val.hi >> 8, f); + if (bits > 40) + fputc(val.hi >> 16, f); + if (bits > 32) + fputc(val.hi >> 24, f); + if (bits > 24) + fputc(val.lo, f); + if (bits > 16) + fputc(val.lo >> 8, f); + if (bits > 8) + fputc(val.lo >> 16, f); + if (bits > 0) + fputc(val.lo >> 24, f); +} + int msr_eq(const struct msr a, const struct msr b) { return a.hi == b.hi && a.lo == b.lo; } -- cgit v1.2.3