From: Stephen Warren <swarren@wwwdotorg.org>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 2/9] arm64: Make full va map code more dynamic
Date: Mon, 22 Feb 2016 11:42:23 -0700 [thread overview]
Message-ID: <56CB568F.4030407@wwwdotorg.org> (raw)
In-Reply-To: <1456106232-233210-3-git-send-email-agraf@suse.de>
On 02/21/2016 06:57 PM, Alexander Graf wrote:
> The idea to generate our pages tables from an array of memory ranges
> is very sound. However, instead of hard coding the code to create up
> to 2 levels of 64k granule page tables, we really should just create
> normal 4k page tables that allow us to set caching attributes on 2M
> or 4k level later on.
>
> So this patch moves the full_va mapping code to 4k page size and
> makes it fully flexible to dynamically create as many levels as
> necessary for a map (including dynamic 1G/2M pages). It also adds
> support to dynamically split a large map into smaller ones when
> some code wants to set dcache attributes.
>
> With all this in place, there is very little reason to create your
> own page tables in board specific files.
> +/* Returns the estimated required size of all page tables */
> +u64 get_page_table_size(void)
> +{
> + int i;
> + u64 one_pt = MAX_PTE_ENTRIES * sizeof(u64);
> + u64 size = 0;
> +
> + /* root page table */
> + size += one_pt;
> +
> + for (i = 0; i < ARRAY_SIZE(mem_map); i++) {
> + struct mm_region *map = &mem_map[i];
> +
> + /* Account for Lv0 page tables */
> + size += one_pt * ((map->size >> 39) + 1);
> +
> + /* 1GB aligned pages fit already, so count the others */
> + if (map->size & 0x3fffffffULL)
> + size += one_pt;
> + if (map->base & 0x3fffffffULL)
> + size += one_pt;
One more comment here: The two conditions should check start and end,
not start and size. The reason is that for a region with aligned size
but unaligned start, the end is not aligned and hence needs a next-level
page table allocated to correctly represent that. That won't be
accounted for in the current code, but would be if end (==start+size)
was used instead.
> + }
> +
> + /* Assume we may have to split up to 4 more page tables off */
> + size += one_pt * 4;
> +
> + return size;
> +}
next prev parent reply other threads:[~2016-02-22 18:42 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-22 1:57 [U-Boot] [PATCH 0/9] arm64: Unify MMU code Alexander Graf
2016-02-22 1:57 ` [U-Boot] [PATCH 1/9] thunderx: Calculate TCR dynamically Alexander Graf
2016-02-22 1:57 ` [U-Boot] [PATCH 2/9] arm64: Make full va map code more dynamic Alexander Graf
2016-02-22 18:18 ` Stephen Warren
2016-02-22 18:37 ` Alexander Graf
2016-02-22 18:45 ` Stephen Warren
2016-02-24 10:21 ` Alexander Graf
2016-02-22 18:42 ` Stephen Warren [this message]
2016-02-23 13:17 ` Simon Glass
2016-02-23 17:21 ` Stephen Warren
2016-02-23 17:30 ` Simon Glass
2016-02-23 17:40 ` Stephen Warren
2016-02-23 20:00 ` Simon Glass
2016-02-23 20:33 ` Stephen Warren
2016-02-24 4:42 ` Simon Glass
2016-02-24 16:56 ` Stephen Warren
2016-02-24 10:55 ` Alexander Graf
2016-02-24 17:01 ` Stephen Warren
2016-02-24 17:04 ` Alexander Graf
2016-02-22 1:57 ` [U-Boot] [PATCH 3/9] zymqmp: Replace home grown mmu code with generic table approach Alexander Graf
2016-02-23 11:04 ` Michal Simek
2016-02-23 11:33 ` Alexander Graf
2016-02-23 13:07 ` Michal Simek
2016-02-26 0:49 ` Alexander Graf
2016-02-26 8:29 ` Michal Simek
2016-02-26 8:55 ` Alexander Graf
2017-02-16 15:26 ` brettstahlman
2016-02-22 1:57 ` [U-Boot] [PATCH 4/9] tegra: " Alexander Graf
2016-02-22 18:28 ` Stephen Warren
2016-02-23 10:37 ` Michal Simek
2016-02-23 17:29 ` Stephen Warren
2016-02-24 10:28 ` Alexander Graf
2016-02-22 1:57 ` [U-Boot] [PATCH 5/9] vexpress64: Add MMU tables Alexander Graf
2016-02-22 1:57 ` [U-Boot] [PATCH 6/9] dwmmc: Increase retry timeout Alexander Graf
2016-02-22 1:57 ` [U-Boot] [PATCH 7/9] hikey: Add MMU tables Alexander Graf
2016-02-22 1:57 ` [U-Boot] [PATCH 8/9] arm64: Remove non-full-va map code Alexander Graf
2016-02-22 1:57 ` [U-Boot] [PATCH 9/9] arm64: Only allow dcache disabled in SPL builds Alexander Graf
2016-02-22 17:37 ` [U-Boot] [PATCH 0/9] arm64: Unify MMU code york sun
2016-02-22 18:02 ` Alexander Graf
2016-02-22 18:12 ` york sun
2016-02-22 18:31 ` Alexander Graf
2016-02-22 18:39 ` york sun
2016-02-22 19:42 ` Alexander Graf
2016-02-22 19:52 ` york sun
2016-02-22 20:09 ` Alexander Graf
2016-02-22 20:15 ` york sun
2016-02-24 10:19 ` Alexander Graf
2016-02-24 16:57 ` Stephen Warren
2016-02-22 18:34 ` Stephen Warren
2016-02-24 10:33 ` 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=56CB568F.4030407@wwwdotorg.org \
--to=swarren@wwwdotorg.org \
--cc=u-boot@lists.denx.de \
/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