aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMahesh Salgaonkar <mahesh@linux.ibm.com>2025-03-03 12:32:59 +0530
committerReza Arbab <arbab@linux.ibm.com>2025-03-07 08:48:54 -0600
commit785a5e3070a86e18521e62fe202b87209de30fa2 (patch)
tree26c13bd9cc99ae3a58d9cf7521160795b24121db
parente7279e369b4b94f32bb74b374e2fc635296ae0fc (diff)
downloadskiboot-master.zip
skiboot-master.tar.gz
skiboot-master.tar.bz2
platform: Identify correct bmc platform based on bmc hw versionHEADmaster
At the moment the generic platform sets bmc_generic() as bmc platform which does not have any support to initialize the flash and hence it fails to load petitboot kernel. [ 583.105000325,4] FLASH: Failed to load VERSION data [ 583.105490257,5] INIT: Waiting for kernel... [ 583.105523156,5] INIT: platform wait for kernel load failed [ 583.105555219,5] INIT: Assuming kernel at 0x20000000 [ 583.105589925,3] INIT: ELF header not found. Assuming raw binary. [...] [ 583.299682673,5] INIT: Starting kernel at 0x20000000, fdt at 0x30a44eb0 1274673 bytes [ 583.344432417,3] *********************************************** [ 583.344490230,3] Fatal Exception 0x800 at 0000000020000000 MSR 9000000000000000 [ 583.344535875,3] CFAR : 0000000030022948 MSR : 9000000000000000 [ 583.344578019,3] SRR0 : 0000000020000000 SRR1 : 9000000000000000 [ 583.344620242,3] HSRR0: 0000000020000000 HSRR1: 9000000000000000 OPAL builds the device tree for BMC based system using HDAT. It populates bmc/compatible node with bmc hw version e.g. "ibm,ast2600,openbmc". Use that to identify proper BMC hw board and initialize BMC platform with proper backend. This allows opal to successfully load and boot into petitboot kernel. Signed-off-by: Mahesh Salgaonkar <mahesh@linux.ibm.com> Reviewed-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Reza Arbab <arbab@linux.ibm.com>
-rw-r--r--core/platform.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/core/platform.c b/core/platform.c
index 320fdea..34ef5e5 100644
--- a/core/platform.c
+++ b/core/platform.c
@@ -135,15 +135,27 @@ static int64_t opal_cec_reboot2(uint32_t reboot_type, char *diag)
}
opal_call(OPAL_CEC_REBOOT2, opal_cec_reboot2, 2);
+static void generic_platform_fixup_bmc(struct dt_node *bmc)
+{
+ /* Try setting proper bmc platform by checking compatible property */
+ if (dt_node_is_compatible(bmc, "ibm,ast2600,openbmc"))
+ platform.bmc = &bmc_plat_ast2600_openbmc;
+}
+
static bool generic_platform_probe(void)
{
- if (dt_find_by_path(dt_root, "bmc")) {
+ struct dt_node *bmc;
+
+ bmc = dt_find_by_path(dt_root, "bmc");
+ if (bmc) {
/* We appear to have a BMC... so let's cross our fingers
* and see if we can do anything!
*/
prlog(PR_ERR, "GENERIC BMC PLATFORM: **GUESSING** that there's "
"*maybe* a BMC we can talk to.\n");
prlog(PR_ERR, "THIS IS ****UNSUPPORTED****, BRINGUP USE ONLY.\n");
+
+ generic_platform_fixup_bmc(bmc);
astbmc_early_init();
} else {
uart_init();