#include <fdt_support.h>
#include <init.h>
#include <k3-ddrss.h>
+#include <power/regulator.h>
#include <spl.h>
#include "../common/tdx-cfg-block.h"
+#define VDD_CORE_REG "buck1"
+
DECLARE_GLOBAL_DATA_PTR;
int board_init(void)
}
#endif
+static u32 get_vdd_core_nominal(void)
+{
+ int core_uvolt;
+
+ switch (k3_get_speed_grade()) {
+ case 'G':
+ case 'K':
+ case 'S':
+ core_uvolt = 750000;
+ break;
+ case 'T':
+ default:
+ core_uvolt = 850000;
+ break;
+ }
+ return core_uvolt;
+}
+
#if IS_ENABLED(CONFIG_OF_LIBFDT) && IS_ENABLED(CONFIG_OF_BOARD_SETUP)
int ft_board_setup(void *blob, struct bd_info *bd)
{
+ int core_uvolt;
+
+ core_uvolt = get_vdd_core_nominal();
+ if (core_uvolt != 850000) {
+ do_fixup_by_path_u32(blob, "/bus@f0000/i2c@20000000/pmic@30/regulators/buck1",
+ "regulator-max-microvolt", core_uvolt, 0);
+ do_fixup_by_path_u32(blob, "/bus@f0000/i2c@20000000/pmic@30/regulators/buck1",
+ "regulator-min-microvolt", core_uvolt, 0);
+ }
+
return ft_common_board_setup(blob, bd);
}
#endif
int board_late_init(void)
{
+ int ret;
+ int core_uvolt;
+ struct udevice *dev = NULL;
+
+ core_uvolt = get_vdd_core_nominal();
+ if (core_uvolt != 850000) {
+ /* Set CPU core voltage to 0.75V for slower speed grades */
+ ret = regulator_get_by_devname(VDD_CORE_REG, &dev);
+ if (ret)
+ pr_err("VDD CORE Regulator get error: %d\n", ret);
+
+ ret = regulator_set_value_force(dev, core_uvolt);
+ if (ret)
+ pr_err("VDD CORE Regulator value setting error: %d\n", ret);
+ }
+
select_dt_from_module_version();
return 0;