|
|
76daa3 |
From c68660ddc515651cf5eb21c4fbc8d4c4643921e1 Mon Sep 17 00:00:00 2001
|
|
|
76daa3 |
From: David Gibson <dgibson@redhat.com>
|
|
|
76daa3 |
Date: Thu, 27 Apr 2017 02:15:56 +0200
|
|
|
76daa3 |
Subject: [PATCH 21/23] spapr: move spapr_populate_pa_features()
|
|
|
76daa3 |
|
|
|
76daa3 |
RH-Author: David Gibson <dgibson@redhat.com>
|
|
|
76daa3 |
Message-id: <20170427021558.4884-6-dgibson@redhat.com>
|
|
|
76daa3 |
Patchwork-id: 74918
|
|
|
76daa3 |
O-Subject: [Pegas-1.0 qemu-kvm-rhev PATCH 5/7] spapr: move spapr_populate_pa_features()
|
|
|
76daa3 |
Bugzilla: 1368786
|
|
|
76daa3 |
RH-Acked-by: Thomas Huth <thuth@redhat.com>
|
|
|
76daa3 |
RH-Acked-by: Laurent Vivier <lvivier@redhat.com>
|
|
|
76daa3 |
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
76daa3 |
|
|
|
76daa3 |
From: Sam Bobroff <sam.bobroff@au1.ibm.com>
|
|
|
76daa3 |
|
|
|
76daa3 |
In the next patch, spapr_fixup_cpu_dt() will need to call
|
|
|
76daa3 |
spapr_populate_pa_features() so move it's definition up without making
|
|
|
76daa3 |
any other changes.
|
|
|
76daa3 |
|
|
|
76daa3 |
Signed-off-by: Sam Bobroff <sam.bobroff@au1.ibm.com>
|
|
|
76daa3 |
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
|
|
|
76daa3 |
(cherry picked from commit 86d5771a5ab67b72a0d830f0ac8c0420e18b48d8)
|
|
|
76daa3 |
|
|
|
76daa3 |
Siged-off-by: David Gibson <dgibson@redhat.com>
|
|
|
76daa3 |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
76daa3 |
---
|
|
|
76daa3 |
hw/ppc/spapr.c | 122 ++++++++++++++++++++++++++++-----------------------------
|
|
|
76daa3 |
1 file changed, 61 insertions(+), 61 deletions(-)
|
|
|
76daa3 |
|
|
|
76daa3 |
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
|
|
|
76daa3 |
index 8b9f877..7376bb5 100644
|
|
|
76daa3 |
--- a/hw/ppc/spapr.c
|
|
|
76daa3 |
+++ b/hw/ppc/spapr.c
|
|
|
76daa3 |
@@ -227,6 +227,67 @@ static int spapr_fixup_cpu_numa_dt(void *fdt, int offset, CPUState *cs)
|
|
|
76daa3 |
return ret;
|
|
|
76daa3 |
}
|
|
|
76daa3 |
|
|
|
76daa3 |
+/* Populate the "ibm,pa-features" property */
|
|
|
76daa3 |
+static void spapr_populate_pa_features(CPUPPCState *env, void *fdt, int offset)
|
|
|
76daa3 |
+{
|
|
|
76daa3 |
+ uint8_t pa_features_206[] = { 6, 0,
|
|
|
76daa3 |
+ 0xf6, 0x1f, 0xc7, 0x00, 0x80, 0xc0 };
|
|
|
76daa3 |
+ uint8_t pa_features_207[] = { 24, 0,
|
|
|
76daa3 |
+ 0xf6, 0x1f, 0xc7, 0xc0, 0x80, 0xf0,
|
|
|
76daa3 |
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
76daa3 |
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
|
|
|
76daa3 |
+ 0x80, 0x00, 0x80, 0x00, 0x00, 0x00 };
|
|
|
76daa3 |
+ /* Currently we don't advertise any of the "new" ISAv3.00 functionality */
|
|
|
76daa3 |
+ uint8_t pa_features_300[] = { 64, 0,
|
|
|
76daa3 |
+ 0xf6, 0x1f, 0xc7, 0xc0, 0x80, 0xf0, /* 0 - 5 */
|
|
|
76daa3 |
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, /* 6 - 11 */
|
|
|
76daa3 |
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, /* 12 - 17 */
|
|
|
76daa3 |
+ 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, /* 18 - 23 */
|
|
|
76daa3 |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 24 - 29 */
|
|
|
76daa3 |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 30 - 35 */
|
|
|
76daa3 |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 36 - 41 */
|
|
|
76daa3 |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 42 - 47 */
|
|
|
76daa3 |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 48 - 53 */
|
|
|
76daa3 |
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 54 - 59 */
|
|
|
76daa3 |
+ 0x00, 0x00, 0x00, 0x00 }; /* 60 - 63 */
|
|
|
76daa3 |
+
|
|
|
76daa3 |
+ uint8_t *pa_features;
|
|
|
76daa3 |
+ size_t pa_size;
|
|
|
76daa3 |
+
|
|
|
76daa3 |
+ switch (POWERPC_MMU_VER(env->mmu_model)) {
|
|
|
76daa3 |
+ case POWERPC_MMU_VER_2_06:
|
|
|
76daa3 |
+ pa_features = pa_features_206;
|
|
|
76daa3 |
+ pa_size = sizeof(pa_features_206);
|
|
|
76daa3 |
+ break;
|
|
|
76daa3 |
+ case POWERPC_MMU_VER_2_07:
|
|
|
76daa3 |
+ pa_features = pa_features_207;
|
|
|
76daa3 |
+ pa_size = sizeof(pa_features_207);
|
|
|
76daa3 |
+ break;
|
|
|
76daa3 |
+ case POWERPC_MMU_VER_3_00:
|
|
|
76daa3 |
+ pa_features = pa_features_300;
|
|
|
76daa3 |
+ pa_size = sizeof(pa_features_300);
|
|
|
76daa3 |
+ break;
|
|
|
76daa3 |
+ default:
|
|
|
76daa3 |
+ return;
|
|
|
76daa3 |
+ }
|
|
|
76daa3 |
+
|
|
|
76daa3 |
+ if (env->ci_large_pages) {
|
|
|
76daa3 |
+ /*
|
|
|
76daa3 |
+ * Note: we keep CI large pages off by default because a 64K capable
|
|
|
76daa3 |
+ * guest provisioned with large pages might otherwise try to map a qemu
|
|
|
76daa3 |
+ * framebuffer (or other kind of memory mapped PCI BAR) using 64K pages
|
|
|
76daa3 |
+ * even if that qemu runs on a 4k host.
|
|
|
76daa3 |
+ * We dd this bit back here if we are confident this is not an issue
|
|
|
76daa3 |
+ */
|
|
|
76daa3 |
+ pa_features[3] |= 0x20;
|
|
|
76daa3 |
+ }
|
|
|
76daa3 |
+ if (kvmppc_has_cap_htm() && pa_size > 24) {
|
|
|
76daa3 |
+ pa_features[24] |= 0x80; /* Transactional memory support */
|
|
|
76daa3 |
+ }
|
|
|
76daa3 |
+
|
|
|
76daa3 |
+ _FDT((fdt_setprop(fdt, offset, "ibm,pa-features", pa_features, pa_size)));
|
|
|
76daa3 |
+}
|
|
|
76daa3 |
+
|
|
|
76daa3 |
static int spapr_fixup_cpu_dt(void *fdt, sPAPRMachineState *spapr)
|
|
|
76daa3 |
{
|
|
|
76daa3 |
int ret = 0, offset, cpus_offset;
|
|
|
76daa3 |
@@ -379,67 +440,6 @@ static int spapr_populate_memory(sPAPRMachineState *spapr, void *fdt)
|
|
|
76daa3 |
return 0;
|
|
|
76daa3 |
}
|
|
|
76daa3 |
|
|
|
76daa3 |
-/* Populate the "ibm,pa-features" property */
|
|
|
76daa3 |
-static void spapr_populate_pa_features(CPUPPCState *env, void *fdt, int offset)
|
|
|
76daa3 |
-{
|
|
|
76daa3 |
- uint8_t pa_features_206[] = { 6, 0,
|
|
|
76daa3 |
- 0xf6, 0x1f, 0xc7, 0x00, 0x80, 0xc0 };
|
|
|
76daa3 |
- uint8_t pa_features_207[] = { 24, 0,
|
|
|
76daa3 |
- 0xf6, 0x1f, 0xc7, 0xc0, 0x80, 0xf0,
|
|
|
76daa3 |
- 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
76daa3 |
- 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
|
|
|
76daa3 |
- 0x80, 0x00, 0x80, 0x00, 0x00, 0x00 };
|
|
|
76daa3 |
- /* Currently we don't advertise any of the "new" ISAv3.00 functionality */
|
|
|
76daa3 |
- uint8_t pa_features_300[] = { 64, 0,
|
|
|
76daa3 |
- 0xf6, 0x1f, 0xc7, 0xc0, 0x80, 0xf0, /* 0 - 5 */
|
|
|
76daa3 |
- 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, /* 6 - 11 */
|
|
|
76daa3 |
- 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, /* 12 - 17 */
|
|
|
76daa3 |
- 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, /* 18 - 23 */
|
|
|
76daa3 |
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 24 - 29 */
|
|
|
76daa3 |
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 30 - 35 */
|
|
|
76daa3 |
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 36 - 41 */
|
|
|
76daa3 |
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 42 - 47 */
|
|
|
76daa3 |
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 48 - 53 */
|
|
|
76daa3 |
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 54 - 59 */
|
|
|
76daa3 |
- 0x00, 0x00, 0x00, 0x00 }; /* 60 - 63 */
|
|
|
76daa3 |
-
|
|
|
76daa3 |
- uint8_t *pa_features;
|
|
|
76daa3 |
- size_t pa_size;
|
|
|
76daa3 |
-
|
|
|
76daa3 |
- switch (POWERPC_MMU_VER(env->mmu_model)) {
|
|
|
76daa3 |
- case POWERPC_MMU_VER_2_06:
|
|
|
76daa3 |
- pa_features = pa_features_206;
|
|
|
76daa3 |
- pa_size = sizeof(pa_features_206);
|
|
|
76daa3 |
- break;
|
|
|
76daa3 |
- case POWERPC_MMU_VER_2_07:
|
|
|
76daa3 |
- pa_features = pa_features_207;
|
|
|
76daa3 |
- pa_size = sizeof(pa_features_207);
|
|
|
76daa3 |
- break;
|
|
|
76daa3 |
- case POWERPC_MMU_VER_3_00:
|
|
|
76daa3 |
- pa_features = pa_features_300;
|
|
|
76daa3 |
- pa_size = sizeof(pa_features_300);
|
|
|
76daa3 |
- break;
|
|
|
76daa3 |
- default:
|
|
|
76daa3 |
- return;
|
|
|
76daa3 |
- }
|
|
|
76daa3 |
-
|
|
|
76daa3 |
- if (env->ci_large_pages) {
|
|
|
76daa3 |
- /*
|
|
|
76daa3 |
- * Note: we keep CI large pages off by default because a 64K capable
|
|
|
76daa3 |
- * guest provisioned with large pages might otherwise try to map a qemu
|
|
|
76daa3 |
- * framebuffer (or other kind of memory mapped PCI BAR) using 64K pages
|
|
|
76daa3 |
- * even if that qemu runs on a 4k host.
|
|
|
76daa3 |
- * We dd this bit back here if we are confident this is not an issue
|
|
|
76daa3 |
- */
|
|
|
76daa3 |
- pa_features[3] |= 0x20;
|
|
|
76daa3 |
- }
|
|
|
76daa3 |
- if (kvmppc_has_cap_htm() && pa_size > 24) {
|
|
|
76daa3 |
- pa_features[24] |= 0x80; /* Transactional memory support */
|
|
|
76daa3 |
- }
|
|
|
76daa3 |
-
|
|
|
76daa3 |
- _FDT((fdt_setprop(fdt, offset, "ibm,pa-features", pa_features, pa_size)));
|
|
|
76daa3 |
-}
|
|
|
76daa3 |
-
|
|
|
76daa3 |
static void spapr_populate_cpu_dt(CPUState *cs, void *fdt, int offset,
|
|
|
76daa3 |
sPAPRMachineState *spapr)
|
|
|
76daa3 |
{
|
|
|
76daa3 |
--
|
|
|
76daa3 |
1.8.3.1
|
|
|
76daa3 |
|