vpd: Add vpd_get_int() function

Change-Id: I1c1b5710a5236fe4a3bdda1fc978393e636e9817
Signed-off-by: Nico Huber <nico.h@gmx.de>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/45773
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-by: Julius Werner <jwerner@chromium.org>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
diff --git a/src/drivers/vpd/vpd.c b/src/drivers/vpd/vpd.c
index c332a6e..d3ff370 100644
--- a/src/drivers/vpd/vpd.c
+++ b/src/drivers/vpd/vpd.c
@@ -3,10 +3,12 @@
 #include <assert.h>
 #include <console/console.h>
 #include <cbmem.h>
+#include <ctype.h>
 #include <fmap.h>
 #include <program_loading.h>
 #include <string.h>
 #include <timestamp.h>
+#include <types.h>
 
 #include "vpd.h"
 #include "vpd_decode.h"
@@ -274,4 +276,25 @@
 		return false;
 }
 
+/*
+ * Find value of integer type by vpd key.
+ *
+ * Expects to find a decimal string, trailing chars are ignored.
+ * Returns true if the key is found and the value is not too long and
+ * starts with a decimal digit. Leaves `val` untouched if unsuccessful.
+ */
+bool vpd_get_int(const char *const key, const enum vpd_region region, int *const val)
+{
+	char value[11];
+
+	if (!vpd_gets(key, value, sizeof(value), region))
+		return false;
+
+	if (!isdigit(*value))
+		return false;
+
+	*val = (int)atol(value);
+	return true;
+}
+
 ROMSTAGE_CBMEM_INIT_HOOK(cbmem_add_cros_vpd)