public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] __mmc_get_env_addr() is not being called?
@ 2011-12-16  5:54 Shawn Guo
  2011-12-16  9:31 ` Stefano Babic
  2011-12-16  9:33 ` Fabio Estevam
  0 siblings, 2 replies; 8+ messages in thread
From: Shawn Guo @ 2011-12-16  5:54 UTC (permalink / raw)
  To: u-boot

Hi,

I'm running v2011.12-rc1 (with one missing usdhc patch applied) on
mx6qarm2 board, and seeing a problem.  When I install u-boot on a
blank SD card, it boots fine with messge "*** Warning - bad CRC,
using default environment" seen as expected.  But once I run command
'save' to write envs to the card, the card stop booting.

I tracked the issue a little bit, and found __mmc_get_env_addr() does
not get called at all.  Therefore when I run 'save' for the first time,
the envs are written to offset 0 of the card, which in turn overwrites
the boot image.

I have not figured out why it does.  But the following change fixes
the problem for me.

diff --git a/common/env_mmc.c b/common/env_mmc.c
index 8441c77..3832fe4 100644
--- a/common/env_mmc.c
+++ b/common/env_mmc.c
@@ -46,13 +46,11 @@ DECLARE_GLOBAL_DATA_PTR;
 #define CONFIG_ENV_OFFSET 0
 #endif

-static int __mmc_get_env_addr(struct mmc *mmc, u32 *env_addr)
+static int mmc_get_env_addr(struct mmc *mmc, u32 *env_addr)
 {
        *env_addr = CONFIG_ENV_OFFSET;
        return 0;
 }
-int mmc_get_env_addr(struct mmc *mmc, u32 *env_addr)
-       __attribute__((weak, alias("__mmc_get_env_addr")));

Any comment on why the change fixes the problem is appreciated.

-- 
Regards,
Shawn

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [U-Boot] __mmc_get_env_addr() is not being called?
  2011-12-16  5:54 [U-Boot] __mmc_get_env_addr() is not being called? Shawn Guo
@ 2011-12-16  9:31 ` Stefano Babic
  2011-12-19  5:21   ` Jason Liu
  2011-12-16  9:33 ` Fabio Estevam
  1 sibling, 1 reply; 8+ messages in thread
From: Stefano Babic @ 2011-12-16  9:31 UTC (permalink / raw)
  To: u-boot

On 16/12/2011 06:54, Shawn Guo wrote:
> Hi,
> 

Hi Shawn,

> I'm running v2011.12-rc1 (with one missing usdhc patch applied) on
> mx6qarm2 board, and seeing a problem.  When I install u-boot on a
> blank SD card, it boots fine with messge "*** Warning - bad CRC,
> using default environment" seen as expected.  But once I run command
> 'save' to write envs to the card, the card stop booting.
> 
> I tracked the issue a little bit, and found __mmc_get_env_addr() does
> not get called at all.  Therefore when I run 'save' for the first time,
> the envs are written to offset 0 of the card, which in turn overwrites
> the boot image.
> 
> I have not figured out why it does.  But the following change fixes
> the problem for me.
> 
> diff --git a/common/env_mmc.c b/common/env_mmc.c
> index 8441c77..3832fe4 100644
> --- a/common/env_mmc.c
> +++ b/common/env_mmc.c
> @@ -46,13 +46,11 @@ DECLARE_GLOBAL_DATA_PTR;
>  #define CONFIG_ENV_OFFSET 0
>  #endif
> 
> -static int __mmc_get_env_addr(struct mmc *mmc, u32 *env_addr)
> +static int mmc_get_env_addr(struct mmc *mmc, u32 *env_addr)
>  {
>         *env_addr = CONFIG_ENV_OFFSET;
>         return 0;
>  }
> -int mmc_get_env_addr(struct mmc *mmc, u32 *env_addr)
> -       __attribute__((weak, alias("__mmc_get_env_addr")));
> 
> Any comment on why the change fixes the problem is appreciated.

The function is declared weak, this means that a specific architecture
could implement its own version. The reason why it does not work is that
there is a specific implementation in board/freescale/sdhc_boot.c, and
the mmc_get_env_addr() in this file is taken instead of the default when
CONFIG_ENV_IS_IN_MMC (as in our case) is set. Instead of your proposal,
we should surround mmc_get_env_addr() in sdhc_boot.c with something like
#ifndef CONFIG_MX6Q, or check if we can reuse this function, that really
does not use CONFIG_ENV_OFFSET at all.

I put Jason (board maintainer) in CC - Jason, what do mind ? Do you get
the same issue when you tested the board ?

Best regards,
Stefano Babic

-- 
=====================================================================
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80  Email: office at denx.de
=====================================================================

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot] __mmc_get_env_addr() is not being called?
  2011-12-16  5:54 [U-Boot] __mmc_get_env_addr() is not being called? Shawn Guo
  2011-12-16  9:31 ` Stefano Babic
