mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 01:33:56 -06:00
ppc/pnv: fix XSCOM core addressing on POWER9
The XSCOM base address of the core chiplet was wrongly calculated. Use the OPAL macros to fix that and do a couple of renames. Signed-off-by: Cédric Le Goater <clg@kaod.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
b3b066e9d8
commit
c035851ac0
5 changed files with 37 additions and 21 deletions
15
hw/ppc/pnv.c
15
hw/ppc/pnv.c
|
@ -721,7 +721,6 @@ static void pnv_chip_power8e_class_init(ObjectClass *klass, void *data)
|
|||
k->cores_mask = POWER8E_CORE_MASK;
|
||||
k->core_pir = pnv_chip_core_pir_p8;
|
||||
k->xscom_base = 0x003fc0000000000ull;
|
||||
k->xscom_core_base = 0x10000000ull;
|
||||
dc->desc = "PowerNV Chip POWER8E";
|
||||
}
|
||||
|
||||
|
@ -735,7 +734,6 @@ static void pnv_chip_power8_class_init(ObjectClass *klass, void *data)
|
|||
k->cores_mask = POWER8_CORE_MASK;
|
||||
k->core_pir = pnv_chip_core_pir_p8;
|
||||
k->xscom_base = 0x003fc0000000000ull;
|
||||
k->xscom_core_base = 0x10000000ull;
|
||||
dc->desc = "PowerNV Chip POWER8";
|
||||
}
|
||||
|
||||
|
@ -749,7 +747,6 @@ static void pnv_chip_power8nvl_class_init(ObjectClass *klass, void *data)
|
|||
k->cores_mask = POWER8_CORE_MASK;
|
||||
k->core_pir = pnv_chip_core_pir_p8;
|
||||
k->xscom_base = 0x003fc0000000000ull;
|
||||
k->xscom_core_base = 0x10000000ull;
|
||||
dc->desc = "PowerNV Chip POWER8NVL";
|
||||
}
|
||||
|
||||
|
@ -763,7 +760,6 @@ static void pnv_chip_power9_class_init(ObjectClass *klass, void *data)
|
|||
k->cores_mask = POWER9_CORE_MASK;
|
||||
k->core_pir = pnv_chip_core_pir_p9;
|
||||
k->xscom_base = 0x00603fc00000000ull;
|
||||
k->xscom_core_base = 0x0ull;
|
||||
dc->desc = "PowerNV Chip POWER9";
|
||||
}
|
||||
|
||||
|
@ -887,6 +883,7 @@ static void pnv_chip_realize(DeviceState *dev, Error **errp)
|
|||
&& (i < chip->nr_cores); core_hwid++) {
|
||||
char core_name[32];
|
||||
void *pnv_core = chip->cores + i * typesize;
|
||||
uint64_t xscom_core_base;
|
||||
|
||||
if (!(chip->cores_mask & (1ull << core_hwid))) {
|
||||
continue;
|
||||
|
@ -910,9 +907,13 @@ static void pnv_chip_realize(DeviceState *dev, Error **errp)
|
|||
object_unref(OBJECT(pnv_core));
|
||||
|
||||
/* Each core has an XSCOM MMIO region */
|
||||
pnv_xscom_add_subregion(chip,
|
||||
PNV_XSCOM_EX_CORE_BASE(pcc->xscom_core_base,
|
||||
core_hwid),
|
||||
if (!pnv_chip_is_power9(chip)) {
|
||||
xscom_core_base = PNV_XSCOM_EX_BASE(core_hwid);
|
||||
} else {
|
||||
xscom_core_base = PNV_XSCOM_P9_EC_BASE(core_hwid);
|
||||
}
|
||||
|
||||
pnv_xscom_add_subregion(chip, xscom_core_base,
|
||||
&PNV_CORE(pnv_core)->xscom_regs);
|
||||
i++;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue