[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PULL 2/4] hw/ppc/spapr: Move code related to "ibm, pa-featur
From: |
David Gibson |
Subject: |
[Qemu-ppc] [PULL 2/4] hw/ppc/spapr: Move code related to "ibm, pa-features" to a separate function |
Date: |
Thu, 13 Oct 2016 16:15:32 +1100 |
From: Thomas Huth <address@hidden>
The function spapr_populate_cpu_dt() has become quite big
already, and since we likely have to extend the pa-features
property for every new processor generation, it is nicer
if we put the related code into a separate function.
Signed-off-by: Thomas Huth <address@hidden>
Reviewed-by: Cédric Le Goater <address@hidden>
Signed-off-by: David Gibson <address@hidden>
(cherry picked from commit 230bf719d3a3b144a4ffa441e5d6170ef0ad8999)
---
hw/ppc/spapr.c | 66 ++++++++++++++++++++++++++++++++--------------------------
1 file changed, 36 insertions(+), 30 deletions(-)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 30d6800..36d9077 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -594,6 +594,41 @@ static int spapr_populate_memory(sPAPRMachineState *spapr,
void *fdt)
return 0;
}
+/* Populate the "ibm,pa-features" property */
+static void spapr_populate_pa_features(CPUPPCState *env, void *fdt, int offset)
+{
+ uint8_t pa_features_206[] = { 6, 0,
+ 0xf6, 0x1f, 0xc7, 0x00, 0x80, 0xc0 };
+ uint8_t pa_features_207[] = { 24, 0,
+ 0xf6, 0x1f, 0xc7, 0xc0, 0x80, 0xf0,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
+ 0x80, 0x00, 0x80, 0x00, 0x80, 0x00 };
+ uint8_t *pa_features;
+ size_t pa_size;
+
+ if (env->mmu_model == POWERPC_MMU_2_06) {
+ pa_features = pa_features_206;
+ pa_size = sizeof(pa_features_206);
+ } else { /* env->mmu_model == POWERPC_MMU_2_07 */
+ pa_features = pa_features_207;
+ pa_size = sizeof(pa_features_207);
+ }
+
+ if (env->ci_large_pages) {
+ /*
+ * Note: we keep CI large pages off by default because a 64K capable
+ * guest provisioned with large pages might otherwise try to map a qemu
+ * framebuffer (or other kind of memory mapped PCI BAR) using 64K pages
+ * even if that qemu runs on a 4k host.
+ * We dd this bit back here if we are confident this is not an issue
+ */
+ pa_features[3] |= 0x20;
+ }
+
+ _FDT((fdt_setprop(fdt, offset, "ibm,pa-features", pa_features, pa_size)));
+}
+
static void spapr_populate_cpu_dt(CPUState *cs, void *fdt, int offset,
sPAPRMachineState *spapr)
{
@@ -621,24 +656,6 @@ static void spapr_populate_cpu_dt(CPUState *cs, void *fdt,
int offset,
_FDT((fdt_setprop_cell(fdt, offset, "ibm,my-drc-index", drc_index)));
}
- /* Note: we keep CI large pages off for now because a 64K capable guest
- * provisioned with large pages might otherwise try to map a qemu
- * framebuffer (or other kind of memory mapped PCI BAR) using 64K pages
- * even if that qemu runs on a 4k host.
- *
- * We can later add this bit back when we are confident this is not
- * an issue (!HV KVM or 64K host)
- */
- uint8_t pa_features_206[] = { 6, 0,
- 0xf6, 0x1f, 0xc7, 0x00, 0x80, 0xc0 };
- uint8_t pa_features_207[] = { 24, 0,
- 0xf6, 0x1f, 0xc7, 0xc0, 0x80, 0xf0,
- 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
- 0x80, 0x00, 0x80, 0x00, 0x80, 0x00 };
- uint8_t *pa_features;
- size_t pa_size;
-
_FDT((fdt_setprop_cell(fdt, offset, "reg", index)));
_FDT((fdt_setprop_string(fdt, offset, "device_type", "cpu")));
@@ -705,18 +722,7 @@ static void spapr_populate_cpu_dt(CPUState *cs, void *fdt,
int offset,
page_sizes_prop, page_sizes_prop_size)));
}
- /* Do the ibm,pa-features property, adjust it for ci-large-pages */
- if (env->mmu_model == POWERPC_MMU_2_06) {
- pa_features = pa_features_206;
- pa_size = sizeof(pa_features_206);
- } else /* env->mmu_model == POWERPC_MMU_2_07 */ {
- pa_features = pa_features_207;
- pa_size = sizeof(pa_features_207);
- }
- if (env->ci_large_pages) {
- pa_features[3] |= 0x20;
- }
- _FDT((fdt_setprop(fdt, offset, "ibm,pa-features", pa_features, pa_size)));
+ spapr_populate_pa_features(env, fdt, offset);
_FDT((fdt_setprop_cell(fdt, offset, "ibm,chip-id",
cs->cpu_index / vcpus_per_socket)));
--
2.7.4
- [Qemu-ppc] [PULL 0/4] ppc patches for qemu-2.7 stable branch, David Gibson, 2016/10/13
- [Qemu-ppc] [PULL 2/4] hw/ppc/spapr: Move code related to "ibm, pa-features" to a separate function,
David Gibson <=
- [Qemu-ppc] [PULL 4/4] ppc: Check the availability of transactional memory, David Gibson, 2016/10/13
- [Qemu-ppc] [PULL 1/4] linux-headers: update, David Gibson, 2016/10/13
- [Qemu-ppc] [PULL 3/4] hw/ppc/spapr: Fix the selection of the processor features, David Gibson, 2016/10/13
- Re: [Qemu-ppc] [Qemu-devel] [PULL 0/4] ppc patches for qemu-2.7 stable branch, Peter Maydell, 2016/10/13
- Re: [Qemu-ppc] [Qemu-devel] [PULL 0/4] ppc patches for qemu-2.7 stable branch, Peter Maydell, 2016/10/13
- Re: [Qemu-ppc] [Qemu-devel] [PULL 0/4] ppc patches for qemu-2.7 stable branch, David Gibson, 2016/10/13
- Re: [Qemu-ppc] [Qemu-devel] [PULL 0/4] ppc patches for qemu-2.7 stable branch, Greg Kurz, 2016/10/14
- Re: [Qemu-ppc] [Qemu-devel] [PULL 0/4] ppc patches for qemu-2.7 stable branch, Peter Maydell, 2016/10/14
- Re: [Qemu-ppc] [Qemu-devel] [PULL 0/4] ppc patches for qemu-2.7 stable branch, Thomas Huth, 2016/10/17
- Re: [Qemu-ppc] [Qemu-stable] [Qemu-devel] [PULL 0/4] ppc patches for qemu-2.7 stable branch, Michael Roth, 2016/10/17