All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mitch Bradley <wmb@firmworks.com>
To: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: microblaze-uclinux@itee.uq.edu.au,
	devicetree-discuss <devicetree-discuss@lists.ozlabs.org>,
	linuxppc-dev <linuxppc-dev@ozlabs.org>,
	Olof Johansson <olof@lixom.net>,
	Dan Malek <ppc6dev@digitaldans.com>,
	Jeremy Kerr <jeremy.kerr@canonical.com>
Subject: Re: Request review of device tree documentation
Date: Sat, 12 Jun 2010 20:45:57 -1000	[thread overview]
Message-ID: <4C147EA5.3060500@firmworks.com> (raw)
In-Reply-To: <1276408773.1962.574.camel@pasglop>

Benjamin Herrenschmidt wrote:
> On Sat, 2010-06-12 at 19:39 -1000, Mitch Bradley wrote:
>
>   
>> Minimally, OFW needs to own some memory that the kernel won't steal.  
>> OFW on ARM is position-independent, so it can be tucked up at the top of memory 
>> fairly easily.
>>     
>
> Amen :-)
>
>   
>> To call back into OFW, the virtual mapping for that memory needs to be 
>> reestablished.
>>     
>
> That's a nasty part unless ARM provides a usable "real mode" which
> allows MMIO accesses, which I -think- it does. I don't remember the
> details that much.
>   

IIRC - and I could be wrong - ARM does have a "real mode", but the catch 
is that
you must have the MMU on in order to use the caches, to distinguish between
memory and MMIO.  So you take a fairly hefty performance hit.

I'm running my test build right now with caches off, and the performance 
is okay for
interactive work, but I'll want to have them on for startup and 
bootloading, so as not
to negatively impact the boot time.
> Maybe we could define a binding tho where we could somewhat standardize
> the portion of the virtual address space used by OF. IE. from the top of
> the address space down to the max size it requires. It might require
> some games to play with the fixmap on ARM side tho...
>   

That would be okay as far as I'm concerned.

> Another option would be something more RTAS-like where a specific call
> can be done by the OS itself to 'relocate' (not physically but virtually
> in this case) OF into the OS preferred location. Be prepared to have
> multiple of these called though as kernels kexec into one another.
>   

That might be a bit harder, but still do-able.
>   
>> Or perhaps the MMU and caches can be turned off for the duration of the 
>> callback.
>> I don't have the details of ARM MMUs and caches reloaded into my head 
>> yet.  Maybe next week...
>>     
>
> Forgot most of it too. Looks like it's about time I read the ARM
> architecture again, this sounds like fun :-)
>
> BTW. I notice no ARM list is CCed on this discussion ... maybe we should
> fix that ?
>   

Sounds like a good idea.  Do you know which list(s) would be good 
candidates?
>   
>> Also, for debugging, OFW typically needs access to a UART.  If the OS is 
>> using the UART, it's often possible for OFW to use it just by turning off interrupts and 
>> polling the UART.
>>     
>
> That might not be a big deal unless the OS plays with the clocks which
> it -does- tend to do. It might be worth defining some kind of property
> OF puts in the UART node to inform the OS not to play games and keep
> that one enabled, though that could affect power management, so might
> need to be conditional on some nvram option (debug-enabled?)
>
>   
>> The use case for a dynamic device tree is not compelling.
>>     
>
> Right, generally not, except in virtualized environments (see my other
> response).
>
> Now, the -one- thing that WILL happen if we have something like OF that
> remains alive is of course vendors will try to use it as a HAL. You know
> as well as I do that it -will- happen :-)
>   

I tried to be very clear when I was developing OFW that is is not a 
HAL.  I knew
that it would be impractical to pin down a coherent set of assumptions 
in the face
of the many different OSs - and versions of the "same" OS - that were 
extant at the time.

