qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Michael Roth <mdroth@linux.vnet.ibm.com>
To: qemu-devel@nongnu.org
Cc: qemu-stable@nongnu.org
Subject: [Qemu-devel] [PATCH 15/25] arm/virt: Use PSCI v0.2 function IDs in the DT when KVM uses PSCI v0.2
Date: Wed, 27 Aug 2014 12:36:12 -0500	[thread overview]
Message-ID: <1409160982-16389-16-git-send-email-mdroth@linux.vnet.ibm.com> (raw)
In-Reply-To: <1409160982-16389-1-git-send-email-mdroth@linux.vnet.ibm.com>

From: Christoffer Dall <christoffer.dall@linaro.org>

The current code supplies the PSCI v0.1 function IDs in the DT even when
KVM uses PSCI v0.2.

This will break guest kernels that only support PSCI v0.1 as they will
use the IDs provided in the DT.  Guest kernels with PSCI v0.2 support
are not affected by this patch, because they ignore the function IDs in
the device tree and rely on the architecture definition.

Define QEMU versions of the constants and check that they correspond to
the Linux defines on Linux build hosts.  After this patch, both guest
kernels with PSCI v0.1 support and guest kernels with PSCI v0.2 should
work.

Tested on TC2 for 32-bit and APM Mustang for 64-bit (aarch64 guest
only).  Both cases tested with 3.14 and linus/master and verified I
could bring up 2 cpus with both guest kernels.  Also tested 32-bit with
a 3.14 host kernel with only PSCI v0.1 and both guests booted here as
well.

Cc: qemu-stable@nongnu.org
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
(cherry picked from commit 863714ba6cdc09d1a84069815dc67c8da66b0a29)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
 hw/arm/virt.c           | 31 ++++++++++++++++++++++++++-----
 target-arm/kvm-consts.h | 27 +++++++++++++++++++++++++++
 2 files changed, 53 insertions(+), 5 deletions(-)

diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index a6fd5e6..c8fdac4 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -194,20 +194,41 @@ static void fdt_add_psci_node(const VirtBoardInfo *vbi)
 
     /* No PSCI for TCG yet */
     if (kvm_enabled()) {
+        uint32_t cpu_suspend_fn;
+        uint32_t cpu_off_fn;
+        uint32_t cpu_on_fn;
+        uint32_t migrate_fn;
+
         qemu_fdt_add_subnode(fdt, "/psci");
         if (armcpu->psci_version == 2) {
             const char comp[] = "arm,psci-0.2\0arm,psci";
             qemu_fdt_setprop(fdt, "/psci", "compatible", comp, sizeof(comp));
+
+            cpu_off_fn = QEMU_PSCI_0_2_FN_CPU_OFF;
+            if (arm_feature(&armcpu->env, ARM_FEATURE_AARCH64)) {
+                cpu_suspend_fn = QEMU_PSCI_0_2_FN64_CPU_SUSPEND;
+                cpu_on_fn = QEMU_PSCI_0_2_FN64_CPU_ON;
+                migrate_fn = QEMU_PSCI_0_2_FN64_MIGRATE;
+            } else {
+                cpu_suspend_fn = QEMU_PSCI_0_2_FN_CPU_SUSPEND;
+                cpu_on_fn = QEMU_PSCI_0_2_FN_CPU_ON;
+                migrate_fn = QEMU_PSCI_0_2_FN_MIGRATE;
+            }
         } else {
             qemu_fdt_setprop_string(fdt, "/psci", "compatible", "arm,psci");
+
+            cpu_suspend_fn = QEMU_PSCI_0_1_FN_CPU_SUSPEND;
+            cpu_off_fn = QEMU_PSCI_0_1_FN_CPU_OFF;
+            cpu_on_fn = QEMU_PSCI_0_1_FN_CPU_ON;
+            migrate_fn = QEMU_PSCI_0_1_FN_MIGRATE;
         }
 
         qemu_fdt_setprop_string(fdt, "/psci", "method", "hvc");
-        qemu_fdt_setprop_cell(fdt, "/psci", "cpu_suspend",
-                                  QEMU_PSCI_0_1_FN_CPU_SUSPEND);
-        qemu_fdt_setprop_cell(fdt, "/psci", "cpu_off", QEMU_PSCI_0_1_FN_CPU_OFF);
-        qemu_fdt_setprop_cell(fdt, "/psci", "cpu_on", QEMU_PSCI_0_1_FN_CPU_ON);
-        qemu_fdt_setprop_cell(fdt, "/psci", "migrate", QEMU_PSCI_0_1_FN_MIGRATE);
+
+        qemu_fdt_setprop_cell(fdt, "/psci", "cpu_suspend", cpu_suspend_fn);
+        qemu_fdt_setprop_cell(fdt, "/psci", "cpu_off", cpu_off_fn);
+        qemu_fdt_setprop_cell(fdt, "/psci", "cpu_on", cpu_on_fn);
+        qemu_fdt_setprop_cell(fdt, "/psci", "migrate", migrate_fn);
     }
 }
 
