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