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: Wed, 24 Feb 2016 09:56:44 -0700	[thread overview]
Message-ID: <56CDE0CC.6060803@wwwdotorg.org> (raw)
In-Reply-To: <CAPnjgZ1GZc0wipcbjm4A7YO4FPvjNY69KqUWCAnpmu7dzq2JXw@mail.gmail.com>

On 02/23/2016 09:42 PM, Simon Glass wrote:
> Hi Stephen,
>
> On 23 February 2016 at 13:33, Stephen Warren <swarren@wwwdotorg.org> wrote:
>> On 02/23/2016 01:00 PM, Simon Glass wrote:
>>>
>>> Hi Stephen,
>>>
>>> On 23 February 2016 at 10:40, Stephen Warren <swarren@wwwdotorg.org>
>>> wrote:
>>>>
>>>> On 02/23/2016 10:30 AM, Simon Glass wrote:
>>>>>
>>>>>
>>>>> Hi Stephen,
>>>>>
>>>>> On 23 February 2016 at 10:21, Stephen Warren <swarren@wwwdotorg.org>
>>>>> wrote:
>>>>>>
>>>>>>
>>>>>> On 02/23/2016 06:17 AM, Simon Glass wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Hi Alex,
>>>>>>>
>>>>>>> On 21 February 2016 at 18:57, Alexander Graf <agraf@suse.de> 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.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>>>      static struct mm_region mem_map[] = CONFIG_SYS_MEM_MAP;
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> I am not ken on the idea of using a big #define table on these boards.
>>>>>>> Is there not a device-tree binding for this that we can use? It is
>>>>>>> just a data table, We are moving to Kconfig and eventually want to
>>>>>>> drop the config files.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> I would strongly object to making the MMU setup depend on device tree
>>>>>> parsing. This is low-level system code that should be handled purely by
>>>>>> simple standalone C code.
>>>>>
>>>>>
>>>>>
>>>>> Because...?
>>>>
>>>>
>>>>
>>>> There is literally zero benefit from putting the exact same content into
>>>> DT,
>>>> and hence having to run significantly more code to parse DT and get back
>>>> exactly the same hard-coded table.
>>>
>>>
>>> We do this so that board-specific variations can be described in one
>>> place. In the board-specific case, there are benefits.
>>
>>
>> I'd like to see an explicit enumeration of the benefits; I'm not aware of
>> any (either benefits, or such an enumeration). Board-specific data can just
>> as easily (actually, more easily due to lack of need for parsing code) be
>> stored in C data structures vs. stored in DT.
>>
>> Or put another way, the simple fact that some data is board-specific does
>> not in-and-of-itself mean there's a benefit to putting it into DT. To move
>> something into DT, we should be able to enumerate some other benefit, such
>> as:
>> - Speeds up boot time.
>> - Allows code to be simpler.
>> - Simplifies editing the data.
>>
>> (Note that I don't believe any of those example potential benefits are
>> actually true, but in fact are the opposite of the truth).
>
> Didn't this get discussed to death in the Linux mailing list with the
> result that platform data was abolished in favour of device tree? From
> my perspective:

I was not aware that decisions within the Linux kernel applied to U-Boot 
unilaterally. If that is true, there are many other decisions that 
should be carried over but aren't.

> - the relevant configuration is mostly in one place
> - we can share it with Linux

In some cases that is true. However, I find it extremely unlikely that 
the Linux kernel is going to be modified to parse its MMU configuration 
from DT, especially as Linux doesn't use the same VA layout that U-Boot 
does currently.

If your argument holds water for this specific case, then the DT binding 
for MMU configuration needs to be proposed and reviewed on the DT 
mailing list.

> - it is easier to maintain a few text files than dispersed platform data
> - it permits easy run-time configuration, avoiding the need for
> multiple builds for trivial differences
> - it converts to platform data fairly easily at run-time, so most of
> the code can still deal with that
> - it is easy to have base SoC data that is expanded/overridden by board data
> - the configuration can be listed and queried easily, by U-Boot at
> run-time, or by build systems
> - device tree is a well-understood format with robust tools
>
> I suspect others have done a much more thoughtful and persuasive analysis.
>
> If you want to pick up on these points I suggest starting a new thread!

To the other points, I largely disagree with them. All of the points can 
be easily argued against, but since I've done so repeatedly in detail in 
the past I won't bother repeating myself yet again, except simply to 
mention this fact.

  reply	other threads:[~2016-02-24 16:56 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
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 [this message]
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=56CDE0CC.6060803@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.