@ 2011-12-16  9:33 ` Fabio Estevam
  2011-12-16  9:42   ` Stefano Babic
  1 sibling, 1 reply; 8+ messages in thread
From: Fabio Estevam @ 2011-12-16  9:33 UTC (permalink / raw)
  To: u-boot

On Fri, Dec 16, 2011 at 3:54 AM, Shawn Guo <shawn.guo@freescale.com> wrote:
> Hi,
>
> I'm running v2011.12-rc1 (with one missing usdhc patch applied) on
> mx6qarm2 board, and seeing a problem. ?When I install u-boot on a
> blank SD card, it boots fine with messge "*** Warning - bad CRC,
> using default environment" seen as expected. ?But once I run command
> 'save' to write envs to the card, the card stop booting.

This is the same behavior I saw on mx28evk as well and I sent this
patch to fix it:
http://lists.denx.de/pipermail/u-boot/2011-November/111448.html

>
> I tracked the issue a little bit, and found __mmc_get_env_addr() does
> not get called at all. ?Therefore when I run 'save' for the first time,
> the envs are written to offset 0 of the card, which in turn overwrites
> the boot image.
>
> I have not figured out why it does. ?But the following change fixes
> the problem for me.
>
> diff --git a/common/env_mmc.c b/common/env_mmc.c
> index 8441c77..3832fe4 100644
> --- a/common/env_mmc.c
> +++ b/common/env_mmc.c
> @@ -46,13 +46,11 @@ DECLARE_GLOBAL_DATA_PTR;
> ?#define CONFIG_ENV_OFFSET 0
> ?#endif
>
> -static int __mmc_get_env_addr(struct mmc *mmc, u32 *env_addr)
> +static int mmc_get_env_addr(struct mmc *mmc, u32 *env_addr)
> ?{
> ? ? ? ?*env_addr = CONFIG_ENV_OFFSET;
> ? ? ? ?return 0;
> ?}
> -int mmc_get_env_addr(struct mmc *mmc, u32 *env_addr)
> - ? ? ? __attribute__((weak, alias("__mmc_get_env_addr")));
>
> Any comment on why the change fixes the problem is appreciated.

The weak function was introduced by this commit:
http://git.denx.de/?p=u-boot.git;a=commitdiff;h=97039ab98c551c7860bc0977d684ef686159e0d7

which breaks non CONFIG_FSL_ESDHC users.

Regards,