Digital was fairly committed to the HAL approach on Alpha, but they had 
two different
HAL ABIs, one for VMS and a different one for Ultrix!  So they were 
unable to solve
the problem for N=2, where both OSs were under their control.
> There's two reasons that typically happen. The misguided "good" one
> which is to think it helps keeping a single/more maintainable kernel
> image by stuffing the horrible details of nvram, rtc, etc.. access,
> poweron/off GPIOs, clock control, etc... in there.

Whether or not it is "misguided" depends on your cost structure.  For 
hardware companies
that don't control (and don't want to control) the OS, it is one of only 
two possible
ways to ship product.  Either you make hardware that is 100% compatible 
with something
that the OS already supports, or you have a HAL at some level.  The PC 
industry, of course,
has played both games, and by and large has been economically successful.

>  The "bad" one which
> is to stash code you don't want to show the source code for (codec
> control, etc...).
>
> This is bad for so many reasons that I don't think I need to even start
> listing them :-) So that's something that will have to be strongly kept
> in check and fought I suspect.
>   

Either fought or embraced.  To the extent that it is possible to focus 
solely on Linux and
ARM, one could image doing a good HAL.  (The reason I say ARM-only is 
because the
only other non-x86 architecture that has any "legs" left is PowerPC, and 
PPC already
has a coherent story.)
> To some extent, in fact, doing that sort of stuff in OF or even in RTAS
> like we do on power is even worse than ACPI-like tables. At least with
> those tables, the interpreter is in the operating system, thus can run
> with interrupts on, scheduling on, etc...

I have an FCode interpreter that can live inside the OS.  It's 
considerably simpler than
the ACPI interpreter.

>  With RTAS, or client interface
> calls, you'll end up with potentially huge slumps of CPU time "lost"
> into the bowels of the firmware.
>
>
> Cheers,
> Ben.
>
>
>   

WARNING: multiple messages have this Message-ID (diff)
From: Mitch Bradley <wmb-D5eQfiDGL7eakBO8gow8eQ@public.gmane.org>
To: Benjamin Herrenschmidt
	<benh-XVmvHMARGAS8U2dJNN8I7kB+6BGkLq7r@public.gmane.org>
Cc: microblaze-uclinux-rVRm/Wmeqae7NGdpmJTKYQ@public.gmane.org,
	devicetree-discuss
	<devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org>,
	linuxppc-dev
	<linuxppc-dev-mnsaURCQ41sdnm+yROfE0A@public.gmane.org>,
	Dan Malek <ppc6dev-7kUUosv42bfn7oBBQGLwdg@public.gmane.org>,
	Jeremy Kerr <jeremy.kerr-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org>
Subject: Re: Request review of device tree documentation
Date: Sat, 12 Jun 2010 20:45:57 -1000	[thread overview]
Message-ID: <4C147EA5.3060500@firmworks.com> (raw)
In-Reply-To: <1276408773.1962.574.camel@pasglop>

Benjamin Herrenschmidt wrote:
> On Sat, 2010-06-12 at 19:39 -1000, Mitch Bradley wrote:
>
>   
>> Minimally, OFW needs to own some memory that the kernel won't steal.  
>> OFW on ARM is position-independent, so it can be tucked up at the top of memory 
>> fairly easily.
>>     
>
> Amen :-)
>
>   
>> To call back into OFW, the virtual mapping for that memory needs to be 
>> reestablished.
>>     
>
> That's a nasty part unless ARM provides a usable "real mode" which
> allows MMIO accesses, which I -think- it does. I don't remember the
> details that much.
>   

IIRC - and I could be wrong - ARM does have a "real mode", but the catch 
is that
you must have the MMU on in order to use the caches, to distinguish between
memory and MMIO.  So you take a fairly hefty performance hit.

I'm running my test build right now with caches off, and the performance 
is okay for
interactive work, but I'll want to have them on for startup and 
bootloading, so as not
to negatively impact the boot time.
> Maybe we could define a binding tho where we could somewhat standardize
> the portion of the virtual address space used by OF. IE. from the top of
> the address space down to the max size it requires. It might require
> some games to play with the fixmap on ARM side tho...
>   

