All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Andreas Färber" <andreas.faerber@web.de>
To: qemu-devel@nongnu.org
Cc: giancarlo.asnaghi@st.com,
	"Andreas Färber" <andreas.faerber@web.de>,
	"Paul Brook" <paul@codesourcery.com>,
	"Peter Maydell" <peter.maydell@linaro.org>
Subject: [Qemu-devel] [RFC v2 2/2] target-arm: Add support for Cortex-R4F
Date: Sat, 22 Sep 2012 13:45:54 +0200	[thread overview]
Message-ID: <1348314355-10992-2-git-send-email-andreas.faerber@web.de> (raw)
In-Reply-To: <1348314355-10992-1-git-send-email-andreas.faerber@web.de>

With QOM ARMCPU we can now distinguish between -cpu cortex-r4 and
-cpu cortex-r4f despite identical MIDR.

Signed-off-by: Andreas Färber <andreas.faerber@web.de>
---
 target-arm/cpu.c |   47 +++++++++++++++++++++++++++++++++++++++++++++++
 1 Datei geändert, 47 Zeilen hinzugefügt(+)

diff --git a/target-arm/cpu.c b/target-arm/cpu.c
index 6726498..e176559 100644
--- a/target-arm/cpu.c
+++ b/target-arm/cpu.c
@@ -405,6 +405,52 @@ static void cortex_r4_initfn(Object *obj)
     cpu->id_isar5 = 0x0;
 }
 
+static const struct {
+    uint8_t r;
+    uint8_t p;
+    uint8_t value;
+} cortexr4_fpsid_revs[] = {
+    { 1, 0, 0x3 },
+    { 1, 1, 0x4 },
+    { 1, 2, 0x6 },
+    { 1, 3, 0x7 },
+    { 1, 4, 0x8 },
+    {}
+};
+
+static void cortex_r4f_initfn(Object *obj)
+{
+    ARMCPU *cpu = ARM_CPU(obj);
+
+    /* Cortex-R4F = Cortex-R4 + FPU */
+    cortex_r4_initfn(obj);
+
+    set_feature(&cpu->env, ARM_FEATURE_VFP3);
+    /* TODO VFPv3-D16 */
+    {
+        /* PMM didn't like this dynamic revision lookup... */
+        /* TODO: maybe weave cross-checks into QOM properties instead? */
+        uint8_t r = (cpu->midr >> 20) & 0xf;
+        uint8_t p = cpu->midr & 0xf;
+        uint8_t rev = 0;
+        int i;
+        /* Calculate FPSID value matching to MIDR */
+        for (i = 0; cortexr4_fpsid_revs[i].r != 0; i++) {
+            if (cortexr4_fpsid_revs[i].r == r &&
+                cortexr4_fpsid_revs[i].p == p) {
+                rev = cortexr4_fpsid_revs[i].value;
+                break;
+            }
+        }
+        if (rev == 0) {
+            cpu_abort(&cpu->env,
+                      "Cortex-R4F r%" PRIu8 "p%" PRIu8 " unsupported",
+                      r, p);
+        }
+        cpu->reset_fpsid = 0x41023140 | (rev & 0xf);
+    }
+}
+
 static const ARMCPRegInfo cortexa8_cp_reginfo[] = {
     { .name = "L2LOCKDOWN", .cp = 15, .crn = 9, .crm = 0, .opc1 = 1, .opc2 = 0,
       .access = PL1_RW, .type = ARM_CP_CONST, .resetvalue = 0 },
@@ -761,6 +807,7 @@ static const ARMCPUInfo arm_cpus[] = {
     { .name = "arm11mpcore", .initfn = arm11mpcore_initfn },
     { .name = "cortex-m3",   .initfn = cortex_m3_initfn },
     { .name = "cortex-r4",   .initfn = cortex_r4_initfn },
+    { .name = "cortex-r4f",  .initfn = cortex_r4f_initfn },
     { .name = "cortex-a8",   .initfn = cortex_a8_initfn },
     { .name = "cortex-a9",   .initfn = cortex_a9_initfn },
     { .name = "cortex-a15",  .initfn = cortex_a15_initfn },
-- 
1.7.10.4

  reply	other threads:[~2012-09-22 11:46 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-21 15:15 [Qemu-devel] ARM Cortex-R4 support ? Giancarlo ASNAGHI
2012-09-21 17:05 ` Andreas Färber
2012-09-22 11:45   ` [Qemu-devel] [RFC v2 1/2] target-arm: Prepare support for Cortex-R4 Andreas Färber
2012-09-22 11:45     ` Andreas Färber [this message]
2012-09-22 14:43       ` [Qemu-devel] [RFC v2 2/2] target-arm: Add support for Cortex-R4F Blue Swirl
2012-09-22 14:54       ` Peter Maydell
2012-09-22 13:05     ` [Qemu-devel] [RFC v2 1/2] target-arm: Prepare support for Cortex-R4 Peter Maydell
2012-09-22 13:56       ` Andreas Färber
2012-09-22 14:30         ` Peter Maydell
2012-09-24  7:48   ` [Qemu-devel] ARM Cortex-R4 support ? Giancarlo ASNAGHI
2012-09-25  9:20   ` Giancarlo ASNAGHI

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=1348314355-10992-2-git-send-email-andreas.faerber@web.de \
    --to=andreas.faerber@web.de \
    --cc=giancarlo.asnaghi@st.com \
    --cc=paul@codesourcery.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.