Fabio Estevam

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot] __mmc_get_env_addr() is not being called?
  2011-12-16  9:33 ` Fabio Estevam
@ 2011-12-16  9:42   ` Stefano Babic
  2011-12-18 17:56     ` Kumar Gala
  0 siblings, 1 reply; 8+ messages in thread
From: Stefano Babic @ 2011-12-16  9:42 UTC (permalink / raw)
  To: u-boot

On 16/12/2011 10:33, Fabio Estevam wrote:

> 
> The weak function was introduced by this commit:
> http://git.denx.de/?p=u-boot.git;a=commitdiff;h=97039ab98c551c7860bc0977d684ef686159e0d7
> 
> which breaks non CONFIG_FSL_ESDHC users.

Ok, I see - the patch is more related to Freescale SOCs as to the MMC,
and it is sometimes unknown who whould pick it up.

Andy, not CONFIG_FSL_ESDHC means IMX users - if you do not complain, I
merge it into u-boot-imx.

Thanks,
Stefano

-- 
=====================================================================
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80  Email: office at denx.de
=====================================================================

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot] __mmc_get_env_addr() is not being called?
  2011-12-16  9:42   ` Stefano Babic
@ 2011-12-18 17:56     ` Kumar Gala
  2011-12-19  6:37       ` Stefano Babic
  0 siblings, 1 reply; 8+ messages in thread
From: Kumar Gala @ 2011-12-18 17:56 UTC (permalink / raw)
  To: u-boot


On Dec 16, 2011, at 3:42 AM, Stefano Babic wrote:

> On 16/12/2011 10:33, Fabio Estevam wrote:
> 
>> 
>> The weak function was introduced by this commit:
>> http://git.denx.de/?p=u-boot.git;a=commitdiff;h=97039ab98c551c7860bc0977d684ef686159e0d7
>> 
>> which breaks non CONFIG_FSL_ESDHC users.
> 
> Ok, I see - the patch is more related to Freescale SOCs as to the MMC,
> and it is sometimes unknown who whould pick it up.
> 
> Andy, not CONFIG_FSL_ESDHC means IMX users - if you do not complain, I
> merge it into u-boot-imx.
> 
> Thanks,
> Stefano

If I'm reading the patch correct it will break things (or I'm not sure which patch you're referring to).  How would the PPC specific version ever get called?

- k

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot] __mmc_get_env_addr() is not being called?
  2011-12-16  9:31 ` Stefano Babic
@ 2011-12-19  5:21   ` Jason Liu
  0 siblings, 0 replies; 8+ messages in thread
From: Jason Liu @ 2011-12-19  5:21 UTC (permalink / raw)
  To: u-boot

2011/12/16 Stefano Babic <sbabic@denx.de>:
> On 16/12/2011 06:54, Shawn Guo wrote:
>> Hi,
>>
>
> Hi Shawn,
>
>> I'm running v2011.12-rc1 (with one missing usdhc patch applied) on
>> mx6qarm2 board, and seeing a problem. ?When I install u-boot on a
>> blank SD card, it boots fine with messge "*** Warning - bad CRC,
>> using default environment" seen as expected. ?But once I run command
>> 'save' to write envs to the card, the card stop booting.
>>
>> I tracked the issue a little bit, and found __mmc_get_env_addr() does
>> not get called at all. ?Therefore when I run 'save' for the first time,
>> the envs are written to offset 0 of the card, which in turn overwrites
>> the boot image.
>>
>> I have not figured out why it does. ?But the following change fixes
>> the problem for me.
>>
>> diff --git a/common/env_mmc.c b/common/env_mmc.c
>> index 8441c77..3832fe4 100644
>> --- a/common/env_mmc.c
>> +++ b/common/env_mmc.c
>> @@ -46,13 +46,11 @@ DECLARE_GLOBAL_DATA_PTR;
>> ?#define CONFIG_ENV_OFFSET 0
>> ?#endif
>>
>> -static int __mmc_get_env_addr(struct mmc *mmc, u32 *env_addr)
>> +static int mmc_get_env_addr(struct mmc *mmc, u32 *env_addr)
>> ?{
>> ? ? ? ? *env_addr = CONFIG_ENV_OFFSET;
>> ? ? ? ? return 0;
>> ?}
>> -int mmc_get_env_addr(struct mmc *mmc, u32 *env_addr)
>> - ? ? ? __attribute__((weak, alias("__mmc_get_env_addr")));
>>
>> Any comment on why the change fixes the problem is appreciated.
>
> The function is declared weak, this means that a specific architecture
> could implement its own version. The reason why it does not work is that
> there is a specific implementation in board/freescale/sdhc_boot.c, and
> the mmc_get_env_addr() in this file is taken instead of the default when
> CONFIG_ENV_IS_IN_MMC (as in our case) is set. Instead of your proposal,
> we should surround mmc_get_env_addr() in sdhc_boot.c with something like
> #ifndef CONFIG_MX6Q, or check if we can reuse this function, that really
> does not use CONFIG_ENV_OFFSET at all.
>
> I put Jason (board maintainer) in CC - Jason, what do mind ? Do you get
> the same issue when you tested the board ?

