From: Stephen Warren <swarren@wwwdotorg.org>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 00/20] arm: rpi: Enable USB and Ethernet driver model Raspberry Pi
Date: Fri, 31 Jul 2015 21:01:09 -0600 [thread overview]
Message-ID: <55BC3675.2000903@wwwdotorg.org> (raw)
In-Reply-To: <20150728135522.GB25532@bill-the-cat>
On 07/28/2015 07:55 AM, Tom Rini wrote:
> On Mon, Jul 27, 2015 at 09:10:32PM -0600, Stephen Warren wrote:
>> On 07/24/2015 07:44 AM, Tom Rini wrote:
>>> On Thu, Jul 23, 2015 at 10:17:29PM -0600, Stephen Warren
>>> wrote:
>>>> On 07/14/2015 09:44 AM, Simon Glass wrote:
>>>>> Hi Stephen,
>>>>>
>>>>> On 13 July 2015 at 22:52, Stephen Warren
>>>>> <swarren@wwwdotorg.org> wrote:
>>>>>> On 07/11/2015 08:04 AM, Simon Glass wrote:
>>>>>>> Hi Stephen,
>>>>>>>
>>>>>>> On 10 July 2015 at 23:34, Stephen Warren
>>>>>>> <swarren@wwwdotorg.org> wrote:
>>>>>>>> On 07/07/2015 08:53 PM, Simon Glass wrote:
>>>>>>>>> Raspberry Pi uses a DWC2 USB controller and a SMSC
>>>>>>>>> USB Ethernet adaptor. Neither of these currently
>>>>>>>>> support driver model.
>>>>>>>>>
>>>>>>>>> This series does the following: - Move Raspberry Pi
>>>>>>>>> to use device tree control (u-boot-dtb.bin instead
>>>>>>>>> of u-boot.bin)
>>>>>>>>
>>>>>>>> I'd strongly prefer not to do this. For one thing, it
>>>>>>>> means we'd need different U-Boot builds for each of
>>>>>>>> the different RPi models, and we currently don't need
>>>>>>>> that (or perhaps we require users to create their own
>>>>>>>> u-boot-dtb.bin by choosing the right DTB to append).
>>>>>>>> If it
>>>>>>>
>>>>>>> Why does device tree change how things work now? The
>>>>>>> get_board_rev() function currently deals with this. It
>>>>>>> doesn't look like rpi_board_rev is used anywhere
>>>>>>> else.
>>>>>>
>>>>>> Without a DT, the code is free to make all the
>>>>>> board-rev-specific decisions at run-time without external
>>>>>> influence.
>>>>>>
>>>>>> With a DT, we either have to:
>>>>>>
>>>>>> a) Pick the DT for one particular board and use that
>>>>>> everywhere, even if it's incorrect for the actual board
>>>>>> in use.
>>>>>>
>>>>>> b) Build a different U-Boot + DTB image for each
>>>>>> board-rev, and put the correct one on the SD card.
>>>>>>
>>>>>> Neither of those options seem like a good idea to me.
>>>>>
>>>>> How about:
>>>>>
>>>>> c) Leave the code as is, and not add a whole lot more
>>>>> device tree files.
>>>>>
>>>>> After all the kernel only has files for rpi and rpi_2. Why
>>>>> should we add one for each variant? If you don't want to
>>>>> do it, why do it?
>>>>
>>>> For the kernel I do expect to add a DT file for each variant.
>>>> That makes sense since we expect a single kernel binary to
>>>> run unmodified on all HW, parameterize the HW setup via the
>>>> DTB, and have an infrastructure to pass the different DTs to
>>>> the kernel easily.
>>>>
>>>> For U-Boot, I'd like to continue to have a single-binary that
>>>> runs on all RPis (well, one for RPi 1, another for RPi 2).
>>>> That's a very nice usage model for users. That's not possible
>>>> if U-Boot pulls everything from DT and we have a different DT
>>>> for each system (which only makes sense so that we don't lie
>>>> in the DT, or fail to represent the differences between the
>>>> models) since a single DT is embedded into the U-Boot binary;
>>>> there's no infra-structure to passing 1 of n DTBs to U-Boot.
>>>
>>> So my question is, for what U-Boot needs, can we have 1 DT for
>>> RPi 1 (that's not lying about what the HW can do) and 1 DT for
>>> RPi 2? This is the kind of question I'm frankly strugling with
>>> right now on converting more of the TI boards to be DT based as
>>> well.
>>
>> This would be possible iff all the HW that U-Boot interacts with
>> is identical on all relevant systems and we simply leave out all
>> the other details that U-Boot doesn't care about (or any
>> differences that exist can be probed via standard protocols such
>> as USB).
>
> Exactly.
>
>> Right now, I think that's possible on the RPi.
>
> That's good..
>
>> However, this limits U-Boot's ability to support all HW. If we
>> wanted U-Boot to fully support all features of the HW, this
>> limited DT wouldn't be sufficient. Examples of potential issues
>> are:
>>
>> a) On RPis that contain the USB hub + Ethernet chip, there's a
>> GPIO that feeds into that chip's enable pin. Right now, U-Boot
>> relies on either the HW default being sufficient to turn that pin
>> on, or perhaps the binary FW that runs before U-Boot does this.
>> However, U-Boot really should set the GPIO itself so that it
>> doesn't rely on HW state set up before it runs. It should also do
>> this only on systems with the USB+LAN chip; we don't have the
>> full schematics for all RPi boards so there's no guarantee the
>> same GPIO doesn't do something else on some boards, especially in
>> the future.
>>
>> b) I2S (digital audio) output is present on some boards. Someone
>> might want U-Boot to play a startup sound, or make a warning beep
>> under certain error conditions. It's not /that/ likely, but
>> similar features have been implemented on other boards. The
>> availability of I2S outputs varies from model to model.
>>
>> c) If we want to expose the GPIOs on the expansion header, the
>> set of GPIOs that it's useful to expose varies between boards.
>>
>> We could probably think of other issues too.
>>
>> To handle all of these, we'd either have to have separate DTs for
>> the different cases, or represent the differences in code. Having
>> multiple DTs has the issues I mentioned previously. By the time
>> we represent part of the HW structure in code, it's far simpler
>> to just represent it all in that one place. C structs are
>> (currently at least) better than DT for representing this
>> information anyway; the C compiler does a lot more error-checking
>> when initializing structs than dtc can do for example, and
>> code-sharing between boards is easier.
>
> Maybe examples like these are why we will need (and want) to keep
> platform data as a possibility in our DM work. There's value in
> keeping the DT that we use as minimal as possible (so that it can
> work as broadly as possible) and then do run-time fixups. The
> other option here might be something like device tree overlays or
> at least exposing the running DT (... more readily, I bet you could
> kludge it today) so that the existing cli infrasturcture can modify
> it).
I'm still not convinced of the utility of DT /if/ we can't completely
get rid of C code alongside it. Representing part of the system in DT
and part in C seems to me to be the absolute worst case. If we need C
for part of the system config, we should just use it for all of it.
next prev parent reply other threads:[~2015-08-01 3:01 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-08 2:53 [U-Boot] [PATCH 00/20] arm: rpi: Enable USB and Ethernet driver model Raspberry Pi Simon Glass
2015-07-08 2:53 ` [U-Boot] [PATCH 01/20] dm: net: Support usbethaddr environment variable Simon Glass
2015-07-08 4:04 ` Joe Hershberger
2015-07-08 20:31 ` Simon Glass
2015-07-08 20:43 ` Joe Hershberger
2015-07-08 21:07 ` Simon Glass
2015-07-20 13:56 ` Simon Glass
2015-07-20 18:10 ` Joe Hershberger
2015-07-21 21:25 ` Simon Glass
2015-07-08 2:53 ` [U-Boot] [PATCH 02/20] dm: usb: Allow USB Ethernet whenever CONFIG_DM_ETH is not defined Simon Glass
2015-07-08 2:53 ` [U-Boot] [PATCH 03/20] dm: usb: Add an errno.h header to usb_ether.c Simon Glass
2015-07-27 23:31 ` Simon Glass
2015-07-08 2:53 ` [U-Boot] [PATCH 04/20] dm: usb: Prepare dwc2 driver for driver-model conversion Simon Glass
2015-07-27 23:31 ` Simon Glass
2015-07-08 2:53 ` [U-Boot] [PATCH 05/20] dm: usb: Add driver-model support to dwc2 Simon Glass
2015-07-27 23:32 ` Simon Glass
2015-07-08 2:53 ` [U-Boot] [PATCH 06/20] net: smsc95xx: Sort the include files Simon Glass
2015-07-27 23:32 ` Simon Glass
2015-07-08 2:53 ` [U-Boot] [PATCH 07/20] net: smsc95xx: Rename AX_RX_URB_SIZE to RX_URB_SIZE Simon Glass
2015-07-27 23:32 ` Simon Glass
2015-07-08 2:53 ` [U-Boot] [PATCH 08/20] net: smsc95xx: Correct the error numbers Simon Glass
2015-07-27 23:32 ` Simon Glass
2015-07-08 2:53 ` [U-Boot] [PATCH 09/20] net: smsc95xx: Prepare for conversion to driver model Simon Glass
2015-07-27 23:32 ` Simon Glass
2015-07-08 2:53 ` [U-Boot] [PATCH 10/20] net: smsc95xx: Add driver-model support Simon Glass
2015-07-27 23:32 ` Simon Glass
2015-07-08 2:53 ` [U-Boot] [PATCH 11/20] dm: serial: Update binding for PL01x serial UART Simon Glass
2015-07-08 22:00 ` Vikas MANOCHA
2015-07-15 9:00 ` Linus Walleij
2015-07-15 9:38 ` Arnd Bergmann
2015-07-15 10:08 ` Linus Walleij
2015-07-15 10:17 ` Arnd Bergmann
2015-07-16 7:41 ` Geert Uytterhoeven
2015-10-19 7:19 ` Linus Walleij
2015-07-08 2:53 ` [U-Boot] [PATCH 12/20] dm: Support address translation for simple-bus Simon Glass
2015-07-27 23:32 ` Simon Glass
2015-07-08 2:53 ` [U-Boot] [PATCH 13/20] arm: rpi: Define CONFIG_TFTP_TSIZE to show tftp size info Simon Glass
2015-07-08 2:53 ` [U-Boot] [PATCH 14/20] arm: rpi: Bring in kernel device tree files Simon Glass
2015-07-08 2:53 ` [U-Boot] [PATCH 15/20] arm: rpi: Device tree modifications for U-Boot Simon Glass
2015-07-08 2:53 ` [U-Boot] [PATCH 16/20] arm: rpi: Enable device tree control for Rasberry Pi Simon Glass
2015-07-08 2:53 ` [U-Boot] [PATCH 17/20] arm: rpi: Drop the UART console platform data Simon Glass
2015-07-08 2:53 ` [U-Boot] [PATCH 18/20] arm: rpi: Drop the GPIO " Simon Glass
2015-07-08 2:53 ` [U-Boot] [PATCH 19/20] arm: rpi: Move to driver model for USB Simon Glass
2015-07-08 2:53 ` [U-Boot] [PATCH 20/20] arm: rpi: Use driver model for Ethernet Simon Glass
2015-07-11 5:34 ` [U-Boot] [PATCH 00/20] arm: rpi: Enable USB and Ethernet driver model Raspberry Pi Stephen Warren
2015-07-11 14:04 ` Simon Glass
2015-07-14 4:52 ` Stephen Warren
2015-07-14 15:44 ` Simon Glass
2015-07-24 4:17 ` Stephen Warren
2015-07-24 13:44 ` Tom Rini
2015-07-28 3:10 ` Stephen Warren
2015-07-28 13:55 ` Tom Rini
2015-07-28 15:44 ` Simon Glass
2015-08-01 3:10 ` Stephen Warren
2015-08-01 3:01 ` Stephen Warren [this message]
2015-07-16 14:10 ` Pavel Machek
2015-07-20 14:25 ` Simon Glass
2015-07-24 4:20 ` Stephen Warren
2015-08-03 23:45 ` Marek Vasut
2015-08-04 0:07 ` Simon Glass
2015-08-04 0:37 ` Marek Vasut
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=55BC3675.2000903@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox