qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 2/3] pseries: Add device tree properties for VMX/VSX


From: David Gibson
Subject: [Qemu-devel] [PATCH 2/3] pseries: Add device tree properties for VMX/VSX and DFP under kvm
Date: Fri, 30 Sep 2011 17:50:39 +1000

Sufficiently recent PAPR specifications define properties "ibm,vmx"
and "ibm,dfp" on the CPU node which advertise whether the VMX vector
extensions (or the later VSX version) and/or the Decimal Floating
Point operations from IBM's recent POWER CPUs are available.

Currently we do not put these in the guest device tree and the guest
kernel will consequently assume they are not available.  This is good,
because they are not supported under TCG.  VMX is similar enough to
Altivec that it might be trivial to support, but VSX and DFP would
both require significant work to support in TCG.

However, when running under kvm on a host which supports these
instructions, there's no reason not to let the guest use them.  This
patch, therefore, checks for the relevant support on the host CPU
and, if present, advertises them to the guest as well.

Signed-off-by: David Gibson <address@hidden>
---
 hw/spapr.c |   11 +++++++++--
 1 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/hw/spapr.c b/hw/spapr.c
index ea5690e..8089d83 100644
--- a/hw/spapr.c
+++ b/hw/spapr.c
@@ -187,6 +187,8 @@ static void *spapr_create_fdt_skel(const char *cpu_model,
         uint32_t tbfreq = kvm_enabled() ? kvmppc_get_tbfreq() : TIMEBASE_FREQ;
         uint32_t cpufreq = kvm_enabled() ?
             kvmppc_read_int_cpu_dt("clock-frequency") : 1000000000;
+        uint32_t vmx = kvm_enabled() ? kvmppc_read_int_cpu_dt("ibm,vmx") : 0;
+        uint32_t dfp = kvm_enabled() ? kvmppc_read_int_cpu_dt("ibm,dfp") : 0;
 
         if ((index % smt) != 0) {
             continue;
@@ -234,12 +236,17 @@ static void *spapr_create_fdt_skel(const char *cpu_model,
                                segs, sizeof(segs))));
         }
 
-        /* Advertise VMX/VSX (vector extensions) if available */
+        /* Advertise VMX/VSX (vector extensions) if available
+         *   0 / no property == no vector extensions
+         *   1               == VMX / Altivec available
+         *   2               == VSX available */
         if (vmx) {
             _FDT((fdt_property_cell(fdt, "ibm,vmx", vmx)));
         }
 
-        /* Advertise DFP (Decimal Floating Point) if available */
+        /* Advertise DFP (Decimal Floating Point) if available
+         *   0 / no property == no DFP
+         *   1               == DFP available */
         if (dfp) {
             _FDT((fdt_property_cell(fdt, "ibm,dfp", dfp)));
         }
-- 
1.7.6.3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]