All of lore.kernel.org
 help / color / mirror / Atom feed
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;
> +}

  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 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.