[Ksummit-2013-discuss] ARM topic: Is DT on ARM the solution, or is there something better?

Nicolas Pitre nico at fluxnic.net
Sun Oct 20 21:00:08 EDT 2013


On Sun, 20 Oct 2013, Stephen Warren wrote:

> On 10/20/2013 11:08 PM, Mark Brown wrote:
> > On Sun, Oct 20, 2013 at 10:26:54PM +0100, Stephen Warren wrote:
> > 
> >> IIRC (and perhaps I don't; it was really slightly before my
> >> active involvement in kernel development) Linus triggered the
> >> whole ARM DT conversion in response to disliking the volume of
> >> changes, and conflicts, in board files. The idea of DT conversion
> >> being that all the board-specific details could be moved out of
> >> the kernel and into DT files, thus causing him not to have to see
> >> it.
> > 
> > A large part of this was to do with the needs of distros and their
> > users - they have a strong need to ship a device neutral kernel and
> > to have a reasonable ability to have their kernel deploy on
> > hardware unknown to them.  Allowing the device tree to be delivered
> > with the system rather than have the board configuration in the
> > kernel helps achieve that goal.
> 
> Yes.
> 
> I guess one thing I didn't make clear was my hope that whatever
> firmware API or VM host implementation exists would be pre-installed
> on the system so that distros never had to deal with it, or even know
> it existed. That would then transform the many different HW
> configurations into a single HW configuration as far as distros are
> concerned, since they only target running as firmware clients or VM
> guests. Essentially, we are creating a standard platform in SW, which
> perhaps is still possible, rather than in HW, which seems unlikely at
> present.

The idea of some firmware to abstract hardware differences in order to 
greatly simplify kernel development and maintenance comes up with some 
regularity.  In other words, you are far from being the first one to 
suggest that.

However this needs some reality check.

Every hardware system has its share of complexity that the software has 
to deal with.

If that complexity is not in the kernel, it has to be in the firmware.  
Given we already struggles to have proper and bug free hardware support 
in the kernel today, even with all the debugging aid and peer review 
available from the kernel community, I really don't see how you'd manage 
to make it any less complex in some firmware implementation.

If a firmware is involved, that implies a standard API you have to 
implement your firmware for.  And if that firmware API has to cater for 
different hardware variations and differences, it will have to be very 
generic and abstract.  And the more generic and remote from the hardware 
details the API is, the more complex the code making the bridge between 
the hardware and the API will have to be.

And if it is complex, it *will* have bugs.  Fixing those bugs implies 
firmware updates which is likely to be just as difficult as bootloaders, 
if not more, to update in the field.

And expecting the firmware implementation to be ready before the 
hardware ships is almost impossible.  Some tradeoff will need to be made 
in order to meet the shipping deadline which normally implies a lot of 
pressure from other departments in your company.  Most of the time that 
tradeoff translates into quality reduction in your firmware 
implementation.

There is simply no magic.  If some hardware driver needs a year to be 
top quality in the kernel, then the equivalent hardware abstraction in 
the firmware would require the same level of development effort. You're 
only moving the implementation complexity around.

And there will always come a case for which the firmware API doesn't 
cover the hardware needs well, and you'll start adding hardware specific 
quirks in the kernel directly anyway, or attempt to bypass the firmware 
entirely for performance reasons.

So in theory the firmware idea always looks great.  but that works only 
if the firmware is perfect in the first place and from the beginning.  
In practice that never works like that.

The hardware support in the kernel, on the other hand, can be improved 
incrementally with time.  It doesn't matter if it is not optimal at 
first. It can be revisited, optimized, reviewed, and sometimes even 
redesigned.  And only when it reaches maturity would be the time to use 
the experience from the kernel development and make some firmware out of 
it.  But what would be the point then?

IMHO the idea of simplifying our lives with firmware is an illusion.


Nicolas



More information about the linux-arm-kernel mailing list