* [ECOS] Redboot_ROM config_data corrupted by flash_erase @ 2007-07-16 15:50 Tales Toledo 2007-07-16 21:49 ` Sergei Gavrikov 0 siblings, 1 reply; 4+ messages in thread From: Tales Toledo @ 2007-07-16 15:50 UTC (permalink / raw) To: ecos-discuss Hi, can flash_erase corrupt my config_data (I'm running Redboot from ROM)? I'm asking this because just before if ((stat = flash_erase(cfg_base, cfg_size, (void **)&err_addr)) != 0) { diag_printf(" initialization failed at %p: %s\n", err_addr, flash_errmsg(stat)); at fconfig.c I can get all config-key1, config->key2, config->cksum with the right values. After run flash_erase and before run conf_endian_fixup + flash_program the config_data is corruted and lost config->key2 and config->cksum. Atte, TT -- Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [ECOS] Redboot_ROM config_data corrupted by flash_erase 2007-07-16 15:50 [ECOS] Redboot_ROM config_data corrupted by flash_erase Tales Toledo @ 2007-07-16 21:49 ` Sergei Gavrikov 2007-07-17 13:12 ` Tales Toledo 0 siblings, 1 reply; 4+ messages in thread From: Sergei Gavrikov @ 2007-07-16 21:49 UTC (permalink / raw) To: Tales Toledo; +Cc: ecos-discuss On Mon, Jul 16, 2007 at 12:50:52PM -0300, Tales Toledo wrote: > Hi, > > can flash_erase corrupt my config_data (I'm running Redboot from ROM)? > > I'm asking this because just before > > if ((stat = flash_erase(cfg_base, cfg_size, (void **)&err_addr)) != 0) { > diag_printf(" initialization failed at %p: %s\n", > err_addr, flash_errmsg(stat)); > > at fconfig.c I can get all config-key1, config->key2, config->cksum > with the right values. > > After run flash_erase and before run conf_endian_fixup + flash_program > the config_data is corruted and lost config->key2 and config->cksum. > That's normal if you had meant a "corruption" of a copy is placed in FLASH. The `FLASH_BlankValue' values (io/flash/include/flash_dev.h) should be there after flash_erase() ... -> flash_erase_block () calls. For the _most_ cases that area will be look as an array is filled by 0xff. These is an example of *config, *backup_config, and *(struct _config *)cfg_base GDB displays for RedBoot 'fconfig -i' command, GDB is stopped in a middle of the flash_erase_block() function. This is just a demo for my platform (gdb) n 324 if (*b_v != FLASH_BlankValue ) { 3: *(struct _config *) cfg_base = {len = 0xffffffff, key1 = 0xffffffff, config_data = '�' <repeats 4080 times>, key2 = 0xffffffff, cksum = 0xffffffff} 2: *backup_config = {len = 0x1000, key1 = 0xbadface, config_data = "\001\f\001\0boot_script\0\0\0\0\0\004\021\001\fboot_script_data\0boot_script", '\0' <repeats 513 times>, "\002\024\001\fboot_script_timeout\0boot_script\0\0\0\0\0\002\022\001\0console_baud_rate\0\0\226", '\0' <repeats 3450 times>, key2 = 0xdeaddead, cksum = 0xba13f4de} 1: *config = {len = 0x1000, key1 = 0xbadface, config_data = "\001\f\001\0boot_script\0\0\0\0\0\004\021\001\fboot_script_data\0boot_script", '\0' <repeats 513 times>, "\002\024\001\fboot_script_timeout\0boot_script\0\0\0\0\0\002\022\001\0console_baud_rate\0\0\226", '\0' <repeats 3450 times>, key2 = 0xdeaddead, cksum = 0xba13f4de} (gdb) So, the flash_erase() call does (should do) an erasing (look at the GDB's display the *cfg_base , and then FLASH_PROGRAM() should do a real programming the `config' struct into the FLASH. You see, what there is such a sequence: flash_unlock (optional) -> flash_erase -> flash_program -> flash_lock (optional) there, so, you can believe the flash function naming. It's more interesting what will those values (key1, key2, crc) be after the FLASH_PROGRAM() call. Sergei > Atte, > TT > > -- > Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos > and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss -- Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [ECOS] Redboot_ROM config_data corrupted by flash_erase 2007-07-16 21:49 ` Sergei Gavrikov @ 2007-07-17 13:12 ` Tales Toledo 2007-07-17 19:04 ` Sergei Gavrikov 0 siblings, 1 reply; 4+ messages in thread From: Tales Toledo @ 2007-07-17 13:12 UTC (permalink / raw) To: Sergei Gavrikov; +Cc: ecos-discuss On 7/16/07, Sergei Gavrikov <w3sg@softhome.net> wrote: > On Mon, Jul 16, 2007 at 12:50:52PM -0300, Tales Toledo wrote: > > Hi, > > > > can flash_erase corrupt my config_data (I'm running Redboot from ROM)? > > > > I'm asking this because just before > > > > if ((stat = flash_erase(cfg_base, cfg_size, (void **)&err_addr)) != 0) { > > diag_printf(" initialization failed at %p: %s\n", > > err_addr, flash_errmsg(stat)); > > > > at fconfig.c I can get all config-key1, config->key2, config->cksum > > with the right values. > > > > After run flash_erase and before run conf_endian_fixup + flash_program > > the config_data is corruted and lost config->key2 and config->cksum. > > > > That's normal if you had meant a "corruption" of a copy is placed in > FLASH. The `FLASH_BlankValue' values (io/flash/include/flash_dev.h) > should be there after flash_erase() ... -> flash_erase_block () calls. > For the _most_ cases that area will be look as an array is filled by > 0xff. These is an example of *config, *backup_config, and *(struct > _config *)cfg_base GDB displays for RedBoot 'fconfig -i' command, GDB is > stopped in a middle of the flash_erase_block() function. This is just a > demo for my platform > > (gdb) n > 324 if (*b_v != FLASH_BlankValue ) { > 3: *(struct _config *) cfg_base = {len = 0xffffffff, key1 = 0xffffffff, > config_data = '�' <repeats 4080 times>, key2 = 0xffffffff, > cksum = 0xffffffff} > 2: *backup_config = {len = 0x1000, key1 = 0xbadface, > config_data = > "\001\f\001\0boot_script\0\0\0\0\0\004\021\001\fboot_script_data\0boot_script", > '\0' <repeats 513 times>, > "\002\024\001\fboot_script_timeout\0boot_script\0\0\0\0\0\002\022\001\0console_baud_rate\0\0\226", > '\0' <repeats 3450 times>, key2 = 0xdeaddead, cksum = 0xba13f4de} > 1: *config = {len = 0x1000, key1 = 0xbadface, > config_data = > "\001\f\001\0boot_script\0\0\0\0\0\004\021\001\fboot_script_data\0boot_script", > '\0' <repeats 513 times>, > "\002\024\001\fboot_script_timeout\0boot_script\0\0\0\0\0\002\022\001\0console_baud_rate\0\0\226", > '\0' <repeats 3450 times>, key2 = 0xdeaddead, cksum = 0xba13f4de} > (gdb) > > So, the flash_erase() call does (should do) an erasing (look at the > GDB's display the *cfg_base , and then FLASH_PROGRAM() should do a real > programming the `config' struct into the FLASH. You see, what there is > such a sequence: flash_unlock (optional) -> flash_erase -> flash_program > -> flash_lock (optional) there, so, you can believe the flash function > naming. It's more interesting what will those values (key1, key2, crc) > be after the FLASH_PROGRAM() call. This is the printf code used @ fconfig.c diag_printf("\nconfig->key1 = 0x%lx, config->key2 = 0x%lx, config->cksum = 0x%lx\n", config->key1, config->key2, config->cksum); if ((stat = flash_erase(cfg_base, cfg_size, (void **)&err_addr)) != 0) { diag_printf(" initialization failed at %p: %s\n", err_addr, flash_errmsg(stat)); } else { diag_printf("\nconfig->key1 = 0x%lx, config->key2 = 0x%lx, config->cksum = 0x%lx\n", config->key1, config->key2, config->cksum); conf_endian_fixup(config); diag_printf("\nconfig->key1 = 0x%lx, config->key2 = 0x%lx, config->cksum = 0x%lx\n", config->key1, config->key2, config->cksum); if ((stat = FLASH_PROGRAM(cfg_base, config, sizeof(struct _config), (void **)&err_addr)) != 0) { diag_printf("Error writing config data at %p: %s\n", err_addr, flash_errmsg(stat)); } diag_printf("\nconfig->key1 = 0x%lx, config->key2 = 0x%lx, config->cksum = 0x%lx\n", config->key1, config->key2, config->cksum); conf_endian_fixup(config); } this is the fconfig -i RedBoot> fconfig -i Initialize non-volatile configuration - continue (y/n)? y Run script at boot: false Use BOOTP for network configuration: false Gateway IP address: 192.168.1.1 Local IP address: 192.168.1.100 Local IP address mask: 255.255.255.0 Default server IP address: 192.168.1.1 DNS domain name: <Not a string: 0x1FE32F5> DNS server IP address: 192.158.1.1 Network hardware address [MAC]: 0x7C:0x71:0x43:0xA6:0x7C:0x92 GDB connection port: 9000 Force console for special debug messages: false Network debug at boot time: false Update RedBoot non-volatile configuration - continue (y/n)? y and here are the results... config->key1 = 0xbadface, config->key2 = 0xdeaddead, config->cksum = 0x8d640ef3 ... Erase from 0x407e0000-0x407e1000: . config->key1 = 0xbadface, config->key2 = 0xffffffff, config->cksum = 0xffffffff config->key1 = 0xbadface, config->key2 = 0xffffffff, config->cksum = 0xffffffff ... Program from 0x01fe3000-0x01fe4000 at 0x407e0000: . config->key1 = 0xbadface, config->key2 = 0xffffffff, config->cksum = 0xffffffff The data at config_data is being corrupted during flash_erase, isn´t it? > > > Sergei > > > > Atte, > > TT > > > > > -- > > Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos > > and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss > ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [ECOS] Redboot_ROM config_data corrupted by flash_erase 2007-07-17 13:12 ` Tales Toledo @ 2007-07-17 19:04 ` Sergei Gavrikov 0 siblings, 0 replies; 4+ messages in thread From: Sergei Gavrikov @ 2007-07-17 19:04 UTC (permalink / raw) To: Tales Toledo; +Cc: ecos-discuss On Tue, Jul 17, 2007 at 10:12:41AM -0300, Tales Toledo wrote: > On 7/16/07, Sergei Gavrikov <w3sg@softhome.net> wrote: > >On Mon, Jul 16, 2007 at 12:50:52PM -0300, Tales Toledo wrote: > >> Hi, > >> > >> can flash_erase corrupt my config_data (I'm running Redboot from ROM)? > >> > >> I'm asking this because just before > >> > >> if ((stat = flash_erase(cfg_base, cfg_size, (void **)&err_addr)) != 0) { > >> diag_printf(" initialization failed at %p: %s\n", > >> err_addr, flash_errmsg(stat)); > >> > >> at fconfig.c I can get all config-key1, config->key2, config->cksum > >> with the right values. > >> > >> After run flash_erase and before run conf_endian_fixup + flash_program > >> the config_data is corruted and lost config->key2 and config->cksum. > >> > > > >That's normal if you had meant a "corruption" of a copy is placed in > >FLASH. The `FLASH_BlankValue' values (io/flash/include/flash_dev.h) > >should be there after flash_erase() ... -> flash_erase_block () calls. > >For the _most_ cases that area will be look as an array is filled by > >0xff. These is an example of *config, *backup_config, and *(struct > >_config *)cfg_base GDB displays for RedBoot 'fconfig -i' command, GDB is > >stopped in a middle of the flash_erase_block() function. This is just a > >demo for my platform > > > >(gdb) n > >324 if (*b_v != FLASH_BlankValue ) { > >3: *(struct _config *) cfg_base = {len = 0xffffffff, key1 = 0xffffffff, > > config_data = '�' <repeats 4080 times>, key2 = 0xffffffff, > > cksum = 0xffffffff} > >2: *backup_config = {len = 0x1000, key1 = 0xbadface, > > config_data = > >"\001\f\001\0boot_script\0\0\0\0\0\004\021\001\fboot_script_data\0boot_script", > >'\0' <repeats 513 times>, > >"\002\024\001\fboot_script_timeout\0boot_script\0\0\0\0\0\002\022\001\0console_baud_rate\0\0\226", > >'\0' <repeats 3450 times>, key2 = 0xdeaddead, cksum = 0xba13f4de} > >1: *config = {len = 0x1000, key1 = 0xbadface, > > config_data = > >"\001\f\001\0boot_script\0\0\0\0\0\004\021\001\fboot_script_data\0boot_script", > >'\0' <repeats 513 times>, > >"\002\024\001\fboot_script_timeout\0boot_script\0\0\0\0\0\002\022\001\0console_baud_rate\0\0\226", > >'\0' <repeats 3450 times>, key2 = 0xdeaddead, cksum = 0xba13f4de} > >(gdb) > > > >So, the flash_erase() call does (should do) an erasing (look at the > >GDB's display the *cfg_base , and then FLASH_PROGRAM() should do a real > >programming the `config' struct into the FLASH. You see, what there is > >such a sequence: flash_unlock (optional) -> flash_erase -> flash_program > >-> flash_lock (optional) there, so, you can believe the flash function > >naming. It's more interesting what will those values (key1, key2, crc) > >be after the FLASH_PROGRAM() call. > > This is the printf code used @ fconfig.c > > diag_printf("\nconfig->key1 = 0x%lx, config->key2 = 0x%lx, > config->cksum = 0x%lx\n", config->key1, config->key2, config->cksum); > if ((stat = flash_erase(cfg_base, cfg_size, (void **)&err_addr)) != > 0) { > diag_printf(" initialization failed at %p: %s\n", > err_addr, flash_errmsg(stat)); > } else { > diag_printf("\nconfig->key1 = 0x%lx, config->key2 = 0x%lx, > config->cksum = 0x%lx\n", config->key1, config->key2, config->cksum); > conf_endian_fixup(config); > diag_printf("\nconfig->key1 = 0x%lx, config->key2 = 0x%lx, > config->cksum = 0x%lx\n", config->key1, config->key2, config->cksum); > if ((stat = FLASH_PROGRAM(cfg_base, config, sizeof(struct > _config), (void **)&err_addr)) != 0) { > diag_printf("Error writing config data at %p: %s\n", > err_addr, flash_errmsg(stat)); > } > diag_printf("\nconfig->key1 = 0x%lx, config->key2 = 0x%lx, > config->cksum = 0x%lx\n", config->key1, config->key2, config->cksum); > conf_endian_fixup(config); > } > > this is the fconfig -i > > RedBoot> fconfig -i > Initialize non-volatile configuration - continue (y/n)? y > Run script at boot: false > Use BOOTP for network configuration: false > Gateway IP address: 192.168.1.1 > Local IP address: 192.168.1.100 > Local IP address mask: 255.255.255.0 > Default server IP address: 192.168.1.1 > DNS domain name: <Not a string: 0x1FE32F5> > DNS server IP address: 192.158.1.1 > Network hardware address [MAC]: 0x7C:0x71:0x43:0xA6:0x7C:0x92 > GDB connection port: 9000 > Force console for special debug messages: false > Network debug at boot time: false > Update RedBoot non-volatile configuration - continue (y/n)? y > > and here are the results... > > config->key1 = 0xbadface, config->key2 = 0xdeaddead, config->cksum = > 0x8d640ef3 > ... Erase from 0x407e0000-0x407e1000: . > > config->key1 = 0xbadface, config->key2 = 0xffffffff, config->cksum = > 0xffffffff > > config->key1 = 0xbadface, config->key2 = 0xffffffff, config->cksum = > 0xffffffff > ... Program from 0x01fe3000-0x01fe4000 at 0x407e0000: . > > config->key1 = 0xbadface, config->key2 = 0xffffffff, config->cksum = > 0xffffffff > > The data at config_data is being corrupted during flash_erase, isn´t it? I see, but that data should not be used by flash_erase(). Are you sure what your RedBoot sources are still so good is they were a few weeks ago? Well, I did insert same debug outputs there just to show my values by the stages, see an Appendix below. ...I suggest you, please, make an undo to origin sources and try all from scratch. I have a mind, If eCos PowerPC community still is silent, it seems they don't believe in any RedBoot FIS bug ;-) I don't remember, Did I ask you about your eCos tree date? Is that a freshmeat? Had your platform been included in anon CVS tree? And at the end, try to correct a mail subject, put there something like this, "PowerPC <your platform> RedBoot 'fconfig -i' issue". Make an accent on your hardware family. I think that would awake the target/platform experts (I promise that I won't shadow your asks in future :) Sergei --------------------------------------------------------------------- Appendix line 805 -- before erase line 809 -- after erase line 811 -- after endian fixup line 816 -- after program line 818 -- after endian fixup Initialize non-volatile configuration - continue (y/n)? y Run script at boot: false Console baud rate: 38400 Update RedBoot non-volatile configuration - continue (y/n)? y ... Unlock from 0x803e0000-0x803e1000: . line: 805, *config = {0xbadface, key2 = 0xdeaddead, crc = 0xba13f4de} line: 805, *backup_config = {0xbadface, key2 = 0xdeaddead, crc = 0xba13f4de} line: 805, *cfg_base = {0xbadface, key2 = 0xdeaddead, crc = 0xba13f4de} ... Erase from 0x803e0000-0x803e1000: . line: 809, *config = {0xbadface, key2 = 0xdeaddead, crc = 0xba13f4de} line: 809, *backup_config = {0xbadface, key2 = 0xdeaddead, crc = 0xba13f4de} line: 809, *cfg_base = {0xffffffff, key2 = 0xffffffff, crc = 0xffffffff} line: 811, *config = {0xbadface, key2 = 0xdeaddead, crc = 0xba13f4de} line: 811, *backup_config = {0xbadface, key2 = 0xdeaddead, crc = 0xba13f4de} line: 811, *cfg_base = {0xffffffff, key2 = 0xffffffff, crc = 0xffffffff} ... Program from 0x810e3000-0x810e4000 at 0x803e0000: . line: 816, *config = {0xbadface, key2 = 0xdeaddead, crc = 0xba13f4de} line: 816, *backup_config = {0xbadface, key2 = 0xdeaddead, crc = 0xba13f4de} line: 816, *cfg_base = {0xbadface, key2 = 0xdeaddead, crc = 0xba13f4de} line: 818, *config = {0xbadface, key2 = 0xdeaddead, crc = 0xba13f4de} line: 818, *backup_config = {0xbadface, key2 = 0xdeaddead, crc = 0xba13f4de} line: 818, *cfg_base = {0xbadface, key2 = 0xdeaddead, crc = 0xba13f4de} ... Lock from 0x803e0000-0x803e1000: . -- Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2007-07-17 19:04 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2007-07-16 15:50 [ECOS] Redboot_ROM config_data corrupted by flash_erase Tales Toledo 2007-07-16 21:49 ` Sergei Gavrikov 2007-07-17 13:12 ` Tales Toledo 2007-07-17 19:04 ` Sergei Gavrikov
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).