[Skiboot] [PATCH v2] ffspart: Support flashing already ECC protected images
Samuel Mendoza-Jonas
sam at mendozajonas.com
Tue Dec 11 15:52:09 AEDT 2018
On Tue, 2018-12-11 at 15:29 +1100, Stewart Smith wrote:
> Samuel Mendoza-Jonas <sam at mendozajonas.com> writes:
> > On Mon, 2018-12-10 at 17:48 +1100, Stewart Smith wrote:
> > > We do this by assuming filenames with '.ecc' in them are already ECC
> > > protected.
> > >
> > > This solves a practical problem in transitioning op-build to use ffspart
> > > for pnor assembly rather than three perl scripts and a lot of XML.
> > >
> > > We also update the ffspart tests to take into account ECC requirements.
> > >
> > > Signed-off-by: Stewart Smith <stewart at linux.ibm.com>
> > > ---
> > > Changes since v1:
> > > - make the test suite pass
> > > ---
> > > external/ffspart/ffspart.c | 16 ++++++++++++++--
> > > external/ffspart/test/files/04-tiny-pnor2.out | Bin 2560 -> 2560 bytes
> > > .../ffspart/test/results/07-big-files.err | 2 +-
> > > external/ffspart/test/tests/04-tiny-pnor2 | 2 +-
> > > external/ffspart/test/tests/08-small-files | 2 +-
> > > 5 files changed, 17 insertions(+), 5 deletions(-)
> > >
> > > diff --git a/external/ffspart/ffspart.c b/external/ffspart/ffspart.c
> > > index eeee0d4d657b..bb46a9eaf311 100644
> > > --- a/external/ffspart/ffspart.c
> > > +++ b/external/ffspart/ffspart.c
> > > @@ -31,6 +31,7 @@
> > > #include <libflash/libflash.h>
> > > #include <libflash/libffs.h>
> > > #include <libflash/blocklevel.h>
> > > +#include <libflash/ecc.h>
> > > #include <common/arch_flash.h>
> > >
> > > /*
> > > @@ -250,6 +251,14 @@ static int parse_entry(struct blocklevel_device *bl,
> > >
> > > if (*line != '\0' && *(line + 1) != '\0') {
> > > filename = line + 1;
> > > +
> > > + /*
> > > + * Support flashing already ecc'd data as this is the case
> > > + * for POWER8 SBE image binary.
> > > + */
> > > + if (has_ecc(new_entry) && !strstr(filename, ".ecc"))
> > > + blocklevel_ecc_protect(bl, pbase, psize);
> >
> > If the entry has the ECC bit shouldn't we mark it protected regardless of
> > the contents of the file?
>
> The blocklevel_write() call will add ECC based on what's been
> blocklevel_ecc_protect()ed, and we don't have a
> blocklevel_write_but_i_did_ecc_already() call to bypass it... so this is
> a bit of a hack I guess. I do want to remove it eventually though.
Ah I see, we're kind of pretending it's not ECC at write time.. sounds
about right :)
Reviewed-by: Samuel Mendoza-Jonas <sam at mendozajonas.com>
>
> > > +
> > > data_fd = open(filename, O_RDONLY);
> > > if (data_fd == -1) {
> > > fprintf(stderr, "Couldn't open file '%s' for '%s' partition "
> > > @@ -269,9 +278,12 @@ static int parse_entry(struct blocklevel_device *bl,
> > > * Sanity check that the file isn't too large for
> > > * partition
> > > */
> > > + if (has_ecc(new_entry) && !strstr(filename, ".ecc"))
> > > + psize = ecc_buffer_size_minus_ecc(psize);
> > > if (pactual > psize) {
> >
> > I needed to stare at this for a while but I think I'm happy with it -
> > checking if the size of the non-ECC file is less than the size of the
> > ECC-partition less the ECC bits?
>
> yes.
>
More information about the Skiboot
mailing list