Re: [U-Boot] [PATCH v1] env_mmc: configure environment offsets via device tree

2017-04-23 Thread Simon Glass
Hi Philipp,

On 17 February 2017 at 10:28, Philipp Tomsich
 wrote:
> This introduces the ability to override the environment offets from the
> device tree by setting the following nodes in '/config':
> 'u-boot,mmc-env-offset' - overrides CONFIG_ENV_OFFSET
> 'u-boot,mmc-env-offset-redundant'
> - overrides CONFIG_ENV_OFFSET_REDUND
>
> To keep with the previous logic, the CONFIG_* defines still need to
> be available and the statically defined values become the defaults,
> when the corresponding properties are not set in the device-tree.
>
> Signed-off-by: Philipp Tomsich 
> ---
>  common/env_mmc.c | 31 +++
>  1 file changed, 27 insertions(+), 4 deletions(-)

Can you please resend this with an update to config.txt?

I think longer term we should support this for all environment types,
but this is a good start.

Regards,
Simon
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


Re: [U-Boot] [PATCH v1] env_mmc: configure environment offsets via device tree

2017-03-31 Thread Simon Glass
Hi Igor,

On 14 March 2017 at 07:11, Igor Grinberg  wrote:
> Hi Simon,
>
> On 03/12/17 22:21, Simon Glass wrote:
>> Hi Igor,
>>
>> On 5 March 2017 at 01:39, Igor Grinberg  wrote:
>>> Hi Simon,
>>>
>>> On 03/03/17 06:53, Simon Glass wrote:
 Hi Igor,

 On 22 February 2017 at 00:35, Igor Grinberg  
 wrote:
> Hi Philipp, Simon,
>
> On 02/22/17 05:59, Simon Glass wrote:
>> Hi,
>>
>> On 20 February 2017 at 02:18, Dr. Philipp Tomsich
>>  wrote:
>>>
>>> On 20 Feb 2017, at 08:22, Igor Grinberg  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.
>
> Well, yes.. It might be esoteric, but strong enough to push back on
> some patches we have sent to the DT in kernel...
>
>>
>> In 

Re: [U-Boot] [PATCH v1] env_mmc: configure environment offsets via device tree

2017-03-14 Thread Igor Grinberg
Hi Simon,

On 03/12/17 22:21, Simon Glass wrote:
> Hi Igor,
> 
> On 5 March 2017 at 01:39, Igor Grinberg  wrote:
>> Hi Simon,
>>
>> On 03/03/17 06:53, Simon Glass wrote:
>>> Hi Igor,
>>>
>>> On 22 February 2017 at 00:35, Igor Grinberg  wrote:
 Hi Philipp, Simon,

 On 02/22/17 05:59, Simon Glass wrote:
> Hi,
>
> On 20 February 2017 at 02:18, Dr. Philipp Tomsich
>  wrote:
>>
>> On 20 Feb 2017, at 08:22, Igor Grinberg  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.

Well, yes.. It might be esoteric, but strong enough to push back on
some patches we have sent to the DT in kernel...

> 
> 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.

Well, I think this is completely true in x86 world... where things
are much more strict.

> The 

Re: [U-Boot] [PATCH v1] env_mmc: configure environment offsets via device tree

2017-03-12 Thread Simon Glass
Hi Igor,

On 5 March 2017 at 01:39, Igor Grinberg  wrote:
> Hi Simon,
>
> On 03/03/17 06:53, Simon Glass wrote:
>> Hi Igor,
>>
>> On 22 February 2017 at 00:35, Igor Grinberg  wrote:
>>> Hi Philipp, Simon,
>>>
>>> On 02/22/17 05:59, Simon Glass wrote:
 Hi,

 On 20 February 2017 at 02:18, Dr. Philipp Tomsich
  wrote:
>
> On 20 Feb 2017, at 08:22, Igor Grinberg  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 

Re: [U-Boot] [PATCH v1] env_mmc: configure environment offsets via device tree

2017-03-05 Thread Igor Grinberg
Hi Simon,

On 03/03/17 06:53, Simon Glass wrote:
> Hi Igor,
> 
> On 22 February 2017 at 00:35, Igor Grinberg  wrote:
>> Hi Philipp, Simon,
>>
>> On 02/22/17 05:59, Simon Glass wrote:
>>> Hi,
>>>
>>> On 20 February 2017 at 02:18, Dr. Philipp Tomsich
>>>  wrote:

 On 20 Feb 2017, at 08:22, Igor Grinberg  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.

> 
> 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.

I'm more in favor of run time detection and adjustment of static data
along with dynamic code run.

Regarding the environment, I think it would be great to have U-Boot
detect where environment 

Re: [U-Boot] [PATCH v1] env_mmc: configure environment offsets via device tree