diff --git a/target-arm/kvm-consts.h b/target-arm/kvm-consts.h
index bcad7ba..091c126 100644
--- a/target-arm/kvm-consts.h
+++ b/target-arm/kvm-consts.h
@@ -17,6 +17,7 @@
 #ifdef CONFIG_KVM
 #include "qemu/compiler.h"
 #include <linux/kvm.h>
+#include <linux/psci.h>
 
 #define MISMATCH_CHECK(X, Y) QEMU_BUILD_BUG_ON(X != Y)
 
@@ -50,6 +51,32 @@ MISMATCH_CHECK(QEMU_PSCI_0_1_FN_CPU_OFF, KVM_PSCI_FN_CPU_OFF)
 MISMATCH_CHECK(QEMU_PSCI_0_1_FN_CPU_ON, KVM_PSCI_FN_CPU_ON)
 MISMATCH_CHECK(QEMU_PSCI_0_1_FN_MIGRATE, KVM_PSCI_FN_MIGRATE)
 
+#define QEMU_PSCI_0_2_FN_BASE 0x84000000
+#define QEMU_PSCI_0_2_FN(n) (QEMU_PSCI_0_2_FN_BASE + (n))
+
+#define QEMU_PSCI_0_2_64BIT 0x40000000
+#define QEMU_PSCI_0_2_FN64_BASE \
+        (QEMU_PSCI_0_2_FN_BASE + QEMU_PSCI_0_2_64BIT)
+#define QEMU_PSCI_0_2_FN64(n) (QEMU_PSCI_0_2_FN64_BASE + (n))
+
+#define QEMU_PSCI_0_2_FN_CPU_SUSPEND QEMU_PSCI_0_2_FN(1)
+#define QEMU_PSCI_0_2_FN_CPU_OFF QEMU_PSCI_0_2_FN(2)
+#define QEMU_PSCI_0_2_FN_CPU_ON QEMU_PSCI_0_2_FN(3)
+#define QEMU_PSCI_0_2_FN_MIGRATE QEMU_PSCI_0_2_FN(5)
+
+#define QEMU_PSCI_0_2_FN64_CPU_SUSPEND QEMU_PSCI_0_2_FN64(1)
+#define QEMU_PSCI_0_2_FN64_CPU_OFF QEMU_PSCI_0_2_FN64(2)
+#define QEMU_PSCI_0_2_FN64_CPU_ON QEMU_PSCI_0_2_FN64(3)
+#define QEMU_PSCI_0_2_FN64_MIGRATE QEMU_PSCI_0_2_FN64(5)
+
+MISMATCH_CHECK(QEMU_PSCI_0_2_FN_CPU_SUSPEND, PSCI_0_2_FN_CPU_SUSPEND)
+MISMATCH_CHECK(QEMU_PSCI_0_2_FN_CPU_OFF, PSCI_0_2_FN_CPU_OFF)
+MISMATCH_CHECK(QEMU_PSCI_0_2_FN_CPU_ON, PSCI_0_2_FN_CPU_ON)
+MISMATCH_CHECK(QEMU_PSCI_0_2_FN_MIGRATE, PSCI_0_2_FN_MIGRATE)
+MISMATCH_CHECK(QEMU_PSCI_0_2_FN64_CPU_SUSPEND, PSCI_0_2_FN64_CPU_SUSPEND)
+MISMATCH_CHECK(QEMU_PSCI_0_2_FN64_CPU_ON, PSCI_0_2_FN64_CPU_ON)
+MISMATCH_CHECK(QEMU_PSCI_0_2_FN64_MIGRATE, PSCI_0_2_FN64_MIGRATE)
+
 /* Note that KVM uses overlapping values for AArch32 and AArch64
  * target CPU numbers. AArch32 targets:
  */
