On Sun, Apr 3, 2011 at 10:25 AM, jonsm...@gmail.com <jonsm...@gmail.com> wrote:
> On Sun, Apr 3, 2011 at 4:38 AM, Andy Green <a...@warmcat.com> wrote:
>> On 04/03/2011 04:07 AM, Somebody in the thread at some point said:
>>
>> Hi -
>>
>>>>   * And very hardware specific code moved out to a controllable place,
>>>>     i.e. something like BIOS
>>>
>>> Sorry, but I must vehemently disagree here.  BIOSes are a problem for
>>> Open Source, not a solution.  On X86 they use BIOS services only when
>>> there is simply no other choice, because the BIOS is too often buggy and
>>> it is more difficult and risky to update than the kernel.
>>
>> I followed the lkml thread and saw there bootloaders mentioned as some kind
>> of happy place all problems will be solved.  You're quite right it's just a
>> carpet to shove stuff under and stumble over.
>>
>> If the kernel operation will intimately rely on this information, eg DT
>> tables, and needs its versioning to match kernel code precisely, in the end
>> it can't avoid owning it and that extends up to packaging as well. The
>> "attach device tree data to end of kernel" scheme you mentioned, or taking
>> it inside the kernel tree seems the way to go in that domain not indirecting
>> its availability and versioning through not only bootloader package, code
>> but also environment.
>
> I've worked on DT based PowerPC systems which have similar, multiple
> variants of the base hardware.  The bootloader provides the DT to the
> kernel on these machines.  A unified kernel image reads the DT and
> then adjusts to reflect the hardware specified in the device tree.
>
> Think of the DT as a way of probing a bus that doesn't have probe
> capabilities. This gives you a way to dynamically load drivers from
> initrd if you want. For example we dynamically loaded drivers for I2C
> devices that were previously always built in.
>
> Board specific code inside the kernel can trigger off the DT board
> name and then deal with variations of DT formats that exist for that
> particular board so you aren't forced to update the kernel and DT in
> lock step. Examples of that are in arch/powerpc/platforms/xxx/board-x
> Code in there looks for some old, messed up DTs and then modifies them
> to be compliant before allowing the kernel to read them. If the user
> updates their bootloader/DT that code won't trigger. The trick here is
> that the code modifies the DT, and then the kernel interprets the DT.
> The code detecting the old DT format does not go and directly
> manipulate the device drivers.
>
> The goal of this was to be able to ship single kernel image update
> that worked on a dozen hardware variations.
>
> I haven't been following the ARM DT work, but a scheme that might work
> on ARM is to build DTs into the kernel corresponding to each ARM
> machine ID supported by the kernel image.  Use the machine ID to
> select the correct one and discard the rest. As ARM bootloaders are
> modified to directly support DTs slowly get rid of the in-kernel DTs.
>
> A key concept: think of the DT as a way of probing a bus that doesn't
> have probe capabilities. You can argue that C code can produce the
> same effect as DTs which is true. But that board specific setup code
> tends to grow and stick its fingers into everything. DTs mitigate that
> simply because they aren't C code. DTs encourage the development of
> generic device setup code instead of one-off platform specific code.
>
> --
> Jon Smirl
> jonsm...@gmail.com
>
> _______________________________________________
> linaro-dev mailing list
> linaro-dev@lists.linaro.org
> http://lists.linaro.org/mailman/listinfo/linaro-dev
>

Above everything else, I definitely like to see DT get done first,
it's essential for SoC these days.

_______________________________________________
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev

Reply via email to