2017-03-02 Thread Simon Glass
Hi Igor,

On 22 February 2017 at 00:35, Igor Grinberg  wrote:
> Hi Philipp, Simon,
>
> On 02/22/17 05:59, Simon Glass wrote:
>> Hi,
>>
>> On 20 February 2017 at 02:18, Dr. Philipp Tomsich
>>  wrote:
>>>
>>> On 20 Feb 2017, at 08:22, Igor Grinberg  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.

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.

>
>> 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.

>
>>
>> In fact I wish we could support this for all environment types.
>> Overall the environment drivers need some work to make them more
>> similar...
>
> Indeed, but not just that... It would be great to add a DM to env. drivers.
> This will make it possible to use more than one environment driver
> in 

Re: [U-Boot] [PATCH v1] env_mmc: configure environment offsets via device tree

2017-02-27 Thread Jaehoon Chung
Hi all,

On 02/22/2017 04:35 PM, Igor Grinberg wrote:
> Hi Philipp, Simon,

This patch is delegated to me..but i didn't receive any email in my mail box.
So i didn't know this...i don't read yet fully..

After reading mails, i will reply again.

Thanks.

Best Regards,
Jaehoon Chung

> 
> On 02/22/17 05:59, Simon Glass wrote:
>> Hi,
>>
>> On 20 February 2017 at 02:18, Dr. Philipp Tomsich
>>  wrote:
>>>
>>> On 20 Feb 2017, at 08:22, Igor Grinberg  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.
> 
>> 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.
> 
>>
>> In fact I wish we could support this for all environment types.
>> Overall the environment drivers need some work to make them more
>> similar...
> 
> Indeed, but not just that... It would be great to add a DM to env. drivers.
> This will make it possible to use more than one environment driver
> in runtime and make many people who struggle with it happy...
> 
> 

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/listinfo/u-boot


Re: [U-Boot] [PATCH v1] env_mmc: configure environment offsets via device tree

2017-02-21 Thread Igor Grinberg
Hi Philipp, Simon,

On 02/22/17 05:59, Simon Glass wrote:
> Hi,
> 
> On 20 February 2017 at 02:18, Dr. Philipp Tomsich
>  wrote:
>>
>> On 20 Feb 2017, at 08:22, Igor Grinberg  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.

> 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.

> 
> In fact I wish we could support this for all environment types.
> Overall the environment drivers need some work to make them more
> similar...

Indeed, but not just that... It would be great to add a DM to env. drivers.
This will make it possible to use more than one environment driver
in runtime and make many people who struggle with it happy...


-- 
Regards,
Igor.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH v1] env_mmc: configure environment offsets via device tree

2017-02-21 Thread Simon Glass
Hi,

On 20 February 2017 at 02:18, Dr. Philipp Tomsich
 wrote:
>
> On 20 Feb 2017, at 08:22, Igor Grinberg  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.
>
> 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.
>
> 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.
>
> 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.
>
> 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. So I
like this patch. There is too compile-time configuration in U-Boot
still...

In fact I wish we could support this for all environment types.
Overall the environment drivers need some work to make them more
similar...

Regards,
Simon
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH v1] env_mmc: configure environment offsets via device tree

2017-02-20 Thread Dr. Philipp Tomsich

> On 20 Feb 2017, at 08:22, Igor Grinberg  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.

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.

>>> 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.

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.

>> 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).
> 
> 
> -- 
> Regards,
> Igor.

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH v1] env_mmc: configure environment offsets via device tree

2017-02-20 Thread Igor Grinberg
Hi Philipp,

On 02/19/17 19:59, Dr. Philipp Tomsich wrote:
> Igor,
> 
>> On 19 Feb 2017, at 12:52, Igor Grinberg  wrote:
>>
>> On 02/17/17 19:28, Philipp Tomsich wrote:
>>> This introduces the ability to override the environment offets from the
>>> device tree by setting the following nodes in '/config':
>>> 'u-boot,mmc-env-offset' - overrides CONFIG_ENV_OFFSET
>>> 'u-boot,mmc-env-offset-redundant'
>>> - overrides CONFIG_ENV_OFFSET_REDUND
>>>
>>> To keep with the previous logic, the CONFIG_* defines still need to
>>> be available and the statically defined values become the defaults,
>>> when the corresponding properties are not set in the device-tree.
>>
>> 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.

> 
> U-Boot usually locates the FDT to use at a preconfigured address (or one
> configured in the early environment).

Or just by providing the address to bootz command...

> This will not be the environment we’d
> load from a MMC device configured via DM_MMC.
> 
> So there shouldn’t be a chicken & egg here.
> 
>> 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.

> 
> 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).


