Message ID | 1294211855-18584-1-git-send-email-thomas@wytron.com.tw |
---|---|
State | Superseded |
Headers | show |
Dear Thomas Chou, In message <1294211855-18584-1-git-send-email-thomas@wytron.com.tw> you wrote: > Flash might be in unknown state when u-boot is started with jtag. > And got wrong env data. So reset it in board early init. > > Signed-off-by: Thomas Chou <thomas@wytron.com.tw> > --- > board/altera/nios2-generic/nios2-generic.c | 6 ++++++ > 1 files changed, 6 insertions(+), 0 deletions(-) > > diff --git a/board/altera/nios2-generic/nios2-generic.c b/board/altera/nios2-generic/nios2-generic.c > index 89848cf..b76e479 100644 > --- a/board/altera/nios2-generic/nios2-generic.c > +++ b/board/altera/nios2-generic/nios2-generic.c > @@ -24,12 +24,18 @@ > > #include <common.h> > #include <netdev.h> > +#include <mtd/cfi_flash.h> > +#include <asm/io.h> > > void text_base_hook(void); /* nop hook for text_base.S */ > > int board_early_init_f(void) > { > text_base_hook(); > +#if defined(CONFIG_ENV_IS_IN_FLASH) && defined(CONFIG_SYS_FLASH_BASE) > + writeb(AMD_CMD_RESET, CONFIG_SYS_FLASH_BASE); > + writeb(FLASH_CMD_RESET, CONFIG_SYS_FLASH_BASE); > +#endif Instead of making fixed assumptions about flash type and it's properties here you should use generic routines from the CFI driver to do the reset. Best regards, Wolfgang Denk
On 01/05/2011 04:15 PM, Wolfgang Denk wrote: > Instead of making fixed assumptions about flash type and it's > properties here you should use generic routines from the CFI driver to > do the reset. > Dear Wolfgang, env_init() goes before flash_init() in board.c. So we don't know the flash type and cannot use those generic cfi routines based on flash_info. I followed this in cfi_flash.c void __flash_cmd_reset(flash_info_t *info) { /* * We do not yet know what kind of commandset to use, so we issue * the reset command in both Intel and AMD variants, in the hope * that AMD flash roms ignore the Intel command. */ flash_write_cmd(info, 0, 0, AMD_CMD_RESET); flash_write_cmd(info, 0, 0, FLASH_CMD_RESET); } I am not sure if this thing should be added to generic code, because I found powerpc skiped flash_init when board_flash_wp_on in board.c. Best regards, Thomas
Dear Thomas Chou, In message <4D252AAB.6040308@wytron.com.tw> you wrote: > > > Instead of making fixed assumptions about flash type and it's > > properties here you should use generic routines from the CFI driver to > > do the reset. ... > env_init() goes before flash_init() in board.c. So we don't know the > flash type and cannot use those generic cfi routines based on flash_info. > > I followed this in cfi_flash.c > > void __flash_cmd_reset(flash_info_t *info) I recommend you have a second, closer look. Notice that flash_cmd_reset() comes with __attribute__ weak, because it does not work as a general solution - it may work here, but other code may be needed on other flash chips. Your code does not provide such an option. Best regards, Wolfgang Denk
Dear Wolfgang, On 01/18/2011 05:02 AM, Wolfgang Denk wrote: >> void __flash_cmd_reset(flash_info_t *info) > > I recommend you have a second, closer look. Notice that > flash_cmd_reset() comes with __attribute__ weak, because it does not > work as a general solution - it may work here, but other code may be > needed on other flash chips. > > Your code does not provide such an option. Thanks a lot. I will add a weak attribute. Best regards, Thomas
diff --git a/board/altera/nios2-generic/nios2-generic.c b/board/altera/nios2-generic/nios2-generic.c index 89848cf..b76e479 100644 --- a/board/altera/nios2-generic/nios2-generic.c +++ b/board/altera/nios2-generic/nios2-generic.c @@ -24,12 +24,18 @@ #include <common.h> #include <netdev.h> +#include <mtd/cfi_flash.h> +#include <asm/io.h> void text_base_hook(void); /* nop hook for text_base.S */ int board_early_init_f(void) { text_base_hook(); +#if defined(CONFIG_ENV_IS_IN_FLASH) && defined(CONFIG_SYS_FLASH_BASE) + writeb(AMD_CMD_RESET, CONFIG_SYS_FLASH_BASE); + writeb(FLASH_CMD_RESET, CONFIG_SYS_FLASH_BASE); +#endif return 0; }
Flash might be in unknown state when u-boot is started with jtag. And got wrong env data. So reset it in board early init. Signed-off-by: Thomas Chou <thomas@wytron.com.tw> --- board/altera/nios2-generic/nios2-generic.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-)