5345c51e | 21-Feb-2018 |
Andrew Jeffery <andrew@aj.id.au> |
test: Move tests to a separate Makefile fragment
Change-Id: I46d5b165ed668ace67ae237b16d65a24586dd87d Signed-off-by: Andrew Jeffery <andrew@aj.id.au> |
7f9c343a | 28-Feb-2018 |
Andrew Jeffery <andrew@aj.id.au> |
pnor_partition_table: Rework semantics of Table::size()
Table::size() now returns the exact table size in bytes, Table::capacity() returns the block-aligned size in bytes (capacity in terms of how m
pnor_partition_table: Rework semantics of Table::size()
Table::size() now returns the exact table size in bytes, Table::capacity() returns the block-aligned size in bytes (capacity in terms of how much the table could grow before expanding to another block), and Table::blocks() returns the size in blocks.
This helps out with code clarity around the codebase and enables the introduction of ToC-related integration tests.
The one wrinkle is vpnor_get_partition_table_size(), which is modified to call Table::blocks() but retains 'size' in its name. This is largely unimportant as the function will go away shortly.
Change-Id: I3becf47f2201df5fe0bed86fcb92d7b94d06ab11 Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
show more ...
|
b87aa329 | 26-Feb-2018 |
Andrew Jeffery <andrew@aj.id.au> |
pnor_partition_table: Log errors for invalid properties
Change-Id: Ifabbbf43800a0bc3ed7672207a3d78fd4a475e10 Signed-off-by: Andrew Jeffery <andrew@aj.id.au> |
e8a79ff3 | 26-Feb-2018 |
Andrew Jeffery <andrew@aj.id.au> |
pnor_partition{,_table}: Conform to logging requirements
See the Rules section of README.md for justification.
Change-Id: Ib5ac059b498abc152269e926fc750cb83cd75d6c Signed-off-by: Andrew Jeffery <an
pnor_partition{,_table}: Conform to logging requirements
See the Rules section of README.md for justification.
Change-Id: Ib5ac059b498abc152269e926fc750cb83cd75d6c Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
show more ...
|
f96bd16d | 25-Feb-2018 |
Andrew Jeffery <andrew@aj.id.au> |
pnor_partition_table: Make parseTocLine throw exceptions
Change-Id: I66dc8af4fede36c3c952df596040356e11a72644 Signed-off-by: Andrew Jeffery <andrew@aj.id.au> |
d976c9c9 | 26-Feb-2018 |
Andrew Jeffery <andrew@aj.id.au> |
pnor_partition_table: Drop Table ctor with default location
Make the caller be explicit about what they want. Also, rearrange calls in mboxd_pnor_partition_table.cpp to remove noise there as well.
pnor_partition_table: Drop Table ctor with default location
Make the caller be explicit about what they want. Also, rearrange calls in mboxd_pnor_partition_table.cpp to remove noise there as well.
Change-Id: I8e36101b84b1b24cf0edbedb744f8edca15a834a Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
show more ...
|
d394a787 | 20-Feb-2018 |
Andrew Jeffery <andrew@aj.id.au> |
pnor_partition_table: Move parseTocLine() out of Table class
This is the final patch in the ongoing effort to extract parseTocLine() from the Table class, enabling re-use in setup for test cases.
C
pnor_partition_table: Move parseTocLine() out of Table class
This is the final patch in the ongoing effort to extract parseTocLine() from the Table class, enabling re-use in setup for test cases.
Change-Id: I62bbcbba39fbd337e370dcc78aec6ef3cf337caa Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
show more ...
|
48595400 | 20-Feb-2018 |
Andrew Jeffery <andrew@aj.id.au> |
pnor_partition_table: Make writeSizes() private to namespace
This is part of the ongoing effort to extract parseTocLine() from the Table class, enabling reuse in setup for test cases.
Change-Id: I1
pnor_partition_table: Make writeSizes() private to namespace
This is part of the ongoing effort to extract parseTocLine() from the Table class, enabling reuse in setup for test cases.
Change-Id: I1817023347575843e5518343c83a7f2eae6302a4 Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
show more ...
|
faaa71ca | 20-Feb-2018 |
Andrew Jeffery <andrew@aj.id.au> |
pnor_partition_table: Hoist partition existence check from parseTocLine()
Enforce some separation of concerns: Parsing the text of a ToC entry is an operation independent of testing whether context
pnor_partition_table: Hoist partition existence check from parseTocLine()
Enforce some separation of concerns: Parsing the text of a ToC entry is an operation independent of testing whether context derived from the parsed data is valid.
Specifically, testing whether a file at a path derived from the ToC entry is valid inside the parser is unhelpful when we try to reuse the parser for test code, where we want to set up an environment as described by the ToC entry. Under this condition the file is of course not going to exist - we're parsing the ToC entry in order to create it.
So, lets hoist the test out to the caller, enabling re-use of the parser in the test code.
Change-Id: Ibc9b62c00b95b8296b48ccf45630cb5344347bd7 Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
show more ...
|
a76199bb | 20-Feb-2018 |
Andrew Jeffery <andrew@aj.id.au> |
pnor_partition_table: Make writeUserdata() private to namespace
This is part of the ongoing effort to extract parseTocLine() from the Table class, enabling reuse in setup for test cases.
Change-Id:
pnor_partition_table: Make writeUserdata() private to namespace
This is part of the ongoing effort to extract parseTocLine() from the Table class, enabling reuse in setup for test cases.
Change-Id: I846e67b728df7bf57fd132b21438a13248d426fc Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
show more ...
|
4cc2e8f3 | 20-Feb-2018 |
Andrew Jeffery <andrew@aj.id.au> |
pnor_partition_table: Make writeDefaults() private to namespace
This is part of the ongoing effort to extract parseTocLine() from the Table class, enabling reuse in setup for test cases.
Change-Id:
pnor_partition_table: Make writeDefaults() private to namespace
This is part of the ongoing effort to extract parseTocLine() from the Table class, enabling reuse in setup for test cases.
Change-Id: I0b888c028c61db2a555fa99a5abcbe339e657f95 Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
show more ...
|
54e91226 | 20-Feb-2018 |
Andrew Jeffery <andrew@aj.id.au> |
pnor_partition_table: Make writeNameAndId() private to namespace
This is part of the ongoing effort to extract parseTocLine() from the Table class, enabling reuse in setup for test cases.
Change-Id
pnor_partition_table: Make writeNameAndId() private to namespace
This is part of the ongoing effort to extract parseTocLine() from the Table class, enabling reuse in setup for test cases.
Change-Id: I676e536e651dff1b27d0e53ecbb96d8e5ae8f025 Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
show more ...
|
62de1aae | 20-Feb-2018 |
Andrew Jeffery <andrew@aj.id.au> |
pnor_partition_table: Return early in parseTocLine()
This is part of the ongoing effort to extract parseTocLine() from the Table class, enabling reuse in setup for test cases.
Change-Id: I0521f8272
pnor_partition_table: Return early in parseTocLine()
This is part of the ongoing effort to extract parseTocLine() from the Table class, enabling reuse in setup for test cases.
Change-Id: I0521f82727029db1ab6c59971c923fcec01b6fc9 Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
show more ...
|
581a4f2c | 20-Feb-2018 |
Andrew Jeffery <andrew@aj.id.au> |
pnor_partition_table: Extract preparePartitions() loop body
Create a new private method, parseTocLine(), to handle the function of the loop body. The eventual goal is to extract the function from th
pnor_partition_table: Extract preparePartitions() loop body
Create a new private method, parseTocLine(), to handle the function of the loop body. The eventual goal is to extract the function from the class completely and simply have parseTocLine() as a public function in the openpower::virtual_pnor namespace. This will facilitate testing of the virtual PNOR parts of the codebase.
Change-Id: Ib8c3b39eb9390cfc088a54abd45aab6f551775d3 Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
show more ...
|
f34db31d | 08-Mar-2018 |
Andrew Jeffery <andrew@aj.id.au> |
Format C++ files according to OpenBMC style guide
We don't touch the C yet as upstream hasn't got such a change in place.
Change-Id: Ie6cab4bf99df520bb6655b9b00ae31e762e3c57b Signed-off-by: Andrew
Format C++ files according to OpenBMC style guide
We don't touch the C yet as upstream hasn't got such a change in place.
Change-Id: Ie6cab4bf99df520bb6655b9b00ae31e762e3c57b Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
show more ...
|
25eca77f | 26-Feb-2018 |
Andrew Jeffery <andrew@aj.id.au> |
README: Begin documenting development style rules
The first rule enforces the use of stdout/stderr for logging. Rationale is provided in the README.
Change-Id: Ibb5b62ea1341aa951fd42b15e9cd14a83684
README: Begin documenting development style rules
The first rule enforces the use of stdout/stderr for logging. Rationale is provided in the README.
Change-Id: Ibb5b62ea1341aa951fd42b15e9cd14a836842032 Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
show more ...
|
c2c08685 | 01-Mar-2018 |
Andrew Jeffery <andrew@aj.id.au> |
test: system: Return memory size rather than mtd size in LPC ioctl
The old behaviour was an outright bug in the system framework. The size of the LPC reserved memory window has nothing to do with th
test: system: Return memory size rather than mtd size in LPC ioctl
The old behaviour was an outright bug in the system framework. The size of the LPC reserved memory window has nothing to do with the size of the flash.
Change-Id: Ie16686ac6df8fb3117fb46aa2eaab082873fd4d0 Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
show more ...
|
ee7af883 | 28-Feb-2018 |
Andrew Jeffery <andrew@aj.id.au> |
test: mbox: Type buf parameter to dump_buf() as `const void *`
This makes it a bit more ergonomic to use by not forcing the caller to cast.
Change-Id: I5d40715f4de84f174157a39d459dc1b40a94a949 Sign
test: mbox: Type buf parameter to dump_buf() as `const void *`
This makes it a bit more ergonomic to use by not forcing the caller to cast.
Change-Id: I5d40715f4de84f174157a39d459dc1b40a94a949 Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
show more ...
|
c3144042 | 25-Feb-2018 |
Andrew Jeffery <andrew@aj.id.au> |
test: Update tmpf to store data in /tmp, reformat names
Cleans up residuals from failed tests in the source tree by moving them to /tmp. Some were annoying to remove with prefixes like 'mbox', so ch
test: Update tmpf to store data in /tmp, reformat names
Cleans up residuals from failed tests in the source tree by moving them to /tmp. Some were annoying to remove with prefixes like 'mbox', so change the pattern as well to include '-store'.
Change-Id: I674664a372e7e15ec4c3cd93d33318c4135f33ba Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
show more ...
|
baea36d9 | 25-Feb-2018 |
Andrew Jeffery <andrew@aj.id.au> |
gitignore: Ignore all cscope files
Change-Id: I91dd5df23491d9377bcbbc529b08529818f06285 Signed-off-by: Andrew Jeffery <andrew@aj.id.au> |
44ac078b | 25-Feb-2018 |
Andrew Jeffery <andrew@aj.id.au> |
common: Improve readability and utility of MSG_*() macros
Ensures we can't dereference NULL if a logger hasn't been set, and cleans up the MSG_*() macros for readability.
Change-Id: I9808d8fe767261
common: Improve readability and utility of MSG_*() macros
Ensures we can't dereference NULL if a logger hasn't been set, and cleans up the MSG_*() macros for readability.
Change-Id: I9808d8fe7672613e90c705686d1eaf1e2edef38a Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
show more ...
|
7a3814b0 | 22-Feb-2018 |
Andrew Jeffery <andrew@aj.id.au> |
common: Ensure helpers are endian-safe
The specification states that all multibyte values communicated via mbox are little-endian[0]. Do the conversions in the helpers to enforce this property.
[0]
common: Ensure helpers are endian-safe
The specification states that all multibyte values communicated via mbox are little-endian[0]. Do the conversions in the helpers to enforce this property.
[0] https://github.com/openbmc/mboxbridge/blob/master/Documentation/mbox_protocol.md#information
Change-Id: I9f96281c439fd666cb1c9ae643454569d61f7a81 Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
show more ...
|
cafb002e | 20-Feb-2018 |
Andrew Jeffery <andrew@aj.id.au> |
test: Fix memory leak in write_flash_vpnor
Running the test suite when configuring the source via `./bootstrap.sh dev` leads to a failure of the write_flash_vpnor test with the report below in test-
test: Fix memory leak in write_flash_vpnor
Running the test suite when configuring the source via `./bootstrap.sh dev` leads to a failure of the write_flash_vpnor test with the report below in test-suite.log. Add the necessary cleanup to ensure the test suite passes cleanly.
=================================== mboxd 2.1.0: ./test-suite.log ===================================
.. contents:: :depth: 2
FAIL: test/write_flash_vpnor ============================
[ 1519173867.854683139] Write flash @ 0x00003000 for 0x00000008 from 0x7ffe94d51ae0 [ 1519173867.854904248] Didn't find the file in the desired partition so copying[/tmp/prsv.RY6KiO/TEST3] [ 1519173867.854979940] File copied from[/tmp/ro.dUeyxG/TEST3] to [/tmp/prsv.RY6KiO/TEST3] [ 1519173867.855082198] Write flash @ 0x00001000 for 0x00000008 from 0x7ffe94d51ae0 [ 1519173867.857098822] Write flash @ 0x00002000 for 0x00000008 from 0x7ffe94d51ae0 [ 1519173867.857249802] Write flash @ 0x00002003 for 0x0000001c from 0x7ffe94d51ae0 [ 1519173867.857806832] Write flash @ 0x00002000 for 0x00000008 from 0x7ffe94d51ae0 [ 1519173867.857955823] Write flash @ 0x00002000 for 0x00000001 from 0x7ffe94d51ae0 [ 1519173867.858045089] Write flash @ 0x00002001 for 0x00000001 from 0x7ffe94d51ae1 [ 1519173867.858120016] Write flash @ 0x00002002 for 0x00000001 from 0x7ffe94d51ae2 [ 1519173867.858273459] Write flash @ 0x00002000 for 0x00000008 from 0x7ffe94d51b20 [ 1519173867.855134488] Can't open the RO partition for write[ 1519173867.857323229] Offset is beyond the partition file length[0x00000008]
================================================================= ==15139==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 8 byte(s) in 1 object(s) allocated from: #0 0x7f98b42f6458 in operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xe0458) #1 0x56371c4cb52f in vpnor_create_partition_table_from_path /home/andrew/src/openbmc/phosphor-mboxd/mboxd_pnor_partition_table.cpp:40 #2 0x56371c502013 in main test/write_flash_vpnor.cpp:145 #3 0x7f98b225b1c0 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x211c0)
Direct leak of 2 byte(s) in 1 object(s) allocated from: #0 0x7f98b42f4d38 in __interceptor_calloc (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xded38) #1 0x56371c5003b6 in init(mbox_context*) test/write_flash_vpnor.cpp:115 #2 0x56371c501c36 in main test/write_flash_vpnor.cpp:137 #3 0x7f98b225b1c0 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x211c0)
Indirect leak of 4096 byte(s) in 1 object(s) allocated from: #0 0x7f98b42f6458 in operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xe0458) #1 0x56371c3fa0c0 in __gnu_cxx::new_allocator<unsigned char>::allocate(unsigned long, void const*) (/home/andrew/src/openbmc/phosphor-mboxd/test/write_flash_vpnor+0x2850c0) #2 0x56371c3f3483 in std::allocator_traits<std::allocator<unsigned char> >::allocate(std::allocator<unsigned char>&, unsigned long) (/home/andrew/src/openbmc/phosphor-mboxd/test/write_flash_vpnor+0x27e483) #3 0x56371c3ebf6c in std::_Vector_base<unsigned char, std::allocator<unsigned char> >::_M_allocate(unsigned long) (/home/andrew/src/openbmc/phosphor-mboxd/test/write_flash_vpnor+0x276f6c) #4 0x56371c3e3aa4 in std::vector<unsigned char, std::allocator<unsigned char> >::_M_default_append(unsigned long) (/home/andrew/src/openbmc/phosphor-mboxd/test/write_flash_vpnor+0x26eaa4) #5 0x56371c3d82c5 in std::vector<unsigned char, std::allocator<unsigned char> >::resize(unsigned long) (/home/andrew/src/openbmc/phosphor-mboxd/test/write_flash_vpnor+0x2632c5) #6 0x56371c3c623d in openpower::virtual_pnor::endianFixup(std::vector<unsigned char, std::allocator<unsigned char> > const&) /home/andrew/src/openbmc/phosphor-mboxd/pnor_partition_table.cpp:268 #7 0x56371c3c2366 in openpower::virtual_pnor::partition::Table::Table(std::experimental::filesystem::v1::__cxx11::path&&, unsigned long, unsigned long) /home/andrew/src/openbmc/phosphor-mboxd/pnor_partition_table.cpp:38 #8 0x56371c4cb844 in vpnor_create_partition_table_from_path /home/andrew/src/openbmc/phosphor-mboxd/mboxd_pnor_partition_table.cpp:45 #9 0x56371c502013 in main test/write_flash_vpnor.cpp:145 #10 0x7f98b225b1c0 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x211c0)
Indirect leak of 4096 byte(s) in 1 object(s) allocated from: #0 0x7f98b42f6458 in operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xe0458) #1 0x56371c3fa0c0 in __gnu_cxx::new_allocator<unsigned char>::allocate(unsigned long, void const*) (/home/andrew/src/openbmc/phosphor-mboxd/test/write_flash_vpnor+0x2850c0) #2 0x56371c3f3483 in std::allocator_traits<std::allocator<unsigned char> >::allocate(std::allocator<unsigned char>&, unsigned long) (/home/andrew/src/openbmc/phosphor-mboxd/test/write_flash_vpnor+0x27e483) #3 0x56371c3ebf6c in std::_Vector_base<unsigned char, std::allocator<unsigned char> >::_M_allocate(unsigned long) (/home/andrew/src/openbmc/phosphor-mboxd/test/write_flash_vpnor+0x276f6c) #4 0x56371c3e3aa4 in std::vector<unsigned char, std::allocator<unsigned char> >::_M_default_append(unsigned long) (/home/andrew/src/openbmc/phosphor-mboxd/test/write_flash_vpnor+0x26eaa4) #5 0x56371c3d82c5 in std::vector<unsigned char, std::allocator<unsigned char> >::resize(unsigned long) (/home/andrew/src/openbmc/phosphor-mboxd/test/write_flash_vpnor+0x2632c5) #6 0x56371c3d1b40 in openpower::virtual_pnor::partition::Table::allocateMemory(std::experimental::filesystem::v1::__cxx11::path const&) /home/andrew/src/openbmc/phosphor-mboxd/pnor_partition_table.cpp:78 #7 0x56371c3c3006 in openpower::virtual_pnor::partition::Table::preparePartitions() /home/andrew/src/openbmc/phosphor-mboxd/pnor_partition_table.cpp:165 #8 0x56371c3c2216 in openpower::virtual_pnor::partition::Table::Table(std::experimental::filesystem::v1::__cxx11::path&&, unsigned long, unsigned long) /home/andrew/src/openbmc/phosphor-mboxd/pnor_partition_table.cpp:36 #9 0x56371c4cb844 in vpnor_create_partition_table_from_path /home/andrew/src/openbmc/phosphor-mboxd/mboxd_pnor_partition_table.cpp:45 #10 0x56371c502013 in main test/write_flash_vpnor.cpp:145 #11 0x7f98b225b1c0 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x211c0)
Indirect leak of 432 byte(s) in 3 object(s) allocated from: #0 0x7f98b42f6458 in operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xe0458) #1 0x56371c5176b0 in void std::vector<std::experimental::filesystem::v1::__cxx11::path::_Cmpt, std::allocator<std::experimental::filesystem::v1::__cxx11::path::_Cmpt> >::_M_realloc_insert<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::experimental::filesystem::v1::__cxx11::path::_Type, unsigned long&>(__gnu_cxx::__normal_iterator<std::experimental::filesystem::v1::__cxx11::path::_Cmpt*, std::vector<std::experimental::filesystem::v1::__cxx11::path::_Cmpt, std::allocator<std::experimental::filesystem::v1::__cxx11::path::_Cmpt> > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, std::experimental::filesystem::v1::__cxx11::path::_Type&&, unsigned long&) (/home/andrew/src/openbmc/phosphor-mboxd/test/write_flash_vpnor+0x3a26b0)
Indirect leak of 144 byte(s) in 1 object(s) allocated from: #0 0x7f98b42f6458 in operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xe0458) #1 0x56371c4cb74b in vpnor_create_partition_table_from_path /home/andrew/src/openbmc/phosphor-mboxd/mboxd_pnor_partition_table.cpp:45 #2 0x56371c502013 in main test/write_flash_vpnor.cpp:145 #3 0x7f98b225b1c0 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x211c0)
SUMMARY: AddressSanitizer: 8778 byte(s) leaked in 8 allocation(s). FAIL test/write_flash_vpnor (exit status: 1)
Change-Id: I7d1a5262833146794e0298084e828e14821041b7 Fixes: openbmc/openbmc#2866 Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
show more ...
|
e570740d | 01-Feb-2018 |
Andrew Jeffery <andrew@aj.id.au> |
pnor_partition_table: Fix printf() format specifier for size_t
On x86_64 we receive the following warning from GCC:
In file included from pnor_partition_table.cpp:2:0: pnor_partition_table.
pnor_partition_table: Fix printf() format specifier for size_t
On x86_64 we receive the following warning from GCC:
In file included from pnor_partition_table.cpp:2:0: pnor_partition_table.cpp: In member function ‘const pnor_partition& openpower::virtual_pnor::partition::Table::partition(size_t) const’: common.h:37:61: error: format ‘%x’ expects argument of type ‘unsigned int’, but argument 3 has type ‘size_t {aka long unsigned int}’ [-Werror=format=] #define MSG_ERR(f_, ...) mbox_log(LOG_ERR, f_, ##__VA_ARGS__) ^ pnor_partition_table.cpp:218:5: note: in expansion of macro ‘MSG_ERR’ MSG_ERR("Partition corresponding to offset %x not found", offset); ^~~~~~~
The type of %x may not match the size of the type on the host system. Use %zu to avoid a compiler warning.
Change-Id: I79b0a33af6fc4e0c06c60457e89d0c4125d1e39d Tested: Changed the format specifier and recompiled, observed no warnings Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
show more ...
|
acb32ef7 | 05-Dec-2017 |
Adriana Kobylak <anoo@us.ibm.com> |
pnor_partition_table: Parse all miscellaneous user flags from TOC
Add support for the remaining miscellaneous flags specified in the Hostboot FFS header, specifically the CLEARECC flag:
https:/
pnor_partition_table: Parse all miscellaneous user flags from TOC
Add support for the remaining miscellaneous flags specified in the Hostboot FFS header, specifically the CLEARECC flag:
https://github.com/open-power/hostboot/blob/master/src/usr/pnor/common/ffs_hb.H
This requires a change to how the properties string was being parsed so we can differentiate between the ECC and CLEARECC options.
In detail:
Issue openbmc/openbmc#2704 captures a failure where Hostboot detects flash corruption on an FFS partition with ECC enabled. In some instances, configuration of FFS partitions allows Hostboot to "fix" ECC errors by clearing the entire partition and trying again. In this case, the attempt fails:
--== Welcome to Hostboot hostboot-e223708/hbicore.bin ==--
4.01970|secure|SecureROM valid - enabling functionality 4.01974|secure|Booting in non-secure mode. 5.93358|ISTEP 6. 5 - host_init_fsi 6.06661|ISTEP 6. 6 - host_set_ipl_parms 6.07597|ECC error in PNOR flash in section offset 0x00026000
6.07604|System shutting down with error status 0x60F
Looking at the TOC, we find 0x26000 is in HBEL:
# cat /tmp/pnor.toc version=IBM-witherspoon-ibm-OP9_v1.19_1.121 extended_version=op-build-v1.19-326-g20bf99a-dirty,buildroot-2017.08-8-g5e23247,skiboot-v5.9.8,hostboot-7f4ced1,linux-4.13.16-openpower1-p686edfa,petitboot-v1.6.3-p191b3ea,machine-xml-758eb02,occ-84f3564,hostboot-binaries-38248b4,capp-ucode-p9-dd2-v2,sbe-99e2fe2 partition00=part,0x00000000,0x00001000,00,READWRITE partition01=HBEL,0x00008000,0x0002c000,00,ECC,REPROVISION,READWRITE partition02=GUARD,0x0002c000,0x00031000,00,ECC,PRESERVED,REPROVISION
Except, Dan Crowell identified that the reported offset is merely *indirectly* related to the offending location in the PNOR layout description:
1) There is a bug in the openbmc code that causes them to remove space from our pnor layout. We don't think that has a functional problem but it does confuse things. The number pointed out in the printk was pointing me at the HBEL partition but the problem is really inside the GUARD partition. Adriana is going to be fixing this issue.
The GUARD partition requires the ClearOnEccErr flag[1], however Hostboot's output indicates this action isn't taken; phosphor-mboxd failed to add this information to the dynamically generated TOC data structure presented to Hostboot.
Thus, add support for all miscellaneous flags to the ToC generator, allowing the ClearOnEccErr (CLEARECC) flag to be propagated.
[1] https://github.com/open-power/pnor/blob/22a9eadc0b2afbd2aca1e054faa2cca90e7760c2/p9Layouts/defaultPnorLayout_64.xml#L90
The bug was confirmed on a Witherspoon system by creating a dummy GUARD partition from /dev/urandom and beginning IPL. Leaving the dummy GUARD in place, mboxd was replaced with the patched build and the host rebooted. Hostboot successfully cleared the partition and triggered a reboot, then successfully booted to Petitboot.
Resolves openbmc/openbmc#2704
Tested: As described above Change-Id: I21c9bbc60b8c503194fcea03e74ab1d08aff57fe Signed-off-by: Adriana Kobylak <anoo@us.ibm.com> [arj: Reworked the commit message to describe the bug and fallout] Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
show more ...
|