/* SPDX-License-Identifier: GPL-2.0-only */ #include <console/console.h> #include <drivers/vpd/vpd.h> #include <drivers/ocp/include/vpd.h> int get_int_from_vpd_range(const char *const key, const int fallback, const int min, const int max) { int val = fallback; if (!vpd_get_int(key, VPD_RW_THEN_RO, &val)) printk(BIOS_INFO, "%s: not able to get VPD %s, default set to %d\n", __func__, key, fallback); else printk(BIOS_DEBUG, "%s: VPD %s, got %d\n", __func__, key, val); if (val < min || val > max) { printk(BIOS_INFO, "Invalid VPD %s value, set default value to %d\n", key, fallback); val = fallback; } return val; } bool get_bool_from_vpd(const char *const key, const bool fallback) { uint8_t val; val = (uint8_t)fallback; if (!vpd_get_bool(key, VPD_RW_THEN_RO, &val)) printk(BIOS_INFO, "%s: not able to get VPD %s, default set to %d\n", __func__, key, fallback); else printk(BIOS_DEBUG, "%s: VPD %s, got %d\n", __func__, key, val); return (bool)val; } int get_cxl_mode_from_vpd(void) { return get_int_from_vpd_range(CXL_MODE, CXL_MODE_DEFAULT, 0, CXL_MODE_MAX-1); }