-- 
1.9.1

  parent reply	other threads:[~2014-08-27 17:37 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-27 17:35 [Qemu-devel] Patch Round-up for stable 2.1.1, freeze on 2014-09-03 Michael Roth
2014-08-27 17:35 ` [Qemu-devel] [PATCH 01/25] qmp: hide "hotplugged" device property from device-list-properties Michael Roth
2014-08-27 17:35 ` [Qemu-devel] [PATCH 02/25] qdev-monitor: include QOM properties in -device FOO, help output Michael Roth
2014-08-27 17:36 ` [Qemu-devel] [PATCH 03/25] vfio: Fix MSI-X vector expansion Michael Roth
2014-08-27 17:36 ` [Qemu-devel] [PATCH 04/25] l2tpv3 (configure): it is linux-specific Michael Roth
2014-08-27 17:36 ` [Qemu-devel] [PATCH 05/25] ide: only constrain read/write requests to drive size, not other types Michael Roth
2014-08-27 17:36 ` [Qemu-devel] [PATCH 06/25] pci: Use bus master address space for delivering MSI/MSI-X messages Michael Roth
2014-08-28 10:18   ` [Qemu-devel] [Qemu-stable] " Greg Kurz
2014-08-28 14:39     ` Michael Roth
2014-09-18 15:36       ` Greg Kurz
2014-08-27 17:36 ` [Qemu-devel] [PATCH 07/25] hw:i386: typo fix: MEMORY_HOPTLUG_DEVICE -> MEMORY_HOTPLUG_DEVICE Michael Roth
2014-08-27 17:36 ` [Qemu-devel] [PATCH 08/25] pc-dimm: validate node property Michael Roth
2014-08-27 17:36 ` [Qemu-devel] [PATCH 09/25] pc-dimm: fix up error message Michael Roth
2014-08-27 17:36 ` [Qemu-devel] [PATCH 10/25] numa: show hex number in error message for consistency and prefix them with 0x Michael Roth
2014-08-27 17:36 ` [Qemu-devel] [PATCH 11/25] acpi: align RSDP Michael Roth
2014-08-27 17:36 ` [Qemu-devel] [PATCH 12/25] virtio-blk: fix reference a pointer which might be freed Michael Roth
2014-08-27 17:36 ` [Qemu-devel] [PATCH 13/25] target-arm: Fix return address for A64 BRK instructions Michael Roth
2014-08-27 17:36 ` [Qemu-devel] [PATCH 14/25] target-arm: Rename QEMU PSCI v0.1 definitions Michael Roth
2014-08-27 17:36 ` Michael Roth [this message]
2014-08-27 17:36 ` [Qemu-devel] [PATCH 16/25] block/iscsi: fix memory corruption on iscsi resize Michael Roth
2014-08-27 17:36 ` [Qemu-devel] [PATCH 17/25] raw-posix: fix O_DIRECT short reads Michael Roth
2014-08-27 17:36 ` [Qemu-devel] [PATCH 18/25] qemu-iotests: add test case 101 for short file I/O Michael Roth
2014-08-27 17:36 ` [Qemu-devel] [PATCH 19/25] blkdebug: Delete BH in bdrv_aio_cancel Michael Roth
2014-08-27 17:36 ` [Qemu-devel] [PATCH 20/25] vmxnet3: Pad short frames to minimum size (60 bytes) Michael Roth
2014-08-27 17:36 ` [Qemu-devel] [PATCH 21/25] hostmem: set MPOL_MF_MOVE Michael Roth
2014-08-27 17:36 ` [Qemu-devel] [PATCH 22/25] pcihp: fix possible array out of bounds Michael Roth
2014-08-27 17:36 ` [Qemu-devel] [PATCH 23/25] pc: reserve more memory for ACPI for new machine types Michael Roth
2014-08-27 17:36 ` [Qemu-devel] [PATCH 24/25] thread-pool: avoid per-thread-pool EventNotifier Michael Roth
2014-08-27 17:36 ` [Qemu-devel] [PATCH 25/25] thread-pool: avoid deadlock in nested aio_poll() calls Michael Roth
2014-08-29  0:42 ` [Qemu-devel] Patch Round-up for stable 2.1.1, freeze on 2014-09-03 zhanghailiang
2014-08-29 15:12 ` Paolo Bonzini
2014-09-02  8:36 ` Michael S. Tsirkin
2014-09-02 15:20 ` [Qemu-devel] [Qemu-stable] " Michael Roth
2014-09-02 15:25   ` Michael S. Tsirkin
2014-09-02 15:27     ` Michael S. Tsirkin
2014-09-02 17:33       ` Andrey Korolyov
2014-09-02 19:53         ` Michael Roth
2014-09-02 21:03         ` Michael S. Tsirkin
2014-09-02 21:29           ` Andrey Korolyov
2014-09-02 21:51             ` Michael S. Tsirkin
2014-09-02 22:09               ` Andrey Korolyov
2014-09-02 22:17                 ` Andrey Korolyov
2014-09-03  6:10                   ` Michael S. Tsirkin
2014-09-03  7:43                     ` Andrey Korolyov
2014-09-03  8:13                       ` Michael S. Tsirkin
2014-09-03  8:36                         ` Andrey Korolyov
2014-09-03  9:07                           ` Michael S. Tsirkin
2014-09-03  9:18                             ` Andrey Korolyov
2014-09-03  9:31                               ` Michael S. Tsirkin
2014-09-03  6:35                   ` Michael S. Tsirkin
2014-09-03  5:57                     ` Jason Wang
2014-09-03  6:37                   ` Michael S. Tsirkin
2014-09-02 21:58             ` Michael Roth
2014-09-03 17:57               ` Michael S. Tsirkin
2014-09-03 18:59                 ` Michael Roth
2014-09-04 23:32   ` Michael Roth

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1409160982-16389-16-git-send-email-mdroth@linux.vnet.ibm.com \
    --to=mdroth@linux.vnet.ibm.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-stable@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).