That would be okay as far as I'm concerned.

> Another option would be something more RTAS-like where a specific call
> can be done by the OS itself to 'relocate' (not physically but virtually
> in this case) OF into the OS preferred location. Be prepared to have
> multiple of these called though as kernels kexec into one another.
>   

That might be a bit harder, but still do-able.
>   
>> Or perhaps the MMU and caches can be turned off for the duration of the 
>> callback.
>> I don't have the details of ARM MMUs and caches reloaded into my head 
>> yet.  Maybe next week...
>>     
>
> Forgot most of it too. Looks like it's about time I read the ARM
> architecture again, this sounds like fun :-)
>
> BTW. I notice no ARM list is CCed on this discussion ... maybe we should
> fix that ?
>   

Sounds like a good idea.  Do you know which list(s) would be good 
candidates?
>   
>> Also, for debugging, OFW typically needs access to a UART.  If the OS is 
>> using the UART, it's often possible for OFW to use it just by turning off interrupts and 
>> polling the UART.
>>     
>
> That might not be a big deal unless the OS plays with the clocks which
> it -does- tend to do. It might be worth defining some kind of property
> OF puts in the UART node to inform the OS not to play games and keep
> that one enabled, though that could affect power management, so might
> need to be conditional on some nvram option (debug-enabled?)
>
>   
>> The use case for a dynamic device tree is not compelling.
>>     
>
> Right, generally not, except in virtualized environments (see my other
> response).
>
> Now, the -one- thing that WILL happen if we have something like OF that
> remains alive is of course vendors will try to use it as a HAL. You know
> as well as I do that it -will- happen :-)
>   

I tried to be very clear when I was developing OFW that is is not a 
HAL.  I knew
that it would be impractical to pin down a coherent set of assumptions 
in the face
of the many different OSs - and versions of the "same" OS - that were 
extant at the time.

Digital was fairly committed to the HAL approach on Alpha, but they had 
two different
HAL ABIs, one for VMS and a different one for Ultrix!  So they were 
unable to solve
the problem for N=2, where both OSs were under their control.
> There's two reasons that typically happen. The misguided "good" one
> which is to think it helps keeping a single/more maintainable kernel
> image by stuffing the horrible details of nvram, rtc, etc.. access,
> poweron/off GPIOs, clock control, etc... in there.

Whether or not it is "misguided" depends on your cost structure.  For 
hardware companies
that don't control (and don't want to control) the OS, it is one of only 
two possible
ways to ship product.  Either you make hardware that is 100% compatible 
with something
that the OS already supports, or you have a HAL at some level.  The PC 
industry, of course,
has played both games, and by and large has been economically successful.

>  The "bad" one which
> is to stash code you don't want to show the source code for (codec
> control, etc...).
>
> This is bad for so many reasons that I don't think I need to even start
> listing them :-) So that's something that will have to be strongly kept
> in check and fought I suspect.
>   

Either fought or embraced.  To the extent that it is possible to focus 
solely on Linux and
ARM, one could image doing a good HAL.  (The reason I say ARM-only is 
because the
only other non-x86 architecture that has any "legs" left is PowerPC, and 
PPC already
has a coherent story.)
> To some extent, in fact, doing that sort of stuff in OF or even in RTAS
> like we do on power is even worse than ACPI-like tables. At least with
> those tables, the interpreter is in the operating system, thus can run
> with interrupts on, scheduling on, etc...

I have an FCode interpreter that can live inside the OS.  It's 
considerably simpler than
the ACPI interpreter.

>  With RTAS, or client interface
> calls, you'll end up with potentially huge slumps of CPU time "lost"
> into the bowels of the firmware.
>
>
> Cheers,
> Ben.
>
>
>   

  reply	other threads:[~2010-06-13  6:46 UTC|newest]

