Thread (1 message) 1 message, 1 author, 2010-06-14

Re: Request review of device tree documentation

From: Grant Likely <hidden>
Date: 2010-06-14 05:02:15
Also in: linux-arm-kernel, linux-devicetree

[cc'ing linux-arm-kernel because we're discussing ARM issues]

On Sat, Jun 12, 2010 at 11:39 PM, Mitch Bradley [off-list ref] wrote:
Grant Likely wrote:
quoted
On Sat, Jun 12, 2010 at 4:52 PM, Benjamin Herrenschmidt
[off-list ref] wrote:
quoted
On Sat, 2010-06-12 at 06:30 -1000, Mitch Bradley wrote:

quoted
I'm certainly going to try keeping OFW alive. =A0On the x86 OLPC machi=
nes,
quoted
quoted
quoted
the ability to
dive into OFW via a SysRq key combo was very helpful for debugging som=
e
quoted
quoted
quoted
difficult
problems. =A0The team has asked me to support the feature on ARM.
Oh well, if you can and can convince the ARM kernel folks to do the
necessary changes ... :-)
What is needed to keep OFW alive? =A0I've got no problem with doing so
if it isn't invasive, and as long as the same boot entry interface can
be used.
Minimally, OFW needs to own some memory that the kernel won't steal. =A0O=
FW on
ARM
is position-independent, so it can be tucked up at the top of memory fair=
ly
easily.

To call back into OFW, the virtual mapping for that memory needs to be
reestablished.
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=
.
=A0Maybe next week...
Remapping the MMU could be hairy, but I see no issue with marking
OFW's memory as reserved.  How does OFW currently tell the OS what
memory it should not touch because OFW is using it?  Is it device tree
data or another mechanism?
Also, for debugging, OFW typically needs access to a UART. =A0If the OS i=
s
using the UART,
it's often possible for OFW to use it just by turning off interrupts and
polling the UART.
This doesn't sound onerous.
quoted
What is the use-case for having a dynamic device tree?
The use case for a dynamic device tree is not compelling.

In SPARC / Solaris land, Open Boot managed the non-volatile configuration
variables, which the OS could access and modify dynamically as properties=
 in
/options. =A0The OS didn't have to know the storage layout nor the hardwa=
re
details of the storage device. =A0Convenient, but not hugely important.
I think the assumption can be made that this will not be a use case on ARM.
quoted
=A0I can see
keeping OFW alive being useful for some debug facilities, but once the
kernel has started, I'm really not interested in relying on firmware
to manage the hardware.
That's sort of a self-fulfilling prophecy. =A0If the OS doesn't trust the
firmware, there is no pressure for the firmware to "get it right".
Firmware will not get it right.  Period.  There will always be
something wrong.  It is never right on PCs.  It will never be right on
the other architectures.  That goes for OSes too, but upgrading an OS
isn't as risky as upgrading firmware.  That isn't to say that it can't
be close, but every firmware feature that the OS depends on is a
feature that could force a risky firmware upgrade when the bug in it
is discovered.

I'm also convinced that the economics are all wrong for "getting it
right" when talking about firmware.  Manufactures don't care about
firmware; they care about selling boxes.  Customers don't care about
firmware, they care about the operating system (well, that's not true
either, they care about applications).  For manufactures, once it can
boot the real operating system, there is little to no incentive to
spend any more money on firmware when the money can be better spent on
either the next product or the adding features to the operating system
of the existing product.  In fact, spending money on firmware is
actually *more risky* one a product ships, because if a firmware
upgrade goes bad, then that means product returned for repair at the
factory.

For me, this leads to two conclusions;
- That the OS should have little to no dependencies on the firmware
after it is booted so that bug fixes remain entirely in the realm of
the operating system.
- That the description of the hardware (ie Device Tree or ACPI) should
be decoupled enough from firmware that bugs in the data do not force a
firmware upgrade.  The data must always be updatabie.  Even if
configuration or data is completely corrupt, it must still be simple
to recover.

Note: I'm not critiquing OFW on either of these points.  These are
just some of my base requirements when I approach system design.
In PC land, the current status quo is that Windows depends on ACPI so
heavily that BIOS vendors pretty much have to get that part of the puzzle
right. =A0Microsoft did a thorough job of creating certification tests an=
d
enforcing their use. =A0I'm not praising ACPI, just pointing out the dyna=
mics
that result from assignment of responsibility.
Yet how many boards are shipped with broken ACPI tables?  Just
bringing up ACPI in the presence of a kernel developer seems to bring
about the onset of Tourette's.  Bios provides enough data to be able
to boot the operating system, but in my experience it still requires
extra drivers to be added after installation for everything to work
right.

OTOH, I'm not had to deal with ACPI personally, so I may also be
talking out of my backside on this point.  :-)
That said, I'm not interested in pushing the issue. =A0It's okay with me =
if
the device tree is static as far as the kernel is concerned, and callback=
s
to OFW are only used for debugging purposes.
The current intent is to only accept the flat tree representation when
booting the kernel.  So we'll need to encode the callback pointer into
the tree somewhere.

Cheers,
g.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help