This is the mail archive of the
ecos-discuss@sources.redhat.com
mailing list for the eCos project.
Re: fis free command
- From: "Chris Garry" <cgarry at sweeneydesign dot co dot uk>
- To: "Gary Thomas" <gary at mlbassoc dot com>
- Cc: "eCos Discussion" <ecos-discuss at sources dot redhat dot com>
- Date: Sat, 1 Nov 2003 13:16:21 -0000
- Subject: Re: [ECOS] fis free command
- Organization: Sweeney Design
- References: <003c01c39fdc$bc7631f0$500ba8c0@jasper> <1142.62.166.230.82.1067673372.squirrel@www.chez-thomas.org> <003401c3a06b$dae4d300$500ba8c0@jasper>
- Reply-to: "Chris Garry" <cgarry at sweeneydesign dot co dot uk>
> > > 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?
--
Chris
--
Before posting, please read the FAQ: http://sources.redhat.com/fom/ecos
and search the list archive: http://sources.redhat.com/ml/ecos-discuss