Thread overview: 187+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-06-11 22:59 Request review of device tree documentation Grant Likely
2010-06-11 22:59 ` Grant Likely
2010-06-11 23:47 ` Dan Malek
2010-06-11 23:47   ` Dan Malek
2010-06-12  2:58   ` Benjamin Herrenschmidt
2010-06-12  2:58     ` Benjamin Herrenschmidt
2010-06-12  4:48     ` Mitch Bradley
2010-06-12  4:48       ` Mitch Bradley
2010-06-12  6:53   ` Grant Likely
2010-06-12  6:53     ` Grant Likely
2010-06-12  8:19     ` Mitch Bradley
2010-06-12  8:19       ` Mitch Bradley
2010-06-12 10:45       ` Benjamin Herrenschmidt
2010-06-12 10:45         ` Benjamin Herrenschmidt
2010-06-12 10:48         ` Benjamin Herrenschmidt
2010-06-12 10:48           ` Benjamin Herrenschmidt
2010-06-12 16:30           ` Mitch Bradley
2010-06-12 16:30             ` Mitch Bradley
2010-06-12 22:52             ` Benjamin Herrenschmidt
2010-06-12 22:52               ` Benjamin Herrenschmidt
2010-06-13  5:07               ` Grant Likely
2010-06-13  5:07                 ` Grant Likely
2010-06-13  5:39                 ` Mitch Bradley
2010-06-13  5:39                   ` Mitch Bradley
2010-06-13  5:59                   ` Benjamin Herrenschmidt
2010-06-13  5:59                     ` Benjamin Herrenschmidt
2010-06-13  6:45                     ` Mitch Bradley [this message]
2010-06-13  6:45                       ` Mitch Bradley
2010-06-13  8:29                       ` Benjamin Herrenschmidt
2010-06-13  8:29                         ` Benjamin Herrenschmidt
2010-06-14  5:36                         ` Grant Likely
2010-06-14  5:36                           ` Grant Likely
2010-06-14  5:36                           ` Grant Likely
2010-06-14 20:00                           ` Ben Dooks
2010-06-14 20:00                             ` Ben Dooks
2010-06-14 20:00                             ` Ben Dooks
2010-06-13  8:57                       ` Benjamin Herrenschmidt
2010-06-13  8:57                         ` Benjamin Herrenschmidt
2010-06-14  5:23                     ` Grant Likely
2010-06-14  5:23                       ` Grant Likely
2010-06-14  5:23                       ` Grant Likely
2010-06-14  7:38                       ` Russell King - ARM Linux
2010-06-14  7:38                         ` Russell King - ARM Linux
2010-06-14  7:38                         ` Russell King - ARM Linux
2010-06-14  7:45                         ` Mitch Bradley
2010-06-14  7:45                           ` Mitch Bradley
2010-06-14  7:45                           ` Mitch Bradley
2010-06-14  9:25                           ` Russell King - ARM Linux
2010-06-14  9:25                             ` Russell King - ARM Linux
2010-06-14  9:36                             ` Benjamin Herrenschmidt
2010-06-14  9:36                               ` Benjamin Herrenschmidt
2010-06-14  9:36                               ` Benjamin Herrenschmidt
2010-06-14  9:47                               ` Russell King - ARM Linux
2010-06-14  9:47                                 ` Russell King - ARM Linux
2010-06-14 14:29                                 ` Jamie Lokier
2010-06-14 14:29                                   ` Jamie Lokier
2010-06-14 14:29                                   ` Jamie Lokier
2010-06-14 13:51                       ` Nicolas Pitre
2010-06-14 13:51                         ` Nicolas Pitre
2010-06-14 13:51                         ` Nicolas Pitre
2010-06-14 15:35                         ` Grant Likely
2010-06-14 15:35                           ` Grant Likely
2010-06-14 15:35                           ` Grant Likely
2010-06-14 15:58                           ` Nicolas Pitre
2010-06-14 15:58                             ` Nicolas Pitre
2010-06-14 15:58                             ` Nicolas Pitre
2010-06-14 16:16                             ` Grant Likely
2010-06-14 16:16                               ` Grant Likely
2010-06-14 16:16                               ` Grant Likely
2010-06-14  5:02                   ` Grant Likely
2010-06-14  5:02                     ` Grant Likely
2010-06-14  5:02                     ` Grant Likely
2010-06-14 12:44                     ` David Gibson
2010-06-14 12:44                       ` David Gibson
2010-06-14 12:44                       ` David Gibson
2010-06-14 14:59                       ` Nicolas Pitre
2010-06-14 14:59                         ` Nicolas Pitre
2010-06-14 14:59                         ` Nicolas Pitre
2010-06-14 15:08                         ` Grant Likely
2010-06-14 15:08                           ` Grant Likely
2010-06-14 15:08                           ` Grant Likely
2010-06-14 16:02                         ` Jamie Lokier
2010-06-14 16:02                           ` Jamie Lokier
2010-06-14 16:02                           ` Jamie Lokier
2010-06-14 16:23                           ` Nicolas Pitre
2010-06-14 16:23                             ` Nicolas Pitre
2010-06-14 16:23                             ` Nicolas Pitre
2010-06-14 16:29                             ` Grant Likely
2010-06-14 16:29                               ` Grant Likely
2010-06-14 16:29                               ` Grant Likely
2010-06-14 16:28                           ` Grant Likely
2010-06-14 16:28                             ` Grant Likely
2010-06-14 16:28                             ` Grant Likely
2010-06-14 16:33                             ` Jamie Lokier
2010-06-14 16:33                               ` Jamie Lokier
2010-06-14 16:33                               ` Jamie Lokier
2010-06-14 16:58                           ` Mitch Bradley
2010-06-14 16:58                             ` Mitch Bradley
2010-06-14 16:58                             ` Mitch Bradley
2010-06-14 17:26                             ` Nicolas Pitre
2010-06-14 17:26                               ` Nicolas Pitre
2010-06-14 18:20                               ` Mitch Bradley
2010-06-14 18:20                                 ` Mitch Bradley
2010-06-14 18:20                                 ` Mitch Bradley
2010-06-14 19:40                                 ` Nicolas Pitre
2010-06-14 19:40                                   ` Nicolas Pitre
2010-06-14 20:08                                   ` Mark Brown
2010-06-14 20:08                                     ` Mark Brown
2010-06-14 20:08                                     ` Mark Brown
2010-06-16  6:09                             ` Mike Rapoport
2010-06-16  6:09                               ` Mike Rapoport
2010-06-16  6:09                               ` Mike Rapoport
2010-06-16  6:13                               ` Mitch Bradley
2010-06-16  6:13                                 ` Mitch Bradley
2010-06-16  6:13                                 ` Mitch Bradley
2010-06-16  6:17                                 ` Mike Rapoport
2010-06-16  6:17                                   ` Mike Rapoport
2010-06-16  6:32                                   ` Mitch Bradley
2010-06-16  6:32                                     ` Mitch Bradley
2010-06-16  6:32                                     ` Mitch Bradley
2010-06-16  6:47                                     ` Mike Rapoport
2010-06-16  6:47                                       ` Mike Rapoport
2010-06-16  7:40                                       ` Mitch Bradley
2010-06-16  7:40                                         ` Mitch Bradley
2010-06-16  7:40                                         ` Mitch Bradley
2010-06-16  9:45                                         ` Vladimir Pantelic
2010-06-16  9:45                                           ` Vladimir Pantelic
2010-06-16  9:45                                           ` Vladimir Pantelic
2010-06-16 10:39                                         ` Mike Rapoport
2010-06-16 10:39                                           ` Mike Rapoport
2010-06-16 11:41                                           ` Jamie Lokier
2010-06-16 11:41                                             ` Jamie Lokier
2010-06-16 11:41                                             ` Jamie Lokier
2010-06-16 13:48                                             ` Jamie Bennett
2010-06-16 13:48                                               ` Jamie Bennett
2010-06-16 14:39                                           ` Nicolas Pitre
2010-06-16 14:39                                             ` Nicolas Pitre
2010-06-16 17:43                                             ` Tim Bird
2010-06-16 17:43                                               ` Tim Bird
2010-06-16 17:43                                               ` Tim Bird
2010-06-17  6:45                                               ` Benjamin Zores
2010-06-16  6:52                                     ` M. Warner Losh
2010-06-16  6:52                                       ` M. Warner Losh
2010-06-16  6:52                                       ` M. Warner Losh
2010-06-18 22:12                                       ` Frank Rowand
2010-06-18 22:12                                         ` Frank Rowand
2010-06-15  2:02                         ` David Gibson
2010-06-15  2:02                           ` David Gibson
2010-06-15  2:02                           ` David Gibson
2010-06-14 15:51                       ` M. Warner Losh
2010-06-14 15:51                         ` M. Warner Losh
2010-06-14 15:51                         ` M. Warner Losh
2010-06-13  5:48                 ` Benjamin Herrenschmidt
2010-06-13  5:48                   ` Benjamin Herrenschmidt
2010-06-14  5:13                   ` Grant Likely
2010-06-14  5:13                     ` Grant Likely
2010-06-14  5:13                     ` Grant Likely
2010-06-14  6:09                     ` Benjamin Herrenschmidt
2010-06-14  6:09                       ` Benjamin Herrenschmidt
2010-06-14  6:09                       ` Benjamin Herrenschmidt
2010-06-14  6:17                       ` Mitch Bradley
2010-06-14  6:17                         ` Mitch Bradley
2010-06-14  6:17                         ` Mitch Bradley
2010-06-12 22:15     ` Olof Johansson
2010-06-12 23:09       ` Grant Likely
2010-06-12 23:09         ` Grant Likely
2010-06-13  6:47         ` [microblaze-uclinux] " Edgar E. Iglesias
2010-06-12  3:00 ` Benjamin Herrenschmidt
2010-06-12  3:00   ` Benjamin Herrenschmidt
2010-06-12  3:07   ` Benjamin Herrenschmidt
2010-06-12  3:07     ` Benjamin Herrenschmidt
2010-06-13 13:12     ` Jeremy Kerr
2010-06-13 13:12       ` Jeremy Kerr
2010-06-14  5:40       ` Grant Likely
2010-06-12 17:33 ` Stephan Gatzka
2010-06-12 18:19   ` Grant Likely
     [not found]     ` <4C149DE1.1050800@gatzka.org>
     [not found]       ` <4C149DE1.1050800-tNItQxeJkt8dnm+yROfE0A@public.gmane.org>
2010-06-13 20:03         ` Grant Likely
     [not found]           ` <AANLkTim-FzAihEd0FE72dy3Ubb2yiIQh4rtI6TIMovFW-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-06-14 23:44             ` Grant Likely
     [not found]               ` <AANLkTikV9XqufTO9LVAql3nbySpPz_p_4kv7YY2b4UPW-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-06-15 19:25                 ` Stephan Gatzka
2010-06-14  5:54   ` Grant Likely
2010-06-14  5:54     ` Grant Likely
2010-08-05  4:43 ` David Gibson
2010-08-05  4:43   ` David Gibson
2010-09-01 16:19   ` Grant Likely
2010-09-01 16:19     ` Grant Likely
  -- strict thread matches above, loose matches on Subject: below --
2010-08-05 15:15 Terren Chow
     [not found] ` <AANLkTikFNFvM7x6TzN8DPM9E4vC0KVRb0sz4r2wu_nZ+-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-08-05 16:41   ` Grant Likely

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=4C147EA5.3060500@firmworks.com \
    --to=wmb@firmworks.com \
    --cc=benh@kernel.crashing.org \
    --cc=devicetree-discuss@lists.ozlabs.org \
    --cc=jeremy.kerr@canonical.com \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=microblaze-uclinux@itee.uq.edu.au \
    --cc=olof@lixom.net \
    --cc=ppc6dev@digitaldans.com \
    /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.