summaryrefslogtreecommitdiffstats
path: root/mboxd_pnor_partition_table.cpp
diff options
context:
space:
mode:
authorDeepak Kodihalli <dkodihal@in.ibm.com>2017-08-28 06:13:43 -0500
committerDeepak Kodihalli <dkodihal@in.ibm.com>2017-08-28 06:13:43 -0500
commit6e6aa3a9e20fd43935acaf5679553ff8fcbcd6c7 (patch)
treefe9bba0d8eedd67db9e5541c4ce52081c436099f /mboxd_pnor_partition_table.cpp
parent1e1bdc75b52fd403026da68b3404865bb13218db (diff)
downloadphosphor-mboxd-6e6aa3a9e20fd43935acaf5679553ff8fcbcd6c7.tar.gz
phosphor-mboxd-6e6aa3a9e20fd43935acaf5679553ff8fcbcd6c7.zip
vpnor: gracefully handle missing HBB partition
The first thing the virtual pnor enabled mboxd does is look for the host boot-loader partition. Not finding the same would result in an exception that was not handled, and hence mboxd would core. Commit this exception instead; mboxd still won't be able to load the host bootloader if HBB is missing. Change-Id: I9cd4fe74238267ed9d6635d84298da38ac3c36cc Signed-off-by: Deepak Kodihalli <dkodihal@in.ibm.com>
Diffstat (limited to 'mboxd_pnor_partition_table.cpp')
-rw-r--r--mboxd_pnor_partition_table.cpp31
1 files changed, 21 insertions, 10 deletions
diff --git a/mboxd_pnor_partition_table.cpp b/mboxd_pnor_partition_table.cpp
index e2125da..4837aa3 100644
--- a/mboxd_pnor_partition_table.cpp
+++ b/mboxd_pnor_partition_table.cpp
@@ -4,6 +4,8 @@
#include "mboxd_flash.h"
#include "pnor_partition_table.hpp"
#include "config.h"
+#include "xyz/openbmc_project/Common/error.hpp"
+#include <phosphor-logging/elog-errors.hpp>
#include <experimental/filesystem>
struct vpnor_partition_table
@@ -92,16 +94,25 @@ void vpnor_copy_bootloader_partition(const struct mbox_context *context)
size_t tocOffset = 0;
uint32_t tocSize = blTable.size() * eraseSize;
- // Copy TOC
- copy_flash(&local, tocOffset,
- static_cast<uint8_t*>(context->mem) + tocStart,
- tocSize);
- const pnor_partition& partition = blTable.partition(blPartitionName);
- size_t hbbOffset = partition.data.base * eraseSize;
- uint32_t hbbSize = partition.data.actual;
- // Copy HBB
- copy_flash(&local, hbbOffset,
- static_cast<uint8_t*>(context->mem) + hbbOffset, hbbSize);
+ using namespace phosphor::logging;
+ using namespace sdbusplus::xyz::openbmc_project::Common::Error;
+ try
+ {
+ // Copy TOC
+ copy_flash(&local, tocOffset,
+ static_cast<uint8_t*>(context->mem) + tocStart,
+ tocSize);
+ const pnor_partition& partition = blTable.partition(blPartitionName);
+ size_t hbbOffset = partition.data.base * eraseSize;
+ uint32_t hbbSize = partition.data.actual;
+ // Copy HBB
+ copy_flash(&local, hbbOffset,
+ static_cast<uint8_t*>(context->mem) + hbbOffset, hbbSize);
+ }
+ catch (InternalFailure& e)
+ {
+ commit<InternalFailure>();
+ }
}
void destroy_vpnor(struct mbox_context *context)
OpenPOWER on IntegriCloud