Hi Igor, On 5 March 2017 at 01:39, Igor Grinberg <grinb...@compulab.co.il> wrote: > Hi Simon, > > On 03/03/17 06:53, Simon Glass wrote: >> Hi Igor, >> >> On 22 February 2017 at 00:35, Igor Grinberg <grinb...@compulab.co.il> wrote: >>> Hi Philipp, Simon, >>> >>> On 02/22/17 05:59, Simon Glass wrote: >>>> Hi, >>>> >>>> On 20 February 2017 at 02:18, Dr. Philipp Tomsich >>>> <philipp.toms...@theobroma-systems.com> wrote: >>>>> >>>>> On 20 Feb 2017, at 08:22, Igor Grinberg <grinb...@compulab.co.il> wrote: >>>>> >>>>> That sounds too odd... >>>>> DT's purpose is to describe the h/w... and that does not look so... >>>>> We also, have a dt file name in the environment, so this creates will >>>>> create >>>>> a chicken and an egg problem… >>>>> >>>>> >>>>> I don’t really follow… as far as I knew the DT name would have to come >>>>> from some other source anyway, as the device containing the env might >>>>> only be described through the device tree (e.g. mmc0). >>>>> >>>>> >>>>> Why? U-Boot can live pretty well w/o DT. >>>>> >>>>> >>>>> If U-Boot runs without DT, then nothing will/should change about how the >>>>> setting >>>>> is retrieved from CONFIG_ENV_OFFSET. >>> >>> ok. >>> >>>>> >>>>> The platform that motivated this change is ARCH_SUNXI, which does not use >>>>> per-board defines but aims to have one generic bootloader per-SoC. >>> >>> Well, after a ten year experience with boars and different SoC vendors, >>> I don't think it is possible... >>> Unless all boards are copies of their respective reference design... >>> >>>>> >>>>> I really don't think we should go that direction. DT is not meant to >>>>> provide >>>>> a solution to all your problems... >>>>> >>>>> >>>>> I don’t see how this is different from other entries in chosen and config >>>>> as >>>>> of today: >>>>> common/autoboot.c allows an override through /config/bootdelay >>>>> common/board_r.c uses /config/load-environment >>>>> common/cli.c can pull in /config/bootcmd >>>>> drivers/serial/serial-uclass.c uses /chosen/stdout-path >>>>> >>>>> In fact, it is the absence of this mechanism that is causing problems >>>>> today: >>>>> CONFIG_ENV_OFFSET is not configurable through Kconfig, so we would >>>>> need board-specific defines (e.g. CONFIG_SUNXI_BOARD_LYNX) and >>>>> matching #ifdef primitives in a shared header (sunxi-common.h in our >>>>> case). >>>>> >>>>> >>>>> Right. Exactly, I think we should move the CONFIG_ENV_OFFSET to Kconfig. >>>>> And that will solve the problem. >>>>> >>>>> >>>>> Doing this would still get into the way of architectures that want to >>>>> build >>>>> a single >>>>> ‘universal’ bootloader for their SoC: the ENV_OFFSET may not be the same >>>>> across all board and vendor configurations. This can easily be handled >>>>> with >>>>> the >>>>> (optional) prop in the DT, but not with the compile-time ENV_OFFSET. >>> >>> I think Kconfig would be enough for this, but please try your approach. >>> The 'universal' thing will probably work if you don't have too many boards >>> and >>> they don't differ too much from each other... >>> >>>>> >>>>> If we decide to this, I’d at least like to introduce the function call to >>>>> (the weak >>>>> function) mmc_get_env_addr(…), so we can override this in the board code. >>> >>> That is how it works today: >>> include/environment.h:185:extern int mmc_get_env_addr(struct mmc *mmc, int >>> copy, u32 *env_addr); >>> >>>>> >>>>> So putting this in the DT is the best (and least intrusive) option >>>>> available. >>>>> >>>>> >>>>> Ok. I see your point now. Yet I think we should keep the DT to its >>>>> purpose - >>>>> which >>>>> is to describe the h/w (and not the s/w placement layout). >>>> >>>> Well actually we put things like flash map in there and the >>>> environment position seems like a very good thing to have there. >>> >>> Well, I thought so too... But I had a discussion with kernel people >>> some time ago and they discourage this approach and would not like to >>> have the flash mapping in the DT. >> >> I'm sorry to hear that, but it doesn't change the fact that it is very >> useful for dealing with hardware-specific differences between models. > > According to kernel guys, these are not h/w specific, but rather device > specific... and it actually makes sense - on the same h/w design different > applications can use different flash mapping - just like the block devices.
Really? That sounds like a pretty esoteric case to me. In my experience the flash mapping is normally fixed at production time and there may be parts that are write-protected, e.g. with a hardware switch. The flash map generally needs to be understood by both firmware and kernel. It is as much a feature of the hardware as which serial console to use. > >> >> Building the same software multiple times with different #ifdefs is >> often painful. Using a DT to handle these minor differences reduces >> the number of build combinations and simplifies testing. > > Well, partially... > I agree that building different binaries with #ifdefs is very painful > and I highly discourage this approach. > Using a DT to handle these differences, IMO, is better but also not that > good, as it requires building multiple DT binaries (which I consider the > same as multiple U-Boot binaries) and therefore does not reduce the number > of build combinations... you just abstract the problem to a separate binary. It has a big positive impact on complexity though. You build U-Boot once and attach the appropriate device tree at the end, perhaps during production. This is similar to how Linux boots on different hardware times, with just a different DT. > > I'm more in favor of run time detection and adjustment of static data > along with dynamic code run. Well that is certainly possible. I think the trade-off here depends on your production syste,. > > Regarding the environment, I think it would be great to have U-Boot > detect where environment location is and proceed with it. > Just like the boot sequence stuff... Well that is a separate feature from what is being discussed here. But IMO a solid flash map available to everything is better. You can define where the environment is, and anything else you find. > >> >>> >>>> So I >>>> like this patch. There is too compile-time configuration in U-Boot >>>> still... >>> >>> Yeah, I know you like it ;-) but DT is not the place for it, >>> unless DT specs. guys decide to change its purpose and place >>> s/w configuration straps inside... >>> >>> Although, U-Boot build process is not a pain at all, you might want >>> to design another abstraction layer for s/w configuration straps. >>> That way you will be able to keep the U-Boot core binary generic... >>> Is it worse the effort? I don't know. Currently, having the board >>> infrastructure, provides that layer and works fine. >> >> At present in U-Boot DT is that layer. We don't need to ban useful >> additions like this and I really am not keen on adding another config >> mechanism. > > So, how would you sync between the DTs in U-Boot and kernel? Do you mean how to sync the flashmap? It can be passed down to Linux in the DT, if that is what you are asking? Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot