qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Alexander Graf <agraf@suse.de>
To: qemu-ppc@nongnu.org
Cc: Blue Swirl <blauwirbel@gmail.com>,
	qemu-devel@nongnu.org, Aurelien Jarno <aurelien@aurel32.net>
Subject: [Qemu-devel] [PATCH 31/32] mac-io: Add escc-legacy memory alias region
Date: Sun, 30 Jun 2013 03:45:08 +0200	[thread overview]
Message-ID: <1372556709-23868-32-git-send-email-agraf@suse.de> (raw)
In-Reply-To: <1372556709-23868-1-git-send-email-agraf@suse.de>

Mac OS X's debugging serial driver accesses the ESCC through a different
register layout, called "escc-legacy". This layout differs from the normal
escc register layout purely by the location of the respective registers.

This patch adds a memory alias region that takes normal escc registers and
maps them into the escc-legacy register space.

With this patch applied, a Mac OS X guest successfully emits debug output
on the serial port when run with debug parameters set, for example by running:

  $ qemu-system-ppc -prom-env -'boot-args=-v debug=0x8 io=0xff serial=0x3' \
                    -cdrom 10.4.iso -boot d

Signed-off-by: Alexander Graf <agraf@suse.de>
---
 hw/misc/macio/macio.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)

diff --git a/hw/misc/macio/macio.c b/hw/misc/macio/macio.c
index 2f389dd..fd4c8e5 100644
--- a/hw/misc/macio/macio.c
+++ b/hw/misc/macio/macio.c
@@ -69,12 +69,59 @@ typedef struct NewWorldMacIOState {
     MACIOIDEState ide[2];
 } NewWorldMacIOState;
 
+/*
+ * The mac-io has two interfaces to the ESCC. One is called "escc-legacy",
+ * while the other one is the normal, current ESCC interface.
+ *
+ * The magic below creates memory aliases to spawn the escc-legacy device
+ * purely by rerouting the respective registers to our escc region. This
+ * works because the only difference between the two memory regions is the
+ * register layout, not their semantics.
+ *
+ * Reference: ftp://ftp.software.ibm.com/rs6000/technology/spec/chrp/inwork/CHRP_IORef_1.0.pdf
+ */
+static void macio_escc_legacy_setup(MacIOState *macio_state)
+{
+    MemoryRegion *escc_legacy = g_new(MemoryRegion, 1);
+    MemoryRegion *bar = &macio_state->bar;
+    int i;
+    static const int maps[] = {
+        0x00, 0x00,
+        0x02, 0x20,
+        0x04, 0x10,
+        0x06, 0x30,
+        0x08, 0x40,
+        0x0A, 0x50,
+        0x60, 0x60,
+        0x70, 0x70,
+        0x80, 0x70,
+        0x90, 0x80,
+        0xA0, 0x90,
+        0xB0, 0xA0,
+        0xC0, 0xB0,
+        0xD0, 0xC0,
+        0xE0, 0xD0,
+        0xF0, 0xE0,
+    };
+
+    memory_region_init(escc_legacy, "escc-legacy", 256);
+    for (i = 0; i < ARRAY_SIZE(maps); i += 2) {
+        MemoryRegion *port = g_new(MemoryRegion, 1);
+        memory_region_init_alias(port, "escc-legacy-port", macio_state->escc_mem,
+                                 maps[i+1], 0x2);
+        memory_region_add_subregion(escc_legacy, maps[i], port);
+    }
+
+    memory_region_add_subregion(bar, 0x12000, escc_legacy);
+}
+
 static void macio_bar_setup(MacIOState *macio_state)
 {
     MemoryRegion *bar = &macio_state->bar;
 
     if (macio_state->escc_mem) {
         memory_region_add_subregion(bar, 0x13000, macio_state->escc_mem);
+        macio_escc_legacy_setup(macio_state);
     }
 }
 
-- 
1.8.1.4

  parent reply	other threads:[~2013-06-30  1:45 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-30  1:44 [Qemu-devel] [PULL 00/32] ppc patch queue 2013-06-30 Alexander Graf
2013-06-30  1:44 ` [Qemu-devel] [PATCH 01/32] KVM: Don't assume that mpstate exists with in-kernel PIC always Alexander Graf
2013-06-30  1:44 ` [Qemu-devel] [PATCH 02/32] KVM: Export kvm_init_irq_routing Alexander Graf
2013-06-30  1:44 ` [Qemu-devel] [PATCH 03/32] KVM: MSI: Swap payload to native endianness Alexander Graf
2013-06-30  1:44 ` [Qemu-devel] [PATCH 04/32] openpic: factor out some common defines into openpic.h Alexander Graf
2013-06-30  1:44 ` [Qemu-devel] [PATCH 05/32] PPC: e500: factor out mpic init code Alexander Graf
2013-06-30  1:44 ` [Qemu-devel] [PATCH 06/32] KVM: PIC: Only commit irq routing when necessary Alexander Graf
2013-06-30  1:44 ` [Qemu-devel] [PATCH 07/32] PPC: Add non-kvm stub file Alexander Graf
2013-06-30  1:44 ` [Qemu-devel] [PATCH 08/32] kvm/openpic: in-kernel mpic support Alexander Graf
2013-06-30  6:13   ` Andreas Färber
2013-06-30 23:01     ` Alexander Graf
2013-06-30 23:18       ` Andreas Färber
2013-07-01 11:17         ` Andreas Färber
2013-06-30  1:44 ` [Qemu-devel] [PATCH 09/32] intc/openpic: QOM'ify Alexander Graf
2013-06-30  1:44 ` [Qemu-devel] [PATCH 10/32] intc/openpic: Convert to QOM realize Alexander Graf
2013-06-30  1:44 ` [Qemu-devel] [PATCH 11/32] intc/openpic_kvm: Fix QOM and build issues Alexander Graf
2013-06-30  1:44 ` [Qemu-devel] [PATCH 12/32] mpc8544_guts: Fix MemoryRegion name Alexander Graf
2013-06-30  1:44 ` [Qemu-devel] [PATCH 13/32] mpc8544_guts: QOM'ify Alexander Graf
2013-06-30  1:44 ` [Qemu-devel] [PATCH 14/32] mpc8544_guts: Turn qdev initfn into instance_init Alexander Graf
2013-06-30  1:44 ` [Qemu-devel] [PATCH 15/32] target-ppc: Drop redundant flags assignments from CPU families Alexander Graf
2013-06-30  1:44 ` [Qemu-devel] [PATCH 16/32] ppc: do not register IABR SPR twice for 603e Alexander Graf
2013-06-30  1:44 ` [Qemu-devel] [PATCH 17/32] target-ppc: Change default machine for 64-bit Alexander Graf
2013-06-30  1:44 ` [Qemu-devel] [PATCH 18/32] spapr-rtas: add CPU argument to RTAS calls Alexander Graf
2013-06-30  1:44 ` [Qemu-devel] [PATCH 19/32] pseries: Fix compiler warning (conversion of pointer to integral value) Alexander Graf
2013-06-30  1:44 ` [Qemu-devel] [PATCH 20/32] target-ppc kvm: save cr register Alexander Graf
2013-06-30  1:44 ` [Qemu-devel] [PATCH 21/32] pseries: Update MAINTAINERS information Alexander Graf
2013-06-30  1:44 ` [Qemu-devel] [PATCH 22/32] Graphics: Switch to 800x600x32 as default mode Alexander Graf
2013-06-30  1:45 ` [Qemu-devel] [PATCH 23/32] booke_ppc: limit booke timer to max when timeout overflow Alexander Graf
2013-06-30  1:45 ` [Qemu-devel] [PATCH 24/32] target-ppc: Introduce unrealizefn for PowerPCCPU Alexander Graf
2013-06-30  1:45 ` [Qemu-devel] [PATCH 25/32] PPC: Add dump_mmu() for 6xx Alexander Graf
2013-06-30  1:45 ` [Qemu-devel] [PATCH 26/32] PPC: Fix GDB read on code area for PPC6xx Alexander Graf
2013-06-30  1:45 ` [Qemu-devel] [PATCH 27/32] PPC: Introduce an alias cache for faster lookups Alexander Graf
2013-06-30  6:25   ` Andreas Färber
2013-06-30 23:08     ` Alexander Graf
2013-06-30  1:45 ` [Qemu-devel] [PATCH 28/32] PPC: Add clock-frequency export for Mac machines Alexander Graf
2013-06-30  1:45 ` [Qemu-devel] [PATCH 29/32] PPC: Newworld: Add uninorth token register Alexander Graf
2013-06-30  1:45 ` [Qemu-devel] [PATCH 30/32] PPC: Newworld: Add second uninorth control register set Alexander Graf
2013-06-30  1:45 ` Alexander Graf [this message]
2013-06-30  1:45 ` [Qemu-devel] [PATCH 32/32] PPC: Ignore writes to L2CR Alexander Graf
2013-09-06 12:54   ` Julio Guerra
2013-09-25 13:00     ` Alexander Graf
2013-09-25 13:40       ` Julio Guerra
2013-06-30 23:14 ` [Qemu-devel] [Qemu-ppc] [PULL 00/32] ppc patch queue 2013-06-30 Alexander Graf

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=1372556709-23868-32-git-send-email-agraf@suse.de \
    --to=agraf@suse.de \
    --cc=aurelien@aurel32.net \
    --cc=blauwirbel@gmail.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@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).