This is the mail archive of the ecos-discuss@sources.redhat.com mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: fis free command


On Sat, 2003-11-01 at 06:16, Chris Garry wrote:
> > > > I just re-built RedBoot and noticed a small problem with the fis free
> > > > command. Output from RedBoot below:
> > > >
> > > > -- Begin --
> > > > RedBoot(tm) bootstrap and debug environment [ROM]
> > > > Non-certified release, version E7T-DBoard - built 16:51:24, Oct 31 2003
> > > >
> > > > Copyright (C) 2000, 2001, 2002, Red Hat, Inc.
> > > >
> > > > RAM: 0x00000000-0x00080000, [0x00017cc8-0x0006f000] available
> > > >      0x01900000-0x03900000, [0x01900000-0x03900000] available
> > > > FLASH: 0x01800000 - 0x01880000, 128 blocks of 0x00001000 bytes each.
> > > > RedBoot> fis free
> > > >   0x0183B000 .. 0x0187E000
> > > >   0x01880000 .. 0x0187FFFF
> > > > RedBoot>
> > > > -- End --
> > > >
> > > > The last line of output from the fis free command
> > > > (0x01880000 .. 0x0187FFFF) is bogus since the highest FLASH address
> > > > is 0x0187FFFF.
> > > >
> > > > Has this been seen on other platforms?
> > > 
> > > No.  What does 'fis list' show?
> > > 
> > 
> > RedBoot> fis free
> >   0x0183B000 .. 0x0187E000
> >   0x01880000 .. 0x0187FFFF
> > RedBoot> fis list
> > Name              FLASH addr  Mem addr    Length      Entry point
> > (reserved)        0x01800000  0x01800000  0x00010000  0x00000000
> > RedBoot[post]     0x01810000  0x01810000  0x00020000  0x00000000
> > support.fpga      0x01830000  0x01900000  0x0000B000  0x01900000
> > RedBoot config    0x0187E000  0x0187E000  0x00001000  0x00000000
> > FIS directory     0x0187F000  0x0187F000  0x00001000  0x00000000
> > RedBoot>
> > 
> > > Note: 'fis free' has recently been changed to believe the values in
> > > the fis directory.  If it is incorrect, then all bets are off.  A
> > > configuration control can be used to restore the previous [dubious]
> > > behaviour.
> > 
> > I rebuilt RedBoot with CYGDAT_REDBOOT_FIS_MAX_FREE_CHUNKS
> > disabled and 'fis free' worked correctly.  I agree that the new 'fis free'method is
> > better so I'll have a look at what is going wrong on my target.
> > 
> > Chris
> > 
> 
> Okay, the problem looks to be in the find_free function.
> This fix works for me:
> 
> Index: redboot/current/src/flash.c
> ===================================================================
> RCS file: /cvs/ecos/ecos/packages/redboot/current/src/flash.c,v
> retrieving revision 1.58
> diff -u -5 -b -p -r1.58 flash.c
> --- redboot/current/src/flash.c 15 Oct 2003 15:52:03 -0000      1.5
> +++ redboot/current/src/flash.c 1 Nov 2003 13:07:00 -0000
> @@ -536,11 +536,11 @@ find_free(struct free_chunk *chunks)
>              for (idx = 0;  idx < num_chunks;  idx++) {
>                  if ((img->flash_base >= chunks[idx].start) &&
>                      (img->flash_base <= chunks[idx].end)) {
>                      if (img->flash_base == chunks[idx].start) {
>                          chunks[idx].start += img->size;
> -                        if (chunks[idx].start == chunks[idx].end)
> +                        if (chunks[idx].start >= chunks[idx].end)
>                              // This free chunk has collapsed
>                              while (idx < (num_chunks-1)) {
>                                  chunks[idx] = chunks[idx+1];
>                              }
>                              num_chunks--;
> 
> 
> Would this fix be safe for other targets?

Yes, this does appear to be a safe fix.  I'll check it in.

-- 
Gary Thomas <gary@mlbassoc.com>
MLB Associates


-- 
Before posting, please read the FAQ: http://sources.redhat.com/fom/ecos
and search the list archive: http://sources.redhat.com/ml/ecos-discuss


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]