public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Kurt Kennett <Kurt.Kennett@microsoft.com>
To: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: edk2-devel <edk2-devel@lists.01.org>
Subject: Re: Problem with Arm Mmu code in CpuDxe
Date: Wed, 21 Sep 2016 17:31:11 +0000	[thread overview]
Message-ID: <BL2PR03MB4339D494CAC627E8798AC259CF60@BL2PR03MB433.namprd03.prod.outlook.com> (raw)
In-Reply-To: <CAKv+Gu-uCgipjshBmJ8dnaJxYjMHcnp+0B8YbKBQoyZAh-HbZw@mail.gmail.com>

The memory map is initialized via ArmConfigureMmu, which builds the initial translation tables.  This code is in ArmPkg\Library\ArmMmuLib\Arm\ArmMmuLibCore.c, and it does "FillTranslationTable()".  This occurs in PEI/SEC before MMU is first enabled.  This code does not just use sections -- it uses PopulateLevel2PageTable to create page tables for regions that are not modulo 1MB in size.

The start of my memory map has:
Base 0x00000000
Size  0x00018000
Attr ARM_MEMORY_REGION_ATTRIBUTE_DEVICE

Which is the only region that matters really.

I know the ArmMmuLib was recently changed/moved.  Perhaps this is a side effect of that change?  Can the mover of that code comment?

It seems strange that Arm's code would set itself up one way but then assume another setup.

K2

-----Original Message-----
From: Ard Biesheuvel [mailto:ard.biesheuvel@linaro.org] 
Sent: Wednesday, September 21, 2016 10:21 AM
To: Kurt Kennett <Kurt.Kennett@microsoft.com>
Cc: edk2-devel <edk2-devel@lists.01.org>
Subject: Re: [edk2] Problem with Arm Mmu code in CpuDxe

On 21 September 2016 at 17:09, Kurt Kennett <Kurt.Kennett@microsoft.com> wrote:
> I am having a problem on my system (assert), and during investigation I may have found a problem with the Arm CpuDxe Mmu code that may affect all ARM platform users.
>
> CpuDxeInitialize is the entry point, and pretty soon after entry it does:
>
>   SyncCacheConfig (&mCpu);
>
> This calls into:
>   ArmPkg\Drivers\CpuDxe\Arm\Mmu.c
>
> The code asserts that the Mmu is enabled, gets the memory space map, then starts to process the page tables by getting the TTBR0 base address.

Before the assert, there is a comment that says

  // This code assumes MMU is enabled and filed [sic] with section translations

I don't know if this is a reasonable thing to assume, and how you end up violating this assumption, but it does explain why the code does not work correctly.

What does your memory map look like?

  reply	other threads:[~2016-09-21 17:31 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-21 16:09 Problem with Arm Mmu code in CpuDxe Kurt Kennett
2016-09-21 17:20 ` Ard Biesheuvel
2016-09-21 17:31   ` Kurt Kennett [this message]
2016-09-21 17:54   ` Kurt Kennett

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-list 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=BL2PR03MB4339D494CAC627E8798AC259CF60@BL2PR03MB433.namprd03.prod.outlook.com \
    --to=devel@edk2.groups.io \
    /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