aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdriana Kobylak <anoo@us.ibm.com>2017-10-11 15:23:44 -0500
committerStewart Smith <stewart@linux.vnet.ibm.com>2017-11-09 22:11:44 -0600
commitb786e7ba1d34c5a4d8baa6304f4d930539cefac8 (patch)
tree97f072c5a41a7ffc9a3166f6c139a839c2cf7c21
parent370b8866871b5c2cf3286afbf19fc90282cb3508 (diff)
downloadskiboot-b786e7ba1d34c5a4d8baa6304f4d930539cefac8.zip
skiboot-b786e7ba1d34c5a4d8baa6304f4d930539cefac8.tar.gz
skiboot-b786e7ba1d34c5a4d8baa6304f4d930539cefac8.tar.bz2
pflash: Support for volatile flag
The volatile flag was added to the pnor image to indicate partitions that are cleared during a host power off. Display this flag from the pflash command. Signed-off-by: Adriana Kobylak <anoo@us.ibm.com> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
-rw-r--r--external/ffspart/ffspart.c3
-rw-r--r--external/pflash/pflash.c12
-rw-r--r--external/pflash/test/files/06-miscprint.ffs1
-rw-r--r--external/pflash/test/results/01-info.out13
-rw-r--r--external/pflash/test/results/06-miscprint.out9
-rw-r--r--libflash/ffs.h1
-rw-r--r--libflash/libffs.c4
-rw-r--r--libflash/libffs.h1
8 files changed, 32 insertions, 12 deletions
diff --git a/external/ffspart/ffspart.c b/external/ffspart/ffspart.c
index 7703477..a477018 100644
--- a/external/ffspart/ffspart.c
+++ b/external/ffspart/ffspart.c
@@ -295,6 +295,9 @@ int main(int argc, char *argv[])
case 'F':
user.miscflags |= FFS_MISCFLAGS_REPROVISION;
break;
+ case 'L':
+ user.miscflags |= FFS_MISCFLAGS_VOLATILE;
+ break;
/* Not sure these are valid */
case 'B':
user.miscflags |= FFS_MISCFLAGS_BACKUP;
diff --git a/external/pflash/pflash.c b/external/pflash/pflash.c
index 5b1be3c..d6b2b8e 100644
--- a/external/pflash/pflash.c
+++ b/external/pflash/pflash.c
@@ -115,12 +115,13 @@ static uint32_t print_ffs_info(struct ffs_handle *ffsh, uint32_t toc)
goto out;
}
- l = asprintf(&flags, "[%c%c%c%c%c]",
+ l = asprintf(&flags, "[%c%c%c%c%c%c]",
has_ecc(ent) ? 'E' : '-',
has_flag(ent, FFS_MISCFLAGS_PRESERVED) ? 'P' : '-',
has_flag(ent, FFS_MISCFLAGS_READONLY) ? 'R' : '-',
has_flag(ent, FFS_MISCFLAGS_BACKUP) ? 'B' : '-',
- has_flag(ent, FFS_MISCFLAGS_REPROVISION) ? 'F' : '-');
+ has_flag(ent, FFS_MISCFLAGS_REPROVISION) ? 'F' : '-',
+ has_flag(ent, FFS_MISCFLAGS_VOLATILE) ? 'V' : '-');
if (l < 0)
goto out;
@@ -169,7 +170,7 @@ static void print_flash_info(struct flash_details *flash)
printf("Name = %s\n", flash->name);
printf("Total size = %" PRIu64 "MB\t Flags E:ECC, P:PRESERVED, R:READONLY\n",
flash->total_size >> 20);
- printf("Erase granule = %2d%-13sB:BACKUP, F:REPROVISION\n",
+ printf("Erase granule = %2d%-13sB:BACKUP, F:REPROVISION, V:VOLATILE\n",
flash->erase_granule >> 10, "KB");
if (bmc_flash)
@@ -576,12 +577,13 @@ static void print_partition_detail(struct ffs_handle *ffsh, uint32_t part_id)
printf("Flags:\n");
- l = asprintf(&flags, "%s%s%s%s%s", has_ecc(ent) ? "ECC [E]\n" : "",
+ l = asprintf(&flags, "%s%s%s%s%s%s", has_ecc(ent) ? "ECC [E]\n" : "",
has_flag(ent, FFS_MISCFLAGS_PRESERVED) ? "PRESERVED [P]\n" : "",
has_flag(ent, FFS_MISCFLAGS_READONLY) ? "READONLY [R]\n" : "",
has_flag(ent, FFS_MISCFLAGS_BACKUP) ? "BACKUP [B]\n" : "",
has_flag(ent, FFS_MISCFLAGS_REPROVISION) ?
- "REPROVISION [F]\n" : "");
+ "REPROVISION [F]\n" : "",
+ has_flag(ent, FFS_MISCFLAGS_VOLATILE) ? "VOLATILE [V]\n" : "");
if (l < 0) {
fprintf(stderr, "Memory allocation failure printing flags!\n");
goto out;
diff --git a/external/pflash/test/files/06-miscprint.ffs b/external/pflash/test/files/06-miscprint.ffs
index 8f916f3..a0bd944 100644
--- a/external/pflash/test/files/06-miscprint.ffs
+++ b/external/pflash/test/files/06-miscprint.ffs
@@ -2,3 +2,4 @@ PRESERVED,0x00300,0x100,P,/dev/zero
READONLY,0x000400,0x100,R,/dev/zero
REPROVISION,0x500,0x100,F,/dev/zero
BACKUP,0x00000600,0x100,B,/dev/zero
+VOLATILE,0x00000700,0x100,V,/dev/zero
diff --git a/external/pflash/test/results/01-info.out b/external/pflash/test/results/01-info.out
index 43baf31..ba4c6fa 100644
--- a/external/pflash/test/results/01-info.out
+++ b/external/pflash/test/results/01-info.out
@@ -2,12 +2,13 @@ Flash info:
-----------
Name = FILE
Total size = 0MB Flags E:ECC, P:PRESERVED, R:READONLY
-Erase granule = 0KB B:BACKUP, F:REPROVISION
+Erase granule = 0KB B:BACKUP, F:REPROVISION, V:VOLATILE
TOC@0x00000000 Partitions:
-----------
-ID=00 part 0x00000000..0x00000300 (actual=0x00000300) [-----]
-ID=01 ONE 0x00000300..0x00000400 (actual=0x00000100) [E----]
-ID=02 TWO 0x00000400..0x00000500 (actual=0x00000100) [E---F]
-ID=03 THREE 0x00000500..0x00000600 (actual=0x00000100) [E---F]
-ID=04 FOUR 0x00000600..0x00000700 (actual=0x00000100) [E---F]
+ID=00 part 0x00000000..0x00000300 (actual=0x00000300) [------]
+ID=01 ONE 0x00000300..0x00000400 (actual=0x00000100) [E-----]
+ID=02 TWO 0x00000400..0x00000500 (actual=0x00000100) [E---F-]
+ID=03 THREE 0x00000500..0x00000600 (actual=0x00000100) [E---F-]
+ID=04 FOUR 0x00000600..0x00000700 (actual=0x00000100) [E---F-]
+ID=05 FIVE 0x00000700..0x00000800 (actual=0x00000100) [-----V]
diff --git a/external/pflash/test/results/06-miscprint.out b/external/pflash/test/results/06-miscprint.out
index e90976d..58aeaf9 100644
--- a/external/pflash/test/results/06-miscprint.out
+++ b/external/pflash/test/results/06-miscprint.out
@@ -34,3 +34,12 @@ Start End Actual
Flags:
BACKUP [B]
+Detailed partition information
+Name:
+VOLATILE (ID=05)
+
+Start End Actual
+0x00000700 0x00000800 0x00000100
+
+Flags:
+VOLATILE [V]
diff --git a/libflash/ffs.h b/libflash/ffs.h
index 1872253..26cb9d8 100644
--- a/libflash/ffs.h
+++ b/libflash/ffs.h
@@ -76,6 +76,7 @@ enum ffs_type {
#define FFS_MISCFLAGS_READONLY 0x40
#define FFS_MISCFLAGS_BACKUP 0x20
#define FFS_MISCFLAGS_REPROVISION 0x10
+#define FFS_MISCFLAGS_VOLATILE 0x08
/**
* struct __ffs_entry_user - On flash user data entries
diff --git a/libflash/libffs.c b/libflash/libffs.c
index 038f594..87c5197 100644
--- a/libflash/libffs.c
+++ b/libflash/libffs.c
@@ -723,7 +723,9 @@ int ffs_entry_user_set(struct ffs_entry *ent, struct ffs_entry_user *user)
if (user->vercheck & ~(FFS_VERCHECK_SHA512V | FFS_VERCHECK_SHA512EC))
return -1;
if (user->miscflags & ~(FFS_MISCFLAGS_PRESERVED | FFS_MISCFLAGS_BACKUP |
- FFS_MISCFLAGS_READONLY | FFS_MISCFLAGS_REPROVISION))
+ FFS_MISCFLAGS_READONLY | FFS_MISCFLAGS_REPROVISION |
+ FFS_MISCFLAGS_VOLATILE
+))
return -1;
memcpy(&ent->user, user, sizeof(*user));
diff --git a/libflash/libffs.h b/libflash/libffs.h
index a0f65a0..0610399 100644
--- a/libflash/libffs.h
+++ b/libflash/libffs.h
@@ -88,6 +88,7 @@ struct ffs_entry_user {
#define FFS_MISCFLAGS_READONLY 0x40
#define FFS_MISCFLAGS_BACKUP 0x20
#define FFS_MISCFLAGS_REPROVISION 0x10
+#define FFS_MISCFLAGS_VOLATILE 0x08
bool has_ecc(struct ffs_entry *ent);