-- 
Regards,
Igor.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH v1] env_mmc: configure environment offsets via device tree

2017-02-20 Thread Dr. Philipp Tomsich
Igor,

> On 19 Feb 2017, at 12:52, Igor Grinberg  wrote:
> 
> On 02/17/17 19:28, Philipp Tomsich wrote:
>> This introduces the ability to override the environment offets from the
>> device tree by setting the following nodes in '/config':
>>  'u-boot,mmc-env-offset' - overrides CONFIG_ENV_OFFSET
>>  'u-boot,mmc-env-offset-redundant'
>>  - overrides CONFIG_ENV_OFFSET_REDUND
>> 
>> To keep with the previous logic, the CONFIG_* defines still need to
>> be available and the statically defined values become the defaults,
>> when the corresponding properties are not set in the device-tree.
> 
> 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).

U-Boot usually locates the FDT to use at a preconfigured address (or one
configured in the early environment). This will not be the environment we’d
load from a MMC device configured via DM_MMC.

So there shouldn’t be a chicken & egg here.

> 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).

So putting this in the DT is the best (and least intrusive) option available.

Regards,
Philipp.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH v1] env_mmc: configure environment offsets via device tree

2017-02-20 Thread Igor Grinberg
On 02/17/17 19:28, Philipp Tomsich wrote:
> This introduces the ability to override the environment offets from the
> device tree by setting the following nodes in '/config':
>   'u-boot,mmc-env-offset' - overrides CONFIG_ENV_OFFSET
>   'u-boot,mmc-env-offset-redundant'
>   - overrides CONFIG_ENV_OFFSET_REDUND
> 
> To keep with the previous logic, the CONFIG_* defines still need to
> be available and the statically defined values become the defaults,
> when the corresponding properties are not set in the device-tree.

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 really don't think we should go that direction. DT is not meant to provide
a solution to all your problems...

> 
> Signed-off-by: Philipp Tomsich 
> ---
>  common/env_mmc.c | 31 +++
>  1 file changed, 27 insertions(+), 4 deletions(-)
> 
> diff --git a/common/env_mmc.c b/common/env_mmc.c
> index 16f6a17..ef3dbd1 100644
> --- a/common/env_mmc.c
> +++ b/common/env_mmc.c
> @@ -1,24 +1,25 @@
>  /*
>   * (C) Copyright 2008-2011 Freescale Semiconductor, Inc.
>   *
>   * SPDX-License-Identifier:  GPL-2.0+
>   */
>  
>  /* #define DEBUG */
>  
>  #include 
>  
>  #include 
>  #include 
> +#include 
>  #include 
>  #include 
>  #include 
>  #include 
>  #include 
>  #include 
>  
>  #if defined(CONFIG_ENV_SIZE_REDUND) &&  \
>   (CONFIG_ENV_SIZE_REDUND != CONFIG_ENV_SIZE)
>  #error CONFIG_ENV_SIZE_REDUND should be the same as CONFIG_ENV_SIZE
>  #endif
>  
> @@ -36,21 +37,43 @@ DECLARE_GLOBAL_DATA_PTR;
>  #define CONFIG_ENV_OFFSET 0
>  #endif
>  
> -__weak int mmc_get_env_addr(struct mmc *mmc, int copy, u32 *env_addr)
> +#ifdef CONFIG_OF_LIBFDT
> +static inline s64 mmc_offset(int copy)
>  {
> - s64 offset;
> + const char *propname = "u-boot,mmc-env-offset";
> + s64 defvalue = CONFIG_ENV_OFFSET;
>  
> - offset = CONFIG_ENV_OFFSET;
> -#ifdef CONFIG_ENV_OFFSET_REDUND
> +#if defined(CONFIG_ENV_OFFSET_REDUND)
> + if (copy) {
> + propname = "u-boot,mmc-env-offset-redundant";
> + defvalue = CONFIG_ENV_OFFSET_REDUND;
> + }
> +#endif
> +
> + return fdtdec_get_config_int(gd->fdt_blob, propname, defvalue);
> +}
> +#else
> +static inline s64 mmc_offset(int copy)
> +{
> + s64 offset = CONFIG_ENV_OFFSET;
> +
> +#if defined(CONFIG_ENV_OFFSET_REDUND)
>   if (copy)
>   offset = CONFIG_ENV_OFFSET_REDUND;
>  #endif
> + return offset;
> +}
> +#endif
> +
> +__weak int mmc_get_env_addr(struct mmc *mmc, int copy, u32 *env_addr)
> +{
> + s64 offset = mmc_offset(copy);
>  
>   if (offset < 0)
>   offset += mmc->capacity;
>  
>   *env_addr = offset;
>  
>   return 0;
>  }
>  
> 

-- 
Regards,
Igor.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot