All of lore.kernel.org
 help / color / mirror / Atom feed
From: KONRAD Frederic <frederic.konrad@adacore.com>
To: qemu-devel@nongnu.org
Cc: peter.maydell@linaro.org, alex.bennee@linaro.org,
	pbonzini@redhat.com, alistair@alistair23.me,
	frederic.konrad@adacore.com
Subject: [Qemu-devel] [PATCH v1 2/3] arm: fix the armv7m reset state
Date: Thu, 29 Jun 2017 11:28:52 +0200	[thread overview]
Message-ID: <1498728533-23160-3-git-send-email-frederic.konrad@adacore.com> (raw)
In-Reply-To: <1498728533-23160-1-git-send-email-frederic.konrad@adacore.com>

This fixes an odd bug when a ROM is present somewhere and an alias @0x00000000
is pointing to the ROM. The "if (rom)" test fails and we don't get a valid reset
state. QEMU later crashes with an exception because the ARMv7-M starts with the
ARM instruction set. (eg: PC & 0x01 is 0).

This patch uses memory_region_get_offset_within_address_space introduced before
to check if an alias doesn't point to a flash somewhere.

Signed-off-by: KONRAD Frederic <frederic.konrad@adacore.com>
---
 target/arm/cpu.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/target/arm/cpu.c b/target/arm/cpu.c
index 28a9141..b8afd97 100644
--- a/target/arm/cpu.c
+++ b/target/arm/cpu.c
@@ -201,6 +201,20 @@ static void arm_cpu_reset(CPUState *s)
 
         /* Load the initial SP and PC from the vector table at address 0 */
         rom = rom_ptr(0);
+
+        if (!rom) {
+            /* Sometimes address 0x00000000 is an alias to a flash which
+             * actually have a ROM.
+             */
+            MemoryRegionSection section;
+            hwaddr offset = 0;
+
+            section = memory_region_find(s->as->root, 0, 8);
+            offset = memory_region_get_offset_within_address_space(section.mr);
+            memory_region_unref(section.mr);
+            rom = rom_ptr(offset);
+        }
+
         if (rom) {
             /* Address zero is covered by ROM which hasn't yet been
              * copied into physical memory.
-- 
1.8.3.1

  parent reply	other threads:[~2017-06-29  9:29 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-29  9:28 [Qemu-devel] [PATCH v1 0/3] Some armv7m fixes KONRAD Frederic
2017-06-29  9:28 ` [Qemu-devel] [PATCH v1 1/3] add memory_region_get_offset_within_address_space KONRAD Frederic
2017-06-29  9:28 ` KONRAD Frederic [this message]
2017-06-29 15:14   ` [Qemu-devel] [PATCH v1 2/3] arm: fix the armv7m reset state Peter Maydell
2017-06-29 16:41     ` KONRAD Frederic
2017-06-29 16:45       ` Peter Maydell
2017-06-30  8:24         ` KONRAD Frederic
2017-06-30  9:06           ` Peter Maydell
2017-07-03  7:31             ` KONRAD Frederic
2017-07-03  8:51               ` Peter Maydell
2017-07-03  9:04                 ` KONRAD Frederic
2017-06-29  9:28 ` [Qemu-devel] [PATCH v1 3/3] armv7m_systick: abort instead of locking on a bad rate KONRAD Frederic
2017-06-29 12:35   ` Philippe Mathieu-Daudé
2017-06-29 12:43     ` Peter Maydell
2017-06-29 12:48       ` KONRAD Frederic
2017-06-29 13:02       ` Philippe Mathieu-Daudé
2017-06-29 13:17         ` KONRAD Frederic
2017-07-06 23:49 ` [Qemu-devel] [PATCH v1 0/3] Some armv7m fixes no-reply
2017-07-07  0:03   ` Fam Zheng

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=1498728533-23160-3-git-send-email-frederic.konrad@adacore.com \
    --to=frederic.konrad@adacore.com \
    --cc=alex.bennee@linaro.org \
    --cc=alistair@alistair23.me \
    --cc=pbonzini@redhat.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.