xref: /aosp_15_r20/external/coreboot/src/drivers/ocp/vpd/vpd_util.c (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <console/console.h>
4 #include <drivers/vpd/vpd.h>
5 #include <drivers/ocp/include/vpd.h>
6 
get_int_from_vpd_range(const char * const key,const int fallback,const int min,const int max)7 int get_int_from_vpd_range(const char *const key, const int fallback, const int min,
8 	const int max)
9 {
10 	int val = fallback;
11 
12 	if (!vpd_get_int(key, VPD_RW_THEN_RO, &val))
13 		printk(BIOS_INFO, "%s: not able to get VPD %s, default set to %d\n",
14 		       __func__, key, fallback);
15 	else
16 		printk(BIOS_DEBUG, "%s: VPD %s, got %d\n", __func__, key, val);
17 
18 	if (val < min || val > max) {
19 		printk(BIOS_INFO, "Invalid VPD %s value, set default value to %d\n",
20 			key, fallback);
21 		val = fallback;
22 	}
23 
24 	return val;
25 }
26 
get_bool_from_vpd(const char * const key,const bool fallback)27 bool get_bool_from_vpd(const char *const key, const bool fallback)
28 {
29 	uint8_t val;
30 
31 	val = (uint8_t)fallback;
32 
33 	if (!vpd_get_bool(key, VPD_RW_THEN_RO, &val))
34 		printk(BIOS_INFO, "%s: not able to get VPD %s, default set to %d\n",
35 		       __func__, key, fallback);
36 	else
37 		printk(BIOS_DEBUG, "%s: VPD %s, got %d\n", __func__, key, val);
38 
39 	return (bool)val;
40 }
41 
get_cxl_mode_from_vpd(void)42 int get_cxl_mode_from_vpd(void)
43 {
44 	return get_int_from_vpd_range(CXL_MODE, CXL_MODE_DEFAULT, 0, CXL_MODE_MAX-1);
45 }
46