2023-04-17 08:33 PM
Can ST please provide a guide for bringing up a custom board without using the STPMIC?
We are extremely space constrained and unable to fit the PMIC. For our use case we just want simple LDO's with bucks as required.
There is no material I can find that outlines what the device tree should look like for TF-A, U-Boot and Kernel when STPMIC is omitted.
Solved! Go to Solution.
2023-05-07 11:12 PM
I did manage to solve this in the end. Thanks for the links Patrick.
In the end I had to bypass a function call in TF-A that was searching the devicetree for a supported SOC operating mode. If I included the mode in the devicetree, the devicetree compiler failed so it was a catch-22.
I added a return 0; to the top of static int dt_fill_lp_state(uint32_t *lp_state_config, const char *lp_state) to prevent boot stalling.
static int dt_fill_lp_state(uint32_t *lp_state_config, const char *lp_state)
{
NOTICE("Bypassed function\n");
return 0;
int pwr_node;
void *fdt;
const fdt32_t *cuint;
if (fdt_get_address(&fdt) == 0) {
return -ENOENT;
}
pwr_node = dt_get_pwr_node(fdt);
if (pwr_node < 0) {
return -FDT_ERR_NOTFOUND;
}
cuint = fdt_getprop(fdt, pwr_node, lp_state, NULL);
if (cuint == NULL) {
return -FDT_ERR_NOTFOUND;
}
*lp_state_config = fdt32_to_cpu(*cuint);
save_supported_mode(fdt, pwr_node);
return 0;
}
2023-05-05 09:19 AM
@damien1 ,
Sorry for late answer, did you got a solution to your problems.
Some related information:
https://wiki.st.com/stm32mpu/wiki/Regulator_overview
AN5256 - STM32MP151, STM32MP153 and STM32MP157 discrete power supply hardware integration
Regards,
In order to give better visibility on the answered topics, please click on 'Select as Best' on the reply which solved your issue or answered your question. See also 'Best Answers'
2023-05-07 11:12 PM
I did manage to solve this in the end. Thanks for the links Patrick.
In the end I had to bypass a function call in TF-A that was searching the devicetree for a supported SOC operating mode. If I included the mode in the devicetree, the devicetree compiler failed so it was a catch-22.
I added a return 0; to the top of static int dt_fill_lp_state(uint32_t *lp_state_config, const char *lp_state) to prevent boot stalling.
static int dt_fill_lp_state(uint32_t *lp_state_config, const char *lp_state)
{
NOTICE("Bypassed function\n");
return 0;
int pwr_node;
void *fdt;
const fdt32_t *cuint;
if (fdt_get_address(&fdt) == 0) {
return -ENOENT;
}
pwr_node = dt_get_pwr_node(fdt);
if (pwr_node < 0) {
return -FDT_ERR_NOTFOUND;
}
cuint = fdt_getprop(fdt, pwr_node, lp_state, NULL);
if (cuint == NULL) {
return -FDT_ERR_NOTFOUND;
}
*lp_state_config = fdt32_to_cpu(*cuint);
save_supported_mode(fdt, pwr_node);
return 0;
}