Stefano, I saw the issue.
Fabio's patch can fix the i.mx28evk issue, but can't fix the following
platforms:

11    144  include/configs/efikamx.h <<CONFIG_FSL_ESDHC>>
             #define CONFIG_FSL_ESDHC
  12     86  include/configs/mx51evk.h <<CONFIG_FSL_ESDHC>>
             #define CONFIG_FSL_ESDHC
  13     58  include/configs/mx53ard.h <<CONFIG_FSL_ESDHC>>
             #define CONFIG_FSL_ESDHC
  14     68  include/configs/mx53evk.h <<CONFIG_FSL_ESDHC>>
             #define CONFIG_FSL_ESDHC
  15     51  include/configs/mx53loco.h <<CONFIG_FSL_ESDHC>>
             #define CONFIG_FSL_ESDHC
  16     58  include/configs/mx53smd.h <<CONFIG_FSL_ESDHC>>
             #define CONFIG_FSL_ESDHC
  17     48  include/configs/mx6qarm2.h <<CONFIG_FSL_ESDHC>>
             #define CONFIG_FSL_ESDHC
  18     48  include/configs/mx6qsabrelite.h <<CONFIG_FSL_ESDHC>>
             #define CONFIG_FSL_ESDHC
  20    105  include/configs/vision2.h <<CONFIG_FSL_ESDHC>>
             #define CONFIG_FSL_ESDHC

The commit  97039ab98 (env_mmc: Allow board code to override the
environment address)
break the i.mx5/6 boards support.

 BR,
Jason

>
> Best regards,
> Stefano Babic
>
> --
> =====================================================================
> DENX Software Engineering GmbH, ? ? MD: Wolfgang Denk & Detlev Zundel
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 ?Email: office at denx.de
> =====================================================================
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot] __mmc_get_env_addr() is not being called?
  2011-12-18 17:56     ` Kumar Gala
@ 2011-12-19  6:37       ` Stefano Babic
  2011-12-19  6:53         ` Jason Hui
  0 siblings, 1 reply; 8+ messages in thread
From: Stefano Babic @ 2011-12-19  6:37 UTC (permalink / raw)
  To: u-boot

On 18/12/2011 18:56, Kumar Gala wrote:
> 
> On Dec 16, 2011, at 3:42 AM, Stefano Babic wrote:
> 
>> On 16/12/2011 10:33, Fabio Estevam wrote:
>>
>>>
>>> The weak function was introduced by this commit:
>>> http://git.denx.de/?p=u-boot.git;a=commitdiff;h=97039ab98c551c7860bc0977d684ef686159e0d7
>>>
>>> which breaks non CONFIG_FSL_ESDHC users.
>>
>> Ok, I see - the patch is more related to Freescale SOCs as to the MMC,
>> and it is sometimes unknown who whould pick it up.
>>
>> Andy, not CONFIG_FSL_ESDHC means IMX users - if you do not complain, I
>> merge it into u-boot-imx.
>>
>> Thanks,
>> Stefano
> 
> If I'm reading the patch correct it will break things (or I'm not sure which patch you're referring to).  How would the PPC specific version ever get called?

Yes, I was too optimistic with the patch, I have myself seen that the
patch then break PowerPC boards.

Reading sdhc_boot.c, this file is not strictly related to PowerPC or IMX
hardware, but where u-boot image is stored on PowerPC code.

This is like a specific feature, but there is not a specific CONFIG_ for
it. In fact, in board/freescale/common/Makefile the file is always
compiled if CONFIG_RAMBOOT_PBL (not significant for imx) is not set if
the environment is in MMC:

ifndef CONFIG_RAMBOOT_PBL
COBJS-$(CONFIG_ENV_IS_IN_MMC)   += sdhc_boot.o
endif

What about to have a specific CONFIG_FSL_* for this file ? It can be
defined for PowerPC boards, and it will not for IMX. Any thoughts ?

Stefano

-- 
=====================================================================
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80  Email: office at denx.de
=====================================================================

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot] __mmc_get_env_addr() is not being called?
  2011-12-19  6:37       ` Stefano Babic
