diff options
-rw-r--r-- | core/chip.c | 4 | ||||
-rw-r--r-- | hw/imc.c | 10 | ||||
-rw-r--r-- | include/chip.h | 1 |
3 files changed, 10 insertions, 5 deletions
diff --git a/core/chip.c b/core/chip.c index cee6582..0e96e62 100644 --- a/core/chip.c +++ b/core/chip.c @@ -190,6 +190,10 @@ void init_chips(void) proc_chip_quirks |= QUIRK_QEMU | QUIRK_NO_DIRECT_CTL | QUIRK_NO_RNG; prlog(PR_NOTICE, "CHIP: Detected QEMU simulator\n"); } + if (dt_find_by_path(dt_root, "/bml")) { + proc_chip_quirks |= QUIRK_BML; + prlog(PR_NOTICE, "CHIP: Detected BML\n"); + } /* We walk the chips based on xscom nodes in the tree */ dt_for_each_compatible(dt_root, xn, "ibm,xscom") { @@ -651,7 +651,7 @@ void imc_catalog_preload(void) int ret = OPAL_SUCCESS; compress_buf_size = MAX_COMPRESSED_IMC_DTB_SIZE; - if (proc_chip_quirks & QUIRK_MAMBO_CALLOUTS) + if (proc_chip_quirks & (QUIRK_MAMBO_CALLOUTS | QUIRK_BML)) return; /* Enable only for power 9/10 */ @@ -789,13 +789,13 @@ void imc_init(void) struct dt_node *dev; int err_flag = -1; - if (proc_chip_quirks & QUIRK_MAMBO_CALLOUTS) { + if (proc_chip_quirks & (QUIRK_MAMBO_CALLOUTS | QUIRK_BML)) { dev = dt_find_compatible_node(dt_root, NULL, "ibm,opal-in-memory-counters"); if (!dev) return; - goto imc_mambo; + goto imc_mambo_bml; } /* Enable only for power 9/10 */ @@ -838,7 +838,7 @@ void imc_init(void) goto err; } -imc_mambo: +imc_mambo_bml: if (setup_imc_scoms()) { prerror("IMC: Failed to setup the scoms\n"); goto err; @@ -859,7 +859,7 @@ imc_mambo: /* Update the base_addr and chip-id for nest nodes */ imc_dt_update_nest_node(dev); - if (proc_chip_quirks & QUIRK_MAMBO_CALLOUTS) + if (proc_chip_quirks & (QUIRK_MAMBO_CALLOUTS | QUIRK_BML)) return; /* diff --git a/include/chip.h b/include/chip.h index cfa5ce3..c90b8a7 100644 --- a/include/chip.h +++ b/include/chip.h @@ -187,6 +187,7 @@ enum proc_chip_quirks { QUIRK_NO_RNG = 0x00000100, QUIRK_QEMU = 0x00000200, QUIRK_AWAN = 0x00000400, + QUIRK_BML = 0x00000800, }; extern enum proc_chip_quirks proc_chip_quirks; |