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;
}