@ 2011-12-19  6:53         ` Jason Hui
  0 siblings, 0 replies; 8+ messages in thread
From: Jason Hui @ 2011-12-19  6:53 UTC (permalink / raw)
  To: u-boot

On Mon, Dec 19, 2011 at 2:37 PM, Stefano Babic <sbabic@denx.de> wrote:
> On 18/12/2011 18:56, Kumar Gala wrote:
>>
>> On Dec 16, 2011, at 3:42 AM, Stefano Babic wrote:
>>
>>> On 16/12/2011 10:33, Fabio Estevam wrote:
>>>
>>>>
>>>> The weak function was introduced by this commit:
>>>> http://git.denx.de/?p=u-boot.git;a=commitdiff;h=97039ab98c551c7860bc0977d684ef686159e0d7
>>>>
>>>> which breaks non CONFIG_FSL_ESDHC users.
>>>
>>> Ok, I see - the patch is more related to Freescale SOCs as to the MMC,
>>> and it is sometimes unknown who whould pick it up.
>>>
>>> Andy, not CONFIG_FSL_ESDHC means IMX users - if you do not complain, I
>>> merge it into u-boot-imx.
>>>
>>> Thanks,
>>> Stefano
>>
>> If I'm reading the patch correct it will break things (or I'm not sure which patch you're referring to). ?How would the PPC specific version ever get called?
>
> Yes, I was too optimistic with the patch, I have myself seen that the
> patch then break PowerPC boards.
>
> Reading sdhc_boot.c, this file is not strictly related to PowerPC or IMX
> hardware, but where u-boot image is stored on PowerPC code.
>
> This is like a specific feature, but there is not a specific CONFIG_ for
> it. In fact, in board/freescale/common/Makefile the file is always
> compiled if CONFIG_RAMBOOT_PBL (not significant for imx) is not set if
> the environment is in MMC:
>
> ifndef CONFIG_RAMBOOT_PBL
> COBJS-$(CONFIG_ENV_IS_IN_MMC) ? += sdhc_boot.o
> endif
>
> What about to have a specific CONFIG_FSL_* for this file ? It can be
> defined for PowerPC boards, and it will not for IMX. Any thoughts ?

I agree with this option. Also Cced: Chang-Ming.Huang at freescale.com

>
> Stefano
>
> --
> =====================================================================
> DENX Software Engineering GmbH, ? ? MD: Wolfgang Denk & Detlev Zundel
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 ?Email: office at denx.de
> =====================================================================

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2011-12-19  6:53 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-12-16  5:54 [U-Boot] __mmc_get_env_addr() is not being called? Shawn Guo
2011-12-16  9:31 ` Stefano Babic
2011-12-19  5:21   ` Jason Liu
2011-12-16  9:33 ` Fabio Estevam
2011-12-16  9:42   ` Stefano Babic
2011-12-18 17:56     ` Kumar Gala
2011-12-19  6:37       ` Stefano Babic
2011-12-19  6:53         ` Jason Hui

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox